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