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();
    }
}

MjLineSerial.h

Committer:
matsujirushi
Date:
2014-11-21
Revision:
5:b7902dd4ab46
Parent:
4:14ef86f5de57

File content as of revision 5:b7902dd4ab46:

#ifndef MJ_LINE_SERIAL_H
#define MJ_LINE_SERIAL_H

#include "mbed.h"
#include <vector>
#include <queue>

namespace matsujirushi {

class MjLineSerial
{
public:
    MjLineSerial(RawSerial *serial);
    
    int putc(int c);
    int puts(const char *str);
    int printf(const char *format, ...);

    void attachReadLine(void (*func)(const char *str));
    void task();
    
    const char *txDelimiter;
    bool echo;
    
private:
    RawSerial *baseSerial;
    vector<char> rxBuffer;
    queue<char> txBuffer;
    void (*readLineFunc)(const char *str);
    
};

} // namespace matsujirushi

#endif