chronojump r351 - trunk/chronopic-tests
- From: xaviblas svn gnome org
- To: svn-commits-list gnome org
- Subject: chronojump r351 - trunk/chronopic-tests
- Date: Thu, 24 Jan 2008 19:23:21 +0000 (GMT)
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 ("[2J"); /* Borrar la pantalla */
+ dprint ("[1;1H"); /* 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,"[1m");
+ dprint(s);
+ }
+}
+
+/********************************/
+/* Poner atributos a 'cero' */
+/********************************/
+void low()
+{
+ char s[20];
+
+ if (ansi) {
+ sprintf(s,"[0m");
+ 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]