/*
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#pragma once

#include "hal/adc_types.h"
#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    adc_unit_t adc_n;        // ADC Unit
    adc_channel_t channel;   // ADC channel
    adc_atten_t atten;       // ADC channel attenuation
    adc_bitwidth_t width;    // ADC bit width, only used for ADC unit 1
    adc_ulp_mode_t ulp_mode; // ADC ULP Mode
} ulp_adc_cfg_t;      // ULP FSM ADC configuration parameters

/**
 * @brief Initialize and calibrate the ADC for use by ULP FSM
 *
 * @param cfg           Configuration parameters
 * @return esp_err_t    ESP_OK for successful.
 */
esp_err_t ulp_adc_init(const ulp_adc_cfg_t *cfg);

/**
 * @brief Deinitialize ADC after use with ULP, allowing it to be reclaimed
 *
 * @return esp_err_t    ESP_OK for successful.
*/
esp_err_t ulp_adc_deinit(void);

#ifdef __cplusplus
}
#endif