VSF Documented
vsf_template_instance_declaration.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
19//
20// Example - In your custom driver declaration file (e.g. driver.h that you need to provide):
21// device.h
22// #define VSF_HW_SPI_COUNT 4
23// #define VSF_HW_SPI0_IRQN SPI0_IRQn
24// #define VSF_HW_SPI0_IRQHandler SPI0_Handler
25// ...
26//
27// driver.h:
28// #include "hal/driver/common/template/vsf_template_spi.h" // Include VSF HAL provided template
29// #define VSF_SPI_CFG_DEC_PREFIX vsf_hw
30// #define VSF_SPI_CFG_DEC_UPCASE_PREFIX VSF_HW
31// #include "hal/driver/common/spi/spi_template.h" // Include VSF HAL provided template
32//
33// Note: VSF HAL already provides templates like spi_template.h that define:
34// #define VSF_HAL_TEMPLATE_DEC_NAME _spi
35// #define VSF_HAL_TEMPLATE_DEC_UPCASE_NAME _SPI
36//
37// These examples demonstrate the configuration pattern where you provide the driver-specific
38// configuration in your declaration file, and then include the VSF HAL provided templates.
39
40/**************************** prefix *******************************************/
41
42// VSF_SPI_CFG_DEC_UPCASE_PREFIX -> VSF_SPI_CFG_DEC_RENAME_DEVICE_PREFIX -> ENABLED or DISABLED
43#ifndef VSF_HAL_TEMPLATE_DEC_RENAME_DEVICE_PREFIX
44# define VSF_HAL_TEMPLATE_DEC_RENAME_DEVICE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_RENAME_DEVICE_PREFIX)
45#endif
46
47// VSF_HAL_TEMPLATE_DEC_PREFIX -> VSF_SPI_CFG_DEC_PREFIX -> vsf_hw (default) or other(for example, vsf_example)
48#ifndef VSF_HAL_TEMPLATE_DEC_PREFIX
49# define VSF_HAL_TEMPLATE_DEC_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_PREFIX)
50#endif
51
52// VSF_HAL_TEMPLATE_DEC_UPCASE_PREFIX -> VSF_SPI_CFG_DEC_UPCASE_PREFIX -> VSF_HW (default) or other(for example, VSF_EXAMPLE)
53#ifndef VSF_HAL_TEMPLATE_DEC_UPCASE_PREFIX
54# define VSF_HAL_TEMPLATE_DEC_UPCASE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_UPCASE_PREFIX)
55#endif
56
57
58#ifndef VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX
59# if VSF_HAL_TEMPLATE_DEC_RENAME_DEVICE_PREFIX == ENABLED
60// VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX -> VSF_SPI_CFG_DEC_DEVICE_PREFIX -> vsf_hw_qspi (for example)
61# define VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_DEVICE_PREFIX)
62# else
63// VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX -> VSF_SPI_CFG_DEC_DEVICE_PREFIX -> vsf_hw_spi (default)
64# define VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_PREFIX, VSF_HAL_TEMPLATE_DEC_NAME)
65# endif
66#endif
67
68#ifndef VSF_HAL_TEMPLATE_DEC_REMAP
69# define VSF_HAL_TEMPLATE_DEC_REMAP VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_REMAP)
70#endif
71
72// VSF_HAL_TEMPLATE_DEC_PREFIX -> VSF_SPI_CFG_DEC_REMAP_PREFIX -> vsf_hw(default) or other(for example, vsf_example)
73#ifndef VSF_HAL_TEMPLATE_DEC_REMAP_PREFIX
74# define VSF_HAL_TEMPLATE_DEC_REMAP_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_REMAP_PREFIX)
75#endif
76
77// VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX -> VSF_SPI_CFG_DEC_COUNT_MASK_PREFIX -> VSF_HW (default) or other(for example, VSF_EXAMPLE)
78#ifndef VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX
79# if VSF_HAL_TEMPLATE_DEC_RENAME_DEVICE_PREFIX == ENABLED
80# define VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_DEVICE_UPCASE_PREFIX)
81# else
82# define __VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_COUNT_MASK_PREFIX)
83# define VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX VSF_MCONNECT(__VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME)
84# endif
85#endif
86
87/**************************** remap declaration ********************************/
88
89// VSF_HAL_TEMPLATE_DEC_REMAP_TYPE -> vsf_hw_spi_t or vsf_example_spi_t
90#ifndef VSF_HAL_TEMPLATE_DEC_REMAP_TYPE
91# define VSF_HAL_TEMPLATE_DEC_REMAP_TYPE VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_REMAP_PREFIX, VSF_HAL_TEMPLATE_DEC_NAME, _t)
92#endif
93// VSF_HAL_TEMPLATE_DEC_TYPE -> vsf_hw_spi_t
94#ifndef VSF_HAL_TEMPLATE_DEC_TYPE
95# define VSF_HAL_TEMPLATE_DEC_TYPE VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX, _t)
96#endif
97
98#if VSF_HAL_TEMPLATE_DEC_REMAP == ENABLED
99// expand to one of the following:
100// typedef vsf_remap_example_spi_t vsf_hw_spi_t;
102#else
103// expand to one of the following:
104// typedef vsf_hw_spi_t vsf_hw_spi_t;
106#endif
107
108/**************************** instance declaration ********************************/
109
110// VSF_HAL_TEMPLATE_DEC_INSTANCE_APIS -> VSF_SPI_APIS (vsf_template_spi.h)
111#ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_APIS
112# define VSF_HAL_TEMPLATE_DEC_INSTANCE_APIS VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _APIS)
113#endif
114
115// VSF_SPI_APIS uses __VSF_HAL_TEMPLATE_API
116#undef __VSF_HAL_TEMPLATE_API
117#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_EXTERN
118
119/*
120extern vsf_spi_capability_t vsf_hw_spi_capability(vsf_hw_spi_t *spi_ptr);
121extern vsf_err_t vsf_hw_spi_port_config_pins(vsf_hw_spi_t *spi_ptr,
122 uint32_t pin_mask,
123 vsf_spi_cfg_t *cfg_ptr);
124extern void vsf_hw_spi_set_direction(vsf_hw_spi_t *spi_ptr,
125 uint32_t pin_mask,
126 uint32_t direction_mask);
127...
128 */
130
131
132#ifdef VSF_HAL_TEMPLATE_DEC_ADDITIONAL_API
133# ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_ADDITIONAL_API
134# define VSF_HAL_TEMPLATE_DEC_INSTANCE_ADDITIONAL_API VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _ADDITIONAL_APIS)
135# endif
136VSF_HAL_TEMPLATE_DEC_INSTANCE_ADDITIONAL_API(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX)
137#endif
138
139/**************************** multi class op ***********************************/
140
141#ifndef VSF_HAL_TEMPLATE_DEC_EXTERN_OP
142// VSF_HAL_TEMPLATE_DEC_EXTERN_OP -> VSF_SPI_CFG_DEC_EXTERN_OP
143# define VSF_HAL_TEMPLATE_DEC_EXTERN_OP VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_DEC_UPCASE_NAME, _CFG_DEC_EXTERN_OP)
144#endif
145
146#if VSF_HAL_TEMPLATE_DEC_EXTERN_OP == ENABLED
147# ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_TYPE
148// VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_TYPE -> vsf_hw_spi_op_t
149# define VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_TYPE VSF_MCONNECT(vsf, VSF_HAL_TEMPLATE_DEC_NAME, _op_t)
150# endif
151// VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_INSTANCE -> vsf_hw_spi_op
152# ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_INSTANCE
153# define VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_INSTANCE VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_PREFIX, VSF_HAL_TEMPLATE_DEC_NAME, _op)
154# endif
155// extern const vsf_hw_spi_op_t vsf_hw_spi_op;
157#endif
158
159/**************************** instance declaration *****************************/
160
161#ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_TYPE
162// VSF_HAL_TEMPLATE_DEC_INSTANCE_TYPE -> vsf_hw_spi_t
163# define VSF_HAL_TEMPLATE_DEC_INSTANCE_TYPE VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX, _t)
164#endif
165
166#ifndef VSF_HAL_TEMPLATE_DEC_LV0
167// VSF_HAL_TEMPLATE_DEC_INSTANCE -> extern vsf_hw_spi_t vsf_hw_spi0;
168# define VSF_HAL_TEMPLATE_DEC_INSTANCE(__IDX, __DONT_CARE) \
169 extern VSF_HAL_TEMPLATE_DEC_INSTANCE_TYPE VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX, __IDX);
170# define VSF_HAL_TEMPLATE_DEC_LV0 VSF_HAL_TEMPLATE_DEC_INSTANCE
171#endif
172
173#ifndef VSF_HAL_TEMPLATE_DEC_COUNT_SUFFIX
174# define VSF_HAL_TEMPLATE_DEC_COUNT_SUFFIX _COUNT
175#endif
176
177#ifndef VSF_HAL_TEMPLATE_DEC_MASK_SUFFIX
178# define VSF_HAL_TEMPLATE_DEC_MASK_SUFFIX _MASK
179#endif
180
181#ifndef VSF_HAL_TEMPLATE_DEC_DEFINED_COUNT
182// VSF_HAL_TEMPLATE_DEC_DEFINED_COUNT -> VSF_HW_SPI_COUNT -> Number (for example, 2, vsf_hw_spi0 and vsf_hw_spi1)
183# define VSF_HAL_TEMPLATE_DEC_DEFINED_COUNT VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_DEC_COUNT_SUFFIX)
184#endif
185
186#ifndef VSF_HAL_TEMPLATE_DEC_DEFINED_MASK
187// VSF_HAL_TEMPLATE_DEC_DEFINED_MASK -> VSF_HW_SPI_MASK -> Number (for example, 0x05, vsf_hw_spi0 and vsf_hw_spi2)
188# define VSF_HAL_TEMPLATE_DEC_DEFINED_MASK VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_DEC_MASK_SUFFIX)
189#endif
190
191#if !defined(VSF_HAL_TEMPLATE_DEC_COUNT) && VSF_HAL_TEMPLATE_DEC_DEFINED_COUNT
192# define VSF_HAL_TEMPLATE_DEC_COUNT VSF_HAL_TEMPLATE_DEC_DEFINED_COUNT
193#endif
194
195#if !defined(VSF_HAL_TEMPLATE_DEC_MASK) && VSF_HAL_TEMPLATE_DEC_DEFINED_MASK
196# define VSF_HAL_TEMPLATE_DEC_MASK VSF_HAL_TEMPLATE_DEC_DEFINED_MASK
197#endif
198
199#if defined(VSF_HAL_TEMPLATE_DEC_MASK) && !defined(VSF_HAL_TEMPLATE_DEC_COUNT)
200# define VSF_HAL_TEMPLATE_DEC_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HAL_TEMPLATE_DEC_MASK)
201#endif
202
203#if defined(VSF_HAL_TEMPLATE_DEC_COUNT) && !defined(VSF_HAL_TEMPLATE_DEC_MASK)
204# define VSF_HAL_TEMPLATE_DEC_MASK VSF_HAL_COUNT_TO_MASK(VSF_HAL_TEMPLATE_DEC_COUNT)
205#endif
206
207/*
208extern vsf_hw_spi_t vsf_hw_spi0;
209extern vsf_hw_spi_t vsf_hw_spi1;
210....
211 */
212#define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_DEC_MASK
213#define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_DEC_LV0
214#define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_DEC_OP
216
217/**************************** instance's array declaration *********************/
218
219#if !defined(VSF_HAL_TEMPLATE_DEC_REMOVE_ARRAY) && (VSF_HAL_TEMPLATE_DEC_MASK != 0)
220# ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_ARRAY
221# define VSF_HAL_TEMPLATE_DEC_INSTANCE_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX, s)
222# endif
223/*
224extern vsf_hw_spi_t *const vsf_hw_spis[2];
225 */
226extern VSF_HAL_TEMPLATE_DEC_INSTANCE_TYPE *const VSF_HAL_TEMPLATE_DEC_INSTANCE_ARRAY[VSF_HAL_TEMPLATE_DEC_COUNT];
227
228# ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_INDEX_ARRAY
229# define VSF_HAL_TEMPLATE_DEC_INSTANCE_INDEX_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX, _indexs)
230# endif
231/*
232extern const uint8_t vsf_hw_spi_indexs[2];
233 */
234extern const uint8_t VSF_HAL_TEMPLATE_DEC_INSTANCE_INDEX_ARRAY[VSF_HAL_TEMPLATE_DEC_COUNT];
235
236#ifndef VSF_HAL_TEMPLATE_DEC_INSTANCE_NAME_ARRAY
237# define VSF_HAL_TEMPLATE_DEC_INSTANCE_NAME_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX, _names)
238#endif
239/*
240extern const uint8_t vsf_hw_spi_names[2];
241 */
242extern const char *VSF_HAL_TEMPLATE_DEC_INSTANCE_NAME_ARRAY[VSF_HAL_TEMPLATE_DEC_COUNT];
243
244# ifndef VSF_HAL_TEMPLATE_DEC_DEVICE_ARRAY
245# define VSF_HAL_TEMPLATE_DEC_DEVICE_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX, _devices)
246# endif
247
248/*
249extern const uint8_t vsf_hw_spi_devices[2];
250 */
251extern const vsf_hal_device_t VSF_HAL_TEMPLATE_DEC_DEVICE_ARRAY[VSF_HAL_TEMPLATE_DEC_COUNT];
252#endif
253
254/**************************** undef ********************************************/
255
256#undef VSF_HAL_TEMPLATE_DEC_NAME
257#undef VSF_HAL_TEMPLATE_DEC_UPCASE_NAME
258#undef VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX
259#undef VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX
260#undef VSF_HAL_TEMPLATE_DEC_PREFIX
261#undef VSF_HAL_TEMPLATE_DEC_REMAP
262#undef VSF_HAL_TEMPLATE_DEC_REMAP_PREFIX
263#undef VSF_HAL_TEMPLATE_DEC_UPCASE_PREFIX
264#undef VSF_HAL_TEMPLATE_DEC_COUNT_MASK_PREFIX
265#undef VSF_HAL_TEMPLATE_DEC_EXTERN_OP
266#undef VSF_HAL_TEMPLATE_DEC_COUNT_SUFFIX
267#undef VSF_HAL_TEMPLATE_DEC_MASK_SUFFIX
268#undef VSF_HAL_TEMPLATE_DEC_DEFINED_COUNT
269#undef VSF_HAL_TEMPLATE_DEC_DEFINED_MASK
270#undef VSF_HAL_TEMPLATE_DEC_COUNT
271#undef VSF_HAL_TEMPLATE_DEC_MASK
272#undef VSF_HAL_TEMPLATE_DEC_TYPE
273#undef VSF_HAL_TEMPLATE_DEC_REMAP_TYPE
274#undef VSF_HAL_TEMPLATE_DEC_INSTANCE_TYPE
275#undef VSF_HAL_TEMPLATE_DEC_INSTANCE_APIS
276#undef VSF_HAL_TEMPLATE_DEC_ADDITIONAL_API
277#undef VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_TYPE
278#undef VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_INSTANCE
279#undef VSF_HAL_TEMPLATE_DEC_INSTANCE
280#undef VSF_HAL_TEMPLATE_DEC_INSTANCE_ARRAY
281#undef VSF_HAL_TEMPLATE_DEC_LV0
282#undef VSF_HAL_TEMPLATE_DEC_INSTANCE_INDEX_ARRAY
283#undef VSF_HAL_TEMPLATE_DEC_INSTANCE_NAME_ARRAY
284#undef VSF_HAL_TEMPLATE_DEC_REMOVE_ARRAY
285#undef VSF_HAL_TEMPLATE_DEC_DEVICE_ARRAY
#define VSF_HAL_TEMPLATE_DEC_COUNT
Definition pm_template.h:36
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_hal_driver.h:183
#define VSF_HAL_TEMPLATE_DEC_INSTANCE_APIS
Definition vsf_template_instance_declaration.h:112
#define VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_TYPE
Definition vsf_template_instance_declaration.h:149
#define VSF_HAL_TEMPLATE_DEC_REMAP_TYPE
Definition vsf_template_instance_declaration.h:91
#define VSF_HAL_TEMPLATE_DEC_DEVICE_PREFIX
Definition vsf_template_instance_declaration.h:61
struct VSF_HAL_TEMPLATE_DEC_REMAP_TYPE VSF_HAL_TEMPLATE_DEC_TYPE
Definition vsf_template_instance_declaration.h:101
#define VSF_HAL_TEMPLATE_DEC_INSTANCE_TYPE
Definition vsf_template_instance_declaration.h:163
#define VSF_HAL_TEMPLATE_DEC_INSTANCE_OP_INSTANCE
Definition vsf_template_instance_declaration.h:153
Generated from commit: vsfteam/vsf@3f519a5