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
main.cpp@1:215d60da45d1, 2016-05-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |