Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

koreio.c

Go to the documentation of this file.
00001 /*-------------------------------------------------------------------- 00002 * koreio.c - KoreBot Library - KoreIO Support 00003 *-------------------------------------------------------------------- 00004 * $Id: koreio.c,v 1.3 2005/03/02 15:12:13 lambercy Exp $ 00005 *-------------------------------------------------------------------- 00006 * 00007 * $Author: lambercy $ 00008 * $date: 2005/03/02 16:11:35 $ 00009 * $Revision: 1.3 $ 00010 * 00011 * $Author: lambercy $ 00012 * $Date: 2005/03/02 15:12:13 $ 00013 * $Revision: 1.3 $ 00014 *--------------------------------------------------------------------*/ 00015 00016 #include "korebot.h" 00017 00033 /*--------------------------------------------------------------------*/ 00041 void kio_GetFWVersion( knet_dev_t * dev , 00042 unsigned int * version ) 00043 { 00044 unsigned char val; 00045 00046 knet_read8( dev , KIO_FWVersion, &val ); 00047 *version = val; 00048 } 00049 00050 00051 /*--------------------------------------------------------------------*/ 00067 int kio_ReadAnalog(knet_dev_t * dev, unsigned int an, uint16_t *value, uint32_t *time) 00068 { 00069 char addr; 00070 char buf[6]; 00071 char * ptr; 00072 int i; 00073 00074 if(an > 11) 00075 return -1; 00076 00077 addr = KIO_ANReadBase + (an * 6); 00078 00079 if (knet_lltransfer( dev, &addr, 1, buf, 6) < 0) 00080 return -2; 00081 00082 ptr = (char*)value; 00083 ptr[0] = buf[1]; 00084 ptr[1] = buf[0]; 00085 00086 ptr = (char*)time; 00087 ptr[0] = buf[5]; 00088 ptr[1] = buf[4]; 00089 ptr[2] = buf[3]; 00090 ptr[3] = buf[2]; 00091 00092 return 0; 00093 } 00094 00095 00096 00097 00098 /*--------------------------------------------------------------------*/ 00117 int kio_ReadCAN(knet_dev_t * dev, uint32_t *id, char *len, uint32_t *can_data1, uint32_t *can_data2, char *can_status, uint32_t *time) 00118 { 00119 char n_mess; 00120 char addr; 00121 char buf[19]; 00122 char * ptr; 00123 int i; 00124 00125 addr = KIO_CANReadBase; 00126 00127 if (knet_lltransfer( dev, &addr, 1, buf, 19) < 0) 00128 return -2; 00129 if(buf[0] == 0) 00130 return -1; 00131 00132 00133 n_mess = buf[0] - 1; 00134 00135 ptr = (char*)id; 00136 ptr[0] = buf[1]; 00137 ptr[1] = buf[2]; 00138 ptr[2] = buf[3]; 00139 ptr[3] = buf[4]; 00140 00141 ptr = (char*)len; 00142 ptr[0] = buf[5]; 00143 00144 ptr = (char*)can_data1; 00145 ptr[0] = buf[9]; 00146 ptr[1] = buf[8]; 00147 ptr[2] = buf[7]; 00148 ptr[3] = buf[6]; 00149 00150 ptr = (char*)can_data2; 00151 ptr[0] = buf[13]; 00152 ptr[1] = buf[12]; 00153 ptr[2] = buf[11]; 00154 ptr[3] = buf[10]; 00155 00156 ptr = (char*)can_status; 00157 ptr[0] = buf[14]; 00158 00159 ptr = (char*)time; 00160 ptr[0] = buf[15]; 00161 ptr[1] = buf[16]; 00162 ptr[2] = buf[17]; 00163 ptr[3] = buf[18]; 00164 00165 addr = KIO_ClearCAN; 00166 knet_write8(dev, addr, 0); 00167 00168 return n_mess; 00169 00170 } 00171 00172 /*--------------------------------------------------------------------*/ 00188 int kio_SendCAN(knet_dev_t * dev, uint32_t id, uint32_t can_data1, uint32_t can_data2, char len, char can_status) 00189 { 00190 char addr; 00191 char val; 00192 char temp; 00193 00194 if (len > 8) 00195 len = 8; 00196 00197 addr = KIO_CANWriteBase; 00198 00199 temp = id >> 24; 00200 knet_write8(dev, addr, temp); 00201 temp = id >> 16; 00202 knet_write8(dev, addr, temp); 00203 temp = id >> 8; 00204 knet_write8(dev, addr, temp); 00205 temp = id; 00206 knet_write8(dev, addr, temp); 00207 00208 addr++; 00209 00210 temp = can_data1 >> 24; 00211 knet_write8(dev, addr, temp); 00212 temp = can_data1 >> 16; 00213 knet_write8(dev, addr, temp); 00214 temp = can_data1 >> 8; 00215 knet_write8(dev, addr, temp); 00216 temp = can_data1; 00217 knet_write8(dev, addr, temp); 00218 00219 temp = can_data2 >> 24; 00220 knet_write8(dev, addr, temp); 00221 temp = can_data2 >> 16; 00222 knet_write8(dev, addr, temp); 00223 temp = can_data2 >> 8; 00224 knet_write8(dev, addr, temp); 00225 temp = can_data2; 00226 knet_write8(dev, addr, temp); 00227 00228 addr+= 2; 00229 00230 00231 knet_write8(dev, addr, can_status); 00232 addr--; 00233 00234 knet_write8(dev, addr, len); 00235 00236 addr = KIO_Status; 00237 knet_read8(dev,addr,&val); 00238 00239 return val; 00240 00241 00242 } 00243 00244 00245 /*--------------------------------------------------------------------*/ 00258 int kio_SetANValue(knet_dev_t * dev, unsigned int an, unsigned int value) 00259 { 00260 char addr; 00261 00262 if(an > 7) 00263 return -1; 00264 00265 addr = KIO_ANWriteBase + an; 00266 00267 knet_write8(dev, addr, value); 00268 00269 return 0; 00270 } 00271 00272 /*--------------------------------------------------------------------*/ 00288 int kio_ConfigIO(knet_dev_t * dev, unsigned io, unsigned config) 00289 { 00290 if(io > 15) 00291 return -1; 00292 00293 switch(config) 00294 { 00295 case 0 : 00296 knet_write8(dev , KIO_IOConfigIn, io); 00297 break; 00298 case 1 : 00299 knet_write8(dev , KIO_IOConfigOut, io); 00300 break; 00301 case 2 : 00302 knet_write8(dev , KIO_IOConfigPwm, io); 00303 break; 00304 default: 00305 return -2; 00306 break; 00307 } 00308 return 0; 00309 } 00310 00311 /*--------------------------------------------------------------------*/ 00323 int kio_ReadIO(knet_dev_t * dev, unsigned int io) 00324 { 00325 char val; 00326 00327 if(io > 15) 00328 return -1; 00329 00330 knet_read8(dev , KIO_IOReadBase + io, &val); 00331 00332 if(val == 2) 00333 return -2; 00334 else 00335 return val; 00336 } 00337 00338 /*--------------------------------------------------------------------*/ 00350 int kio_SetIO(knet_dev_t * dev, unsigned int io) 00351 { 00352 if(io > 15) 00353 return -1; 00354 00355 knet_write8(dev , KIO_IOSetBase, io); 00356 00357 return 0; 00358 } 00359 00360 /*--------------------------------------------------------------------*/ 00373 int kio_ChangeLed(knet_dev_t * dev, unsigned state) 00374 { 00375 char addr; 00376 00377 if(state > 2) 00378 return -1; 00379 00380 addr = KIO_IOChgLed + state; 00381 knet_write8(dev , addr, 16); 00382 00383 return 0; 00384 } 00385 00386 /*--------------------------------------------------------------------*/ 00398 int kio_ChangeIO(knet_dev_t * dev, unsigned int io) 00399 { 00400 if(io > 15) 00401 return -1; 00402 00403 knet_write8(dev , KIO_IOChgBase, io); 00404 00405 return 0; 00406 } 00407 /*--------------------------------------------------------------------*/ 00419 int kio_ClearIO(knet_dev_t * dev, unsigned int io) 00420 { 00421 if(io > 15) 00422 return -1; 00423 00424 knet_write8(dev , KIO_IOClearBase, io); 00425 00426 return 0; 00427 } 00428 00429 /*-------------------------------------------------------------------*/ 00441 int kio_ChangePWM_ratio(knet_dev_t * dev, unsigned int io, unsigned int ratio) 00442 { 00443 char addr; 00444 00445 if (io > 15) 00446 return -1; 00447 00448 addr = KIO_PWMRatio + io; 00449 knet_write8(dev, addr, ratio); 00450 00451 return 0; 00452 } 00453 00454 /*--------------------------------------------------------------------*/ 00465 int kio_ChangePWM_freq(knet_dev_t * dev, uint16_t freq) 00466 { 00467 char addr; 00468 char temp; 00469 00470 addr = KIO_FreqBase; 00471 00472 temp = freq; 00473 knet_write8(dev, addr, temp); 00474 00475 addr++; 00476 temp = freq >> 8; 00477 knet_write8(dev, addr, temp); 00478 00479 return 0; 00480 } 00481 00482 /*--------------------------------------------------------------------*/ 00493 int kio_ChangePW(knet_dev_t * dev, unsigned int io) 00494 { 00495 if(io > 6) 00496 return -1; 00497 00498 knet_write8(dev , KIO_PWChgBase, io); 00499 00500 return 0; 00501 } 00502 00503 /*--------------------------------------------------------------------*/ 00514 int kio_SetPW(knet_dev_t * dev, unsigned int io) 00515 { 00516 if(io > 6) 00517 return -1; 00518 00519 knet_write8(dev , KIO_PWSetBase, io); 00520 00521 return 0; 00522 } 00523 00524 /*--------------------------------------------------------------------*/ 00535 int kio_ClearPW(knet_dev_t * dev, unsigned int io) 00536 { 00537 if(io > 6) 00538 return -1; 00539 00540 knet_write8(dev , KIO_PWClearBase, io); 00541 00542 return 0; 00543 } 00544 00545 /*--------------------------------------------------------------------*/ 00559 int kio_Timer(knet_dev_t * dev, unsigned action) 00560 { 00561 if(action > 2) 00562 return -1; 00563 00564 knet_write8(dev , KIO_TimerBase, action); 00565 00566 return 0; 00567 } 00568 00569 /*--------------------------------------------------------------------*/ 00575 void kio_i2c_StartScan(knet_dev_t * dev) 00576 { 00577 knet_write8(dev, KIO_I2CScan, 1); 00578 } 00579 00580 /*--------------------------------------------------------------------*/ 00594 int kio_i2c_ListScan(knet_dev_t * dev, char * list) 00595 { 00596 unsigned char val; 00597 char addr; 00598 int len; 00599 00600 if(!list) 00601 return -1; 00602 00603 00604 knet_read8( dev , KIO_I2C_ScanRead, &val ); 00605 len = val; 00606 addr = KIO_I2CList; 00607 00608 if (knet_lltransfer( dev, &addr, 1, list, len) < 0) 00609 return -2; 00610 00611 return val; 00612 } 00613 00614 /*----------------------------------------------------------------------*/ 00624 void kio_i2c_StartRead(knet_dev_t * dev, char device, char reg, char n_read) 00625 { 00626 char addr; 00627 00628 addr = KIO_I2CReadBase +1; 00629 knet_write8(dev, addr, device); 00630 00631 if(n_read > 4) 00632 n_read = 4; 00633 addr++; 00634 knet_write8(dev, addr, n_read); 00635 00636 knet_write8(dev, KIO_I2CReadBase, reg); 00637 00638 } 00639 00640 /*----------------------------------------------------------------------*/ 00653 int kio_i2c_ReturnRead(knet_dev_t * dev, char n_read, uint32_t *values) 00654 { 00655 char addr; 00656 char buf[4]; 00657 char i; 00658 char *ptr; 00659 00660 if (n_read > 4) 00661 n_read = 4; 00662 00663 addr = KIO_I2CReturnRead; 00664 if (knet_lltransfer( dev, &addr, 1, buf, n_read) < 0) 00665 return -2; 00666 00667 ptr = (char*)values; 00668 00669 i = 0; 00670 while(i < n_read) 00671 { 00672 ptr[i] = buf[i]; 00673 i++; 00674 } 00675 return 0; 00676 } 00677 00678 /*--------------------------------------------------------------------------*/ 00691 int kio_i2c_Write(knet_dev_t * dev, char device, char reg, char txdata) 00692 { 00693 00694 char addr; 00695 00696 addr = KIO_I2CWriteAddr; 00697 00698 knet_write8(dev, addr, device); 00699 00700 addr++; 00701 knet_write8(dev, addr, reg); 00702 00703 addr = KIO_I2CWriteBase; 00704 knet_write8(dev, addr, txdata); 00705 00706 } 00707 00708 00709

Generated on Thu Nov 17 15:29:00 2005 for KoreBot Library by doxygen 1.3.7