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#if defined(VSF_I2S_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_I2S_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
24# define vsf_real_i2s_t VSF_MCONNECT(VSF_I2S_CFG_IMP_DEVICE_PREFIX, _t)
25# define vsf_real_i2s_capability VSF_MCONNECT(VSF_I2S_CFG_IMP_DEVICE_PREFIX, _capability)
26# define vsf_real_i2s_ctrl VSF_MCONNECT(VSF_I2S_CFG_IMP_DEVICE_PREFIX, _ctrl)
27# define vsf_real_i2s_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_DEVICE_PREFIX, _get_configuration)
28# define vsf_real_i2s_tx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_DEVICE_PREFIX, _tx_get_configuration)
29# define vsf_real_i2s_rx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_DEVICE_PREFIX, _rx_get_configuration)
30#else
31# define vsf_real_i2s_t VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_t)
32# define vsf_real_i2s_capability VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_capability)
33# define vsf_real_i2s_ctrl VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_ctrl)
34# define vsf_real_i2s_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_get_configuration)
35# define vsf_real_i2s_tx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_get_configuration)
36# define vsf_real_i2s_rx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_get_configuration)
37#endif
38
39#ifndef VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION
40# define VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
41#endif
42
43#ifndef VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION
44# define VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION DISABLED
45#endif
46
47#ifndef VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION
48# define VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION DISABLED
49#endif
50
51#ifndef VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY
52# define VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
53#endif
54
55#ifndef VSF_I2S_CFG_REIMPLEMENT_API_CTRL
56# define VSF_I2S_CFG_REIMPLEMENT_API_CTRL DISABLED
57#endif
58
59#ifdef VSF_I2S_CFG_IMP_REMAP_PREFIX
60# undef VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY
61# define VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
62# undef VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION
63# define VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
64# undef VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION
65# define VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION ENABLED
66# undef VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION
67# define VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION ENABLED
68# undef VSF_I2S_CFG_REIMPLEMENT_API_CTRL
69# define VSF_I2S_CFG_REIMPLEMENT_API_CTRL ENABLED
70#endif
71
72#if VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
73# ifndef VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED
74# define VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED 1
75# endif
76# ifndef VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED
77# define VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED 1
78# endif
79#endif
80
81/*============================ LOCAL VARIABLES ===============================*/
82/*============================ IMPLEMENTATION ================================*/
83
84#if VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
85vsf_i2s_capability_t vsf_real_i2s_capability(vsf_real_i2s_t *i2s_ptr)
86{
87 vsf_i2s_capability_t i2s_capability = {
89 .is_src_supported = VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED
90 .is_dbuffer_supported = VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED
91 }
92 };
93
94 return i2s_capability;
95}
96#endif
97
98#if VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
99vsf_err_t vsf_real_i2s_get_configuration(vsf_real_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
100{
101 VSF_HAL_ASSERT(NULL != i2s_ptr);
102 VSF_HAL_ASSERT(NULL != cfg_ptr);
103 VSF_HAL_ASSERT(0); // Default implementation: not supported, trigger assertion
104 return VSF_ERR_NOT_SUPPORT;
105}
106#endif
107
108#if VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION == DISABLED
109vsf_err_t vsf_real_i2s_tx_get_configuration(vsf_real_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
110{
111 VSF_HAL_ASSERT(NULL != i2s_ptr);
112 VSF_HAL_ASSERT(NULL != cfg_ptr);
113 VSF_HAL_ASSERT(0); // Default implementation: not supported, trigger assertion
114 return VSF_ERR_NOT_SUPPORT;
115}
116#endif
117
118#if VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION == DISABLED
119vsf_err_t vsf_real_i2s_rx_get_configuration(vsf_real_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr)
120{
121 VSF_HAL_ASSERT(NULL != i2s_ptr);
122 VSF_HAL_ASSERT(NULL != cfg_ptr);
123 VSF_HAL_ASSERT(0); // Default implementation: not supported, trigger assertion
124 return VSF_ERR_NOT_SUPPORT;
125}
126#endif
127
128#if VSF_I2S_CFG_REIMPLEMENT_API_CTRL == DISABLED
129vsf_err_t vsf_real_i2s_ctrl(vsf_real_i2s_t *i2s_ptr, vsf_i2s_ctrl_t ctrl, void *param)
130{
131 VSF_HAL_ASSERT(NULL != i2s_ptr);
132
133 // Default implementation: not supported, trigger assertion
135
136 return VSF_ERR_NOT_SUPPORT;
137}
138#endif
139
140/*============================ MACROS ========================================*/
141
142#undef VSF_I2S_CFG_REIMPLEMENT_TYPE_CAPABILITY
143#undef VSF_I2S_CFG_REIMPLEMENT_TYPE_CFG
144#undef VSF_I2S_CFG_REIMPLEMENT_TYPE_IRQ_MASK
145#undef VSF_I2S_CFG_REIMPLEMENT_TYPE_MODE
146#undef VSF_I2S_CFG_REIMPLEMENT_TYPE_STATUS
147#undef VSF_I2S_CFG_REIMPLEMENT_TYPE_CTRL
148#undef VSF_I2S_CFG_REIMPLEMENT_API_CAPABILITY
149#undef VSF_I2S_CFG_REIMPLEMENT_API_CTRL
150#undef VSF_I2S_CFG_REIMPLEMENT_API_GET_CONFIGURATION
151#undef VSF_I2S_CFG_REIMPLEMENT_API_TX_GET_CONFIGURATION
152#undef VSF_I2S_CFG_REIMPLEMENT_API_RX_GET_CONFIGURATION
153#undef VSF_I2S_CFG_CAPABILITY_IS_SRC_SUPPORTED
154#undef VSF_I2S_CFG_CAPABILITY_IS_DBUFFER_SUPPORTED
155
156#undef vsf_real_i2s_t
157#undef vsf_real_i2s_capability
158#undef vsf_real_i2s_ctrl
159#undef vsf_real_i2s_get_configuration
160#undef vsf_real_i2s_tx_get_configuration
161#undef vsf_real_i2s_rx_get_configuration
162
163/*============================ MACROS ========================================*/
164
165#ifdef VSF_I2S_CFG_IMP_REMAP_PREFIX
166# define vsf_imp_i2s_t VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_t)
167# define vsf_imp_i2s_init VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_init)
168# define vsf_imp_i2s_enable VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_enable)
169# define vsf_imp_i2s_disable VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_disable)
170# define vsf_imp_i2s_status VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_status)
171# define vsf_imp_i2s_capability VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_capability)
172# define vsf_imp_i2s_tx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_init)
173# define vsf_imp_i2s_tx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_fini)
174# define vsf_imp_i2s_tx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_get_configuration)
175# define vsf_imp_i2s_tx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_tx_start)
176# define vsf_imp_i2s_rx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_init)
177# define vsf_imp_i2s_rx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_fini)
178# define vsf_imp_i2s_rx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_get_configuration)
179# define vsf_imp_i2s_rx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_rx_start)
180# define vsf_imp_i2s_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_get_configuration)
181# define vsf_imp_i2s_ctrl VSF_MCONNECT(VSF_I2S_CFG_IMP_PREFIX, _i2s_ctrl)
182
183# define vsf_remap_i2s_t VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_t)
184# define vsf_remap_i2s_init VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_init)
185# define vsf_remap_i2s_enable VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_enable)
186# define vsf_remap_i2s_disable VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_disable)
187# define vsf_remap_i2s_status VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_status)
188# define vsf_remap_i2s_capability VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_capability)
189# define vsf_remap_i2s_tx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_init)
190# define vsf_remap_i2s_tx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_fini)
191# define vsf_remap_i2s_tx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_get_configuration)
192# define vsf_remap_i2s_tx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_tx_start)
193# define vsf_remap_i2s_rx_init VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_init)
194# define vsf_remap_i2s_rx_fini VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_fini)
195# define vsf_remap_i2s_rx_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_get_configuration)
196# define vsf_remap_i2s_rx_start VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_rx_start)
197# define vsf_remap_i2s_get_configuration VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_get_configuration)
198# define vsf_remap_i2s_ctrl VSF_MCONNECT(VSF_I2S_CFG_IMP_REMAP_PREFIX, _i2s_ctrl)
199
200# define VSF_I2S_CFG_IMP_REMAP_FUNCTIONS \
201 vsf_err_t vsf_imp_i2s_init(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
202 { \
203 VSF_HAL_ASSERT(i2s_ptr != NULL); \
204 return vsf_remap_i2s_init(i2s_ptr, cfg_ptr); \
205 } \
206 vsf_err_t vsf_imp_i2s_tx_init(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
207 { \
208 VSF_HAL_ASSERT(i2s_ptr != NULL); \
209 return vsf_remap_i2s_tx_init(i2s_ptr, cfg_ptr); \
210 } \
211 void vsf_imp_i2s_tx_fini(vsf_imp_i2s_t *i2s_ptr) \
212 { \
213 VSF_HAL_ASSERT(i2s_ptr != NULL); \
214 vsf_remap_i2s_tx_fini(i2s_ptr); \
215 } \
216 vsf_err_t vsf_imp_i2s_tx_get_configuration(vsf_imp_i2s_t *i2s_ptr, \
217 vsf_i2s_cfg_t *cfg_ptr) \
218 { \
219 VSF_HAL_ASSERT(i2s_ptr != NULL); \
220 VSF_HAL_ASSERT(cfg_ptr != NULL); \
221 return vsf_remap_i2s_tx_get_configuration(i2s_ptr, cfg_ptr); \
222 } \
223 vsf_err_t vsf_imp_i2s_tx_start(vsf_imp_i2s_t *i2s_ptr) \
224 { \
225 VSF_HAL_ASSERT(i2s_ptr != NULL); \
226 return vsf_remap_i2s_tx_start(i2s_ptr); \
227 } \
228 vsf_err_t vsf_imp_i2s_rx_init(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
229 { \
230 VSF_HAL_ASSERT(i2s_ptr != NULL); \
231 return vsf_remap_i2s_rx_init(i2s_ptr, cfg_ptr); \
232 } \
233 void vsf_imp_i2s_rx_fini(vsf_imp_i2s_t *i2s_ptr) \
234 { \
235 VSF_HAL_ASSERT(i2s_ptr != NULL); \
236 vsf_remap_i2s_rx_fini(i2s_ptr); \
237 } \
238 vsf_err_t vsf_imp_i2s_rx_get_configuration(vsf_imp_i2s_t *i2s_ptr, \
239 vsf_i2s_cfg_t *cfg_ptr) \
240 { \
241 VSF_HAL_ASSERT(i2s_ptr != NULL); \
242 VSF_HAL_ASSERT(cfg_ptr != NULL); \
243 return vsf_remap_i2s_rx_get_configuration(i2s_ptr, cfg_ptr); \
244 } \
245 vsf_err_t vsf_imp_i2s_rx_start(vsf_imp_i2s_t *i2s_ptr) \
246 { \
247 VSF_HAL_ASSERT(i2s_ptr != NULL); \
248 return vsf_remap_i2s_rx_start(i2s_ptr); \
249 } \
250 fsm_rt_t vsf_imp_i2s_enable(vsf_imp_i2s_t *i2s_ptr) \
251 { \
252 VSF_HAL_ASSERT(i2s_ptr != NULL); \
253 return vsf_remap_i2s_enable(i2s_ptr); \
254 } \
255 fsm_rt_t vsf_imp_i2s_disable(vsf_imp_i2s_t *i2s_ptr) \
256 { \
257 VSF_HAL_ASSERT(i2s_ptr != NULL); \
258 return vsf_remap_i2s_disable(i2s_ptr); \
259 } \
260 vsf_i2s_status_t vsf_imp_i2s_status(vsf_imp_i2s_t *i2s_ptr) \
261 { \
262 VSF_HAL_ASSERT(i2s_ptr != NULL); \
263 return vsf_remap_i2s_status(i2s_ptr); \
264 } \
265 vsf_i2s_capability_t vsf_imp_i2s_capability(vsf_imp_i2s_t *i2s_ptr) \
266 { \
267 VSF_HAL_ASSERT(i2s_ptr != NULL); \
268 return vsf_remap_i2s_capability(i2s_ptr); \
269 } \
270 vsf_err_t vsf_imp_i2s_get_configuration(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_cfg_t *cfg_ptr) \
271 { \
272 VSF_HAL_ASSERT(i2s_ptr != NULL); \
273 return vsf_remap_i2s_get_configuration(i2s_ptr, cfg_ptr); \
274 } \
275 vsf_err_t vsf_imp_i2s_ctrl(vsf_imp_i2s_t *i2s_ptr, vsf_i2s_ctrl_t ctrl, void *param)\
276 { \
277 VSF_HAL_ASSERT(i2s_ptr != NULL); \
278 return vsf_remap_i2s_ctrl(i2s_ptr, ctrl, param); \
279 }
280#endif
281
282/*============================ MACROFIED FUNCTIONS ===========================*/
283/*============================ LOCAL VARIABLES ===============================*/
284/*============================ IMPLEMENTATION ================================*/
285/*============================ GLOBAL VARIABLES ==============================*/
286
287#define VSF_HAL_TEMPLATE_IMP_NAME _i2s
288#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _I2S
289
290#if !defined(VSF_I2S_CFG_IMP_PREFIX) && !defined(VSF_I2S_CFG_IMP_DEVICE_PREFIX)
291# error "Please define VSF_I2S_CFG_IMP_PREFIX in i2s driver"
292#endif
293
294#if !defined(VSF_I2S_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_I2S_CFG_IMP_DEVICE_UPCASE_PREFIX)
295# error "Please define VSF_I2S_CFG_IMP_UPCASE_PREFIX in i2s driver"
296#endif
297
298#ifndef VSF_I2S_CFG_IMP_COUNT_MASK_PREFIX
299# define VSF_I2S_CFG_IMP_COUNT_MASK_PREFIX VSF_I2S_CFG_IMP_UPCASE_PREFIX
300#endif
301
302#ifdef VSF_I2S_CFG_IMP_REMAP_FUNCTIONS
303# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_I2S_CFG_IMP_REMAP_FUNCTIONS
304#endif
305
307
308#undef VSF_I2S_CFG_IMP_PREFIX
309#undef VSF_I2S_CFG_IMP_UPCASE_PREFIX
310#undef VSF_I2S_CFG_IMP_DEVICE_PREFIX
311#undef VSF_I2S_CFG_IMP_DEVICE_UPCASE_PREFIX
312#undef VSF_I2S_CFG_IMP_COUNT_MASK_PREFIX
313#undef VSF_I2S_CFG_IMP_LV0
314#undef VSF_I2S_CFG_IMP_REMAP_FUNCTIONS
315#undef VSF_I2S_CFG_IMP_REMAP_PREFIX
316#undef VSF_I2S_CFG_IMP_RENAME_DEVICE_PREFIX
317#undef VSF_I2S_CFG_IMP_HAS_OP
318#undef VSF_I2S_CFG_IMP_EXTERN_OP
319
320#undef vsf_imp_i2s_t
321#undef vsf_imp_i2s_init
322#undef vsf_imp_i2s_enable
323#undef vsf_imp_i2s_disable
324#undef vsf_imp_i2s_status
325#undef vsf_imp_i2s_capability
326#undef vsf_imp_i2s_tx_init
327#undef vsf_imp_i2s_tx_fini
328#undef vsf_imp_i2s_tx_get_configuration
329#undef vsf_imp_i2s_tx_start
330#undef vsf_imp_i2s_rx_init
331#undef vsf_imp_i2s_rx_fini
332#undef vsf_imp_i2s_rx_get_configuration
333#undef vsf_imp_i2s_rx_start
334#undef vsf_imp_i2s_get_configuration
335#undef vsf_imp_i2s_ctrl
336
337#undef vsf_remap_i2s_t
338#undef vsf_remap_i2s_init
339#undef vsf_remap_i2s_enable
340#undef vsf_remap_i2s_disable
341#undef vsf_remap_i2s_status
342#undef vsf_remap_i2s_capability
343#undef vsf_remap_i2s_tx_init
344#undef vsf_remap_i2s_tx_fini
345#undef vsf_remap_i2s_tx_get_configuration
346#undef vsf_remap_i2s_tx_start
347#undef vsf_remap_i2s_rx_init
348#undef vsf_remap_i2s_rx_fini
349#undef vsf_remap_i2s_rx_get_configuration
350#undef vsf_remap_i2s_rx_start
351#undef vsf_remap_i2s_get_configuration
352#undef vsf_remap_i2s_ctrl
353
354#undef VSF_HAL_TEMPLATE_IMP_NAME
355#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
356
357/*============================ STATIC ASSERTIONS ==============================*/
358
359/* User-extensible macros for custom mode and IRQ mask values
360 * Users can define these macros before including this template to append
361 * their custom enum values to the uniqueness checks.
362 *
363 * Check modes for custom values:
364 * VSF_I2S_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
365 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
366 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
367 * VSF_I2S_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
368 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
369 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
370 *
371 * Example usage in vendor driver:
372 * #define VSF_I2S_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
373 * #define VSF_I2S_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
374 * #define VSF_I2S_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
375 * #define VSF_I2S_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
376 * #include "hal/driver/common/i2s/i2s_template.inc"
377 */
378
379
380#ifdef VSF_I2S_CFG_MODE_CHECK_UNIQUE
381/* Default mode lists - can be redefined by users before including this file */
382#ifndef VSF_I2S_CHECK_UNIQUE_MODE_MODES
383# define VSF_I2S_CHECK_UNIQUE_MODE_MODES \
384 VSF_I2S_MODE_MASTER, \
385 VSF_I2S_MODE_SLAVE
386#endif
387
388#ifndef VSF_I2S_CHECK_UNIQUE_DATA_BITLEN_MODES
389# define VSF_I2S_CHECK_UNIQUE_DATA_BITLEN_MODES \
390 VSF_I2S_DATA_BITLEN_16, \
391 VSF_I2S_DATA_BITLEN_24, \
392 VSF_I2S_DATA_BITLEN_32
393#endif
394
395#ifndef VSF_I2S_CHECK_UNIQUE_FRAME_BITLEN_MODES
396# define VSF_I2S_CHECK_UNIQUE_FRAME_BITLEN_MODES \
397 VSF_I2S_FRAME_BITLEN_16, \
398 VSF_I2S_FRAME_BITLEN_24, \
399 VSF_I2S_FRAME_BITLEN_32
400#endif
401
402#ifndef VSF_I2S_CHECK_UNIQUE_STANDARD_MODES
403# define VSF_I2S_CHECK_UNIQUE_STANDARD_MODES \
404 VSF_I2S_STANDARD_PHILIPS, \
405 VSF_I2S_STANDARD_MSB, \
406 VSF_I2S_STANDARD_LSB
407#endif
408
409/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
410/* Check uniqueness within each functional group */
411
412/* Check mode uniqueness - all mode modes should have different values
413 * Mandatory: VSF_I2S_MODE_MASTER, VSF_I2S_MODE_SLAVE
414 */
419);
420
421/* Check data bit length uniqueness - all data bit length modes should have different values
422 * Mandatory: VSF_I2S_DATA_BITLEN_16
423 * Implementation Required: VSF_I2S_DATA_BITLEN_24, VSF_I2S_DATA_BITLEN_32
424 */
430#endif
433#endif
434);
435
436/* Check frame bit length uniqueness - all frame bit length modes should have different values
437 * Mandatory: VSF_I2S_FRAME_BITLEN_16
438 * Implementation Required: VSF_I2S_FRAME_BITLEN_24, VSF_I2S_FRAME_BITLEN_32
439 */
445#endif
448#endif
449);
450
451/* Check standard uniqueness - all standard modes should have different values
452 * Mandatory: VSF_I2S_STANDARD_PHILIPS
453 * Implementation Required: VSF_I2S_STANDARD_MSB, VSF_I2S_STANDARD_LSB
454 */
460#endif
463#endif
464);
465
466#ifdef VSF_I2S_CUSTOM_MODE_VALUES
467/* Check uniqueness among custom mode values using user-specified check mode */
469#endif
470
473 /* Mandatory modes - always included */
476 /* Implementation Required modes - conditionally included */
479#endif
482#endif
485#endif
488#endif
491#endif
494#endif
495 /* User-defined modes - appended by user configuration */
496#ifdef VSF_I2S_CUSTOM_MODE_VALUES
497 , VSF_I2S_CUSTOM_MODE_VALUES
498#endif
499);
500
501#undef VSF_I2S_CHECK_UNIQUE_MODE_MODES
502#undef VSF_I2S_CHECK_UNIQUE_DATA_BITLEN_MODES
503#undef VSF_I2S_CHECK_UNIQUE_FRAME_BITLEN_MODES
504#undef VSF_I2S_CHECK_UNIQUE_STANDARD_MODES
505#endif /* VSF_I2S_CFG_MODE_CHECK_UNIQUE */
506
507/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
508
509#ifdef VSF_I2S_CFG_IRQ_MASK_CHECK_UNIQUE
510
511#ifdef VSF_I2S_CUSTOM_IRQ_MASK_VALUES
512/* Check uniqueness among custom IRQ mask values using user-specified check mode */
514#endif
515
516/* Check uniqueness within vsf_i2s_irq_mask_t enum */
517
518/* Check IRQ mask uniqueness - all IRQ mask bits should have different values
519 * Mandatory: VSF_I2S_IRQ_MASK_TX_TGL_BUFFER, VSF_I2S_IRQ_MASK_RX_TGL_BUFFER
520 */
523 /* Mandatory IRQ masks - always included */
526 /* User-defined IRQ masks - appended by user configuration */
527#ifdef VSF_I2S_CUSTOM_IRQ_MASK_VALUES
528 , VSF_I2S_CUSTOM_IRQ_MASK_VALUES
529#endif
530);
531#endif /* VSF_I2S_CFG_IRQ_MASK_CHECK_UNIQUE */
532
533#undef VSF_I2S_CFG_MODE_CHECK_UNIQUE
534#undef VSF_I2S_CFG_IRQ_MASK_CHECK_UNIQUE
535#undef VSF_I2S_CUSTOM_MODE_VALUES
536#undef VSF_I2S_CUSTOM_IRQ_MASK_VALUES
537
538#endif // VSF_HAL_USE_I2S == ENABLED
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_I2S_STANDARD_LSB
Definition i2s.h:64
@ VSF_I2S_DATA_BITLEN_16
Definition i2s.h:54
@ VSF_I2S_FRAME_BITLEN_32
Definition i2s.h:61
@ VSF_I2S_FRAME_BITLEN_16
Definition i2s.h:59
@ VSF_I2S_STANDARD_MSB
Definition i2s.h:42
@ VSF_I2S_MODE_MASTER
Definition i2s.h:38
@ VSF_I2S_DATA_BITLEN_32
Definition i2s.h:56
@ VSF_I2S_STANDARD_PHILIPS
Definition i2s.h:43
@ VSF_I2S_DATA_BITLEN_24
Definition i2s.h:55
@ VSF_I2S_FRAME_BITLEN_24
Definition i2s.h:60
@ VSF_I2S_MODE_SLAVE
Definition i2s.h:39
@ VSF_I2S_IRQ_MASK_RX_TGL_BUFFER
Definition i2s.h:34
@ VSF_I2S_IRQ_MASK_TX_TGL_BUFFER
Definition i2s.h:33
#define NULL
Definition lvgl.h:26
Definition vsf_template_i2s.h:294
i2s_capability
Definition vsf_template_i2s.h:303
i2s configuration
Definition vsf_template_i2s.h:401
#define VSF_I2S_CFG_IRQ_MASK_CHECK_UNIQUE
Definition i2s.c:288
#define VSF_I2S_CFG_MODE_CHECK_UNIQUE
Definition i2s.c:287
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
vsf_i2s_ctrl_t
I2S control commands for hardware-specific operations.
Definition vsf_template_i2s.h:316
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
Generated from commit: vsfteam/vsf@cd15067