bafang-esp32/src/commands.cpp

141 lines
2.7 KiB
C++
Raw Normal View History

2019-12-04 23:10:53 +01:00
#include <Arduino.h>
#include <WiFi.h>
#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> <text>");
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> <text>"},
{ 0, 0, 0 }
};
}