00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
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
00032
00033
00034 void
00035 leer_disptest_callback(void * , int )
00041 {
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 fprintf(stderr, "<DISPOSITIVO DE PRUEBA> WARNING - Se supone que no!\n");
00052 fflush(stderr);
00053
00054
00055
00056
00057
00058 }
00059
00060
00061
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
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
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);
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);
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
00230
00231