Marcus Lee / SerialBuffer

Dependencies:   LinearArray

Committer:
UHSLMarcus
Date:
Mon Oct 03 12:34:17 2016 +0000
Revision:
0:dd6d74f39384
Child:
1:985b6f1c7347
first version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UHSLMarcus 0:dd6d74f39384 1 #include "serialBuffer.h"
UHSLMarcus 0:dd6d74f39384 2
UHSLMarcus 0:dd6d74f39384 3 SerialBuffer::SerialBuffer(PinName tx, PinName rx) : RawSerial(tx, rx) {
UHSLMarcus 0:dd6d74f39384 4 RawSerial::attach(this, &SerialBuffer::rx_interrupt, Serial::RxIrq);
UHSLMarcus 0:dd6d74f39384 5 return;
UHSLMarcus 0:dd6d74f39384 6 }
UHSLMarcus 0:dd6d74f39384 7
UHSLMarcus 0:dd6d74f39384 8 SerialBuffer::~SerialBuffer() {
UHSLMarcus 0:dd6d74f39384 9 RawSerial::attach(NULL, RawSerial::RxIrq);
UHSLMarcus 0:dd6d74f39384 10 return;
UHSLMarcus 0:dd6d74f39384 11 }
UHSLMarcus 0:dd6d74f39384 12
UHSLMarcus 0:dd6d74f39384 13 int SerialBuffer::readable() {
UHSLMarcus 0:dd6d74f39384 14 return rx_buffer.readable();
UHSLMarcus 0:dd6d74f39384 15 }
UHSLMarcus 0:dd6d74f39384 16 char SerialBuffer::getc() {
UHSLMarcus 0:dd6d74f39384 17 char * output;
UHSLMarcus 0:dd6d74f39384 18 RawSerial::attach(NULL, RawSerial::RxIrq);
UHSLMarcus 0:dd6d74f39384 19
UHSLMarcus 0:dd6d74f39384 20 CircularBuffer<char>::nextItem nextChar = rx_buffer.getNext();
UHSLMarcus 0:dd6d74f39384 21 if (nextChar.success)
UHSLMarcus 0:dd6d74f39384 22 output = (char*)nextChar.item;
UHSLMarcus 0:dd6d74f39384 23
UHSLMarcus 0:dd6d74f39384 24 RawSerial::attach(this, &SerialBuffer::rx_interrupt, Serial::RxIrq);
UHSLMarcus 0:dd6d74f39384 25
UHSLMarcus 0:dd6d74f39384 26 return *output;
UHSLMarcus 0:dd6d74f39384 27 }
UHSLMarcus 0:dd6d74f39384 28
UHSLMarcus 0:dd6d74f39384 29 void rx_interrupt(void) {
UHSLMarcus 0:dd6d74f39384 30 if(serial_readable(&_serial) && rx_buffer.writeable()) {
UHSLMarcus 0:dd6d74f39384 31 rx_buffer.add(serial_getc(&_serial));
UHSLMarcus 0:dd6d74f39384 32 }
UHSLMarcus 0:dd6d74f39384 33
UHSLMarcus 0:dd6d74f39384 34 return;
UHSLMarcus 0:dd6d74f39384 35 }