00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <signal.h>
00012 #include <korebot/korebot.h>
00013
00028 static int quitReq = 0;
00029 static knet_dev_t * koreio;
00030
00031
00035 static void ctrlc_handler( int sig )
00036 {
00037 quitReq = 1;
00038 }
00039
00040
00043 int quit( int argc , char * argv[] , void * data)
00044 {
00045 quitReq = 1;
00046 }
00047
00048
00053 int readios( int argc , char * argv[] , void * data)
00054 {
00055
00056 }
00057
00058
00066 int configio(int argc, char * argv[], void * data)
00067 {
00068 unsigned config;
00069 int rc;
00070 char * msg[] = {"input", "output", "pwm"};
00071
00072 rc = kio_ConfigIO(koreio,atoi(argv[1]),atoi(argv[2]));
00073
00074 if(rc == -1)
00075 printf("wrong io\r\n");
00076 else if(rc == -2)
00077 printf("wrong config\r\n");
00078 else
00079 printf("Configured io %d in %s mode\r\n",atoi(argv[1]),msg[atoi(argv[2])]);
00080 }
00081
00082
00085 int resetio( int argc, char * argv[], void * data)
00086 {
00087 int rc;
00088
00089 rc = kio_ClearIO(koreio,atoi(argv[1]));
00090
00091 if(rc < 0)
00092 printf("wrong io\r\n");
00093 else
00094 printf("Cleared io: %d\r\n",atoi(argv[1]));
00095 }
00096
00097
00100 int changeled( int argc, char * argv[], void * data)
00101 {
00102 int rc;
00103
00104 rc = kio_ChangeLed(koreio,atoi(argv[1]));
00105
00106 if(rc < 0)
00107 printf("wrong state\r\n");
00108 else
00109 printf("Changed LED state\r\n");
00110 }
00111
00112
00115 int changeio( int argc, char * argv[], void * data)
00116 {
00117 int rc;
00118
00119 rc = kio_ChangeIO(koreio,atoi(argv[1]));
00120
00121 if(rc < 0)
00122 printf("wrong io\r\n");
00123 else
00124 printf("Changed io: %d\r\n",atoi(argv[1]));
00125 }
00126
00127
00130 int setio( int argc, char * argv[], void * data)
00131 {
00132 int rc;
00133
00134 rc = kio_SetIO(koreio,atoi(argv[1]));
00135
00136 if(rc < 0)
00137 printf("wrong io\r\n");
00138 else
00139 printf("Set io: %d\r\n",atoi(argv[1]));
00140 }
00141
00142
00145 int readad( int argc, char * argv[], void * data)
00146 {
00147 uint16_t val;
00148 uint32_t time;
00149 int rc;
00150
00151 rc = kio_ReadAnalog(koreio,atoi(argv[1]),&val,&time);
00152
00153 if(rc < 0)
00154 printf("wrong ad\r\n");
00155 else
00156 printf("read ad %d: %u at %lu mS\r\n",atoi(argv[1]),val,time);
00157 }
00158
00159
00160
00163 int readcan(int argc, char * argv[], void * data)
00164 {
00165 char can_status, len;
00166 uint32_t can_data1, can_data2;
00167 uint32_t time, id;
00168 int rc;
00169 rc = kio_ReadCAN(koreio,&id,&len,&can_data1,&can_data2,&can_status,&time);
00170
00171 if(rc == -1)
00172 printf("Buffer empty\r\n");
00173 else if(rc == -2)
00174 printf("Error communication with turret\r\n");
00175 else
00176 {
00177 printf("ID: 0x%lx, len: %d, Data: 0x%lx%lx, status: 0x%x, at %lu mS\r\n",id,len,can_data1, can_data2,can_status,time);
00178 printf("%d messages remaining in buffer\r\n", rc);
00179 }
00180 }
00181
00182
00186 int can7seg(int argc, char * argv[], void * data)
00187 {
00188 #define id 0x00000400
00189 #define null 0x1E7F4000
00190 #define one 0x1E7F7900
00191 #define two 0x1E7F2400
00192 #define three 0x1E7F3000
00193 #define four 0x1E7F1900
00194 #define five 0x1E7F1200
00195 #define six 0x1E7F0200
00196 #define seven 0x1E7F7800
00197 #define eight 0x1E7F0000
00198 #define nine 0x1E7F1000
00199 #define can_status 0x02
00200
00201 int rc;
00202 uint32_t can_data = 0;
00203 char len = 3;
00204
00205 switch (atoi(argv[1]))
00206 {
00207 case 0:
00208 can_data = null;
00209 break;
00210 case 1:
00211 can_data = one;
00212 break;
00213 case 2:
00214 can_data = two;
00215 break;
00216 case 3:
00217 can_data = three;
00218 break;
00219 case 4:
00220 can_data = four;
00221 break;
00222 case 5:
00223 can_data = five;
00224 break;
00225 case 6:
00226 can_data = six;
00227 break;
00228 case 7:
00229 can_data = seven;
00230 break;
00231 case 8:
00232 can_data = eight;
00233 break;
00234 default:
00235 can_data = nine;
00236 break;
00237 }
00238
00239 rc = kio_SendCAN(koreio, id, can_data, can_data, len, can_status);
00240
00241 if(rc != 0)
00242 printf("CAN write failed\r\n");
00243 else
00244 printf("Number %d set on the 7 seg\r\n",atoi(argv[1]));
00245 }
00246
00247
00250 int canled( int argc, char * argv[], void *data)
00251 {
00252 #define id_led 0x00000300
00253 #define can_data1 0x1E
00254
00255 int rc;
00256 uint32_t can_data = 0;
00257 char len = 3;
00258 char status = 0x02;
00259 char on_off = 0xFF;
00260
00261 if (atoi(argv[2]))
00262 on_off = 0;
00263
00264 can_data = (((((can_data | can_data1) << 8) | atoi(argv[1])) << 8) | on_off) << 8;
00265 rc = kio_SendCAN(koreio, id_led, can_data, can_data, len, can_status);
00266
00267 if(rc != 0)
00268 printf("CAN write failed\r\n");
00269 else
00270 printf("Leds %d set\r\n",atoi(argv[1]));
00271
00272 }
00273
00274
00275
00278 int setad( int argc, char * argv[], void * data)
00279 {
00280 int rc;
00281 float val;
00282
00283 rc = kio_SetANValue(koreio,atoi(argv[1]), atoi(argv[2]));
00284
00285 val = (atoi(argv[2]) - 139) *0.035;
00286 if(rc < 0)
00287 printf("wrong analog output\r\n");
00288 else
00289 printf("ananlog output %d: %f V\r\n",atoi(argv[1]), val);
00290
00291 }
00292
00293
00296 int setratio( int argc, char * argv[], void * data)
00297 {
00298 int rc;
00299
00300 rc = kio_ChangePWM_ratio(koreio, atoi(argv[1]), atoi(argv[2]));
00301
00302 if(rc < 0)
00303 printf("wrong PWM output\r\n");
00304 else
00305 printf("channel %d set to %u%%\r\n",atoi(argv[1]), atoi(argv[2]));
00306 }
00307
00308
00311 int setfreq(int argc, char * argv[], void * data)
00312 {
00313 int rc;
00314
00315 rc = kio_ChangePWM_freq(koreio, atoi(argv[1]));
00316
00317 if(rc < 0)
00318 printf("Wrong value\r\n");
00319 else
00320 printf("Frequence set to %lu Hz\r\n", atoi(argv[1]));
00321 }
00322
00323
00326 int readio( int argc, char * argv[], void * data)
00327 {
00328 int rc;
00329
00330 rc = kio_ReadIO(koreio,atoi(argv[1]));
00331
00332 if(rc < 0)
00333 printf("wrong io or not in input mode\r\n");
00334 else
00335 printf("read io %d: %d\r\n",atoi(argv[1]),rc);
00336 }
00337
00338
00341 int changepw( int argc, char * argv[], void * data)
00342 {
00343 int rc;
00344
00345 rc = kio_ChangePW(koreio,atoi(argv[1]));
00346
00347 if(rc < 0)
00348 printf("wrong pw\r\n");
00349 else
00350 printf("Changed pw: %d\r\n",atoi(argv[1]));
00351 }
00352
00353
00356 int setpw( int argc, char * argv[], void * data)
00357 {
00358 int rc;
00359
00360 rc = kio_SetPW(koreio,atoi(argv[1]));
00361
00362 if(rc < 0)
00363 printf("wrong pw\r\n");
00364 else
00365 printf("Set pw: %d\r\n",atoi(argv[1]));
00366 }
00367
00368
00371 int readi2c(int argc, char * argv[], void * data)
00372 {
00373 int rc;
00374 uint32_t i2c_values;
00375 char temp;
00376 char i;
00377 char n_read;
00378
00379 kio_i2c_StartRead(koreio,atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
00380
00381 usleep(10000);
00382
00383 rc = kio_i2c_ReturnRead(koreio,atoi(argv[3]), &i2c_values);
00384
00385 n_read = atoi(argv[3]);
00386 if (n_read > 4)
00387 n_read = 4;
00388
00389 for(i = 0; i < n_read; i++)
00390 {
00391 temp = i2c_values;
00392 printf("Read n°%d : 0x%x\r\n",i,temp);
00393 i2c_values = i2c_values >> 8;
00394 }
00395
00396 }
00397
00398
00401 int writei2c(int argc, char * argv[], void * data)
00402 {
00403
00404 kio_i2c_Write(koreio, atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
00405
00406 printf("Write 0x%x on device 0x%x at register 0x%x\r\n", atoi(argv[3]), atoi(argv[1]), atoi(argv[2]));
00407 }
00408
00409
00410
00414 int startscan(int argc, char * argv[], void * data)
00415 {
00416 kio_i2c_StartScan(koreio);
00417 printf("I2C address scan started\r\n");
00418 }
00419
00420
00423 int listscan(int argc, char * argv[], void * data)
00424 {
00425 char addlist[128];
00426 int rc,i;
00427
00428 rc = kio_i2c_ListScan(koreio, addlist);
00429
00430 if(rc < 0)
00431 printf("List scan error\r\n");
00432 else
00433 printf("Secondary bus scan: %d device found\r\n",rc);
00434
00435 for(i=0; i<rc; i++)
00436 printf("device %d: 0x%x\r\n",i,addlist[i]);
00437
00438 }
00439
00440
00443 int resetpw( int argc, char * argv[], void * data)
00444 {
00445 int rc;
00446
00447 rc = kio_ClearPW(koreio,atoi(argv[1]));
00448
00449 if(rc < 0)
00450 printf("wrong pw\r\n");
00451 else
00452 printf("Cleared pw: %d\r\n",atoi(argv[1]));
00453 }
00454
00455
00462 int timer( int argc, char * argv[], void * data)
00463 {
00464 int rc;
00465 char * msg[] = {"reset", "stopped", "started"};
00466
00467 rc = kio_Timer(koreio,atoi(argv[1]));
00468
00469 if(rc < 0)
00470 printf("wrong action\r\n");
00471 else
00472 printf("Timer is %s\r\n",msg[atoi(argv[1])]);
00473 }
00474
00475 int help( int argc , char * argv[] , void * data);
00476
00480 static kb_command_t cmds[] = {
00481 { "quit" , 0 , 0 , quit } ,
00482 { "exit" , 0 , 0 , quit } ,
00483 { "bye" , 0 , 0 , quit } ,
00484 { "readios" , 0 , 0 , readios },
00485 { "readio" , 1 , 1 , readio },
00486 { "setio" , 1 , 1 , setio },
00487 { "cleario" , 1 , 1 , resetio },
00488 { "setratio" , 2 , 2 , setratio },
00489 { "setfreq" , 1 , 1 , setfreq },
00490 { "setpw" , 1 , 1 , setpw },
00491 { "clearpw" , 1 , 1 , resetpw },
00492 { "changepw" , 1 , 1 , changepw },
00493 { "changeio" , 1 , 1 , changeio },
00494 { "changeled" , 1 , 1 , changeled },
00495 { "configio" , 2 , 2 , configio },
00496 { "readad" , 1 , 1 , readad },
00497 { "startscan" , 0 , 0 , startscan},
00498 { "listscan" , 0 , 0 , listscan},
00499 { "readi2c" , 3 , 3 , readi2c },
00500 { "writei2c" , 3 , 3 , writei2c },
00501 { "timer" , 1 , 1 , timer},
00502 { "help" , 0 , 0 , help } ,
00503 { NULL , 0 , 0 , NULL }
00504 };
00505
00506
00509 int help( int argc , char * argv[] , void * data)
00510 {
00511 kb_command_t * scan = cmds;
00512 while(scan->name != NULL)
00513 {
00514 printf("%s\r\n",scan->name);
00515 scan++;
00516 }
00517 return 0;
00518 }
00519
00520
00524 static char buf[1024];
00525
00526 int main( int argc , char * argv[] )
00527 {
00528 int rc,ver;
00529
00530
00531 kb_set_debug_level(2);
00532
00533 if((rc = kb_init( argc , argv )) < 0 )
00534 return 1;
00535
00536 signal( SIGINT , ctrlc_handler );
00537
00538 printf("K-Team KoreIO Test Program\r\n");
00539
00540 koreio = knet_open( "KoreIOLE:Board", KNET_BUS_ANY, 0 , NULL );
00541 if(!koreio)
00542 {
00543 printf("Cannot open KoreIO device trying alternate address\r\n");
00544 koreio = knet_open( "KoreIOLE:AltBoard", KNET_BUS_ANY, 0 , NULL );
00545 if(!koreio)
00546 {
00547 printf("Cannot open KoreIO device\r\n");
00548 return 1;
00549 }
00550 }
00551
00552
00553 kio_GetFWVersion(koreio,&ver);
00554
00555 printf("KoreIO firmware %d.%d\r\n", (ver&0x000000F0)>>4, (ver&0x0000000F));
00556
00557
00558 while (!quitReq) {
00559 printf("\n> ");
00560
00561 if ( fgets( buf , sizeof(buf) , stdin ) != NULL ) {
00562 buf[strlen(buf)-1] = '\0';
00563 kb_parse_command( buf , cmds , NULL);
00564 }
00565 }
00566
00567 knet_close( koreio );
00568 }