1 /*
2  * Copyright (C) 2021 Alibaba Group Holding Limited
3  */
4 
5 #ifndef _AOS_ADC_CORE_H
6 #define _AOS_ADC_CORE_H
7 
8 #include <stdint.h>
9 #include <aos/kernel.h>
10 #include <aos/device_core.h>
11 #include <aos/adc.h>
12 
13 /** @defgroup driver_api driver
14  *  @ingroup aos_components
15  * @{
16  */
17 
18 /** @} */
19 
20 /**
21  * @defgroup aos_adc_driver ADC驱动操作
22  * @ingroup driver_api
23  * 给ADC驱动提供ADC设备注册/注销操作.
24  *
25  * @{
26  */
27 
28 struct aos_adc_ops;
29 
30 typedef struct aos_adc {
31     aos_dev_t dev;
32 
33     const struct aos_adc_ops *ops; /**< ADC设备的底层操作, 设备注册前必须赋值 */
34     uint32_t resolution; /**< ADC设备分辨率(单位:bits), 设备注册前必须赋值 */
35     uint32_t freq; /**< ADC设备时钟频率(单位:HZ), 设备注册前必须赋值 */
36     void *priv; /**< 私有数据 */
37 } aos_adc_t;
38 
39 typedef struct aos_adc_ops {
40     /**< ADC设备的注销操作(可选) */
41     void (*unregister)(aos_adc_t *adc);
42     /**< ADC设备的开始采样 */
43     aos_status_t (*startup)(aos_adc_t *adc);
44     /**< ADC设备的停止采样 */
45     void (*shutdown)(aos_adc_t *adc);
46     /**< 读取ADC设备的原始数据 */
47     aos_status_t (*read)(aos_adc_t *adc, int32_t channel, int32_t *data);
48     /**< 读取ADC设备的转换后的电压值(单位: mV)*/
49     aos_status_t (*read_voltage)(aos_adc_t *adc, int32_t channel, int32_t *data);
50     /**< 设置ADC设备的通道(开启与关闭)(可选)*/
51     aos_status_t (*set_channel)(aos_adc_t *adc, int32_t channel, bool enable);
52     /**< 设置ADC设备的采样时间(单位: 时钟周期的倍数)(可选)*/
53     aos_status_t (*set_sample_time)(aos_adc_t *adc, int32_t channel, uint32_t clock);
54     /**< 设置ADC设备的工作模式(可选)*/
55     aos_status_t (*set_mode)(aos_adc_t *adc, aos_adc_mode_t clock);
56     /**< 获取ADC设备的电压量程 */
57     aos_status_t (*get_range)(aos_adc_t *adc, int32_t channel, int32_t *range);
58 } aos_adc_ops_t;
59 
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63 
64 /**
65  * 注册一个ADC设备
66  *
67  * @param[in]   adc      要注册的ADC设备,调用者应该分配内存并初始化设置它的ID
68  *
69  * @return      0: 成功; <0: 失败
70  */
71 aos_status_t aos_adc_register(aos_adc_t *adc);
72 
73 /**
74  * 注销一个ADC设备
75  *
76  * @param[in]   id      ADC设备的ID
77  *
78  * @return      0: 成功; <0: 失败
79  */
80 aos_status_t aos_adc_unregister(uint32_t id);
81 
82 /** @} */
83 #ifdef __cplusplus
84 }
85 #endif
86 
87 #endif /* _AOS_ADC_CORE_H */
88