Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

Committer:
Kazuki Yamamoto
Date:
Fri Dec 05 17:34:37 2014 +0900
Revision:
12:db621ae6a076
Parent:
11:0d8359a6e2c2
Child:
13:aa9e9a6fcef9
[ LPC824 ] R command fix

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 9:844e301ab0fd 124 enum channel_e {
Kazuki Yamamoto 9:844e301ab0fd 125 CH0 = '0',
Kazuki Yamamoto 9:844e301ab0fd 126 CH1 = '1',
Kazuki Yamamoto 9:844e301ab0fd 127 CH2 = '2',
Kazuki Yamamoto 9:844e301ab0fd 128 CH3 = '3',
Kazuki Yamamoto 5:07f7000ec747 129 };
Kazuki Yamamoto 9:844e301ab0fd 130 enum register_e {
Kazuki Yamamoto 12:db621ae6a076 131 CHIP_ID = '0',
Kazuki Yamamoto 9:844e301ab0fd 132 GPIO_STAT = '1',
Kazuki Yamamoto 9:844e301ab0fd 133 GPIO_CONF = '2',
Kazuki Yamamoto 9:844e301ab0fd 134 };
Kazuki Yamamoto 9:844e301ab0fd 135 enum chipID_e {
Kazuki Yamamoto 9:844e301ab0fd 136 ID_LPC824 = '0',
Kazuki Yamamoto 9:844e301ab0fd 137 ID_LPC1768 = '1',
Kazuki Yamamoto 9:844e301ab0fd 138 ID_LPC11UXX = '2',
Kazuki Yamamoto 9:844e301ab0fd 139 };
Kazuki Yamamoto 9:844e301ab0fd 140 uint8_t chip_id=ID_LPC824;
Kazuki Yamamoto 9:844e301ab0fd 141 uint8_t registers[]={
Kazuki Yamamoto 9:844e301ab0fd 142 chip_id,
Kazuki Yamamoto 12:db621ae6a076 143 0x00,
Kazuki Yamamoto 12:db621ae6a076 144 0x00,
Kazuki Yamamoto 12:db621ae6a076 145 // 0b00000000, // all 0
Kazuki Yamamoto 12:db621ae6a076 146 // 0b00000000, // all input
Kazuki Yamamoto 9:844e301ab0fd 147 };
Kazuki Yamamoto 9:844e301ab0fd 148
Kazuki Yamamoto 5:07f7000ec747 149 int i=0;
Kazuki Yamamoto 5:07f7000ec747 150 while(1) {
Kazuki Yamamoto 12:db621ae6a076 151 i=0;
Kazuki Yamamoto 12:db621ae6a076 152 length=0;
Kazuki Yamamoto 5:07f7000ec747 153 while(true) {
Kazuki Yamamoto 5:07f7000ec747 154 read=pc.getc();
Kazuki Yamamoto 5:07f7000ec747 155 recieve[i]=read;
Kazuki Yamamoto 5:07f7000ec747 156 i++;
Kazuki Yamamoto 5:07f7000ec747 157 if(read == 'P') {
Kazuki Yamamoto 5:07f7000ec747 158 plength=i;
Kazuki Yamamoto 5:07f7000ec747 159 break;
Kazuki Yamamoto 5:07f7000ec747 160 }
Kazuki Yamamoto 5:07f7000ec747 161 }
Kazuki Yamamoto 5:07f7000ec747 162 i=0;
Kazuki Yamamoto 9:844e301ab0fd 163 while(i < plength) {
Kazuki Yamamoto 5:07f7000ec747 164 switch(recieve[i]) {
Kazuki Yamamoto 5:07f7000ec747 165 case 'C':
Kazuki Yamamoto 5:07f7000ec747 166 {
Kazuki Yamamoto 5:07f7000ec747 167 channel=recieve[i+1];
Kazuki Yamamoto 5:07f7000ec747 168 switch(channel) {
Kazuki Yamamoto 9:844e301ab0fd 169 case CH0:
Kazuki Yamamoto 5:07f7000ec747 170 {
Kazuki Yamamoto 5:07f7000ec747 171 channel='0';
Kazuki Yamamoto 5:07f7000ec747 172 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 173 break;
Kazuki Yamamoto 5:07f7000ec747 174 }
Kazuki Yamamoto 9:844e301ab0fd 175 case CH1:
Kazuki Yamamoto 5:07f7000ec747 176 {
Kazuki Yamamoto 5:07f7000ec747 177 channel='1';
Kazuki Yamamoto 5:07f7000ec747 178 dev=&dev2;
Kazuki Yamamoto 5:07f7000ec747 179 break;
Kazuki Yamamoto 5:07f7000ec747 180 }
Kazuki Yamamoto 9:844e301ab0fd 181 case CH2:
Kazuki Yamamoto 5:07f7000ec747 182 {
Kazuki Yamamoto 5:07f7000ec747 183 channel='2';
Kazuki Yamamoto 5:07f7000ec747 184 dev=&dev3;
Kazuki Yamamoto 5:07f7000ec747 185 break;
Kazuki Yamamoto 5:07f7000ec747 186 }
Kazuki Yamamoto 9:844e301ab0fd 187 case CH3:
Kazuki Yamamoto 5:07f7000ec747 188 {
Kazuki Yamamoto 5:07f7000ec747 189 channel='3';
Kazuki Yamamoto 5:07f7000ec747 190 dev=&dev4;
Kazuki Yamamoto 5:07f7000ec747 191 break;
Kazuki Yamamoto 5:07f7000ec747 192 }
Kazuki Yamamoto 5:07f7000ec747 193 default:
Kazuki Yamamoto 5:07f7000ec747 194 {
Kazuki Yamamoto 5:07f7000ec747 195 channel='0';
Kazuki Yamamoto 5:07f7000ec747 196 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 197 break;
Kazuki Yamamoto 5:07f7000ec747 198 }
Kazuki Yamamoto 5:07f7000ec747 199 }
Kazuki Yamamoto 5:07f7000ec747 200 i+=(2);
Kazuki Yamamoto 5:07f7000ec747 201 break;
Kazuki Yamamoto 5:07f7000ec747 202 }
Kazuki Yamamoto 5:07f7000ec747 203 case 'S':
Kazuki Yamamoto 5:07f7000ec747 204 {
Kazuki Yamamoto 9:844e301ab0fd 205 s = true;
Kazuki Yamamoto 9:844e301ab0fd 206 ack = plength - 2 - (i+1) + (recieve[i+2] & 0x01);
Kazuki Yamamoto 9:844e301ab0fd 207 if( ack >= 4){ //valid packet
Kazuki Yamamoto 9:844e301ab0fd 208 address = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F));
Kazuki Yamamoto 9:844e301ab0fd 209 length = 0xff & (recieve[i+3] << 4 | (recieve[i+4] & 0x0F));
Kazuki Yamamoto 11:0d8359a6e2c2 210 /* hidden
Kazuki Yamamoto 11:0d8359a6e2c2 211 dev->start();
Kazuki Yamamoto 11:0d8359a6e2c2 212 ack=dev->write(address);
Kazuki Yamamoto 11:0d8359a6e2c2 213 */
Kazuki Yamamoto 11:0d8359a6e2c2 214 if( (address&0x01)) {//read
Kazuki Yamamoto 11:0d8359a6e2c2 215 dev->read(address, send, length, false); //added
Kazuki Yamamoto 11:0d8359a6e2c2 216 s=false; //added
Kazuki Yamamoto 11:0d8359a6e2c2 217 /* hidden
Kazuki Yamamoto 11:0d8359a6e2c2 218 for(int j=0; j<length; j++) {
Kazuki Yamamoto 11:0d8359a6e2c2 219 send[j] = dev->read(1);
Kazuki Yamamoto 11:0d8359a6e2c2 220 }
Kazuki Yamamoto 11:0d8359a6e2c2 221 */
Kazuki Yamamoto 11:0d8359a6e2c2 222 i+=(5);
Kazuki Yamamoto 11:0d8359a6e2c2 223 } else {//write
Kazuki Yamamoto 11:0d8359a6e2c2 224 for(int j=0; j < (length * 2); j+=2) {
Kazuki Yamamoto 11:0d8359a6e2c2 225 ack = dev->write( 0xff&(recieve[5+j] << 4 | (recieve[6+j] & 0x0F)) );
Kazuki Yamamoto 11:0d8359a6e2c2 226 *(send+(j/2)) = ack; //added
Kazuki Yamamoto 11:0d8359a6e2c2 227 }
Kazuki Yamamoto 11:0d8359a6e2c2 228 dev->write(address, send, length, true); //added
Kazuki Yamamoto 11:0d8359a6e2c2 229 i+=(5 + length * 2);
Kazuki Yamamoto 11:0d8359a6e2c2 230 length=0;
Kazuki Yamamoto 11:0d8359a6e2c2 231 }
Kazuki Yamamoto 9:844e301ab0fd 232 }else{
Kazuki Yamamoto 9:844e301ab0fd 233 pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
Kazuki Yamamoto 11:0d8359a6e2c2 234 i = plength;
Kazuki Yamamoto 5:07f7000ec747 235 }
Kazuki Yamamoto 5:07f7000ec747 236 break;
Kazuki Yamamoto 5:07f7000ec747 237 }
Kazuki Yamamoto 5:07f7000ec747 238 case 'P':
Kazuki Yamamoto 9:844e301ab0fd 239 {
Kazuki Yamamoto 5:07f7000ec747 240 if(s){
Kazuki Yamamoto 5:07f7000ec747 241 dev->stop();
Kazuki Yamamoto 11:0d8359a6e2c2 242 s = false;
Kazuki Yamamoto 5:07f7000ec747 243 }
Kazuki Yamamoto 11:0d8359a6e2c2 244 i = plength;
Kazuki Yamamoto 5:07f7000ec747 245 for(int j=0; j<length; j++) {
Kazuki Yamamoto 5:07f7000ec747 246 pc.printf("%02X,",send[j]);
Kazuki Yamamoto 5:07f7000ec747 247 }
Kazuki Yamamoto 5:07f7000ec747 248 pc.printf("ok\n\r");
Kazuki Yamamoto 5:07f7000ec747 249 break;
Kazuki Yamamoto 9:844e301ab0fd 250 }
Kazuki Yamamoto 5:07f7000ec747 251 case 'R':
Kazuki Yamamoto 9:844e301ab0fd 252 {
Kazuki Yamamoto 11:0d8359a6e2c2 253 length = plength - 2;
Kazuki Yamamoto 11:0d8359a6e2c2 254 for(int j=0; j<length; j++){
Kazuki Yamamoto 12:db621ae6a076 255 address = recieve[i+1+j];
Kazuki Yamamoto 11:0d8359a6e2c2 256 switch(address){
Kazuki Yamamoto 11:0d8359a6e2c2 257 case CHIP_ID:
Kazuki Yamamoto 11:0d8359a6e2c2 258 {
Kazuki Yamamoto 11:0d8359a6e2c2 259 *(send+j) = registers[CHIP_ID];
Kazuki Yamamoto 11:0d8359a6e2c2 260 break;
Kazuki Yamamoto 11:0d8359a6e2c2 261 }
Kazuki Yamamoto 11:0d8359a6e2c2 262 case GPIO_STAT:
Kazuki Yamamoto 11:0d8359a6e2c2 263 {
Kazuki Yamamoto 11:0d8359a6e2c2 264 *(send+j) = registers[GPIO_STAT];
Kazuki Yamamoto 11:0d8359a6e2c2 265 break;
Kazuki Yamamoto 11:0d8359a6e2c2 266 }
Kazuki Yamamoto 11:0d8359a6e2c2 267 case GPIO_CONF:
Kazuki Yamamoto 11:0d8359a6e2c2 268 {
Kazuki Yamamoto 11:0d8359a6e2c2 269 *(send+j) = registers[GPIO_CONF];
Kazuki Yamamoto 11:0d8359a6e2c2 270 break;
Kazuki Yamamoto 11:0d8359a6e2c2 271 }
Kazuki Yamamoto 11:0d8359a6e2c2 272 default:
Kazuki Yamamoto 11:0d8359a6e2c2 273 {
Kazuki Yamamoto 12:db621ae6a076 274 *(send+j) = 0xAA;
Kazuki Yamamoto 11:0d8359a6e2c2 275 break;
Kazuki Yamamoto 11:0d8359a6e2c2 276 }
Kazuki Yamamoto 11:0d8359a6e2c2 277 }
Kazuki Yamamoto 11:0d8359a6e2c2 278 }
Kazuki Yamamoto 12:db621ae6a076 279 i += length+1;
Kazuki Yamamoto 12:db621ae6a076 280 // pc.printf("command R is not implemented, ");
Kazuki Yamamoto 5:07f7000ec747 281 break;
Kazuki Yamamoto 9:844e301ab0fd 282 }
Kazuki Yamamoto 5:07f7000ec747 283 case 'W':
Kazuki Yamamoto 9:844e301ab0fd 284 {
Kazuki Yamamoto 11:0d8359a6e2c2 285 length = plength - 2;
Kazuki Yamamoto 11:0d8359a6e2c2 286 if(length < 3){
Kazuki Yamamoto 11:0d8359a6e2c2 287 pc.printf("bad packet! %d\n\r",length);
Kazuki Yamamoto 11:0d8359a6e2c2 288 i = plength + 1;
Kazuki Yamamoto 11:0d8359a6e2c2 289 }else{
Kazuki Yamamoto 11:0d8359a6e2c2 290 for(int j=0; j<length; j+=3){
Kazuki Yamamoto 11:0d8359a6e2c2 291 address = recieve[i+1+j];
Kazuki Yamamoto 11:0d8359a6e2c2 292 data = 0xff & (recieve[i+1+j] << 4 | (recieve[i+2+j] & 0x0F));
Kazuki Yamamoto 11:0d8359a6e2c2 293 switch(address){
Kazuki Yamamoto 11:0d8359a6e2c2 294 case CHIP_ID:
Kazuki Yamamoto 11:0d8359a6e2c2 295 {
Kazuki Yamamoto 11:0d8359a6e2c2 296 //READ ONLY: do nothing
Kazuki Yamamoto 11:0d8359a6e2c2 297 *(send+j) = registers[CHIP_ID];
Kazuki Yamamoto 11:0d8359a6e2c2 298 break;
Kazuki Yamamoto 11:0d8359a6e2c2 299 }
Kazuki Yamamoto 11:0d8359a6e2c2 300 case GPIO_STAT:
Kazuki Yamamoto 11:0d8359a6e2c2 301 {
Kazuki Yamamoto 12:db621ae6a076 302 //READ ONLY from this command: do nothing
Kazuki Yamamoto 11:0d8359a6e2c2 303 *(send+j) = registers[GPIO_STAT];
Kazuki Yamamoto 11:0d8359a6e2c2 304 break;
Kazuki Yamamoto 11:0d8359a6e2c2 305 }
Kazuki Yamamoto 11:0d8359a6e2c2 306 case GPIO_CONF:
Kazuki Yamamoto 11:0d8359a6e2c2 307 {
Kazuki Yamamoto 11:0d8359a6e2c2 308 registers[GPIO_CONF] = data;
Kazuki Yamamoto 11:0d8359a6e2c2 309 *(send+j) = registers[GPIO_CONF];
Kazuki Yamamoto 11:0d8359a6e2c2 310 break;
Kazuki Yamamoto 11:0d8359a6e2c2 311 }
Kazuki Yamamoto 11:0d8359a6e2c2 312 default:
Kazuki Yamamoto 11:0d8359a6e2c2 313 {
Kazuki Yamamoto 11:0d8359a6e2c2 314 break;
Kazuki Yamamoto 11:0d8359a6e2c2 315 }
Kazuki Yamamoto 11:0d8359a6e2c2 316 }
Kazuki Yamamoto 11:0d8359a6e2c2 317 }
Kazuki Yamamoto 11:0d8359a6e2c2 318 }
Kazuki Yamamoto 12:db621ae6a076 319 i += length+1;
Kazuki Yamamoto 12:db621ae6a076 320 pc.printf("command W is not implemented, ");
Kazuki Yamamoto 9:844e301ab0fd 321 break;
Kazuki Yamamoto 9:844e301ab0fd 322 }
Kazuki Yamamoto 9:844e301ab0fd 323 case 'I':
Kazuki Yamamoto 9:844e301ab0fd 324 {
Kazuki Yamamoto 9:844e301ab0fd 325 pc.printf("command I is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 326 i=plength;
Kazuki Yamamoto 5:07f7000ec747 327 break;
Kazuki Yamamoto 9:844e301ab0fd 328 }
Kazuki Yamamoto 9:844e301ab0fd 329 case 'O':
Kazuki Yamamoto 9:844e301ab0fd 330 {
Kazuki Yamamoto 9:844e301ab0fd 331 pc.printf("command O is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 332 i=plength;
Kazuki Yamamoto 5:07f7000ec747 333 break;
Kazuki Yamamoto 9:844e301ab0fd 334 }
Kazuki Yamamoto 9:844e301ab0fd 335 case 'Z':
Kazuki Yamamoto 9:844e301ab0fd 336 {
Kazuki Yamamoto 9:844e301ab0fd 337 pc.printf("command Z is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 338 i=plength;
Kazuki Yamamoto 5:07f7000ec747 339 break;
Kazuki Yamamoto 9:844e301ab0fd 340 }
Kazuki Yamamoto 9:844e301ab0fd 341 case 'E':
Kazuki Yamamoto 9:844e301ab0fd 342 {
Kazuki Yamamoto 9:844e301ab0fd 343 pc.printf("command E is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 344 i=plength;
Kazuki Yamamoto 5:07f7000ec747 345 break;
Kazuki Yamamoto 9:844e301ab0fd 346 }
Kazuki Yamamoto 9:844e301ab0fd 347 case 'V':
Kazuki Yamamoto 9:844e301ab0fd 348 {
Kazuki Yamamoto 9:844e301ab0fd 349 pc.printf("command V is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 350 i=plength;
Kazuki Yamamoto 5:07f7000ec747 351 break;
Kazuki Yamamoto 9:844e301ab0fd 352 }
Kazuki Yamamoto 9:844e301ab0fd 353 default:
Kazuki Yamamoto 9:844e301ab0fd 354 {
Kazuki Yamamoto 12:db621ae6a076 355 pc.printf("command %s is not implemented\n\r", recieve[i]);
Kazuki Yamamoto 9:844e301ab0fd 356 i=plength;
Kazuki Yamamoto 9:844e301ab0fd 357 break;
Kazuki Yamamoto 9:844e301ab0fd 358 }
Kazuki Yamamoto 5:07f7000ec747 359 }
Kazuki Yamamoto 5:07f7000ec747 360 }
Kazuki Yamamoto 5:07f7000ec747 361 i=0;
Kazuki Yamamoto 5:07f7000ec747 362 length=0;
Kazuki Yamamoto 5:07f7000ec747 363 }
Kazuki Yamamoto 5:07f7000ec747 364 }