uint8_t型とunsigned char型に対応した多バイトシリアル通信用ライブラリ
Dependents: multiserial_test serial_check_controller receiverA receiver_transmitter ... more
Diff: MultiSerial.cpp
- Revision:
- 28:7620ef9e7187
- Parent:
- 27:6dcd6c2fba1a
- Child:
- 29:e85f05ee9ad5
diff -r 6dcd6c2fba1a -r 7620ef9e7187 MultiSerial.cpp --- a/MultiSerial.cpp Wed Oct 15 11:52:20 2014 +0000 +++ b/MultiSerial.cpp Wed Oct 15 12:29:41 2014 +0000 @@ -7,72 +7,32 @@ #include "RawSerial.h" - MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){ - /* - switch(state){ - - case read: - { - __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq); - uint8_t k = __serial__.getc(); - break; - } - - case write: - { - __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq); - __serial__.putc(1); - break; - } - - case both: - { - __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq); - uint8_t m = __serial__.getc(); - __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq); - __serial__.putc(1); - } - - } - */ - } + MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){} void MultiSerial::safety(){ - __readData[0] = 0; - __readData[1] = 0; + for(int l = 0;l <= __readSize;l++){ + + __readData[l] = 0; + + } } void MultiSerial::start_write(){ - __stop_write = 0; __serial__.attach(this,&MultiSerial::TX,RawSerial::TxIrq); __serial__.putc(1); } - - void MultiSerial::stop_write(){ - - __stop_write = 1; - - } - - + void MultiSerial::start_read(){ - __stop_read = 0; __serial__.attach(this,&MultiSerial::RX,RawSerial::RxIrq); uint8_t k = __serial__.getc(); __first_bit = k; } - - void MultiSerial::stop_read(){ - - __stop_read = 1; - - } void MultiSerial::read_data(uint8_t* readData,uint8_t readKey){ @@ -84,32 +44,30 @@ void MultiSerial::write_data(uint8_t* writeData,uint8_t writeKey){ - __writeData=writeData; + __writeData = writeData; __writeSize = __SIZE(__writeData); __writeKey = writeKey; } - void MultiSerial::TX(void){//送信バッファ空き割り込み用関数 - if(__stop_write==1){return;} - - static uint8_t tx=__writeSize+2, i; - static uint8_t txData[MAX_DATA_NUM]={__writeKey}; - static uint8_t tx_checkcode=0; + static uint8_t tx = __writeSize+2, i; + static uint8_t txData[MAX_DATA_NUM] = {__writeKey}; + static uint8_t tx_checkcode = 0; + if(tx >= __writeSize+2){ txData[KEY] = __writeKey; - for(int k=1;k<=__writeSize;k++){ + for(int k = 1;k <= __writeSize;k++){ txData[k] = __writeData[k-1]; } //送るデータ = センサ等のデータ - for(i=KEY+1, tx_checkcode=0; i<__writeSize+1; i++){ + for(i = KEY+1, tx_checkcode = 0; i < __writeSize+1; i++){ tx_checkcode ^= txData[i]; }//CHECKCODE作成 txData[__writeSize+1] = tx_checkcode; - tx=0; + tx = 0; } __serial__.putc(txData[tx]); tx++; @@ -117,39 +75,37 @@ void MultiSerial::RX(void){ - if(__stop_read==1){return;} - - static uint8_t rx=0, i; - static uint8_t rxData[MAX_DATA_NUM]={__readKey}; - static uint8_t rx_checkcode=0; + static uint8_t rx = 0, i; + static uint8_t rxData[MAX_DATA_NUM] = {__readKey}; + static uint8_t rx_checkcode = 0; rxData[rx] = __serial__.getc(); - if(rxData[KEY]==__readKey){ + if(rxData[KEY] == __readKey){ rx++; } - if(rx==__readSize+1){ - for(i=KEY+1, rx_checkcode=0; i<__readSize+1; i++){ + if(rx == __readSize+1){ + for(i = KEY+1, rx_checkcode = 0; i < __readSize+1; i++){ rx_checkcode ^= rxData[i]; }//CHECKCODE作成 } if(rx >= __readSize+2){ - if(rxData[__readSize+1]==rx_checkcode){ + if(rxData[__readSize+1] == rx_checkcode){ __check_rx = 1; xbee_check.attach(this,&MultiSerial::safety,0.5); - for(int m=1;m<=__readSize;m++){ + for(int m = 1;m <= __readSize;m++){ __readData[m-1] = rxData[m]; } //使うデータ = 受け取ったデータ }else{ - __check_rx=0; + __check_rx = 0; } rx=0; @@ -169,9 +125,8 @@ } void MultiSerial::check_rx_wait(){ - - if(__check_rx==0) NVIC_SystemReset(); + if(__check_rx == 0) NVIC_SystemReset(); } \ No newline at end of file