Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: LPC824/main.cpp
- Revision:
- 27:53a29982d658
- Parent:
- 26:7810c849cb78
- Child:
- 28:1fe126593ba1
--- a/LPC824/main.cpp Tue Dec 16 18:13:49 2014 +0900 +++ b/LPC824/main.cpp Wed Dec 17 14:29:06 2014 +0900 @@ -325,7 +325,7 @@ case CMD_R: { length = plength - 2; - if(length<1){ + if(length < 1){ pc.printf("bad packet! %d\n\r",length); i = plength + 1; length = 0; @@ -340,7 +340,11 @@ } case GPIO0_STAT: { - data = registers[GPIO0_STAT-'0']; + for(int k=0; k<8; k++){ + _data = gpio0[k]->read(); + data |= (_data << k); + } + registers[GPIO0_STAT-'0'] = data; break; } case GPIO0_CONF: @@ -348,9 +352,14 @@ data = registers[GPIO0_CONF-'0']; break; } +#ifndef QUAD_I2C case GPIO1_STAT: { - data = registers[GPIO1_STAT-'0']; + for(int k=0; k<8; k++){ + _data = gpio1[k]->read(); + data |= (_data << k); + } + registers[GPIO1_STAT-'0'] = data; break; } case GPIO1_CONF: @@ -358,6 +367,7 @@ data = registers[GPIO1_CONF-'0']; break; } +#endif default: { data = 0xAA; @@ -365,6 +375,7 @@ } } send[j] = (char)data; + data=0; } i += (length+1); } @@ -381,6 +392,7 @@ for(int j=0; j<length; j+=3){ address = recieve[i+1+j]; data = 0xff & (recieve[i+2+j] << 4 | (recieve[i+3+j] & 0x0F)); + _data = 0; switch(address){ case CHIP_ID: { @@ -390,8 +402,15 @@ } case GPIO0_STAT: { - //READ ONLY from this command: do nothing - data = registers[GPIO0_STAT-'0']; + _data = registers[GPIO0_CONF-'0']; + for(int k=0; k<8; k++){ + if(_data&0x01){ // output + gpio0[k]->write((data>>k)&0x01); + }else{ // input + ; // do nothing + } + _data >>= 1; + } break; } case GPIO0_CONF: @@ -409,16 +428,23 @@ data = registers[GPIO0_CONF-'0']; break; } +#ifndef QUAD_I2C case GPIO1_STAT: { - //READ ONLY from this command: do nothing - data = registers[GPIO1_STAT-'0']; + _data = registers[GPIO1_CONF-'0']; + for(int k=0; k<8; k++){ + if(_data&0x01){ // output + gpio1[k]->write((data>>k)&0x01); + }else{ // input + ; // do nothing + } + _data >>= 1; + } break; } case GPIO1_CONF: { registers[GPIO1_CONF-'0'] = data; -#ifndef QUAD_I2C for(int k=0; k<6; k++){ if(data&0x01){//output gpio1[k]->output(); @@ -428,18 +454,18 @@ } data >>= 1; } -#endif data = registers[GPIO1_CONF-'0']; break; } +#endif default: { break; } } - send[j/3] = (char)data; + send[j/3] = data; } - i += length+1; + i += (length+1); length /= 3; } break; @@ -447,48 +473,100 @@ case CMD_I: { length = plength - 2; - data = 0; - if(length != 0){ + if(length < 1){ pc.printf("bad packet! %d\n\r",length); i = plength + 1; length = 0; }else{ - for(int j=0; j<8; j++){ - _data = gpio0[j]->read(); - pc.printf("_%02X, ",_data); - data |= (_data << j); + for(int j=0; j<length; j++){ + address = recieve[i+1+j]; + _data=0; + switch(address){ + case GPIO0_STAT: + { + for(int k=0; k<8; k++){ + _data = gpio0[k]->read(); + data |= (_data << k); + } + registers[GPIO0_STAT-'0'] = data; + break; + } +#ifndef QUAD_I2C + case GPIO1_STAT: + { + for(int k=0; k<8; k++){ + _data = gpio1[k]->read(); + data |= (_data << k); + } + registers[GPIO1_STAT-'0'] = data; + break; + } +#endif + default: + { + data = 0xAA; + break; + } + } + send[j] = (char)data; + data = 0; } - registers[GPIO0_STAT-'0'] = data; - send[0] = data; - length = 1; + i += (length+1); } - pc.printf("%02X, ",data); - i+=length; break; } case CMD_O: { length = plength - 2; - if(length != 2){ + if(length < 3){ pc.printf("bad packet! %d\n\r",length); i = plength + 1; length = 0; }else{ - data = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F)); - _data = registers[GPIO0_CONF-'0']; - send[0] = (char)data; - for(int j=0; j<8; j++){ - if(_data&0x01){ // output - gpio0[j]->write(data&0x01); - }else{ // input - ; // do nothing + for(int j=0; j<length; j+=3){ + address = recieve[i+1+j]; + data = 0xff & (recieve[i+2+j] << 4 | (recieve[i+3+j] & 0x0F)); + switch(address){ + case GPIO0_STAT: + { + _data = registers[GPIO0_CONF-'0']; + for(int k=0; k<8; k++){ + if(_data&0x01){ // output + gpio0[k]->write(data&0x01); + }else{ // input + ; // do nothing + } + data >>= 1; + _data >>= 1; + } + break; + } +#ifndef QUAD_I2C + case GPIO1_STAT: + { + _data = registers[GPIO1_CONF-'0']; + for(int k=0; k<8; k++){ + if(_data&0x01){ // output + gpio1[k]->write(data&0x01); + }else{ // input + ; // do nothing + } + data >>= 1; + _data >>= 1; + } + break; + } +#endif + default: + { + break; + } } - data >>= 1; - _data >>= 1; + send[j/3] = data; } - i += length+1; - length = 1; } + i += (length+1); + length /= 3; // pc.printf("command O is not implemented, "); break; }