00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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