Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

glove.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= glovedrv.cc                                       Abril a Julio de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definiciones de manejo para el dataglove.                               =
00005 //=-------------------------------------------------------------------------=
00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00013 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00014 //=-------------------------------------------------------------------------=
00015 //= Jesus Blanco (de 1997 a Abril de 1998)         je-blanc@uniandes.edu.co =
00016 //= Autor original: Oscar J. Chavarro G.  A.K.A. JEDILINK. Copyright (c),   =
00017 //= 1997 - 2003, oscarchavarro@hotmail.com                                  =
00018 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia   =
00019 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la  =
00020 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. =
00021 //===========================================================================
00022 
00023 #include "jed_defs.h"
00024 #include "toolkits/media/glove.h"
00025 #include <stdio.h>
00026 
00027 //===========================================================================
00028 //= Clase DATAGLOVE                                                         =
00029 //===========================================================================
00030 
00031 #define     MAXCOM    5 
00032 
00033 DATAGLOVE::DATAGLOVE()
00034 {
00035     Com = NULL;
00036 }
00037 
00038 DATAGLOVE::~DATAGLOVE()
00039 {
00040     cerrar();
00041 }
00042 
00043 BOOLEAN
00044 DATAGLOVE::consultar_variable(const char * /*nombre_variable*/,
00045                               int & /*tipo*/, void ** /*ref*/)
00046 {
00047     fprintf(stderr,
00048         "<DATAGLOVE> ATENCION: consultar_variable no implementado.\n");
00049     fflush(stderr);
00050 
00051     return FALSE;
00052 }
00053 
00054 
00055 int
00056 DATAGLOVE::comando(char comando, char *buffer, int tam_buffer)
00068 {
00069     int tam_respuesta, loop = 0;
00070 
00071     do {
00072         Com->escribir(&comando, 1);
00073         SLEEP_MICROSEC(1); // OJO: Para que esto?
00074         tam_respuesta = Com->leer(buffer, tam_buffer);
00075     } while ( (tam_respuesta <= 0) && (loop++ < MAXCOM) );
00076 
00077     return tam_respuesta;    
00078 }
00079 
00080 BOOLEAN
00081 DATAGLOVE::inicializar(char *Port)
00087 {
00088     char buffer[100];
00089     int lenbuff;
00090 
00091     Com = new PUERTO_SERIAL(Port);
00092     if ( !Com ) {
00093         fprintf(stderr, "<DATAGLOVE> ERROR: No puedo crear una conexion con "
00094             "un puerto serial (memoria insuficiente)!\n");
00095         fflush(stderr);
00096         return FALSE;
00097     }
00098     Com->configurar(PSV19200, PSP_NONE, PSS_UNO, PSD8, PSF_NONE);
00099     if ( !Com->abrir() ) {
00100         fprintf(stderr, "<DATAGLOVE> ERROR: No puedo crear una conexion con "
00101             "un puerto serial (acceso denegado)!\n");
00102         fflush(stderr);
00103         delete Com;
00104         Com = NULL;
00105         return FALSE;
00106     }
00107     //Com->imprimir();
00108 
00109     comando('\x41', buffer,1);
00110     if ( buffer[0] != '\x55' ) {
00111         fprintf(stderr, "<DATAGLOVE> ERROR: No se encontro el guante!\n");
00112         fflush(stderr);
00113         delete Com;
00114         Com = NULL;
00115         return FALSE;
00116     }
00117 
00118     lenbuff = comando('\x47', buffer, 32);
00119     if ( lenbuff != 32 ) {
00120         fprintf(stderr, "<DATAGLOVE> ERROR: el guante no esta funcionando "
00121             "correctamente\n");
00122         delete Com;
00123         Com = NULL;
00124         return FALSE;
00125     }
00126 
00127     return TRUE;
00128 }
00129 
00130 void
00131 DATAGLOVE::cerrar(void)
00135 {
00136     if ( Com ) {
00137         Com->cerrar();
00138         delete Com;
00139         Com = NULL;
00140     }
00141 }
00142 
00143 BOOLEAN
00144 DATAGLOVE::consultar(unsigned char *Pitch, unsigned char *Roll,
00145                    unsigned char *f1, unsigned char *f2, unsigned char *f3, 
00146                    unsigned char *f4, unsigned char *f5)
00160 {
00161     char buffer[100];
00162     int tam_buffer;
00163     int loop = 0;
00164     short l;
00165     int cs;
00166     int j;
00167 
00168     if ( !Com ) return FALSE;
00169 
00170     do {
00171         tam_buffer = comando('\x43', buffer,9);
00172         if ( (tam_buffer == 9) && (buffer[0] == '\x80') ) {
00173             cs = 0;
00174             for (j=1; j<=7; j++) {
00175             l = buffer[j];
00176             cs ^= l;
00177             }
00178             if (cs == buffer[8]) { 
00179                 *f1 = buffer[1];
00180                 *f2 = buffer[2];
00181                 *f3 = buffer[3];
00182                 *f4 = buffer[4];
00183                 *f5 = buffer[5];
00184                 *Pitch = buffer[6];
00185                 *Roll = buffer[7];
00186                 return TRUE;
00187             }
00188         }
00189     } while ( loop++ < 15 );
00190     return FALSE;
00191 }
00192   
00193 //===========================================================================
00194 //= Fin de la accion!                                                       =
00195 //===========================================================================
00196 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.