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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
bousiya03
Date:
Tue Oct 14 11:59:35 2014 +0000
Revision:
21:f8802a69c1af
Parent:
20:9e14b87bfdac
Child:
23:8209d99397b8
??????????

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 7:f15a96ec54e1 5 #include "mbed.h"
Hatter 0:77c15e33dfd1 6 #include "MultiSerial.h"
bousiya03 19:0acb5961827b 7 #include "RawSerial.h"
Hatter 0:77c15e33dfd1 8
Hatter 9:26262b75f40b 9
bousiya03 21:f8802a69c1af 10 MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){}
Hatter 12:5539a5dcdeff 11
Hatter 12:5539a5dcdeff 12 void MultiSerial::start_write(){
Hatter 12:5539a5dcdeff 13
Hatter 12:5539a5dcdeff 14 __stop_write = 0;
bousiya03 19:0acb5961827b 15 __serial__.attach(this,&MultiSerial::TX,RawSerial::TxIrq);
Hatter 12:5539a5dcdeff 16 __serial__.putc(1);
Hatter 12:5539a5dcdeff 17
Hatter 12:5539a5dcdeff 18 }
Hatter 12:5539a5dcdeff 19
Hatter 12:5539a5dcdeff 20 void MultiSerial::stop_write(){
Hatter 12:5539a5dcdeff 21
Hatter 12:5539a5dcdeff 22 __stop_write = 1;
Hatter 12:5539a5dcdeff 23
Hatter 12:5539a5dcdeff 24 }
Hatter 12:5539a5dcdeff 25
Hatter 12:5539a5dcdeff 26
Hatter 12:5539a5dcdeff 27 void MultiSerial::start_read(){
Hatter 12:5539a5dcdeff 28
Hatter 12:5539a5dcdeff 29 __stop_read = 0;
bousiya03 19:0acb5961827b 30 __serial__.attach(this,&MultiSerial::RX,RawSerial::RxIrq);
Hatter 12:5539a5dcdeff 31 uint8_t k = __serial__.getc();
Hatter 12:5539a5dcdeff 32
bousiya03 17:5e2c78dbbd40 33 __first_bit = k;
bousiya03 17:5e2c78dbbd40 34
Hatter 12:5539a5dcdeff 35 }
Hatter 12:5539a5dcdeff 36
Hatter 12:5539a5dcdeff 37 void MultiSerial::stop_read(){
Hatter 12:5539a5dcdeff 38
Hatter 12:5539a5dcdeff 39 __stop_read = 1;
Hatter 12:5539a5dcdeff 40
Hatter 12:5539a5dcdeff 41 }
Hatter 7:f15a96ec54e1 42
Hatter 9:26262b75f40b 43 void MultiSerial::read_data(uint8_t* readData,uint8_t readKey){
Hatter 0:77c15e33dfd1 44
Hatter 7:f15a96ec54e1 45 __readData = readData;
Hatter 7:f15a96ec54e1 46 __readSize = __SIZE(__readData);
Hatter 7:f15a96ec54e1 47 __readKey = readKey;
Hatter 7:f15a96ec54e1 48 }
Hatter 7:f15a96ec54e1 49
Hatter 7:f15a96ec54e1 50
Hatter 9:26262b75f40b 51 void MultiSerial::write_data(uint8_t* writeData,uint8_t writeKey){
Hatter 0:77c15e33dfd1 52
bousiya03 21:f8802a69c1af 53 __writeData = writeData;
Hatter 7:f15a96ec54e1 54 __writeSize = __SIZE(__writeData);
Hatter 7:f15a96ec54e1 55 __writeKey = writeKey;
Hatter 7:f15a96ec54e1 56 }
Hatter 7:f15a96ec54e1 57
Hatter 7:f15a96ec54e1 58
bousiya03 21:f8802a69c1af 59 void MultiSerial::TX(void){
Hatter 0:77c15e33dfd1 60
bousiya03 21:f8802a69c1af 61 if(__stop_write == 1){return;}
Hatter 12:5539a5dcdeff 62
Hatter 7:f15a96ec54e1 63 static uint8_t tx=__writeSize+2, i;
bousiya03 21:f8802a69c1af 64 static uint8_t txData[MAX_DATA_NUM] = {__writeKey};
Hatter 7:f15a96ec54e1 65 static uint8_t tx_checkcode=0;
bousiya03 21:f8802a69c1af 66
Hatter 7:f15a96ec54e1 67 if(tx >= __writeSize+2){
Hatter 12:5539a5dcdeff 68 txData[KEY] = __writeKey;
Hatter 7:f15a96ec54e1 69
Hatter 7:f15a96ec54e1 70 for(int k=1;k<=__writeSize;k++){
Hatter 7:f15a96ec54e1 71 txData[k] = __writeData[k-1];
Hatter 7:f15a96ec54e1 72 }
bousiya03 21:f8802a69c1af 73
bousiya03 21:f8802a69c1af 74 for(i = KEY+1, tx_checkcode = 0; i<__writeSize+1; i++){
Hatter 7:f15a96ec54e1 75 tx_checkcode ^= txData[i];
bousiya03 21:f8802a69c1af 76 }
bousiya03 21:f8802a69c1af 77
Hatter 7:f15a96ec54e1 78 txData[__writeSize+1] = tx_checkcode;
Hatter 7:f15a96ec54e1 79 tx=0;
Hatter 7:f15a96ec54e1 80 }
Hatter 7:f15a96ec54e1 81 __serial__.putc(txData[tx]);
Hatter 7:f15a96ec54e1 82 tx++;
bousiya03 21:f8802a69c1af 83 }
Hatter 7:f15a96ec54e1 84
Hatter 7:f15a96ec54e1 85 void MultiSerial::RX(void){
Hatter 12:5539a5dcdeff 86
bousiya03 21:f8802a69c1af 87 if(__stop_read == 1){return;}
Hatter 12:5539a5dcdeff 88
bousiya03 21:f8802a69c1af 89 static uint8_t rx = 0, i;
bousiya03 21:f8802a69c1af 90 static uint8_t rxData[MAX_DATA_NUM] = {__readKey};
bousiya03 21:f8802a69c1af 91 static uint8_t rx_checkcode = 0;
Hatter 7:f15a96ec54e1 92
Hatter 7:f15a96ec54e1 93 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 94
bousiya03 21:f8802a69c1af 95 if(rxData[KEY] == __readKey){
Hatter 7:f15a96ec54e1 96 rx++;
Hatter 0:77c15e33dfd1 97 }
Hatter 0:77c15e33dfd1 98
bousiya03 21:f8802a69c1af 99 if(rx == __readSize+1){
bousiya03 21:f8802a69c1af 100 for(i = KEY+1, rx_checkcode = 0; i < __readSize+1; i++){
Hatter 7:f15a96ec54e1 101 rx_checkcode ^= rxData[i];
bousiya03 21:f8802a69c1af 102 }
Hatter 7:f15a96ec54e1 103 }
Hatter 6:49c82ca5aa37 104
Hatter 7:f15a96ec54e1 105 if(rx >= __readSize+2){
bousiya03 21:f8802a69c1af 106 if(rxData[__readSize+1] == rx_checkcode){
bousiya03 19:0acb5961827b 107
bousiya03 19:0acb5961827b 108 __check_rx = 1;
bousiya03 19:0acb5961827b 109
bousiya03 21:f8802a69c1af 110 for(int m = 1;m <= __readSize;m++){
Hatter 7:f15a96ec54e1 111 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 112 }
bousiya03 21:f8802a69c1af 113
bousiya03 19:0acb5961827b 114 }else{
bousiya03 21:f8802a69c1af 115 __check_rx = 0;
bousiya03 19:0acb5961827b 116 }
bousiya03 21:f8802a69c1af 117 rx = 0;
Hatter 7:f15a96ec54e1 118 }
Hatter 6:49c82ca5aa37 119 }
Hatter 14:a1ff72d48831 120
Hatter 14:a1ff72d48831 121 uint8_t MultiSerial::readable_check(){
Hatter 14:a1ff72d48831 122
Hatter 14:a1ff72d48831 123 return __serial__.readable();
Hatter 14:a1ff72d48831 124 }
bousiya03 17:5e2c78dbbd40 125
bousiya03 17:5e2c78dbbd40 126 uint8_t MultiSerial::re_first_bit(){
bousiya03 17:5e2c78dbbd40 127
bousiya03 17:5e2c78dbbd40 128 return __first_bit;
bousiya03 17:5e2c78dbbd40 129 }
bousiya03 20:9e14b87bfdac 130
bousiya03 21:f8802a69c1af 131 void MultiSerial::check_rx_wait(){
bousiya03 20:9e14b87bfdac 132
bousiya03 21:f8802a69c1af 133 if(__check_rx==0) NVIC_SystemReset();
bousiya03 19:0acb5961827b 134 }
bousiya03 17:5e2c78dbbd40 135