From d7ae17171bd733291aca70f910a0c2618fa4fe1a Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Tue, 13 Jul 2021 20:53:08 +0200 Subject: [PATCH] aio: Update shifter_value and max_analog_value on mraa_aio_set_bit mraa_aio_set_bit() changes value_bit, so the calculations of shifter_value and max_analog_value become outdated. Move their initialization to mraa_aio_set_bit and call that function from mraa_aio_init instead. Based on original patch by Le Jin. Signed-off-by: Jan Kiszka --- src/aio/aio.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/aio/aio.c b/src/aio/aio.c index 0cc631f..753aff8 100644 --- a/src/aio/aio.c +++ b/src/aio/aio.c @@ -126,7 +126,9 @@ mraa_aio_init(unsigned int aio) syslog(LOG_ERR, "aio: Insufficient memory for specified input channel %d", aio); return NULL; } - dev->value_bit = DEFAULT_BITS; + + raw_bits = mraa_adc_raw_bits(); + mraa_aio_set_bit(dev, DEFAULT_BITS); if (IS_FUNC_DEFINED(dev, aio_init_pre)) { mraa_result_t pre_ret = (dev->advance_func->aio_init_pre(aio)); @@ -144,16 +146,6 @@ mraa_aio_init(unsigned int aio) } } - raw_bits = mraa_adc_raw_bits(); - - if (raw_bits < dev->value_bit) { - shifter_value = dev->value_bit - raw_bits; - max_analog_value = ((1 << raw_bits) - 1) << shifter_value; - } else { - shifter_value = raw_bits - dev->value_bit; - max_analog_value = ((1 << raw_bits) - 1) >> shifter_value; - } - return dev; } @@ -247,7 +239,17 @@ mraa_aio_set_bit(mraa_aio_context dev, int bits) syslog(LOG_ERR, "aio: Device not valid"); return MRAA_ERROR_INVALID_RESOURCE; } + dev->value_bit = bits; + + if (raw_bits < dev->value_bit) { + shifter_value = dev->value_bit - raw_bits; + max_analog_value = ((1 << raw_bits) - 1) << shifter_value; + } else { + shifter_value = raw_bits - dev->value_bit; + max_analog_value = ((1 << raw_bits) - 1) >> shifter_value; + } + return MRAA_SUCCESS; }