diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-10-11 22:16:02 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-10-12 11:59:27 -0400 |
commit | d03cf2b83f9df6b802af72860d8d3b56df89956f (patch) | |
tree | b9f61292f67fcf0548eaa8f5b3a7c491290689fd /src | |
parent | 744c6d114e3681a2e8cfcd4475424a7d19774d52 (diff) | |
download | kutter-d03cf2b83f9df6b802af72860d8d3b56df89956f.tar.gz kutter-d03cf2b83f9df6b802af72860d8d3b56df89956f.tar.xz kutter-d03cf2b83f9df6b802af72860d8d3b56df89956f.zip |
adccmds: Continue to query analog inputs after a shutdown
Continue to sample the ADC input pins even if the MCU goes into a
shutdown state. This enables the printer to continue reporting
temperatures even on an mcu error.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/adccmds.c | 8 | ||||
-rw-r--r-- | src/linux/analog.c | 3 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/adccmds.c b/src/adccmds.c index d95ad282..41247a54 100644 --- a/src/adccmds.c +++ b/src/adccmds.c @@ -43,7 +43,7 @@ analog_in_event(struct timer *timer) return SF_RESCHEDULE; } if (a->value < a->min_value || a->value > a->max_value) - shutdown("ADC out of range"); + try_shutdown("ADC out of range"); sched_wake_task(&analog_wake); a->next_begin_time += a->rest_time; a->timer.waketime = a->next_begin_time; @@ -115,6 +115,12 @@ analog_in_shutdown(void) struct analog_in *a; foreach_oid(i, a, command_config_analog_in) { gpio_adc_cancel_sample(a->pin); + if (a->sample_count) { + a->state = a->sample_count + 1; + a->next_begin_time += a->rest_time; + a->timer.waketime = a->next_begin_time; + sched_add_timer(&a->timer); + } } } DECL_SHUTDOWN(analog_in_shutdown); diff --git a/src/linux/analog.c b/src/linux/analog.c index 88adc9dd..c909e286 100644 --- a/src/linux/analog.c +++ b/src/linux/analog.c @@ -49,7 +49,8 @@ gpio_adc_read(struct gpio_adc g) int ret = pread(g.fd, buf, sizeof(buf)-1, 0); if (ret <= 0) { report_errno("analog read", ret); - shutdown("Error on analog read"); + try_shutdown("Error on analog read"); + return 0; } buf[ret] = '\0'; return atoi(buf); |