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
23/**************************** prefex *******************************************/
24
25#ifndef VSF_HAL_TEMPLATE_IMP_PREFIX
26# define VSF_HAL_TEMPLATE_IMP_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_PREFIX)
27#endif
28
29#ifndef VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX
30# define VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_UPCASE_PREFIX)
31#endif
32
33#ifndef VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX
34# define VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_COUNT_MASK_PREFIX)
35#endif
36
37#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX
38# define VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_PREFIX)
39#endif
40
41/**************************** remap ********************************************/
42
43#ifdef VSF_HAL_CFG_IMP_REMAP_FUNCTIONS
44VSF_HAL_CFG_IMP_REMAP_FUNCTIONS
45#endif
46
47/**************************** instance op **************************************/
48
49#ifndef VSF_HAL_TEMPLATE_IMP_MULTI_CLASS
50# define VSF_HAL_TEMPLATE_IMP_MULTI_CLASS VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_MULTI_CLASS)
51#endif
52
53#if VSF_HAL_TEMPLATE_IMP_MULTI_CLASS == ENABLED
54# ifndef VSF_HAL_TEMPLATE_IMP_HAS_OP
55# define VSF_HAL_TEMPLATE_IMP_HAS_OP VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_HAS_OP)
56# endif
57# if VSF_HAL_TEMPLATE_IMP_HAS_OP
58# define VSF_HAL_TEMPLATE_IMP_OP_VAR VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, _op)
59# define VSF_HAL_TEMPLATE_IMP_OP .VSF_MCONNECT(vsf, VSF_HAL_TEMPLATE_IMP_NAME).op = & VSF_HAL_TEMPLATE_IMP_OP_VAR,
60# else
61# ifndef VSF_HAL_TEMPLATE_IMP_EXTERN_OP
62# define VSF_HAL_TEMPLATE_IMP_EXTERN_OP VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_EXTERN_OP)
63# endif
64# if VSF_HAL_TEMPLATE_IMP_EXTERN_OP == DISABLED
65# define VSF_HAL_TEMPLATE_IMP_OP_VAR VSF_MCONNECT(__, VSF_HAL_TEMPLATE_IMP_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, _op)
66# define VSF_HAL_TEMPLATE_IMP_OP_ATR static
67# else
68# define VSF_HAL_TEMPLATE_IMP_OP_VAR VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, _op)
69# define VSF_HAL_TEMPLATE_IMP_OP_ATR
70# endif
71# define VSF_HAL_TEMPLATE_IMP_OP .VSF_MCONNECT(vsf, VSF_HAL_TEMPLATE_IMP_NAME).op = & VSF_HAL_TEMPLATE_IMP_OP_VAR,
72
73# undef __VSF_HAL_TEMPLATE_API
74# define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_OP
75
76#ifndef VSF_HAL_TEMPLATE_IMP_OP_TYPE
77# define VSF_HAL_TEMPLATE_IMP_OP_TYPE VSF_MCONNECT(vsf, VSF_HAL_TEMPLATE_IMP_NAME, _op_t)
78#endif
79
80#ifndef VSF_HAL_TEMPLATE_IMP_OP_MACRO
81# define VSF_HAL_TEMPLATE_IMP_OP_MACRO VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _APIS)
82#endif
83
84/*
85static const vsf_gpio_op_t __vsf_hw_gpio_op = {
86 .capability =
87 (vsf_gpio_capability_t(*)(vsf_gpio_t *)) & vsf_hw_gpio_capability,
88 .port_config_pins = (vsf_err_t(*)(vsf_gpio_t *, uint32_t pin_mask,
89 vsf_gpio_cfg_t *cfg_ptr)) &
90 vsf_hw_gpio_port_config_pins,
91 ...
92};
93 */
96};
97# endif
98#else
99# define VSF_HAL_TEMPLATE_IMP_OP
100#endif
101
102/**************************** count and mask ***********************************/
103
104#ifndef VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX
105# define VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX _COUNT
106#endif
107
108#ifndef VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX
109# define VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX _MASK
110#endif
111
112#ifndef VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
113# define VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX)
114#endif
115
116#ifndef VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
117# define VSF_HAL_TEMPLATE_IMP_DEFINED_MASK VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX)
118#endif
119
120#if VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT || VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
121# if !defined(VSF_HAL_TEMPLATE_IMP_COUNT) && VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
122# define VSF_HAL_TEMPLATE_IMP_COUNT VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
123# endif
124
125# if !defined(VSF_HAL_TEMPLATE_IMP_MASK) && VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
126# define VSF_HAL_TEMPLATE_IMP_MASK VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
127# endif
128
129# if defined(VSF_HAL_TEMPLATE_IMP_MASK) && !defined(VSF_HAL_TEMPLATE_IMP_COUNT)
130# define VSF_HAL_TEMPLATE_IMP_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HAL_TEMPLATE_IMP_MASK)
131# endif
132
133# if defined(VSF_HAL_TEMPLATE_IMP_COUNT) && !defined(VSF_HAL_TEMPLATE_IMP_MASK)
134# define VSF_HAL_TEMPLATE_IMP_MASK ((1ull << VSF_HAL_TEMPLATE_IMP_COUNT) - 1)
135# endif
136
137/**************************** instance and array **************************************/
138
139/*
140vsf_hw_gpio_t vsf_hw_gpio0 = {
141 .vsf_gpio.op = &__vsf_hw_gpio_op,
142 ...
143};
144vsf_hw_gpio_t vsf_hw_gpio1 = {
145 .vsf_gpio.op = &__vsf_hw_gpio_op,
146 ...
147};
148 */
149# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
150# define __VSF_HAL_TEMPLATE_MACRO VSF_MCONNECT(VSF, VSF_HAL_TEMPLATE_IMP_UPCASE_NAME, _CFG_IMP_LV0)
151# define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_IMP_OP
153
154/**************************** instance's array *********************************/
155
156/*
157vsf_hw_gpio_t *const vsf_hw_gpios[2] = {
158 &vsf_hw_gpio0,
159 &vsf_hw_gpio1,
160};
161 */
162# if !defined(VSF_HAL_TEMPLATE_IMP_REMOVE_ARRAY)
163# ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY
164# define VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, s)
165# endif
166# ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE
167# define VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, _t)
168# endif
169VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE * const VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
170# ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM
171# define VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM(__INDEX, __NULL) \
172 &VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, __INDEX),
173# endif
174
175# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
176# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM
177# define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_IMP_OP
179};
180
181/*
182const uint8_t vsf_hw_gpio_indexs[2] = {
183 0,
184 1,
185};
186 */
187#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY
188# define VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, _indexs)
189#endif
190const uint8_t VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
191# ifndef VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM
192# define VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM(__INDEX, __NULL) __INDEX,
193# endif
194# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
195# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM
196# define __VSF_HAL_TEMPLATE_ARG VSF_HAL_TEMPLATE_IMP_OP
198};
199
200/*
201const char *vsf_hw_gpio_names[2] = {
202 "vsf_hw_gpio" "0",
203 "vsf_hw_gpio" "1",
204};
205 */
206#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY
207# define VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, _names)
208#endif
209const char* VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
210# ifndef VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM
211# undef __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM
212# define __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
213 # __ARG #__INDEX,
214# define VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
215 __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG)
216# endif
217# define __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
218 # __ARG #__INDEX,
219# define VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG) \
220 __VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM(__INDEX, __ARG)
221# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
222# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_IMP_NAME_ARRAY_ITEM
223# define __VSF_HAL_TEMPLATE_ARG VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME)
225};
226
227/*
228const vsf_hal_device_t vsf_hw_gpio_devices[2] = {
229 {
230 .pointer = &vsf_hw_gpio0,
231 .name = "vsf_hw_gpio" "0",
232 },
233 {
234 .pointer = &vsf_hw_gpio1,
235 .name = "vsf_hw_gpio" "1",
236 },
237};
238 */
239#ifndef VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY
240# define VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME, _devices)
241#endif
242const vsf_hal_device_t VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY[VSF_HAL_TEMPLATE_IMP_COUNT] = {
243# define __VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM(__INDEX, __ARG)\
244 { .pointer = &VSF_MCONNECT(__ARG, __INDEX), .name = # __ARG #__INDEX, },
245# define VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM(__INDEX, __ARG) \
246 __VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM(__INDEX, __ARG)
247# define __VSF_HAL_TEMPLATE_MASK VSF_HAL_TEMPLATE_IMP_MASK
248# define __VSF_HAL_TEMPLATE_MACRO VSF_HAL_TEMPLATE_IMP_INSTANCE_DEVICE_ARRAY_ITEM
249# define __VSF_HAL_TEMPLATE_ARG VSF_MCONNECT(VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX, VSF_HAL_TEMPLATE_IMP_NAME)
251};
252# endif
253#endif
254
255/**************************** undef ********************************************/
256
257#undef VSF_HAL_TEMPLATE_IMP_NAME
258#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
259#undef VSF_HAL_TEMPLATE_IMP_PREFIX
260#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_PREFIX
261#undef VSF_HAL_TEMPLATE_IMP_UPCASE_PREFIX
262#undef VSF_HAL_TEMPLATE_IMP_REMAP_PREFIX
263#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_TYPE
264#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY
265#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_ARRAY_ITEM
266#undef VSF_HAL_TEMPLATE_INDEX_ARRAY_ITEM
267#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_INDEX_ARRAY
268#undef VSF_HAL_TEMPLATE_IMP_INSTANCE_NAME_ARRAY
269#undef VSF_HAL_TEMPLATE_IMP_EXTERN_OP
270#undef VSF_HAL_TEMPLATE_IMP_COUNT
271#undef VSF_HAL_TEMPLATE_IMP_MASK
272#undef VSF_HAL_TEMPLATE_IMP_COUNT_MASK_PREFIX
273#undef VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX
274#undef VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX
275#undef VSF_HAL_TEMPLATE_IMP_DEFINED_COUNT
276#undef VSF_HAL_TEMPLATE_IMP_DEFINED_MASK
277#undef VSF_HAL_TEMPLATE_IMP_LV0
278#undef VSF_HAL_TEMPLATE_IMP_MULTI_CLASS
279#undef VSF_HAL_TEMPLATE_IMP_HAS_OP
280#undef VSF_HAL_TEMPLATE_IMP_OP_TYPE
281#undef VSF_HAL_TEMPLATE_IMP_OP_MACRO
282#undef VSF_HAL_TEMPLATE_IMP_OP_VAR
283#undef VSF_HAL_TEMPLATE_IMP_OP
284#undef VSF_HAL_TEMPLATE_IMP_REMOVE_ARRAY
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_hal_driver.h:183
#define VSF_HAL_TEMPLATE_IMP_OP_VAR
Definition vsf_template_instance_implementation.h:65
#define VSF_HAL_TEMPLATE_IMP_OP_MACRO
Definition vsf_template_instance_implementation.h:81
#define VSF_HAL_TEMPLATE_IMP_OP_ATR
Definition vsf_template_instance_implementation.h:66
#define VSF_HAL_TEMPLATE_IMP_PREFIX
Definition vsf_template_instance_implementation.h:26
#define VSF_HAL_TEMPLATE_IMP_OP_TYPE
Definition vsf_template_instance_implementation.h:77