some debugging regarding EEPROM

This commit is contained in:
Marcel Peterkau 2024-05-31 01:16:26 +02:00
parent ab2ab0e0c1
commit fc592c4342
8 changed files with 106 additions and 33 deletions

View File

@ -23,6 +23,8 @@ const char PROGMEM helpCmd[] = "sysinfo - System Info\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"
"killEE - kill the first 1024 byte of EEPROM\n"
"zeroEE - zero the first 1024 byte of EEPROM\n"
"resetPageEE - Reset the PersistenceData Page\n"
"dumpCFG - print Config struct\n"
"dumpPDS - print PersistanceStruct\n"

View File

@ -117,6 +117,8 @@ void dumpEEPROM(uint16_t memoryAddress, uint16_t length);
void MovePersistencePage_EEPROM(boolean reset);
uint32_t ConfigSanityCheck(bool autocorrect = false);
bool validateWiFiString(char *string, size_t size);
void writeSequentialToEEPROM(uint16_t memoryAddress, uint16_t length);
void writeZeroToEEPROM(uint16_t memoryAddress, uint16_t length);
extern configData_t ConfigData;
extern persistenceData_t PersistenceData;

View File

@ -19,10 +19,10 @@
#endif
#ifdef FEATURE_ENABLE_WIFI_CLIENT
#ifndef WIFI_CLIENT_PASSWORD
#ifndef WIFI_PASSWORD_CLIENT
#error "You must define an WIFI_PASSWORD for OTA-Update"
#endif
#ifndef WIFI_CLIENT_SSID
#ifndef WIFI_SSID_CLIENT
#error "You must define an WIFI_SSID for OTA-Update"
#endif
#endif

View File

@ -20,9 +20,9 @@ board = d1_mini
upload_protocol = esptool
upload_speed = 921600
;upload_port = 10.0.1.48
;upload_protocol = espota
;upload_flags =
; --auth=${wifi_cred.ota_password}
;upload_flags =
; --port=8266
; --auth=${wifi_cred.admin_password}
build_flags=
!python codegen/git_rev_macro.py
@ -31,10 +31,10 @@ build_flags=
;-DFEATURE_ENABLE_LORA
-DFEATURE_ENABLE_UARTLORA
-DWIFI_AP_IP_GW=10,0,0,1
-DADMIN_PASSWORD=${wifi_cred.ota_password}
-DWIFI_CLIENT_SSID=${wifi_cred.wifi_client_ssid}
-DWIFI_CLIENT_PASSWORD=${wifi_cred.wifi_client_password}
-DWIFI_AP_SSID=${wifi_cred.wifi_ap_ssid}
-DADMIN_PASSWORD=${wifi_cred.admin_password}
-DWIFI_SSID_CLIENT=${wifi_cred.wifi_ssid_client}
-DWIFI_PASSWORD_CLIENT=${wifi_cred.wifi_password_client}
-DADMIN_PASSWORD=${wifi_cred.admin_password}
-DWIFI_AP_PASSWORD=${wifi_cred.wifi_ap_password}
-DDEVICE_NAME='"Dark Emergency Timer"'

View File

