From 9e962ee3f4529ee2e51484b242483b4d9c86b39e Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Sat, 14 Feb 2026 13:35:13 -0500 Subject: [PATCH] adccmds: Add support for homing/probing triggering with regular mcu adc pins Add support for trigger_analog to adccmds.c . Signed-off-by: Kevin O'Connor --- src/Kconfig | 6 +++--- src/adccmds.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Kconfig b/src/Kconfig index ae2d65d51..a30b1789c 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -183,7 +183,7 @@ config NEED_SENSOR_BULK default y config WANT_TRIGGER_ANALOG bool - depends on WANT_HX71X || WANT_ADS1220 || WANT_LDC1612 + depends on WANT_ADC || WANT_HX71X || WANT_ADS1220 || WANT_LDC1612 default y config NEED_SOS_FILTER bool @@ -264,10 +264,10 @@ config WANT_SENSOR_ANGLE bool "Support angle sensors" depends on WANT_SPI comment "Other features" - depends on WANT_HX71X || WANT_ADS1220 || WANT_LDC1612 + depends on WANT_ADC || WANT_HX71X || WANT_ADS1220 || WANT_LDC1612 config WANT_TRIGGER_ANALOG bool "Support for homing/probing events using analog sensors" - depends on WANT_HX71X || WANT_ADS1220 || WANT_LDC1612 + depends on WANT_ADC || WANT_HX71X || WANT_ADS1220 || WANT_LDC1612 endmenu # Generic configuration options for CANbus diff --git a/src/adccmds.c b/src/adccmds.c index 4283de9f3..97af92681 100644 --- a/src/adccmds.c +++ b/src/adccmds.c @@ -9,6 +9,7 @@ #include "board/irq.h" // irq_disable #include "command.h" // DECL_COMMAND #include "sched.h" // DECL_TASK +#include "trigger_analog.h" // trigger_analog_update struct analog_in { struct timer timer; @@ -19,6 +20,7 @@ struct analog_in { uint8_t state, sample_count; uint8_t bytes_per_report, data_count; uint8_t data[48]; + struct trigger_analog *ta; }; static struct task_wake analog_wake; @@ -100,6 +102,16 @@ DECL_COMMAND(command_query_analog_in, " rest_ticks=%u bytes_per_report=%c" " min_value=%hu max_value=%hu range_check_count=%c"); +void +command_analog_in_attach_trigger_analog(uint32_t *args) { + struct analog_in *a = oid_lookup(args[0], command_config_analog_in); + a->ta = trigger_analog_oid_lookup(args[1]); +} +#if CONFIG_WANT_TRIGGER_ANALOG +DECL_COMMAND(command_analog_in_attach_trigger_analog, + "analog_in_attach_trigger_analog oid=%c trigger_analog_oid=%c"); +#endif + #define BYTES_PER_SAMPLE 2 void @@ -121,6 +133,7 @@ analog_in_task(void) uint32_t next_begin_time = a->next_begin_time; a->state++; irq_enable(); + trigger_analog_update(a->ta, value); uint8_t *d = &a->data[a->data_count]; d[0] = value; d[1] = value >> 8; @@ -141,6 +154,7 @@ analog_in_shutdown(void) struct analog_in *a; foreach_oid(i, a, command_config_analog_in) { gpio_adc_cancel_sample(a->pin); + a->ta = NULL; if (a->sample_count) { a->state = a->sample_count + 1; a->next_begin_time += a->rest_time;