I2C via rpc

Dependencies:   RPCInterface mbed

Fork of RPC_Serial by Michael Walker

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?

UserRevisionLine numberNew 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 }