[PATCH] Proposal for new GPIO API and example implementation for STM32F4 BSP
Duc Doan
dtbpkmte at gmail.com
Sun Jun 26 07:24:43 UTC 2022
Hello Karel,
I came up with this solution: making a macro that returns a function
depending on driver/BSP name.
/**
* @brief Get an GPIO control object.
*
* This macro requires BSPs/drivers to correctly implement
* function <driver_name>_gpio_get_ctrl(void *arg,
* rtems_gpio_ctrl_t **out).
*
* @param _driver is the name of the BSP/GPIO driver
* @param[in] _arg is the void pointer to an argument type
* defined by BSP/driver
* @param[out] _out is the pointer to the pointer to where
* the output object will be stored
*/
#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);
What do you think about this?
Best,
Duc Doan
On Sat, 2022-06-25 at 21:46 +0200, Karel Gardas wrote:
>
> Hello Duc,
>
> one reminder, your API should be more or less portable. That means
> the
> example which you produce as a testing example should be API-wise
> portable between various BSPs. Is that clear?
>
> I know, I know, sometimes user led 1 on F4 is on different port/pin
> on
> F7 and then on H7 you get it on even different port/pin, but!
>
> > stm32f4_gpio_get_ctrl(GPIOD, &ctrl);
>
> do you expect this to be called from app running on RPi4 for example?
> Or
> on beagle bone white? Or on stm32h757i-eval board?
>
> Please generalize and make that bit portable too.
>
> Thanks,
> Karel
>
> On 6/25/22 15:00, Duc Doan wrote:
> > Hello Christian,
> >
> > I forgot to send the sample code. Here it a code to turn on an LED:
> >
> > /*****************************************/
> >
> > // Obtain the pointer to the instance (port D)
> > rtems_gpio_ctrl_t *ctrl;
> > stm32f4_gpio_get_ctrl(GPIOD, &ctrl);
> >
> > // enable clocks for port D
> > rtems_gpio_initialize(ctrl);
> >
> > // configure the pin
> > rtems_gpio_set_pin_mode(ctrl, &LED_PIN,
> > RTEMS_GPIO_PINMODE_OUTPUT_PP);
> > rtems_gpio_set_pull(ctrl, &LED_PIN, RTEMS_GPIO_PULLUP);
> >
> > // output to LED
> > rtems_gpio_write(ctrl, &LED_PIN, RTEMS_GPIO_PIN_SET);
> >
> > /*****************************************/
> >
> > Best,
> >
> > Duc Doan
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
>
More information about the devel
mailing list