VSF Documented
i2s_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_I2S == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#define vsf_real_i2s_t VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_t)
24#define vsf_real_i2s_capability VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_capability)
25#define vsf_real_i2s_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_get_configuration)
26#define vsf_real_i2s_tx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_get_configuration)
27#define vsf_real_i2s_rx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_get_configuration)
28
29#ifndef VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION
30# define VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
31#endif
32
33#ifndef VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION
34# define VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION DISABLED
35#endif
36
37#ifndef VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION
38# define VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION DISABLED
39#endif
40
41#ifndef VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY
42# define VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
43#endif
44
45#ifdef VSF_I2S_CFG_IMP_REMAP_PREFIX
46# undef VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY
47# define VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
48# undef VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION
49# define VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
50# undef VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION
51# define VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION ENABLED
52# undef VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION
53# define VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION ENABLED
54#endif
55
56#if VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
57# ifndef VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED
58# define VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED 1
59# endif
60# ifndef VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED
61# define VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED 1
62# endif
63#endif
64
65/*============================ LOCAL VARIABLES ===============================*/
66/*============================ IMPLEMENTATION ================================*/
67
68#if VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
69vsf_i2s_capability_t vsf_real_i2s_capability(vsf_real_i2s_t *i2s_ptr)
70{
71 vsf_i2s_capability_t i2s_capability = {
73 .is_src_supported = VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED
74 .is_dbuffer_supported = VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED
75 }
76 };
77
78 return i2s_capability;
79}
80#endif
81
82#if VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
83vsf_err_t vsf_real_i2s_get_configuration(vsf_real_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
84{
85 VSF_HAL_ASSERT(NULL != i2s_ptr);
86 VSF_HAL_ASSERT(NULL != cfg_ptr);
87 VSF_HAL_ASSERT(0); // Default implementation: not supported, trigger assertion
89}
90#endif
91
92#if VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION == DISABLED
93vsf_err_t vsf_real_i2s_tx_get_configuration(vsf_real_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
94{
95 VSF_HAL_ASSERT(NULL != i2s_ptr);
96 VSF_HAL_ASSERT(NULL != cfg_ptr);
97 VSF_HAL_ASSERT(0); // Default implementation: not supported, trigger assertion
99}
100#endif
101
102#if VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION == DISABLED
103vsf_err_t vsf_real_i2s_rx_get_configuration(vsf_real_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
104{
105 VSF_HAL_ASSERT(NULL != i2s_ptr);
106 VSF_HAL_ASSERT(NULL != cfg_ptr);
107 VSF_HAL_ASSERT(0); // Default implementation: not supported, trigger assertion
108 return VSF_ERR_NOT_SUPPORT;
109}
110#endif
111
112/*============================ MACROS ========================================*/
113
114#undef VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY
115#undef VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION
116#undef VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION
117#undef VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION
118#undef VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED
119#undef VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED
120
121#undef vsf_real_i2s_t
122#undef vsf_real_i2s_capability
123#undef vsf_real_i2s_get_configuration
124#undef vsf_real_i2s_tx_get_configuration
125#undef vsf_real_i2s_rx_get_configuration
126
127/*============================ MACROS ========================================*/
128
129#ifdef VSF_I2S_CFG_IMP_REMAP_PREFIX
130# define vsf_imp_i2s_t VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_t)
131# define vsf_imp_i2s_init VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_init)
132# define vsf_imp_i2s_enable VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_enable)
133# define vsf_imp_i2s_disable VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_disable)
134# define vsf_imp_i2s_status VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_status)
135# define vsf_imp_i2s_capability VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_capability)
136# define vsf_imp_i2s_tx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_init)
137# define vsf_imp_i2s_tx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_fini)
138# define vsf_imp_i2s_tx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_get_configuration)
139# define vsf_imp_i2s_tx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_start)
140# define vsf_imp_i2s_rx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_init)
141# define vsf_imp_i2s_rx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_fini)
142# define vsf_imp_i2s_rx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_get_configuration)
143# define vsf_imp_i2s_rx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_start)
144# define vsf_imp_i2s_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_get_configuration)
145
146# define vsf_remap_i2s_t VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_t)
147# define vsf_remap_i2s_init VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_init)
148# define vsf_remap_i2s_enable VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_enable)
149# define vsf_remap_i2s_disable VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_disable)
150# define vsf_remap_i2s_status VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_status)
151# define vsf_remap_i2s_capability VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_capability)
152# define vsf_remap_i2s_tx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_init)
153# define vsf_remap_i2s_tx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_fini)
154# define vsf_remap_i2s_tx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_get_configuration)
155# define vsf_remap_i2s_tx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_start)
156# define vsf_remap_i2s_rx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_init)
157# define vsf_remap_i2s_rx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_fini)
158# define vsf_remap_i2s_rx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_get_configuration)
159# define vsf_remap_i2s_rx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_start)
160# define vsf_remap_i2s_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_get_configuration)
161
162# define VSF_I2S_CFG_IMP_REMAP_FUNCTIONS \
163 vsf_err_t vsf_imp_i2s_init(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
164 { \
165 VSF_HAL_ASSERT(i2s_ptr != NULL); \
166 return vsf_remap_i2s_init(i2s_ptr, cfg_ptr); \
167 } \
168 vsf_err_t vsf_imp_i2s_tx_init(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
169 { \
170 VSF_HAL_ASSERT(i2s_ptr != NULL); \
171 return vsf_remap_i2s_tx_init(i2s_ptr, cfg_ptr); \
172 } \
173 void vsf_imp_i2s_tx_fini(vsf_imp_i2s_t *i2s_ptr) \
174 { \
175 VSF_HAL_ASSERT(i2s_ptr != NULL); \
176 vsf_remap_i2s_tx_fini(i2s_ptr); \
177 } \
178 vsf_err_t vsf_imp_i2s_tx_get_configuration(vsf_imp_i2s_t *i2s_ptr, \
179 vsf_i2s_cfg_t *cfg_ptr) \
180 { \
181 VSF_HAL_ASSERT(i2s_ptr != NULL); \
182 VSF_HAL_ASSERT(cfg_ptr != NULL); \
183 return vsf_remap_i2s_tx_get_configuration(i2s_ptr, cfg_ptr); \
184 } \
185 vsf_err_t vsf_imp_i2s_tx_start(vsf_imp_i2s_t *i2s_ptr) \
186 { \
187 VSF_HAL_ASSERT(i2s_ptr != NULL); \
188 return vsf_remap_i2s_tx_start(i2s_ptr); \
189 } \
190 vsf_err_t vsf_imp_i2s_rx_init(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
191 { \
192 VSF_HAL_ASSERT(i2s_ptr != NULL); \
193 return vsf_remap_i2s_rx_init(i2s_ptr, cfg_ptr); \
194 } \
195 void vsf_imp_i2s_rx_fini(vsf_imp_i2s_t *i2s_ptr) \
196 { \
197 VSF_HAL_ASSERT(i2s_ptr != NULL); \
198 vsf_remap_i2s_rx_fini(i2s_ptr); \
199 } \
200 vsf_err_t vsf_imp_i2s_rx_get_configuration(vsf_imp_i2s_t *i2s_ptr, \
201 vsf_i2s_cfg_t *cfg_ptr) \
202 { \
203 VSF_HAL_ASSERT(i2s_ptr != NULL); \
204 VSF_HAL_ASSERT(cfg_ptr != NULL); \
205 return vsf_remap_i2s_rx_get_configuration(i2s_ptr, cfg_ptr); \
206 } \
207 vsf_err_t vsf_imp_i2s_rx_start(vsf_imp_i2s_t *i2s_ptr) \
208 { \
209 VSF_HAL_ASSERT(i2s_ptr != NULL); \
210 return vsf_remap_i2s_rx_start(i2s_ptr); \
211 } \
212 fsm_rt_t vsf_imp_i2s_enable(vsf_imp_i2s_t *i2s_ptr) \
213 { \
214 VSF_HAL_ASSERT(i2s_ptr != NULL); \
215 return vsf_remap_i2s_enable(i2s_ptr); \
216 } \
217 fsm_rt_t vsf_imp_i2s_disable(vsf_imp_i2s_t *i2s_ptr) \
218 { \
219 VSF_HAL_ASSERT(i2s_ptr != NULL); \
220 return vsf_remap_i2s_disable(i2s_ptr); \
221 } \
222 vsf_i2s_status_t vsf_imp_i2s_status(vsf_imp_i2s_t *i2s_ptr) \
223 { \
224 VSF_HAL_ASSERT(i2s_ptr != NULL); \
225 return vsf_remap_i2s_status(i2s_ptr); \
226 } \
227 vsf_i2s_capability_t vsf_imp_i2s_capability(vsf_imp_i2s_t *i2s_ptr) \
228 { \
229 VSF_HAL_ASSERT(i2s_ptr != NULL); \
230 return vsf_remap_i2s_capability(i2s_ptr); \
231 } \
232 vsf_err_t vsf_imp_i2s_get_configuration(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
233 { \
234 VSF_HAL_ASSERT(i2s_ptr != NULL); \
235 return vsf_remap_i2s_get_configuration(i2s_ptr, cfg_ptr); \
236 }
237#endif
238
239/*============================ MACROFIED FUNCTIONS ===========================*/
240/*============================ LOCAL VARIABLES ===============================*/
241/*============================ IMPLEMENTATION ================================*/
242/*============================ GLOBAL VARIABLES ==============================*/
243
244#define VSF_HAL_TEMPLATE_IMP_NAME _i2s
245#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _I2S
246
247#if !defined(VSF_I2S_CFG_IMP_PREFIX) && !defined(VSF_I2S_CFG_IMP_DEVICE_PREFIX)
248# error "Please define VSF_I2S_CFG_IMP_PREFIX in i2s driver"
249#endif
250
251#if !defined(VSF_I2S_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_I2S_CFG_IMP_DEVICE_UPCASE_PREFIX)
252# error "Please define VSF_I2S_CFG_IMP_UPCASE_PREFIX in i2s driver"
253#endif
254
255#ifndef VSF_I2S_CFG_IMP_COUNT_MASK_PREFIX
256# define VSF_I2S_CFG_IMP_COUNT_MASK_PREFIX VSF_I2S_CFG_IMP_UPCASE_PREFIX
257#endif
258
259#ifdef VSF_I2S_CFG_IMP_REMAP_FUNCTIONS
260# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_I2S_CFG_IMP_REMAP_FUNCTIONS
261#endif
262
264
265#undef VSF_I2S_CFG_IMP_PREFIX
266#undef VSF_I2S_CFG_IMP_UPCASE_PREFIX
267#undef VSF_I2S_CFG_IMP_DEVICE_PREFIX
268#undef VSF_I2S_CFG_IMP_DEVICE_UPCASE_PREFIX
269#undef VSF_I2S_CFG_IMP_COUNT_MASK_PREFIX
270#undef VSF_I2S_CFG_IMP_LV0
271#undef VSF_I2S_CFG_IMP_REMAP_FUNCTIONS
272#undef VSF_I2S_CFG_IMP_HAS_OP
273#undef VSF_I2S_CFG_IMP_EXTERN_OP
274
275#undef vsf_imp_i2s_t
276#undef vsf_imp_i2s_init
277#undef vsf_imp_i2s_enable
278#undef vsf_imp_i2s_disable
279#undef vsf_imp_i2s_status
280#undef vsf_imp_i2s_capability
281#undef vsf_imp_i2s_tx_init
282#undef vsf_imp_i2s_tx_fini
283#undef vsf_imp_i2s_tx_get_configuration
284#undef vsf_imp_i2s_tx_start
285#undef vsf_imp_i2s_rx_init
286#undef vsf_imp_i2s_rx_fini
287#undef vsf_imp_i2s_rx_get_configuration
288#undef vsf_imp_i2s_rx_start
289#undef vsf_imp_i2s_get_configuration
290
291#undef vsf_remap_i2s_t
292#undef vsf_remap_i2s_init
293#undef vsf_remap_i2s_enable
294#undef vsf_remap_i2s_disable
295#undef vsf_remap_i2s_status
296#undef vsf_remap_i2s_capability
297#undef vsf_remap_i2s_tx_init
298#undef vsf_remap_i2s_tx_fini
299#undef vsf_remap_i2s_tx_get_configuration
300#undef vsf_remap_i2s_tx_start
301#undef vsf_remap_i2s_rx_init
302#undef vsf_remap_i2s_rx_fini
303#undef vsf_remap_i2s_rx_get_configuration
304#undef vsf_remap_i2s_rx_start
305#undef vsf_remap_i2s_get_configuration
306
307#endif // VSF_HAL_USE_I2S == ENABLED
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define NULL
Definition lvgl.h:26
Definition vsf_template_i2s.h:268
i2s_capability
Definition vsf_template_i2s.h:277
i2s configuration
Definition vsf_template_i2s.h:344
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
Generated from commit: vsfteam/vsf@74aa6ce