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

disp_test.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= disptest.cc                                            Febrero del 2000 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definiciones de la clase para el control de la interface                =
00005 //= DISPOSITIVO_DE_PRUEBA                                                   =
00006 //=-------------------------------------------------------------------------=
00007 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00008 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00009 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00010 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00011 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00012 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00013 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00014 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00015 //=-------------------------------------------------------------------------=
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 //= Con la colaboracion de Harold Cruz              ha-cruz@uniandes.edu.co =
00022 //===========================================================================
00023 
00024 #if PLATAFORMA == i386_LINUX_GCC || PLATAFORMA == ALPHA  // OJO: Esto es machete! || PLATAFORMA == SPARC64_LINUX_GCC
00025 
00026 #include "toolkits/media/disp_test.h"
00027 
00028 #include <string.h>
00029 
00030 //===========================================================================
00031 //= Funciones de soporte                                                    =
00032 //===========================================================================
00033 
00034 void
00035 leer_disptest_callback(void * /*User_data*/, int /*accion*/)
00041 {
00042 /*
00043     DISPOSITIVO_DE_PRUEBA *L = ((DISPOSITIVO_DE_PRUEBA*)User_data);
00044     PUERTO_SERIAL *Com = L->Com;
00045     char buffer[19];  // La interface enviara maximo 19 bytes
00046     int bytes_leidos;
00047     int p;
00048 */
00049 //    bytes_leidos = Com->leer(buffer, 19);
00050 
00051     fprintf(stderr, "<DISPOSITIVO DE PRUEBA> WARNING - Se supone que no!\n");
00052     fflush(stderr);
00053 
00054 /*
00055     for ( p = 0; p < bytes_leidos; p++ ) {
00056     }
00057 */
00058 }
00059 
00060 //===========================================================================
00061 // Clase DISPOSITIVO_DE_PRUEBA                                                           =
00062 //===========================================================================
00063 
00064 DISPOSITIVO_DE_PRUEBA::DISPOSITIVO_DE_PRUEBA()
00065 {
00066     printf("Me dispongo a usar el dispositivo de prueba...\n");
00067     fflush(stdout);
00068 
00069     int i;
00070 
00071     data_state[0] = 0x33;
00072     for ( i = 1; i < 4; i++ ) {
00073         data_state[i] = 0;
00074     }
00075 }
00076 
00077 DISPOSITIVO_DE_PRUEBA::~DISPOSITIVO_DE_PRUEBA()
00078 {
00079     cerrar();
00080 }
00081 
00082 void
00083 DISPOSITIVO_DE_PRUEBA::cerrar(void)
00084 {
00085     int i;
00086 
00087     data_state[0] = 0x33;
00088     for ( i = 1; i < 4; i++ ) {
00089         data_state[i] = 0;
00090     }
00091     actualizar();
00092 
00093     if ( Com ) {
00094         Com->cerrar();
00095         delete Com;
00096         Com = 0;
00097     }
00098 }
00099 
00100 BOOLEAN
00101 DISPOSITIVO_DE_PRUEBA::abrir(char *nombre_puerto)
00102 {
00103     Com = new PUERTO_SERIAL(nombre_puerto);
00104 
00105     if ( !Com ) {
00106         return FALSE;
00107     }
00108 
00109     //- Inicializacion del puerto serial -
00110     Com->configurar(PSV4800, PSP_NONE, PSS_UNO, PSD8, PSF_NONE);
00111     if ( !Com->abrir() ) {
00112         delete Com;
00113         Com = 0;
00114         return FALSE;
00115     }
00116     //Com->imprimir(); // Muestra la configuracion actual del puerto
00117 
00118     Com->registro_asincronico(leer_disptest_callback, this);
00119 
00120     return TRUE;
00121 }
00122 
00123 void
00124 DISPOSITIVO_DE_PRUEBA::actualizar(void)
00125 {
00126     data_state[0] = 0x33;
00127     Com->escribir(data_state, 4);
00128 
00129     //-----------------------------------------------------------------------
00130     static int machete = 0;
00131 
00132     machete++;
00133 
00134     if ( machete >= 25 ) { 
00135         printf("[%d][%d][%d]\n",
00136             data_state[1], data_state[2], data_state[3]);
00137         fflush(stdout);
00138         machete = 0;
00139     }
00140 }
00141 
00142 void
00143 DISPOSITIVO_DE_PRUEBA::motor_a(double v)
00144 {
00145     double i = fabs(v);
00146 
00147     i = pow (i, 0.5); // Funcion de transferencia (MACHETE!)
00148 
00149     data_state[1] = (char)((int)(floor(i*255)));
00150 
00151     data_state[3] &= 0x7F;
00152     if ( v > 0 ) data_state[3] |= 0x80;
00153 }
00154 
00155 void
00156 DISPOSITIVO_DE_PRUEBA::motor_b(double v)
00157 {
00158     double i = fabs(v);
00159 
00160     i = pow (i, 0.5); // Funcion de transferencia (MACHETE!)
00161 
00162     data_state[2] = (char)((int)(floor(i*255)));
00163 
00164     data_state[3] &= 0xBF;
00165     if ( v > 0 ) data_state[3] |= 0x40;
00166 }
00167 
00168 void
00169 DISPOSITIVO_DE_PRUEBA::motor_pluma(double v)
00170 {
00171     double i = fabs(v);
00172     char p;
00173 
00174     p = (char)((int)(floor(i*63)));
00175     data_state[3] &= 0xC0;
00176     data_state[3] |= p & 0x3f;
00177 }
00178 
00179 static double TMP_float;
00180 
00181 BOOLEAN
00182 DISPOSITIVO_DE_PRUEBA::consultar_variable(const char *nombre_variable, 
00183                    int &tipo, void **ref)
00187 {
00188     if ( strcmp(nombre_variable, "motor_a") == 0 ) {
00189         TMP_float = 0;
00190         tipo = T_FLOAT; (*ref) = &TMP_float;    return TRUE;
00191       }
00192       else if ( strcmp(nombre_variable, "motor_b") == 0 ) {
00193         TMP_float = 0;
00194         tipo = T_FLOAT; (*ref) = &TMP_float;    return TRUE;
00195       }
00196       else if ( strcmp(nombre_variable, "motor_pluma") == 0 ) {
00197         TMP_float = 0;
00198         tipo = T_FLOAT; (*ref) = &TMP_float;    return TRUE;
00199     }
00200 
00201     return FALSE;
00202 }
00203 
00204 BOOLEAN
00205 DISPOSITIVO_DE_PRUEBA::actualizar_variable(const char *nombre_variable, int tipo, void *ref)
00206 {
00207     if ( strcmp(nombre_variable, "motor_a") == 0 ) {
00208         if ( tipo != T_FLOAT ) return FALSE;
00209         TMP_float = *((double *)(ref));
00210         motor_a(TMP_float);
00211       }
00212       else if ( strcmp(nombre_variable, "motor_b") == 0 ) {
00213         if ( tipo != T_FLOAT ) return FALSE;
00214         TMP_float = *((double *)(ref));
00215         motor_b(TMP_float);
00216       }
00217       else if ( strcmp(nombre_variable, "motor_palanca") == 0 ) {
00218         if ( tipo != T_FLOAT ) return FALSE;
00219         TMP_float = *((double *)(ref));
00220         motor_pluma(TMP_float);
00221       }
00222     ;
00223     return TRUE;
00224 }
00225 
00226 #endif
00227 
00228 //===========================================================================
00229 //= EOF                                                                     =
00230 //===========================================================================
00231 

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.