Compare commits
	
		
			6 Commits
		
	
	
		
			1.06
			...
			956cc49e6f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 956cc49e6f | |||
| b1da9449ad | |||
| e54cadcc7c | |||
| 0b2245d7f6 | |||
| 3ceab44a96 | |||
| 91de9f0785 | 
							
								
								
									
										1
									
								
								Software/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								Software/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,5 @@ | ||||
| data/ | ||||
| data_src/version | ||||
| .pio | ||||
| .vscode/.browse.c_cpp.db* | ||||
| .vscode/c_cpp_properties.json | ||||
|   | ||||
| @@ -190,8 +190,8 @@ | ||||
|               <div class="col-8"> | ||||
|                 <select id="batterytype" class="set-wsevent data-batterytype select form-control">  | ||||
|                   <option value="Undefined">Undefined</option> | ||||
|                   <option value="LiPo3S">LiPo 3S</option> | ||||
|                   <option value="LiPo2S">LiPo 2S</option>             | ||||
|                   <option value="LiPo 3S">LiPo 3S</option> | ||||
|                   <option value="LiPo 2S">LiPo 2S</option>             | ||||
|                 </select> | ||||
|               </div> | ||||
|             </div> | ||||
| @@ -215,30 +215,36 @@ | ||||
|             <div class="form-group row"> | ||||
|               <label for="name_faction1" class="control-label col-4">Faktion 1</label> | ||||
|               <div class="col-8"> | ||||
|                 <div class="input-group"> | ||||
|                   <input id="name_faction1" type="text" class="set-wsevent data-name_faction1 form-control" required="required"> | ||||
|                   <div class="input-group-append"> | ||||
|                     <span class="input-group-text">max. 32 Zeichen</span> | ||||
|                   </div> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="form-group row"> | ||||
|               <label for="name_faction2" class="control-label col-4">Faktion 2</label> | ||||
|               <div class="col-8"> | ||||
|                 <div class="input-group"> | ||||
|                   <input id="name_faction2" type="text" class="set-wsevent data-name_faction2 form-control" required="required"> | ||||
|                   <div class="input-group-append"> | ||||
|                     <span class="input-group-text">max. 32 Zeichen</span> | ||||
|                   </div> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="form-group row"> | ||||
|               <label for="name_faction3" class="control-label col-4">Faktion 3</label> | ||||
|               <div class="col-8"> | ||||
|                 <div class="input-group"> | ||||
|                   <input id="name_faction3" type="text" class="set-wsevent data-name_faction3 form-control" required="required"> | ||||
|                   <div class="input-group-append"> | ||||
|                     <span class="input-group-text">max. 32 Zeichen</span> | ||||
|                   </div> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </div> | ||||
|           <!-- Div Group Timer Settings --> | ||||
|         <!-- Div Group Save Button--> | ||||
|         <hr /> | ||||
| @@ -267,15 +273,15 @@ | ||||
|           </tr> | ||||
|           <tr> | ||||
|             <td>Firmware Version</td> | ||||
|             <td>%SW_VERSION%</td> | ||||
|             <td><span class="data-fw-version"></span></td> | ||||
|           </tr> | ||||
|           <tr> | ||||
|             <td>Flash Version</td> | ||||
|             <td>%FS_VERSION%</td> | ||||
|             <td><span class="data-flash-version"></span></td> | ||||
|           </tr> | ||||
|           <tr> | ||||
|             <td>Git Revision</td> | ||||
|             <td>%GIT_REV%</td> | ||||
|             <td><span class="data-git-revision"></span></td> | ||||
|           </tr> | ||||
|       </table> | ||||
|       </p> | ||||
|   | ||||
| @@ -1 +0,0 @@ | ||||
| 1.06 | ||||
| @@ -82,7 +82,7 @@ const configData_t ConfigData_defaults = { | ||||
|     "FACTION 1",     // Faction_1_Name | ||||
|     "FACTION 2",     // Faction_2_Name | ||||
|     "FACTION 3",     // Faction_3_Name | ||||
|     "ArisoftTimer", | ||||
|     HOST_NAME, | ||||
|     QUOTE(WIFI_AP_PASSWORD), | ||||
|     QUOTE(WIFI_SSID_CLIENT), | ||||
|     QUOTE(WIFI_PASSWORD_CLIENT), | ||||
|   | ||||
| @@ -17,8 +17,8 @@ platform = espressif8266 | ||||
| framework = arduino | ||||
| board = d1_mini | ||||
|  | ||||
| custom_firmware_version = 1.06  | ||||
| custom_flash_version = 1.06 | ||||
| custom_firmware_version = 1.07 | ||||
| custom_flash_version = 1.07 | ||||
|  | ||||
| upload_protocol = esptool | ||||
| upload_speed = 921600 | ||||
| @@ -29,7 +29,7 @@ upload_speed = 921600 | ||||
|  | ||||
| build_flags= | ||||
|   -DATOMIC_FS_UPDATE | ||||
|   -DFEATURE_ENABLE_WIFI_CLIENT | ||||
|   ;-DFEATURE_ENABLE_WIFI_CLIENT | ||||
|   ;-DFEATURE_ENABLE_LORA | ||||
|   -DFEATURE_ENABLE_UARTLORA | ||||
|   -DWIFI_AP_IP_GW=10,0,0,1 | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| const char *BatteryString[] = { | ||||
|     "Undefined", | ||||
|     "LiPo 2S", | ||||
|     "LiPo 3S"}; | ||||
|     "LiPo 3S" | ||||
|     }; | ||||
|  | ||||
| const size_t BatteryString_Elements = sizeof(BatteryString) / sizeof(BatteryString[0]); | ||||
| @@ -15,7 +15,17 @@ | ||||
|  | ||||
| DebugStatus_t DebuggerStatus[dbg_cntElements]; | ||||
|  | ||||
| void processCmdDebug(String command); | ||||
| // Funktionszeiger | ||||
| typedef void (*CommandFunction)(); | ||||
|  | ||||
| // Struktur zur Zuordnung von Commands zu Funktionen | ||||
| struct CommandMapping | ||||
| { | ||||
|     const char *command; | ||||
|     CommandFunction function; | ||||
| }; | ||||
|  | ||||
| void processCmdDebug(const char *command); | ||||
| void Debug_formatCFG(); | ||||
| void Debug_formatPersistence(); | ||||
| void Debug_printSystemInfo(); | ||||
| @@ -26,8 +36,97 @@ void Debug_dumpPersistance(); | ||||
| void Debug_ShowDTCs(); | ||||
| void Debug_dumpGlobals(); | ||||
| void Debug_printHelp(); | ||||
| void Debug_Reboot(); | ||||
| const char *uint32_to_binary_string(uint32_t num); | ||||
|  | ||||
| // Adapter-Functions for Debug-Commands | ||||
| void adapterCheckEEPOM() { Debug_CheckEEPOM(false); } | ||||
| void adapterCheckEEPOMFix() { Debug_CheckEEPOM(true); } | ||||
| void adapterDumpEEPROM1k() { dumpEEPROM(0, 1024); } | ||||
| void adapterDumpEEPROMAll() { dumpEEPROM(0, EEPROM_SIZE_BYTES); } | ||||
| void adapterKillEEPROM() { writeSequentialToEEPROM(0, 1024); } | ||||
| void adapterZeroEEPROM() { writeZeroToEEPROM(0, 1024); } | ||||
| void adapterResetPageEEPROM() { MovePersistencePage_EEPROM(true); } | ||||
| void adapterSaveEEPROM() { globals.requestEEAction = EE_ALL_SAVE; } | ||||
| void adapterSetDebugPort() { SetDebugportStatus(dbg_Serial, enabled); } | ||||
| void adapterCritDTC() { MaintainDTC(DTC_FAKE_DTC_CRIT, true, millis()); } | ||||
| void adapterWarnDTC() { MaintainDTC(DTC_FAKE_DTC_WARN, true, millis()); } | ||||
| void adapterInfoDTC() { MaintainDTC(DTC_FAKE_DTC_INFO, true, millis()); } | ||||
| void adapterNotifyError() { Websocket_PushNotification("Debug Error Notification", error); } | ||||
| void adapterNotifyWarning() { Websocket_PushNotification("Debug Warning Notification", warning); } | ||||
| void adapterNotifySuccess() { Websocket_PushNotification("Debug Success Notification", success); } | ||||
| void adapterNotifyInfo() { Websocket_PushNotification("Debug Info Notification", info); } | ||||
|  | ||||
| // Definition der Command-Mapping-Tabelle | ||||
| const CommandMapping commandMappings[] = { | ||||
|     {"help", Debug_printHelp}, | ||||
|     {"reboot", Debug_Reboot}, | ||||
|     {"sysinfo", Debug_printSystemInfo}, | ||||
|     {"netinfo", Debug_printWifiInfo}, | ||||
|     {"formatCFG", Debug_formatCFG}, | ||||
|     {"formatPDS", Debug_formatPersistence}, | ||||
|     {"checkEE", adapterCheckEEPOM}, | ||||
|     {"checkEEfix", adapterCheckEEPOMFix}, | ||||
|     {"dumpEE1k", adapterDumpEEPROM1k}, | ||||
|     {"dumpEE", adapterDumpEEPROMAll}, | ||||
|     {"killEE", adapterKillEEPROM}, | ||||
|     {"zeroEE", adapterZeroEEPROM}, | ||||
|     {"resetPageEE", adapterResetPageEEPROM}, | ||||
|     {"dumpCFG", Debug_dumpConfig}, | ||||
|     {"dumpPDS", Debug_dumpPersistance}, | ||||
|     {"saveEE", adapterSaveEEPROM}, | ||||
|     {"dumpGlobals", Debug_dumpGlobals}, | ||||
|     {"sdbg", adapterSetDebugPort}, | ||||
|     {"dtc_show", Debug_ShowDTCs}, | ||||
|     {"dtc_clear", ClearAllDTC}, | ||||
|     {"dtc_crit", adapterCritDTC}, | ||||
|     {"dtc_warn", adapterWarnDTC}, | ||||
|     {"dtc_info", adapterInfoDTC}, | ||||
|     {"notify_error", adapterNotifyError}, | ||||
|     {"notify_warning", adapterNotifyWarning}, | ||||
|     {"notify_success", adapterNotifySuccess}, | ||||
|     {"notify_info", adapterNotifyInfo}, | ||||
| }; | ||||
|  | ||||
| const size_t NUM_COMMANDS = sizeof(commandMappings) / sizeof(commandMappings[0]); | ||||
|  | ||||
| const char helpText[][64] PROGMEM = { | ||||
|     "help           - Print this help text", | ||||
|     "sysinfo        - System Info", | ||||
|     "reboot         - System Reboot", | ||||
|     "netinfo        - WiFi Info", | ||||
|     "formatPDS      - Format Persistence EEPROM Data", | ||||
|     "formatCFG      - Format Configuration EEPROM Data", | ||||
|     "checkEE        - Check EEPROM with checksum", | ||||
|     "checkEEfix     - Check and fix EEPROM with checksum", | ||||
|     "dumpEE1k       - Dump the first 1kb of EEPROM to Serial", | ||||
|     "dumpEE         - Dump the whole EEPROM to Serial", | ||||
|     "killEE         - Kill the first 1024 bytes of EEPROM", | ||||
|     "zeroEE         - Zero the first 1024 bytes of EEPROM", | ||||
|     "resetPageEE    - Reset the PersistenceData Page", | ||||
|     "dumpCFG        - Print Config struct", | ||||
|     "dumpPDS        - Print PersistenceStruct", | ||||
|     "saveEE         - Save EE-Data", | ||||
|     "dumpGlobals    - Print globals", | ||||
|     "sdbg           - Set debug port status", | ||||
|     "dtc_show       - Show all DTCs", | ||||
|     "dtc_clear      - Clear all DTCs", | ||||
|     "dtc_crit       - Maintain critical DTC", | ||||
|     "dtc_warn       - Maintain warning DTC", | ||||
|     "dtc_info       - Maintain info DTC", | ||||
|     "notify_error   - Send error notification", | ||||
|     "notify_warning - Send warning notification", | ||||
|     "notify_success - Send success notification", | ||||
|     "notify_info    - Send info notification" | ||||
| }; | ||||
|  | ||||
| const size_t NUM_HELP_LINES = sizeof(helpText) / sizeof(helpText[0]); | ||||
|  | ||||
| // Überprüfen, ob die Anzahl der Commands und Hilfetext-Zeilen übereinstimmen | ||||
| static_assert(NUM_COMMANDS == NUM_HELP_LINES, "Number of commands and help text lines do not match!"); | ||||
|  | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * @brief Initializes the debugger by setting the initial status for different debug ports. | ||||
|  *        Serial debug output is turned off. | ||||
| @@ -109,7 +208,7 @@ void Debug_Process() | ||||
|         break; | ||||
|  | ||||
|     case CMD_COMPLETE: | ||||
|         processCmdDebug(String(inputBuffer)); | ||||
|         processCmdDebug(inputBuffer); | ||||
|         break; | ||||
|  | ||||
|     case CMD_OVERFLOW: | ||||
| @@ -184,65 +283,22 @@ void Debug_pushMessage(const char *format, ...) | ||||
|  * | ||||
|  * @param command The debug command to be processed. | ||||
|  */ | ||||
| void processCmdDebug(String command) | ||||
| void processCmdDebug(const char *command) | ||||
| { | ||||
|     // Check the received command and execute corresponding actions | ||||
|     if (command == "help") | ||||
|         Debug_printHelp(); | ||||
|     else if (command == "reboot") | ||||
|         globals.systemStatus = sysStat_Shutdown; | ||||
|     else if (command == "sysinfo") | ||||
|         Debug_printSystemInfo(); | ||||
|     else if (command == "netinfo") | ||||
|         Debug_printWifiInfo(); | ||||
|     else if (command == "formatCFG") | ||||
|         Debug_formatCFG(); | ||||
|     else if (command == "formatPDS") | ||||
|         Debug_formatPersistence(); | ||||
|     else if (command == "checkEE") | ||||
|         Debug_CheckEEPOM(false); | ||||
|     else if (command == "checkEEfix") | ||||
|         Debug_CheckEEPOM(true); | ||||
|     else if (command == "dumpEE1k") | ||||
|         dumpEEPROM(0, 1024); | ||||
|     else if (command == "dumpEE") | ||||
|         dumpEEPROM(0, EEPROM_SIZE_BYTES); | ||||
|     else if (command == "killEE") | ||||
|         writeSequentialToEEPROM(0, 1024); | ||||
|     else if (command == "zeroEE") | ||||
|         writeZeroToEEPROM(0, 1024); | ||||
|     else if (command == "resetPageEE") | ||||
|         MovePersistencePage_EEPROM(true); | ||||
|     else if (command == "dumpCFG") | ||||
|         Debug_dumpConfig(); | ||||
|     else if (command == "dumpPDS") | ||||
|         Debug_dumpPersistance(); | ||||
|     else if (command == "saveEE") | ||||
|         globals.requestEEAction = EE_ALL_SAVE; | ||||
|     else if (command == "dumpGlobals") | ||||
|         Debug_dumpGlobals(); | ||||
|     else if (command == "sdbg") | ||||
|         SetDebugportStatus(dbg_Serial, enabled); | ||||
|     else if (command == "dtc_show") | ||||
|         Debug_ShowDTCs(); | ||||
|     else if (command == "dtc_clear") | ||||
|         ClearAllDTC(); | ||||
|     else if (command == "dtc_crit") | ||||
|         MaintainDTC(DTC_FAKE_DTC_CRIT, true, millis()); | ||||
|     else if (command == "dtc_warn") | ||||
|         MaintainDTC(DTC_FAKE_DTC_WARN, true, millis()); | ||||
|     else if (command == "dtc_info") | ||||
|         MaintainDTC(DTC_FAKE_DTC_INFO, true, millis()); | ||||
|     else if (command == "notify_error") | ||||
|         Websocket_PushNotification("Debug Error Notification", error); | ||||
|     else if (command == "notify_warning") | ||||
|         Websocket_PushNotification("Debug Warning Notification", warning); | ||||
|     else if (command == "notify_success") | ||||
|         Websocket_PushNotification("Debug Success Notification", success); | ||||
|     else if (command == "notify_info") | ||||
|         Websocket_PushNotification("Debug Info Notification", info); | ||||
|     else | ||||
|     bool commandFound = false; | ||||
|     for (size_t i = 0; i < NUM_COMMANDS; ++i) | ||||
|     { | ||||
|         if (strcmp(command, commandMappings[i].command) == 0) | ||||
|         { | ||||
|             commandMappings[i].function(); | ||||
|             commandFound = true; | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|     if (!commandFound) | ||||
|     { | ||||
|         Debug_pushMessage("unknown Command\n"); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -415,7 +471,7 @@ void Debug_ShowDTCs() | ||||
|     char buff_active[9]; | ||||
|  | ||||
|     // Header for the DTC display | ||||
|     Debug_pushMessage("\n      timestamp | DTC-Nr. |   status | severity\n"); | ||||
|     Debug_pushMessage("\n      timestamp | DTC-Nr. |   status | debugval\n"); | ||||
|  | ||||
|     // Iterate through DTCStorage and display each entry | ||||
|     for (uint32_t i = 0; i < MAX_DTC_STORAGE; i++) | ||||
| @@ -439,31 +495,37 @@ void Debug_ShowDTCs() | ||||
|                 strcpy(buff_active, "none"); | ||||
|  | ||||
|             // Display DTC information | ||||
|             Debug_pushMessage("%s   %7d   %8s   %8d\n", buff_timestamp, DTCStorage[i].Number, buff_active); | ||||
|             Debug_pushMessage("%s   %7d   %8s   %8d\n", buff_timestamp, DTCStorage[i].Number, buff_active, DTCStorage[i].debugVal); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Displays the help commands for debugging through Serial or WebUI. | ||||
|  *        Each command is printed individually in a formatted manner. | ||||
|  * @brief Prints the help information stored in PROGMEM. | ||||
|  */ | ||||
| void Debug_printHelp() | ||||
| { | ||||
|     char buff[64]; | ||||
|  | ||||
|     // Iterate through helpCmd and display each command | ||||
|     for (unsigned int i = 0; i < sizeof(helpCmd) / 63; i++) | ||||
|     char buffer[64]; | ||||
|     for (size_t i = 0; i < NUM_HELP_LINES; ++i) | ||||
|     { | ||||
|         // Copy a portion of helpCmd to buff for display | ||||
|         memcpy_P(buff, (helpCmd + (i * 63)), 63); | ||||
|         buff[63] = 0; | ||||
|         strcpy_P(buffer, (PGM_P)pgm_read_word(&(helpText[i]))); | ||||
|  | ||||
|         // Display the help command | ||||
|         Debug_pushMessage(buff); | ||||
|         Debug_pushMessage(buffer); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Initiates a system reboot by setting the system status to shutdown. | ||||
|  * | ||||
|  * This function sets the global system status to `sysStat_Shutdown`, | ||||
|  * which will trigger a system reboot sequence. | ||||
|  */ | ||||
| void Debug_Reboot() | ||||
| { | ||||
|     globals.systemStatus = sysStat_Shutdown; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Convert a uint32_t value to a binary string with nibbles separated by a space. | ||||
|  * | ||||
|   | ||||
| @@ -157,7 +157,7 @@ void GetConfig_EEPROM() | ||||
|  | ||||
|   ConfigData.checksum = checksum; | ||||
|  | ||||
|   uint32_t ConfigSanityCheckResult = ConfigSanityCheck(false); | ||||
|   uint32_t ConfigSanityCheckResult = ConfigSanityCheck(true); | ||||
|  | ||||
|   MaintainDTC(DTC_EEPROM_CFG_SANITY, (ConfigSanityCheckResult > 0), ConfigSanityCheckResult); | ||||
| } | ||||
|   | ||||
| @@ -497,7 +497,6 @@ void Websocket_HandleSettings(uint8_t *data) | ||||
|   { | ||||
|     ConfigData.active_faction_on_reboot = value[0] == '1' ? true : false; | ||||
|   } | ||||
|  | ||||
|   else if (strcmp(identifier, "name_faction1") == 0) | ||||
|   { | ||||
|     strncpy(ConfigData.Faction_1_Name, value, sizeof(ConfigData.Faction_1_Name)); | ||||
| @@ -511,10 +510,6 @@ void Websocket_HandleSettings(uint8_t *data) | ||||
|     strncpy(ConfigData.Faction_3_Name, value, sizeof(ConfigData.Faction_3_Name)); | ||||
|   } | ||||
|   else if (strcmp(identifier, "batterytype") == 0) | ||||
|   { | ||||
|     strncpy(ConfigData.wifi_client_ssid, value, sizeof(ConfigData.wifi_client_ssid)); | ||||
|   } | ||||
|   else if (strcmp(identifier, "batterytype") == 0) | ||||
|   { | ||||
|     int index = findIndexByString(value, BatteryString, BatteryString_Elements); | ||||
|     batterytypePreselect = (batteryType_t)index; | ||||
| @@ -660,7 +655,10 @@ void Websocket_RefreshClientData_Static(uint32_t client_id, bool send_mapping) | ||||
|                            "name_faction2;" | ||||
|                            "name_faction3;" | ||||
|                            "wifi-ssid;" | ||||
|                            "wifi-pass;"; | ||||
|                            "wifi-pass;" | ||||
|                            "fw-version;" | ||||
|                            "flash-version;" | ||||
|                            "git-revison;"; | ||||
|  | ||||
|     if (client_id > 0) | ||||
|       webSocket.text(client_id, mapping); | ||||
| @@ -668,24 +666,31 @@ void Websocket_RefreshClientData_Static(uint32_t client_id, bool send_mapping) | ||||
|       webSocket.textAll(mapping); | ||||
|   } | ||||
|  | ||||
|   String temp = "STATIC:"; | ||||
|   char dataString[200]; // Maximal 200 Zeichen für den Data-String | ||||
|   char flash_version[6]; | ||||
|   GetFlashVersion(flash_version, sizeof(flash_version)); | ||||
|  | ||||
|   temp.concat(String(globals.DeviceName) + ";"); | ||||
|   temp.concat(String(ConfigData.active_faction_on_reboot) + ";"); | ||||
|   temp.concat(String(ConfigData.batteryType) + ";"); | ||||
|   temp.concat(String(ConfigData.Faction_1_Name) + ";"); | ||||
|   temp.concat(String(ConfigData.Faction_2_Name) + ";"); | ||||
|   temp.concat(String(ConfigData.Faction_3_Name) + ";"); | ||||
|   temp.concat(String(ConfigData.wifi_client_ssid) + ";"); | ||||
|   temp.concat(String(ConfigData.wifi_client_password) + ";"); | ||||
|   sprintf(dataString, "STATIC:%s;%d;%d;%s;%s;%s;%s;%s;%d.%02d;%s;%s;", | ||||
|           globals.DeviceName, | ||||
|           ConfigData.active_faction_on_reboot, | ||||
|           ConfigData.batteryType, | ||||
|           ConfigData.Faction_1_Name, | ||||
|           ConfigData.Faction_2_Name, | ||||
|           ConfigData.Faction_3_Name, | ||||
|           ConfigData.wifi_client_ssid, | ||||
|           ConfigData.wifi_client_password, | ||||
|           constants.FW_Version_major, | ||||
|           constants.FW_Version_minor, | ||||
|           flash_version, | ||||
|           constants.GitHash); | ||||
|  | ||||
|   if (client_id > 0) | ||||
|   { | ||||
|     webSocket.text(client_id, temp); | ||||
|     webSocket.text(client_id, dataString); | ||||
|   } | ||||
|   else | ||||
|   { | ||||
|     webSocket.textAll(temp); | ||||
|     webSocket.textAll(dataString); | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user