diff --git a/Software/src/debugger.cpp b/Software/src/debugger.cpp index 75985a8..3858f4b 100644 --- a/Software/src/debugger.cpp +++ b/Software/src/debugger.cpp @@ -3,7 +3,7 @@ DebugStatus_t DebuggerStatus[dbg_cntElements]; String IpAddress2String(const IPAddress &ipAddress); -void processCmdDebug(); +void processCmdDebug(String command); void Debug_formatCFG(); void Debug_formatPersistence(); void Debug_printSystemInfo(); @@ -13,6 +13,7 @@ void Debug_dumpConfig(); void Debug_dumpPersistance(); void Debug_ShowDTCs(); void Debug_dumpGlobals(); +void Debug_printHelp(); void initDebugger() { @@ -22,15 +23,84 @@ void initDebugger() Serial.setDebugOutput(false); } +void Debug_Process() +{ + typedef enum InputProcessed_e + { + IDLE, + CMD_COMPLETE, + CMD_ABORT, + CMD_OVERFLOW + } InputProcessed_t; + + static int inputCnt = 0; + static char inputBuffer[32]; + InputProcessed_t InputProcessed = IDLE; + + if (Serial.available()) + { + char inputChar = Serial.read(); + + switch (inputChar) + { + case '\n': + inputBuffer[inputCnt] = 0; // terminate the String + inputCnt = 0; + InputProcessed = CMD_COMPLETE; + break; + + case 0x1B: // Esc + inputBuffer[0] = 0; + inputCnt = 0; + InputProcessed = CMD_ABORT; + break; + + case 0x21 ... 0x7E: // its a real letter or sign and not some control-chars + inputBuffer[inputCnt] = inputChar; + inputCnt++; + break; + + default: + break; + } + + if (inputCnt > sizeof(inputBuffer)) + { + inputCnt = 0; + inputBuffer[sizeof(inputBuffer) - 1] = 0; // terminate the String + InputProcessed = CMD_OVERFLOW; + } + } + + switch (InputProcessed) + { + case CMD_ABORT: + Debug_pushMessage("Abort\n"); + break; + + case CMD_COMPLETE: + processCmdDebug(String(inputBuffer)); + break; + + case CMD_OVERFLOW: + Debug_pushMessage("input Buffer overflow\n"); + break; + + default: + break; + } + InputProcessed = IDLE; +} + void SetDebugportStatus(DebugPorts_t port, DebugStatus_t status) { if (status == disabled) - Debug_pushMessage("disable DebugPort %s", sDebugPorts[port]); + Debug_pushMessage("disable DebugPort %s\n", sDebugPorts[port]); DebuggerStatus[port] = status; if (status == enabled) - Debug_pushMessage("enabled DebugPort %s", sDebugPorts[port]); + Debug_pushMessage("enabled DebugPort %s\n", sDebugPorts[port]); } void Debug_pushMessage(const char *format, ...) @@ -81,7 +151,9 @@ void pushCANDebug(uint32_t id, uint8_t dlc, uint8_t *data) void processCmdDebug(String command) { - if (command == "sysinfo") + if (command == "help") + Debug_printHelp(); + else if (command == "sysinfo") Debug_printSystemInfo(); else if (command == "netinfo") Debug_printWifiInfo(); @@ -107,87 +179,91 @@ void processCmdDebug(String command) Debug_ShowDTCs(); else if (command == "dumpGlobals") Debug_dumpGlobals(); + else if (command == "sdbg") + SetDebugportStatus(dbg_Serial, enabled); + else + Debug_pushMessage("unknown Command\n"); } void Debug_formatCFG() { - Debug_pushMessage("Formatting Config-EEPROM and reseting to default"); + Debug_pushMessage("Formatting Config-EEPROM and reseting to default\n"); FormatConfig_EEPROM(); } void Debug_formatPersistence() { - Debug_pushMessage("Formatting Persistence-EEPROM and reseting to default"); + Debug_pushMessage("Formatting Persistence-EEPROM and reseting to default\n"); FormatPersistence_EEPROM(); } -void RemotDebug_printSystemInfo() +void Debug_printSystemInfo() { - Debug_pushMessage("Souko's ChainOiler Mk1"); - Debug_pushMessage("Hostname: %s", globals.DeviceName); + Debug_pushMessage("Souko's ChainOiler Mk1\n"); + Debug_pushMessage("Hostname: %s\n", globals.DeviceName); FlashMode_t ideMode = ESP.getFlashChipMode(); - Debug_pushMessage("Sdk version: %s", ESP.getSdkVersion()); - Debug_pushMessage("Core Version: %s", ESP.getCoreVersion().c_str()); - Debug_pushMessage("Boot Version: %u", ESP.getBootVersion()); - Debug_pushMessage("Boot Mode: %u", ESP.getBootMode()); - Debug_pushMessage("CPU Frequency: %u MHz", ESP.getCpuFreqMHz()); - Debug_pushMessage("Reset reason: %s", ESP.getResetReason().c_str()); - Debug_pushMessage("Flash Size: %d", ESP.getFlashChipRealSize()); - Debug_pushMessage("Flash Size IDE: %d", ESP.getFlashChipSize()); - Debug_pushMessage("Flash ide mode: %s", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" - : ideMode == FM_DIO ? "DIO" - : ideMode == FM_DOUT ? "DOUT" - : "UNKNOWN")); - Debug_pushMessage("OTA-Pass: %s", QUOTE(ADMIN_PASSWORD)); - Debug_pushMessage("Git-Revison: %s", constants.GitHash); - Debug_pushMessage("Sw-Version: %d.%02d", constants.FW_Version_major, constants.FW_Version_minor); + Debug_pushMessage("Sdk version: %s\n", ESP.getSdkVersion()); + Debug_pushMessage("Core Version: %s\n", ESP.getCoreVersion().c_str()); + Debug_pushMessage("Boot Version: %u\n", ESP.getBootVersion()); + Debug_pushMessage("Boot Mode: %u\n", ESP.getBootMode()); + Debug_pushMessage("CPU Frequency: %u MHz\n", ESP.getCpuFreqMHz()); + Debug_pushMessage("Reset reason: %s\n", ESP.getResetReason().c_str()); + Debug_pushMessage("Flash Size: %d\n", ESP.getFlashChipRealSize()); + Debug_pushMessage("Flash Size IDE: %d\n", ESP.getFlashChipSize()); + Debug_pushMessage("Flash ide mode: %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" + : ideMode == FM_DIO ? "DIO" + : ideMode == FM_DOUT ? "DOUT" + : "UNKNOWN")); + Debug_pushMessage("OTA-Pass: %s\n", QUOTE(ADMIN_PASSWORD)); + Debug_pushMessage("Git-Revison: %s\n", constants.GitHash); + Debug_pushMessage("Sw-Version: %d.%02d\n", constants.FW_Version_major, constants.FW_Version_minor); } void Debug_dumpConfig() { - Debug_pushMessage("DistancePerLube_Default: %d", LubeConfig.DistancePerLube_Default); - Debug_pushMessage("DistancePerLube_Rain: %d", LubeConfig.DistancePerLube_Rain); - Debug_pushMessage("tankCapacity_ml: %d", LubeConfig.tankCapacity_ml); - Debug_pushMessage("amountPerDose_microL: %d", LubeConfig.amountPerDose_microL); - Debug_pushMessage("TankRemindAtPercentage: %d", LubeConfig.TankRemindAtPercentage); - Debug_pushMessage("PulsePerRevolution: %d", LubeConfig.PulsePerRevolution); - Debug_pushMessage("TireWidth_mm: %d", LubeConfig.TireWidth_mm); - Debug_pushMessage("TireWidthHeight_Ratio: %d", LubeConfig.TireWidth_mm); - Debug_pushMessage("RimDiameter_Inch: %d", LubeConfig.RimDiameter_Inch); - Debug_pushMessage("DistancePerRevolution_mm: %d", LubeConfig.DistancePerRevolution_mm); - Debug_pushMessage("BleedingPulses: %d", LubeConfig.BleedingPulses); - Debug_pushMessage("SpeedSource: %d", LubeConfig.SpeedSource); + Debug_pushMessage("DistancePerLube_Default: %d\n", LubeConfig.DistancePerLube_Default); + Debug_pushMessage("DistancePerLube_Rain: %d\n", LubeConfig.DistancePerLube_Rain); + Debug_pushMessage("tankCapacity_ml: %d\n", LubeConfig.tankCapacity_ml); + Debug_pushMessage("amountPerDose_microL: %d\n", LubeConfig.amountPerDose_microL); + Debug_pushMessage("TankRemindAtPercentage: %d\n", LubeConfig.TankRemindAtPercentage); + Debug_pushMessage("PulsePerRevolution: %d\n", LubeConfig.PulsePerRevolution); + Debug_pushMessage("TireWidth_mm: %d\n", LubeConfig.TireWidth_mm); + Debug_pushMessage("TireWidthHeight_Ratio: %d\n", LubeConfig.TireWidth_mm); + Debug_pushMessage("RimDiameter_Inch: %d\n", LubeConfig.RimDiameter_Inch); + Debug_pushMessage("DistancePerRevolution_mm: %d\n", LubeConfig.DistancePerRevolution_mm); + Debug_pushMessage("BleedingPulses: %d\n", LubeConfig.BleedingPulses); + Debug_pushMessage("SpeedSource: %d\n", LubeConfig.SpeedSource); #ifdef FEATURE_ENABLE_GPS - Debug_pushMessage("GPSBaudRate: %d", LubeConfig.GPSBaudRate); + Debug_pushMessage("GPSBaudRate: %d\n", LubeConfig.GPSBaudRate); #endif #ifdef FEATURE_ENABLE_CAN - Debug_pushMessage("CANSource: %d", LubeConfig.CANSource); + Debug_pushMessage("CANSource: %d\n", LubeConfig.CANSource); #endif - Debug_pushMessage("checksum: 0x%08X", LubeConfig.checksum); + Debug_pushMessage("checksum: 0x%08X\n", LubeConfig.checksum); } void Debug_dumpGlobals() { - Debug_pushMessage("systemStatus: %d", globals.systemStatus); - Debug_pushMessage("resumeStatus: %d", globals.resumeStatus); - Debug_pushMessage("systemStatustxt: %s", globals.systemStatustxt); - Debug_pushMessage("purgePulses: %d", globals.purgePulses); - Debug_pushMessage("requestEEAction: %d", globals.requestEEAction); - Debug_pushMessage("DeviceName: %s", globals.DeviceName); - Debug_pushMessage("FlashVersion: %s", globals.FlashVersion); - Debug_pushMessage("eePersistanceAdress: %d", globals.eePersistanceAdress); - Debug_pushMessage("TankPercentage: %d", globals.TankPercentage); - Debug_pushMessage("hasDTC: %d", globals.hasDTC); + Debug_pushMessage("systemStatus: %d\n", globals.systemStatus); + Debug_pushMessage("resumeStatus: %d\n", globals.resumeStatus); + Debug_pushMessage("systemStatustxt: %s\n", globals.systemStatustxt); + Debug_pushMessage("purgePulses: %d\n", globals.purgePulses); + Debug_pushMessage("requestEEAction: %d\n", globals.requestEEAction); + Debug_pushMessage("DeviceName: %s\n", globals.DeviceName); + Debug_pushMessage("FlashVersion: %s\n", globals.FlashVersion); + Debug_pushMessage("eePersistanceAdress: %d\n", globals.eePersistanceAdress); + Debug_pushMessage("TankPercentage: %d\n", globals.TankPercentage); + Debug_pushMessage("hasDTC: %d\n", globals.hasDTC); } void Debug_dumpPersistance() { - Debug_pushMessage("writeCycleCounter: %d", PersistenceData.writeCycleCounter); - Debug_pushMessage("tankRemain_microL: %d", PersistenceData.tankRemain_microL); - Debug_pushMessage("TravelDistance_highRes_mm: %d", PersistenceData.TravelDistance_highRes_mm); - Debug_pushMessage("checksum: %d", PersistenceData.checksum); - Debug_pushMessage("PSD Adress: 0x%04X", globals.eePersistanceAdress); + Debug_pushMessage("writeCycleCounter: %d\n", PersistenceData.writeCycleCounter); + Debug_pushMessage("tankRemain_microL: %d\n", PersistenceData.tankRemain_microL); + Debug_pushMessage("TravelDistance_highRes_mm: %d\n", PersistenceData.TravelDistance_highRes_mm); + Debug_pushMessage("checksum: %d\n", PersistenceData.checksum); + Debug_pushMessage("PSD Adress: 0x%04X\n", globals.eePersistanceAdress); } void Debug_printWifiInfo() @@ -247,7 +323,19 @@ void Debug_ShowDTCs() else strcpy(buff_active, "none"); - Debug_pushMessage("%s \t %6d \t %s \t %d", buff_timestamp, DTCStorage[i].Number, buff_active, DTCStorage[i].severity); + Debug_pushMessage("%s \t %6d \t %s \t %d\n", buff_timestamp, DTCStorage[i].Number, buff_active, DTCStorage[i].severity); } } +} + +void Debug_printHelp() +{ + char buff[64]; + + for (int i = sizeof(helpCmd) / 63; i < sizeof(helpCmd) / 63; i++) + { + memcpy_P(buff, (helpCmd + (i * 63)), 63); + buff[63] = 0; + Debug_pushMessage(buff); + } } \ No newline at end of file diff --git a/Software/src/debugger.h b/Software/src/debugger.h index f6d27b9..0fbe6ab 100644 --- a/Software/src/debugger.h +++ b/Software/src/debugger.h @@ -4,19 +4,19 @@ #include #include "webui.h" -const char helpCmd[] = "sysinfo - System Info\r\n" - "netinfo - WiFi Info\r\n" - "formatPDS - Format Persistence EEPROM Data\r\n" - "formatCFG - Format Configuration EEPROM Data\r\n" - "checkEE - Check EEPROM with checksum\r\n" - "dumpEE1k - dump the first 1kb of EEPROM to Serial\r\n" - "dumpEE - dump the whole EPPROM to Serial\r\n" - "resetPageEE - Reset the PersistenceData Page\r\n" - "dumpCFG - print Config struct\r\n" - "dumpPDS - print PersistanceStruct\r\n" - "saveEE - save EE-Data\r\n" - "showdtc - Show all DTCs\r\n" - "dumpGlobals - print globals\r\n"; +const char PROGMEM helpCmd[] = "sysinfo - System Info\n" + "netinfo - WiFi Info\n" + "formatPDS - Format Persistence EEPROM Data\n" + "formatCFG - Format Configuration EEPROM Data\n" + "checkEE - Check EEPROM with checksum\n" + "dumpEE1k - dump the first 1kb of EEPROM to Serial\n" + "dumpEE - dump the whole EPPROM to Serial\n" + "resetPageEE - Reset the PersistenceData Page\n" + "dumpCFG - print Config struct\n" + "dumpPDS - print PersistanceStruct\n" + "saveEE - save EE-Data\n" + "showdtc - Show all DTCs\n" + "dumpGlobals - print globals\n"; typedef enum DebugStatus_e { @@ -41,5 +41,6 @@ void initDebugger(); void pushCANDebug(uint32_t id, uint8_t dlc, uint8_t *data); void Debug_pushMessage(const char *format, ...); void SetDebugportStatus(DebugPorts_t port, DebugStatus_t status); +void Debug_Process(); #endif \ No newline at end of file diff --git a/Software/src/main.cpp b/Software/src/main.cpp index fb834f7..d736286 100644 --- a/Software/src/main.cpp +++ b/Software/src/main.cpp @@ -198,6 +198,7 @@ void loop() EEPROM_Process(); Webserver_Process(); DTC_Process(); + Debug_Process(); ArduinoOTA.handle(); EEPROMCyclicPDSTicker.update();