diff --git a/components/flow3r_bsp/flow3r_bsp_ad7147.c b/components/flow3r_bsp/flow3r_bsp_ad7147.c index f5409a625a9a1d13c54fc39911848790d15e36e0..31dd1e809d2b6d9f55f3d2fd3fd91678a6caa640 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 5082a87d066d51f87bb3a2541958c5330ed79b96..fa2ff2e2ee772036fe90aa626188cea165155ab7 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 2b84cbeb7331199d3cfb216c645e425c7fb1c882..e5a7db385dd08a78c3d6e79ea9f182d7f9d5d8e4 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 a8fd1721a089b6124adf3a0dd3bea0a75ddc4fcc..71c12922ec989f38798e2fd342d473dd63b9d9c8 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();