/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-05-11     LJ       the first version
 */
#ifndef APPLICATIONS_ADC_ADC_H_
#define APPLICATIONS_ADC_ADC_H_
#include <rtthread.h>
#include <rtdevice.h>


#define ADC1_CHANNEL_0 0 /* ADC 通道 */
#define ADC2_CHANNEL_4 4 /* ADC 通道 */
#define ADC3_CHANNEL_10 10 /* ADC 通道 */
#define ADC3_CHANNEL_11 11 /* ADC 通道 */

#define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数 */
#define REFER_VOLTAGE_9 900 /* 参考电压 3.3V,数据精度乘以100保留2位小数 */
#define CONVERT_BITS (1 << 12) /* 转换位数为12位 */

typedef struct
{
    rt_uint16_t ADC1_0_vol;     // 读取电压值
    rt_uint16_t ADC2_4_vol;     // 读取电压值
    rt_uint16_t ADC3_10_vol;     // 读取电压值
    rt_uint16_t ADC3_11_vol;     // 读取电压值

    rt_uint16_t ADC1_0_value;     // 读取电压值
    rt_uint16_t ADC2_4_value;     // 读取电压值
    rt_uint16_t ADC3_10_value;     // 读取电压值
    rt_uint16_t ADC3_11_value;     // 读取电压值

    rt_uint16_t ADC1_0_h_vol;     // 0-10V
    rt_uint16_t ADC2_4_h_vol;     //

    rt_uint16_t ADC1_0_Current;     // 4-20ma
    rt_uint16_t ADC2_4_Current;     //

    rt_uint8_t ADC1_0_ZL_H;     // 张力高位
    rt_uint8_t ADC2_4_ZL_H;     //
    rt_uint8_t ADC1_0_ZL_L;     // 张力低位
    rt_uint8_t ADC2_4_ZL_L;     //

    rt_uint8_t log;
    rt_uint8_t ADC1_mode; //ADC1模式  1:0-10V  2:4-20ma  3:3.3v
    rt_uint8_t ADC2_mode;//ADC2模式
} ADC_Data;              // ADC状态

//ADC初始化函数
rt_uint8_t adc_init();

//ADC读取数据
void adc_read();

rt_uint16_t get_ADC1_0_Value();
rt_uint16_t get_ADC2_4_Value();

//获取3V3的值ADC
rt_uint16_t get_ADC3_10_vol();

//获取3V3的值ADC
rt_uint16_t get_ADC3_11_vol();

/**
 * 获取0-10vADC值
 * @return
 */
rt_uint16_t get_ADC1_0_h_vol();
/**
 * 获取4-10ma电流值
 * @return
 */
rt_uint16_t get_ADC1_0_Current();
/**
 * 获取0-10vADC值
 * @return
 */
rt_uint16_t get_ADC2_4_h_vol();
/**
 * 获取4-10ma电流值
 * @return
 */
rt_uint16_t get_ADC2_4_Current();

/**
 * 获取ADC1张力值
 * @return
 */
rt_uint8_t get_ADC1_0_H_ZL();
rt_uint8_t get_ADC1_0_L_ZL();
/**
 * 获取ADC2张力值
 * @return
 */
rt_uint8_t get_ADC2_4_H_ZL();
rt_uint8_t get_ADC2_4_L_ZL();

//ADC  log 功能开启
void set_ADC_log(rt_uint8_t log);

//设置ADC1的模式0:0-10V  1:4-20ma
void set_ADC1_mode(rt_uint8_t mode);

//设置ADC2的模式1:0-10V  2:4-20ma
void set_ADC2_mode(rt_uint8_t mode);

//获取ADC1的模式1:0-10V  2:4-20ma
rt_uint8_t get_ADC1_mode();
//获取ADC2的模式1:0-10V  2:4-20ma
rt_uint8_t get_ADC2_mode();

#endif /* APPLICATIONS_ADC_ADC_H_ */
