uint8_t型とunsigned char型に対応した多バイトシリアル通信用ライブラリ

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
Hatter
Date:
Thu Aug 21 00:05:00 2014 +0000
Revision:
0:77c15e33dfd1
Child:
2:8e7245a83717
Child:
3:cc6e2afb4914
debug?????????debugger???????; ??????????????;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hatter 0:77c15e33dfd1 1 /*
Hatter 0:77c15e33dfd1 2 *mbed Multibyte Serial Library
Hatter 0:77c15e33dfd1 3 */
Hatter 0:77c15e33dfd1 4
Hatter 0:77c15e33dfd1 5 #include "MultiSerial.h"
Hatter 0:77c15e33dfd1 6 #include "mbed.h"
Hatter 0:77c15e33dfd1 7
Hatter 0:77c15e33dfd1 8 MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){}
Hatter 0:77c15e33dfd1 9
Hatter 0:77c15e33dfd1 10 void MultiSerial::start_read(uint8_t* value,int size,uint8_t keycode){
Hatter 0:77c15e33dfd1 11
Hatter 0:77c15e33dfd1 12 uint8_t rx=0, i;
Hatter 0:77c15e33dfd1 13 uint8_t rxData[size+2];
Hatter 0:77c15e33dfd1 14 for(int l=0;l<size+2;l++){rxData[l]=0;}
Hatter 0:77c15e33dfd1 15 uint8_t rx_checkcode=0;
Hatter 0:77c15e33dfd1 16
Hatter 0:77c15e33dfd1 17 rxData[rx] = __serial__.getc();
Hatter 0:77c15e33dfd1 18
Hatter 0:77c15e33dfd1 19 if(rxData[0]==keycode){
Hatter 0:77c15e33dfd1 20 rx++;
Hatter 0:77c15e33dfd1 21 }
Hatter 0:77c15e33dfd1 22 if(rx==size+1){
Hatter 0:77c15e33dfd1 23 for(i=1, rx_checkcode=0; i<size+1; i++){
Hatter 0:77c15e33dfd1 24 rx_checkcode ^= rxData[i];
Hatter 0:77c15e33dfd1 25 }//checkcode作成
Hatter 0:77c15e33dfd1 26 }
Hatter 0:77c15e33dfd1 27 if(rx >= size+2){
Hatter 0:77c15e33dfd1 28 if(rxData[size+1]==rx_checkcode){
Hatter 0:77c15e33dfd1 29 for(int j=1;j==size;j++){
Hatter 0:77c15e33dfd1 30 value[j]=rxData[j];
Hatter 0:77c15e33dfd1 31 }
Hatter 0:77c15e33dfd1 32 }else{
Hatter 0:77c15e33dfd1 33
Hatter 0:77c15e33dfd1 34 error("serial data is lost\n");
Hatter 0:77c15e33dfd1 35 }
Hatter 0:77c15e33dfd1 36 rx=0;
Hatter 0:77c15e33dfd1 37 }
Hatter 0:77c15e33dfd1 38 }
Hatter 0:77c15e33dfd1 39
Hatter 0:77c15e33dfd1 40 void MultiSerial::start_write(uint8_t* value,int size,uint8_t keycode){
Hatter 0:77c15e33dfd1 41 uint8_t tx=size+2, i;
Hatter 0:77c15e33dfd1 42 uint8_t txData[size+2];
Hatter 0:77c15e33dfd1 43 for(int m=0;i<size+2;m++){txData[m]=0;}
Hatter 0:77c15e33dfd1 44 uint8_t tx_checkcode=0;
Hatter 0:77c15e33dfd1 45
Hatter 0:77c15e33dfd1 46 if(tx >= size+2){
Hatter 0:77c15e33dfd1 47 txData[0]=keycode;
Hatter 0:77c15e33dfd1 48 for(int k=1;k==size;k++){
Hatter 0:77c15e33dfd1 49 txData[k]=value[k];
Hatter 0:77c15e33dfd1 50 }
Hatter 0:77c15e33dfd1 51 //送るデータ = センサ等のデータ
Hatter 0:77c15e33dfd1 52 for(i=1, tx_checkcode=0; i<size+1; i++){
Hatter 0:77c15e33dfd1 53 tx_checkcode ^= txData[i];
Hatter 0:77c15e33dfd1 54 }//checkcode作成
Hatter 0:77c15e33dfd1 55 txData[size+1] = tx_checkcode;
Hatter 0:77c15e33dfd1 56 tx=0;
Hatter 0:77c15e33dfd1 57 }
Hatter 0:77c15e33dfd1 58 __serial__.putc(txData[tx]);
Hatter 0:77c15e33dfd1 59 tx++;
Hatter 0:77c15e33dfd1 60 }
Hatter 0:77c15e33dfd1 61 /*
Hatter 0:77c15e33dfd1 62 void writeAttach(void (*func)()){
Hatter 0:77c15e33dfd1 63 __serial__.attach(func,Serial::TxIrq);
Hatter 0:77c15e33dfd1 64 }
Hatter 0:77c15e33dfd1 65
Hatter 0:77c15e33dfd1 66 void readAttach(void(*func)()){
Hatter 0:77c15e33dfd1 67 __serial__.attach(func,Serial::RxIrq);
Hatter 0:77c15e33dfd1 68 }
Hatter 0:77c15e33dfd1 69 */
Hatter 0:77c15e33dfd1 70
Hatter 0:77c15e33dfd1 71 void MultiSerial::RX(){
Hatter 0:77c15e33dfd1 72 start_read(__readData,__readSize,__readKey);
Hatter 0:77c15e33dfd1 73 }
Hatter 0:77c15e33dfd1 74
Hatter 0:77c15e33dfd1 75 void MultiSerial::TX(){
Hatter 0:77c15e33dfd1 76 start_write(__writeData,__writeSize,__writeKey);
Hatter 0:77c15e33dfd1 77 }
Hatter 0:77c15e33dfd1 78
Hatter 0:77c15e33dfd1 79 void MultiSerial::read(uint8_t* value,uint8_t keycode){
Hatter 0:77c15e33dfd1 80 __readData=value;
Hatter 0:77c15e33dfd1 81 __readSize=__SIZE(value);
Hatter 0:77c15e33dfd1 82 __readKey=keycode;
Hatter 0:77c15e33dfd1 83 __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
Hatter 0:77c15e33dfd1 84 }
Hatter 0:77c15e33dfd1 85
Hatter 0:77c15e33dfd1 86 void MultiSerial::write(uint8_t* value,uint8_t keycode){
Hatter 0:77c15e33dfd1 87 __writeData=value;
Hatter 0:77c15e33dfd1 88 __writeSize=__SIZE(value);
Hatter 0:77c15e33dfd1 89 __writeKey=keycode;
Hatter 0:77c15e33dfd1 90
Hatter 0:77c15e33dfd1 91 __serial__.attach(this, &MultiSerial::TX, Serial::TxIrq);
Hatter 0:77c15e33dfd1 92
Hatter 0:77c15e33dfd1 93 }