Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

Committer:
Kazuki Yamamoto
Date:
Sat Dec 06 02:18:02 2014 +0900
Revision:
13:aa9e9a6fcef9
Parent:
12:db621ae6a076
Child:
14:5319d562834e
=added enum, chip id type change

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kazuki Yamamoto 9:844e301ab0fd 1 /** uart_i2c_conv for LPC824
Kazuki Yamamoto 9:844e301ab0fd 2 */
Kazuki Yamamoto 9:844e301ab0fd 3
Kazuki Yamamoto 5:07f7000ec747 4 #include "mbed.h"
Kazuki Yamamoto 5:07f7000ec747 5
Kazuki Yamamoto 5:07f7000ec747 6 Serial pc(USBTX,USBRX);
Kazuki Yamamoto 9:844e301ab0fd 7 I2C dev1(I2C_SDA, I2C_SCL);//11,10 hard coded
Kazuki Yamamoto 9:844e301ab0fd 8 I2C dev2(P0_6, P0_14);//6,14
Kazuki Yamamoto 9:844e301ab0fd 9 I2C dev3(P0_23, P0_22);//23,22
Kazuki Yamamoto 9:844e301ab0fd 10 I2C dev4(P0_21, P0_20);//21,20
Kazuki Yamamoto 9:844e301ab0fd 11
Kazuki Yamamoto 11:0d8359a6e2c2 12 /*
Kazuki Yamamoto 11:0d8359a6e2c2 13 DigitalInOut _GPIO0(D0);
Kazuki Yamamoto 11:0d8359a6e2c2 14 DigitalInOut _GPIO1(D1);
Kazuki Yamamoto 11:0d8359a6e2c2 15 DigitalInOut _GPIO2(D2);
Kazuki Yamamoto 11:0d8359a6e2c2 16 DigitalInOut _GPIO3(D3);
Kazuki Yamamoto 11:0d8359a6e2c2 17 DigitalInOut _GPIO4(D4);
Kazuki Yamamoto 11:0d8359a6e2c2 18 DigitalInOut _GPIO5(D5);
Kazuki Yamamoto 11:0d8359a6e2c2 19 DigitalInOut _GPIO6(D6);
Kazuki Yamamoto 11:0d8359a6e2c2 20 DigitalInOut _GPIO7(D7);
Kazuki Yamamoto 11:0d8359a6e2c2 21 */
Kazuki Yamamoto 5:07f7000ec747 22
Kazuki Yamamoto 5:07f7000ec747 23 //Table 3. ASCII commands supported by SC18IM700
Kazuki Yamamoto 5:07f7000ec747 24 //ASCII command Hex value Command function
Kazuki Yamamoto 5:07f7000ec747 25 //[X] S 0x53 I2C-bus START
Kazuki Yamamoto 5:07f7000ec747 26 //[X] P 0x50 I2C-bus STOP
Kazuki Yamamoto 9:844e301ab0fd 27 //[?] R 0x52 read SC18IM700 internal register
Kazuki Yamamoto 9:844e301ab0fd 28 //[?] W 0x57 write to SC18IM700 internal register
Kazuki Yamamoto 9:844e301ab0fd 29 //[?] I 0x49 read GPIO port
Kazuki Yamamoto 9:844e301ab0fd 30 //[?] O 0x4F write to GPIO port
Kazuki Yamamoto 5:07f7000ec747 31 //[_] Z 0x5A power down
Kazuki Yamamoto 5:07f7000ec747 32 //[X] C 0x43 change channel
Kazuki Yamamoto 9:844e301ab0fd 33 //[_] E 0x45 enable chip
Kazuki Yamamoto 9:844e301ab0fd 34 //[_] V 0x__ enable VDDIO output to chip
Kazuki Yamamoto 5:07f7000ec747 35
Kazuki Yamamoto 12:db621ae6a076 36 /**
Kazuki Yamamoto 12:db621ae6a076 37 "C| '0'| P"
Kazuki Yamamoto 12:db621ae6a076 38 "C| '1'| P"
Kazuki Yamamoto 12:db621ae6a076 39 "C| '2'| P"
Kazuki Yamamoto 12:db621ae6a076 40 "C| '3'| P"
Kazuki Yamamoto 12:db621ae6a076 41 "S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| P"
Kazuki Yamamoto 12:db621ae6a076 42 "S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| S| 0x_8 _1| 0x_0 _4| P"
Kazuki Yamamoto 12:db621ae6a076 43 "S| 0x_8 _1| 0x_0 _4| P"
Kazuki Yamamoto 12:db621ae6a076 44 "R| '0'| P"
Kazuki Yamamoto 12:db621ae6a076 45 "R| '0'| '1'| ...| P"
Kazuki Yamamoto 12:db621ae6a076 46 "W| '0' 0x_a _a| P"
Kazuki Yamamoto 12:db621ae6a076 47 "W| '0' 0x_a _a| '1' 0x_b _b| ...| P"
Kazuki Yamamoto 12:db621ae6a076 48 "I| P"
Kazuki Yamamoto 12:db621ae6a076 49 "O| 0x_a _a| P"
Kazuki Yamamoto 12:db621ae6a076 50 */
Kazuki Yamamoto 5:07f7000ec747 51 int main()
Kazuki Yamamoto 5:07f7000ec747 52 {
Kazuki Yamamoto 5:07f7000ec747 53 I2C* dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 54 pc.baud(115200);
Kazuki Yamamoto 9:844e301ab0fd 55
Kazuki Yamamoto 9:844e301ab0fd 56 LPC_IOCON->PIO0_11 &= ~(0x02<<8);
Kazuki Yamamoto 9:844e301ab0fd 57 LPC_IOCON->PIO0_11 |= (0x02<<8);
Kazuki Yamamoto 9:844e301ab0fd 58 LPC_IOCON->PIO0_10 &= ~(0x02<<8);
Kazuki Yamamoto 9:844e301ab0fd 59 LPC_IOCON->PIO0_10 |= (0x02<<8);
Kazuki Yamamoto 5:07f7000ec747 60
Kazuki Yamamoto 9:844e301ab0fd 61 bool s = false;
Kazuki Yamamoto 9:844e301ab0fd 62 dev1.frequency(800000);//800k not work at 1M? too large pullup?
Kazuki Yamamoto 9:844e301ab0fd 63 dev2.frequency(400000);//400k
Kazuki Yamamoto 9:844e301ab0fd 64 dev3.frequency(400000);//400k
Kazuki Yamamoto 9:844e301ab0fd 65 dev4.frequency(400000);//400k
Kazuki Yamamoto 11:0d8359a6e2c2 66 /*
Kazuki Yamamoto 11:0d8359a6e2c2 67 DigitalInOut* gpio[]={
Kazuki Yamamoto 11:0d8359a6e2c2 68 &_GPIO0,
Kazuki Yamamoto 11:0d8359a6e2c2 69 &_GPIO1,
Kazuki Yamamoto 11:0d8359a6e2c2 70 &_GPIO2,
Kazuki Yamamoto 11:0d8359a6e2c2 71 &_GPIO3,
Kazuki Yamamoto 11:0d8359a6e2c2 72 &_GPIO4,
Kazuki Yamamoto 11:0d8359a6e2c2 73 &_GPIO5,
Kazuki Yamamoto 11:0d8359a6e2c2 74 &_GPIO6,
Kazuki Yamamoto 11:0d8359a6e2c2 75 &_GPIO7,
Kazuki Yamamoto 11:0d8359a6e2c2 76 };
Kazuki Yamamoto 11:0d8359a6e2c2 77 */
Kazuki Yamamoto 12:db621ae6a076 78 int ack = 0;
Kazuki Yamamoto 12:db621ae6a076 79 int plength = 0;
Kazuki Yamamoto 12:db621ae6a076 80 char recieve[] = {
Kazuki Yamamoto 12:db621ae6a076 81 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 82 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 83 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 84 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 85 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 86 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 87 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 88 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 89 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 90 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 91 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 92 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 93 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 94 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 95 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 96 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 97 };
Kazuki Yamamoto 12:db621ae6a076 98 char send[] = {
Kazuki Yamamoto 12:db621ae6a076 99 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 100 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 101 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 102 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 103 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 104 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 105 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 106 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 107 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 108 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 109 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 110 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 111 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 112 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 113 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 114 0x0D, 0x0E, 0x0A, 0x0D, 0x0B, 0x0E, 0x0A, 0x0F, 0xD0, 0xE0, 0xA0, 0xD0, 0xB0, 0xE0, 0xA0, 0xF0,
Kazuki Yamamoto 12:db621ae6a076 115 };
Kazuki Yamamoto 12:db621ae6a076 116
Kazuki Yamamoto 12:db621ae6a076 117 char read = 0;
Kazuki Yamamoto 12:db621ae6a076 118 int address = 0;
Kazuki Yamamoto 12:db621ae6a076 119 int data = 0;
Kazuki Yamamoto 12:db621ae6a076 120 int _data = 0;
Kazuki Yamamoto 12:db621ae6a076 121 int length = 0;
Kazuki Yamamoto 12:db621ae6a076 122 int channel = 0;
Kazuki Yamamoto 12:db621ae6a076 123 bool CE = false;
Kazuki Yamamoto 13:aa9e9a6fcef9 124 enum command_e {
Kazuki Yamamoto 13:aa9e9a6fcef9 125 CMD_S='S',
Kazuki Yamamoto 13:aa9e9a6fcef9 126 CMD_P='P',
Kazuki Yamamoto 13:aa9e9a6fcef9 127 CMD_C='C',
Kazuki Yamamoto 13:aa9e9a6fcef9 128 CMD_R='R',
Kazuki Yamamoto 13:aa9e9a6fcef9 129 CMD_W='W',
Kazuki Yamamoto 13:aa9e9a6fcef9 130 CMD_I='I',
Kazuki Yamamoto 13:aa9e9a6fcef9 131 CMD_O='O',
Kazuki Yamamoto 13:aa9e9a6fcef9 132 };
Kazuki Yamamoto 9:844e301ab0fd 133 enum channel_e {
Kazuki Yamamoto 9:844e301ab0fd 134 CH0 = '0',
Kazuki Yamamoto 9:844e301ab0fd 135 CH1 = '1',
Kazuki Yamamoto 9:844e301ab0fd 136 CH2 = '2',
Kazuki Yamamoto 9:844e301ab0fd 137 CH3 = '3',
Kazuki Yamamoto 5:07f7000ec747 138 };
Kazuki Yamamoto 9:844e301ab0fd 139 enum register_e {
Kazuki Yamamoto 12:db621ae6a076 140 CHIP_ID = '0',
Kazuki Yamamoto 9:844e301ab0fd 141 GPIO_STAT = '1',
Kazuki Yamamoto 9:844e301ab0fd 142 GPIO_CONF = '2',
Kazuki Yamamoto 9:844e301ab0fd 143 };
Kazuki Yamamoto 9:844e301ab0fd 144 enum chipID_e {
Kazuki Yamamoto 9:844e301ab0fd 145 ID_LPC824 = '0',
Kazuki Yamamoto 9:844e301ab0fd 146 ID_LPC1768 = '1',
Kazuki Yamamoto 9:844e301ab0fd 147 ID_LPC11UXX = '2',
Kazuki Yamamoto 9:844e301ab0fd 148 };
Kazuki Yamamoto 13:aa9e9a6fcef9 149 char chip_id=ID_LPC824;
Kazuki Yamamoto 13:aa9e9a6fcef9 150 char registers[]={
Kazuki Yamamoto 13:aa9e9a6fcef9 151 (char)chip_id,
Kazuki Yamamoto 13:aa9e9a6fcef9 152 0xAA,
Kazuki Yamamoto 13:aa9e9a6fcef9 153 0xBB,
Kazuki Yamamoto 12:db621ae6a076 154 // 0b00000000, // all 0
Kazuki Yamamoto 12:db621ae6a076 155 // 0b00000000, // all input
Kazuki Yamamoto 9:844e301ab0fd 156 };
Kazuki Yamamoto 9:844e301ab0fd 157
Kazuki Yamamoto 5:07f7000ec747 158 int i=0;
Kazuki Yamamoto 5:07f7000ec747 159 while(1) {
Kazuki Yamamoto 12:db621ae6a076 160 i=0;
Kazuki Yamamoto 12:db621ae6a076 161 length=0;
Kazuki Yamamoto 5:07f7000ec747 162 while(true) {
Kazuki Yamamoto 5:07f7000ec747 163 read=pc.getc();
Kazuki Yamamoto 5:07f7000ec747 164 recieve[i]=read;
Kazuki Yamamoto 5:07f7000ec747 165 i++;
Kazuki Yamamoto 5:07f7000ec747 166 if(read == 'P') {
Kazuki Yamamoto 5:07f7000ec747 167 plength=i;
Kazuki Yamamoto 5:07f7000ec747 168 break;
Kazuki Yamamoto 5:07f7000ec747 169 }
Kazuki Yamamoto 5:07f7000ec747 170 }
Kazuki Yamamoto 5:07f7000ec747 171 i=0;
Kazuki Yamamoto 9:844e301ab0fd 172 while(i < plength) {
Kazuki Yamamoto 5:07f7000ec747 173 switch(recieve[i]) {
Kazuki Yamamoto 13:aa9e9a6fcef9 174 case CMD_C:
Kazuki Yamamoto 5:07f7000ec747 175 {
Kazuki Yamamoto 5:07f7000ec747 176 channel=recieve[i+1];
Kazuki Yamamoto 5:07f7000ec747 177 switch(channel) {
Kazuki Yamamoto 9:844e301ab0fd 178 case CH0:
Kazuki Yamamoto 5:07f7000ec747 179 {
Kazuki Yamamoto 5:07f7000ec747 180 channel='0';
Kazuki Yamamoto 5:07f7000ec747 181 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 182 break;
Kazuki Yamamoto 5:07f7000ec747 183 }
Kazuki Yamamoto 9:844e301ab0fd 184 case CH1:
Kazuki Yamamoto 5:07f7000ec747 185 {
Kazuki Yamamoto 5:07f7000ec747 186 channel='1';
Kazuki Yamamoto 5:07f7000ec747 187 dev=&dev2;
Kazuki Yamamoto 5:07f7000ec747 188 break;
Kazuki Yamamoto 5:07f7000ec747 189 }
Kazuki Yamamoto 9:844e301ab0fd 190 case CH2:
Kazuki Yamamoto 5:07f7000ec747 191 {
Kazuki Yamamoto 5:07f7000ec747 192 channel='2';
Kazuki Yamamoto 5:07f7000ec747 193 dev=&dev3;
Kazuki Yamamoto 5:07f7000ec747 194 break;
Kazuki Yamamoto 5:07f7000ec747 195 }
Kazuki Yamamoto 9:844e301ab0fd 196 case CH3:
Kazuki Yamamoto 5:07f7000ec747 197 {
Kazuki Yamamoto 5:07f7000ec747 198 channel='3';
Kazuki Yamamoto 5:07f7000ec747 199 dev=&dev4;
Kazuki Yamamoto 5:07f7000ec747 200 break;
Kazuki Yamamoto 5:07f7000ec747 201 }
Kazuki Yamamoto 5:07f7000ec747 202 default:
Kazuki Yamamoto 5:07f7000ec747 203 {
Kazuki Yamamoto 5:07f7000ec747 204 channel='0';
Kazuki Yamamoto 5:07f7000ec747 205 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 206 break;
Kazuki Yamamoto 5:07f7000ec747 207 }
Kazuki Yamamoto 5:07f7000ec747 208 }
Kazuki Yamamoto 5:07f7000ec747 209 i+=(2);
Kazuki Yamamoto 5:07f7000ec747 210 break;
Kazuki Yamamoto 5:07f7000ec747 211 }
Kazuki Yamamoto 13:aa9e9a6fcef9 212 case CMD_S:
Kazuki Yamamoto 5:07f7000ec747 213 {
Kazuki Yamamoto 9:844e301ab0fd 214 s = true;
Kazuki Yamamoto 9:844e301ab0fd 215 ack = plength - 2 - (i+1) + (recieve[i+2] & 0x01);
Kazuki Yamamoto 9:844e301ab0fd 216 if( ack >= 4){ //valid packet
Kazuki Yamamoto 9:844e301ab0fd 217 address = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F));
Kazuki Yamamoto 9:844e301ab0fd 218 length = 0xff & (recieve[i+3] << 4 | (recieve[i+4] & 0x0F));
Kazuki Yamamoto 11:0d8359a6e2c2 219 /* hidden
Kazuki Yamamoto 11:0d8359a6e2c2 220 dev->start();
Kazuki Yamamoto 11:0d8359a6e2c2 221 ack=dev->write(address);
Kazuki Yamamoto 11:0d8359a6e2c2 222 */
Kazuki Yamamoto 11:0d8359a6e2c2 223 if( (address&0x01)) {//read
Kazuki Yamamoto 11:0d8359a6e2c2 224 dev->read(address, send, length, false); //added
Kazuki Yamamoto 11:0d8359a6e2c2 225 s=false; //added
Kazuki Yamamoto 11:0d8359a6e2c2 226 /* hidden
Kazuki Yamamoto 11:0d8359a6e2c2 227 for(int j=0; j<length; j++) {
Kazuki Yamamoto 11:0d8359a6e2c2 228 send[j] = dev->read(1);
Kazuki Yamamoto 11:0d8359a6e2c2 229 }
Kazuki Yamamoto 11:0d8359a6e2c2 230 */
Kazuki Yamamoto 11:0d8359a6e2c2 231 i+=(5);
Kazuki Yamamoto 11:0d8359a6e2c2 232 } else {//write
Kazuki Yamamoto 11:0d8359a6e2c2 233 for(int j=0; j < (length * 2); j+=2) {
Kazuki Yamamoto 11:0d8359a6e2c2 234 ack = dev->write( 0xff&(recieve[5+j] << 4 | (recieve[6+j] & 0x0F)) );
Kazuki Yamamoto 11:0d8359a6e2c2 235 *(send+(j/2)) = ack; //added
Kazuki Yamamoto 11:0d8359a6e2c2 236 }
Kazuki Yamamoto 11:0d8359a6e2c2 237 dev->write(address, send, length, true); //added
Kazuki Yamamoto 11:0d8359a6e2c2 238 i+=(5 + length * 2);
Kazuki Yamamoto 11:0d8359a6e2c2 239 length=0;
Kazuki Yamamoto 11:0d8359a6e2c2 240 }
Kazuki Yamamoto 9:844e301ab0fd 241 }else{
Kazuki Yamamoto 9:844e301ab0fd 242 pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
Kazuki Yamamoto 11:0d8359a6e2c2 243 i = plength;
Kazuki Yamamoto 5:07f7000ec747 244 }
Kazuki Yamamoto 5:07f7000ec747 245 break;
Kazuki Yamamoto 5:07f7000ec747 246 }
Kazuki Yamamoto 13:aa9e9a6fcef9 247 case CMD_P:
Kazuki Yamamoto 9:844e301ab0fd 248 {
Kazuki Yamamoto 5:07f7000ec747 249 if(s){
Kazuki Yamamoto 5:07f7000ec747 250 dev->stop();
Kazuki Yamamoto 11:0d8359a6e2c2 251 s = false;
Kazuki Yamamoto 5:07f7000ec747 252 }
Kazuki Yamamoto 11:0d8359a6e2c2 253 i = plength;
Kazuki Yamamoto 5:07f7000ec747 254 for(int j=0; j<length; j++) {
Kazuki Yamamoto 5:07f7000ec747 255 pc.printf("%02X,",send[j]);
Kazuki Yamamoto 5:07f7000ec747 256 }
Kazuki Yamamoto 5:07f7000ec747 257 pc.printf("ok\n\r");
Kazuki Yamamoto 5:07f7000ec747 258 break;
Kazuki Yamamoto 9:844e301ab0fd 259 }
Kazuki Yamamoto 13:aa9e9a6fcef9 260 case CMD_R:
Kazuki Yamamoto 9:844e301ab0fd 261 {
Kazuki Yamamoto 11:0d8359a6e2c2 262 length = plength - 2;
Kazuki Yamamoto 11:0d8359a6e2c2 263 for(int j=0; j<length; j++){
Kazuki Yamamoto 12:db621ae6a076 264 address = recieve[i+1+j];
Kazuki Yamamoto 11:0d8359a6e2c2 265 switch(address){
Kazuki Yamamoto 11:0d8359a6e2c2 266 case CHIP_ID:
Kazuki Yamamoto 11:0d8359a6e2c2 267 {
Kazuki Yamamoto 11:0d8359a6e2c2 268 *(send+j) = registers[CHIP_ID];
Kazuki Yamamoto 11:0d8359a6e2c2 269 break;
Kazuki Yamamoto 11:0d8359a6e2c2 270 }
Kazuki Yamamoto 11:0d8359a6e2c2 271 case GPIO_STAT:
Kazuki Yamamoto 11:0d8359a6e2c2 272 {
Kazuki Yamamoto 11:0d8359a6e2c2 273 *(send+j) = registers[GPIO_STAT];
Kazuki Yamamoto 11:0d8359a6e2c2 274 break;
Kazuki Yamamoto 11:0d8359a6e2c2 275 }
Kazuki Yamamoto 11:0d8359a6e2c2 276 case GPIO_CONF:
Kazuki Yamamoto 11:0d8359a6e2c2 277 {
Kazuki Yamamoto 11:0d8359a6e2c2 278 *(send+j) = registers[GPIO_CONF];
Kazuki Yamamoto 11:0d8359a6e2c2 279 break;
Kazuki Yamamoto 11:0d8359a6e2c2 280 }
Kazuki Yamamoto 11:0d8359a6e2c2 281 default:
Kazuki Yamamoto 11:0d8359a6e2c2 282 {
Kazuki Yamamoto 12:db621ae6a076 283 *(send+j) = 0xAA;
Kazuki Yamamoto 11:0d8359a6e2c2 284 break;
Kazuki Yamamoto 11:0d8359a6e2c2 285 }
Kazuki Yamamoto 11:0d8359a6e2c2 286 }
Kazuki Yamamoto 11:0d8359a6e2c2 287 }
Kazuki Yamamoto 12:db621ae6a076 288 i += length+1;
Kazuki Yamamoto 12:db621ae6a076 289 // pc.printf("command R is not implemented, ");
Kazuki Yamamoto 5:07f7000ec747 290 break;
Kazuki Yamamoto 9:844e301ab0fd 291 }
Kazuki Yamamoto 13:aa9e9a6fcef9 292 case CMD_W:
Kazuki Yamamoto 9:844e301ab0fd 293 {
Kazuki Yamamoto 11:0d8359a6e2c2 294 length = plength - 2;
Kazuki Yamamoto 11:0d8359a6e2c2 295 if(length < 3){
Kazuki Yamamoto 11:0d8359a6e2c2 296 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 11:0d8359a6e2c2 297 i = plength + 1;
Kazuki Yamamoto 11:0d8359a6e2c2 298 }else{
Kazuki Yamamoto 11:0d8359a6e2c2 299 for(int j=0; j<length; j+=3){
Kazuki Yamamoto 11:0d8359a6e2c2 300 address = recieve[i+1+j];
Kazuki Yamamoto 11:0d8359a6e2c2 301 data = 0xff & (recieve[i+1+j] << 4 | (recieve[i+2+j] & 0x0F));
Kazuki Yamamoto 11:0d8359a6e2c2 302 switch(address){
Kazuki Yamamoto 11:0d8359a6e2c2 303 case CHIP_ID:
Kazuki Yamamoto 11:0d8359a6e2c2 304 {
Kazuki Yamamoto 11:0d8359a6e2c2 305 //READ ONLY: do nothing
Kazuki Yamamoto 11:0d8359a6e2c2 306 *(send+j) = registers[CHIP_ID];
Kazuki Yamamoto 11:0d8359a6e2c2 307 break;
Kazuki Yamamoto 11:0d8359a6e2c2 308 }
Kazuki Yamamoto 11:0d8359a6e2c2 309 case GPIO_STAT:
Kazuki Yamamoto 11:0d8359a6e2c2 310 {
Kazuki Yamamoto 12:db621ae6a076 311 //READ ONLY from this command: do nothing
Kazuki Yamamoto 11:0d8359a6e2c2 312 *(send+j) = registers[GPIO_STAT];
Kazuki Yamamoto 11:0d8359a6e2c2 313 break;
Kazuki Yamamoto 11:0d8359a6e2c2 314 }
Kazuki Yamamoto 11:0d8359a6e2c2 315 case GPIO_CONF:
Kazuki Yamamoto 11:0d8359a6e2c2 316 {
Kazuki Yamamoto 11:0d8359a6e2c2 317 registers[GPIO_CONF] = data;
Kazuki Yamamoto 11:0d8359a6e2c2 318 *(send+j) = registers[GPIO_CONF];
Kazuki Yamamoto 11:0d8359a6e2c2 319 break;
Kazuki Yamamoto 11:0d8359a6e2c2 320 }
Kazuki Yamamoto 11:0d8359a6e2c2 321 default:
Kazuki Yamamoto 11:0d8359a6e2c2 322 {
Kazuki Yamamoto 11:0d8359a6e2c2 323 break;
Kazuki Yamamoto 11:0d8359a6e2c2 324 }
Kazuki Yamamoto 11:0d8359a6e2c2 325 }
Kazuki Yamamoto 11:0d8359a6e2c2 326 }
Kazuki Yamamoto 11:0d8359a6e2c2 327 }
Kazuki Yamamoto 12:db621ae6a076 328 i += length+1;
Kazuki Yamamoto 12:db621ae6a076 329 pc.printf("command W is not implemented, ");
Kazuki Yamamoto 9:844e301ab0fd 330 break;
Kazuki Yamamoto 9:844e301ab0fd 331 }
Kazuki Yamamoto 13:aa9e9a6fcef9 332 case CMD_I:
Kazuki Yamamoto 9:844e301ab0fd 333 {
Kazuki Yamamoto 9:844e301ab0fd 334 pc.printf("command I is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 335 i=plength;
Kazuki Yamamoto 5:07f7000ec747 336 break;
Kazuki Yamamoto 9:844e301ab0fd 337 }
Kazuki Yamamoto 13:aa9e9a6fcef9 338 case CMD_O:
Kazuki Yamamoto 9:844e301ab0fd 339 {
Kazuki Yamamoto 9:844e301ab0fd 340 pc.printf("command O is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 341 i=plength;
Kazuki Yamamoto 5:07f7000ec747 342 break;
Kazuki Yamamoto 9:844e301ab0fd 343 }
Kazuki Yamamoto 9:844e301ab0fd 344 case 'Z':
Kazuki Yamamoto 9:844e301ab0fd 345 {
Kazuki Yamamoto 9:844e301ab0fd 346 pc.printf("command Z is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 347 i=plength;
Kazuki Yamamoto 5:07f7000ec747 348 break;
Kazuki Yamamoto 9:844e301ab0fd 349 }
Kazuki Yamamoto 9:844e301ab0fd 350 case 'E':
Kazuki Yamamoto 9:844e301ab0fd 351 {
Kazuki Yamamoto 9:844e301ab0fd 352 pc.printf("command E is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 353 i=plength;
Kazuki Yamamoto 5:07f7000ec747 354 break;
Kazuki Yamamoto 9:844e301ab0fd 355 }
Kazuki Yamamoto 9:844e301ab0fd 356 case 'V':
Kazuki Yamamoto 9:844e301ab0fd 357 {
Kazuki Yamamoto 9:844e301ab0fd 358 pc.printf("command V is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 359 i=plength;
Kazuki Yamamoto 5:07f7000ec747 360 break;
Kazuki Yamamoto 9:844e301ab0fd 361 }
Kazuki Yamamoto 9:844e301ab0fd 362 default:
Kazuki Yamamoto 9:844e301ab0fd 363 {
Kazuki Yamamoto 12:db621ae6a076 364 pc.printf("command %s is not implemented\n\r", recieve[i]);
Kazuki Yamamoto 9:844e301ab0fd 365 i=plength;
Kazuki Yamamoto 9:844e301ab0fd 366 break;
Kazuki Yamamoto 9:844e301ab0fd 367 }
Kazuki Yamamoto 5:07f7000ec747 368 }
Kazuki Yamamoto 5:07f7000ec747 369 }
Kazuki Yamamoto 5:07f7000ec747 370 i=0;
Kazuki Yamamoto 5:07f7000ec747 371 length=0;
Kazuki Yamamoto 5:07f7000ec747 372 }
Kazuki Yamamoto 5:07f7000ec747 373 }