adapt hw dbg to query device before setting log level

This commit is contained in:
iceman1001 2022-06-06 18:21:28 +02:00
commit c5d12bba0f
3 changed files with 55 additions and 14 deletions

View file

@ -782,6 +782,10 @@ static void PacketReceived(PacketCommandNG *packet) {
reply_ng(CMD_SET_DBGMODE, PM3_SUCCESS, NULL, 0);
break;
}
case CMD_GET_DBGMODE: {
reply_ng(CMD_GET_DBGMODE, PM3_SUCCESS, (uint8_t *)&g_dbglevel, 1);
break;
}
case CMD_SET_TEAROFF: {
struct p {
uint16_t delay_us;
@ -860,6 +864,7 @@ static void PacketReceived(PacketCommandNG *packet) {
bool verbose : 1;
} PACKED;
struct p *payload = (struct p *)packet->data.asBytes;
uint32_t bits = SniffLF(payload->verbose, payload->samples, true);
reply_ng(CMD_LF_SNIFF_RAW_ADC, PM3_SUCCESS, (uint8_t *)&bits, sizeof(bits));
break;

View file

@ -427,8 +427,10 @@ static int CmdDbg(const char *Cmd) {
CLIParserContext *ctx;
CLIParserInit(&ctx, "hw dbg",
"Set device side debug level output.\n"
"Note: option -4, this option may cause malfunction itself",
"hw dbg -1\n"
"Note: option `-4`, this option may cause malfunction itself by\n"
"introducing delays in time critical functions like simulation or sniffing",
"hw dbg --> get current log level\n"
"hw dbg -1 --> set log level to _error_\n"
);
void *argtable[] = {
@ -453,19 +455,52 @@ static int CmdDbg(const char *Cmd) {
return PM3_EINVARG;
}
uint8_t dbg = 0;
if (lv0)
dbg = 0;
else if (lv1)
dbg = 1;
else if (lv2)
dbg = 2;
else if (lv3)
dbg = 3;
else if (lv4)
dbg = 4;
clearCommandBuffer();
SendCommandNG(CMD_GET_DBGMODE, NULL, 0);
PacketResponseNG resp;
if (WaitForResponseTimeout(CMD_GET_DBGMODE, &resp, 2000) == false) {
PrintAndLogEx(WARNING, "Failed to get current device debug level");
return PM3_ETIMEOUT;
}
uint8_t curr = resp.data.asBytes[0];
SendCommandNG(CMD_SET_DBGMODE, &dbg, sizeof(dbg));
char dbglvlstr[20] = {0};
switch (curr) {
case DBG_NONE:
sprintf(dbglvlstr, "none");
break;
case DBG_ERROR:
sprintf(dbglvlstr, "error");
break;
case DBG_INFO:
sprintf(dbglvlstr, "info");
break;
case DBG_DEBUG:
sprintf(dbglvlstr, "debug");
break;
case DBG_EXTENDED:
sprintf(dbglvlstr, "extended");
break;
}
PrintAndLogEx(INFO, " Current debug log level..... %d ( " _YELLOW_("%s")" )", curr, dbglvlstr);
if ((lv0 + lv1 + lv2 + lv3 + lv4) == 1) {
uint8_t dbg = 0;
if (lv0)
dbg = 0;
else if (lv1)
dbg = 1;
else if (lv2)
dbg = 2;
else if (lv3)
dbg = 3;
else if (lv4)
dbg = 4;
clearCommandBuffer();
SendCommandNG(CMD_SET_DBGMODE, &dbg, sizeof(dbg));
}
return PM3_SUCCESS;
}

View file

@ -378,6 +378,7 @@ typedef struct {
#define CMD_TIA 0x0117
#define CMD_BREAK_LOOP 0x0118
#define CMD_SET_TEAROFF 0x0119
#define CMD_GET_DBGMODE 0x0120
// RDV40, Flash memory operations
#define CMD_FLASHMEM_WRITE 0x0121