Bayley Wang
/
foc-ed_in_the_bot_compact
robot
BufferedLogger/BufferedLogger.cpp@252:38644631ed97, 2018-11-13 (annotated)
- Committer:
- bwang
- Date:
- Tue Nov 13 17:46:23 2018 +0000
- Revision:
- 252:38644631ed97
- Parent:
- 183:73ff4a68565e
11/13/2018 12:45 - hitting <return> on empty line prints "\r>", so that hitting enter after intially connecting to the controller generates a prompt
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bwang | 175:7987198a8592 | 1 | #include "BufferedLogger.h" |
bwang | 175:7987198a8592 | 2 | |
bwang | 176:83968cff687a | 3 | BufferedLogger::BufferedLogger(int packet_size, int buffer_size, PinName tx, PinName rx, int rate) { |
bwang | 175:7987198a8592 | 4 | _log = new Serial(tx, rx); |
bwang | 176:83968cff687a | 5 | _log->baud(rate); |
bwang | 175:7987198a8592 | 6 | |
bwang | 175:7987198a8592 | 7 | _packet_size = packet_size; |
bwang | 175:7987198a8592 | 8 | _buffer_size = buffer_size; |
bwang | 176:83968cff687a | 9 | _page_size = (_packet_size + 1) * _buffer_size; |
bwang | 175:7987198a8592 | 10 | |
bwang | 175:7987198a8592 | 11 | _buf1 = (unsigned char*)malloc((_page_size + _packet_size + 1)*sizeof(unsigned char)); |
bwang | 175:7987198a8592 | 12 | _buf2 = (unsigned char*)malloc((_page_size + _packet_size + 1)*sizeof(unsigned char)); |
bwang | 175:7987198a8592 | 13 | |
bwang | 175:7987198a8592 | 14 | _front = _buf1; |
bwang | 175:7987198a8592 | 15 | _back = _buf2; |
bwang | 175:7987198a8592 | 16 | _index = 0; |
bwang | 183:73ff4a68565e | 17 | |
bwang | 183:73ff4a68565e | 18 | _enabled = true; |
bwang | 175:7987198a8592 | 19 | } |
bwang | 175:7987198a8592 | 20 | |
bwang | 175:7987198a8592 | 21 | int BufferedLogger::log(float *pkt) { |
bwang | 183:73ff4a68565e | 22 | if (!_enabled) return 1; |
bwang | 175:7987198a8592 | 23 | _front[_index] = 0xff; |
bwang | 175:7987198a8592 | 24 | _index++; |
bwang | 175:7987198a8592 | 25 | for (int i = 0; i < _packet_size; i++) { |
bwang | 175:7987198a8592 | 26 | _front[_index + i] = __clip(pkt[i]); |
bwang | 175:7987198a8592 | 27 | } |
bwang | 175:7987198a8592 | 28 | _index += _packet_size; |
bwang | 176:83968cff687a | 29 | if (_index >= _page_size + _packet_size + 1) { |
bwang | 175:7987198a8592 | 30 | _index = 0; |
bwang | 175:7987198a8592 | 31 | return 0; |
bwang | 175:7987198a8592 | 32 | } |
bwang | 175:7987198a8592 | 33 | return 1; |
bwang | 175:7987198a8592 | 34 | } |
bwang | 175:7987198a8592 | 35 | |
bwang | 175:7987198a8592 | 36 | int BufferedLogger::log(unsigned char *pkt) { |
bwang | 183:73ff4a68565e | 37 | if (!_enabled) return 1; |
bwang | 175:7987198a8592 | 38 | _front[_index] = 0xff; |
bwang | 175:7987198a8592 | 39 | _index++; |
bwang | 175:7987198a8592 | 40 | for (int i = 0; i < _packet_size; i++) { |
bwang | 175:7987198a8592 | 41 | _front[_index + i] = __clip(pkt[i]); |
bwang | 175:7987198a8592 | 42 | } |
bwang | 175:7987198a8592 | 43 | _index += _packet_size; |
bwang | 176:83968cff687a | 44 | if (_index >= _page_size + _packet_size + 1) { |
bwang | 175:7987198a8592 | 45 | _index = 0; |
bwang | 175:7987198a8592 | 46 | return 0; |
bwang | 175:7987198a8592 | 47 | } |
bwang | 175:7987198a8592 | 48 | return 1; |
bwang | 175:7987198a8592 | 49 | } |
bwang | 175:7987198a8592 | 50 | |
bwang | 175:7987198a8592 | 51 | void BufferedLogger::flush() { |
bwang | 175:7987198a8592 | 52 | if (_index >= _page_size) { |
bwang | 175:7987198a8592 | 53 | _index = 0; |
bwang | 175:7987198a8592 | 54 | _tmp = _front; |
bwang | 175:7987198a8592 | 55 | _front = _back; |
bwang | 175:7987198a8592 | 56 | _back = _tmp; |
bwang | 175:7987198a8592 | 57 | for (int i = 0; i < _page_size; i++) _log->putc(_back[i]); |
bwang | 175:7987198a8592 | 58 | } |
bwang | 175:7987198a8592 | 59 | } |
bwang | 175:7987198a8592 | 60 | |
bwang | 175:7987198a8592 | 61 | unsigned char __clip(float x) { |
bwang | 175:7987198a8592 | 62 | unsigned char u = (unsigned char) x; |
bwang | 175:7987198a8592 | 63 | if (u >= 0xff) u = 0xfe; |
bwang | 175:7987198a8592 | 64 | return u; |
bwang | 175:7987198a8592 | 65 | } |
bwang | 175:7987198a8592 | 66 | |
bwang | 175:7987198a8592 | 67 | unsigned char __clip(unsigned char x) { |
bwang | 175:7987198a8592 | 68 | unsigned char u = x; |
bwang | 175:7987198a8592 | 69 | if (u >= 0xff) u = 0xfe; |
bwang | 175:7987198a8592 | 70 | return u; |
bwang | 175:7987198a8592 | 71 | } |