THB2/bthome_phy6222/SDK/components/driver/bsp_button/bsp_gpio.c

77 lines
1.8 KiB
C

/**************************************************************
Module Name: bsp_gpio
File name: bsp_gpio.c
Brief description:
key driver module
Data: 2020-06-30
Revision:V0.01
SDK_LICENSE
****************************************************************/
#include "bsp_gpio.h"
extern void gpio_btn_pin_event_handler(gpio_pin_e pin,IO_Wakeup_Pol_e type);
static Gpio_Btn_Info* s_gpio_btn_ptr = NULL;
int hal_gpio_btn_init(Gpio_Btn_Info* gpio_btn_ptr)
{
if((gpio_btn_ptr == NULL)||(GPIO_SINGLE_BTN_NUM == 0))
{
return PPlus_ERR_INVALID_PARAM;
}
if((gpio_btn_ptr->s_key == NULL) || (gpio_btn_ptr->cb == NULL))
{
return PPlus_ERR_INVALID_PARAM;
}
if(GPIO_SINGLE_BTN_NUM != sizeof(gpio_btn_ptr->s_key)/sizeof(gpio_btn_ptr->s_key[0]))
{
return PPlus_ERR_INVALID_PARAM;
}
for(int i = 0; i < GPIO_SINGLE_BTN_NUM; i++)
{
if(GPIO_SINGLE_BTN_IDLE_LEVEL == 0)
{
hal_gpio_pull_set(*(gpio_btn_ptr->s_key+i),PULL_DOWN);
}
else
{
hal_gpio_pull_set(*(gpio_btn_ptr->s_key+i),WEAK_PULL_UP);
}
hal_gpioin_register(*(gpio_btn_ptr->s_key+i),gpio_btn_pin_event_handler, gpio_btn_pin_event_handler);
}
s_gpio_btn_ptr = gpio_btn_ptr;
return PPlus_SUCCESS;
}
int hal_gpio_btn_get_index(gpio_pin_e pin,uint8_t* index)
{
if(s_gpio_btn_ptr == NULL)
{
return PPlus_ERR_NOT_SUPPORTED;
}
for(int i = 0; i < GPIO_SINGLE_BTN_NUM; i++)
{
if(pin == s_gpio_btn_ptr->s_key[i])
{
*index = i;
return PPlus_SUCCESS;
}
}
return PPlus_ERR_NOT_FOUND;
}
void hal_gpio_btn_cb(uint8_t ucKeyCode)
{
if(s_gpio_btn_ptr != NULL)
{
s_gpio_btn_ptr->cb(ucKeyCode);
}
}