Stability fix for sc-bigbuf traces

This commit is contained in:
Antiklesys
2026-09-05 22:31:52 +08:00
parent ceb77de7fe
commit 57a42e3ce9
6 changed files with 25 additions and 1 deletions
+9 -1
View File
@@ -75,6 +75,7 @@ static dmabuf8_t s_dma_8 = {
// trace related variables
static uint32_t s_trace_len = 0;
static bool s_tracing = true;
static bool s_tracing_blocked = false;
static uint32_t s_trace_origin = 0;
static bool s_trace_origin_valid = false;
@@ -231,7 +232,14 @@ void set_tracelen(uint32_t value) {
}
void set_tracing(bool enable) {
s_tracing = enable;
s_tracing = enable && !s_tracing_blocked;
}
bool set_tracing_blocked(bool blocked) {
bool previous = s_tracing_blocked;
s_tracing_blocked = blocked;
if (blocked) s_tracing = false;
return previous;
}
bool get_tracing(void) {
+1
View File
@@ -55,6 +55,7 @@ void BigBuf_print_status(void);
uint32_t BigBuf_get_traceLen(void);
void clear_trace(void);
void set_tracing(bool enable);
bool set_tracing_blocked(bool blocked); // Returns the previous block state.
void set_tracelen(uint32_t value);
bool get_tracing(void);
+4
View File
@@ -2936,6 +2936,10 @@ static void PacketReceived(PacketCommandNG *packet) {
sam_sc_handler(packet);
break;
}
case CMD_HF_SAM_SC_NO_TRACE: {
sam_sc_handler_no_trace(packet);
break;
}
#endif
+9
View File
@@ -453,6 +453,15 @@ static int sam_sc_card_api_loop(uint8_t *response, uint16_t *response_len,
return res;
}
void sam_sc_handler_no_trace(const PacketCommandNG *c) {
const bool tracing = get_tracing();
const bool blocked = set_tracing_blocked(true);
clear_trace();
sam_sc_handler(c);
set_tracing_blocked(blocked);
set_tracing(tracing);
}
void sam_sc_handler(const PacketCommandNG *c) {
if (c == NULL || c->length < SAM_SC_HEADER_LEN) {
+1
View File
@@ -93,6 +93,7 @@
#define SAM_SC_ADDR_SNMP_LOADER 0xff
void sam_sc_handler(const PacketCommandNG *c);
void sam_sc_handler_no_trace(const PacketCommandNG *c);
// Forces the next sam_sc_handler() call to perform an I2C reset before sending
// its payload. Intended to be called by other firmware paths that may have
+1
View File
@@ -1205,6 +1205,7 @@ typedef struct {
// session state must persist across calls (no I2C reset, no GetVersion ping,
// no iso15 NFC-relay loop) and the routing scFlag byte must be host-supplied.
#define CMD_HF_SAM_SC 0x0904
#define CMD_HF_SAM_SC_NO_TRACE 0x0905 // Same payload and reply command as CMD_HF_SAM_SC.
#define CMD_UNKNOWN 0xFFFF