#include #include #include "utils.h" #include "main.h" #include "bafang.h" #include "commands.h" namespace Commands { int parseLine(char *line) { const int MAX_ARGV = 16; char *lineStart = line; char *argv[MAX_ARGV]; int argc = 0; bool found = false; bool end = false; bool inString = false; while(1) { if(*line == '"' && (line == lineStart || *(line - 1) != '\\')) { inString ^= true; if(!inString) { found = true; end = true; lineStart++; } } if(!inString && *line == ' ') end = true; if(end || !*line) { if(found && argc < MAX_ARGV) argv[argc++] = lineStart; found = false; end = false; if(!*line) break; *line = 0; lineStart = ++line; continue; } line++; found = true; } if(!argc) return -1; for(int i = 0; g_Commands[i].cmd; i++) { if(strcmp(g_Commands[i].cmd, argv[0]) == 0) { int ret = g_Commands[i].fun(argc, argv); return ret; } } return -1; } int CMD_help(int argc, char **argv) { Main::channel()->println("Available Commands\n------------------"); int i = 0; while(g_Commands[i].cmd) { Main::channel()->printf("%17s %s\n", g_Commands[i].cmd, g_Commands[i].help); i++; } Main::channel()->println(); return 0; } int CMD_debug(int argc, char **argv) { if(argc != 2) { Main::channel()->println("Usage: debug <0|1>"); return 1; } bool debug = false; if(strtoul(argv[1], NULL, 10)) debug = true; Main::g_Debug[Main::g_CurrentChannel] = debug; return 0; } int CMD_wifi(int argc, char **argv) { Main::channel()->printf("connected: %d\n", WiFi.status()); Main::channel()->println(WiFi.localIP()); WiFi.printDiag(*Main::channel()); return 0; } int CMD_serial(int argc, char **argv) { if(argc != 3) { Main::channel()->println("Usage: serial <0|1|2> "); return 1; } int port = strtoul(argv[1], NULL, 10); if(port == 0) Serial.println(argv[2]); else if(port == 1) Serial1.println(argv[2]); else if(port == 2) Serial2.println(argv[2]); return 0; } CommandEntry g_Commands[] = { {"help", CMD_help, " : Display list of commands"}, {"debug", CMD_debug, " : debug <0|1>"}, {"wifi", CMD_wifi, " : show wifi config"}, {"serial", CMD_serial, " : write to serial <0|1|2> "}, { 0, 0, 0 } }; }