31 float Read()
override;
33 uint8_t ChannelNumber()
const {
return channel_num_; }
41 enum class ContinuousInitResult : uint8_t
49 adc_unit_t unit,
const adc_channel_t* channels, uint8_t num_channels,
50 uint32_t freq = SOC_ADC_SAMPLE_FREQ_THRES_LOW,
51 adc_atten_t attenuation = ADC_ATTEN_DB_12,
52 adc_bitwidth_t bitwidth =
static_cast<adc_bitwidth_t
>(SOC_ADC_DIGI_MAX_BITWIDTH),
53 float reference_voltage = 3.3f,
size_t dma_buf_size = 256);
55 Channel& GetChannel(uint8_t idx);
57 float ReadChannel(uint8_t idx);
60 enum class Backend : uint8_t
67 static adc_bitwidth_t ResolveBitwidth(adc_bitwidth_t bitwidth);
68 float Normalize(
float raw)
const;
69 static uint32_t ClampSampleFreq(uint32_t freq);
70 static uint32_t AlignUp(uint32_t value, uint32_t align);
71 bool IsValidChannel(adc_channel_t channel)
const;
72 void ConfigureAnalogPad(adc_channel_t channel)
const;
73 bool InitCalibration();
75 float RawToVoltage(uint8_t idx, uint16_t raw)
const;
77#if SOC_ADC_DIG_CTRL_SUPPORTED && SOC_ADC_DMA_SUPPORTED
78 static bool IsDigiUnitSupported(adc_unit_t unit);
79 static adc_digi_output_format_t ResolveContinuousFormat();
80 void DrainContinuousFrames(uint32_t timeout_ms);
81 ContinuousInitResult InitContinuous(uint32_t freq,
size_t dma_buf_size);
84 Channel* channels_ =
nullptr;
85 adc_channel_t* channel_ids_ =
nullptr;
86 uint8_t channel_idx_map_[SOC_ADC_MAX_CHANNEL_NUM] = {};
87 bool* channel_ready_ =
nullptr;
88 float* latest_values_ =
nullptr;
89 uint16_t* latest_raw_ =
nullptr;
91 adc_cali_handle_t cali_handles_[SOC_ADC_MAX_CHANNEL_NUM] = {};
94 uint8_t num_channels_;
95 adc_atten_t attenuation_;
96 adc_bitwidth_t bitwidth_;
97 float reference_voltage_;
99 static constexpr uint8_t INVALID_CHANNEL_IDX = 0xFFU;
101 Backend backend_ = Backend::NONE;
102 adc_oneshot_hal_ctx_t* oneshot_hal_ =
nullptr;
103 bool oneshot_inited_ =
false;
106#if SOC_ADC_DIG_CTRL_SUPPORTED && SOC_ADC_DMA_SUPPORTED
107 adc_continuous_handle_t continuous_handle_ =
nullptr;
108 uint8_t* continuous_read_buf_ =
nullptr;
109 adc_continuous_data_t* continuous_parsed_buf_ =
nullptr;
110 uint32_t continuous_frame_size_ = 0U;
111 uint32_t continuous_prime_timeout_ms_ = 0U;