Interactive functions for UART.
It's old library. Please change the new library "MjLineSerial".
LineSerial.cpp
- Committer:
- matsujirushi
- Date:
- 2014-10-13
- Revision:
- 1:2338acfb180d
- Parent:
- 0:d3ca6a57e60b
File content as of revision 1:2338acfb180d:
#include "LineSerial.h" LineSerial::LineSerial(PinName tx, PinName rx, const char *name) : Serial(tx, rx, name), readBuffer(NULL), readBufferSize(0), readBufferCount(0), readLineFunc(NULL) { } LineSerial::~LineSerial() { if (this->readBuffer != NULL) { delete this->readBuffer; this->readBuffer = NULL; } } void LineSerial::allocateReadBuffer(size_t size) { // free memory. if (this->readBuffer != NULL) { delete this->readBuffer; } // allocate memory. if (size <= 0) { this->readBuffer = NULL; } else { this->readBuffer = new char[size]; } // initialize related values. this->readBufferSize = size <= 0 ? 0 : size; this->readBufferCount = 0; } void LineSerial::attachReadLine(void (*func)(const char* str)) { this->readLineFunc = func; } void LineSerial::task() { if (this->readable()) { char c = this->getc(); switch (c) { case '\r': if (this->readLineFunc != NULL) { this->readBuffer[this->readBufferCount] = '\0'; this->readLineFunc(this->readBuffer); this->readBufferCount = 0; } break; case '\b': if (!this->removeReadBuffer()) { this->putc('\a'); } else { this->puts("\b \b"); } break; default: if (!this->appendReadBuffer(c)) { this->putc('\a'); } else { this->putc(c); } break; } } } bool LineSerial::appendReadBuffer(char data) { if (this->readBuffer == NULL) { return false; } if (this->readBufferCount >= this->readBufferSize - 1) { return false; } this->readBuffer[this->readBufferCount++] = data; return true; } bool LineSerial::removeReadBuffer() { if (this->readBuffer == NULL) { return false; } if (this->readBufferCount <= 0) { return false; } this->readBufferCount--; return true; }