YUTO WATANABE / SerialCtrl_OS6
Committer:
yabumi823
Date:
Thu Apr 08 11:10:03 2021 +0000
Revision:
5:731e4a7f5947
Parent:
4:32f7deade942
Child:
6:9f5a9b099342
fixed for mbed OS 6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yabumi823 0:0dcd02e8aeab 1 #include <SerialCtrl.h>
yabumi823 0:0dcd02e8aeab 2 #include "mbed.h"
yabumi823 0:0dcd02e8aeab 3
yabumi823 5:731e4a7f5947 4 SerialCtrl::SerialCtrl(BufferedSerial *pts, Timer *ptt) {
yabumi823 0:0dcd02e8aeab 5 _Serial = pts;
yabumi823 0:0dcd02e8aeab 6 _Timer = ptt;
yabumi823 0:0dcd02e8aeab 7 TIMEOUT_MS = 8;
yabumi823 4:32f7deade942 8 RETRY_MAX = RETRY_DEF;
yabumi823 0:0dcd02e8aeab 9 }
yabumi823 0:0dcd02e8aeab 10
yabumi823 0:0dcd02e8aeab 11 void SerialCtrl::param(unsigned char header, unsigned char footer) {
yabumi823 0:0dcd02e8aeab 12 STX = header;
yabumi823 0:0dcd02e8aeab 13 ETX = footer;
yabumi823 0:0dcd02e8aeab 14 }
yabumi823 0:0dcd02e8aeab 15
yabumi823 0:0dcd02e8aeab 16 bool SerialCtrl::get() {
yabumi823 4:32f7deade942 17 int retry = 0;
yabumi823 0:0dcd02e8aeab 18
yabumi823 4:32f7deade942 19 do {
yabumi823 4:32f7deade942 20 //judge start of text
yabumi823 4:32f7deade942 21 if( !(input() == STX) ) {
yabumi823 4:32f7deade942 22 ++retry;
yabumi823 0:0dcd02e8aeab 23 } else {
yabumi823 4:32f7deade942 24 unsigned char sum = 0;
yabumi823 4:32f7deade942 25
yabumi823 4:32f7deade942 26 //get data
yabumi823 4:32f7deade942 27 for(int i=0; i<DATA_N; ++i) data[i] = input();
yabumi823 4:32f7deade942 28 for(int i=0; i<DATA_N-1; ++i) sum += data[i];
yabumi823 4:32f7deade942 29
yabumi823 4:32f7deade942 30 //judge checksum and end of text
yabumi823 4:32f7deade942 31 if( (sum == data[SUM]) && (input() == ETX) ) {
yabumi823 4:32f7deade942 32 return true;
yabumi823 4:32f7deade942 33 } else {
yabumi823 4:32f7deade942 34 ++retry;
yabumi823 4:32f7deade942 35 }
yabumi823 0:0dcd02e8aeab 36 }
yabumi823 4:32f7deade942 37 } while(retry < RETRY_MAX);
yabumi823 4:32f7deade942 38 return false;
yabumi823 4:32f7deade942 39 }
yabumi823 4:32f7deade942 40
yabumi823 4:32f7deade942 41 void SerialCtrl::setFailMax(int n) {
yabumi823 4:32f7deade942 42 if(n >= 0) {
yabumi823 4:32f7deade942 43 RETRY_MAX = n;
yabumi823 4:32f7deade942 44 } else {
yabumi823 4:32f7deade942 45 return;
yabumi823 0:0dcd02e8aeab 46 }
yabumi823 4:32f7deade942 47 }
yabumi823 4:32f7deade942 48 void SerialCtrl::setFailMax() {
yabumi823 4:32f7deade942 49 RETRY_MAX = RETRY_DEF;
yabumi823 0:0dcd02e8aeab 50 }
yabumi823 0:0dcd02e8aeab 51
yabumi823 0:0dcd02e8aeab 52 unsigned char SerialCtrl::input() {
yabumi823 0:0dcd02e8aeab 53 _Timer->reset();
yabumi823 0:0dcd02e8aeab 54 while(_Timer->read_ms() < TIMEOUT_MS) {
yabumi823 0:0dcd02e8aeab 55 if( _Serial->readable() ) {
yabumi823 0:0dcd02e8aeab 56 return _Serial->getc();
yabumi823 0:0dcd02e8aeab 57 }
yabumi823 0:0dcd02e8aeab 58 }
yabumi823 0:0dcd02e8aeab 59 return NUL;
yabumi823 0:0dcd02e8aeab 60 }