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
26#ifndef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
27# define VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
28#endif
29
30#ifdef VSF_ADC_CFG_IMP_REMAP_PREFIX
31# undef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
32# define VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
33#endif
34
35#if VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
36# ifndef VSF_ADC_CFG_CAPABILITY_IRQ_MASK
37# define VSF_ADC_CFG_CAPABILITY_IRQ_MASK VSF_ADC_IRQ_ALL_BITS_MASK
38# endif
39# ifndef VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS
40# define VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS 12
41# endif
42# ifndef VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT
43# define VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT 4
44# endif
45#endif
46
47/*============================ LOCAL VARIABLES ===============================*/
48/*============================ IMPLEMENTATION ================================*/
49
50#if VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
51vsf_adc_capability_t vsf_real_adc_capability(vsf_real_adc_t *adc_ptr)
52{
53 vsf_adc_capability_t adc_capability = {
54 .irq_mask = VSF_ADC_CFG_CAPABILITY_IRQ_MASK,
55 .max_data_bits = VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS,
56 .channel_count = VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT,
57 };
58
59 return adc_capability;
60}
61#endif
62
63/*============================ MACROS ========================================*/
64
65#undef VSF_ADC_CFG_REIMPLEMENT_API_CAPABILITY
66#undef VSF_ADC_CFG_CAPABILITY_IRQ_MASK
67#undef VSF_ADC_CFG_CAPABILITY_MAX_DATA_BITS
68#undef VSF_ADC_CFG_CAPABILITY_CHANNEL_COUNT
69
70#undef vsf_real_adc_t
71#undef vsf_real_adc_capability
72
73/*============================ LOCAL VARIABLES ===============================*/
74/*============================ IMPLEMENTATION ================================*/
75/*============================ MACROS ========================================*/
76
77#ifdef VSF_ADC_CFG_IMP_REMAP_PREFIX
78# define vsf_imp_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_t)
79# define vsf_imp_adc_init VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_init)
80# define vsf_imp_adc_fini VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_fini)
81# define vsf_imp_adc_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_enable)
82# define vsf_imp_adc_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_disable)
83# define vsf_imp_adc_status VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_status)
84# define vsf_imp_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_capability)
85# define vsf_imp_adc_irq_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_irq_enable)
86# define vsf_imp_adc_irq_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_irq_disable)
87# define vsf_imp_adc_channel_request_once VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_request_once)
88# define vsf_imp_adc_channel_config VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_config)
89# define vsf_imp_adc_channel_request VSF_MCONNECT(VSF_ADC_CFG_IMP_PREFIX, _adc_channel_request)
90
91# define vsf_remap_adc_t VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_t)
92# define vsf_remap_adc_init VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_init)
93# define vsf_remap_adc_fini VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_fini)
94# define vsf_remap_adc_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_enable)
95# define vsf_remap_adc_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_disable)
96# define vsf_remap_adc_status VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_status)
97# define vsf_remap_adc_capability VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_capability)
98# define vsf_remap_adc_irq_enable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_irq_enable)
99# define vsf_remap_adc_irq_disable VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_irq_disable)
100# define vsf_remap_adc_channel_request_once VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_request_once)
101# define vsf_remap_adc_channel_config VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_config)
102# define vsf_remap_adc_channel_request VSF_MCONNECT(VSF_ADC_CFG_IMP_REMAP_PREFIX, _adc_channel_request)
103
104# define VSF_ADC_CFG_IMP_REMAP_FUNCTIONS \
105 vsf_err_t vsf_imp_adc_init(vsf_imp_adc_t *adc, vsf_adc_cfg_t *cfg) \
106 { \
107 VSF_HAL_ASSERT(adc != NULL); \
108 return vsf_remap_adc_init((vsf_remap_adc_t *)adc, cfg); \
109 } \
110 \
111 void vsf_imp_adc_fini(vsf_imp_adc_t *adc) \
112 { \
113 VSF_HAL_ASSERT(adc != NULL); \
114 vsf_remap_adc_fini((vsf_remap_adc_t *)adc); \
115 } \
116 \
117 vsf_adc_status_t vsf_imp_adc_status(vsf_imp_adc_t *adc) \
118 { \
119 VSF_HAL_ASSERT(adc != NULL); \
120 return vsf_remap_adc_status((vsf_remap_adc_t *)adc); \
121 } \
122 \
123 vsf_adc_capability_t vsf_imp_adc_capability(vsf_imp_adc_t *adc) \
124 { \
125 VSF_HAL_ASSERT(adc != NULL); \
126 return vsf_remap_adc_capability((vsf_remap_adc_t *)adc); \
127 } \
128 \
129 fsm_rt_t vsf_imp_adc_enable(vsf_imp_adc_t *adc) \
130 { \
131 VSF_HAL_ASSERT(adc != NULL); \
132 return vsf_remap_adc_enable((vsf_remap_adc_t *)adc); \
133 } \
134 \
135 fsm_rt_t vsf_imp_adc_disable(vsf_imp_adc_t *adc) \
136 { \
137 VSF_HAL_ASSERT(adc != NULL); \
138 return vsf_remap_adc_disable((vsf_remap_adc_t *)adc); \
139 } \
140 \
141 void vsf_imp_adc_irq_enable(vsf_imp_adc_t *adc, vsf_adc_irq_mask_t irq_mask) \
142 { \
143 VSF_HAL_ASSERT(adc != NULL); \
144 vsf_remap_adc_irq_enable((vsf_remap_adc_t *)adc, irq_mask); \
145 } \
146 \
147 void vsf_imp_adc_irq_disable(vsf_imp_adc_t *adc, vsf_adc_irq_mask_t irq_mask) \
148 { \
149 VSF_HAL_ASSERT(adc != NULL); \
150 vsf_remap_adc_irq_disable((vsf_remap_adc_t *)adc, irq_mask); \
151 } \
152 \
153 vsf_err_t vsf_imp_adc_channel_request_once(vsf_imp_adc_t *adc, \
154 vsf_adc_channel_cfg_t *channel_cfg, void *buffer) \
155 { \
156 VSF_HAL_ASSERT(adc != NULL); \
157 return vsf_remap_adc_channel_request_once((vsf_remap_adc_t *)adc, \
158 channel_cfg, buffer); \
159 } \
160 \
161 vsf_err_t vsf_imp_adc_channel_config(vsf_imp_adc_t *adc, \
162 vsf_adc_channel_cfg_t *channel_cfgs, uint32_t channel_cfgs_cnt) \
163 { \
164 VSF_HAL_ASSERT(adc != NULL); \
165 return vsf_remap_adc_channel_config((vsf_remap_adc_t *)adc, \
166 channel_cfgs, channel_cfgs_cnt); \
167 } \
168 \
169 vsf_err_t vsf_imp_adc_channel_request(vsf_imp_adc_t *adc, \
170 void *buffer, uint_fast32_t count) \
171 { \
172 VSF_HAL_ASSERT(adc != NULL); \
173 return vsf_remap_adc_channel_request((vsf_remap_adc_t *)adc, buffer, count);\
174 }
175#endif
176
177/*============================ GLOBAL VARIABLES ==============================*/
178
179#define VSF_HAL_TEMPLATE_IMP_NAME _adc
180#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _ADC
181
182#ifndef VSF_ADC_CFG_IMP_PREFIX
183# error "Please define VSF_ADC_CFG_IMP_PREFIX in adc driver"
184#endif
185
186#ifndef VSF_ADC_CFG_IMP_UPCASE_PREFIX
187# error "Please define VSF_ADC_CFG_IMP_UPCASE_PREFIX in adc driver"
188#endif
189
190#ifndef VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX
191# define VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX VSF_ADC_CFG_IMP_UPCASE_PREFIX
192#endif
193
194#ifdef VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
195# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
196#endif
197
199
200#undef VSF_ADC_CFG_IMP_PREFIX
201#undef VSF_ADC_CFG_IMP_COUNT_MASK_PREFIX
202#undef VSF_ADC_CFG_IMP_UPCASE_PREFIX
203#undef VSF_ADC_CFG_IMP_REMAP_PREFIX
204#undef VSF_ADC_CFG_IMP_LV0
205#undef VSF_ADC_CFG_IMP_REMAP_FUNCTIONS
206#undef VSF_ADC_CFG_IMP_HAS_OP
207#undef VSF_ADC_CFG_IMP_EXTERN_OP
208
209#undef vsf_imp_adc_t
210#undef vsf_imp_adc_init
211#undef vsf_imp_adc_fini
212#undef vsf_imp_adc_enable
213#undef vsf_imp_adc_disable
214#undef vsf_imp_adc_status
215#undef vsf_imp_adc_capability
216#undef vsf_imp_adc_irq_enable
217#undef vsf_imp_adc_irq_disable
218#undef vsf_imp_adc_channel_request_once
219#undef vsf_imp_adc_channel_config
220#undef vsf_imp_adc_channel_request
221
222#undef vsf_remap_adc_t
223#undef vsf_remap_adc_init
224#undef vsf_remap_adc_fini
225#undef vsf_remap_adc_enable
226#undef vsf_remap_adc_disable
227#undef vsf_remap_adc_status
228#undef vsf_remap_adc_capability
229#undef vsf_remap_adc_irq_enable
230#undef vsf_remap_adc_irq_disable
231#undef vsf_remap_adc_channel_request_once
232#undef vsf_remap_adc_channel_config
233#undef vsf_remap_adc_channel_request
234
235#endif /* VSF_HAL_USE_ADC */
Definition vsf_template_adc.h:248
uint8_t max_data_bits
Definition vsf_template_adc.h:254