yosuke kitajima / BusSerial

Dependencies:   BufferedSerial

Dependents:   FourOmniMecha

Committer:
ttrist
Date:
Fri Mar 06 16:38:11 2020 +0000
Revision:
1:62db8d68f92e
Parent:
0:418bb20836bd
Child:
2:6895c7ec9db1
2020/3/7 add  SendBusSerial(~);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ttrist 0:418bb20836bd 1 #include "BusSerial.h"
ttrist 0:418bb20836bd 2
ttrist 0:418bb20836bd 3 BusSerial::BusSerial(PinName tx, PinName rx,Timer *timer):BufferedSerial(tx,rx)
ttrist 0:418bb20836bd 4 {
ttrist 0:418bb20836bd 5 _timer = timer;
ttrist 0:418bb20836bd 6 _timer -> start();
ttrist 0:418bb20836bd 7 }
ttrist 0:418bb20836bd 8
ttrist 0:418bb20836bd 9 void BusSerial::GetBusSerial(uint8_t *Argument_Array, int myHead_ID, int RecieveData_sizeof, int BusSerialTimeout)
ttrist 0:418bb20836bd 10 {
ttrist 0:418bb20836bd 11 long BusSerialTimeout_start_t = _timer->read_ms(); //タイマーセット
ttrist 0:418bb20836bd 12 for (int i = 0; i < RecieveData_sizeof; i++) *(Argument_Array + i) = 0; //データ初期化
ttrist 0:418bb20836bd 13
ttrist 0:418bb20836bd 14 //*** データ受信 ちゃんとなるまでループ(timeoutあり)***
ttrist 0:418bb20836bd 15 while (*Argument_Array != myHead_ID) {
ttrist 0:418bb20836bd 16 //*** 1byte読み込み ***
ttrist 0:418bb20836bd 17 if (readable() > 0) *Argument_Array = getc();
ttrist 0:418bb20836bd 18
ttrist 0:418bb20836bd 19 if (*Argument_Array == myHead_ID ) {
ttrist 0:418bb20836bd 20 int old_i = 0;
ttrist 0:418bb20836bd 21 //*** データ格納エリア ***
ttrist 0:418bb20836bd 22 for (int i = 1; i < RecieveData_sizeof; i++) {
ttrist 0:418bb20836bd 23 //格納中のtimeout処理用時間設定
ttrist 0:418bb20836bd 24 if (old_i != i) {
ttrist 0:418bb20836bd 25 old_i = i;
ttrist 0:418bb20836bd 26 BusSerialTimeout_start_t = _timer->read_ms(); //データ格納timeout用
ttrist 0:418bb20836bd 27 }
ttrist 0:418bb20836bd 28
ttrist 0:418bb20836bd 29 //***データ格納部***
ttrist 0:418bb20836bd 30 if (readable() > 0) {
ttrist 0:418bb20836bd 31 *(Argument_Array + i) = getc();
ttrist 0:418bb20836bd 32 } else {
ttrist 0:418bb20836bd 33 if (_timer->read_ms() - BusSerialTimeout_start_t > BusSerialTimeout) break;
ttrist 0:418bb20836bd 34 i--;
ttrist 0:418bb20836bd 35 }
ttrist 0:418bb20836bd 36 }
ttrist 0:418bb20836bd 37 }
ttrist 0:418bb20836bd 38 if (_timer->read_ms() - BusSerialTimeout_start_t > BusSerialTimeout) break;//timeout
ttrist 0:418bb20836bd 39 }
ttrist 1:62db8d68f92e 40 }
ttrist 1:62db8d68f92e 41
ttrist 1:62db8d68f92e 42 void BusSerial::SendBusSerial(uint8_t *Argument_Array ,int RecieveData_sizeof){
ttrist 1:62db8d68f92e 43 for(int i=0;i<RecieveData_sizeof;i++) putc(*(Argument_Array+1));
ttrist 1:62db8d68f92e 44 }