Reduce probe memory use and format SAM status refresh

This commit is contained in:
CinderSocket
2026-03-09 11:27:38 -07:00
parent 6454adbf5e
commit a84f515ff2
5 changed files with 9 additions and 18 deletions

View File

@@ -185,7 +185,6 @@ static MunitResult test_probe_stages(const MunitParameter params[], void* fixtur
munit_assert_true(probe.has_monza4qt);
munit_assert_true(probe.has_higgs3);
munit_assert_int(probe.stage, ==, SeaderUhfSnmpProbeStageReadMonza4QtKey);
munit_assert_size(probe.tag_config_value.len, >, 80);
munit_assert_true(seader_uhf_snmp_probe_consume_error(
&probe, 0x06U, (const uint8_t*)"\x69\x82", 2U));

View File

@@ -76,7 +76,8 @@ bool seader_scene_sam_present_on_event(void* context, SceneManagerEvent event) {
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubmenuIndexRead) {
scene_manager_set_scene_state(seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_set_scene_state(
seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_next_scene(seader->scene_manager, SeaderSceneRead);
consumed = true;
} else if(event.event == SubmenuIndexReadConfigCard) {
@@ -85,18 +86,21 @@ bool seader_scene_sam_present_on_event(void* context, SceneManagerEvent event) {
scene_manager_next_scene(seader->scene_manager, SeaderSceneReadConfigCard);
consumed = true;
} else if(event.event == SubmenuIndexSamInfo) {
scene_manager_set_scene_state(seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_set_scene_state(
seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_next_scene(seader->scene_manager, SeaderSceneSamInfo);
consumed = true;
} else if(event.event == SubmenuIndexSaved) {
scene_manager_set_scene_state(seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_set_scene_state(
seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_next_scene(seader->scene_manager, SeaderSceneFileSelect);
consumed = true;
} else if(event.event == SeaderWorkerEventSamMissing) {
scene_manager_next_scene(seader->scene_manager, SeaderSceneSamMissing);
consumed = true;
} else if(event.event == SubmenuIndexAPDURunner) {
scene_manager_set_scene_state(seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_set_scene_state(
seader->scene_manager, SeaderSceneSamPresent, event.event);
scene_manager_next_scene(seader->scene_manager, SeaderSceneAPDURunner);
consumed = true;
} else if(event.event == SeaderCustomEventSamStatusUpdated) {

2
t_1.c
View File

@@ -188,7 +188,7 @@ void seader_send_t1(SeaderUartBridge* seader_uart, uint8_t* apdu, size_t len) {
return;
}
t1->tx_buffer = bit_buffer_alloc(768);
t1->tx_buffer = bit_buffer_alloc(len);
bit_buffer_copy_bytes(t1->tx_buffer, apdu, len);
t1->tx_buffer_offset = 0;
}

View File

@@ -162,15 +162,12 @@ bool seader_uhf_snmp_probe_consume_response(
switch(probe->stage) {
case SeaderUhfSnmpProbeStageDiscovery:
probe->engine_id = view.context_engine_id;
probe->usm_engine_id_len = view.usm_engine_id.len;
if(probe->usm_engine_id_len > sizeof(probe->usm_engine_id_storage)) {
probe->stage = SeaderUhfSnmpProbeStageFailed;
return false;
}
memcpy(probe->usm_engine_id_storage, view.usm_engine_id.ptr, probe->usm_engine_id_len);
probe->usm_engine_id =
(SeaderBytesView){probe->usm_engine_id_storage, probe->usm_engine_id_len};
probe->usm_username_len = view.usm_username.len;
if(probe->usm_username_len > sizeof(probe->usm_username_storage)) {
@@ -178,8 +175,6 @@ bool seader_uhf_snmp_probe_consume_response(
return false;
}
memcpy(probe->usm_username_storage, view.usm_username.ptr, probe->usm_username_len);
probe->usm_username =
(SeaderBytesView){probe->usm_username_storage, probe->usm_username_len};
probe->usm_engine_boots = view.usm_engine_boots;
probe->usm_engine_time = view.usm_engine_time;
probe->stage = SeaderUhfSnmpProbeStageReadIce;
@@ -198,7 +193,6 @@ bool seader_uhf_snmp_probe_consume_response(
return false;
}
memcpy(probe->ice_value_storage, value.ptr, probe->ice_value_len);
probe->ice_value = value;
probe->stage = SeaderUhfSnmpProbeStageReadTagConfig;
return true;
case SeaderUhfSnmpProbeStageReadTagConfig:
@@ -209,7 +203,6 @@ bool seader_uhf_snmp_probe_consume_response(
probe->stage = SeaderUhfSnmpProbeStageFailed;
return false;
}
probe->tag_config_value = value;
{
SeaderUhfTagConfigView tag_config = {0};
if(!seader_uhf_tag_config_parse(value, &tag_config)) {

View File

@@ -20,11 +20,6 @@ typedef enum {
typedef struct {
SeaderUhfSnmpProbeStage stage;
SeaderBytesView engine_id;
SeaderBytesView usm_engine_id;
SeaderBytesView usm_username;
SeaderBytesView ice_value;
SeaderBytesView tag_config_value;
uint32_t usm_engine_boots;
uint32_t usm_engine_time;
bool has_monza4qt;