@ -179,7 +179,6 @@ void Debug_pushMessage(const char *format, ...)
}
}
/**
* @brief Processes a debug command and performs corresponding actions.
*
@ -206,6 +205,10 @@ void processCmdDebug(String command)
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")
@ -291,6 +294,15 @@ void Debug_printSystemInfo()
void Debug_dumpConfig()
{
Debug_pushMessage("batteryType: %d\n", ConfigData.batteryType);
Debug_pushMessage("Faction_1_Name: %s\n", ConfigData.Faction_1_Name);
Debug_pushMessage("Faction_1_Name: %s\n", ConfigData.Faction_2_Name);
Debug_pushMessage("Faction_1_Name: %s\n", ConfigData.Faction_3_Name);
Debug_pushMessage("active_faction_on_reboot: %d\n", ConfigData.active_faction_on_reboot);
Debug_pushMessage("wifi_autoconnect: %d\n", ConfigData.wifi_autoconnect);
Debug_pushMessage("wifi_ap_password: %s\n", ConfigData.wifi_ap_password);
Debug_pushMessage("wifi_ap_ssid: %s\n", ConfigData.wifi_ap_ssid);
Debug_pushMessage("wifi_client_ssid: %s\n", ConfigData.wifi_client_ssid);
Debug_pushMessage("wifi_client_password: %s\n", ConfigData.wifi_client_password);
Debug_pushMessage("EEPROM_Version: %d\n", ConfigData.EEPROM_Version);
Debug_pushMessage("checksum: 0x%08X\n", ConfigData.checksum);
}
@ -451,12 +463,15 @@ void Debug_printHelp()
* @return A pointer to a const char string containing the binary representation
* of the input number with nibbles separated by a space.
*/
const char* uint32_to_binary_string(uint32_t num) {
const char *uint32_to_binary_string(uint32_t num)
{
static char binary_str[65]; // 32 bits + 31 spaces + null terminator
int i, j;
for (i = 31, j = 0; i >= 0; i--, j++) {
for (i = 31, j = 0; i >= 0; i--, j++)
{
binary_str[j] = ((num >> i) & 1) ? '1' : '0';
if (i % 4 == 0 && i != 0) {
if (i % 4 == 0 && i != 0)
{
binary_str[++j] = ' '; // Insert space after every nibble
}
}

View File

@ -18,7 +18,7 @@ configData_t ConfigData;
persistenceData_t PersistenceData;
// EEPROM version identifier
const uint16_t eeVersion = EEPROM_STRUCTURE_REVISION;
const uint16_t eeVersion = EEPROM_STRUCTURE_REVISION;
// Flag indicating whether EEPROM is available
boolean eeAvailable = false;
@ -113,16 +113,23 @@ void EEPROM_Process()
*/
void StoreConfig_EEPROM()
{
// Berechnung der Prüfsumme
ConfigData.checksum = 0;
ConfigData.checksum = Checksum_EEPROM((uint8_t *)&ConfigData, sizeof(ConfigData));
// Überprüfung, ob der EEPROM verfügbar ist
if (!checkEEPROMavailable())
return;
ee.updateBlock(startofConfigData, (uint8_t *)&ConfigData, sizeof(ConfigData));
// Byteweise in den EEPROM schreiben
uint8_t *dataPtr = (uint8_t *)&ConfigData;
for (uint16_t i = 0; i < sizeof(ConfigData); i++)
{
ee.writeByte(startofConfigData + i, dataPtr[i]);
}
// Sanity Check der Konfiguration
uint32_t ConfigSanityCheckResult = ConfigSanityCheck(false);
if (ConfigSanityCheckResult > 0)
{
MaintainDTC(DTC_EEPROM_CFG_SANITY, true, ConfigSanityCheckResult);
@ -152,7 +159,6 @@ void GetConfig_EEPROM()
uint32_t ConfigSanityCheckResult = ConfigSanityCheck(false);
MaintainDTC(DTC_EEPROM_CFG_SANITY, (ConfigSanityCheckResult > 0), ConfigSanityCheckResult);
}
/**
@ -174,7 +180,12 @@ void StorePersistence_EEPROM()
if (!checkEEPROMavailable())
return;
ee.updateBlock(globals.eePersistanceAdress, (uint8_t *)&PersistenceData, sizeof(PersistenceData));
// Byteweise in den EEPROM schreiben
uint8_t *dataPtr = (uint8_t *)&PersistenceData;
for (uint16_t i = 0; i < sizeof(PersistenceData); i++)
{
ee.writeByte(globals.eePersistanceAdress + i, dataPtr[i]);
}
}
/**
@ -306,7 +317,7 @@ void dumpEEPROM(uint16_t memoryAddress, uint16_t length)
if (!checkEEPROMavailable())
return;
char ascii_buf[BLOCK_TO_LENGTH + 1];
char ascii_buf[BLOCK_TO_LENGTH + 1] = {0};
sprintf(ascii_buf, "%*s", BLOCK_TO_LENGTH, "ASCII");
// Print column headers
@ -326,24 +337,26 @@ void dumpEEPROM(uint16_t memoryAddress, uint16_t length)
// Print ASCII representation header for each block
if (blockpoint == 0)
{
ascii_buf[BLOCK_TO_LENGTH] = 0;
Debug_pushMessage(" %s", ascii_buf);
if (i > 0) // Ensure we don't print an empty ASCII buffer on the first iteration
{
ascii_buf[BLOCK_TO_LENGTH] = 0;
Debug_pushMessage(" %s", ascii_buf);
}
Debug_pushMessage("\n0x%05X:", memoryAddress);
memset(ascii_buf, ' ', BLOCK_TO_LENGTH); // Clear the ASCII buffer with spaces
}
// Read and print each byte
ascii_buf[blockpoint] = ee.readByte(memoryAddress);
Debug_pushMessage(" %02X", ascii_buf[blockpoint]);
// Replace non-printable characters with dots in ASCII representation
if (ascii_buf[blockpoint] < 0x20 || ascii_buf[blockpoint] > 0x7E)
ascii_buf[blockpoint] = '.';
uint8_t byte = ee.readByte(memoryAddress);
ascii_buf[blockpoint] = (byte >= 0x20 && byte <= 0x7E) ? byte : '.';
Debug_pushMessage(" %02X", byte);
memoryAddress++;
}
// Print a new line at the end of the dump
Debug_pushMessage("\n");
// Print remaining ASCII buffer
ascii_buf[BLOCK_TO_LENGTH] = 0;
Debug_pushMessage(" %s\n", ascii_buf); // Final ASCII line
}
/**
@ -459,3 +472,43 @@ bool validateWiFiString(char *string, size_t size)
return false;
}
/**
* @brief Write sequential numbers to a portion of EEPROM.
*
* This function writes sequential numbers starting from 0 to a specified portion of EEPROM.
* If the number reaches 255, it wraps around and starts again from 1.
*
* @param memoryAddress Starting address in EEPROM.
* @param length Number of bytes to write.
*/
void writeSequentialToEEPROM(uint16_t memoryAddress, uint16_t length)
{
if (!checkEEPROMavailable())
return;
uint8_t value = 0;
for (uint16_t i = 0; i < length; i++)
{
ee.writeByte(memoryAddress + i, value);
value = (value == 255) ? 1 : value + 1;
}
}
/**
* @brief Write 0 to a portion of EEPROM.
*
* This function writes 0 to a specified portion of EEPROM.
*
* @param memoryAddress Starting address in EEPROM.
* @param length Number of bytes to write.
*/
void writeZeroToEEPROM(uint16_t memoryAddress, uint16_t length)
{
if (!checkEEPROMavailable())
return;
for (uint16_t i = 0; i < length; i++)
{
ee.writeByte(memoryAddress + i, 0);
}
}

View File

@ -568,6 +568,7 @@ void Websocket_RefreshClientData_Status(uint32_t client_id, bool send_mapping)
if (send_mapping)
{
const char mapping[] = "MAPPING_STATUS:"
"batterylevel;"
"systemstatus;"
"activefaction;"
"time_faction1;"
@ -582,6 +583,7 @@ void Websocket_RefreshClientData_Status(uint32_t client_id, bool send_mapping)
String temp = "STATUS:";
temp.concat(String(globals.battery_level) + ";");
temp.concat(String(globals.systemStatustxt) + ";");
temp.concat(String(PersistenceData.activeFaction) + ";");
temp.concat(String(PersistenceData.faction_1_timer) + ";");

View File

@ -1,6 +1,5 @@
[wifi_cred]
wifi_ap_ssid = wifi-ap-ssid
admin_password = chainlube
wifi_ap_password = wifiappass
wifi_client_ssid = wifi-ssid
wifi_client_password = wifi-pass
ota_password = ota-password
wifi_ssid_client = wifi-ssid
wifi_password_client = ota-password