Tetsuya Yamamoto / Mbed 2 deprecated BufferSerial

Dependencies:   mbed

Committer:
tetsu_0207
Date:
Wed Dec 02 08:08:12 2020 +0000
Revision:
2:304d0e762287
Parent:
1:476b874003d8
version-1.1 success!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tetsu_0207 0:07be23bfcae4 1 #include "BufferSerial.h"
tetsu_0207 0:07be23bfcae4 2
tetsu_0207 1:476b874003d8 3 BufferSerial::BufferSerial(PinName tx, PinName rx,int baud,int timeout)
tetsu_0207 1:476b874003d8 4 :RawSerial(tx,rx,baud)
tetsu_0207 0:07be23bfcae4 5 {
tetsu_0207 0:07be23bfcae4 6 // initialize functions
tetsu_0207 1:476b874003d8 7 _rx_buffer_head = 0;
tetsu_0207 1:476b874003d8 8 _rx_buffer_tail = 0;
tetsu_0207 1:476b874003d8 9 // time out
tetsu_0207 1:476b874003d8 10 timer_ms = timeout;
tetsu_0207 1:476b874003d8 11 timer.start();
tetsu_0207 0:07be23bfcae4 12 // attach
tetsu_0207 1:476b874003d8 13 RawSerial::attach(callback(this,&BufferSerial::serial_rx), Serial::RxIrq);
tetsu_0207 1:476b874003d8 14 }
tetsu_0207 1:476b874003d8 15
tetsu_0207 1:476b874003d8 16 int BufferSerial::available(void)
tetsu_0207 1:476b874003d8 17 {
tetsu_0207 1:476b874003d8 18 return ((unsigned int)(SERIAL_RX_BUFFER_SIZE + _rx_buffer_head - _rx_buffer_tail)) % SERIAL_RX_BUFFER_SIZE;
tetsu_0207 1:476b874003d8 19 }
tetsu_0207 1:476b874003d8 20
tetsu_0207 1:476b874003d8 21 int BufferSerial::read(void)
tetsu_0207 1:476b874003d8 22 {
tetsu_0207 1:476b874003d8 23 if (_rx_buffer_head == _rx_buffer_tail) {
tetsu_0207 1:476b874003d8 24 return -1;
tetsu_0207 1:476b874003d8 25 } else {
tetsu_0207 1:476b874003d8 26 unsigned char c = _rx_buffer[_rx_buffer_tail];
tetsu_0207 1:476b874003d8 27 _rx_buffer_tail = (rx_buffer_index_t)(_rx_buffer_tail + 1) % SERIAL_RX_BUFFER_SIZE;
tetsu_0207 1:476b874003d8 28 return c;
tetsu_0207 1:476b874003d8 29 }
tetsu_0207 0:07be23bfcae4 30 }
tetsu_0207 0:07be23bfcae4 31
tetsu_0207 2:304d0e762287 32 size_t BufferSerial::readBytesUntil(char charactor,char* buffer,int length)
tetsu_0207 1:476b874003d8 33 {
tetsu_0207 1:476b874003d8 34 size_t index = 0;
tetsu_0207 1:476b874003d8 35 while (index < length) {
tetsu_0207 1:476b874003d8 36 int c = timedRead();
tetsu_0207 2:304d0e762287 37 if (c < 0 || c == charactor){
tetsu_0207 2:304d0e762287 38 break;
tetsu_0207 2:304d0e762287 39 }
tetsu_0207 1:476b874003d8 40 *buffer++ = (char)c;
tetsu_0207 1:476b874003d8 41 index++;
tetsu_0207 1:476b874003d8 42 }
tetsu_0207 1:476b874003d8 43 return index;
tetsu_0207 0:07be23bfcae4 44 }
tetsu_0207 0:07be23bfcae4 45
tetsu_0207 1:476b874003d8 46 void BufferSerial::serial_rx(void)
tetsu_0207 1:476b874003d8 47 {
tetsu_0207 1:476b874003d8 48 while(RawSerial::readable()) {
tetsu_0207 1:476b874003d8 49 unsigned char c = RawSerial::getc();
tetsu_0207 1:476b874003d8 50 rx_buffer_index_t i = (unsigned int)(_rx_buffer_head + 1) % SERIAL_RX_BUFFER_SIZE;
tetsu_0207 1:476b874003d8 51 if (i != _rx_buffer_tail) {
tetsu_0207 1:476b874003d8 52 _rx_buffer[_rx_buffer_head] = c;
tetsu_0207 1:476b874003d8 53 _rx_buffer_head = i;
tetsu_0207 1:476b874003d8 54 }
tetsu_0207 1:476b874003d8 55 }
tetsu_0207 0:07be23bfcae4 56 }
tetsu_0207 0:07be23bfcae4 57
tetsu_0207 1:476b874003d8 58 int BufferSerial::timedRead()
tetsu_0207 1:476b874003d8 59 {
tetsu_0207 1:476b874003d8 60 int c;
tetsu_0207 1:476b874003d8 61 timer.reset();
tetsu_0207 1:476b874003d8 62 _startMillis = timer.read_ms();
tetsu_0207 1:476b874003d8 63 do {
tetsu_0207 1:476b874003d8 64 c = read();
tetsu_0207 1:476b874003d8 65 if (c >= 0) return c;
tetsu_0207 1:476b874003d8 66 } while(timer.read_ms() - _startMillis < _timeout);
tetsu_0207 1:476b874003d8 67 return -1; // -1 indicates timeout
tetsu_0207 2:304d0e762287 68 }