Natural Tiny Shell (NT-Shell) library is a tiny shell library for a small embedded system. The interface is really simple. You should only know ntshell_execute in ntshell.h. So you can port it to any embedded system easily. Please enjoy your small embedded system with it. :)

Dependencies:   mbed NaturalTinyShell

Committer:
shintamainjp
Date:
Thu May 26 21:27:20 2016 +0000
Revision:
1:215d60da45d1
Parent:
0:88f4d656d494
I just removed an instance of DigitalOut for the LED because it doesn't use it. Thanks @GarageStyleMsc !

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:88f4d656d494 1 /*
shintamainjp 0:88f4d656d494 2 * ===============================================================
shintamainjp 0:88f4d656d494 3 * Natural Tiny Shell (NT-Shell) Application example.
shintamainjp 0:88f4d656d494 4 * Version 0.0.6
shintamainjp 0:88f4d656d494 5 * ===============================================================
shintamainjp 0:88f4d656d494 6 * Copyright (c) 2010-2011 Shinichiro Nakamura
shintamainjp 0:88f4d656d494 7 *
shintamainjp 0:88f4d656d494 8 * Permission is hereby granted, free of charge, to any person
shintamainjp 0:88f4d656d494 9 * obtaining a copy of this software and associated documentation
shintamainjp 0:88f4d656d494 10 * files (the "Software"), to deal in the Software without
shintamainjp 0:88f4d656d494 11 * restriction, including without limitation the rights to use,
shintamainjp 0:88f4d656d494 12 * copy, modify, merge, publish, distribute, sublicense, and/or
shintamainjp 0:88f4d656d494 13 * sell copies of the Software, and to permit persons to whom the
shintamainjp 0:88f4d656d494 14 * Software is furnished to do so, subject to the following
shintamainjp 0:88f4d656d494 15 * conditions:
shintamainjp 0:88f4d656d494 16 *
shintamainjp 0:88f4d656d494 17 * The above copyright notice and this permission notice shall be
shintamainjp 0:88f4d656d494 18 * included in all copies or substantial portions of the Software.
shintamainjp 0:88f4d656d494 19 *
shintamainjp 0:88f4d656d494 20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
shintamainjp 0:88f4d656d494 21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
shintamainjp 0:88f4d656d494 22 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
shintamainjp 0:88f4d656d494 23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
shintamainjp 0:88f4d656d494 24 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
shintamainjp 0:88f4d656d494 25 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
shintamainjp 0:88f4d656d494 26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
shintamainjp 0:88f4d656d494 27 * OTHER DEALINGS IN THE SOFTWARE.
shintamainjp 0:88f4d656d494 28 * ===============================================================
shintamainjp 0:88f4d656d494 29 */
shintamainjp 0:88f4d656d494 30
shintamainjp 0:88f4d656d494 31 #include "mbed.h"
shintamainjp 0:88f4d656d494 32 #include "ntshell.h"
shintamainjp 0:88f4d656d494 33 #include "ntopt.h"
shintamainjp 0:88f4d656d494 34 #include "cmd.h"
shintamainjp 0:88f4d656d494 35
shintamainjp 0:88f4d656d494 36 Serial serial(USBTX, USBRX);
shintamainjp 0:88f4d656d494 37 ntshell_t ntshell;
shintamainjp 0:88f4d656d494 38
shintamainjp 0:88f4d656d494 39 typedef struct {
shintamainjp 0:88f4d656d494 40 char *command;
shintamainjp 0:88f4d656d494 41 char *description;
shintamainjp 0:88f4d656d494 42 void (*func)(int argc, char **argv);
shintamainjp 0:88f4d656d494 43 } command_table_t;
shintamainjp 0:88f4d656d494 44
shintamainjp 0:88f4d656d494 45 const command_table_t cmdlist[] = {
shintamainjp 0:88f4d656d494 46 {"foo", "foo command", cmd_foo },
shintamainjp 0:88f4d656d494 47 {"bar", "bar command", cmd_bar },
shintamainjp 0:88f4d656d494 48 {"baz", "baz command", cmd_baz },
shintamainjp 0:88f4d656d494 49 {NULL, NULL, NULL}
shintamainjp 0:88f4d656d494 50 };
shintamainjp 0:88f4d656d494 51
shintamainjp 0:88f4d656d494 52 int func_read(char *buf, int cnt);
shintamainjp 0:88f4d656d494 53 int func_write(const char *buf, int cnt);
shintamainjp 0:88f4d656d494 54 int func_cb_ntshell(const char *text);
shintamainjp 0:88f4d656d494 55 void func_cb_ntopt(int argc, char **argv);
shintamainjp 0:88f4d656d494 56
shintamainjp 0:88f4d656d494 57 /**
shintamainjp 0:88f4d656d494 58 * Serial read function.
shintamainjp 0:88f4d656d494 59 */
shintamainjp 0:88f4d656d494 60 int func_read(char *buf, int cnt) {
shintamainjp 0:88f4d656d494 61 for (int i = 0; i < cnt; i++) {
shintamainjp 0:88f4d656d494 62 buf[i] = serial.getc();
shintamainjp 0:88f4d656d494 63 }
shintamainjp 0:88f4d656d494 64 return 0;
shintamainjp 0:88f4d656d494 65 }
shintamainjp 0:88f4d656d494 66
shintamainjp 0:88f4d656d494 67 /**
shintamainjp 0:88f4d656d494 68 * Serial write function.
shintamainjp 0:88f4d656d494 69 */
shintamainjp 0:88f4d656d494 70 int func_write(const char *buf, int cnt) {
shintamainjp 0:88f4d656d494 71 for (int i = 0; i < cnt; i++) {
shintamainjp 0:88f4d656d494 72 serial.putc(buf[i]);
shintamainjp 0:88f4d656d494 73 }
shintamainjp 0:88f4d656d494 74 return 0;
shintamainjp 0:88f4d656d494 75 }
shintamainjp 0:88f4d656d494 76
shintamainjp 0:88f4d656d494 77 /**
shintamainjp 0:88f4d656d494 78 * Callback function for ntshell module.
shintamainjp 0:88f4d656d494 79 */
shintamainjp 0:88f4d656d494 80 int func_cb_ntshell(const char *text) {
shintamainjp 0:88f4d656d494 81 return ntopt_parse(text, func_cb_ntopt);
shintamainjp 0:88f4d656d494 82 }
shintamainjp 0:88f4d656d494 83
shintamainjp 0:88f4d656d494 84 /**
shintamainjp 0:88f4d656d494 85 * Callback function for ntopt module.
shintamainjp 0:88f4d656d494 86 */
shintamainjp 0:88f4d656d494 87 void func_cb_ntopt(int argc, char **argv) {
shintamainjp 0:88f4d656d494 88 if (argc == 0) {
shintamainjp 0:88f4d656d494 89 return;
shintamainjp 0:88f4d656d494 90 }
shintamainjp 0:88f4d656d494 91 int execnt = 0;
shintamainjp 0:88f4d656d494 92 const command_table_t *p = &cmdlist[0];
shintamainjp 0:88f4d656d494 93 while (p->command != NULL) {
shintamainjp 0:88f4d656d494 94 if (strcmp(argv[0], p->command) == 0) {
shintamainjp 0:88f4d656d494 95 p->func(argc, argv);
shintamainjp 0:88f4d656d494 96 execnt++;
shintamainjp 0:88f4d656d494 97 }
shintamainjp 0:88f4d656d494 98 p++;
shintamainjp 0:88f4d656d494 99 }
shintamainjp 0:88f4d656d494 100 if (execnt == 0) {
shintamainjp 0:88f4d656d494 101 printf("Command not found.\n");
shintamainjp 0:88f4d656d494 102 }
shintamainjp 0:88f4d656d494 103 wait_ms(250);
shintamainjp 0:88f4d656d494 104 }
shintamainjp 0:88f4d656d494 105
shintamainjp 0:88f4d656d494 106 /**
shintamainjp 0:88f4d656d494 107 * Application code.
shintamainjp 0:88f4d656d494 108 */
shintamainjp 0:88f4d656d494 109 int main() {
shintamainjp 0:88f4d656d494 110 ntshell_execute(&ntshell, func_read, func_write, func_cb_ntshell);
shintamainjp 0:88f4d656d494 111 }