diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 0d61329ee..afcdc04ac 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -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; diff --git a/client/src/cmdhw.c b/client/src/cmdhw.c index a2fe65890..d860fcf99 100644 --- a/client/src/cmdhw.c +++ b/client/src/cmdhw.c @@ -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; } diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index 75788fb0d..c900eb952 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -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