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();
    }
}
Revision:
3:e730a11160d7
Parent:
2:84178b3b2824
Child:
4:14ef86f5de57
--- 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
-
-