YUTO WATANABE / SerialCtrl_OS6
Committer:
yabumi823
Date:
Fri Apr 09 07:23:16 2021 +0000
Revision:
6:9f5a9b099342
Parent:
5:731e4a7f5947
Child:
7:a5334d446b0d
bug fix

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 6:9f5a9b099342 53 unsigned char temp;
yabumi823 6:9f5a9b099342 54
yabumi823 0:0dcd02e8aeab 55 _Timer->reset();
yabumi823 6:9f5a9b099342 56 while(duration_cast<std::chrono::milliseconds>(_Timer->elapsed_time()).count() < TIMEOUT_MS) {
yabumi823 0:0dcd02e8aeab 57 if( _Serial->readable() ) {
yabumi823 6:9f5a9b099342 58 return _Serial->read(&temp, 1);
yabumi823 0:0dcd02e8aeab 59 }
yabumi823 0:0dcd02e8aeab 60 }
yabumi823 0:0dcd02e8aeab 61 return NUL;
yabumi823 0:0dcd02e8aeab 62 }