#ifndef _SR_BSP_ADC_H
#define _SR_BSP_ADC_H

// 合宙
#include <luat_adc.h>

#include "sr_config.h"

#define BSP_ADC_CHN0    0 
#define BSP_ADC_CHN1    SR_INVALID
#define BSP_ADC_CHN2    SR_INVALID 
#define BSP_ADC_CHN3    SR_INVALID
#define BSP_ADC_CHN4    SR_INVALID 
#define BSP_ADC_CHN5    SR_INVALID
#define BSP_ADC_CHN6    SR_INVALID 
#define BSP_ADC_CHN7    SR_INVALID
#define BSP_ADC_CHN8    SR_INVALID 
#define BSP_ADC_CHN9    SR_INVALID
#define BSP_ADC_CHN10   SR_INVALID 
#define BSP_ADC_CHN11   SR_INVALID 
#define BSP_ADC_CHN12   SR_INVALID 
#define BSP_ADC_CHN13   SR_INVALID 
#define BSP_ADC_CHN14   SR_INVALID 
#define BSP_ADC_CHN15   SR_INVALID 
#define BSP_ADC_CHN16   SR_INVALID 
#define BSP_ADC_CHN17   SR_INVALID 
#define BSP_ADC_CHN18   SR_INVALID 
#define BSP_ADC_CHN19   SR_INVALID


/**
 * @brief ADC接口索引
 *        和原厂索引保持一致
 */
typedef enum
{
  SR_ADC0 = 0,    /*!< ADC0 */
  SR_ADC1 = 1,    /*!< ADC1 */
  SR_ADC_CPU = LUAT_ADC_CH_CPU,      /*!< ADC CPU温度 */
  SR_ADC_VBAT = LUAT_ADC_CH_VBAT,    /*!< ADC VBAT电压 */
} SR_ADC_ID_E;

// 合宙模组使用
typedef enum
{
  BSP_ADC_AIO_RANGE_1_2 = LUAT_ADC_AIO_RANGE_1_2,
  BSP_ADC_AIO_RANGE_1_4,
  BSP_ADC_AIO_RANGE_1_6,
  BSP_ADC_AIO_RANGE_1_9,
  // BSP_ADC_AIO_RANGE_2_4,
  BSP_ADC_AIO_RANGE_2_6 = LUAT_ADC_AIO_RANGE_2_6,
  // BSP_ADC_AIO_RANGE_2_7,
  // BSP_ADC_AIO_RANGE_3_2,
  // BSP_ADC_AIO_RANGE_3_8,
  BSP_ADC_AIO_RANGE_4_0 = LUAT_ADC_AIO_RANGE_4_0,

  // BSP_ADC_AIO_RANGE_4_8,
  // BSP_ADC_AIO_RANGE_6_4,
  // BSP_ADC_AIO_RANGE_9_6,
  // BSP_ADC_AIO_RANGE_19_2,

  BSP_ADC_VBAT_RANGE_2_0 = LUAT_ADC_VBAT_RANGE_2_0_RATIO,
  BSP_ADC_VBAT_RANGE_2_2,
  BSP_ADC_VBAT_RANGE_2_6,
  BSP_ADC_VBAT_RANGE_3_2,
  BSP_ADC_VBAT_RANGE_4_0,
  BSP_ADC_VBAT_RANGE_5_3,
  BSP_ADC_VBAT_RANGE_8_0,
  BSP_ADC_VBAT_RANGE_16_0,
} BSP_ADC_RANGE_E;

#if 0

//lierda NT26模组使用
typedef enum
{
    BSP_ADC_AIO_RESDIV_RATIO_1        = 0U,  /*!< ADC AIO RESDIV select as VIN */
    BSP_ADC_AIO_RESDIV_RATIO_28OVER32 = 1U,  /*!< ADC AIO RESDIV select as 28/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_24OVER32 = 2U,  /*!< ADC AIO RESDIV select as 24/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_20OVER32 = 3U,  /*!< ADC AIO RESDIV select as 20/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_16OVER32 = 4U,  /*!< ADC AIO RESDIV select as 16/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_12OVER32 = 5U,  /*!< ADC AIO RESDIV select as 12/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_8OVER32  = 6U,  /*!< ADC AIO RESDIV select as 8/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_7OVER32  = 7U,  /*!< ADC AIO RESDIV select as 7/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_6OVER32  = 8U,  /*!< ADC AIO RESDIV select as 6/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_5OVER32  = 9U,  /*!< ADC AIO RESDIV select as 5/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_4OVER32  = 10U, /*!< ADC AIO RESDIV select as 4/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_3OVER32  = 11U, /*!< ADC AIO RESDIV select as 3/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_2OVER32  = 12U, /*!< ADC AIO RESDIV select as 2/32 VIN */
    BSP_ADC_AIO_RESDIV_RATIO_1OVER32  = 13U, /*!< ADC AIO RESDIV select as 1/32 VIN */
    BSP_ADC_AIO_RESDIV_BYPASS         = 14U, /*!< BYPASS the whole ADC AIO RESDIV network(direct input) */
} BSP_ADC_RESDIV_E;

#endif


/**
 * @brief ADC BSP信息结构体
 *        用于存储第三方平台ADC信息
 */
typedef struct BSP_ADC_INFO
{
  const char *name; /*!< ADC名字 */

  void *trdHandle; /*!< 第三方平台使用的句柄指针*/

  union
  {
    uint8_t extMaxRange; /*!< 第三方平台参数：最大输入检测电压 ,取值为BSP_ADC_RANGE_E*/
    uint8_t extResDiv;   /*!< 第三方平台参数：输入电压分压比例,取值为BSP_ADC_RESDIV_E */
  };

  int8_t srId; /*!< 朝阳使用的ID*/

} BSP_ADC_INFO_T;


/*BSP层要适配的接口*/
SR_DEVICE_T *BspAdcOpen(SR_ADC_ID_E adcId);
int BspAdcClose(SR_DEVICE_T *dev);
int BspAdcChnEnable(SR_DEVICE_T *dev, uint32_t chn,uint8_t isEnable);
int BspAdcRead(SR_DEVICE_T *dev, uint8_t chn, int *valRaw,int *valCvt);


#endif
