fix: don't manually re-arm SRQ in menu nav

This commit is contained in:
2025-12-04 16:28:50 +06:00
parent 9fed882f50
commit 329a648f9c

106
main.c
View File

@@ -2184,14 +2184,15 @@ static void enter_menu_mode(void) {
save_dmm_state(); save_dmm_state();
// Trigger Hold (T4) to make sure no new measurements // Trigger Hold (T4) to make sure no new measurements
// interrupt our display while we're going through the menu // interrupt our display while we're going through the menu
gpib_send(sys_cfg.dmm_addr, HP3478A_TRIG_HOLD); // also clear SRQ here manually so we don't increment menu entry
// the earlier we clear status bits, the better
gpib_send(sys_cfg.dmm_addr, HP3478A_TRIG_HOLD HP3478A_CMD_SRQ_CLEAR);
app.current_mode = MODE_MENU; app.current_mode = MODE_MENU;
app.menu_pos = MENU_REL; app.menu_pos = MENU_REL;
app.data.menu.timer = millis(); app.data.menu.timer = millis();
dmm_display("M: REL", HP3478A_DISP_TEXT_FAST); dmm_display("M: REL", HP3478A_DISP_TEXT_FAST);
gpib_send(sys_cfg.dmm_addr, HP3478A_CMD_MASK_BTN_ONLY HP3478A_CMD_SRQ_CLEAR);
} }
static void handle_feature_logic(void) { static void handle_feature_logic(void) {
@@ -2675,11 +2676,6 @@ static void handle_menu_navigation(void) {
// update display // update display
prepare_menu_base_string(); prepare_menu_base_string();
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST); dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
// re-arm SRQ
gpib_send(sys_cfg.dmm_addr,
HP3478A_CMD_MASK_BTN_ONLY HP3478A_CMD_SRQ_CLEAR);
return; return;
} }
} }
@@ -2694,62 +2690,64 @@ static void handle_menu_navigation(void) {
if (dots > 3) dots = 3; if (dots > 3) dots = 3;
for (int i = 0; i < dots; i++) strcat(scratch.disp.full_cmd, "."); for (int i = 0; i < dots; i++) strcat(scratch.disp.full_cmd, ".");
// this does a strncmp every time :c
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
} }
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
if (elapsed > sys_cfg.menu_commit_delay_ms) { if (elapsed <= sys_cfg.menu_commit_delay_ms) return;
// L0: main menu
if (app.data.menu.layer == SUBMENU_NONE) {
if (app.menu_pos == MENU_TEMP) {
// sensor select
app.data.menu.layer = SUBMENU_TEMP_SENS;
app.menu_pos = 0; // default to first sensor
app.data.menu.timer = now;
prepare_menu_base_string(); // L0: main menu
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST); if (app.data.menu.layer == SUBMENU_NONE) {
return; if (app.menu_pos == MENU_TEMP) {
} // sensor select
// enter standard modes app.data.menu.layer = SUBMENU_TEMP_SENS;
enter_feature_mode(app.menu_pos); app.menu_pos = 0; // default to first sensor
app.data.menu.timer = now;
prepare_menu_base_string();
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
return; return;
} }
// enter standard modes
enter_feature_mode(app.menu_pos);
return;
}
// L1: sensor select // L1: sensor select
else if (app.data.menu.layer == SUBMENU_TEMP_SENS) { else if (app.data.menu.layer == SUBMENU_TEMP_SENS) {
app.temp_sensor = (temp_sensor_t)app.menu_pos; app.temp_sensor = (temp_sensor_t)app.menu_pos;
if (app.temp_sensor == SENS_TYPE_K) { if (app.temp_sensor == SENS_TYPE_K) {
// Type K is voltage based so skip wire select // Type K is voltage based so skip wire select
enter_feature_mode(MENU_TEMP);
} else if (app.temp_sensor == SENS_THERMISTOR) {
app.data.menu.layer = SUBMENU_TEMP_NTC;
app.menu_pos = 0; // default to 10K
app.data.menu.timer = now;
prepare_menu_base_string();
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
} else {
// wire select (for resistive)
app.data.menu.layer = SUBMENU_TEMP_WIRE;
app.menu_pos = 0; // default to 2W
app.data.menu.timer = now;
prepare_menu_base_string();
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
}
return;
}
// L2a: wire select
else if (app.data.menu.layer == SUBMENU_TEMP_WIRE) {
app.temp_wire_mode = (wire_mode_t)app.menu_pos;
enter_feature_mode(MENU_TEMP); enter_feature_mode(MENU_TEMP);
return; } else if (app.temp_sensor == SENS_THERMISTOR) {
} // L2b: NTC select app.data.menu.layer = SUBMENU_TEMP_NTC;
else if (app.data.menu.layer == SUBMENU_TEMP_NTC) { app.menu_pos = 0; // default to 10K
app.temp_ntc_preset = (ntc_preset_t)app.menu_pos; app.data.menu.timer = now;
enter_feature_mode(MENU_TEMP); prepare_menu_base_string();
return; dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
} else {
// wire select (for resistive)
app.data.menu.layer = SUBMENU_TEMP_WIRE;
app.menu_pos = 0; // default to 2W
app.data.menu.timer = now;
prepare_menu_base_string();
dmm_display(scratch.disp.full_cmd, HP3478A_DISP_TEXT_FAST);
} }
return;
}
// L2a: wire select
else if (app.data.menu.layer == SUBMENU_TEMP_WIRE) {
app.temp_wire_mode = (wire_mode_t)app.menu_pos;
enter_feature_mode(MENU_TEMP);
return;
} // L2b: NTC select
else if (app.data.menu.layer == SUBMENU_TEMP_NTC) {
app.temp_ntc_preset = (ntc_preset_t)app.menu_pos;
enter_feature_mode(MENU_TEMP);
return;
} }
} }