@@ -381,15 +381,19 @@ m5::hal::error::error_t AdapterGPIOBase::GPIOImpl::ensure_adc_handle(const gpio_
381381
382382 adc_unit_t unit = (needed_unit == 0 ) ? ADC_UNIT_1 : ADC_UNIT_2 ;
383383 adc_oneshot_unit_handle_t handle{};
384+ adc_oneshot_unit_init_cfg_t init_config{};
385+ init_config.unit_id = unit;
386+ // clk_src member was added in ESP-IDF v5.1.0; v5.0.x has no such field
387+ #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 0)
384388#if SOC_ADC_RTC_CTRL_SUPPORTED
385389#pragma message "ADC oneshot clk_src: RTC (ADC_RTC_CLK_SRC_DEFAULT)"
386- adc_oneshot_unit_init_cfg_t init_config = {
387- .unit_id = unit, .clk_src = ADC_RTC_CLK_SRC_DEFAULT , .ulp_mode = ADC_ULP_MODE_DISABLE };
390+ init_config.clk_src = ADC_RTC_CLK_SRC_DEFAULT ;
388391#else
389392#pragma message "ADC oneshot clk_src: DIGI (ADC_DIGI_CLK_SRC_DEFAULT)"
390- adc_oneshot_unit_init_cfg_t init_config = {
391- .unit_id = unit, .clk_src = ADC_DIGI_CLK_SRC_DEFAULT , .ulp_mode = ADC_ULP_MODE_DISABLE };
393+ init_config.clk_src = ADC_DIGI_CLK_SRC_DEFAULT ;
392394#endif
395+ #endif
396+ init_config.ulp_mode = ADC_ULP_MODE_DISABLE ;
393397
394398 if (adc_oneshot_new_unit (&init_config, &handle) != ESP_OK ) {
395399 return m5::hal::error::error_t ::UNKNOWN_ERROR ;
@@ -619,18 +623,20 @@ m5::hal::error::error_t AdapterGPIOBase::GPIOImpl::read_analog_millivolts(uint32
619623 bool cali_ok{};
620624
621625#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
622- adc_cali_curve_fitting_config_t cali_config = {
623- .unit_id = unit,
624- .chan = channel,
625- .atten = M5_ADC_ATTEN_DB ,
626- .bitwidth = ADC_BITWIDTH_DEFAULT ,
627- };
628- cali_ok = (adc_cali_create_scheme_curve_fitting (&cali_config, &cali_handle) == ESP_OK );
626+ adc_cali_curve_fitting_config_t cali_config{};
627+ cali_config.unit_id = unit;
628+ // chan member was added in ESP-IDF v5.1.0; v5.0.x has no such field
629+ #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 0)
630+ cali_config.chan = channel;
631+ #endif
632+ cali_config.atten = M5_ADC_ATTEN_DB ;
633+ cali_config.bitwidth = ADC_BITWIDTH_DEFAULT ;
634+ cali_ok = (adc_cali_create_scheme_curve_fitting (&cali_config, &cali_handle) == ESP_OK );
629635#elif ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
630636 adc_cali_line_fitting_config_t cali_config = {
631- .unit_id = unit,
632- .atten = M5_ADC_ATTEN_DB ,
633- .bitwidth = ADC_BITWIDTH_DEFAULT ,
637+ .unit_id = unit,
638+ .atten = M5_ADC_ATTEN_DB ,
639+ .bitwidth = ADC_BITWIDTH_DEFAULT ,
634640#if CONFIG_IDF_TARGET_ESP32
635641 .default_vref = 1100 , // Fallback Vref (mV); used only when eFuse has no calibration
636642#endif
0 commit comments