feat: add ++dmm_loop cmd
++dmm_loop <0|1> to disable the HP3478A DMM loop, if for some reason the DMM app loop is interfering with the GPIB bus when used as a USB-GPIB controller
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
#define MENU_COMMIT_DELAY_MS 2400 // Time to hold before entering mode
|
||||
#define MENU_SUBLAYER_DELAY_MS 500 // Time to "hover" before dots start
|
||||
#define MENU_DEBOUNCE_MS 100 // Button press dead-time
|
||||
#define MENU_LOCKOUT_MS 1000 // How long to ignore SRQ for after exiting menu
|
||||
#define MENU_LOCKOUT_MS 200 // How long to ignore SRQ for after exiting menu
|
||||
|
||||
// Polling
|
||||
#define POLL_INTERVAL_MS 100 // 10Hz polling when in Passthrough
|
||||
@@ -76,6 +76,7 @@
|
||||
#define BUZZER_CHIRP_HZ 3000
|
||||
#define BUZZER_CHIRP_MS 75
|
||||
#define BUZZER_CONT_HZ 2500
|
||||
#define BUZZER_ONLINE_TUNE 0 // todo: add to conf
|
||||
|
||||
// #define LOCAL_COMMIT 1
|
||||
|
||||
|
||||
50
main.c
50
main.c
@@ -60,11 +60,12 @@ typedef enum {
|
||||
CMD_CFG_SET,
|
||||
CMD_CFG_GET,
|
||||
CMD_CFG_LIST,
|
||||
CMD_SAVECFG, // Save configuration
|
||||
CMD_RST, // Reset the controller
|
||||
CMD_ADDR, // Set GPIB primary address
|
||||
CMD_MODE, // Set Controller vs Device mode (we're always the controller)
|
||||
CMD_TIMEOUT, // Set read timeouts
|
||||
CMD_SAVECFG, // Save configuration
|
||||
CMD_RST, // Reset the controller
|
||||
CMD_ADDR, // Set GPIB primary address
|
||||
CMD_MODE, // Set Controller vs Device mode (we're always the controller)
|
||||
CMD_TIMEOUT, // Set read timeouts
|
||||
CMD_DMM_LOOP, // Toggle extra HP3478A features
|
||||
|
||||
// Data transport/formatting
|
||||
CMD_READ, // Read data from bus
|
||||
@@ -273,7 +274,8 @@ typedef struct {
|
||||
uint8_t dmm_online : 1;
|
||||
uint8_t has_saved_state : 1;
|
||||
uint8_t tone_timer_pending : 1;
|
||||
uint8_t reserved : 2;
|
||||
uint8_t dmm_loop : 1;
|
||||
uint8_t reserved : 1;
|
||||
|
||||
uint32_t usb_timeout_cycles; // calculated from sys_cfg.usb_timeout_target_ms
|
||||
|
||||
@@ -346,6 +348,7 @@ static const cmd_entry_t COMMAND_TABLE[] = {
|
||||
{"mode", CMD_MODE}, // 0=Device, 1=Controller
|
||||
{"tmo", CMD_TIMEOUT}, // Set read timeout
|
||||
{"read_tmo_ms", CMD_TIMEOUT},
|
||||
{"dmm_loop", CMD_DMM_LOOP}, // Toggle extra feats
|
||||
|
||||
// Protocol/formatting
|
||||
{"auto", CMD_AUTO}, // Auto-read data after write
|
||||
@@ -608,6 +611,8 @@ inline static void config_apply_to_app(void) {
|
||||
app.usb_timeout_cycles =
|
||||
((FUNCONF_SYSTEM_CORE_CLOCK / 1000 * sys_cfg.usb_timeout_target_ms) /
|
||||
CYCLES_PER_LOOP);
|
||||
app.dmm_loop = 1; // again, preferably read from config if someone wants this
|
||||
// to be persistent
|
||||
}
|
||||
|
||||
static void config_reset_defaults(void) {
|
||||
@@ -1929,10 +1934,9 @@ static void handle_env_sensor(void) {
|
||||
|
||||
uint32_t now = millis();
|
||||
|
||||
if ((now - app.env_last_read) >= sys_cfg.env_sensor_read_interval_ms) {
|
||||
if (aht20_read(&app.current_env) == AHT20_OK) {
|
||||
app.env_last_read = now;
|
||||
}
|
||||
if (((now - app.env_last_read) >= sys_cfg.env_sensor_read_interval_ms) &&
|
||||
aht20_read(&app.current_env) == AHT20_OK) {
|
||||
app.env_last_read = now;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2765,6 +2769,7 @@ static void cmd_help(void) {
|
||||
" ++eor <0-7> Read Stop: 0:CRLF ... 7:EOI-Only\r\n"
|
||||
" ++eot_enable <B> Append extra char to read output\r\n"
|
||||
" ++eot_char <dec> The char to append\r\n"
|
||||
" ++dmm_loop <0|1> Toggle HP3478A loop, if it conflicts w/ GPIB bus\r\n"
|
||||
"\r\n"
|
||||
"[System Configuration]\r\n"
|
||||
" ++config List all configurable parameters\r\n"
|
||||
@@ -2808,10 +2813,12 @@ static void cmd_status(void) {
|
||||
"EOR : %d\r\n"
|
||||
"EOI : %d\r\n"
|
||||
"EOT : %s (%d)\r\n"
|
||||
"SRQ : %d\r\n",
|
||||
"SRQ : %d\r\n"
|
||||
"DMM_LOOP : %d\r\n",
|
||||
sys_cfg.target_addr, sys_cfg.gpib_timeout_ms, sys_cfg.auto_read,
|
||||
sys_cfg.eos_mode, sys_cfg.eor_mode, sys_cfg.eoi_assert,
|
||||
sys_cfg.eot_enable ? "ON" : "OFF", sys_cfg.eot_char, srq);
|
||||
sys_cfg.eot_enable ? "ON" : "OFF", sys_cfg.eot_char, srq,
|
||||
app.dmm_loop);
|
||||
|
||||
usb_send_text(scratch.cmd.fmt_buf);
|
||||
}
|
||||
@@ -2948,6 +2955,16 @@ static void process_command(void) {
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_DMM_LOOP:
|
||||
if (*p_args) {
|
||||
app.dmm_loop = (atoi(p_args) ? true : false);
|
||||
exit_to_passthrough();
|
||||
gpib_interface_clear();
|
||||
} else {
|
||||
usb_send_text(app.dmm_loop ? "1\r\n" : "0\r\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_SAVECFG:
|
||||
config_save();
|
||||
break;
|
||||
@@ -3277,7 +3294,7 @@ do_read_operation: {
|
||||
}
|
||||
}
|
||||
|
||||
static void app_loop(void) {
|
||||
static void dmm_loop(void) {
|
||||
uint32_t now = millis();
|
||||
|
||||
if (app.tone_timer_pending) {
|
||||
@@ -3322,8 +3339,9 @@ static void app_loop(void) {
|
||||
gpib_interface_clear();
|
||||
|
||||
app.dmm_online = true;
|
||||
#if defined(BUZZER_ONLINE_TUNE) && BUZZER_ONLINE_TUNE
|
||||
play_tune(ONLINE_NOTES);
|
||||
|
||||
#endif
|
||||
gpib_send(sys_cfg.dmm_addr,
|
||||
HP3478A_CMD_MASK_BTN_ONLY HP3478A_CMD_SRQ_CLEAR);
|
||||
gpib_go_to_local(sys_cfg.dmm_addr);
|
||||
@@ -3408,7 +3426,9 @@ int main() {
|
||||
while (1) {
|
||||
handle_usb_state();
|
||||
usb_process_tx();
|
||||
app_loop();
|
||||
if (app.dmm_loop) {
|
||||
dmm_loop();
|
||||
}
|
||||
handle_env_sensor();
|
||||
|
||||
if (app.usb_online) {
|
||||
|
||||
Reference in New Issue
Block a user