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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
Hatter
Date:
Thu Aug 21 21:29:25 2014 +0000
Revision:
6:49c82ca5aa37
Parent:
5:aa5b81a6818f
Child:
7:f15a96ec54e1
????????????????????????????????????????????????????????

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 6:49c82ca5aa37 8 MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){}
Hatter 0:77c15e33dfd1 9
Hatter 6:49c82ca5aa37 10 void MultiSerial::start_read(uint8_t* value,const int size,uint8_t keycode){
Hatter 0:77c15e33dfd1 11
Hatter 6:49c82ca5aa37 12 static int rx=0, i;
Hatter 6:49c82ca5aa37 13 static uint8_t __rxData[MAX_DATA_NUM];
Hatter 6:49c82ca5aa37 14 for(int l=0;l<size+2;l++){__rxData[l]=0;}
Hatter 6:49c82ca5aa37 15 static uint8_t rx_checkcode=0;
Hatter 0:77c15e33dfd1 16
Hatter 6:49c82ca5aa37 17 __rxData[rx] = __serial__.getc();
Hatter 0:77c15e33dfd1 18
Hatter 6:49c82ca5aa37 19 if(__rxData[0]==keycode){
Hatter 6:49c82ca5aa37 20 rx++;
Hatter 6:49c82ca5aa37 21 }
Hatter 6:49c82ca5aa37 22 if(rx==size+1){
Hatter 6:49c82ca5aa37 23 for(i=1, rx_checkcode=0; i<size+1; i++){
Hatter 6:49c82ca5aa37 24 rx_checkcode ^= __rxData[i];
Hatter 6:49c82ca5aa37 25 }//creat checkcode
Hatter 6:49c82ca5aa37 26 }
Hatter 6:49c82ca5aa37 27 if(rx >= size+2){
Hatter 6:49c82ca5aa37 28 if(__rxData[size+1]==rx_checkcode){
Hatter 6:49c82ca5aa37 29 for(int j=1;j==size;j++){
Hatter 6:49c82ca5aa37 30 value[j]=__rxData[j-1];
Hatter 0:77c15e33dfd1 31 }
Hatter 0:77c15e33dfd1 32
Hatter 6:49c82ca5aa37 33 }else{
Hatter 6:49c82ca5aa37 34
Hatter 6:49c82ca5aa37 35 error("serial data is lost\n");
Hatter 6:49c82ca5aa37 36 }
Hatter 6:49c82ca5aa37 37 rx=0;
Hatter 6:49c82ca5aa37 38 }
Hatter 6:49c82ca5aa37 39 }
Hatter 6:49c82ca5aa37 40
Hatter 6:49c82ca5aa37 41 void MultiSerial::start_write(uint8_t* value,const int size,uint8_t keycode){
Hatter 6:49c82ca5aa37 42 static int tx=size+2;
Hatter 6:49c82ca5aa37 43 static uint8_t __txData[MAX_DATA_NUM];
Hatter 6:49c82ca5aa37 44 for(int m=0;m<size+2;m++){__txData[m]=0;}
Hatter 6:49c82ca5aa37 45 static uint8_t tx_checkcode=0;
Hatter 6:49c82ca5aa37 46
Hatter 6:49c82ca5aa37 47 if(tx >= size+2){
Hatter 6:49c82ca5aa37 48
Hatter 6:49c82ca5aa37 49 __txData[0]=keycode;
Hatter 6:49c82ca5aa37 50 for(int k=1;k==size;k++){
Hatter 6:49c82ca5aa37 51 __txData[k]=value[k-1];
Hatter 6:49c82ca5aa37 52 }
Hatter 6:49c82ca5aa37 53 //send data = sensor data etc..
Hatter 6:49c82ca5aa37 54 for(int i=1, tx_checkcode=0; i<(size+1); i++){
Hatter 6:49c82ca5aa37 55 tx_checkcode ^= __txData[i];
Hatter 6:49c82ca5aa37 56 }//checkcode
Hatter 6:49c82ca5aa37 57 __txData[size+1] = tx_checkcode;
Hatter 6:49c82ca5aa37 58 tx=0;
Hatter 6:49c82ca5aa37 59 }
Hatter 6:49c82ca5aa37 60 __serial__.putc(__txData[tx]);
Hatter 6:49c82ca5aa37 61 tx++;
Hatter 6:49c82ca5aa37 62 }
Hatter 6:49c82ca5aa37 63 /*
Hatter 6:49c82ca5aa37 64 void writeAttach(void (*func)()){
Hatter 6:49c82ca5aa37 65 __serial__.attach(func,Serial::TxIrq);
Hatter 6:49c82ca5aa37 66 }
Hatter 6:49c82ca5aa37 67
Hatter 6:49c82ca5aa37 68 void readAttach(void(*func)()){
Hatter 6:49c82ca5aa37 69 __serial__.attach(func,Serial::RxIrq);
Hatter 6:49c82ca5aa37 70 }
Hatter 6:49c82ca5aa37 71 */
Hatter 6:49c82ca5aa37 72
Hatter 6:49c82ca5aa37 73 void MultiSerial::RX(){
Hatter 6:49c82ca5aa37 74 start_read(__readData,__readSize,__readKey);
Hatter 6:49c82ca5aa37 75
Hatter 6:49c82ca5aa37 76 }
Hatter 6:49c82ca5aa37 77
Hatter 6:49c82ca5aa37 78 void MultiSerial::TX(){
Hatter 6:49c82ca5aa37 79 start_write(__writeData,__writeSize,__writeKey);
Hatter 6:49c82ca5aa37 80
Hatter 6:49c82ca5aa37 81 }
Hatter 6:49c82ca5aa37 82
Hatter 6:49c82ca5aa37 83 void MultiSerial::read(uint8_t* value,uint8_t keycode){
Hatter 6:49c82ca5aa37 84 __readData=value;
Hatter 6:49c82ca5aa37 85 __readSize=__SIZE(value);
Hatter 6:49c82ca5aa37 86 __readKey=keycode;
Hatter 6:49c82ca5aa37 87 __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
Hatter 6:49c82ca5aa37 88 int _i =__serial__.getc();
Hatter 6:49c82ca5aa37 89 }
Hatter 6:49c82ca5aa37 90
Hatter 6:49c82ca5aa37 91 void MultiSerial::write(uint8_t* value,uint8_t keycode){
Hatter 6:49c82ca5aa37 92 __writeData=value;
Hatter 6:49c82ca5aa37 93 __writeSize=__SIZE(value);
Hatter 6:49c82ca5aa37 94 __writeKey=keycode;
Hatter 6:49c82ca5aa37 95
Hatter 6:49c82ca5aa37 96 __serial__.attach(this, &MultiSerial::TX, Serial::TxIrq);
Hatter 6:49c82ca5aa37 97 __serial__.putc(1);
Hatter 6:49c82ca5aa37 98 }