uint8_t型とunsigned char型に対応した多バイトシリアル通信用ライブラリ
Dependents: multiserial_test serial_check_controller receiverA receiver_transmitter ... more
MultiSerial.cpp
- Committer:
- Hatter
- Date:
- 2014-08-21
- Revision:
- 6:49c82ca5aa37
- Parent:
- 5:aa5b81a6818f
- Child:
- 7:f15a96ec54e1
File content as of revision 6:49c82ca5aa37:
/* *mbed Multibyte Serial Library */ #include "MultiSerial.h" #include "mbed.h" MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){} void MultiSerial::start_read(uint8_t* value,const int size,uint8_t keycode){ static int rx=0, i; static uint8_t __rxData[MAX_DATA_NUM]; for(int l=0;l<size+2;l++){__rxData[l]=0;} static uint8_t rx_checkcode=0; __rxData[rx] = __serial__.getc(); if(__rxData[0]==keycode){ rx++; } if(rx==size+1){ for(i=1, rx_checkcode=0; i<size+1; i++){ rx_checkcode ^= __rxData[i]; }//creat checkcode } if(rx >= size+2){ if(__rxData[size+1]==rx_checkcode){ for(int j=1;j==size;j++){ value[j]=__rxData[j-1]; } }else{ error("serial data is lost\n"); } rx=0; } } void MultiSerial::start_write(uint8_t* value,const int size,uint8_t keycode){ static int tx=size+2; static uint8_t __txData[MAX_DATA_NUM]; for(int m=0;m<size+2;m++){__txData[m]=0;} static uint8_t tx_checkcode=0; if(tx >= size+2){ __txData[0]=keycode; for(int k=1;k==size;k++){ __txData[k]=value[k-1]; } //send data = sensor data etc.. for(int i=1, tx_checkcode=0; i<(size+1); i++){ tx_checkcode ^= __txData[i]; }//checkcode __txData[size+1] = tx_checkcode; tx=0; } __serial__.putc(__txData[tx]); tx++; } /* void writeAttach(void (*func)()){ __serial__.attach(func,Serial::TxIrq); } void readAttach(void(*func)()){ __serial__.attach(func,Serial::RxIrq); } */ void MultiSerial::RX(){ start_read(__readData,__readSize,__readKey); } void MultiSerial::TX(){ start_write(__writeData,__writeSize,__writeKey); } void MultiSerial::read(uint8_t* value,uint8_t keycode){ __readData=value; __readSize=__SIZE(value); __readKey=keycode; __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq); int _i =__serial__.getc(); } void MultiSerial::write(uint8_t* value,uint8_t keycode){ __writeData=value; __writeSize=__SIZE(value); __writeKey=keycode; __serial__.attach(this, &MultiSerial::TX, Serial::TxIrq); __serial__.putc(1); }