Simple embedded shell with runtime pluggable commands.
Implements a simple unix-like shell for embedded systems with a pluggable command architecture.
Diff: SimpleShell.h
- Revision:
- 20:53f0b5dc30f9
- Parent:
- 19:bf5f5ea4e762
- Child:
- 22:b0e6d416ce99
diff -r bf5f5ea4e762 -r 53f0b5dc30f9 SimpleShell.h --- a/SimpleShell.h Sat Dec 22 20:27:54 2018 +0000 +++ b/SimpleShell.h Mon Dec 24 04:31:43 2018 +0000 @@ -1,121 +0,0 @@ -#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: - - /// Callback type used for shell commands - typedef Callback<void(int, char**)> callback_t; - - /// 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_t cb, char *command); - - -private: - /// Maximum number of commands - static const int MAXLOOKUP=16; - - /// Maximum command line buffer size - static const int MAXBUF=64; - - /// internal struct to contain a single command - typedef struct { - char *command; - callback_t cb; - } command_entry_t; - - /// canonicalize path - char *canon(char *path); - - /** finds and eturns the callback for a command - * @return Callback to a function returning void - */ - callback_t findCommand(); - - /// Built-in shell command to display list of commands - void help(int argc, char **argv); - - /// Change current directory - void cd(int argc, char **argv); - - /// Built-in shell command to print working directory - void pwd(int argc, char **argv); - - /// Built-in shell command to list files in directory - void ls(int argc, char **argv); - - /// Built-in shell command to remove a file - void rm(int argc, char **argv); - - /// Built-in shell command to create a file - void touch(int argc, char **argv); - - /// Built-in shell command to display contents of file - void cat(int argc, char **argv); - - /// 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=3; - - /// Command and arguments - char *argv[MAXARGS]; - - /// Size of argv - int argc; - - /// Current working directory - char _cwd[MAXBUF]; - - /// shell command history - - -}; // class - -#endif \ No newline at end of file