Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
SerialCtrl.cpp@5:731e4a7f5947, 2021-04-08 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |