robot

Dependencies:   FastPWM3 mbed

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?

UserRevisionLine numberNew 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 }