自分用通信ライブラリ RS485で先頭識別子を使用した通信をするときに使う.
BufferdSerialを使用している.Arduinoライクに通信したいから
2020/3/6 GetBusSerial()にて先頭識別子付きの通信ができる.
2020/11/16 GetBusSerial()は廃止(使えるけれども).getBusSerialとかgetTimedBusSerialとかに変えた
BusSerial.cpp@2:6895c7ec9db1, 2020-03-17 (annotated)
- Committer:
- ttrist
- Date:
- Tue Mar 17 11:40:31 2020 +0000
- Revision:
- 2:6895c7ec9db1
- Parent:
- 1:62db8d68f92e
- Child:
- 4:3b347fa779b7
delete SendBusSerial
Who changed what in which revision?
User | Revision | Line number | New 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 | 2:6895c7ec9db1 | 40 | } |