serial_extend library for array data transmission and reception

Dependents:   receives_robot_wheel

Committer:
bousiya03
Date:
Sun Oct 05 01:00:00 2014 +0000
Revision:
1:e808dd01f134
Parent:
0:fbf5705f90cc
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bousiya03 0:fbf5705f90cc 1 /*
bousiya03 0:fbf5705f90cc 2 *mbed Multibyte Serial Library
bousiya03 0:fbf5705f90cc 3 */
bousiya03 0:fbf5705f90cc 4
bousiya03 0:fbf5705f90cc 5 #include "mbed.h"
bousiya03 0:fbf5705f90cc 6 #include "serial_extend.h"
bousiya03 0:fbf5705f90cc 7 #include "RawSerial.h"
bousiya03 0:fbf5705f90cc 8
bousiya03 0:fbf5705f90cc 9
bousiya03 0:fbf5705f90cc 10 serial_extend::serial_extend(PinName tx,PinName rx) : __serial__(tx,rx){
bousiya03 0:fbf5705f90cc 11
bousiya03 0:fbf5705f90cc 12 /*
bousiya03 0:fbf5705f90cc 13 switch(state){
bousiya03 0:fbf5705f90cc 14
bousiya03 0:fbf5705f90cc 15 case read:
bousiya03 0:fbf5705f90cc 16 {
bousiya03 0:fbf5705f90cc 17 __serial__.attach(this,&serial_extend::RX,Serial::RxIrq);
bousiya03 0:fbf5705f90cc 18 uint8_t k = __serial__.getc();
bousiya03 0:fbf5705f90cc 19 break;
bousiya03 0:fbf5705f90cc 20 }
bousiya03 0:fbf5705f90cc 21
bousiya03 0:fbf5705f90cc 22 case write:
bousiya03 0:fbf5705f90cc 23 {
bousiya03 0:fbf5705f90cc 24 __serial__.attach(this,&serial_extend::TX,Serial::TxIrq);
bousiya03 0:fbf5705f90cc 25 __serial__.putc(1);
bousiya03 0:fbf5705f90cc 26 break;
bousiya03 0:fbf5705f90cc 27 }
bousiya03 0:fbf5705f90cc 28
bousiya03 0:fbf5705f90cc 29 case both:
bousiya03 0:fbf5705f90cc 30 {
bousiya03 0:fbf5705f90cc 31 __serial__.attach(this,&serial_extend::RX,Serial::RxIrq);
bousiya03 0:fbf5705f90cc 32 uint8_t m = __serial__.getc();
bousiya03 0:fbf5705f90cc 33 __serial__.attach(this,&serial_extend::TX,Serial::TxIrq);
bousiya03 0:fbf5705f90cc 34 __serial__.putc(1);
bousiya03 0:fbf5705f90cc 35 }
bousiya03 0:fbf5705f90cc 36
bousiya03 0:fbf5705f90cc 37 }
bousiya03 0:fbf5705f90cc 38 */
bousiya03 0:fbf5705f90cc 39 }
bousiya03 0:fbf5705f90cc 40
bousiya03 0:fbf5705f90cc 41 void serial_extend::start_write(){
bousiya03 0:fbf5705f90cc 42
bousiya03 0:fbf5705f90cc 43 __stop_write = 0;
bousiya03 0:fbf5705f90cc 44 __serial__.attach(this,&serial_extend::TX,RawSerial::TxIrq);
bousiya03 0:fbf5705f90cc 45 __serial__.putc(1);
bousiya03 0:fbf5705f90cc 46
bousiya03 0:fbf5705f90cc 47 }
bousiya03 0:fbf5705f90cc 48
bousiya03 0:fbf5705f90cc 49 void serial_extend::stop_write(){
bousiya03 0:fbf5705f90cc 50
bousiya03 0:fbf5705f90cc 51 __stop_write = 1;
bousiya03 0:fbf5705f90cc 52
bousiya03 0:fbf5705f90cc 53 }
bousiya03 0:fbf5705f90cc 54
bousiya03 0:fbf5705f90cc 55
bousiya03 0:fbf5705f90cc 56 void serial_extend::start_read(){
bousiya03 0:fbf5705f90cc 57
bousiya03 0:fbf5705f90cc 58 __stop_read = 0;
bousiya03 0:fbf5705f90cc 59 __serial__.attach(this,&serial_extend::RX,RawSerial::RxIrq);
bousiya03 0:fbf5705f90cc 60 uint8_t k = __serial__.getc();
bousiya03 0:fbf5705f90cc 61
bousiya03 0:fbf5705f90cc 62 }
bousiya03 0:fbf5705f90cc 63
bousiya03 0:fbf5705f90cc 64 void serial_extend::stop_read(){
bousiya03 0:fbf5705f90cc 65
bousiya03 0:fbf5705f90cc 66 __stop_read = 1;
bousiya03 0:fbf5705f90cc 67
bousiya03 0:fbf5705f90cc 68 }
bousiya03 0:fbf5705f90cc 69
bousiya03 0:fbf5705f90cc 70 void serial_extend::read_data(uint8_t* readData,uint8_t readKey){
bousiya03 0:fbf5705f90cc 71
bousiya03 0:fbf5705f90cc 72 __readData = readData;
bousiya03 0:fbf5705f90cc 73 __readSize = __SIZE(__readData);
bousiya03 0:fbf5705f90cc 74 __readKey = readKey;
bousiya03 0:fbf5705f90cc 75 }
bousiya03 0:fbf5705f90cc 76
bousiya03 0:fbf5705f90cc 77
bousiya03 0:fbf5705f90cc 78 void serial_extend::write_data(uint8_t* writeData,uint8_t writeKey){
bousiya03 0:fbf5705f90cc 79
bousiya03 0:fbf5705f90cc 80 __writeData=writeData;
bousiya03 0:fbf5705f90cc 81 __writeSize = __SIZE(__writeData);
bousiya03 0:fbf5705f90cc 82 __writeKey = writeKey;
bousiya03 0:fbf5705f90cc 83 }
bousiya03 0:fbf5705f90cc 84
bousiya03 0:fbf5705f90cc 85
bousiya03 1:e808dd01f134 86 void serial_extend::TX(void){
bousiya03 0:fbf5705f90cc 87
bousiya03 0:fbf5705f90cc 88 if(__stop_write==1){return;}
bousiya03 0:fbf5705f90cc 89
bousiya03 0:fbf5705f90cc 90 static uint8_t tx=__writeSize+2, i;
bousiya03 0:fbf5705f90cc 91 static uint8_t txData[MAX_DATA_NUM]={__writeKey};
bousiya03 0:fbf5705f90cc 92 static uint8_t tx_checkcode=0;
bousiya03 0:fbf5705f90cc 93 if(tx >= __writeSize+2){
bousiya03 0:fbf5705f90cc 94 txData[KEY] = __writeKey;
bousiya03 0:fbf5705f90cc 95
bousiya03 0:fbf5705f90cc 96 for(int k=1;k<=__writeSize;k++){
bousiya03 0:fbf5705f90cc 97 txData[k] = __writeData[k-1];
bousiya03 0:fbf5705f90cc 98 }
bousiya03 0:fbf5705f90cc 99
bousiya03 1:e808dd01f134 100
bousiya03 0:fbf5705f90cc 101 for(i=KEY+1, tx_checkcode=0; i<__writeSize+1; i++){
bousiya03 0:fbf5705f90cc 102 tx_checkcode ^= txData[i];
bousiya03 1:e808dd01f134 103 } //CHECKCODE
bousiya03 0:fbf5705f90cc 104 txData[__writeSize+1] = tx_checkcode;
bousiya03 0:fbf5705f90cc 105 tx=0;
bousiya03 0:fbf5705f90cc 106 }
bousiya03 0:fbf5705f90cc 107 __serial__.putc(txData[tx]);
bousiya03 0:fbf5705f90cc 108 tx++;
bousiya03 1:e808dd01f134 109 }
bousiya03 0:fbf5705f90cc 110
bousiya03 0:fbf5705f90cc 111 void serial_extend::RX(void){
bousiya03 0:fbf5705f90cc 112
bousiya03 0:fbf5705f90cc 113 if(__stop_read==1){return;}
bousiya03 0:fbf5705f90cc 114
bousiya03 0:fbf5705f90cc 115 static uint8_t rx=0, i;
bousiya03 0:fbf5705f90cc 116 static uint8_t rxData[MAX_DATA_NUM]={__readKey};
bousiya03 0:fbf5705f90cc 117 static uint8_t rx_checkcode=0;
bousiya03 0:fbf5705f90cc 118
bousiya03 0:fbf5705f90cc 119 rxData[rx] = __serial__.getc();
bousiya03 0:fbf5705f90cc 120
bousiya03 0:fbf5705f90cc 121 if(rxData[KEY]==__readKey){
bousiya03 0:fbf5705f90cc 122 rx++;
bousiya03 0:fbf5705f90cc 123 }
bousiya03 0:fbf5705f90cc 124
bousiya03 0:fbf5705f90cc 125 if(rx==__readSize+1){
bousiya03 0:fbf5705f90cc 126 for(i=KEY+1, rx_checkcode=0; i<__readSize+1; i++){
bousiya03 0:fbf5705f90cc 127 rx_checkcode ^= rxData[i];
bousiya03 1:e808dd01f134 128 } //CHECKCODE
bousiya03 0:fbf5705f90cc 129 }
bousiya03 0:fbf5705f90cc 130
bousiya03 0:fbf5705f90cc 131 if(rx >= __readSize+2){
bousiya03 0:fbf5705f90cc 132 if(rxData[__readSize+1]==rx_checkcode){
bousiya03 0:fbf5705f90cc 133
bousiya03 0:fbf5705f90cc 134 for(int m=1;m<=__readSize;m++){
bousiya03 0:fbf5705f90cc 135 __readData[m-1] = rxData[m];
bousiya03 0:fbf5705f90cc 136 }
bousiya03 0:fbf5705f90cc 137
bousiya03 1:e808dd01f134 138
bousiya03 0:fbf5705f90cc 139 }
bousiya03 0:fbf5705f90cc 140 rx=0;
bousiya03 0:fbf5705f90cc 141 }
bousiya03 0:fbf5705f90cc 142 }
bousiya03 0:fbf5705f90cc 143
bousiya03 0:fbf5705f90cc 144 uint8_t serial_extend::readable_check(){
bousiya03 0:fbf5705f90cc 145
bousiya03 0:fbf5705f90cc 146 return __serial__.readable();
bousiya03 0:fbf5705f90cc 147
bousiya03 0:fbf5705f90cc 148 }