Marcus Lee / SerialBuffer

Dependencies:   LinearArray

serialBuffer.cpp

Committer:
UHSLMarcus
Date:
2016-10-04
Revision:
1:985b6f1c7347
Parent:
0:dd6d74f39384
Child:
6:ca024bcee813

File content as of revision 1:985b6f1c7347:

#include "serialBuffer.h"

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

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

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

char utils::SerialBuffer::getc() {
    char * output;
    RawSerial::attach(NULL, RawSerial::RxIrq);
    
    CircularBuffer<char>::nextItem nextChar = rx_buffer.getNext();
    if (nextChar.success)
        output = (char*)nextChar.item;        

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

void utils::SerialBuffer::rx_interrupt(void) {
    if(serial_readable(&_serial) && rx_buffer.writeable()) {
        rx_buffer.add(serial_getc(&_serial));
    }

    return;   
}