VSF Documented
dac_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_DAC == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23
24#define vsf_real_dac_t VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_t)
25#define vsf_real_dac_capability VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_capability)
26
27#ifndef VSF_DAC_CFG_REIMPLEMENT_API_CAPABILITY
28# define VSF_DAC_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
29#endif
30
31#ifdef VSF_DAC_CFG_IMP_REMAP_PREFIX
32# undef VSF_DAC_CFG_REIMPLEMENT_API_CAPABILITY
33# define VSF_DAC_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
34#endif
35
36#if VSF_DAC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
37# ifndef VSF_DAC_CFG_CAPABILITY_IRQ_MASK
38# define VSF_DAC_CFG_CAPABILITY_IRQ_MASK VSF_DAC_IRQ_ALL_BITS_MASK
39# endif
40# ifndef VSF_DAC_CFG_CAPABILITY_MAX_RESOLUTION_BITS
41# define VSF_DAC_CFG_CAPABILITY_MAX_RESOLUTION_BITS 12
42# endif
43# ifndef VSF_DAC_CFG_CAPABILITY_MIN_RESOLUTION_BITS
44# define VSF_DAC_CFG_CAPABILITY_MIN_RESOLUTION_BITS 8
45# endif
46# ifndef VSF_DAC_CFG_CAPABILITY_CHANNEL_COUNT
47# define VSF_DAC_CFG_CAPABILITY_CHANNEL_COUNT 4
48# endif
49#endif
50
51/*============================ LOCAL VARIABLES ===============================*/
52/*============================ IMPLEMENTATION ================================*/
53
54#if VSF_DAC_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
55vsf_dac_capability_t vsf_real_dac_capability(vsf_real_dac_t *dac_ptr)
56{
57 vsf_dac_capability_t dac_capability = {
58 .irq_mask = VSF_DAC_CFG_CAPABILITY_IRQ_MASK,
59 .max_resolution_bits = VSF_DAC_CFG_CAPABILITY_MAX_RESOLUTION_BITS,
60 .min_resolution_bits = VSF_DAC_CFG_CAPABILITY_MIN_RESOLUTION_BITS,
61 .channel_count = VSF_DAC_CFG_CAPABILITY_CHANNEL_COUNT,
62 };
63
64 return dac_capability;
65}
66#endif
67
68/*============================ MACROS ========================================*/
69
70#undef VSF_DAC_CFG_REIMPLEMENT_API_CAPABILITY
71#undef VSF_DAC_CFG_CAPABILITY_IRQ_MASK
72#undef VSF_DAC_CFG_CAPABILITY_MAX_RESOLUTION_BITS
73#undef VSF_DAC_CFG_CAPABILITY_MIN_RESOLUTION_BITS
74#undef VSF_DAC_CFG_CAPABILITY_CHANNEL_COUNT
75
76#undef vsf_real_dac_t
77#undef vsf_real_dac_capability
78
79/*============================ MACROS ========================================*/
80
81#ifdef VSF_DAC_CFG_IMP_REMAP_PREFIX
82# define vsf_imp_dac_t VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_t)
83# define vsf_imp_dac_init(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_init)
84# define vsf_imp_dac_fini(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_fini)
85# define vsf_imp_dac_enable(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_enable)
86# define vsf_imp_dac_disable(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_disable)
87# define vsf_imp_dac_status(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_status)
88# define vsf_imp_dac_capability(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_capability)
89# define vsf_imp_dac_irq_enable(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_irq_enable)
90# define vsf_imp_dac_irq_disable(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_irq_disable)
91# define vsf_imp_dac_channel_request_once(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_channel_request_once)
92# define vsf_imp_dac_channel_config(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_channel_config)
93# define vsf_imp_dac_channel_request(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_PREFIX, _dac_channel_request)
94
95# define vsf_remap_dac_t VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_t)
96# define vsf_remap_dac_init(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_init)
97# define vsf_remap_dac_fini(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_fini)
98# define vsf_remap_dac_enable(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_enable)
99# define vsf_remap_dac_disable(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_disable)
100# define vsf_remap_dac_status(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_status)
101# define vsf_remap_dac_capability(__DAC) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_capability)
102# define vsf_remap_dac_irq_enable(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_irq_enable)
103# define vsf_remap_dac_irq_disable(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_irq_disable)
104# define vsf_remap_dac_channel_request_once(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_channel_request_once)
105# define vsf_remap_dac_channel_config(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_channel_config)
106# define vsf_remap_dac_channel_request(__DAC, ...) VSF_MCONNECT(VSF_DAC_CFG_IMP_REMAP_PREFIX, _dac_channel_request)
107
108# define VSF_DAC_CFG_IMP_REMAP_FUNCTIONS \
109 vsf_err_t vsf_imp_dac_init(vsf_imp_dac_t *dac) \
110 { \
111 VSF_HAL_ASSERT(dac != NULL); \
112 return vsf_remap_dac_init((vsf_remap_dac_t *)dac); \
113 } \
114 \
115 void vsf_imp_dac_fini(vsf_imp_dac_t *dac) \
116 { \
117 VSF_HAL_ASSERT(dac != NULL); \
118 vsf_remap_dac_fini((vsf_remap_dac_t *)dac); \
119 } \
120 \
121 vsf_remap_dac_status_t vsf_imp_dac_status(vsf_imp_dac_t *dac) \
122 { \
123 VSF_HAL_ASSERT(dac != NULL); \
124 return vsf_remap_dac_status((vsf_remap_dac_t *)dac); \
125 } \
126 \
127 vsf_remap_dac_capability_t vsf_imp_dac_capability(vsf_imp_dac_t *dac) \
128 { \
129 VSF_HAL_ASSERT(dac != NULL); \
130 return vsf_remap_dac_capability((vsf_remap_dac_t *)dac); \
131 } \
132 \
133 fsm_rt_t vsf_imp_dac_enable(vsf_imp_dac_t *dac) \
134 { \
135 VSF_HAL_ASSERT(dac != NULL); \
136 return vsf_remap_dac_enable((vsf_remap_dac_t *)dac); \
137 } \
138 \
139 fsm_rt_t vsf_imp_dac_disable(vsf_imp_dac_t *dac) \
140 { \
141 VSF_HAL_ASSERT(dac != NULL); \
142 return vsf_remap_dac_disable((vsf_remap_dac_t *)dac); \
143 } \
144 \
145 void vsf_imp_dac_irq_enable(vsf_imp_dac_t *dac, vsf_remap_dac_irq_mask_t irq_mask) \
146 { \
147 VSF_HAL_ASSERT(dac != NULL); \
148 vsf_remap_dac_irq_enable((vsf_remap_dac_t *)dac, irq_mask); \
149 } \
150 \
151 void vsf_imp_dac_irq_disable(vsf_imp_dac_t *dac, vsf_remap_dac_irq_mask_t irq_mask) \
152 { \
153 VSF_HAL_ASSERT(dac != NULL); \
154 vsf_remap_dac_irq_disable((vsf_remap_dac_t *)dac, irq_mask); \
155 } \
156 \
157 vsf_err_t vsf_imp_dac_channel_request_once(vsf_imp_dac_t *dac, \
158 vsf_remap_dac_channel_cfg_t *channel_cfg, uint_fast16_t value) \
159 { \
160 VSF_HAL_ASSERT(dac != NULL); \
161 return vsf_remap_dac_channel_request_once((vsf_remap_dac_t *)dac, channel_cfg, value); \
162 } \
163 \
164 vsf_err_t vsf_imp_dac_channel_config(vsf_imp_dac_t *dac, \
165 vsf_remap_dac_channel_cfg_t *channel_cfgs, uint_fast8_t channel_cfgs_cnt) \
166 { \
167 VSF_HAL_ASSERT(dac != NULL); \
168 return vsf_remap_dac_channel_config((vsf_remap_dac_t *)dac, channel_cfgs, channel_cfgs_cnt);\
169 } \
170 \
171 vsf_err_t vsf_imp_dac_channel_request(vsf_imp_dac_t *dac, \
172 void *buffer, uint_fast32_t count) \
173 { \
174 VSF_HAL_ASSERT(dac != NULL); \
175 return vsf_remap_dac_channel_request((vsf_remap_dac_t *)dac, buffer, count); \
176 }
177#endif
178
179/*============================ LOCAL VARIABLES ===============================*/
180/*============================ IMPLEMENTATION ================================*/
181/*============================ MACROS ========================================*/
182/*============================ GLOBAL VARIABLES ==============================*/
183
184#define VSF_HAL_TEMPLATE_IMP_NAME _dac
185#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _DAC
186
187#ifndef VSF_DAC_CFG_IMP_PREFIX
188# error "Please define VSF_DAC_CFG_IMP_PREFIX in dac driver"
189#endif
190
191#ifndef VSF_DAC_CFG_IMP_UPCASE_PREFIX
192# error "Please define VSF_DAC_CFG_IMP_UPCASE_PREFIX in dac driver"
193#endif
194
195#ifndef VSF_DAC_CFG_IMP_COUNT_MASK_PREFIX
196# define VSF_DAC_CFG_IMP_COUNT_MASK_PREFIX VSF_DAC_CFG_IMP_UPCASE_PREFIX
197#endif
198
199#ifdef VSF_DAC_CFG_IMP_REMAP_FUNCTIONS
200# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_DAC_CFG_IMP_REMAP_FUNCTIONS
201#endif
202
204
205#undef VSF_DAC_CFG_IMP_PREFIX
206#undef VSF_DAC_CFG_IMP_COUNT_MASK_PREFIX
207#undef VSF_DAC_CFG_IMP_UPCASE_PREFIX
208#undef VSF_DAC_CFG_IMP_LV0
209#undef VSF_DAC_CFG_IMP_REMAP_FUNCTIONS
210#undef VSF_DAC_CFG_IMP_HAS_OP
211#undef VSF_DAC_CFG_IMP_EXTERN_OP
212
213#undef vsf_imp_dac_t
214#undef vsf_imp_dac_init
215#undef vsf_imp_dac_fini
216#undef vsf_imp_dac_enable
217#undef vsf_imp_dac_disable
218#undef vsf_imp_dac_status
219#undef vsf_imp_dac_capability
220#undef vsf_imp_dac_irq_enable
221#undef vsf_imp_dac_irq_disable
222#undef vsf_imp_dac_channel_request_once
223#undef vsf_imp_dac_channel_config
224#undef vsf_imp_dac_channel_request
225
226#undef vsf_remap_dac_t
227#undef vsf_remap_dac_init
228#undef vsf_remap_dac_fini
229#undef vsf_remap_dac_enable
230#undef vsf_remap_dac_disable
231#undef vsf_remap_dac_status
232#undef vsf_remap_dac_capability
233#undef vsf_remap_dac_irq_enable
234#undef vsf_remap_dac_irq_disable
235#undef vsf_remap_dac_channel_request_once
236#undef vsf_remap_dac_channel_config
237#undef vsf_remap_dac_channel_request
238
239#endif /* VSF_HAL_USE_DAC */
Definition vsf_template_dac.h:154
uint8_t max_resolution_bits
Definition vsf_template_dac.h:160