Marcus Lee / SerialBuffer

Dependencies:   LinearArray

serialBuffer.cpp

Committer:
UHSLMarcus
Date:
2017-03-14
Revision:
8:93d1469f3f6d
Parent:
6:ca024bcee813
Child:
9:8010dd8b4742

File content as of revision 8:93d1469f3f6d:

#include "serialBuffer.h"

SerialBuffer::SerialBuffer(PinName tx, PinName rx) : RawSerial(tx, rx), rx_buffer(255, false) {
    RawSerial::attach(callback(this, &SerialBuffer::rx_interrupt), Serial::RxIrq);
    return;
}

SerialBuffer::~SerialBuffer() {
    RawSerial::attach(NULL, RawSerial::RxIrq);
    return;
}

int SerialBuffer::readable() {
    return rx_buffer.count() > 0;
}

char SerialBuffer::getc() {
    RawSerial::attach(NULL, RawSerial::RxIrq);
    
    char nextChar = rx_buffer.pop();

    RawSerial::attach(callback(this, &SerialBuffer::rx_interrupt), Serial::RxIrq);
    
    return nextChar;
}

void SerialBuffer::rx_interrupt(void) {
    if(serial_readable(&_serial) && !rx_buffer.full()) {
        rx_buffer.push(serial_getc(&_serial));
    }

    return;   
}