VSF Documented
vsf_template_instance_implementation.h
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/*============================ MACROFIED FUNCTIONS ===========================*/
19/*============================ PROTOTYPES ====================================*/
20/*============================ LOCAL VARIABLES ===============================*/
21
22// Here's an example showing the complete configuration pattern:
23
24// 1. In your device.h file, define hardware-specific parameters:
25// device.h
26// #define VSF_HW_SPI_COUNT 4 // Total number of SPI instances available
27// #define VSF_HW_SPI0_IRQN SPI0_IRQn // Interrupt number for SPI0
28// #define VSF_HW_SPI0_IRQHandler SPI0_Handler // Handler function for SPI0 interrupts
29// ...
30
31// 2. In your implementation file (e.g., spi.c), configure the implementation prefixes:
32// spi.c
33// # define VSF_SPI_CFG_IMP_PREFIX vsf_hw // Lowercase prefix for functions and variables
34// # define VSF_SPI_CFG_IMP_UPCASE_PREFIX VSF_HW // Uppercase prefix for macros
35//
36// The following definitions are optional and only needed when dealing with special peripherals
37// (e.g., when you need QSPI instead of standard SPI):
38// # define VSF_SPI_CFG_IMP_RENAME_DEVICE_PREFIX ENABLED // Enable renaming device prefix
39// # define VSF_SPI_CFG_IMP_DEVICE_PREFIX vsf_hw_qspi // Custom device prefix when renaming
40// # define VSF_SPI_CFG_IMP_DEVICE_UPCASE_PREFIX VSF_HW_QSPI // Uppercase version of custom device prefix
41
42// 3. In the template include file (e.g., spi_template.inc), define the component name:
43// spi_template.inc
44// #define VSF_HAL_TEMPLATE_IMP_NAME _spi // Component name in lowercase with leading underscore
45// #define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _SPI // Component name in uppercase with leading underscore
46
47// These configurations work together to create appropriately named instances and functions.
48// For example, with the above configuration, you'll get:
49// - Instance names like vsf_hw_qspi0, vsf_hw_qspi1, etc.
50// - Arrays like vsf_hw_qspi_devices[], vsf_hw_qspi_names[], etc.
51// - The template handles all the repetitive implementation details automatically.
52
53/**************************** prefex *******************************************/
54
55// VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX -> VSF_SPI_CFG_IMP_RENAME_DEVICE_PREFIX -> ENABLED or DISABLED
56#ifndef VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX
57# define VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_RENAME_DEVICE_PREFIX)
58#endif
59
60// VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX -> VSF_SPI_CFG_IMP_UPCASE_PREFIX -> VSF_HW
61#ifndef VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX
62# define VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_UPCASE_PREFIX)
63#endif
64
65#ifndef VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX
66# if VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX == ENABLED
67# define VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_DEVICE_PREFIX)
68# else
69# define __VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_PREFIX)
70# define VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX VSF_MCONNECT(__VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME)
71# endif
72#endif
73
74#ifndef VSF_HAL_TEMPLATE_IMP_DEVICE_UPCASE_PREFIX
75# if VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX == ENABLED
76# define VSF_HAL_TEMPLATE_IMP_DEVICE_UPCASE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_DEVICE_UPCASE_PREFIX)
77# else
78# define __VSF_HAL_TEMPLATE_IMP_DEVICE_UPCASE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_UPCASE_PREFIX)
79# define VSF_HAL_TEMPLATE_IMP_DEVICE_UPCASE_PREFIX VSF_MCONNECT(__VSF_HAL_TEMPLATE_IMP_DEVICE_UPCASE_PREFIX, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME)
80# endif
81#endif
82
83// VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX -> VSF_SPI_CFG_IMP_COUNT_MASK_PREFIX -> VSF_HW
84#ifndef VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX
85# if VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX == ENABLED
86# define VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_DEVICE_UPCASE_PREFIX)
87# else
88# define __VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_COUNT_MASK_PREFIX)
89# define VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX VSF_MCONNECT(__VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME)
90# endif
91#endif
92
93// VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX -> VSF_SPI_CFG_IMP_PREFIX -> vsf_hw
94#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX
95# define VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX
96#endif
97
98/**************************** remap ********************************************/
99
100#ifdef VSF_HAL_CFG_IMP_REMAP_FUNCTIONS
101VSF_HAL_CFG_IMP_REMAP_FUNCTIONS
102#endif
103
104/**************************** instance op **************************************/
105
106#ifndef VSF_HAL_TEMPLATE_IMP_MULTI_CLASS
107// VSF_HAL_TEMPLATE_IMP_MULTI_CLASS -> VSF_HW_SPI_CFG_MULTI_CLASS
108# if VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX == ENABLED
109// When using RENAME_DEVICE_PREFIX, use DEVICE_UPCASE_PREFIX directly (e.g., VSF_HW_WWDT_CFG_MULTI_CLASS)
110# define VSF_HAL_TEMPLATE_IMP_MULTI_CLASS VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_UPCASE_PREFIX, _CFG_MULTI_CLASS)
111# else
112// Normal case: VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX + _WDT + _CFG_MULTI_CLASS (e.g., VSF_HW_WDT_CFG_MULTI_CLASS)
113# define VSF_HAL_TEMPLATE_IMP_MULTI_CLASS VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_MULTI_CLASS)
114# endif
115#endif
116
117#if VSF_HAL_TEMPLATE_IMP_MULTI_CLASS == ENABLED
118// VSF_HAL_TEMPLATE_IMP_OP -> VSF_HW_SPI_CFG_IMP_HAS_OP
119# ifndef VSF_HAL_TEMPLATE_IMP_HAS_OP
120# define VSF_HAL_TEMPLATE_IMP_HAS_OP VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_HAS_OP)
121# endif
122# if VSF_HAL_TEMPLATE_IMP_HAS_OP
123// VSF_HAL_TEMPLATE_IMP_OP_VAR -> vsf_hw_spi_op
124# define VSF_HAL_TEMPLATE_IMP_OP_VAR VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, _op)
125// VSF_HAL_TEMPLATE_IMP_OP -> .vsf_hw_spi.op = & vsf_hw_spi_op
126# define VSF_HAL_TEMPLATE_IMP_OP .VSF_MCONNECT(vsf, VSF_HAL_TEMPLATE_IMP_NAME).op = &VSF_HAL_TEMPLATE_IMP_OP_VAR,
127# else
128# ifndef VSF_HAL_TEMPLATE_IMP_EXTERN_OP
129// VSF_HAL_TEMPLATE_IMP_EXTERN_OP -> VSF_SPI_CFG_IMP_EXTERN_OP ->
130# define VSF_HAL_TEMPLATE_IMP_EXTERN_OP VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_EXTERN_OP)
131# endif
132# if VSF_HAL_TEMPLATE_IMP_EXTERN_OP == DISABLED
133// VSF_HAL_TEMPLATE_IMP_OP_VAR -> __vsf_hw_spi_op
134# define VSF_HAL_TEMPLATE_IMP_OP_VAR VSF_MCONNECT(__, VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, _op)
135# define VSF_HAL_TEMPLATE_IMP_OP_ATR static
136# else
137// VSF_HAL_TEMPLATE_IMP_OP_VAR -> vsf_hw_spi_op
138# define VSF_HAL_TEMPLATE_IMP_OP_VAR VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, _op)
139# define VSF_HAL_TEMPLATE_IMP_OP_ATR
140# endif
141// VSF_HAL_TEMPLATE_IMP_OP -> .vsf_hw_spi.op = & VSF_HAL_TEMPLATE_IMP_OP_VAR
142# define VSF_HAL_TEMPLATE_IMP_OP .VSF_MCONNECT(vsf, VSF_HAL_TEMPLATE_IMP_NAME).op = &VSF_HAL_TEMPLATE_IMP_OP_VAR,
143
144# undef __VSF_HAL_TEMPLATE_API
145# define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_OP
146
147#ifndef VSF_HAL_TEMPLATE_IMP_OP_TYPE
148// VSF_HAL_TEMPLATE_IMP_OP_TYPE -> vsf_spi_op_t
149# define VSF_HAL_TEMPLATE_IMP_OP_TYPE VSF_MCONNECT(vsf, VSF_HAL_TEMPLATE_IMP_NAME, _op_t)
150#endif
151
152#ifndef VSF_HAL_TEMPLATE_IMP_OP_MACRO
153// VSF_HAL_TEMPLATE_IMP_OP_MACRO -> VSF_SPI_APIS (example: when used for SPI)
154# define VSF_HAL_TEMPLATE_IMP_OP_MACRO VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _APIS)
155#endif
156
157/*
158 * Example: When this template is used for SPI, the macro below expands to:
159 * static const vsf_spi_op_t __vsf_hw_spi_op = {
160 * .init = (vsf_err_t(*)(vsf_spi_t *, vsf_spi_cfg_t *)) & vsf_hw_spi_init,
161 * .fini = (void(*)(vsf_spi_t *)) & vsf_hw_spi_fini,
162 * .get_configuration = (vsf_err_t(*)(vsf_spi_t *, vsf_spi_cfg_t *)) & vsf_hw_spi_get_configuration,
163 * .capability = (vsf_spi_capability_t(*)(vsf_spi_t *)) & vsf_hw_spi_capability,
164 * .enable = (fsm_rt_t(*)(vsf_spi_t *)) & vsf_hw_spi_enable,
165 * .disable = (fsm_rt_t(*)(vsf_spi_t *)) & vsf_hw_spi_disable,
166 * .irq_enable = (void(*)(vsf_spi_t *, vsf_spi_irq_mask_t)) & vsf_hw_spi_irq_enable,
167 * .irq_disable = (void(*)(vsf_spi_t *, vsf_spi_irq_mask_t)) & vsf_hw_spi_irq_disable,
168 * .irq_clear = (vsf_spi_irq_mask_t(*)(vsf_spi_t *, vsf_spi_irq_mask_t)) & vsf_hw_spi_irq_clear,
169 * .status = (vsf_spi_status_t(*)(vsf_spi_t *)) & vsf_hw_spi_status,
170 * .cs_active = (vsf_err_t(*)(vsf_spi_t *, uint_fast8_t)) & vsf_hw_spi_cs_active,
171 * .cs_inactive = (vsf_err_t(*)(vsf_spi_t *, uint_fast8_t)) & vsf_hw_spi_cs_inactive,
172 * .request_transfer = (vsf_err_t(*)(vsf_spi_t *, void *, void *, uint_fast32_t)) & vsf_hw_spi_request_transfer,
173 * .cancel_transfer = (vsf_err_t(*)(vsf_spi_t *)) & vsf_hw_spi_cancel_transfer,
174 * ...
175 * };
176 */
179};
180# endif
181#else
182# define VSF_HAL_TEMPLATE_IMP_OP
183#endif
184
185/**************************** count and mask ***********************************/
186
187#ifndef VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX
188# define VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX _COUNT
189#endif
190
191#ifndef VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX
192# define VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX _MASK
193#endif
194
195#ifndef VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
196// VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT -> VSF_HW_SPI_COUNT -> Number(for example, 2, vsf_hw_spi0 and vsf_hw_spi1)
197# define VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX)
198#endif
199
200#ifndef VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
201// VSF_HAL_TEMPLATE_IMP_DEFINED_MASK -> VSF_HW_SPI_MASK -> Number (for example, 0x05, vsf_hw_spi0 and vsf_hw_spi2)
202# define VSF_HAL_TEMPLATE_IMP_DEFINED_MASK VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX)
203#endif
204
205#if VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT || VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
206# if !defined(VSF_HAL_TEMPLATE_IMP_COUNT) && VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
207# define VSF_HAL_TEMPLATE_IMP_COUNT VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
208# endif
209
210# if !defined(VSF_HAL_TEMPLATE_IMP_MASK) && VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
211# define VSF_HAL_TEMPLATE_IMP_MASK VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
212# endif
213
214# if defined(VSF_HAL_TEMPLATE_IMP_MASK) && !defined(VSF_HAL_TEMPLATE_IMP_COUNT)
215# define VSF_HAL_TEMPLATE_IMP_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HAL_TEMPLATE_IMP_MASK)
216# endif
217
218# if defined(VSF_HAL_TEMPLATE_IMP_COUNT) && !defined(VSF_HAL_TEMPLATE_IMP_MASK)
219# define VSF_HAL_TEMPLATE_IMP_MASK VSF_HAL_COUNT_TO_MASK(VSF_HAL_TEMPLATE_IMP_COUNT)
220# endif
221
222/**************************** instance and array **************************************/
223
224/*
225vsf_hw_spi_t vsf_hw_spi0 = {
226 .vsf_spi.op = &__vsf_hw_spi_op,
227 ...
228};
229vsf_hw_spi_t vsf_hw_spi1 = {
230 .vsf_spi.op = &__vsf_hw_spi_op,
231 ...
232};
233 */
234# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
235# define __VSF_HAL_TEMPLATE_MACRO VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_LV0)
236# define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_IMP_OP
238
239/**************************** instance's array *********************************/
240
241/*
242vsf_hw_spi_t *const vsf_hw_spis[2] = {
243 &vsf_hw_spi0,
244 &vsf_hw_spi1,
245};
246 */
247# if !defined(VSF_HAL_TEMPLATE_IMP_REMOVE_ARRAY)
248# ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY
249# define VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, s)
250# endif
251# ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE
252# define VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, _t)
253# endif
254VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE * const VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
255# ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM
256# define VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM(__INDEX, __NULL) \
257 &VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, __INDEX),
258# endif
259
260# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
261# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM
262# define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_IMP_OP
264};
265
266/*
267const uint8_t vsf_hw_spi_indexs[2] = {
268 0,
269 1,
270};
271 */
272#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY
273# define VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, _indexs)
274#endif
275const uint8_t VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
276# ifndef VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM
277# define VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM(__INDEX, __NULL) __INDEX,
278# endif
279# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
280# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM
281# define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_IMP_OP
283};
284
285/*
286const char *vsf_hw_spi_names[2] = {
287 "vsf_hw_spi" "0",
288 "vsf_hw_spi" "1",
289};
290 */
291#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY
292# define VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, _names)
293#endif
294const char* VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
295# ifndef VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM
296# undef __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM
297# define __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
298 # __ARG #__INDEX,
299# define VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
300 __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG)
301# endif
302# define __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
303 # __ARG #__INDEX,
304# define VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
305 __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG)
306# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
307# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM
308# define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX
310};
311
312/*
313const vsf_hal_device_t vsf_hw_spi_devices[2] = {
314 {
315 .pointer = &vsf_hw_spi0,
316 .name = "vsf_hw_spi" "0",
317 },
318 {
319 .pointer = &vsf_hw_spi1,
320 .name = "vsf_hw_spi" "1",
321 },
322};
323 */
324#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY
325# define VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX, _devices)
326#endif
327const vsf_hal_device_t VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
328# define __VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM(__INDEX, __ARG)\
329 { .pointer = &VSF_MCONNECT(__ARG, __INDEX), .name = # __ARG #__INDEX, },
330# define VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM(__INDEX, __ARG) \
331 __VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM(__INDEX, __ARG)
332# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
333# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM
334# define __VSF_HAL_TEMPLATE_ARG VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX)
336};
337# endif
338#endif
339
340/**************************** undef ********************************************/
341
342#undef __VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX
343#undef VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX
344#undef __VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX
345#undef VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX
346
347#undef VSF_HAL_TEMPLATE_IMP_RENAME_LV0_PREFIX
348#undef VSF_HAL_TEMPLATE_IMP_RENAME_DEVICE_PREFIX
349#undef VSF_HAL_TEMPLATE_IMP_NAME
350#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
351#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX
352#undef VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX
353#undef VSF_HAL_TEMPLATE_IMP_REMAP_PREFIX
354#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE
355#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY
356#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM
357#undef VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM
358#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY
359#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY
360#undef VSF_HAL_TEMPLATE_IMP_EXTERN_OP
361#undef VSF_HAL_TEMPLATE_IMP_COUNT
362#undef VSF_HAL_TEMPLATE_IMP_MASK
363#undef VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX
364#undef VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX
365#undef VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX
366#undef VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
367#undef VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
368#undef VSF_HAL_TEMPLATE_IMP_LV0
369#undef VSF_HAL_TEMPLATE_IMP_MULTI_CLASS
370#undef VSF_HAL_TEMPLATE_IMP_HAS_OP
371#undef VSF_HAL_TEMPLATE_IMP_OP_TYPE
372#undef VSF_HAL_TEMPLATE_IMP_OP_MACRO
373#undef VSF_HAL_TEMPLATE_IMP_OP_VAR
374#undef VSF_HAL_TEMPLATE_IMP_OP
375#undef VSF_HAL_TEMPLATE_IMP_REMOVE_ARRAY
376#undef VSF_HAL_TEMPLATE_IMP_OP_ATR
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_hal_driver.h:184
#define VSF_HAL_TEMPLATE_IMP_OP_VAR
Definition vsf_template_instance_implementation.h:134
#define VSF_HAL_TEMPLATE_IMP_OP_MACRO
Definition vsf_template_instance_implementation.h:154
#define VSF_HAL_TEMPLATE_IMP_DEVICE_PREFIX
Definition vsf_template_instance_implementation.h:67
#define VSF_HAL_TEMPLATE_IMP_OP_ATR
Definition vsf_template_instance_implementation.h:135
#define VSF_HAL_TEMPLATE_IMP_OP_TYPE
Definition vsf_template_instance_implementation.h:149
Generated from commit: vsfteam/vsf@3966856