[PATCH] Proposal for new GPIO API and example implementation for STM32F4 BSP

Karel Gardas karel at functional.vision
Sun Jun 26 18:48:18 UTC 2022


On 6/26/22 10:49, Duc Doan wrote:
>>> #define rtems_gpio_get_ctrl(_driver, _arg, _out) \
>>>       _driver##_gpio_get_ctrl( _arg , _out )
>>>
>>> In the application code:
>>>
>>> rtems_gpio_get_ctrl(stm32f4, GPIOD, &led_ctrl);
>>> rtems_gpio_get_ctrl(stm32f4, GPIOA, &button_ctrl);
>>
>> It's only a different method of writing the same. It won't solve
>> Karels
>> problem because it still wouldn't compile on another BSP.
>>
> 
> Do you mean this application code should compile on other BSPs without
> changing the source?

Yes, that's exactly what portability means and that's exactly what is 
desired outcome of the API here -- if I'm not mistaken in your project 
outcome specification. :-)

I'm not expert here, so please bear with me, but as I see it, you will 
need to come with some abstraction for groups and pins and write API 
around it. Then in BSP you will perform/provide a mapping between your 
abstracted group/pins construct and between actual hardware. This way, 
if I take example from stm32f4 and try to compile on rpi4, it will 
compile well -- but it will not run well (probably!) of course. But API 
wise, it will compile. Now, to make it run, I'll need to connect LED 
example following BSP specific mapping and for that I need to consult 
BSP docs.

> I am a bit confused about that because I thought
> at least we still need to specify the pin/port. And if we have multiple
> GPIO controllers, we still need to select one right?

Yes, and this needs to be done in abstract manner mapped down into 
actual BSP implementation code. Abstract mapping here ensure portability 
between BSPs/boards.

E.g. for stm32f4 you do not select GPIOA group and pin1, but you select 
group 0 and pin 1 and in f4 BSP this group 0 is mapped to GPIOA and pin 
1 is mapped to its pin 1. -- something like that.

Karel


More information about the devel mailing list