VSF Documented
gpio_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/*============================ INCLUDES ======================================*/
19
21
22#if VSF_HAL_USE_GPIO == ENABLED
23
24/*============================ MACROS ========================================*/
25
26#ifndef VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX
27# define VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX DISABLED
28#endif
29
30#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
31# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT DISABLED
32#endif
33
34#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
35# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT DISABLED
36#endif
37
38#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
39# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT DISABLED
40#endif
41
42#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
43# define VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION DISABLED
44#endif
45
46#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_SET
47# define VSF_GPIO_CFG_REIMPLEMENT_API_SET DISABLED
48#endif
49
50#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
51# define VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR DISABLED
52#endif
53
54#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
55# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET DISABLED
56#endif
57
58#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
59# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR DISABLED
60#endif
61
62#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION
63# define VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION DISABLED
64#endif
65
66#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER
67# define VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER DISABLED
68#endif
69
70#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN
71# define VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN DISABLED
72#endif
73
74#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS
75# define VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS DISABLED
76#endif
77
78#ifndef VSF_GPIO_CFG_CHANGE_DIR_FIRST
79# define VSF_GPIO_CFG_CHANGE_DIR_FIRST ENABLED
80#endif
81
82#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN
83# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN 1
84#endif
85
86#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
87# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET 0
88#endif
89
90#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
91# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR 0
92#endif
93
94#ifndef VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT
95# define VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT 1
96#endif
97
98#ifndef VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_GPIO_OUTPUT_MODE
99# define VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_GPIO_OUTPUT_MODE 0
100#endif
101
102#ifndef VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_ALTERNATE_MODE
103# define VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_ALTERNATE_MODE 0
104#endif
105
106#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
107# define VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
108#endif
109
110#ifndef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION
111# define VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION DISABLED
112#endif
113
114#ifdef VSF_GPIO_CFG_IMP_REMAP_PREFIX
115# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
116# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
117# undef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
118# undef VSF_GPIO_CFG_REIMPLEMENT_API_SET
119# undef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
120# undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
121# undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
122# undef VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION
123# undef VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER
124# undef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
125# undef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION
126# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT ENABLED
127# define VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT ENABLED
128# define VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION ENABLED
129# define VSF_GPIO_CFG_REIMPLEMENT_API_SET ENABLED
130# define VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR ENABLED
131# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET ENABLED
132# define VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR ENABLED
133# define VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION ENABLED
134# define VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER ENABLED
135# define VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
136# define VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION ENABLED
137#endif
138
139#if VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
140# ifndef VSF_GPIO_CFG_CAPABILITY_IS_ASYNC
141# define VSF_GPIO_CFG_CAPABILITY_IS_ASYNC 0
142# endif
143
144# ifndef VSF_GPIO_CFG_CAPABILITY_PIN_COUNT
145# define VSF_GPIO_CFG_CAPABILITY_PIN_COUNT 32
146# endif
147# ifndef VSF_GPIO_CFG_CAPABILITY_PIN_MASK
148# define VSF_GPIO_CFG_CAPABILITY_PIN_MASK 0xFFFFFFFF
149# endif
150#endif
151
152#ifndef VSF_GPIO_CFG_REAL_PREFIX
153# define VSF_GPIO_CFG_REAL_PREFIX VSF_GPIO_CFG_IMP_PREFIX
154#endif
155
156#define vsf_real_gpios VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpios)
157#define vsf_real_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_t)
158#define vsf_real_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_port_config_pins)
159#define vsf_real_gpio_get_pin_configuration VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_get_pin_configuration)
160#define vsf_real_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_read)
161#define vsf_real_gpio_read_output_register VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_read_output_register)
162#define vsf_real_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_input)
163#define vsf_real_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_output)
164#define vsf_real_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_get_direction)
165#define vsf_real_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set_direction)
166#define vsf_real_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_switch_direction)
167#define vsf_real_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_write)
168#define vsf_real_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_set)
169#define vsf_real_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_clear)
170#define vsf_real_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_output_and_set)
171#define vsf_real_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_output_and_clear)
172#define vsf_real_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_capability)
173#define vsf_real_gpio_exti_irq_get_configuration VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_exti_irq_get_configuration)
174#define vsf_real_gpio_port_config_pin VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_port_config_pin)
175#define vsf_real_gpio_ports_config_pin VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_ports_config_pin)
176#define vsf_real_gpio_ports_config_pins VSF_MCONNECT(VSF_GPIO_CFG_REAL_PREFIX, _gpio_ports_config_pins)
177
178/*============================ MACROFIED FUNCTIONS ===========================*/
179/*============================ PROTOTYPES ====================================*/
180/*============================ LOCAL VARIABLES ===============================*/
181/*============================ MACROFIED FUNCTIONS ===========================*/
182/*============================ IMPLEMENTATION ================================*/
183
184#if VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT == DISABLED
185void vsf_real_gpio_set_input(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
186{
187 VSF_HAL_ASSERT(NULL != gpio_ptr);
188 VSF_HAL_ASSERT(0 != pin_mask);
189
190 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, 0);
191}
192#endif
193
194#if VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT == DISABLED
195void vsf_real_gpio_set_output(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
196{
197 VSF_HAL_ASSERT(NULL != gpio_ptr);
198 VSF_HAL_ASSERT(0 != pin_mask);
199
200 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, pin_mask);
201}
202#endif
203
204#if VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION == DISABLED
205void vsf_real_gpio_switch_direction(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
206{
207 VSF_HAL_ASSERT(NULL != gpio_ptr);
208 VSF_HAL_ASSERT(0 != pin_mask);
209
210 uint32_t ret = ~vsf_real_gpio_get_direction(gpio_ptr, pin_mask);
211 vsf_real_gpio_set_direction(gpio_ptr, pin_mask, ret);
212}
213#endif
214
215#if VSF_GPIO_CFG_REIMPLEMENT_API_SET == DISABLED
216void vsf_real_gpio_set(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
217{
218 VSF_HAL_ASSERT(NULL != gpio_ptr);
219 VSF_HAL_ASSERT(0 != pin_mask);
220
221 vsf_real_gpio_write(gpio_ptr, pin_mask, pin_mask);
222}
223#endif
224
225#if VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR == DISABLED
226void vsf_real_gpio_clear(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
227{
228 VSF_HAL_ASSERT(NULL != gpio_ptr);
229 VSF_HAL_ASSERT(0 != pin_mask);
230
231 vsf_real_gpio_write(gpio_ptr, pin_mask, 0);
232}
233#endif
234
235#if VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET == DISABLED
236void vsf_real_gpio_output_and_set(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
237{
238 VSF_HAL_ASSERT(NULL != gpio_ptr);
239 VSF_HAL_ASSERT(0 != pin_mask);
240
241#if VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET == 0
243#else
244#if VSF_GPIO_CFG_CHANGE_DIR_FIRST == ENABLED
245 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
246 vsf_real_gpio_set(gpio_ptr, pin_mask);
247#else
248 vsf_real_gpio_set(gpio_ptr, pin_mask);
249 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
250#endif
251#endif
252}
253#endif
254
255#if VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR == DISABLED
256void vsf_real_gpio_output_and_clear(vsf_real_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
257{
258 VSF_HAL_ASSERT(NULL != gpio_ptr);
259 VSF_HAL_ASSERT(0 != pin_mask);
260
261#if VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR == 0
263#else
264#if VSF_GPIO_CFG_CHANGE_DIR_FIRST == ENABLED
265 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
266 vsf_real_gpio_clear(gpio_ptr, pin_mask);
267#else
268 vsf_real_gpio_clear(gpio_ptr, pin_mask);
269 vsf_real_gpio_set_output(gpio_ptr, pin_mask);
270#endif
271#endif
272}
273#endif
274
275#if VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION == DISABLED
276vsf_err_t vsf_real_gpio_get_pin_configuration(vsf_real_gpio_t *gpio_ptr, uint16_t pin_index, vsf_gpio_cfg_t *cfg_ptr)
277{
278 VSF_HAL_ASSERT(NULL != gpio_ptr);
279 VSF_HAL_ASSERT(NULL != cfg_ptr);
280
281 // Default implementation: not supported, trigger assertion
283
284 return VSF_ERR_NOT_SUPPORT;
285}
286#endif
287
288#if VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER == DISABLED
289vsf_gpio_pin_mask_t vsf_real_gpio_read_output_register(vsf_real_gpio_t *gpio_ptr)
290{
291 VSF_HAL_ASSERT(NULL != gpio_ptr);
292
293 // Default implementation: not supported, trigger assertion
295
296 return 0;
297}
298#endif
299
300#if VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
301vsf_gpio_capability_t vsf_real_gpio_capability(vsf_real_gpio_t *gpio_ptr)
302{
303 vsf_gpio_capability_t gpio_capability = {
304 .is_async = VSF_GPIO_CFG_CAPABILITY_IS_ASYNC,
306 .support_output_and_clear = VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR,
307 .support_interrupt = VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT,
308 .can_read_in_gpio_output_mode = VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_GPIO_OUTPUT_MODE,
309 .can_read_in_alternate_mode = VSF_GPIO_CFG_CAPABILITY_CAN_READ_IN_ALTERNATE_MODE,
310 .pin_count = VSF_GPIO_CFG_CAPABILITY_PIN_COUNT,
311 .pin_mask = VSF_GPIO_CFG_CAPABILITY_PIN_MASK,
312 };
313
314 return gpio_capability;
315}
316#endif
317
318#if VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION == DISABLED
319vsf_err_t vsf_real_gpio_exti_irq_get_configuration(vsf_real_gpio_t *gpio_ptr, vsf_gpio_exti_irq_cfg_t *irq_cfg_ptr)
320{
321 VSF_HAL_ASSERT(NULL != gpio_ptr);
322 VSF_HAL_ASSERT(NULL != irq_cfg_ptr);
323
324 // Default implementation: not supported, trigger assertion
326
327 return VSF_ERR_NOT_SUPPORT;
328}
329#endif
330
331#if VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN == DISABLED
332vsf_err_t vsf_real_gpio_ports_config_pin(vsf_gpio_port_cfg_pin_t *cfg_ptr,
333 uint_fast8_t count)
334{
335 VSF_HAL_ASSERT(cfg_ptr != NULL);
336 VSF_HAL_ASSERT(count != 0);
337
338 for (int i = 0; i < count; i++) {
339 vsf_gpio_cfg_t cfg = {
340 .alternate_function = cfg_ptr[i].alternate_function,
341 .mode = cfg_ptr[i].mode,
342 };
343 uint16_t port_index = vsf_gpio_get_port(cfg_ptr[i].port_pin_index);
344 uint16_t pin_index = vsf_gpio_get_pin(cfg_ptr[i].port_pin_index);
345 vsf_real_gpio_t *gpio_ptr = vsf_real_gpios[port_index];
346 vsf_err_t result =
347 vsf_real_gpio_port_config_pins(gpio_ptr, 1 << pin_index, &cfg);
348 if (result != VSF_ERR_NONE) {
349 return result;
350 }
351 }
352
353 return VSF_ERR_NONE;
354}
355#endif
356
357#if VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS == DISABLED
358vsf_err_t vsf_real_gpio_ports_config_pins(vsf_gpio_port_cfg_pins_t *cfg_ptr,
359 uint_fast8_t count)
360{
361 VSF_HAL_ASSERT(cfg_ptr != NULL);
362 VSF_HAL_ASSERT(count != 0);
363
364 for (int i = 0; i < count; i++) {
365 uint16_t port_index = cfg_ptr[i].port_index;
366 vsf_real_gpio_t *gpio_ptr = vsf_real_gpios[port_index];
367 vsf_gpio_cfg_t cfg = {
368 .alternate_function = cfg_ptr[i].alternate_function,
369 .mode = cfg_ptr[i].mode,
370 };
371 vsf_err_t result =
372 vsf_real_gpio_port_config_pins(gpio_ptr, cfg_ptr[i].pin_mask, &cfg);
373 if (result != VSF_ERR_NONE) {
374 return result;
375 }
376 }
377
378 return VSF_ERR_NONE;
379}
380#endif
381
382/*============================ MACROS ========================================*/
383
384#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_INPUT
385#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET_OUTPUT
386#undef VSF_GPIO_CFG_REIMPLEMENT_API_SWITCH_DIRECTION
387#undef VSF_GPIO_CFG_REIMPLEMENT_API_SET
388#undef VSF_GPIO_CFG_REIMPLEMENT_API_CLEAR
389#undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_SET
390#undef VSF_GPIO_CFG_REIMPLEMENT_API_OUTPUT_AND_CLEAR
391#undef VSF_GPIO_CFG_REIMPLEMENT_API_GET_PIN_CONFIGURATION
392#undef VSF_GPIO_CFG_REIMPLEMENT_API_READ_OUTPUT_REGISTER
393#undef VSF_GPIO_CFG_REIMPLEMENT_API_CAPABILITY
394#undef VSF_GPIO_CFG_REIMPLEMENT_API_EXTI_IRQ_GET_CONFIGURATION
395#undef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PIN
396#undef VSF_GPIO_CFG_REIMPLEMENT_API_PORTS_CONFIG_PINS
397#undef VSF_GPIO_CFG_CHANGE_DIR_FIRST
398#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_CONFIG_PIN
399#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
400#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
401#undef VSF_GPIO_CFG_CAPABILITY_SUPPORT_INTERRUPT
402#undef VSF_GPIO_CFG_CAPABILITY_IS_ASYNC
403#undef VSF_GPIO_CFG_CAPABILITY_PIN_COUNT
404#undef VSF_GPIO_CFG_CAPABILITY_PIN_MASK
405#undef vsf_real_gpio_t
406#undef vsf_real_gpio_get_pin_configuration
407#undef vsf_real_gpio_read
408#undef vsf_real_gpio_read_output_register
409#undef vsf_real_gpio_set_input
410#undef vsf_real_gpio_set_output
411#undef vsf_real_gpio_get_direction
412#undef vsf_real_gpio_set_direction
413#undef vsf_real_gpio_switch_direction
414#undef vsf_real_gpio_write
415#undef vsf_real_gpio_set
416#undef vsf_real_gpio_clear
417#undef vsf_real_gpio_output_and_set
418#undef vsf_real_gpio_output_and_clear
419#undef vsf_real_gpio_capability
420#undef vsf_real_gpio_exti_irq_get_configuration
421
422/*============================ MACROS ========================================*/
423
424#ifdef VSF_GPIO_CFG_IMP_REMAP_PREFIX
425# ifndef VSF_GPIO_CFG_ORIGIN_PREFIX
426# define VSF_GPIO_CFG_ORIGIN_PREFIX VSF_GPIO_CFG_IMP_PREFIX
427# endif
428
429# define vsf_origin_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_t)
430# define vsf_origin_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_capability)
431# define vsf_origin_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_port_config_pins)
432# define vsf_origin_gpio_get_pin_configuration VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_get_pin_configuration)
433# define vsf_origin_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_direction)
434# define vsf_origin_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_get_direction)
435# define vsf_origin_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_input)
436# define vsf_origin_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set_output)
437# define vsf_origin_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_switch_direction)
438# define vsf_origin_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_read)
439# define vsf_origin_gpio_read_output_register VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_read_output_register)
440# define vsf_origin_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_write)
441# define vsf_origin_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_set)
442# define vsf_origin_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_clear)
443# define vsf_origin_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_output_and_set)
444# define vsf_origin_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_output_and_clear)
445# define vsf_origin_gpio_toggle VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_toggle)
446# define vsf_origin_gpio_exti_irq_enable VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_enable)
447# define vsf_origin_gpio_exti_irq_disable VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_disable)
448# define vsf_origin_gpio_exti_irq_config VSF_MCONNECT(VSF_GPIO_CFG_ORIGIN_PREFIX, _gpio_exti_irq_config)
449
450# define vsf_remap_gpio_t VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_t)
451# define vsf_remap_gpio_capability VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_capability)
452# define vsf_remap_gpio_port_config_pins VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_port_config_pins)
453# define vsf_remap_gpio_get_pin_configuration VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_get_pin_configuration)
454# define vsf_remap_gpio_set_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_direction)
455# define vsf_remap_gpio_get_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_get_direction)
456# define vsf_remap_gpio_set_input VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_input)
457# define vsf_remap_gpio_set_output VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set_output)
458# define vsf_remap_gpio_switch_direction VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_switch_direction)
459# define vsf_remap_gpio_read VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_read)
460# define vsf_remap_gpio_read_output_register VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_read_output_register)
461# define vsf_remap_gpio_write VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_write)
462# define vsf_remap_gpio_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_set)
463# define vsf_remap_gpio_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_clear)
464# define vsf_remap_gpio_output_and_set VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_output_and_set)
465# define vsf_remap_gpio_output_and_clear VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_output_and_clear)
466# define vsf_remap_gpio_toggle VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_toggle)
467# define vsf_remap_gpio_exti_irq_enable VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_enable)
468# define vsf_remap_gpio_exti_irq_disable VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_disable)
469# define vsf_remap_gpio_exti_irq_config VSF_MCONNECT(VSF_GPIO_CFG_IMP_REMAP_PREFIX, _gpio_exti_irq_config)
470
471# define VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS \
472 vsf_err_t vsf_origin_gpio_port_config_pins(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_cfg_t *cfg) \
473 { \
474 VSF_HAL_ASSERT(gpio_ptr != NULL); \
475 VSF_HAL_ASSERT(pin_mask != 0); \
476 VSF_HAL_ASSERT(cfg != NULL); \
477 return vsf_remap_gpio_port_config_pins(gpio_ptr, pin_mask, cfg); \
478 } \
479 vsf_err_t vsf_origin_gpio_get_pin_configuration(vsf_origin_gpio_t *gpio_ptr, uint16_t pin_index, vsf_gpio_cfg_t *cfg) \
480 { \
481 VSF_HAL_ASSERT(gpio_ptr != NULL); \
482 VSF_HAL_ASSERT(cfg != NULL); \
483 return vsf_remap_gpio_get_pin_configuration(gpio_ptr, pin_index, cfg); \
484 } \
485 void vsf_origin_gpio_set_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t direction_mask) \
486 { \
487 VSF_HAL_ASSERT(gpio_ptr != NULL); \
488 vsf_remap_gpio_set_direction(gpio_ptr, pin_mask, direction_mask); \
489 } \
490 vsf_gpio_pin_mask_t vsf_origin_gpio_get_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
491 { \
492 VSF_HAL_ASSERT(gpio_ptr != NULL); \
493 return vsf_remap_gpio_get_direction(gpio_ptr, pin_mask); \
494 } \
495 void vsf_origin_gpio_set_input(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
496 { \
497 VSF_HAL_ASSERT(gpio_ptr != NULL); \
498 vsf_remap_gpio_set_input(gpio_ptr, pin_mask); \
499 } \
500 void vsf_origin_gpio_set_output(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
501 { \
502 VSF_HAL_ASSERT(gpio_ptr != NULL); \
503 vsf_remap_gpio_set_output(gpio_ptr, pin_mask); \
504 } \
505 void vsf_origin_gpio_switch_direction(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
506 { \
507 VSF_HAL_ASSERT(gpio_ptr != NULL); \
508 vsf_remap_gpio_switch_direction(gpio_ptr, pin_mask); \
509 } \
510 vsf_gpio_pin_mask_t vsf_origin_gpio_read(vsf_origin_gpio_t *gpio_ptr) \
511 { \
512 VSF_HAL_ASSERT(gpio_ptr != NULL); \
513 return vsf_remap_gpio_read(gpio_ptr); \
514 } \
515 vsf_gpio_pin_mask_t vsf_origin_gpio_read_output_register(vsf_origin_gpio_t *gpio_ptr) \
516 { \
517 VSF_HAL_ASSERT(gpio_ptr != NULL); \
518 return vsf_remap_gpio_read_output_register(gpio_ptr); \
519 } \
520 void vsf_origin_gpio_write(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value) \
521 { \
522 VSF_HAL_ASSERT(gpio_ptr != NULL); \
523 vsf_remap_gpio_write(gpio_ptr, pin_mask, value); \
524 } \
525 void vsf_origin_gpio_set(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
526 { \
527 VSF_HAL_ASSERT(gpio_ptr != NULL); \
528 vsf_remap_gpio_set(gpio_ptr, pin_mask); \
529 } \
530 void vsf_origin_gpio_clear(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
531 { \
532 VSF_HAL_ASSERT(gpio_ptr != NULL); \
533 vsf_remap_gpio_clear(gpio_ptr, pin_mask); \
534 } \
535 void vsf_origin_gpio_toggle(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
536 { \
537 VSF_HAL_ASSERT(gpio_ptr != NULL); \
538 vsf_remap_gpio_toggle(gpio_ptr, pin_mask); \
539 } \
540 void vsf_origin_gpio_output_and_set(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
541 { \
542 VSF_HAL_ASSERT(gpio_ptr != NULL); \
543 vsf_remap_gpio_output_and_set(gpio_ptr, pin_mask); \
544 } \
545 void vsf_origin_gpio_output_and_clear(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
546 { \
547 VSF_HAL_ASSERT(gpio_ptr != NULL); \
548 vsf_remap_gpio_output_and_clear(gpio_ptr, pin_mask); \
549 } \
550 vsf_gpio_capability_t vsf_origin_gpio_capability(vsf_origin_gpio_t *gpio_ptr) \
551 { \
552 VSF_HAL_ASSERT(gpio_ptr != NULL); \
553 return vsf_remap_gpio_capability(gpio_ptr); \
554 } \
555 vsf_err_t vsf_origin_gpio_exti_irq_enable(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
556 { \
557 VSF_HAL_ASSERT(gpio_ptr != NULL); \
558 return vsf_remap_gpio_exti_irq_enable(gpio_ptr, pin_mask); \
559 } \
560 vsf_err_t vsf_origin_gpio_exti_irq_disable(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask) \
561 { \
562 VSF_HAL_ASSERT(gpio_ptr != NULL); \
563 return vsf_remap_gpio_exti_irq_disable(gpio_ptr, pin_mask); \
564 } \
565 vsf_err_t vsf_origin_gpio_exti_irq_config(vsf_origin_gpio_t *gpio_ptr, vsf_gpio_exti_irq_cfg_t *cfg) \
566 { \
567 VSF_HAL_ASSERT(gpio_ptr != NULL); \
568 return vsf_remap_gpio_exti_irq_config(gpio_ptr, cfg); \
569 }
570#endif
571
572/*============================ GLOBAL VARIABLES ==============================*/
573
574#ifndef VSF_HAL_TEMPLATE_IMP_NAME
575# define VSF_HAL_TEMPLATE_IMP_NAME _gpio
576#endif
577
578#ifndef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
579# define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _GPIO
580#endif
581
582#ifndef VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX
583# define VSF_HAL_TEMPLATE_IMP_COUNT_SUFFIX _PORT_COUNT
584#endif
585
586#ifndef VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX
587# define VSF_HAL_TEMPLATE_IMP_MASK_SUFFIX _PORT_MASK
588#endif
589
590#if !defined(VSF_GPIO_CFG_IMP_PREFIX) && !defined(VSF_GPIO_CFG_IMP_DEVICE_PREFIX)
591# error "Please define VSF_GPIO_CFG_IMP_PREFIX in gpio driver"
592#endif
593
594#if !defined(VSF_GPIO_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_GPIO_CFG_IMP_DEVICE_UPCASE_PREFIX)
595# error "Please define VSF_GPIO_CFG_IMP_UPCASE_PREFIX in gpio driver"
596#endif
597
598#ifndef VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX
599# define VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX VSF_GPIO_CFG_IMP_UPCASE_PREFIX
600#endif
601
602#ifdef VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
603# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
604#endif
605
607
608#if VSF_GPIO_CFG_RETAIN_DEFINED_PREFIX == DISABLED
609# undef VSF_GPIO_CFG_IMP_PREFIX
610# undef VSF_GPIO_CFG_IMP_UPCASE_PREFIX
611# undef VSF_GPIO_CFG_IMP_DEVICE_PREFIX
612# undef VSF_GPIO_CFG_IMP_DEVICE_UPCASE_PREFIX
613#endif
614
615#undef VSF_GPIO_CFG_REAL_PREFIX
616#undef VSF_GPIO_CFG_ORIGIN_PREFIX
617
618#undef VSF_GPIO_CFG_IMP_COUNT_MASK_PREFIX
619#undef VSF_GPIO_CFG_IMP_LV0
620#undef VSF_GPIO_CFG_IMP_REMAP_FUNCTIONS
621#undef VSF_GPIO_CFG_IMP_HAS_OP
622#undef VSF_GPIO_CFG_IMP_EXTERN_OP
623#undef VSF_GPIO_CFG_IMP_REMAP_PREFIX
624
625#undef vsf_origin_gpio_t
626#undef vsf_origin_gpio_capability
627#undef vsf_origin_gpio_port_config_pins
628#undef vsf_origin_gpio_get_pin_configuration
629#undef vsf_origin_gpio_set_direction
630#undef vsf_origin_gpio_get_direction
631#undef vsf_origin_gpio_set_input
632#undef vsf_origin_gpio_set_output
633#undef vsf_origin_gpio_switch_direction
634#undef vsf_origin_gpio_read
635#undef vsf_origin_gpio_read_output_register
636#undef vsf_origin_gpio_write
637#undef vsf_origin_gpio_set
638#undef vsf_origin_gpio_clear
639#undef vsf_origin_gpio_output_and_set
640#undef vsf_origin_gpio_output_and_clear
641#undef vsf_origin_gpio_toggle
642#undef vsf_origin_gpio_exti_irq_config
643#undef vsf_origin_gpio_exti_irq_enable
644#undef vsf_origin_gpio_exti_irq_disable
645
646#undef vsf_remap_gpio_t
647#undef vsf_remap_gpio_capability
648#undef vsf_remap_gpio_port_config_pins
649#undef vsf_remap_gpio_get_pin_configuration
650#undef vsf_remap_gpio_set_direction
651#undef vsf_remap_gpio_get_direction
652#undef vsf_remap_gpio_set_input
653#undef vsf_remap_gpio_set_output
654#undef vsf_remap_gpio_switch_direction
655#undef vsf_remap_gpio_read
656#undef vsf_remap_gpio_read_output_register
657#undef vsf_remap_gpio_write
658#undef vsf_remap_gpio_set
659#undef vsf_remap_gpio_clear
660#undef vsf_remap_gpio_output_and_set
661#undef vsf_remap_gpio_output_and_clear
662#undef vsf_remap_gpio_toggle
663#undef vsf_remap_gpio_exti_irq_config
664#undef vsf_remap_gpio_exti_irq_enable
665#undef vsf_remap_gpio_exti_irq_disable
666
667#endif /* VSF_HAL_USE_GPIO */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_ERR_NONE
none error
Definition __type.h:44
#define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_SET
Definition gpio.c:33
#define VSF_GPIO_CFG_CAPABILITY_SUPPORT_OUTPUT_AND_CLEAR
Definition gpio.c:32
#define NULL
Definition lvgl.h:26
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned uint32_t
Definition stdint.h:9
Definition vsf_template_gpio.h:654
inherit(vsf_peripheral_capability_t) uint8_t is_async uint8_t support_output_and_set
Flag indicating if GPIO operations are asynchronous. When set, operations are only guaranteed to be s...
Definition vsf_template_gpio.h:656
gpio configuration
Definition vsf_template_gpio.h:623
vsf_gpio_alternate_function_t alternate_function
alternate function is only valid in GPIO_AF mode
Definition vsf_template_gpio.h:626
Definition vsf_template_gpio.h:616
Definition vsf_template_gpio.h:630
Definition vsf_template_gpio.h:643
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
uint32_t vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:308
Generated from commit: vsfteam/vsf@8634e61