YUTO WATANABE / SerialCtrl_OS6
Committer:
yabumi823
Date:
Mon Sep 02 02:15:34 2019 +0000
Revision:
1:0184f38e2e83
Parent:
SerialCtrl/SerialCtrl.cpp@0:0dcd02e8aeab
Child:
4:32f7deade942
fixed directory

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 0:0dcd02e8aeab 4 SerialCtrl::SerialCtrl(Serial *pts, Timer *ptt) {
yabumi823 0:0dcd02e8aeab 5 _Serial = pts;
yabumi823 0:0dcd02e8aeab 6 _Timer = ptt;
yabumi823 0:0dcd02e8aeab 7 TIMEOUT_MS = 8;
yabumi823 0:0dcd02e8aeab 8 }
yabumi823 0:0dcd02e8aeab 9
yabumi823 0:0dcd02e8aeab 10 void SerialCtrl::param(unsigned char header, unsigned char footer) {
yabumi823 0:0dcd02e8aeab 11 STX = header;
yabumi823 0:0dcd02e8aeab 12 ETX = footer;
yabumi823 0:0dcd02e8aeab 13 }
yabumi823 0:0dcd02e8aeab 14
yabumi823 0:0dcd02e8aeab 15 bool SerialCtrl::get() {
yabumi823 0:0dcd02e8aeab 16 int fail = 0;
yabumi823 0:0dcd02e8aeab 17 unsigned char sum = 0;
yabumi823 0:0dcd02e8aeab 18
yabumi823 0:0dcd02e8aeab 19 while(1) {
yabumi823 0:0dcd02e8aeab 20 if(input() == STX) {
yabumi823 0:0dcd02e8aeab 21 break;
yabumi823 0:0dcd02e8aeab 22 } else {
yabumi823 0:0dcd02e8aeab 23 ++fail;
yabumi823 0:0dcd02e8aeab 24 if(fail > FAIL_MAX) return false;
yabumi823 0:0dcd02e8aeab 25 }
yabumi823 0:0dcd02e8aeab 26 }
yabumi823 0:0dcd02e8aeab 27
yabumi823 0:0dcd02e8aeab 28 for(int i=0; i<DATA_N; ++i) data[i] = input();
yabumi823 0:0dcd02e8aeab 29 for(int i=0; i<DATA_N-1; ++i) sum += data[i];
yabumi823 0:0dcd02e8aeab 30
yabumi823 0:0dcd02e8aeab 31 if( (sum == data[SUM]) && (input() == ETX) ) {
yabumi823 0:0dcd02e8aeab 32 return true;
yabumi823 0:0dcd02e8aeab 33 } else {
yabumi823 0:0dcd02e8aeab 34 return false;
yabumi823 0:0dcd02e8aeab 35 }
yabumi823 0:0dcd02e8aeab 36 }
yabumi823 0:0dcd02e8aeab 37
yabumi823 0:0dcd02e8aeab 38 unsigned char SerialCtrl::input() {
yabumi823 0:0dcd02e8aeab 39 _Timer->reset();
yabumi823 0:0dcd02e8aeab 40 while(_Timer->read_ms() < TIMEOUT_MS) {
yabumi823 0:0dcd02e8aeab 41 if( _Serial->readable() ) {
yabumi823 0:0dcd02e8aeab 42 return _Serial->getc();
yabumi823 0:0dcd02e8aeab 43 }
yabumi823 0:0dcd02e8aeab 44 }
yabumi823 0:0dcd02e8aeab 45 return NUL;
yabumi823 0:0dcd02e8aeab 46 }