Marcus Lee / SerialBuffer

Dependencies:   LinearArray

serialBuffer.cpp

Committer:
UHSLMarcus
Date:
2017-03-08
Revision:
6:ca024bcee813
Parent:
1:985b6f1c7347
Child:
8:93d1469f3f6d

File content as of revision 6:ca024bcee813:

#include "serialBuffer.h"

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

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

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

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

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

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

    return;   
}