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@6:9f5a9b099342, 2021-04-09 (annotated)
- 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?
| 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 | 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 | } |