From 41c52655194d8ed2b1ffb87d611e671153f9afab Mon Sep 17 00:00:00 2001 From: moon2 <moon2protonmail@protonmail.com> Date: Mon, 20 Nov 2023 14:08:56 +0100 Subject: [PATCH] captouch: fix false negatives from .calibration_active() --- components/flow3r_bsp/flow3r_bsp_ad7147.c | 8 +++++--- components/flow3r_bsp/flow3r_bsp_ad7147.h | 7 ++++--- components/flow3r_bsp/flow3r_bsp_captouch.c | 4 ++-- components/flow3r_bsp/flow3r_bsp_captouch.h | 2 -- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/components/flow3r_bsp/flow3r_bsp_ad7147.c b/components/flow3r_bsp/flow3r_bsp_ad7147.c index f5409a625a..31dd1e809d 100644 --- a/components/flow3r_bsp/flow3r_bsp_ad7147.c +++ b/components/flow3r_bsp/flow3r_bsp_ad7147.c @@ -158,17 +158,18 @@ static void _on_data(void *user, uint16_t *data, size_t len) { if (chip->seq_position == 0) { // Deal with calibration pending flag, possibly starting calibration. if (chip->calibration_pending) { - if (chip->calibration_cycles == 0) { + if (!chip->calibration_active) { ESP_LOGI(TAG, "%s: calibration starting...", chip->name); chip->calibration_cycles = _AD7147_CALIB_CYCLES; + chip->calibration_active = true; } chip->calibration_pending = false; } - if (chip->calibration_cycles > 0) { + if (chip->calibration_active) { // Deal with active calibration. chip->calibration_cycles--; - if (chip->calibration_cycles == 0) { + if (chip->calibration_cycles <= 0) { // Calibration measurements done. Calculate average amb data for // each channel. for (size_t i = 0; i < chip->nchannels; i++) { @@ -206,6 +207,7 @@ static void _on_data(void *user, uint16_t *data, size_t len) { chip->name, rerun); chip->calibration_cycles = _AD7147_CALIB_CYCLES; } else { + chip->calibration_active = false; ESP_LOGI(TAG, "%s: calibration done.", chip->name); } } diff --git a/components/flow3r_bsp/flow3r_bsp_ad7147.h b/components/flow3r_bsp/flow3r_bsp_ad7147.h index 5082a87d06..fa2ff2e2ee 100644 --- a/components/flow3r_bsp/flow3r_bsp_ad7147.h +++ b/components/flow3r_bsp/flow3r_bsp_ad7147.h @@ -61,8 +61,9 @@ typedef struct { ad7147_hw_t dev; bool failed; - bool calibration_pending; - size_t calibration_cycles; + volatile bool calibration_pending; + volatile bool calibration_active; + int8_t calibration_cycles; } ad7147_chip_t; // Call to initialize the chip at a given address. Structure must be zeroed, and @@ -75,4 +76,4 @@ esp_err_t flow3r_bsp_ad7147_chip_init(ad7147_chip_t *chip, // Call to poll the chip and perform any necessary actions. Can be called from // an interrupt. -esp_err_t flow3r_bsp_ad7147_chip_process(ad7147_chip_t *chip); \ No newline at end of file +esp_err_t flow3r_bsp_ad7147_chip_process(ad7147_chip_t *chip); diff --git a/components/flow3r_bsp/flow3r_bsp_captouch.c b/components/flow3r_bsp/flow3r_bsp_captouch.c index 2b84cbeb73..e5a7db385d 100644 --- a/components/flow3r_bsp/flow3r_bsp_captouch.c +++ b/components/flow3r_bsp/flow3r_bsp_captouch.c @@ -378,7 +378,7 @@ void flow3r_bsp_captouch_calibrate() { } bool flow3r_bsp_captouch_calibrating() { - bool bot = _bot.calibration_pending || _bot.calibration_cycles > 0; - bool top = _top.calibration_pending || _top.calibration_cycles > 0; + bool bot = _bot.calibration_pending || _bot.calibration_active; + bool top = _top.calibration_pending || _top.calibration_active; return bot || top; } diff --git a/components/flow3r_bsp/flow3r_bsp_captouch.h b/components/flow3r_bsp/flow3r_bsp_captouch.h index a8fd1721a0..71c12922ec 100644 --- a/components/flow3r_bsp/flow3r_bsp_captouch.h +++ b/components/flow3r_bsp/flow3r_bsp_captouch.h @@ -83,6 +83,4 @@ flow3r_bsp_captouch_petal_pad_state_t *flow3r_bsp_captouch_pad_for_petal( void flow3r_bsp_captouch_calibrate(); // Returns true if captouch is currently calibrating. -// -// TODO(q3k): this seems glitchy, investigate. bool flow3r_bsp_captouch_calibrating(); -- GitLab