mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-30 06:06:36 +00:00
Add command FlashDump when debug is enabled
Add command FlashDump when debug is enabled
This commit is contained in:
parent
f2d01949c3
commit
d6e475e73a
@ -1493,7 +1493,7 @@ void AddLog_P(uint32_t loglevel, const char *formatP)
|
|||||||
|
|
||||||
void AddLog_P(uint32_t loglevel, const char *formatP, const char *formatP2)
|
void AddLog_P(uint32_t loglevel, const char *formatP, const char *formatP2)
|
||||||
{
|
{
|
||||||
char message[100];
|
char message[sizeof(log_data)];
|
||||||
|
|
||||||
snprintf_P(log_data, sizeof(log_data), formatP);
|
snprintf_P(log_data, sizeof(log_data), formatP);
|
||||||
snprintf_P(message, sizeof(message), formatP2);
|
snprintf_P(message, sizeof(message), formatP2);
|
||||||
|
@ -45,17 +45,18 @@
|
|||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
#define D_CMND_CFGDUMP "CfgDump"
|
#define D_CMND_CFGDUMP "CfgDump"
|
||||||
#define D_CMND_CFGPOKE "CfgPoke"
|
|
||||||
#define D_CMND_CFGPEEK "CfgPeek"
|
#define D_CMND_CFGPEEK "CfgPeek"
|
||||||
|
#define D_CMND_CFGPOKE "CfgPoke"
|
||||||
#define D_CMND_CFGSHOW "CfgShow"
|
#define D_CMND_CFGSHOW "CfgShow"
|
||||||
#define D_CMND_CFGXOR "CfgXor"
|
#define D_CMND_CFGXOR "CfgXor"
|
||||||
#define D_CMND_CPUCHECK "CpuChk"
|
#define D_CMND_CPUCHECK "CpuChk"
|
||||||
#define D_CMND_EXCEPTION "Exception"
|
#define D_CMND_EXCEPTION "Exception"
|
||||||
#define D_CMND_FREEMEM "FreeMem"
|
#define D_CMND_FLASHDUMP "FlashDump"
|
||||||
#define D_CMND_RTCDUMP "RtcDump"
|
|
||||||
#define D_CMND_HELP "Help"
|
|
||||||
#define D_CMND_SETSENSOR "SetSensor"
|
|
||||||
#define D_CMND_FLASHMODE "FlashMode"
|
#define D_CMND_FLASHMODE "FlashMode"
|
||||||
|
#define D_CMND_FREEMEM "FreeMem"
|
||||||
|
#define D_CMND_HELP "Help"
|
||||||
|
#define D_CMND_RTCDUMP "RtcDump"
|
||||||
|
#define D_CMND_SETSENSOR "SetSensor"
|
||||||
|
|
||||||
const char kDebugCommands[] PROGMEM =
|
const char kDebugCommands[] PROGMEM =
|
||||||
D_CMND_CFGDUMP "|" D_CMND_CFGPEEK "|" D_CMND_CFGPOKE "|"
|
D_CMND_CFGDUMP "|" D_CMND_CFGPEEK "|" D_CMND_CFGPOKE "|"
|
||||||
@ -69,7 +70,7 @@ const char kDebugCommands[] PROGMEM =
|
|||||||
#ifdef DEBUG_THEO
|
#ifdef DEBUG_THEO
|
||||||
D_CMND_EXCEPTION "|"
|
D_CMND_EXCEPTION "|"
|
||||||
#endif
|
#endif
|
||||||
D_CMND_FREEMEM "|" D_CMND_RTCDUMP "|" D_CMND_SETSENSOR "|" D_CMND_FLASHMODE "|" D_CMND_HELP;
|
D_CMND_FLASHDUMP "|" D_CMND_FLASHMODE "|" D_CMND_FREEMEM"|" D_CMND_HELP "|" D_CMND_RTCDUMP "|" D_CMND_SETSENSOR ;
|
||||||
|
|
||||||
void (* const DebugCommand[])(void) PROGMEM = {
|
void (* const DebugCommand[])(void) PROGMEM = {
|
||||||
&CmndCfgDump, &CmndCfgPeek, &CmndCfgPoke,
|
&CmndCfgDump, &CmndCfgPeek, &CmndCfgPoke,
|
||||||
@ -83,7 +84,7 @@ void (* const DebugCommand[])(void) PROGMEM = {
|
|||||||
#ifdef DEBUG_THEO
|
#ifdef DEBUG_THEO
|
||||||
&CmndException,
|
&CmndException,
|
||||||
#endif
|
#endif
|
||||||
&CmndFreemem, &CmndRtcDump, &CmndSetSensor, &CmndFlashMode, &CmndHelp };
|
&CmndFlashDump, &CmndFlashMode, &CmndFreemem, &CmndHelp, &CmndRtcDump, &CmndSetSensor };
|
||||||
|
|
||||||
uint32_t CPU_loops = 0;
|
uint32_t CPU_loops = 0;
|
||||||
uint32_t CPU_last_millis = 0;
|
uint32_t CPU_last_millis = 0;
|
||||||
@ -433,7 +434,7 @@ void SetFlashMode(uint8_t mode)
|
|||||||
|
|
||||||
void CmndHelp(void)
|
void CmndHelp(void)
|
||||||
{
|
{
|
||||||
AddLog_P(LOG_LEVEL_INFO, kDebugCommands);
|
AddLog_P(LOG_LEVEL_INFO, PSTR("HLP: "), kDebugCommands);
|
||||||
ResponseCmndDone();
|
ResponseCmndDone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,6 +526,47 @@ void CmndFlashMode(void)
|
|||||||
ResponseCmndNumber(ESP.getFlashChipMode());
|
ResponseCmndNumber(ESP.getFlashChipMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t DebugSwap32(uint32_t x) {
|
||||||
|
return ((x << 24) & 0xff000000 ) |
|
||||||
|
((x << 8) & 0x00ff0000 ) |
|
||||||
|
((x >> 8) & 0x0000ff00 ) |
|
||||||
|
((x >> 24) & 0x000000ff );
|
||||||
|
}
|
||||||
|
|
||||||
|
void CmndFlashDump(void)
|
||||||
|
{
|
||||||
|
// FlashDump
|
||||||
|
// FlashDump 0xFF000
|
||||||
|
// FlashDump 0xFC000 10
|
||||||
|
const uint32_t flash_start = 0x40200000; // Start address flash
|
||||||
|
const uint8_t bytes_per_cols = 0x20;
|
||||||
|
const uint32_t max = (SPIFFS_END + 5) * SPI_FLASH_SEC_SIZE; // 0x100000 for 1M flash, 0x400000 for 4M flash
|
||||||
|
|
||||||
|
uint32_t start = flash_start;
|
||||||
|
uint32_t rows = 8;
|
||||||
|
|
||||||
|
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= (max - bytes_per_cols))) {
|
||||||
|
start += (XdrvMailbox.payload &0x7FFFFFFC); // Fix exception as flash access is only allowed on 4 byte boundary
|
||||||
|
|
||||||
|
char *p;
|
||||||
|
uint32_t is_payload = strtol(XdrvMailbox.data, &p, 16);
|
||||||
|
rows = strtol(p, &p, 10);
|
||||||
|
if (0 == rows) { rows = 8; }
|
||||||
|
}
|
||||||
|
uint32_t end = start + (rows * bytes_per_cols);
|
||||||
|
if ((end - flash_start) > max) {
|
||||||
|
end = flash_start + max;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint32_t pos = start; pos < end; pos += bytes_per_cols) {
|
||||||
|
uint32_t* values = (uint32_t*)(pos);
|
||||||
|
AddLog_P2(LOG_LEVEL_INFO, PSTR("%06X: %08X %08X %08X %08X %08X %08X %08X %08X"), pos - flash_start,
|
||||||
|
DebugSwap32(values[0]), DebugSwap32(values[1]), DebugSwap32(values[2]), DebugSwap32(values[3]),
|
||||||
|
DebugSwap32(values[4]), DebugSwap32(values[5]), DebugSwap32(values[6]), DebugSwap32(values[7]));
|
||||||
|
}
|
||||||
|
ResponseCmndDone();
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user