uint8_t型とunsigned char型に対応した多バイトシリアル通信用ライブラリ
Dependents: multiserial_test serial_check_controller receiverA receiver_transmitter ... more
Revision 6:49c82ca5aa37, committed 2014-08-21
- Comitter:
- Hatter
- Date:
- Thu Aug 21 21:29:25 2014 +0000
- Parent:
- 5:aa5b81a6818f
- Child:
- 7:f15a96ec54e1
- Commit message:
- ????????????????????????????????????????????????????????
Changed in this revision
MultiSerial.cpp | Show annotated file Show diff for this revision Revisions of this file |
MultiSerial.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/MultiSerial.cpp Thu Aug 21 02:23:38 2014 +0000 +++ b/MultiSerial.cpp Thu Aug 21 21:29:25 2014 +0000 @@ -5,92 +5,94 @@ #include "MultiSerial.h" #include "mbed.h" - MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){} +MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){} - void MultiSerial::start_read(uint8_t* value,int size,uint8_t keycode){ +void MultiSerial::start_read(uint8_t* value,const int size,uint8_t keycode){ - uint8_t rx=0, i; - uint8_t rxData[size+2]; - for(int l=0;l<size+2;l++){rxData[l]=0;} - 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]; - }//checkcode作成 - } - if(rx >= size+2){ - if(rxData[size+1]==rx_checkcode){ - for(int j=1;j==size;j++){ - value[j]=rxData[j-1]; - } - }else{ + 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; - error("serial data is lost\n"); - } - rx=0; - } - } + __rxData[rx] = __serial__.getc(); - void MultiSerial::start_write(uint8_t* value,int size,uint8_t keycode){ - uint8_t tx=size+2, i; - uint8_t txData[size+2]; - for(int m=0;i<size+2;m++){txData[m]=0;} - uint8_t tx_checkcode=0; - - if(tx >= size+2){ - txData[0]=keycode; - for(int k=1;k==size;k++){ - txData[k]=value[k-1]; - } - //送るデータ = センサ等のデータ - for(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); - + 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]; } - 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); - } + }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); +}
--- a/MultiSerial.h Thu Aug 21 02:23:38 2014 +0000 +++ b/MultiSerial.h Thu Aug 21 21:29:25 2014 +0000 @@ -12,6 +12,8 @@ #define __SIZE(array) (sizeof(array) / sizeof(array[0])) +#define MAX_DATA_NUM 30 + /** 多バイト通信用クラス * * Example: @@ -39,71 +41,70 @@ class MultiSerial { public: - - /** 多バイト通信用オブジェクト作成 Serialにそのままつなげるよ - * - * @param tx Serial tx pin - * @param rx Serial rx pin - */ + + /** 多バイト通信用オブジェクト作成 Serialにそのままつなげるよ + * + * @param tx Serial tx pin + * @param rx Serial rx pin + */ MultiSerial(PinName tx,PinName rx); - - /**データ読み込みするよ - * - * @param value 読み込み先の配列アドレス - * @param size 配列の要素数 - * @param keycode 多バイト通信のキーコード - */ + + /**データ読み込みするよ + * + * @param value 読み込み先の配列アドレス + * @param size 配列の要素数 + * @param keycode 多バイト通信のキーコード + */ void start_read(uint8_t* value,int size,uint8_t keycode); - /**データカキコするよ - * - * @param value 送るデーターの配列アドレス - * @param size 配列の要素数 - * @param keycode 多バイト通信のキーコード - */ + /**データカキコするよ + * + * @param value 送るデーターの配列アドレス + * @param size 配列の要素数 + * @param keycode 多バイト通信のキーコード + */ void start_write(uint8_t* value,int size,uint8_t keycode); -/* - void writeAttach(void (*func)()){ - __serial__.attach(func,Serial::TxIrq); - } - - void readAttach(void(*func)()){ - __serial__.attach(func,Serial::RxIrq); - } -*/ + /* + void writeAttach(void (*func)()){ + __serial__.attach(func,Serial::TxIrq); + } + + void readAttach(void(*func)()){ + __serial__.attach(func,Serial::RxIrq); + } + */ /**シリアル通信 受信割り込み ルーチン - * @param none - */ + * @param none + */ void RX(void); - /**シリアル通信 送信バッファ空き割り込みルーチン - * @param none - */ + /**シリアル通信 送信バッファ空き割り込みルーチン + * @param none + */ void TX(void); - - /** データ読み込み起動するよ - * - * @param value 読み込み先の配列アドレス - * @param keycode 多バイト通信のキーコード - */ + + /** データ読み込み起動するよ + * + * @param value 読み込み先の配列アドレス + * @param keycode 多バイト通信のキーコード + */ void read(uint8_t* value,uint8_t keycode); - /**データカキコ起動するよ - * - * @param value 送信データの配列アドレス - * @param keycode 多バイト通信のキーコード - */ + /**データカキコ起動するよ + * + * @param value 送信データの配列アドレス + * @param keycode 多バイト通信のキーコード + */ void write(uint8_t* value,uint8_t keycode); - -protected: - - Serial __serial__; - uint8_t *__readData; - uint8_t *__writeData; - int __readSize; - int __writeSize; - uint8_t __readKey; - uint8_t __writeKey; - + + protected: + + Serial __serial__; + uint8_t *__readData; + uint8_t *__writeData; + int __readSize; + int __writeSize; + uint8_t __readKey; + uint8_t __writeKey; }; #endif