Sensor3/lib/patrix/console.cpp

75 lines
2.2 KiB
C++

#include <console.h>
#include <HardwareSerial.h>
#include <log.h>
#include <Esp.h>
#include <WiFi.h>
#include "mqtt.h"
#include "wifi.h"
char consoleBuffer[64] = "";
char *consoleBufferW = consoleBuffer;
void consoleLoop() {
uint8_t i = 0;
while (Serial.available() > 0 && i++ < 100) {
const char symbol = static_cast<char>(Serial.read());
if (symbol == '\n' || symbol == '\r') {
if (*consoleBuffer != 0) {
Serial.print('\n');
info("CONSOLE", "> %s", consoleBuffer);
consoleHandle(consoleBuffer);
consoleBufferW = consoleBuffer;
*consoleBufferW = 0;
}
} else if (symbol == '\b') {
if (consoleBufferW > consoleBuffer) {
consoleBufferW--;
*consoleBufferW = 0;
Serial.print("\b \b");
}
} else {
if (consoleBufferW < consoleBuffer + sizeof consoleBuffer - 1) {
*consoleBufferW = symbol;
consoleBufferW++;
*consoleBufferW = 0;
Serial.print("\r");
Serial.print(consoleBuffer);
} else {
Serial.print("\nCONSOLE BUFFER OVERFLOW\n");
Serial.print(consoleBuffer);
}
}
}
}
void consoleHandle(const char *cmd) {
if (strcmp(cmd, "help") == 0) {
info("CONSOLE", "help : print this help");
info("CONSOLE", "net : print network info");
info("CONSOLE", "reboot : reboot system");
info("CONSOLE", "wifi : reconnect wifi");
info("CONSOLE", "mqtt : reconnect mqtt");
} else if (strcmp(cmd, "net") == 0) {
info("CONSOLE", "MAC: %17s", WiFi.macAddress().c_str());
info("CONSOLE", "IP: %17s", WiFi.localIP().toString().c_str());
info("CONSOLE", "Gateway: %17s", WiFi.gatewayIP().toString().c_str());
info("CONSOLE", "SSID: %17s", WiFi.SSID().c_str());
info("CONSOLE", "BSSID: %17s", WiFi.BSSIDstr().c_str());
info("CONSOLE", "RSSI: %17d", WiFi.RSSI());
} else if (strcmp(cmd, "reboot") == 0) {
info("CONSOLE", "Rebooting...");
delay(500);
yield();
ESP.restart();
} else if (strcmp(cmd, "wifi") == 0) {
info("CONSOLE", "Reconnecting WiFi...");
wifiConnect();
} else if (strcmp(cmd, "mqtt") == 0) {
info("CONSOLE", "Reconnecting MQTT...");
mqttDisconnect();
} else {
info("CONSOLE", "Unknown command: %s", cmd);
}
}