Command line interface for UART.
UARTでコマンドラインインターフェースを実現するためのライブラリです。
UARTからコマンドが入力されるとReadLine関数をコールバックします。
コマンドのデリミタはCR(0x0d)です。
コマンドはバックスペースで消去できます。
#include "mbed.h" #include "MjLineSerial.h" using namespace matsujirushi; RawSerial pc(USBTX, USBRX); MjLineSerial line(&pc); void readLineFunc(const char *str) { if (strcmp(str, "apple") == 0) { line.puts("RINGO"); } else if (strcmp(str, "orange") == 0) { line.puts("MIKAN"); } else { line.puts("unknown."); } line.puts("\r\n"); line.putc('>'); } int main() { pc.baud(115200); line.attachReadLine(readLineFunc); line.putc('>'); for (;;) { line.task(); } }
Diff: MjLineSerial.cpp
- Revision:
- 3:e730a11160d7
- Parent:
- 2:84178b3b2824
- Child:
- 4:14ef86f5de57
diff -r 84178b3b2824 -r e730a11160d7 MjLineSerial.cpp --- a/MjLineSerial.cpp Wed Nov 19 11:43:10 2014 +0000 +++ b/MjLineSerial.cpp Wed Nov 19 12:30:26 2014 +0000 @@ -13,7 +13,8 @@ int MjLineSerial::putc(int c) { - return baseSerial->putc(c); + txBuffer.push(c); + return c; } int MjLineSerial::puts(const char *str) @@ -52,7 +53,7 @@ void MjLineSerial::task() { - if (baseSerial->readable()) + while (baseSerial->readable()) { char c = baseSerial->getc(); switch (c) @@ -82,8 +83,13 @@ break; } } + + while (!txBuffer.empty()) + { + if (!baseSerial->writeable()) break; + baseSerial->putc(txBuffer.front()); + txBuffer.pop(); + } } } // namespace matsujirushi - -