I2C via rpc
Dependencies: RPCInterface mbed
Fork of RPC_Serial by
main.cpp@2:1b38b24c66dc, 2013-04-30 (annotated)
- Committer:
- sammekevremde
- Date:
- Tue Apr 30 07:04:28 2013 +0000
- Revision:
- 2:1b38b24c66dc
- Parent:
- 1:de34af25056a
Voor bjorn
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MichaelW | 0:78952cd3935b | 1 | #include "mbed.h" |
MichaelW | 0:78952cd3935b | 2 | #include "rpc.h" |
sammekevremde | 2:1b38b24c66dc | 3 | #include "RPCFunction.h" |
sammekevremde | 2:1b38b24c66dc | 4 | #include "RPCVariable.h" |
MichaelW | 0:78952cd3935b | 5 | Serial pc(USBTX, USBRX); |
sammekevremde | 2:1b38b24c66dc | 6 | I2C i2c(p28,p27); |
sammekevremde | 2:1b38b24c66dc | 7 | //functions definition |
sammekevremde | 2:1b38b24c66dc | 8 | void sendData(char * input, char * output); |
sammekevremde | 2:1b38b24c66dc | 9 | void readData(char * input, char * output); |
sammekevremde | 2:1b38b24c66dc | 10 | //RPC function calls |
sammekevremde | 2:1b38b24c66dc | 11 | RPCFunction send(&sendData, "send"); |
sammekevremde | 2:1b38b24c66dc | 12 | RPCFunction read(&readData, "read"); |
sammekevremde | 2:1b38b24c66dc | 13 | |
sammekevremde | 2:1b38b24c66dc | 14 | // Functions |
sammekevremde | 2:1b38b24c66dc | 15 | void sendData(char * input, char * output) |
sammekevremde | 2:1b38b24c66dc | 16 | { |
sammekevremde | 2:1b38b24c66dc | 17 | int adress; |
sammekevremde | 2:1b38b24c66dc | 18 | int length; |
sammekevremde | 2:1b38b24c66dc | 19 | int offset; |
sammekevremde | 2:1b38b24c66dc | 20 | char *data = &input[0]; |
sammekevremde | 2:1b38b24c66dc | 21 | int temp; |
sammekevremde | 2:1b38b24c66dc | 22 | int i=0; |
sammekevremde | 2:1b38b24c66dc | 23 | sscanf(data, "%x %x %n", &adress,&length, &offset); |
sammekevremde | 2:1b38b24c66dc | 24 | // printf("adress = %#x \nlengte= %#x \n", adress , length); |
sammekevremde | 2:1b38b24c66dc | 25 | data += offset; |
sammekevremde | 2:1b38b24c66dc | 26 | char cmd[length]; |
sammekevremde | 2:1b38b24c66dc | 27 | while (1==sscanf(data, "%x %n", &temp, &offset)) |
sammekevremde | 2:1b38b24c66dc | 28 | { |
sammekevremde | 2:1b38b24c66dc | 29 | cmd[i]=temp; |
sammekevremde | 2:1b38b24c66dc | 30 | data += offset; |
sammekevremde | 2:1b38b24c66dc | 31 | i++; |
sammekevremde | 2:1b38b24c66dc | 32 | } |
sammekevremde | 2:1b38b24c66dc | 33 | // printf("adress = %#x \nlengte= %#x \ncmd[0]= %#x \ncmd[1]= %#x\n", adress , length ,cmd[0],cmd[1]); |
sammekevremde | 2:1b38b24c66dc | 34 | i2c.write(adress,cmd,length); |
sammekevremde | 2:1b38b24c66dc | 35 | } |
sammekevremde | 2:1b38b24c66dc | 36 | void readData(char * input, char * output) |
sammekevremde | 2:1b38b24c66dc | 37 | { |
sammekevremde | 2:1b38b24c66dc | 38 | strcpy(output,""); |
sammekevremde | 2:1b38b24c66dc | 39 | int adress; |
sammekevremde | 2:1b38b24c66dc | 40 | int length; |
sammekevremde | 2:1b38b24c66dc | 41 | int offset; |
sammekevremde | 2:1b38b24c66dc | 42 | char *data = &input[0]; |
sammekevremde | 2:1b38b24c66dc | 43 | sscanf(data, " %x %x%n", &adress,&length, &offset); |
sammekevremde | 2:1b38b24c66dc | 44 | data += offset; |
sammekevremde | 2:1b38b24c66dc | 45 | char cmd[length]; |
sammekevremde | 2:1b38b24c66dc | 46 | |
sammekevremde | 2:1b38b24c66dc | 47 | i2c.read(adress,cmd,length); |
sammekevremde | 2:1b38b24c66dc | 48 | char temp[4]; |
sammekevremde | 2:1b38b24c66dc | 49 | for (int i=0;i<length;i++) |
sammekevremde | 2:1b38b24c66dc | 50 | { |
sammekevremde | 2:1b38b24c66dc | 51 | sprintf(temp,"%x",cmd[i]); |
sammekevremde | 2:1b38b24c66dc | 52 | strcat(output,temp); |
sammekevremde | 2:1b38b24c66dc | 53 | } |
sammekevremde | 2:1b38b24c66dc | 54 | // printf("%#x %#x",cmd[0],cmd[1]); |
sammekevremde | 2:1b38b24c66dc | 55 | } |
sammekevremde | 2:1b38b24c66dc | 56 | |
MichaelW | 0:78952cd3935b | 57 | int main() { |
MichaelW | 1:de34af25056a | 58 | // setup the classes that can be created dynamically |
MichaelW | 0:78952cd3935b | 59 | Base::add_rpc_class<AnalogIn>(); |
MichaelW | 0:78952cd3935b | 60 | Base::add_rpc_class<AnalogOut>(); |
MichaelW | 0:78952cd3935b | 61 | Base::add_rpc_class<DigitalIn>(); |
MichaelW | 0:78952cd3935b | 62 | Base::add_rpc_class<DigitalOut>(); |
MichaelW | 0:78952cd3935b | 63 | Base::add_rpc_class<DigitalInOut>(); |
MichaelW | 0:78952cd3935b | 64 | Base::add_rpc_class<PwmOut>(); |
MichaelW | 0:78952cd3935b | 65 | Base::add_rpc_class<Timer>(); |
MichaelW | 0:78952cd3935b | 66 | Base::add_rpc_class<SPI>(); |
MichaelW | 0:78952cd3935b | 67 | Base::add_rpc_class<BusOut>(); |
MichaelW | 0:78952cd3935b | 68 | Base::add_rpc_class<BusIn>(); |
MichaelW | 0:78952cd3935b | 69 | Base::add_rpc_class<BusInOut>(); |
MichaelW | 0:78952cd3935b | 70 | Base::add_rpc_class<Serial>(); |
MichaelW | 1:de34af25056a | 71 | // receive commands, and send back the responses |
MichaelW | 0:78952cd3935b | 72 | char buf[256], outbuf[256]; |
MichaelW | 0:78952cd3935b | 73 | while(1) { |
MichaelW | 0:78952cd3935b | 74 | pc.gets(buf, 256); |
MichaelW | 0:78952cd3935b | 75 | rpc(buf, outbuf); |
MichaelW | 0:78952cd3935b | 76 | pc.printf("%s\n", outbuf); |
MichaelW | 0:78952cd3935b | 77 | } |
MichaelW | 0:78952cd3935b | 78 | } |