#ifndef __FML_ADC_H__
#define __FML_ADC_H__

#ifdef __cplusplus
extern "C" {
#endif

//唤醒触发一次采样，3毫秒后触发一次采样，1秒后触发一次采样，3毫秒触发一次采样，1秒后触发一次采样

/*Includes ------------------------------------------------------*/
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include "sdk_common.h"
#include "nrf_gpio.h"
#include "SEGGER_RTT.h"
#include "usr_config.h"

/*Private macro ------------------------------------------------------------------------------------------------------------------------------------*/
#define		FML_ADC_SAMPLE_POINT_0											0												//触发采样点0，单位ms，表明刚唤醒就采集

#define		FML_ADC_SAMPLE_POINT_1											3												//触发采样点1，单位ms

#define		FML_ADC_SAMPLE_POINT_2											100											//触发采样点2，单位ms


/*STRUCTION ----------------------------------------------------*/
typedef struct _fml_adc_all_channel_adc_value
{
	int16_t  channel_0_adc_value; 
	int16_t  channel_1_adc_value; 
	int16_t  channel_2_adc_value; 
	int16_t  channel_3_adc_value; 
	int16_t  channel_4_adc_value; 
	int16_t  channel_5_adc_value; 
	int16_t  channel_6_adc_value; 
	int16_t  channel_7_adc_value; 
} Fml_Adc_All_Channel_Adc_Value_t;

//sample_point：采集时间点
//all_adc_value：所有通道的值
//尽量不要在回调里执行耗时很长的操作，最好就是只有设置通道的操作
typedef void (*fml_adc_sample_update_notify_callback)(uint32_t sample_point, Fml_Adc_All_Channel_Adc_Value_t all_adc_value);

/*API -------------------------------------------------------*/
/**
	@brief 		初始化adc功能模块
	@param 		无
	@return 	错误代码					- [out]	-1失败，0成功
*/
int	fml_adc_Init(void);

/**
	@brief 		adc采样更新通知回调注册
	@param 		cb								-	[in]	回调函数注册
	@return 	错误代码					- [out]	-1失败，0成功
*/
int	fml_adc_sample_update_notify_register(fml_adc_sample_update_notify_callback cb);

/**
	@brief 		adc读值
	@param 		channel						-	[in]	需要读取的通道
	@param 		value							-	[out]	返回通道的值
	@return 	错误代码					- [out]	-1失败，0成功
*/
int	fml_adc_get_value(uint32_t channel,int16_t *value);

/**
	@brief 		设置ADC通道
	@param 		pin								-	[in]	需要设置的引脚
	@param 		channel						-	[in]	需要设置的通道
	@param 		pin_pull					-	[in]	需要设置的通道上下拉
	@return 	错误代码					- [out]	-1失败，0成功
*/
int	fml_adc_set_pin_channel(uint32_t pin, uint32_t channel, nrf_gpio_pin_pull_t pin_pull);

/**
	@brief 		移除ADC通道
	@param 		pin								-	[in]	需要移除的引脚
	@param 		channel						-	[in]	需要移除的通道
	@return 	错误代码					- [out]	-1失败，0成功
*/
int	fml_adc_remove_pin_channel(uint32_t pin, uint32_t channel);

#ifdef __cplusplus
}
#endif

#endif



















