diff --git a/components/esp_adc_cal/esp_adc_cal_esp32c3.c b/components/esp_adc_cal/esp_adc_cal_esp32c3.c index 28f23bdee7..f7e4495e03 100644 --- a/components/esp_adc_cal/esp_adc_cal_esp32c3.c +++ b/components/esp_adc_cal/esp_adc_cal_esp32c3.c @@ -55,33 +55,36 @@ typedef struct { } efuse_data; } adc_calib_parsed_info; -static bool prepare_calib_data_for(int version_num, adc_unit_t adc_num, adc_atten_t atten, adc_calib_parsed_info *parsed_data_storage) +static esp_err_t prepare_calib_data_for(int version_num, adc_unit_t adc_num, adc_atten_t atten, adc_calib_parsed_info *parsed_data_storage) { assert(version_num == 1); + esp_err_t ret; + parsed_data_storage->version_num = version_num; parsed_data_storage->adc_num = adc_num; parsed_data_storage->atten_level = atten; // V1 we don't have calibration data for ADC2, using the efuse data of ADC1 uint32_t voltage, digi; - esp_err_t ret = esp_efuse_rtc_calib_get_cal_voltage(version_num, atten, &digi, &voltage); - assert(ret == ESP_OK); + ret = esp_efuse_rtc_calib_get_cal_voltage(version_num, atten, &digi, &voltage); + if (ret != ESP_OK) { + return ret; + } parsed_data_storage->efuse_data.ver1.voltage = voltage; parsed_data_storage->efuse_data.ver1.digi = digi; - return true; + return ret; } /* ----------------------- Characterization Functions ----------------------- */ /* * Estimate the (assumed) linear relationship btwn the measured raw value and the voltage * with the previously done measurement when the chip was manufactured. - * */ -static bool calculate_characterization_coefficients(const adc_calib_parsed_info *parsed_data, esp_adc_cal_characteristics_t *chars) + */ +static void calculate_characterization_coefficients(const adc_calib_parsed_info *parsed_data, esp_adc_cal_characteristics_t *chars) { ESP_LOGD(LOG_TAG, "Calib V1, Cal Voltage = %d, Digi out = %d\n", parsed_data->efuse_data.ver1.voltage, parsed_data->efuse_data.ver1.digi); chars->coeff_a = coeff_a_scaling * parsed_data->efuse_data.ver1.voltage / parsed_data->efuse_data.ver1.digi; chars->coeff_b = 0; - return true; } /* ------------------------- Public API ------------------------------------- */ @@ -104,12 +107,13 @@ esp_adc_cal_value_t esp_adc_cal_characterize(adc_unit_t adc_num, uint32_t default_vref, esp_adc_cal_characteristics_t *chars) { - bool res; + esp_err_t ret; adc_calib_parsed_info efuse_parsed_data = {0}; // Check parameters ADC_CALIB_CHECK(adc_num == ADC_UNIT_1 || adc_num == ADC_UNIT_2, "Invalid unit num", ESP_ADC_CAL_VAL_NOT_SUPPORTED); ADC_CALIB_CHECK(chars != NULL, "Invalid characteristic", ESP_ADC_CAL_VAL_NOT_SUPPORTED); ADC_CALIB_CHECK(bit_width == ADC_WIDTH_BIT_12, "Invalid bit_width", ESP_ADC_CAL_VAL_NOT_SUPPORTED); + ADC_CALIB_CHECK(atten < 4, "Invalid attenuation", ESP_ADC_CAL_VAL_NOT_SUPPORTED); int version_num = esp_efuse_rtc_calib_get_ver(); ADC_CALIB_CHECK(version_num == 1, "No calibration efuse burnt", ESP_ADC_CAL_VAL_NOT_SUPPORTED); @@ -117,10 +121,12 @@ esp_adc_cal_value_t esp_adc_cal_characterize(adc_unit_t adc_num, memset(chars, 0, sizeof(esp_adc_cal_characteristics_t)); // make sure adc is calibrated. - res = prepare_calib_data_for(version_num, adc_num, atten, &efuse_parsed_data); - assert(res); - res = calculate_characterization_coefficients(&efuse_parsed_data, chars); - assert(res); + ret = prepare_calib_data_for(version_num, adc_num, atten, &efuse_parsed_data); + if (ret != ESP_OK) { + abort(); + } + + calculate_characterization_coefficients(&efuse_parsed_data, chars); ESP_LOGD(LOG_TAG, "adc%d (atten leven %d) calibration done: A:%d B:%d\n", adc_num, atten, chars->coeff_a, chars->coeff_b); // Initialize remaining fields