Than Nguyen Trong / Mbed 2 deprecated first_pro

Dependencies:   cmd_line mbed

Committer:
nguyentrongthan
Date:
Mon Apr 02 10:20:06 2018 +0000
Revision:
0:de4e2fb3c765
next commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nguyentrongthan 0:de4e2fb3c765 1 #include "mbed.h"
nguyentrongthan 0:de4e2fb3c765 2 #include "cmd_line.h"
nguyentrongthan 0:de4e2fb3c765 3 #include <vector>
nguyentrongthan 0:de4e2fb3c765 4 #include <string>
nguyentrongthan 0:de4e2fb3c765 5
nguyentrongthan 0:de4e2fb3c765 6 #define SHELL_BUFFER_LENGHT 64
nguyentrongthan 0:de4e2fb3c765 7
nguyentrongthan 0:de4e2fb3c765 8 static int32_t shell_reset(uint8_t* argv);
nguyentrongthan 0:de4e2fb3c765 9 static int32_t shell_help(uint8_t* argv);
nguyentrongthan 0:de4e2fb3c765 10
nguyentrongthan 0:de4e2fb3c765 11 cmd_line_t lgn_cmd_table[] = {
nguyentrongthan 0:de4e2fb3c765 12
nguyentrongthan 0:de4e2fb3c765 13 /*************************************************************************/
nguyentrongthan 0:de4e2fb3c765 14 /* system command */
nguyentrongthan 0:de4e2fb3c765 15 /*************************************************************************/
nguyentrongthan 0:de4e2fb3c765 16 {(const int8_t*)"help", shell_help, (const int8_t*)"help info"},
nguyentrongthan 0:de4e2fb3c765 17 {(const int8_t*)"reset", shell_reset, (const int8_t*)"reset terminal"},
nguyentrongthan 0:de4e2fb3c765 18
nguyentrongthan 0:de4e2fb3c765 19
nguyentrongthan 0:de4e2fb3c765 20 /* End Of Table */
nguyentrongthan 0:de4e2fb3c765 21 {(const int8_t*)0,(pf_cmd_func)0,(const int8_t*)0}
nguyentrongthan 0:de4e2fb3c765 22 };
nguyentrongthan 0:de4e2fb3c765 23
nguyentrongthan 0:de4e2fb3c765 24 Serial console(D1, D0, 115200);
nguyentrongthan 0:de4e2fb3c765 25
nguyentrongthan 0:de4e2fb3c765 26 vector<string> command_vector;
nguyentrongthan 0:de4e2fb3c765 27
nguyentrongthan 0:de4e2fb3c765 28 struct shell_t {
nguyentrongthan 0:de4e2fb3c765 29 uint8_t index;
nguyentrongthan 0:de4e2fb3c765 30 uint8_t data[SHELL_BUFFER_LENGHT];
nguyentrongthan 0:de4e2fb3c765 31 };
nguyentrongthan 0:de4e2fb3c765 32
nguyentrongthan 0:de4e2fb3c765 33 volatile struct shell_t shell;
nguyentrongthan 0:de4e2fb3c765 34
nguyentrongthan 0:de4e2fb3c765 35 void console_rx_callback()
nguyentrongthan 0:de4e2fb3c765 36 {
nguyentrongthan 0:de4e2fb3c765 37 volatile uint8_t c = console.getc();
nguyentrongthan 0:de4e2fb3c765 38 if (shell.index < SHELL_BUFFER_LENGHT - 1) {
nguyentrongthan 0:de4e2fb3c765 39
nguyentrongthan 0:de4e2fb3c765 40 if (c == '\r' || c == '\n') { /* linefeed */
nguyentrongthan 0:de4e2fb3c765 41
nguyentrongthan 0:de4e2fb3c765 42 console.putc('\r');
nguyentrongthan 0:de4e2fb3c765 43 console.putc('\n');
nguyentrongthan 0:de4e2fb3c765 44
nguyentrongthan 0:de4e2fb3c765 45 shell.data[shell.index] = c;
nguyentrongthan 0:de4e2fb3c765 46 shell.data[shell.index + 1] = 0;
nguyentrongthan 0:de4e2fb3c765 47
nguyentrongthan 0:de4e2fb3c765 48 string str_cmd = (const char*)shell.data;
nguyentrongthan 0:de4e2fb3c765 49
nguyentrongthan 0:de4e2fb3c765 50 command_vector.push_back(str_cmd);
nguyentrongthan 0:de4e2fb3c765 51
nguyentrongthan 0:de4e2fb3c765 52 shell.index = 0;
nguyentrongthan 0:de4e2fb3c765 53 } else {
nguyentrongthan 0:de4e2fb3c765 54
nguyentrongthan 0:de4e2fb3c765 55 console.putc(c);
nguyentrongthan 0:de4e2fb3c765 56
nguyentrongthan 0:de4e2fb3c765 57 if (c == 8 && shell.index) { /* backspace */
nguyentrongthan 0:de4e2fb3c765 58 shell.index--;
nguyentrongthan 0:de4e2fb3c765 59 } else {
nguyentrongthan 0:de4e2fb3c765 60 shell.data[shell.index++] = c;
nguyentrongthan 0:de4e2fb3c765 61 }
nguyentrongthan 0:de4e2fb3c765 62 }
nguyentrongthan 0:de4e2fb3c765 63 } else {
nguyentrongthan 0:de4e2fb3c765 64 console.printf("\nerror: cmd too long, cmd size: %d, try again !\r\n", SHELL_BUFFER_LENGHT);
nguyentrongthan 0:de4e2fb3c765 65 shell.index = 0;
nguyentrongthan 0:de4e2fb3c765 66 }
nguyentrongthan 0:de4e2fb3c765 67 }
nguyentrongthan 0:de4e2fb3c765 68
nguyentrongthan 0:de4e2fb3c765 69 static void task_shell();
nguyentrongthan 0:de4e2fb3c765 70
nguyentrongthan 0:de4e2fb3c765 71 int main()
nguyentrongthan 0:de4e2fb3c765 72 {
nguyentrongthan 0:de4e2fb3c765 73 console.printf("Started Application !\r\n");
nguyentrongthan 0:de4e2fb3c765 74 console.attach(console_rx_callback, Serial::RxIrq);
nguyentrongthan 0:de4e2fb3c765 75 while (1) {
nguyentrongthan 0:de4e2fb3c765 76 task_shell();
nguyentrongthan 0:de4e2fb3c765 77 }
nguyentrongthan 0:de4e2fb3c765 78 }
nguyentrongthan 0:de4e2fb3c765 79
nguyentrongthan 0:de4e2fb3c765 80 void task_shell()
nguyentrongthan 0:de4e2fb3c765 81 {
nguyentrongthan 0:de4e2fb3c765 82 if (!command_vector.empty()) {
nguyentrongthan 0:de4e2fb3c765 83 string console_command = command_vector.back();
nguyentrongthan 0:de4e2fb3c765 84 uint8_t* c_str = (uint8_t*)console_command.c_str();
nguyentrongthan 0:de4e2fb3c765 85 uint8_t fist_char = c_str[0];
nguyentrongthan 0:de4e2fb3c765 86
nguyentrongthan 0:de4e2fb3c765 87 switch (cmd_line_parser(lgn_cmd_table, (uint8_t*)&shell.data[0])) {
nguyentrongthan 0:de4e2fb3c765 88 case CMD_SUCCESS:
nguyentrongthan 0:de4e2fb3c765 89 break;
nguyentrongthan 0:de4e2fb3c765 90
nguyentrongthan 0:de4e2fb3c765 91 case CMD_NOT_FOUND: {
nguyentrongthan 0:de4e2fb3c765 92 if (fist_char != '\r' &&
nguyentrongthan 0:de4e2fb3c765 93 fist_char != '\n') {
nguyentrongthan 0:de4e2fb3c765 94 console.printf("cmd unknown\r\n");
nguyentrongthan 0:de4e2fb3c765 95 }
nguyentrongthan 0:de4e2fb3c765 96 }
nguyentrongthan 0:de4e2fb3c765 97 break;
nguyentrongthan 0:de4e2fb3c765 98
nguyentrongthan 0:de4e2fb3c765 99 case CMD_TOO_LONG: {
nguyentrongthan 0:de4e2fb3c765 100 console.printf("cmd too long\r\n");
nguyentrongthan 0:de4e2fb3c765 101 }
nguyentrongthan 0:de4e2fb3c765 102 break;
nguyentrongthan 0:de4e2fb3c765 103
nguyentrongthan 0:de4e2fb3c765 104 case CMD_TBL_NOT_FOUND: {
nguyentrongthan 0:de4e2fb3c765 105 console.printf("cmd table not found\r\n");
nguyentrongthan 0:de4e2fb3c765 106 }
nguyentrongthan 0:de4e2fb3c765 107 break;
nguyentrongthan 0:de4e2fb3c765 108
nguyentrongthan 0:de4e2fb3c765 109 default: {
nguyentrongthan 0:de4e2fb3c765 110 console.printf("cmd error\r\n");
nguyentrongthan 0:de4e2fb3c765 111 }
nguyentrongthan 0:de4e2fb3c765 112 break;
nguyentrongthan 0:de4e2fb3c765 113 }
nguyentrongthan 0:de4e2fb3c765 114
nguyentrongthan 0:de4e2fb3c765 115 console.printf("#");
nguyentrongthan 0:de4e2fb3c765 116
nguyentrongthan 0:de4e2fb3c765 117 command_vector.pop_back();
nguyentrongthan 0:de4e2fb3c765 118 }
nguyentrongthan 0:de4e2fb3c765 119 }
nguyentrongthan 0:de4e2fb3c765 120
nguyentrongthan 0:de4e2fb3c765 121 int32_t shell_reset(uint8_t* argv)
nguyentrongthan 0:de4e2fb3c765 122 {
nguyentrongthan 0:de4e2fb3c765 123 console.printf("shell_reset: %s\r\n", argv);
nguyentrongthan 0:de4e2fb3c765 124 return 0;
nguyentrongthan 0:de4e2fb3c765 125 }
nguyentrongthan 0:de4e2fb3c765 126
nguyentrongthan 0:de4e2fb3c765 127
nguyentrongthan 0:de4e2fb3c765 128 int32_t shell_help(uint8_t* argv)
nguyentrongthan 0:de4e2fb3c765 129 {
nguyentrongthan 0:de4e2fb3c765 130 uint32_t idx = 0;
nguyentrongthan 0:de4e2fb3c765 131 switch (*(argv + 4)) {
nguyentrongthan 0:de4e2fb3c765 132 default:
nguyentrongthan 0:de4e2fb3c765 133 console.printf("\nCOMMANDS INFORMATION:\r\n\n");
nguyentrongthan 0:de4e2fb3c765 134 while(lgn_cmd_table[idx].cmd != (const int8_t*)0) {
nguyentrongthan 0:de4e2fb3c765 135 console.printf("%s\n\t%s\r\n\n", lgn_cmd_table[idx].cmd, lgn_cmd_table[idx].info);
nguyentrongthan 0:de4e2fb3c765 136 idx++;
nguyentrongthan 0:de4e2fb3c765 137 }
nguyentrongthan 0:de4e2fb3c765 138 break;
nguyentrongthan 0:de4e2fb3c765 139 }
nguyentrongthan 0:de4e2fb3c765 140 return 0;
nguyentrongthan 0:de4e2fb3c765 141 }