Simple embedded shell with runtime pluggable commands.
Implements a simple unix-like shell for embedded systems with a pluggable command architecture.
SimpleShell.h
- Committer:
- shimniok
- Date:
- 2018-12-19
- Revision:
- 14:75b5918090ae
- Parent:
- 13:a29fb89018e1
- Child:
- 15:242626d8d104
File content as of revision 14:75b5918090ae:
#ifndef __SIMPLESHELL_H #define __SIMPLESHELL_H #include "mbed.h" /** SimpleShell * A simple, flexible, embedded shell with dynamically added shell commands. * Shell commands must be void(). * @code * #include "SimpleShell.h" * * void helloworld() { printf("Hello world!\n"); } * * int main() { * SimpleShell sh; * sh.attach(helloworld, "test"); * sh.run(); * } * @endcode */ class SimpleShell { public: /// Create a new shell instance SimpleShell(); /** Call this to run the shell. * @note The shell can be run in a new thread. * @code * SimpleShell sh; * sh.run(); * thread.start(callback(&sh, &SimpleShell::run)); * @endcode */ void run(); /** Attaches a shell command * @param cb is the callback function that implements the command * @param command is the string used to invoke the command in the shell * @code * sh.attach(helloworld, "test"); * @endcode */ void attach(Callback<void()> cb, char *command); private: /// Maximum number of commands static const int MAXLOOKUP=32; /// Maximum command line buffer size static const int MAXBUF=64; /// internal struct to contain a single command typedef struct { char *command; Callback<void()> cb; } command_entry_t; /** finds and eturns the callback for a command * @return Callback to a function returning void */ Callback<void()> findCommand(); /// Built-in shell command to display list of commands void help(); /// Built-in shell command to print working directory void pwd(); /// Prints command prompt void printPrompt(void); /// Reads a command from the prompt (with editing) void readCommand(); /// Command lookup table command_entry_t lookup[MAXLOOKUP]; /// Current end of lookup table int lookupEnd; /// Maximum number of arguments static const int MAXARGS=5; /// Command and arguments char *argv[MAXARGS]; /// Size of argv int argc; /// Current working directory char _cwd[MAXBUF]; /// shell command history }; // class #endif