chronojump r351 - trunk/chronopic-tests



Author: xaviblas
Date: Thu Jan 24 19:23:21 2008
New Revision: 351
URL: http://svn.gnome.org/viewvc/chronojump?rev=351&view=rev

Log:
Added chronopic-tests (C and C#)


Added:
   trunk/chronopic-tests/
   trunk/chronopic-tests/Changelog
   trunk/chronopic-tests/Makefile
   trunk/chronopic-tests/README.txt
   trunk/chronopic-tests/chronopic-serial-conf.c
   trunk/chronopic-tests/chronopic.c
   trunk/chronopic-tests/chronopic.cs
   trunk/chronopic-tests/chronopic.h
   trunk/chronopic-tests/termansi.c
   trunk/chronopic-tests/termansi.h
   trunk/chronopic-tests/test-precision.c
   trunk/chronopic-tests/test-saltos.c
   trunk/chronopic-tests/test-saltos.mono.cs
   trunk/chronopic-tests/test-tramas.c
   trunk/chronopic-tests/test.cs
   trunk/chronopic-tests/test.prj

Added: trunk/chronopic-tests/Changelog
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/Changelog	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,43 @@
+2004-10-10  Juan Gonzalez <juan iearobotics com>
+            -Comenzado test-gsalta-hw. Se lee de la entrada estandar,
+             detectando las tramas que viene del hw de gsalta.
+            -Probado con gsalta2.asm. Funciona correctamente.
+            -Para probar hay que hacer:
+               $ cat /dev/ttyS0 | ./test-gsalta-hw
+               Al apretar el pulsador, aparecera su estado y el tiempo
+               transcurrido desde el ultimo cambio.
+2004-10-11  Juan Gonzalez <juan iearobotics com>
+            -Se tiene en cuenta el tiempo maximo. Se imprime "> 65.280 ms"
+             cuando ha llegado al maximo.
+            -Anadidos colores en la impresion (usando el modulo termansi.c)
+2004-10-12  Juan Gonzalez <juan iearobotics com>
+            -Cambiada la precision. La version gsalta5 envia el tiempo
+             en decimas de ms (0.1ms).
+            -Ahora se imprime "> 6.538 ms" cuando llega al maximo
+2004-10-16  Juan Gonzalez <juan iearobotics com>
+            -(Cambios hechos con Xavi)
+            
+2005-02-04  Juan Gonzalez <juan iearobotics com>
+            -Programa chronopic-serial-conf.c, para configurar el pueto
+             serie para trabajar con ChronoPic
+            -Metido en el CVS de Software-libre.org
+            -Programa test-tramas, para visualizar las tramas enviadas
+             por ChronoPic
+2005-02-05  Juan Gonzalez <juan iearobotics com>
+            -Chronopic-serial-conf:
+              -Anadido parametro -h para obtener ayuda
+            -test-tramas:
+              -La fuente de datos puede ser la entrada estandar o el 
+               puerto serie.
+              -Anadido parametro -h para la ayuda
+            -chronopic.c: Funciones de procesado de las tramas 
+               para chronopic. Para ser usado por cualquier programa que
+               quiera acceder a chronopic.
+            -test-precision:
+              -Validacion de Chronopic
+              -Anadido parametro -h para la ayuda
+            -test-saltos: Medir el tiempo de vuelo de los saltos
+            -Creada libchronopic.so
+2005-02-06  Juan Gonzalez <juan iearobotics com>
+            -Creado modulo chronopic.cs, para Mono (c#)
+            -test-saltos.mono, medir el tiempo de vuelo en Mono

Added: trunk/chronopic-tests/Makefile
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/Makefile	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,123 @@
+# **************************************************************************
+# Fichero makefile.
+# --------------------------------------------------------------------------
+# Licencia GPL. Juan Gonzalez Gomez
+# --------------------------------------------------------------------------
+#
+#***************************************************************************
+
+
+# Edited for Debian GNU/Linux.
+DESTDIR =
+
+# ÂDÃnde poner los binarios en el 'make install'?
+BIN  = $(DESTDIR)/usr/local/bin
+
+#---- Compilador
+CC = gcc
+CFLAGS = -Wall
+
+#-- Compilador de C#
+MCS = mcs
+
+#-------- Nombres y dependencias de los programas a construir
+NAME1= chronopic-serial-conf
+DEP1= $(NAME1).o chronopic.o
+
+NAME2= test-tramas
+DEP2= $(NAME2).o chronopic.o termansi.o 
+
+NAME3= test-precision
+DEP3= $(NAME3).o chronopic.o
+
+NAME4= test-saltos
+DEP4=  $(NAME4).o chronopic.o
+
+NAME5= test-saltos.mono
+DEP5 = $(NAME5).cs $(DLL_CHRONOPIC).dll
+
+NAME6= test
+DEP6 = $(NAME6).cs $(DLL_CHRONOPIC).dll
+
+LIBCHRONOPIC = libchronopic.so
+LIBCHRONOPIC_DEP = chronopic.o 
+
+DLL_CHRONOPIC = chronopic
+
+all: test test-mono
+
+#-- Construccion de los ejemplos de prueba en c
+test: $(NAME1) $(NAME2)  $(NAME3) $(NAME4)
+
+#-- Construccion de los ejemplos de prueba en Mono
+test-mono: $(NAME5).exe $(NAME6).exe
+
+#--------------------------
+#  Reglas
+#--------------------------
+
+$(NAME1): $(DEP1)
+	    $(CC) -o $(NAME1) $(DEP1) 
+
+clean::
+	  rm -f $(NAME1) $(DEP1) 
+
+#---------------------------------------
+$(NAME2): $(DEP2)
+	    $(CC) -o $(NAME2) $(DEP2) 
+
+clean::
+	  rm -f $(NAME2) $(DEP2) 
+
+#---------------------------------------
+$(NAME3): $(DEP3)
+	    $(CC) -o $(NAME3) $(DEP3) 
+
+clean::
+	  rm -f $(NAME3) $(DEP3) 
+    
+#---------------------------------------
+$(NAME4): $(DEP4)
+	    $(CC) -o $(NAME4) $(DEP4) 
+
+clean::
+	  rm -f $(NAME4) $(DEP4)     
+
+
+# ---- Generacion de la libreria libchronopic
+$(LIBCHRONOPIC):  $(LIBCHRONOPIC_DEP)
+	           $(CC) -shared -W1,-soname,$(LIBCHRONOPIC) -o $(LIBCHRONOPIC) \
+                   $(LIBCHRONOPIC_DEP)
+clean::
+	  rm -f $(LIBCHRONOPIC) $(LIBCHRONOPIC_DEP)
+    
+#----- Crear la DLL
+$(DLL_CHRONOPIC).dll: $(LIBCHRONOPIC) $(DLL_CHRONOPIC).cs
+	 $(MCS) -unsafe -target:library $(DLL_CHRONOPIC).cs \
+          -o $(DLL_CHRONOPIC).dll     
+    
+clean::
+	  rm -f $(DLL_CHRONOPIC).dll 
+    
+#-------------------------------
+# EJEMPLOS DE PRUEBA EN C#
+#-------------------------------
+$(NAME5).exe: $(DEP5)
+	 $(MCS) $(NAME5).cs -unsafe -r $(DLL_CHRONOPIC).dll -o $(NAME5).exe 
+   
+clean::
+	  rm -f $(NAME5).exe       
+    
+
+$(NAME6).exe: $(DEP6)
+	 $(MCS) $(NAME6).cs -o $(NAME6).exe -r $(DLL_CHRONOPIC).dll -unsafe \
+          -pkg:gtk-sharp 
+   
+clean::
+	  rm -f $(NAME6).exe       
+
+#--------------------------
+#  REGLAS GENERICAS
+#--------------------------
+.c.o:		
+		$(CC) $(CFLAGS) -c $<

Added: trunk/chronopic-tests/README.txt
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/README.txt	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,19 @@
+Pequenas utilidades para realizar pruebas con el cronometro de chronojump
+
+--------------------------------------------------------------------------
+PROGRAMAS EJEMPLO EN C:
+
+* chronopic-serial-conf: Configuracion del puerto serie para trabajar 
+                         con ChronoPIC
+
+* test-tramas: Visualizar las tramas que envia ChronoPIC
+
+* test-precision: Mostrar periodo y frecuencia de senales cuadradas. Se
+  utiliza para calibracion y validacion de Chronopic
+  
+* test-saltos: Medir el tiempo de vuelo de los saltos
+
+--------------------------------------------------------------------------
+PROGRAMAS EJEMPLO EN MONO:
+
+* test-saltos.mono: Medir el tiempo de vuelo de los saltos

Added: trunk/chronopic-tests/chronopic-serial-conf.c
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/chronopic-serial-conf.c	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,132 @@
+/***************************************************************************/
+/* chronopic-serial-conf.c                                                 */
+/* (c) Juan Gonzalez. 2004                                                 */
+/*-------------------------------------------------------------------------*/
+/* Configurar el puerto serie para trabajar con chronopic                  */
+/* Este programa tiene las siguientes funciones:                           */
+/*                                                                         */
+/*  1) Configurar el puerto serie para poder acceder desde el PC al        */
+/*     cronometro (chronopic). La velocidad se establece a 9600 baudios y  */
+/*     se usa la configuracion N81. Al dejarlo asi configurado, es posible */
+/*     leer las tramas de cronojump directamente abriendo el dispositivo   */
+/*     /dev/ttyS0. Resulta muy util para acceder a chronopic desde otro    */
+/*     lenguaje de programacion distinto de C, como por ejemplo C#, Python */
+/*     Java, etc...                                                        */
+/*                                                                         */
+/*  2) Tener disponibles las funciones en C, para poderlas utilizar        */
+/*     desde otros programas en C, o crear una libreria especifica         */
+/*-------------------------------------------------------------------------*/
+/* Licencia GPL                                                            */
+/***************************************************************************/
+/*-------------------------------------------------------------------------
+ $Id: chronopic-serial-conf.c,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/chronopic-serial-conf.c,v $
+---------------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+//-- Las funciones de manejo del puerto serie se encuentran en el 
+//-- ficher sg-serial.c
+#include "chronopic.h"
+
+//-- Dispositivo serie
+char disp_serie[80]; 
+
+
+/**********************/
+/* Imprimir la ayuda  */
+/**********************/
+void help(void)
+{
+  printf ("\n");
+  printf (
+    "Forma de uso:   chronopic-serial-conf dispositivo_serie [opciones]\n");
+  printf ("Opciones:\n");
+  printf ("    -h : Mostrar esta ayuda\n\n");
+  printf ("Ejemplo: chronopic-serial-conf /dev/ttyS0\n");
+  printf ("\n");
+}
+
+/*****************************************************************/
+/* Analizar los parametros pasados desde la linea de comandos    */
+/*---------------------------------------------------------------*/
+/* ENTRADAS: Argumentos de la funcion main()                 	   */
+/* DEVUELVE:                                                     */
+/*    0 : Error                                                  */
+/*    1 : OK                                                     */
+/*****************************************************************/
+int analizar_parametros(int argc, char* argv[])
+{
+  int c;
+
+  if (argc<2) {
+    printf ("\nERROR: No se ha especificado dispositivo serie\n");
+    printf ("Utilice el parametro -h para obtener ayuda\n\n");
+    return 0;
+  }  
+  
+  //-- Obtener el dispositivo serie
+  strcpy(disp_serie,argv[1]);
+  
+  //-- Obtener el resto de parametros
+  while ((c = getopt(argc, argv, ":h"))!=EOF) {
+    switch (c) {
+      case 'h':
+      default: help();
+        return 0;
+    }
+  }
+  return 1;
+}
+
+/*****************************/
+/* Informacion del programa  */
+/*****************************/
+void presenta()
+{
+  printf ("\n");
+	printf (
+   "Chronopic-serial-conf. (c) Juan Gonzalez. Febrero 2005. Licencia GPL\n");
+	printf (
+   "Configuracion del puerto serie para trabajar con ChronoPIC\n");
+  printf ("Proyecto ChronoJump\n");
+	printf ("\n");
+}
+
+/*----------------*/
+/*     MAIN       */
+/*----------------*/
+int main (int argc, char **argv)
+{
+  int serial_fd=0;
+  int ok;
+  
+  presenta();
+  
+	ok=analizar_parametros(argc,argv);
+	if (!ok) return 0;
+  
+  //-- Abrir el puerto serie. Por defecto se abre con los parametros
+  //-- necesario en Chronopic
+  serial_fd=chronopic_open(disp_serie);
+
+  if (serial_fd==-1) {
+    printf ("\n");
+    printf ("Error al abrir puerto serie %s\n",argv[1]);
+    perror("ERROR: ");
+    return 1;
+  }
+  
+  printf ("\n");
+  printf ("-------------------------------------------\n");
+  printf (" Puerto serie configurado  para Chronopic  \n");
+  printf ("-------------------------------------------\n");
+  
+  //-- Cerrar puerto serie
+  chronopic_close(serial_fd);
+  
+  return 0;
+}

Added: trunk/chronopic-tests/chronopic.c
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/chronopic.c	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,306 @@
+/***********************************************************/
+/* chronopic.c        Juan Gonzalez Gomez. Febrero 2005    */
+/*---------------------------------------------------------*/
+/* Funciones de acceso a chronopic                         */
+/* Licencia GPL                                            */
+/***********************************************************/
+/*------------------------------------------------------------------------
+ $Id: chronopic.c,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/chronopic.c,v $
+--------------------------------------------------------------------------*/
+#include <stdio.h>
+#include <termios.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include "chronopic.h"
+
+
+/*********************************/
+/* PROTOTIPOS FUNCIONES PRIVADAS */
+/*********************************/
+int sg_trama_cambio_read(int serial_fd, unsigned char *trama);
+
+/*-----------------------------------------------------------------------*/
+/*   F U N C I O N E S      D E      I N T E R F A Z                     */
+/*-----------------------------------------------------------------------*/
+
+/********************************************************************/
+/* Abrir el puerto serie y configurarlo para trabajar con chronopic */
+/*------------------------------------------------------------------*/
+/* ENTRADA:                                                         */
+/*   disp: cadena con el dispositivo serie                          */
+/*                                                                  */
+/* DEVUELVE:                                                        */
+/*   -El descriptor del puerto serie ó si ha ocurrido un error   */
+/********************************************************************/
+int chronopic_open(char *disp)
+{
+  struct termios newtermios;
+  int fd;
+
+  fd = open(disp,O_RDWR | O_NOCTTY); /* Abrir puerto serie */
+
+  /* Modificar los atributos */
+  newtermios.c_cflag= CBAUD | CS8 | CLOCAL | CREAD;
+  newtermios.c_iflag=IGNPAR;
+  newtermios.c_oflag=0;
+  newtermios.c_lflag=0;
+  newtermios.c_cc[VMIN]=1;
+  newtermios.c_cc[VTIME]=0;
+
+  /* Establecer velocidad por defecto */
+  cfsetospeed(&newtermios,B9600);
+  cfsetispeed(&newtermios,B9600);
+  
+  /* Vaciar los buffers de entrada y salida */
+  if (tcflush(fd,TCIFLUSH)==-1) {
+    return -1;
+  }
+
+  /* Vaciar buffer de salida */
+  if (tcflush(fd,TCOFLUSH)==-1) {
+    return -1;
+  }
+
+  /* Escribir los nuevos atributos */
+  if (tcsetattr(fd,TCSANOW,&newtermios)==-1) {
+    return -1;
+  }  
+
+  return fd;
+}
+
+/********************************************************************/
+/* Cerrar el puerto serie y finalizar sesion con Chronopic          */
+/*------------------------------------------------------------------*/
+/* ENTRADA:                                                         */
+/*   fd: Descriptor del fichero                                     */
+/********************************************************************/
+void chronopic_close(int fd)
+{
+  close(fd);
+}
+
+/***********************************************************************/
+/* Leer una trama y devolver el estado de la plataforma y el tiempo    */
+/* transcurrido desde la ultima transicion                             */
+/*                                                                     */
+/*  ENTRADAS:                                                          */
+/*    -fd: Descriptor del puerto serie, donde esta conectado ChronoPic */
+/*                                                                     */
+/*  SALIDAS:                                                           */
+/*    -t : Tiempo transcurrido                                         */
+/*    -estado: Estado de la plataforma:                                */
+/*        * 0 --> OFF. No hay nadie sobre la plataforma                */
+/*        * 1 --> ON.  Hay alguien apoyado                             */
+/*                                                                     */
+/*  DEVUELVE:                                                          */
+/*    -1 : Error en la lectura de la trama                             */
+/*    0  : Timeout                                                     */
+/*    1  : Trama leida correctamente                                   */
+/***********************************************************************/
+int chronopic_get_trama_cambio(int fd, double *t, int *estado)
+{
+  int n;
+  unsigned char trama[10];
+  
+  //-- Esperar a que llegue una trama
+  n=sg_trama_cambio_read(fd,trama);
+  
+  //-- Timeout o algun error en recepcion
+  if (n!=1) return n;
+  
+  //-- Analizar si es una trama de cambio
+  if (trama[0]!='X') {
+    printf ("Error. Trama desconocida\n");
+    return -1;
+  }
+  
+  //-- Obtener el estado
+  if (trama[1]!=0 && trama[1]!=1) {
+    printf ("Error. Estado no valido\n");
+    return -1;
+  }
+  *estado = (int)(trama[1]&0xff);
+  
+  //-- Obtener el tiempo en milisegundos
+  //-- El Chronopic devuelve 3 bytes, que se obtienen en las posiciones
+  //-- 2, 3 y 4 de la trama, siendo trama[2] el de mayor peso
+  //-- Esta en unidades de 8 micro-segundos, por lo que hay que multiplicar
+  //-- por 8 para obtenerlo en microseungos. Finalmente hay que dividirlo
+  //-- entre 1000 para obtenerlo en milisegundos.
+  *t = (double)((trama[2]*65536 + trama[3]*256 + trama[4])*8)/1000;
+ 
+  return 1;
+}
+
+/***********************************************************************/
+/* Devolver el estado de la plataforma                                 */
+/*  ENTRADAS:                                                          */
+/*    -fd: Descriptor del puerto serie, donde esta conectado ChronoPic */
+/*                                                                     */
+/*  SALIDAS:                                                           */
+/*    -estado: Estado de la plataforma:                                */
+/*        * 0 --> OFF. No hay nadie sobre la plataforma                */
+/*        * 1 --> ON.  Hay alguien apoyado                             */
+/*                                                                     */
+/*  DEVUELVE:                                                          */
+/*    -1 : Error en la lectura de la trama                             */
+/*    0  : Timeout                                                     */
+/*    1  : Trama leida correctamente                                   */
+/***********************************************************************/
+int chronopic_estado(int serial_fd, int *estado) 
+{
+  unsigned char trama[10];
+  char respuesta[10];
+  fd_set fds;
+  struct timeval timeout;
+  int status;
+  int ret;
+  int n;
+  
+  // Construir la trama del servicio de estado
+  trama[0]='E';
+
+  //-- Enviarla al StarGate
+  write(serial_fd, trama,1); 
+
+  //-- Esperar la respuesta
+  FD_ZERO(&fds);
+  FD_SET (serial_fd, &fds);
+
+  timeout.tv_sec = 0;  //-- Establecer el TIMEOUT
+  timeout.tv_usec = 100000;
+
+  ret=select (FD_SETSIZE,&fds, NULL, NULL,&timeout);
+  
+  switch(ret) {
+    case 1 : //--Datos listos 
+      n=read (serial_fd, respuesta, 10);
+      if (respuesta[0]=='E') {
+        status=1;
+        *estado=(int)respuesta[1];
+      }
+      else { //-- Recibido algo distinto de lo esperado
+        status=-1;
+        *estado=0;
+      }
+      break;
+    case 0: //-- Timeout
+      tcflush(serial_fd,TCIOFLUSH);
+      status=0;
+      *estado=0;
+      break;
+    default: //-- Otro Error
+      status=-1;
+      *estado=0;
+      break;
+  }
+  return status;
+    
+}
+
+/*************************************/
+/* Solicitar el estado de chronopic  */
+/* Solo se envia la trama            */
+/*************************************/
+void chronopic_solicitar_estado(int serial_fd)
+{
+  unsigned char trama[10];
+  
+  // Construir la trama del servicio de estado
+  trama[0]='E';
+
+  //-- Enviarla al StarGate
+  write(serial_fd, trama,1); 
+}
+
+
+/*******************************************/
+/* Vaciar el buffer                        */
+/*******************************************/
+void chronopic_flush(int serial_fd)
+{
+  /* Vaciar los buffers de entrada y salida */
+  tcflush(serial_fd,TCIOFLUSH);
+}
+
+/**************************************/
+/* Leer un numero de bytes            */
+/**************************************/
+int chronopic_read(int serial_fd, unsigned char *trama,
+                   int bytes, int tout)
+{
+  fd_set fds;
+  ssize_t n;
+  struct timeval timeout;
+  int ret;
+  
+  //-- Comprobar si hay datos esperando en el puerto serie
+  FD_ZERO(&fds);
+  FD_SET (serial_fd, &fds);
+
+  timeout.tv_sec = 0;  //-- Establecer el TIMEOUT
+  timeout.tv_usec = tout;  
+
+  ret=select (FD_SETSIZE,&fds, NULL, NULL,&timeout);
+  
+  switch(ret) {
+    case 1 : //--Datos listos. Leer una trama
+      n=read (serial_fd, trama, bytes);
+      return n;
+      break;
+    case 0: //-- Timeout
+      trama[0]=0;
+      return 0;
+      break;
+    default: //--Cualquier otro error
+      trama[0]=0;
+      return -1;
+      break;
+  }
+  
+  //-- Aqui nunca llega...
+  return 1;
+}
+
+/************************************************/
+/* Leer una trama de cambio completa            */
+/************************************************/
+int sg_trama_cambio_read(int serial_fd, unsigned char *trama)
+{
+  fd_set fds;
+  ssize_t n;
+  struct timeval timeout;
+  int ret;
+  
+  //-- Comprobar si hay datos esperando en el puerto serie
+  FD_ZERO(&fds);
+  FD_SET (serial_fd, &fds);
+
+  timeout.tv_sec = 0;  //-- Establecer el TIMEOUT
+  timeout.tv_usec = 100000;  //-- 100ms
+
+  ret=select (FD_SETSIZE,&fds, NULL, NULL,&timeout);
+  
+  switch(ret) {
+    case 1 : //--Datos listos. Leer una trama
+      n=read (serial_fd, trama, 5);
+      if (n!=5) return -1;
+      return 1;
+      break;
+    case 0: //-- Timeout
+      trama[0]=0;
+      return 0;
+      break;
+    default: //--Cualquier otro error
+      trama[0]=0;
+      return -1;
+      break;
+  }
+  
+  //-- Aqui nunca llega...
+  return 1;
+}

Added: trunk/chronopic-tests/chronopic.cs
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/chronopic.cs	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,199 @@
+/**********************************************/
+/* chronopic.cs        Juan Gonzalez Gomez.   */
+/*--------------------------------------------*/
+/* Licencia GPL                               */
+/**********************************************/
+/*------------------------------------------------------------------------
+ $Id: chronopic.cs,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/chronopic.cs,v $
+--------------------------------------------------------------------------*/
+using System;
+using System.Runtime.InteropServices;
+
+public class Chronopic {
+
+   //-- Acceso a la libreria chronopic
+   const string library = "chronopic";
+
+   //****************************
+   //  TIPOS                     
+   //****************************
+   //-- Respuestas en el acceso a Chronopic
+   public enum Respuesta : int
+   {
+     Ok = 1,
+     Error = -1,
+     Timeout = 0,
+   }
+   
+   //-- Estado de la plataforma
+   public enum Plataforma : int
+   {
+     ON = 1,
+     OFF = 0,
+     UNKNOW = -1,
+   }
+
+   //******************************
+   //  CONSTRUCTORES Y DESTRUCTORES
+   //******************************
+  
+   //-- Constructor
+   public Chronopic(string disp)
+   {
+     this.serial_fd=this.Open(disp);
+   }
+
+   //-- Destructor
+   ~Chronopic()
+   {
+     if (this.serial_fd!=-1)
+       this.Close();
+   }
+
+   
+
+   //***************************************
+   //  METODOS PUBLICOS
+   //***************************************
+   
+   //----------------------------
+   //-- Cerrar el puerto serie 
+   //----------------------------
+   public void Close()
+   {
+     Chronopic.close(this.serial_fd);
+     this.serial_fd=-1;
+   }
+   
+   //----------------------------------
+   //-- Leer un evento en Chronopic
+   //----------------------------------
+   public Respuesta Read_event(out double timestamp, 
+                               out Plataforma plataforma)
+   {
+     double t;
+     int estado;
+     int error;
+     Respuesta resp;
+     
+     //-- Leer trama
+     error=read(this.serial_fd,out t, out estado);
+     
+     //-- Convertir el error al tipo Respuesta
+     switch(error) {
+       case 0:
+         resp = Respuesta.Timeout;
+         plataforma = Plataforma.UNKNOW;
+         timestamp = 0.0;
+         break;
+       case 1:
+         resp = Respuesta.Ok;
+         timestamp = t;
+         if (estado==0) 
+           plataforma = Plataforma.OFF;
+         else
+           plataforma = Plataforma.ON;
+         break;
+       default:
+         resp = Respuesta.Error;
+         timestamp = 0.0;
+         plataforma = Plataforma.UNKNOW;
+         break;
+     }
+     
+     return resp;
+   }   
+   
+   //----------------------------------------
+   //-- Obtener el estado de la plataforma
+   //----------------------------------------
+   public Respuesta Read_platform(out Plataforma plataforma)
+   {
+     int error;
+     int estado;
+     Respuesta resp;
+     
+     //-- Enviar trama de estado
+     error=Chronopic.estado(this.serial_fd, out estado);
+     
+     //-- Convertir el error al tipo Respueta
+     switch(error) {
+       case 0: 
+         resp = Respuesta.Timeout;
+         plataforma = Plataforma.UNKNOW;
+         break;
+       case 1:
+         resp = Respuesta.Ok;
+         if (estado==0)
+           plataforma = Plataforma.OFF;
+         else
+           plataforma = Plataforma.ON;
+         break;
+       default:
+         resp = Respuesta.Error;
+         plataforma = Plataforma.UNKNOW;
+         break;
+     }
+     
+     //-- Devolver Respuesta
+     return resp;
+   }
+   
+   //-- Leer bytes
+   public unsafe int Read(byte[] buffer, int bytes, int timeout)
+   {
+     int error;
+     
+     fixed(byte *bytepointer = buffer)
+     {
+       error=read(this.serial_fd,bytepointer,bytes,timeout);
+     }
+     
+     return error;
+   }
+   
+   public void Solicitar_estado()
+   {
+     solicitar_estado(this.serial_fd);
+   }
+
+   //***************************************
+   //  METODOS PRIVADOS
+   //***************************************
+   
+   //-- Apertura del puerto serie
+   private int Open(string disp)
+   {
+     return Chronopic.open(disp);
+   }
+   
+   //-------------- Importado del modulo chronopic---------------------
+   [DllImport(library,EntryPoint="chronopic_open")] 
+   extern static int open(string disp);
+   
+   [DllImport(library,EntryPoint="chronopic_close")] 
+   static extern int close(int fd);
+   
+   [DllImport(library,EntryPoint="chronopic_get_trama_cambio")] 
+   static extern int read(int serial_fd, out double t, out int estado);
+   
+   [DllImport(library,EntryPoint="chronopic_flush")] 
+   static extern int flush(int fd);
+   
+   [DllImport(library,EntryPoint="chronopic_estado")] 
+   static extern int estado(int fd, out int estado);
+   
+   [DllImport(library,EntryPoint="chronopic_read")]
+   static extern unsafe int read(int serial_fd, byte *trama,
+                                 int bytes,int timeout);
+   [DllImport(library,EntryPoint="chronopic_solicitar_estado")]
+   static extern void solicitar_estado(int serial_fd);
+                              
+   
+  //------------------------------
+  //   Propiedades privadas
+  //------------------------------
+  int serial_fd;
+}

Added: trunk/chronopic-tests/chronopic.h
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/chronopic.h	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,78 @@
+/*****************************************************/
+/* chronopic.h       Juan Gonzalez Gomez.            */
+/*---------------------------------------------------*/
+/* Funciones Del modulo chronopic                    *//*****************************************************/
+/*----------------------------------------------------------------------------
+ $Id: chronopic.h,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/chronopic.h,v $
+-----------------------------------------------------------------------------*/
+
+#ifndef CHRONOPIC_H
+#define CHRONOPIC_H
+
+/*--------------------------*/
+/* PROTOTIPOS DEL INTERFAZ  */
+/*--------------------------*/
+
+/********************************************************************/
+/* Abrir el puerto serie y configurarlo para trabajar con chronopic */
+/*------------------------------------------------------------------*/
+/* ENTRADA:                                                         */
+/*   disp: cadena con el dispositivo serie                          */
+/*                                                                  */
+/* DEVUELVE:                                                        */
+/*   -El descriptor del puerto serie à -1 si ha ocurrido un error   */
+/********************************************************************/
+int chronopic_open(char *disp);
+
+/********************************************************************/
+/* Cerrar el puerto serie y finalizar sesion con Chronopic          */
+/*------------------------------------------------------------------*/
+/* ENTRADA:                                                         */
+/*   fd: Descriptor del fichero                                     */
+/********************************************************************/
+void chronopic_close(int fd);
+
+/***********************************************************************/
+/* Leer una trama y devolver el estado de la plataforma y el tiempo    */
+/* transcurrido desde la ultima transicion                             */
+/*                                                                     */
+/*  ENTRADAS:                                                          */
+/*    -fd: Descriptor del puerto serie, donde esta conectado ChronoPic */
+/*                                                                     */
+/*  SALIDAS:                                                           */
+/*    -t : Tiempo transcurrido                                         */
+/*    -estado: Estado de la plataforma:                                */
+/*        * 0 --> OFF. No hay nadie sobre la plataforma                */
+/*        * 1 --> ON.  Hay alguien apoyado                             */
+/*                                                                     */
+/*  DEVUELVE:                                                          */
+/*    0  : Error en la lectura de la trama                             */
+/*    1  : Trama leida correctamente                                   */
+/***********************************************************************/
+int chronopic_get_trama_cambio(int fd, double *t, int *estado);
+
+/***********************************************************************/
+/* Devolver el estado de la plataforma                                 */
+/*  ENTRADAS:                                                          */
+/*    -fd: Descriptor del puerto serie, donde esta conectado ChronoPic */
+/*                                                                     */
+/*  SALIDAS:                                                           */
+/*    -estado: Estado de la plataforma:                                */
+/*        * 0 --> OFF. No hay nadie sobre la plataforma                */
+/*        * 1 --> ON.  Hay alguien apoyado                             */
+/*                                                                     */
+/*  DEVUELVE:                                                          */
+/*    -1 : Error en la lectura de la trama                             */
+/*    0  : Timeout                                                     */
+/*    1  : Trama leida correctamente                                   */
+/***********************************************************************/
+int chronopic_estado(int serial_fd, int *estado);
+
+/*******************************************/
+/* Vaciar el buffer serie                  */
+/*******************************************/
+void chronopic_flush(int serial_fd);
+
+#endif

Added: trunk/chronopic-tests/termansi.c
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/termansi.c	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,125 @@
+/************************************************************************/
+/*  TERMANS.C.  (C) Grupo J&J. Noviembre 1997.                          */
+/* -------------------------------------------------------------------- */
+/*  Funciones para actuar sobre terminales ansi: cambiar el color,      */
+/*  borrar la pantalla...                                               */
+/*                                                                      */
+/************************************************************************/
+
+#include <stdio.h>
+#include <unistd.h>
+#include "termansi.h"
+
+int ansi=1;   /* ANSI SI/NO */
+
+void configansi(int t)
+/**************************************************************************/
+/* Cambiar el estado del ansi. Cuando el parametro de entrada indica 0    */
+/* no se utilizan comandos ansi. Cuando t=1 si.                           */
+/**************************************************************************/
+{
+  if (t==0) ansi=0;
+  else ansi=1;
+}
+
+void dprint(char *cad)
+/******************************************************/
+/* Imprimir una cadena directamente en la pantalla    */
+/******************************************************/
+{
+  int i=0;
+  
+  while (cad[i]!=0){
+    write(1,&cad[i],1);
+    i++;
+  }
+}
+
+void clrscr()
+/************************/
+/*  Borrar la pantalla  */
+/************************/
+{
+  if (ansi) {
+    dprint ("");     /* Borrar la pantalla                        */
+    dprint ("");   /* Situar cursor en esquina superior derecha */
+  }  
+}
+
+void locate(char x, char y)
+/**********************************************/
+/*  Situar el cursor en la posicion indicada  */
+/**********************************************/
+{
+  char s[20];
+  
+  if (ansi) {
+    sprintf(s,"[%d;%dH",y,x);
+    dprint(s);
+  }  
+}
+
+void fondo(char f)
+/**********************************/
+/* Cambiar el color del fondo     */
+/**********************************/
+{
+  char s[20];
+  
+  if (ansi) {
+    sprintf(s,"[%dm",f+40);
+    dprint (s);
+  }  
+}
+
+void setcolor(char c)
+/**************************************/
+/*  Cambiar el color del primer plano */
+/**************************************/
+{
+  char s[20];
+  
+  if (ansi) {
+    sprintf(s,"[%dm",c+30);
+    dprint(s);
+  }  
+}
+
+void color(char f,char b)
+/***********************************************/
+/*  Cambiar color del primer plano y del fondo */
+/***********************************************/
+{
+  char s[20];
+
+  if (ansi) {  
+    sprintf(s,"[%d;%dm",f+30,b+40);
+    dprint(s);
+  }  
+}
+
+void high()
+/******************************************************************/
+/*  Establecer atributos de alta intensidad en color primer plano */
+/******************************************************************/
+{
+  char s[20];
+  
+  if (ansi) {
+    sprintf (s,"");
+    dprint(s);
+  }  
+}
+
+/********************************/
+/*  Poner atributos a 'cero'    */
+/********************************/
+void low()
+{
+  char s[20];
+  
+  if (ansi) {
+    sprintf(s,"");
+    dprint(s);
+  } 
+}

Added: trunk/chronopic-tests/termansi.h
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/termansi.h	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,21 @@
+#define NEGRO    0
+#define AZUL     4
+#define VERDE    2
+#define CYAN     6
+#define ROJO     1
+#define MAGENTA  5
+#define AMARILLO 3
+#define BLANCO   7
+
+#define SIMPLE 0
+#define DOBLE  1
+
+void configansi(int t);
+void dprint(char *cad);
+void clrscr();
+void locate(char x, char y);
+void fondo(char f);
+void setcolor(char c);
+void color(char f,char b);
+void high();
+void low();

Added: trunk/chronopic-tests/test-precision.c
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/test-precision.c	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,164 @@
+/***************************************************************************/
+/* test-precision.c (c) Juan Gonzalez.  Febrero 2005                       */
+/*-------------------------------------------------------------------------*/
+/* Comprobacion de la precision de Chronopic. Se mide mide el periodo y la */
+/* frecuencia de senales cuadradas aplicadas a Chronopic. De esta manera   */
+/* se puede comprobar cual es la precision en la medida                    */
+/*   Sirve para validar Chronopic                                          */
+/*-------------------------------------------------------------------------*/
+/* Licencia GPL                                                            */
+/***************************************************************************/
+/*-------------------------------------------------------------------------
+ $Id: test-precision.c,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/test-precision.c,v $
+---------------------------------------------------------------------------*/
+#include <termios.h>
+#include <unistd.h> 
+#include <stdio.h>
+#include <string.h>
+
+#include "chronopic.h"
+
+//-- Dispositivo serie
+char disp_serie[80]; 
+
+/**********************/
+/* Imprimir la ayuda  */
+/**********************/
+void help(void)
+{
+  printf ("\n");
+  printf (
+    "Forma de uso:   test-precision dispositivo_serie [opciones]\n");
+  printf ("\n");
+  printf ("Dispositivo serie: \n");
+  printf ("   -Dispositivo donde esta conectado ChronoPic. Ej. /dev/ttyS0\n");
+  printf ("\n");
+  printf ("Opciones:\n");
+  printf ("    -h : Mostrar esta ayuda\n");
+  printf ("\n");
+  printf ("Ejemplo: test-precision /dev/ttyS0\n");
+  printf ("\n");
+}
+
+/*****************************************************************/
+/* Analizar los parametros pasados desde la linea de comandos    */
+/*---------------------------------------------------------------*/
+/* ENTRADAS: Argumentos de la funcion main()                 	   */
+/* DEVUELVE:                                                     */
+/*    0 : Error                                                  */
+/*    1 : OK                                                     */
+/*****************************************************************/
+int analizar_parametros(int argc, char* argv[])
+{
+  int c;
+  
+   if (argc<2) {
+    printf ("\nERROR: No se ha especificado dispositivo serie\n");
+    printf ("Utilice el parametro -h para obtener ayuda\n\n");
+    return 0;
+  }  
+  
+  
+  //-- Obtener el dispositivo serie
+  strcpy(disp_serie,argv[1]);
+  
+  //-- Obtener el resto de parametros
+  while ((c = getopt(argc, argv, ":h"))!=EOF) {
+    switch (c) {
+      case 'h':
+      default: help();
+        return 0;
+    }
+  }
+  return 1;
+}
+
+/*****************************/
+/* Informacion del programa  */
+/*****************************/
+void presenta()
+{
+  printf ("\n");
+	printf ("test-precision. (c) Juan Gonzalez. Febrero 2005. Licencia GPL\n");
+	printf ("Medicion de senales cuadradas en ChronoPic [Proyecto ChronoJump]\n");
+  printf ("\n");
+  printf ("Aplicando senales cuadradas de frecuencia conocida y comparando\n");
+  printf ("los resultados con este programa, se puede determinar el error\n");
+  printf ("que tiene Chronopic\n");
+	printf ("\n");
+}
+
+/*----------------*/
+/*     MAIN       */
+/*----------------*/
+int main (int argc, char **argv)
+{
+  char cad[80];
+  int i;
+  int serial_fd;
+  int ok;
+  double t;
+  int estado_plataforma;
+  int estado_automata=0;
+  double ton=0.0;
+  double toff=0.0;
+  int n;
+  
+  presenta();
+  
+  ok=analizar_parametros(argc,argv);
+	if (!ok) return 0;
+  
+  //-- Abrir el puerto serie. Por defecto se abre con los parametros
+  //-- necesarios en Chronopic
+  serial_fd=chronopic_open(disp_serie);
+
+  if (serial_fd==-1) {
+    printf ("\n");
+    printf ("Error al abrir puerto serie %s\n",argv[1]);
+    perror("ERROR: ");
+    return 1;
+  }
+  
+  printf ("\n");
+  printf ("Aplicar una senal cuadrada a la entrada del cronometro\n");
+  printf ("Pulse control-c para terminar\n");
+  printf ("-------------------------------------------------------\n");
+  
+  while(1) {
+    //-- Esperar a que llegue una trama
+    do {
+      n = chronopic_get_trama_cambio(serial_fd,&t,&estado_plataforma);
+    } while(n==0);
+    
+    //-- Error en trama recibida: terminar
+    if (n==-1) return 0;
+    
+    switch(estado_automata) {
+      case 0: //-- Estado OFF
+        if (estado_plataforma==1) {
+          estado_automata=1;
+          toff=t;
+           //-- Sacar informacion sobre el evento ocurrido
+           sprintf (cad,"Periodo: %7.2f ms, Freq: %2.3f Hz. ",ton+toff,
+                    1000/(ton+toff));
+           //sprintf (cad,"%X %X %X",trama[2],trama[3],trama[4]);
+           printf (cad);
+           for (i=0; i<strlen(cad); i++)
+             printf ("\b");
+           fflush(stdout);
+        }
+      case 1:  //-- Estado ON
+        if (estado_plataforma==0) {
+          estado_automata=0;
+          ton=t;
+        }
+    }
+    
+  }
+    
+  printf ("\n");
+  return 0;
+}

Added: trunk/chronopic-tests/test-saltos.c
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/test-saltos.c	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,196 @@
+/***************************************************************************/
+/* test-saltos.c (c) Juan Gonzalez.  Febrero 2005                          */
+/*-------------------------------------------------------------------------*/
+/* Pruebas de medidion de saltos. Se mide el tiempo de vuelo de los saltos */
+/* realizados, mostrandose los resultados por la pantalla                  */
+/*-------------------------------------------------------------------------*/
+/* Licencia GPL                                                            */
+/***************************************************************************/
+/*-------------------------------------------------------------------------
+ $Id: test-saltos.c,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/test-saltos.c,v $
+---------------------------------------------------------------------------*/
+#include <termios.h>
+#include <unistd.h> 
+#include <stdio.h>
+#include <string.h>
+
+#include "chronopic.h"
+
+//-- Dispositivo serie
+char disp_serie[80]; 
+
+/**********************/
+/* Imprimir la ayuda  */
+/**********************/
+void help(void)
+{
+  printf ("\n");
+  printf (
+    "Forma de uso:   test-saltos dispositivo_serie [opciones]\n");
+  printf ("\n");
+  printf ("Dispositivo serie: \n");
+  printf ("   -Dispositivo donde esta conectado ChronoPic. Ej. /dev/ttyS0\n");
+  printf ("\n");
+  printf ("Opciones:\n");
+  printf ("    -h : Mostrar esta ayuda\n");
+  printf ("\n");
+  printf ("Ejemplo: test-saltos /dev/ttyS0\n");
+  printf ("\n");
+}
+
+/*****************************************************************/
+/* Analizar los parametros pasados desde la linea de comandos    */
+/*---------------------------------------------------------------*/
+/* ENTRADAS: Argumentos de la funcion main()                 	   */
+/* DEVUELVE:                                                     */
+/*    0 : Error                                                  */
+/*    1 : OK                                                     */
+/*****************************************************************/
+int analizar_parametros(int argc, char* argv[])
+{
+  int c;
+  
+   if (argc<2) {
+    printf ("\nERROR: No se ha especificado dispositivo serie\n");
+    printf ("Utilice el parametro -h para obtener ayuda\n\n");
+    return 0;
+  }  
+  
+  //-- Obtener el dispositivo serie
+  strcpy(disp_serie,argv[1]);
+  
+  //-- Obtener el resto de parametros
+  while ((c = getopt(argc, argv, ":h"))!=EOF) {
+    switch (c) {
+      case 'h':
+      default: help();
+        return 0;
+    }
+  }
+  return 1;
+}
+
+/*****************************/
+/* Informacion del programa  */
+/*****************************/
+void presenta()
+{
+  printf ("\n");
+	printf ("test-saltos. (c) Juan Gonzalez. Febrero 2005. Licencia GPL\n");
+	printf ("Medicion del tiempo de vuelo de los saltos\n");
+  printf ("\n");
+}
+
+/*----------------*/
+/*     MAIN       */
+/*----------------*/
+int main (int argc, char **argv)
+{
+  char cad[80];
+  int serial_fd;
+  int ok;
+  double t;
+  int estado_plataforma;
+  int estado_automata=0;
+  double toff=0.0;
+  int n;
+  
+  presenta();
+  
+  ok=analizar_parametros(argc,argv);
+	if (!ok) return 0;
+  
+  //-- Abrir el puerto serie. Por defecto se abre con los parametros
+  //-- necesarios en Chronopic
+  serial_fd=chronopic_open(disp_serie);
+
+  if (serial_fd==-1) {
+    printf ("\n");
+    printf ("Error al abrir puerto serie %s\n",argv[1]);
+    perror("ERROR: ");
+    return 1;
+  }
+  
+  //-- Obtener el estado inicial
+  ok=chronopic_estado(serial_fd, &estado_plataforma);
+  
+  //-- Timeout: no hay conexion
+  if (ok==0) {
+    printf ("ChonoPIC no conectado\n");
+    chronopic_close(serial_fd);
+    return 1;
+  }
+  
+  //-- Ha habido un error
+  if (ok==-1) {
+    printf ("Error en la comunicacion con ChronoPIC\n");
+    chronopic_close(serial_fd);
+    return 1;
+  }
+  
+  //-- Establecer estado inicial del automata
+  if (estado_plataforma==1) estado_automata=1;
+  else {
+    
+    printf ("SUBA A LA PLATAFORMA PARA REALIZAR EL SALTO\n");
+    
+    //-- Esperar a que llegue una trama con estado de la plataforma
+    //-- igual a 1, para esperar a que se el usuario se suba
+    ok = chronopic_get_trama_cambio(serial_fd,&t,&estado_plataforma);
+    while (ok==0 || (ok==1 && estado_plataforma==0)) {
+      ok = chronopic_get_trama_cambio(serial_fd,&t,&estado_plataforma);
+    }
+    
+    //-- Aqui el estado de la plataforma es 1, hay alguien subido
+    estado_automata=1;
+  }
+  
+    
+  printf ("\n");
+  printf ("Puede saltar cuando quiera\n");
+  printf ("Pulse control-c para finalizar la sesion\n");
+  printf ("-----------------------------------------\n");
+  
+  while(1) {
+    //-- Esperar a que llegue una trama
+    do {
+      n = chronopic_get_trama_cambio(serial_fd,&t,&estado_plataforma);
+    } while(n==0);
+    
+    //-- Error en trama recibida: terminar
+    if (n==-1) return 0;
+    
+    switch(estado_automata) {
+      
+      case 0: //-- Estado OFF. Usuario en el aire
+        
+        //-- Si ha aterrizado
+        if (estado_plataforma==1) {
+          
+          //-- Pasar al estado ON
+          estado_automata=1;
+          
+          //-- Registrar tiempo de vuelo
+          toff=t;
+          
+          //-- Imprimir informacion
+          sprintf (cad,"Tiempo: %8.1f ms\n",toff);
+          printf (cad);
+        }
+      case 1:  //-- Estado ON. Usuario estaba de la plataforma
+        
+        //-- Si ahora esta en el aire...
+        if (estado_plataforma==0) {
+          
+          //-- Pasar al estado OFF
+          estado_automata=0;
+        }
+    }
+    
+  }
+    
+  printf ("\n");
+  return 0;
+}

Added: trunk/chronopic-tests/test-saltos.mono.cs
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/test-saltos.mono.cs	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,115 @@
+/***********************************************************/
+/* test-saltos.mono    Juan Gonzalez Gomez. Febrero 2005   */
+/*---------------------------------------------------------*/
+/* Medir el tiempo de vuelo de los saltos                  */
+/* Licencia GPL                                            */
+/***********************************************************/
+/*------------------------------------------------------------------------
+ $Id: test-saltos.mono.cs,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/test-saltos.mono.cs,v $
+--------------------------------------------------------------------------*/
+
+using System;
+
+class Test {
+  
+  //-- Estado del automata
+  enum Automata {
+    ON,
+    OFF
+  }
+  
+  /**********************/
+  /* PROGRAMA PRINCIPAL */
+  /**********************/
+  public static void Main()
+  {
+    Chronopic.Plataforma estado_plataforma;
+    Chronopic.Respuesta respuesta;
+    Automata estado_automata;
+    double timestamp;
+    double toff;
+    
+    //-- Crear objeto chronopic, para acceder al chronopic
+    Chronopic cp = new Chronopic("/dev/ttyS0");
+    
+    //-- Obtener el estado inicial de la plataforma
+    respuesta=cp.Read_platform(out estado_plataforma);
+    switch(respuesta) {
+      case Chronopic.Respuesta.Error:
+        Console.WriteLine("Error en comunicacion con Chronopic");
+        return;
+      case Chronopic.Respuesta.Timeout:
+        Console.WriteLine("Chronopic no responde");
+        return;
+      default:
+        break;
+    }
+    
+    Console.WriteLine("Estado plataforma: {0}",estado_plataforma);
+    
+    //-- Establecer el estado inicial del automata
+    if (estado_plataforma==Chronopic.Plataforma.ON) 
+      estado_automata=Automata.ON;
+    else {
+      Console.WriteLine("Suba a la plataforma para realizar el salto");
+      
+      //-- Esperar a que llegue una trama con el estado de la plataforma
+      //-- igual a ON. Esto indica que el usuario se ha subido
+      do {
+      respuesta = cp.Read_event(out timestamp, out estado_plataforma);
+      } while (respuesta!=Chronopic.Respuesta.Ok);
+      
+      //-- Se han subido a la plataforma
+      estado_automata = Automata.ON;
+    }
+    
+    Console.WriteLine("");
+    Console.WriteLine("Puede saltar cuando quiera");
+    Console.WriteLine("Pulse control-c para finalizar la sesion");
+    Console.WriteLine("-----------------------------------------");
+    
+    while(true) {
+    
+      //-- Esperar a que llegue una trama
+      do {
+        respuesta = cp.Read_event(out timestamp, out estado_plataforma);
+      } while (respuesta!=Chronopic.Respuesta.Ok);
+      
+      
+      //-- Segun el estado del automata
+      switch(estado_automata) {
+      
+        case Automata.OFF: //-- Usuario estaba en el aire
+        
+          //-- Si ha aterrizado
+          if (estado_plataforma==Chronopic.Plataforma.ON) {
+          
+            //-- Pasar al estado ON
+            estado_automata=Automata.ON;
+            
+            //-- Registrar tiempo de vuelo
+            toff = timestamp;
+            
+            //-- Imprimir informacion
+            Console.WriteLine("Tiempo: {0:f1} ms",toff);
+          }
+          break;
+          
+        case Automata.ON: //-- Usuario estaba en la plataforma
+        
+          //-- Si ahora esta en el aire...
+          if (estado_plataforma==Chronopic.Plataforma.OFF) {
+            
+            //-- Pasar al estado OFF
+            estado_automata=Automata.OFF;
+          }
+          break;
+      }
+      
+    }
+    
+  }
+
+}

Added: trunk/chronopic-tests/test-tramas.c
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/test-tramas.c	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,198 @@
+/***************************************************************************/
+/* test-tramas.c                                                           */
+/* (c) Juan Gonzalez. 2005                                                 */
+/*-------------------------------------------------------------------------*/
+/* Visualizacion de las tramas enviadas por ChronoPic. Es muy util para    */
+/* hacer pruebas y comprobar si el hardware esta funcionando correctamente */
+/*-------------------------------------------------------------------------*/
+/* Licencia GPL                                                            */
+/***************************************************************************/
+/*-------------------------------------------------------------------------
+ $Id: test-tramas.c,v 1.1 2005/02/07 11:14:54 obijuan Exp $
+ $Revision: 1.1 $
+ $Source: /cvsroot/chronojump/chronopic/test/test-tramas.c,v $
+---------------------------------------------------------------------------*/
+
+#include <termios.h>
+#include <unistd.h> 
+#include <stdio.h>
+#include <string.h>
+
+#include "termansi.h"
+#include "chronopic.h"
+
+//-- Dispositivo serie
+char disp_serie[80]; 
+int flag_disp_serie=0;
+
+
+/**********************/
+/* Imprimir la ayuda  */
+/**********************/
+void help(void)
+{
+  printf ("\n");
+  printf (
+    "Forma de uso:   test-tramas [dispositivo_serie] [opciones]\n");
+  printf ("\n");
+  printf (
+  "Si no se especifica dispositivo serie, se toma la entrada estandar\n");
+  printf ("\n");
+  printf ("Dispositivo serie: \n");
+  printf ("   -Dispositivo donde esta conectado ChronoPic. Ej. /dev/ttyS0\n");
+  printf ("\n");
+  printf ("Opciones:\n");
+  printf ("    -h : Mostrar esta ayuda\n");
+  printf ("\n");
+  printf ("Ejemplo1: test-tramas /dev/ttyS0\n");
+  printf (
+  "   -Analizar las tramas de Chronopic, conectado al puerto serie /dev/ttyS0\n");
+  printf ("\n");
+  printf ("Ejemplo2: test-tramas < prueba\n");
+  printf (
+  "   -Las tramas vienen de la entrada estandar, que se toma del fichero prueba");
+  printf ("\n");
+}
+
+/*****************************************************************/
+/* Analizar los parametros pasados desde la linea de comandos    */
+/*---------------------------------------------------------------*/
+/* ENTRADAS: Argumentos de la funcion main()                 	   */
+/* DEVUELVE:                                                     */
+/*    0 : Error                                                  */
+/*    1 : OK                                                     */
+/*****************************************************************/
+int analizar_parametros(int argc, char* argv[])
+{
+  int c;
+
+  //-- Por defecto se toma la entrada estandar
+  if (argc==1) {
+    flag_disp_serie=0;
+    return 1;
+  }
+  else flag_disp_serie=1;
+  
+  //-- Obtener el dispositivo serie
+  strcpy(disp_serie,argv[1]);
+  
+  //-- Obtener el resto de parametros
+  while ((c = getopt(argc, argv, ":h"))!=EOF) {
+    switch (c) {
+      case 'h':
+      default: help();
+        return 0;
+    }
+  }
+  return 1;
+}
+
+
+/*****************************/
+/* Informacion del programa  */
+/*****************************/
+void presenta()
+{
+  printf ("\n");
+	printf ("test-tramas. (c) Juan Gonzalez. Febrero 2005. Licencia GPL\n");
+	printf ("Visualizacion de tramas de ChronoPic [Proyecto ChronoJump]\n");
+  printf ("Ejecute test-tramas -h para OBTENER AYUDA\n");
+	printf ("\n");
+}
+
+/*----------------*/
+/*     MAIN       */
+/*----------------*/
+int main (int argc, char **argv)
+{
+  unsigned char cad_estado[3];
+  char cad_tiempo[80];
+  double t;
+  int estado;
+  int ok;
+  int serial_fd;
+  int n;
+  
+  presenta();
+  
+  ok=analizar_parametros(argc,argv);
+	if (!ok) return 0;
+  
+  //-- Entrada: CONSOLA
+  if (flag_disp_serie==0) {
+    //-- configurar la consola
+    serial_fd=STDIN_FILENO;
+    printf ("Recepcion de Datos: ENTRADA ESTANDAR\n");
+  }
+  //-- Entrada: puerto serie  
+  else {
+    
+    printf ("Recepcion de datos: PUERTO SERIE %s\n",disp_serie);
+    
+    //-- Abrir el puerto serie. Por defecto se abre con los parametros
+    //-- necesarios en Chronopic
+    serial_fd=chronopic_open(disp_serie);
+
+    if (serial_fd==-1) {
+      printf ("\n");
+      printf ("Error al abrir puerto serie %s\n",argv[1]);
+      perror("ERROR: ");
+      return 1;
+    }
+  }
+ 
+  
+  printf ("\n");
+  printf ("Pulse Control-C para terminar\n");
+  printf ("------------------------------------\n");
+  
+  //-- Bucle infinido. Salir pulsando control-c
+  do {
+    //-- Esperar a que llegue una trama
+    do {
+      n = chronopic_get_trama_cambio(serial_fd,&t,&estado);
+    } while(n==0);
+    
+    //-- Error en trama recibida: terminar
+    if (n==-1) return 0;
+    
+    //-- Obtener la cadena de estado
+    if (estado==0)
+      sprintf(cad_estado,"OFF");
+    else
+      sprintf(cad_estado,"ON ");
+    
+    //-- Obtener la cadena de tiempo
+    sprintf(cad_tiempo,"%8.1f ms",t);
+    
+    //-- Sacar informacion sobre el evento ocurrido
+    //-- Primero el estado del pulsador
+    setcolor(BLANCO);
+    low();
+    printf ("Nuevo estado: ");
+    fflush(stdout);
+    
+    if (estado==0) setcolor(CYAN);
+    else setcolor(AMARILLO);
+    high();
+    printf ("%s",cad_estado);
+    fflush(stdout);
+    
+    //-- Despues el tiempo
+    low();
+    printf (" ,Marca de tiempo: ");
+    fflush(stdout);
+   
+    if (estado==0) setcolor(CYAN);
+    else setcolor(AMARILLO);
+    high();  
+    printf ("%s", cad_tiempo);
+    fflush(stdout);
+    low();
+    printf ("\n");
+    
+  } while (1);
+  
+  printf ("\n");
+  return 0;
+}

Added: trunk/chronopic-tests/test.cs
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/test.cs	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,139 @@
+using System;
+using System.Collections;
+using Gtk;
+using GLib;
+
+public class Test
+{
+
+  private static Chronopic cp;
+  private static Queue Cola;
+  private static byte estado_plataforma;
+  
+  //-- Automata de estado para la recepcion de tramas
+  private static int estado = 0;
+
+  public static void Main()
+  {
+    Application.Init();
+    
+    //-- Crear el interfaz
+    Window w = new Window("Prueba");
+    Button b1 = new Button("Test 1");
+    Button b2 = new Button("Test 2");
+    HBox h= new HBox();
+    w.DeleteEvent += new DeleteEventHandler(Window_Delete);
+    b1.Clicked += new EventHandler(Button_Clicked);
+    b2.Clicked += new EventHandler(Button2_Clicked);
+    
+    h.PackStart(b1,false,false,0);
+    h.PackStart(b2,false,false,0);
+    
+    w.Add(h);
+    w.SetDefaultSize(100,100);
+    w.ShowAll();
+    
+    //-- Inicializar chronopic
+    cp = new Chronopic("/dev/ttyS0");
+    
+    //-- Inicializar otras cosas
+    Cola = new Queue();
+    
+    //-- Inicializar temporizador
+    GLib.Timeout.Add(100, new GLib.TimeoutHandler(Time_Out));
+   
+    Application.Run();
+  } 
+
+  static bool Time_Out()
+  {
+    byte[] buffer;
+    int status;
+    buffer = new byte[20];
+    status=cp.Read(buffer,1,100);
+    
+    //-- Meter elementos nuevos en la cola, si los hay
+    if (status>0) {
+      for (int i=0; i<status; i++) {
+        Cola.Enqueue(buffer[i]);
+      }
+    }  
+    
+    //-- Procesar la cola
+    if (Cola.Count==0) return true;
+    Console.WriteLine("Cola: {0}",Cola.Count);
+    
+    byte b = (byte)Cola.Dequeue();
+    
+    switch(estado) {
+      case 0: //-- Estado esperando trama
+        if (b==(char)'X') {
+          //Console.WriteLine("TRAMA CAMBIO");
+          
+          //-- Leer estado de la plataforma
+          if (Cola.Count==0) {
+            estado = 1;
+            return true;
+          }
+          
+          estado_plataforma = (byte)Cola.Dequeue();
+          Console.WriteLine("Cambio0: {0}",estado_plataforma);
+          
+        }  
+        if (b==(char)'E') {
+          if (Cola.Count==0) {
+            estado=2;
+          }
+          else {
+            b = (byte)Cola.Dequeue();
+            Console.WriteLine("ESTADO0: {0}",b);
+            estado=0;
+          }  
+        }  
+        break;
+        
+      case 1:  //-- Procesar trama de Cambio
+        estado_plataforma = b;
+        Console.WriteLine("Cambio1: {0}",estado_plataforma);
+        break;
+        
+      case 2:  //-- Procesar trama de Estado
+        Console.WriteLine("ESTADO2: {0}",b);
+        estado=0;
+        break;
+        
+      default:
+        break;
+    }
+   
+    
+    
+    return true;
+  }
+
+  static void Window_Delete(object o, DeleteEventArgs args)
+  {
+    Application.Quit();
+    args.RetVal=true;
+  }
+  
+  static void Button_Clicked(object o, EventArgs args)
+  {
+    byte[] buffer;
+    int status;
+    buffer = new byte[10];
+     status=cp.Read(buffer,5,100000);
+    Console.WriteLine("Status: {0}",status);
+    if (status>0) {
+      for (int i=0; i<status; i++) { 
+       Console.WriteLine("Buffer[{0}]: {1}",i,buffer[i]);
+      }
+    }  
+  }
+  
+  static void Button2_Clicked(object o, EventArgs args)
+  {
+    cp.Solicitar_estado();
+  }
+  
+}

Added: trunk/chronopic-tests/test.prj
==============================================================================
--- (empty file)
+++ trunk/chronopic-tests/test.prj	Thu Jan 24 19:23:21 2008
@@ -0,0 +1,124 @@
+# Anjuta Version 1.2.2 
+Compatibility Level: 1 
+
+<PROJECT_DESCRIPTION_START>
+Pruebas para el cronometro de chronojump<PROJECT_DESCRIPTION_END>
+<CONFIG_PROGS_START>
+<CONFIG_PROGS_END>
+<CONFIG_LIBS_START>
+<CONFIG_LIBS_END>
+<CONFIG_HEADERS_START>
+<CONFIG_HEADERS_END>
+<CONFIG_CHARACTERISTICS_START>
+<CONFIG_CHARACTERISTICS_END>
+<CONFIG_LIB_FUNCS_START>
+<CONFIG_LIB_FUNCS_END>
+<CONFIG_ADDITIONAL_START>
+<CONFIG_ADDITIONAL_END>
+<CONFIG_FILES_START>
+<CONFIG_FILES_END>
+<MAKEFILE_AM_START>
+<MAKEFILE_AM_END>
+
+props.file.type=project
+
+anjuta.version=1.2.2
+anjuta.compatibility.level=1
+
+project.name=test
+project.type=GENERIC
+project.target.type=EXECUTABLE
+project.version=1.0
+project.author=Juan Gonzalez
+project.source.target=unknow
+project.has.gettext=0
+project.gui.command=
+project.programming.language=C
+project.excluded.modules=intl
+
+project.config.extra.modules.before=
+project.config.extra.modules.after=
+project.config.blocked=1
+project.config.disable.overwriting=1 1 1 1 1 1 1 1 1 
+
+project.menu.entry=test Version 1.0
+project.menu.group=Application
+project.menu.comment=test Version 1.0
+project.menu.icon=
+project.menu.need.terminal=0
+
+project.configure.options=
+anjuta.program.arguments=
+preferences.build.option.jobs=0
+preferences.build.option.silent=0
+preferences.build.option.autosave=0
+preferences.anjuta.make.options=-k
+preferences.make=make
+preferences.build.option.keep.going=1
+preferences.build.option.warn.undef=0
+preferences.autoformat.custom.style= -i8 -sc -bli0 -bl0 -cbi0 -ss
+preferences.indent.opening=0
+preferences.autoformat.disable=1
+preferences.indent.automatic=1
+preferences.use.tabs=0
+preferences.indent.size=2
+preferences.tabsize=2
+preferences.indent.closing=0
+
+module.include.name=.
+module.include.type=
+module.include.files=\
+	termansi.h\
+	chronopic.h
+
+module.source.name=.
+module.source.type=
+module.source.files=\
+	chronopic-serial-conf.c\
+	test-tramas.c\
+	termansi.c\
+	chronopic.c\
+	test-precision.c\
+	test-saltos.c\
+	chronopic.cs\
+	test-saltos.mono.cs
+
+module.pixmap.name=.
+module.pixmap.type=
+module.pixmap.files=
+
+module.data.name=.
+module.data.type=
+module.data.files=\
+	Makefile
+
+module.help.name=.
+module.help.type=
+module.help.files=
+
+module.doc.name=.
+module.doc.type=
+module.doc.files=\
+	README.txt\
+	Changelog
+
+module.po.files=
+
+compiler.options.supports=
+compiler.options.include.paths=\
+	.\
+	..
+compiler.options.library.paths=
+compiler.options.libraries=
+compiler.options.libraries.selected=
+compiler.options.defines=\
+	HAVE_CONFIG_H
+compiler.options.defines.selected=
+compiler.options.warning.buttons=0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 
+compiler.options.optimize.buttons=0 0 1 0 
+compiler.options.other.buttons=1 0 
+compiler.options.other.c.flags=
+compiler.options.other.l.flags=
+compiler.options.other.l.libs=
+
+project.src.paths=



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]