VSF Documented
adc_template.inc
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#if VSF_HAL_USE_ADC == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#define vsf_real_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_t)
24#define vsf_real_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_capability)
25#define vsf_real_adc_get_configuration VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_get_configuration)
26
27#ifndef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
28# define VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
29#endif
30
31#ifndef VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
32# define VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
33#endif
34
35#ifdef VSF_ADC_CFG_IMP_REMAP_PREFIX
36# undef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
37# define VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
38# undef VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
39# define VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
40#endif
41
42#if VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
43# ifndef VSF_ADC_CFG_CAPABILITY_IRQ_MASK
44# define VSF_ADC_CFG_CAPABILITY_IRQ_MASK VSF_ADC_IRQ_ALL_BITS_MASK
45# endif
46# ifndef VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS
47# define VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS 12
48# endif
49# ifndef VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT
50# define VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT 4
51# endif
52#endif
53
54/*============================ LOCAL VARIABLES ===============================*/
55/*============================ IMPLEMENTATION ================================*/
56
57#if VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
58vsf_adc_capability_t vsf_real_adc_capability(vsf_real_adc_t *adc_ptr)
59{
60 vsf_adc_capability_t adc_capability = {
61 .irq_mask = VSF_ADC_CFG_CAPABILITY_IRQ_MASK,
62 .max_data_bits = VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS,
63 .channel_count = VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT,
64 };
65
66 return adc_capability;
67}
68#endif
69
70#if VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
71vsf_err_t vsf_real_adc_get_configuration(vsf_real_adc_t *adc_ptr, vsf_adc_cfg_t *cfg_ptr)
72{
73 VSF_HAL_ASSERT(NULL != adc_ptr);
74 VSF_HAL_ASSERT(NULL != cfg_ptr);
75
76 // Default implementation: not supported, trigger assertion
78
80}
81#endif
82
83/*============================ MACROS ========================================*/
84
85#undef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
86#undef VSF_ADC_CFG_REIMPLEMENT_API_GET_CONFIGURATION
87#undef VSF_ADC_CFG_CAPABILITY_IRQ_MASK
88#undef VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS
89#undef VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT
90
91#undef vsf_real_adc_t
92#undef vsf_real_adc_capability
93#undef vsf_real_adc_get_configuration
94
95/*============================ LOCAL VARIABLES ===============================*/
96/*============================ IMPLEMENTATION ================================*/
97/*============================ MACROS ========================================*/
98
99#ifdef VSF_ADC_CFG_IMP_REMAP_PREFIX
100# define vsf_imp_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_t)
101# define vsf_imp_adc_init VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_init)
102# define vsf_imp_adc_fini VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_fini)
103# define vsf_imp_adc_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_enable)
104# define vsf_imp_adc_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_disable)
105# define vsf_imp_adc_status VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_status)
106# define vsf_imp_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_capability)
107# define vsf_imp_adc_irq_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_irq_enable)
108# define vsf_imp_adc_irq_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_irq_disable)
109# define vsf_imp_adc_channel_request_once VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_request_once)
110# define vsf_imp_adc_channel_config VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_config)
111# define vsf_imp_adc_channel_request VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_request)
112# define vsf_imp_adc_get_configuration VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_get_configuration)
113
114# define vsf_remap_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_t)
115# define vsf_remap_adc_init VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_init)
116# define vsf_remap_adc_fini VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_fini)
117# define vsf_remap_adc_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_enable)
118# define vsf_remap_adc_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_disable)
119# define vsf_remap_adc_status VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_status)
120# define vsf_remap_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_capability)
121# define vsf_remap_adc_irq_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_irq_enable)
122# define vsf_remap_adc_irq_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_irq_disable)
123# define vsf_remap_adc_channel_request_once VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_request_once)
124# define vsf_remap_adc_channel_config VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_config)
125# define vsf_remap_adc_channel_request VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_request)
126# define vsf_remap_adc_get_configuration VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_get_configuration)
127
128# define VSF_ADC_CFG_IMP_REMAP_FUNCTIONS \
129 vsf_err_t vsf_imp_adc_init(vsf_imp_adc_t *adc, vsf_adc_cfg_t *cfg) \
130 { \
131 VSF_HAL_ASSERT(adc != NULL); \
132 return vsf_remap_adc_init((vsf_remap_adc_t *)adc, cfg); \
133 } \
134 \
135 void vsf_imp_adc_fini(vsf_imp_adc_t *adc) \
136 { \
137 VSF_HAL_ASSERT(adc != NULL); \
138 vsf_remap_adc_fini((vsf_remap_adc_t *)adc); \
139 } \
140 \
141 vsf_adc_status_t vsf_imp_adc_status(vsf_imp_adc_t *adc) \
142 { \
143 VSF_HAL_ASSERT(adc != NULL); \
144 return vsf_remap_adc_status((vsf_remap_adc_t *)adc); \
145 } \
146 \
147 vsf_adc_capability_t vsf_imp_adc_capability(vsf_imp_adc_t *adc) \
148 { \
149 VSF_HAL_ASSERT(adc != NULL); \
150 return vsf_remap_adc_capability((vsf_remap_adc_t *)adc); \
151 } \
152 \
153 fsm_rt_t vsf_imp_adc_enable(vsf_imp_adc_t *adc) \
154 { \
155 VSF_HAL_ASSERT(adc != NULL); \
156 return vsf_remap_adc_enable((vsf_remap_adc_t *)adc); \
157 } \
158 \
159 fsm_rt_t vsf_imp_adc_disable(vsf_imp_adc_t *adc) \
160 { \
161 VSF_HAL_ASSERT(adc != NULL); \
162 return vsf_remap_adc_disable((vsf_remap_adc_t *)adc); \
163 } \
164 \
165 void vsf_imp_adc_irq_enable(vsf_imp_adc_t *adc, vsf_adc_irq_mask_t irq_mask) \
166 { \
167 VSF_HAL_ASSERT(adc != NULL); \
168 vsf_remap_adc_irq_enable((vsf_remap_adc_t *)adc, irq_mask); \
169 } \
170 \
171 void vsf_imp_adc_irq_disable(vsf_imp_adc_t *adc, vsf_adc_irq_mask_t irq_mask) \
172 { \
173 VSF_HAL_ASSERT(adc != NULL); \
174 vsf_remap_adc_irq_disable((vsf_remap_adc_t *)adc, irq_mask); \
175 } \
176 \
177 vsf_err_t vsf_imp_adc_channel_request_once(vsf_imp_adc_t *adc, \
178 vsf_adc_channel_cfg_t *channel_cfg, void *buffer) \
179 { \
180 VSF_HAL_ASSERT(adc != NULL); \
181 return vsf_remap_adc_channel_request_once((vsf_remap_adc_t *)adc, \
182 channel_cfg, buffer); \
183 } \
184 \
185 vsf_err_t vsf_imp_adc_channel_config(vsf_imp_adc_t *adc, \
186 vsf_adc_channel_cfg_t *channel_cfgs, uint32_t channel_cfgs_cnt) \
187 { \
188 VSF_HAL_ASSERT(adc != NULL); \
189 return vsf_remap_adc_channel_config((vsf_remap_adc_t *)adc, \
190 channel_cfgs, channel_cfgs_cnt); \
191 } \
192 \
193 vsf_err_t vsf_imp_adc_channel_request(vsf_imp_adc_t *adc, \
194 void *buffer, uint_fast32_t count) \
195 { \
196 VSF_HAL_ASSERT(adc != NULL); \
197 return vsf_remap_adc_channel_request((vsf_remap_adc_t *)adc, buffer, count);\
198 } \
199 vsf_err_t vsf_imp_adc_get_configuration(vsf_imp_adc_t *adc, vsf_adc_cfg_t *cfg) \
200 { \
201 VSF_HAL_ASSERT(adc != NULL); \
202 return vsf_remap_adc_get_configuration((vsf_remap_adc_t *)adc, cfg); \
203 }
204#endif
205
206/*============================ GLOBAL VARIABLES ==============================*/
207
208#define VSF_HAL_TEMPLATE_IMP_NAME _adc
209#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _ADC
210
211#if !defined(VSF_ADC_CFG_IMP_PREFIX) && !defined(VSF_ADC_CFG_IMP_DEVICE_PREFIX)
212# error "Please define VSF_ADC_CFG_IMP_PREFIX in adc driver"
213#endif
214
215#if !defined(VSF_ADC_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_ADC_CFG_IMP_DEVICE_UPCASE_PREFIX)
216# error "Please define VSF_ADC_CFG_IMP_UPCASE_PREFIX in adc driver"
217#endif
218
219#ifndef VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX
220# define VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX VSF_ADC_CFG_IMP_UPCASE_PREFIX
221#endif
222
223#ifdef VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
224# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
225#endif
226
228
229#undef VSF_ADC_CFG_IMP_PREFIX
230#undef VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX
231#undef VSF_ADC_CFG_IMP_UPCASE_PREFIX
232#undef VSF_ADC_CFG_IMP_DEVICE_PREFIX
233#undef VSF_ADC_CFG_IMP_DEVICE_UPCASE_PREFIX
234#undef VSF_ADC_CFG_IMP_REMAP_PREFIX
235#undef VSF_ADC_CFG_IMP_LV0
236#undef VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
237#undef VSF_ADC_CFG_IMP_HAS_OP
238#undef VSF_ADC_CFG_IMP_EXTERN_OP
239
240#undef vsf_imp_adc_t
241#undef vsf_imp_adc_init
242#undef vsf_imp_adc_fini
243#undef vsf_imp_adc_enable
244#undef vsf_imp_adc_disable
245#undef vsf_imp_adc_status
246#undef vsf_imp_adc_capability
247#undef vsf_imp_adc_irq_enable
248#undef vsf_imp_adc_irq_disable
249#undef vsf_imp_adc_channel_request_once
250#undef vsf_imp_adc_channel_config
251#undef vsf_imp_adc_channel_request
252#undef vsf_imp_adc_get_configuration
253
254#undef vsf_remap_adc_t
255#undef vsf_remap_adc_init
256#undef vsf_remap_adc_fini
257#undef vsf_remap_adc_enable
258#undef vsf_remap_adc_disable
259#undef vsf_remap_adc_status
260#undef vsf_remap_adc_capability
261#undef vsf_remap_adc_irq_enable
262#undef vsf_remap_adc_irq_disable
263#undef vsf_remap_adc_channel_request_once
264#undef vsf_remap_adc_channel_config
265#undef vsf_remap_adc_channel_request
266#undef vsf_remap_adc_get_configuration
267
268#endif /* VSF_HAL_USE_ADC */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define NULL
Definition lvgl.h:26
Predefined VSF ADC capability that can be reimplemented in specific HAL drivers.
Definition vsf_template_adc.h:689
uint8_t max_data_bits
Definition vsf_template_adc.h:695
Configuration structure for ADC.
Definition vsf_template_adc.h:639
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
Generated from commit: vsfteam/vsf@74aa6ce