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();
    }
}
Committer:
matsujirushi
Date:
Tue Nov 18 14:43:37 2014 +0000
Revision:
0:40d65405e747
Child:
1:833745ae8a7e
Create MjLineSerial class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
matsujirushi 0:40d65405e747 1 #include "MjLineSerial.h"
matsujirushi 0:40d65405e747 2 #include <cstdarg>
matsujirushi 0:40d65405e747 3
matsujirushi 0:40d65405e747 4 #define STRING_STACK_LIMIT 120
matsujirushi 0:40d65405e747 5
matsujirushi 0:40d65405e747 6 namespace matsujirushi {
matsujirushi 0:40d65405e747 7
matsujirushi 0:40d65405e747 8 MjLineSerial::MjLineSerial(RawSerial *serial)
matsujirushi 0:40d65405e747 9 {
matsujirushi 0:40d65405e747 10 baseSerial = serial;
matsujirushi 0:40d65405e747 11 }
matsujirushi 0:40d65405e747 12
matsujirushi 0:40d65405e747 13 int MjLineSerial::getc()
matsujirushi 0:40d65405e747 14 {
matsujirushi 0:40d65405e747 15 return baseSerial->getc();
matsujirushi 0:40d65405e747 16 }
matsujirushi 0:40d65405e747 17
matsujirushi 0:40d65405e747 18 int MjLineSerial::putc(int c)
matsujirushi 0:40d65405e747 19 {
matsujirushi 0:40d65405e747 20 return baseSerial->putc(c);
matsujirushi 0:40d65405e747 21 }
matsujirushi 0:40d65405e747 22
matsujirushi 0:40d65405e747 23 int MjLineSerial::printf(const char *format, ...)
matsujirushi 0:40d65405e747 24 {
matsujirushi 0:40d65405e747 25 std::va_list arg;
matsujirushi 0:40d65405e747 26 va_start(arg, format);
matsujirushi 0:40d65405e747 27 int len = vsnprintf(NULL, 0, format, arg);
matsujirushi 0:40d65405e747 28 if (len < STRING_STACK_LIMIT) {
matsujirushi 0:40d65405e747 29 char temp[STRING_STACK_LIMIT];
matsujirushi 0:40d65405e747 30 vsprintf(temp, format, arg);
matsujirushi 0:40d65405e747 31 puts(temp);
matsujirushi 0:40d65405e747 32 } else {
matsujirushi 0:40d65405e747 33 char *temp = new char[len + 1];
matsujirushi 0:40d65405e747 34 vsprintf(temp, format, arg);
matsujirushi 0:40d65405e747 35 puts(temp);
matsujirushi 0:40d65405e747 36 delete[] temp;
matsujirushi 0:40d65405e747 37 }
matsujirushi 0:40d65405e747 38 va_end(arg);
matsujirushi 0:40d65405e747 39 return len;
matsujirushi 0:40d65405e747 40 }
matsujirushi 0:40d65405e747 41
matsujirushi 0:40d65405e747 42 } // namespace matsujirushi
matsujirushi 0:40d65405e747 43