/*******************************************************************************
*
*
* File:          hal_gpio.h
* Description： gpio HAL层头文件
* Version：      V0.1
* Date：         2023-07-27
* Author：       kevin
 *******************************************************************************/
#ifndef __HAL_GPIO_H__
#define __HAL_GPIO_H__

/*******************************************************************************
* 1.Included files
*******************************************************************************/
#include "tau_device_datatype.h"
#include "tau_common.h"

/*******************************************************************************
* 2.Global constant and macro definitions using #define
*******************************************************************************/
/**
* @brief  GPIO pin
*/
typedef enum
{
    /*以GPIO命名PIN*/
    IO_PAD_GPIO0 = 0,
    IO_PAD_GPIO1,
    IO_PAD_GPIO2,
    IO_PAD_GPIO3,
    IO_PAD_GPIO4,
    IO_PAD_GPIO5,
    IO_PAD_GPIO6,
    IO_PAD_GPIO7,
    IO_PAD_GPIO8,
    IO_PAD_GPIO9,
    IO_PAD_GPIO10,
    IO_PAD_GPIO11,
    IO_PAD_GPIO12,
    IO_PAD_GPIO13,
    IO_PAD_GPIO14,
    IO_PAD_GPIO15,
    IO_PAD_GPIO16,
    IO_PAD_GPIO17,
    IO_PAD_GPIO18,
    IO_PAD_GPIO19,
    IO_PAD_GPIO20,
    IO_PAD_GPIO21,
    IO_PAD_GPIO22,
    IO_PAD_GPIO23,
    IO_PAD_GPIO24,
    IO_PAD_GPIO25,

    /*以实际PAD NAME命名PIN*/
    IO_PAD_AP_SPIS_MISO = IO_PAD_GPIO0,
    IO_PAD_AP_SPIS_MOSI = IO_PAD_GPIO1,
    IO_PAD_AP_INT       = IO_PAD_GPIO2,
    IO_PAD_AP_TE        = IO_PAD_GPIO3,
    IO_PAD_AP_SWIRE     = IO_PAD_GPIO4,
    IO_PAD_TD_SPIM_MISO = IO_PAD_GPIO5,
    IO_PAD_TD_SPIM_MOSI = IO_PAD_GPIO6,
    IO_PAD_TD_RSTN      = IO_PAD_GPIO7,
    IO_PAD_AP_PWMEN     = IO_PAD_GPIO8,
    IO_PAD_AP_SPIS_CLK  = IO_PAD_GPIO9,
    IO_PAD_AP_SPIS_CSN  = IO_PAD_GPIO10,
    IO_PAD_TD_FC_CLK    = IO_PAD_GPIO11,
    IO_PAD_TD_FC_CSN    = IO_PAD_GPIO12,
    IO_PAD_TD_FC_IO0    = IO_PAD_GPIO13,
    IO_PAD_TD_FC_IO1    = IO_PAD_GPIO14,
    IO_PAD_SWD_CLK      = IO_PAD_GPIO15,
    IO_PAD_SWD_DIO      = IO_PAD_GPIO16,
    IO_PAD_AP_RSTN      = IO_PAD_GPIO17,
    IO_PAD_UART0_TX     = IO_PAD_GPIO18,
    IO_PAD_TD_SPIM_CLK  = IO_PAD_GPIO19,
    IO_PAD_TD_SPIM_CSN  = IO_PAD_GPIO20,
    IO_PAD_AP_TPRSTN    = IO_PAD_GPIO21,
    IO_PAD_TD_INT       = IO_PAD_GPIO22,
    IO_PAD_TD_TP_RESX   = IO_PAD_GPIO23,
    IO_PAD_UART1_TX     = IO_PAD_GPIO24,
    IO_PAD_UART0_RX     = IO_PAD_GPIO25,

    IO_PAD_MAX,


    /*以实际引脚序号命名PIN*/
    IO_PIN_1            = IO_PAD_SWD_CLK,
    IO_PIN_2            = IO_PAD_UART0_TX,
    IO_PIN_3            = IO_PAD_SWD_DIO,
    IO_PIN_4            = IO_PAD_TD_SPIM_MOSI,
    IO_PIN_5            = IO_PAD_TD_SPIM_CLK,
    IO_PIN_6            = IO_PAD_TD_SPIM_CSN,
    IO_PIN_7            = IO_PAD_TD_SPIM_MISO,
    IO_PIN_8            = IO_PAD_TD_RSTN,
    IO_PIN_9            = IO_PAD_TD_FC_CSN,
    IO_PIN_10           = IO_PAD_TD_FC_CLK,
    IO_PIN_11           = IO_PAD_TD_FC_IO0,
    IO_PIN_12           = IO_PAD_TD_FC_IO1,
    IO_PIN_13           = IO_PAD_TD_TP_RESX,
    IO_PIN_14           = IO_PAD_UART1_TX,
    IO_PIN_15           = IO_PAD_AP_SWIRE,
    IO_PIN_16           = IO_PAD_AP_INT,
    IO_PIN_17           = IO_PAD_AP_PWMEN,
    IO_PIN_18           = IO_PAD_AP_TPRSTN,

    IO_PIN_29           = IO_PAD_AP_TE,
    IO_PIN_30           = IO_PAD_AP_SPIS_MISO,
    IO_PIN_31           = IO_PAD_AP_SPIS_CSN,
    IO_PIN_32           = IO_PAD_AP_SPIS_CLK,
    IO_PIN_33           = IO_PAD_AP_SPIS_MOSI,
    IO_PIN_34           = IO_PAD_AP_RSTN,
    IO_PIN_35           = IO_PAD_TD_INT,
    IO_PIN_36           = IO_PAD_UART0_RX,

} io_pad_e;


/*
芯片引脚        |    默认mode               |   可选mode
----------------------------------------------------------------
IO_PIN_1    |    IO_PAD_SWCLK,        |   PIN1_MODE_SWDCLK
            |                         |   PIN1_MODE_GPIO15
----------------------------------------------------------------
IO_PIN_2    |    IO_PAD_UART0_TX,     |   PIN2_MODE_UART0_TX
            |                         |   PIN2_MODE_PWMO
            |                         |   PIN2_MODE_GPIO18
            |                         |   PIN2_MODE_PWMI
            |                         |   PIN2_MODE_TEAR1
----------------------------------------------------------------
IO_PIN_3    |    IO_PAD_SWDIO,        |   PIN3_MODE_SWDIO
            |                         |   PIN3_MODE_GPIO16
----------------------------------------------------------------
IO_PIN_4    |    IO_PAD_TD_SPIM_MOSI, |   PIN4_MODE_SPIM_MOSI
            |                         |   PIN4_MODE_I2C02_SDA
            |                         |   PIN4_MODE_GPIO6
            |                         |   PIN4_MODE_UART0_TX
----------------------------------------------------------------
IO_PIN_5    |    IO_PAD_TD_SPIM_CLK,  |   PIN5_MODE_SPIM_SCLK
            |                         |   PIN5_MODE_I2C1_SCL
            |                         |   PIN5_MODE_GPIO19
----------------------------------------------------------------
IO_PIN_6    |    IO_PAD_TD_SPIM_CSN,  |   PIN6_MODE_SPIM_CSN
            |                         |   PIN6_MODE_I2C1_SDA
            |                         |   PIN6_MODE_GPIO20
----------------------------------------------------------------
IO_PIN_7    |    IO_PAD_TD_SPIM_MISO, |   PIN7_MODE_SPIM_MISO
            |                         |   PIN7_MODE_I2C02_SCL
            |                         |   PIN7_MODE_GPIO5
----------------------------------------------------------------
IO_PIN_8    |    IO_PAD_TD_RSTN,      |   PIN8_MODE_GPIO7
            |                         |   PIN8_MODE_I2C02_SDA
----------------------------------------------------------------
IO_PIN_9    |    IO_PAD_TD_FC_CSN,    |   PIN9_MODE_TSPIS_CSN
            |                         |   PIN9_MODE_GPIO12
----------------------------------------------------------------
IO_PIN_10   |    IO_PAD_TD_FC_CLK,    |   PIN10_MODE_TSPIS_CLK
            |                         |   PIN10_MODE_GPIO11
----------------------------------------------------------------
IO_PIN_11   |    IO_PAD_TD_FC_IO0,    |   PIN11_MODE_TSPIS_IO0
            |                         |   PIN11_MODE_GPIO13
            |                         |   PIN11_MODE_I2C02_SDA
----------------------------------------------------------------
IO_PIN_12   |    IO_PAD_TD_FC_IO1,    |   PIN12_MODE_TSPIS_IO1
            |                         |   PIN12_MODE_GPIO14
            |                         |   PIN12_MODE_I2C02_SCL
----------------------------------------------------------------
IO_PIN_13   |    IO_PAD_TD_TP_RESX,   |   PIN13_MODE_GPIO23
            |                         |   PIN13_MODE_PWMO
            |                         |   PIN13_MODE_UART1_RX
            |                         |   PIN13_MODE_UART1_RX
----------------------------------------------------------------
IO_PIN_14   |    IO_PAD_UART1_TX,     |   PIN14_MODE_GPIO24
            |                         |   PIN14_MODE_UART0_RX
            |                         |   PIN14_MODE_UART1_TX
            |                         |
----------------------------------------------------------------
IO_PIN_15   |    IO_PAD_AP_SWIRE,     |   PIN15_MODE_SWIRE
            |                         |   PIN15_MODE_PWMO
            |                         |   PIN15_MODE_GPIO4
----------------------------------------------------------------
IO_PIN_16   |    IO_PAD_AP_INT,       |   PIN16_MODE_GPIO2
----------------------------------------------------------------
IO_PIN_17   |    IO_PAD_AP_PWMEN,     |   PIN17_MODE_UART0_RX
            |                         |   PIN17_MODE_GPIO8
            |                         |   PIN17_MODE_PWMO
----------------------------------------------------------------
IO_PIN_18   |    IO_PAD_AP_TPRSTN,    |   PIN18_MODE_UART0_RX
            |                         |   PIN18_MODE_GPIO21
            |                         |   PIN18_MODE_I2C02_SCL
----------------------------------------------------------------
IO_PIN_29   |    IO_PAD_AP_TE,        |   PIN29_MODE_JTAG_TRSTN
            |                         |   PIN29_MODE_TEAR
            |                         |   PIN29_MODE_GPIO3
----------------------------------------------------------------
IO_PIN_30   |    IO_PAD_AP_SPIS_MISO, |  PIN30_MODE_JTAG_TDO
            |                         |  PIN30_MODE_SPIS_MISO
            |                         |  PIN30_MODE_GPIO0
            |                         |  PIN30_MODE_UART0_RX
            |                         |  PIN30_MODE_I2C1_SCL
----------------------------------------------------------------
IO_PIN_31   |    IO_PAD_AP_SPIS_CSN,  |  PIN31_MODE_JTAG_TMS
            |                         |  PIN31_MODE_SPIS_CSN
            |                         |  PIN31_MODE_GPIO10
            |                         |  PIN31_MODE_I2C02_SDA
----------------------------------------------------------------
IO_PIN_32   |    IO_PAD_AP_SPIS_CLK,  |  PIN32_MODE_JTAG_TCK
            |                         |  PIN32_MODE_SPIS_SCLK
            |                         |  PIN32_MODE_GPIO9
            |                         |  PIN32_MODE_I2C02_SCL
----------------------------------------------------------------
IO_PIN_33   |    IO_PAD_AP_SPIS_MOSI, |  PIN33_MODE_JTAG_TDI
            |                         |  PIN33_MODE_SPIS_MOSI
            |                         |  PIN33_MODE_GPIO1
            |                         |  PIN33_MODE_UART0_TX
            |                         |  PIN33_MODE_I2C1_SDA_0
----------------------------------------------------------------
IO_PIN_34   |    IO_PAD_AP_RSTN,      |  PIN34_MODE_GPIO17
----------------------------------------------------------------
IO_PIN_35   |    IO_PAD_TD_INT,       |  PIN35_MODE_GPIO22
----------------------------------------------------------------
IO_PIN_36   |    IO_PAD_UART0_RX,     |  PIN36_MODE_UART0_RX
            |                         |  PIN36_MODE_PWMO
            |                         |  PIN36_MODE_GPIO25
----------------------------------------------------------------
*/


/**
* @brief  PIN1 IO_PAD_SWD_CLK 可选的mode
*/
typedef enum
{
    PIN1_MODE_SWDCLK        = 0,
    PIN1_MODE_GPIO15        = 2,
} pin1_mode_e;


/**
* @brief  PIN2 PAD_UART0_TX可选的mode
*/
typedef enum
{
    PIN2_MODE_UART0_TX     = 0,
    PIN2_MODE_PWMO         = 1,
    PIN2_MODE_GPIO18       = 2,
    PIN2_MODE_PWMI         = 3,
    PIN2_MODE_TEAR1        = 4,
} pin2_mode_e;

/**
* @brief  PIN3 IO_PAD_SWD_DIO 可选的mode
*/
typedef enum
{
    PIN3_MODE_SWDIO        = 0,
    PIN3_MODE_GPIO16       = 2,
} pin3_mode_e;


/**
* @brief  PIN4 PAD_TD_SPIM_MOSI可选的mode
*/
typedef enum
{
    PIN4_MODE_SPIM_MOSI    = 0,
    PIN4_MODE_I2C02_SDA    = 1,
    PIN4_MODE_GPIO6        = 2,
    PIN4_MODE_UART0_TX     = 3,
} pin4_mode_e;

/**
* @brief  PIN5 PAD_TD_SPIM_CLK可选的mode
*/
typedef enum
{
    PIN5_MODE_SPIM_SCLK    = 0,
    PIN5_MODE_I2C1_SCL     = 1,
    PIN5_MODE_GPIO19       = 2,
} pin5_mode_e;

/**
* @brief  PIN6 PAD_TD_SPIM_CSN可选的mode
*/
typedef enum
{
    PIN6_MODE_SPIM_CSN     = 0,
    PIN6_MODE_I2C1_SDA     = 1,
    PIN6_MODE_GPIO20       = 2,
} pin6_mode_e;

/**
* @brief  PIN7 PAD_TD_SPIM_MISO可选的mode
*/
typedef enum
{
    PIN7_MODE_SPIM_MISO    = 0,
    PIN7_MODE_I2C02_SCL    = 1,
    PIN7_MODE_GPIO5        = 2,
} pin7_mode_e;

/**
* @brief  PIN8 PAD_TD_RSTN可选的mode
*/
typedef enum
{
    PIN8_MODE_GPIO7        = 2,
    PIN8_MODE_I2C02_SDA    = 3,
} pin8_mode_e;

/**
* @brief  PIN9 PAD_TD_FC_CSN可选的mode
*/
typedef enum
{
    PIN9_MODE_TSPIS_CSN    = 0,
    PIN9_MODE_GPIO12       = 2,
} pin9_mode_e;

/**
* @brief  PIN10 PAD_TD_FC_CLK可选的mode
*/
typedef enum
{
    PIN10_MODE_TSPIS_CLK    = 0,
    PIN10_MODE_GPIO11       = 2,
} pin10_mode_e;


/**
* @brief  PIN11 PAD_TD_FC_IO0可选的mode
*/
typedef enum
{
    PIN11_MODE_TSPIS_IO0    = 0,
    PIN11_MODE_GPIO13       = 2,
    PIN11_MODE_I2C02_SDA    = 3,
} pin11_mode_e;

/**
* @brief  PIN12 PAD_TD_FC_IO1可选的mode
*/
typedef enum
{
    PIN12_MODE_TSPIS_IO1    = 0,
    PIN12_MODE_GPIO14       = 2,
    PIN12_MODE_I2C02_SCL    = 3,
} pin12_mode_e;

/**
* @brief  PIN13 PAD_TD_TP_RESX可选的mode
*/
typedef enum
{
    PIN13_MODE_GPIO23       = 2,
    PIN13_MODE_PWMO         = 3,
    PIN13_MODE_UART1_RX     = 4,
} pin13_mode_e;

/**
* @brief  PIN14 PAD_UART1_TX可选的mode
*/
typedef enum
{
    PIN14_MODE_GPIO24       = 2,
    PIN14_MODE_UART0_RX     = 3,
    PIN14_MODE_UART1_TX     = 4,
} pin14_mode_e;



/**
* @brief  PIN15 PAD_AP_SWIRE可选的mode
*/
typedef enum
{
    PIN15_MODE_SWIRE        = 0,
    PIN15_MODE_PWMO         = 1,
    PIN15_MODE_GPIO4        = 2,
} pin15_mode_e;

/**
* @brief  PIN16 IO_PAD_AP_INT 可选的mode
*/
typedef enum
{
    PIN16_MODE_GPIO2        = 2,
} pin16_mode_e;

/**
* @brief  PIN17 PAD_AP_PWMEN可选的mode
*/
typedef enum
{
    PIN17_MODE_UART0_RX    = 1,
    PIN17_MODE_GPIO8       = 2,
    PIN17_MODE_PWMO        = 3,
} pin17_mode_e;

/**
* @brief  PIN18 IO_PAD_AP_TPRSTN 可选的mode
*/
typedef enum
{
    PIN18_MODE_UART0_RX    = 0,
    PIN18_MODE_GPIO21      = 2,
    PIN18_MODE_I2C02_SCL   = 3,
} pin18_mode_e;


//----------

/**
* @brief  PIN29 IO_PAD_AP_TE 可选的mode
*/
typedef enum
{
    PIN29_MODE_JTAG_TRSTN   = 0,
    PIN29_MODE_TEAR         = 1,
    PIN29_MODE_GPIO3        = 2,
} pin29_mode_e;


/**
* @brief  PIN30 IO_PAD_AP_SPIS_MISO 可选的mode
*/
typedef enum
{
    PIN30_MODE_JTAG_TDO     = 0,
    PIN30_MODE_SPIS_MISO    = 1,
    PIN30_MODE_GPIO0        = 2,
    PIN30_MODE_UART0_RX     = 3,
    PIN30_MODE_I2C1_SCL     = 6,
} pin30_mode_e;

/**
* @brief  PIN31 IO_PAD_AP_SPIS_CSN 可选的mode
*/
typedef enum
{
    PIN31_MODE_JTAG_TMS    = 0,
    PIN31_MODE_SPIS_CSN    = 1,
    PIN31_MODE_GPIO10      = 2,
    PIN31_MODE_I2C02_SDA   = 3,
} pin31_mode_e;

/**
* @brief  PIN32 IO_PAD_AP_SPIS_CLK 可选的mode
*/
typedef enum
{
    PIN32_MODE_JTAG_TCK    = 0,
    PIN32_MODE_SPIS_SCLK   = 1,
    PIN32_MODE_GPIO9       = 2,
    PIN32_MODE_I2C02_SCL   = 3,
} pin32_mode_e;

/**
* @brief  PIN33 IO_PAD_AP_SPIS_MOSI 可选的mode
*/
typedef enum
{
    PIN33_MODE_JTAG_TDI     = 0,
    PIN33_MODE_SPIS_MOSI    = 1,
    PIN33_MODE_GPIO1        = 2,
    PIN33_MODE_UART0_TX     = 3,
    PIN33_MODE_I2C1_SDA_0   = 6,
} pin33_mode_e;

/**
* @brief  PIN34 PAD_AP_RST可选的mode
*/
typedef enum
{
    PIN34_MODE_GPIO17       = 2,
} pin34_mode_e;


/**
* @brief  PIN35 PAD_TD_INT可选的mode
*/
typedef enum
{
    PIN35_MODE_GPIO22       = 2,
} pin35_mode_e;


/**
* @brief  PIN36 PAD_UART_RX可选的mode
*/
typedef enum
{
    PIN36_MODE_UART0_RX    = 0,
    PIN36_MODE_PWMO        = 1,
    PIN36_MODE_GPIO25       = 2,
} pin36_mode_e;



//-------------------------------------------------------------------------
/**
* @brief  PAD_SFC_CLK可选的mode    内部PAD
*/
typedef enum
{
    IO_MODE_INTER_FC_CLK = 0,
    IO_MODE_TSPIS_CLK_EN = 2,
} pad_sfc_clk_mode_e;

/**
* @brief  PAD_SFC_CSN可选的mode     内部PAD
*/
typedef enum
{
    IO_MODE_INTER_FC_CSN = 0,
    IO_MODE_TSPIS_CSN_EN = 2,
} pad_sfc_csn_mode_e;

/**
* @brief  PAD_SFC_IO0可选的mode     内部PAD
*/
typedef enum
{
    IO_MODE_INTER_FC_IO0 = 0,
    IO_MODE_TSPIS_IO0_EN = 2,
} pad_sfc_io0_mode_e;

/**
* @brief  PAD_SFC_IO1可选的mode     内部PAD
*/
typedef enum
{
    IO_MODE_INTER_FC_IO1 = 0,
    IO_MODE_TSPIS_IO1_EN = 2,
} pad_sfc_io1_mode_e;

/**
* @brief  PAD电压转换速率
*/
typedef enum
{
    IO_SLEW_RATE_SLOW = 0,
    IO_SLEW_RATE_FAST = 1,
} pad_slew_rate_e;

/*******************************************************************************
* IOE
*******************************************************************************/
/**
* @brief  GPIO io方向
*/
typedef enum
{
    IO_IOE_INPUT = 0,
    IO_IOE_OUTPUT,
    IO_IOE_NONE
} gpio_ioe_e;

/**
* @brief  GPIO level
*/
typedef enum
{
    IO_LVL_LOW = 0,
    IO_LVL_HIGH,
    IO_LVL_NONE
} gpio_level_e;

/*******************************************************************************
* 3.Global structures, unions and enumerations using typedef
*******************************************************************************/
/**
* @brief  PAD与MODE的MAP结构体
*/
typedef struct
{
    io_pad_e          pad;
    uint8_t           mode;
    gpio_ioe_e        ioe;
    gpio_level_e      lvl;
} io_pad_attr_t;

/*******************************************************************************
* 4.Global variable extern declarations
*******************************************************************************/

/*******************************************************************************
* 5.Global function prototypes
*******************************************************************************/
/**
* @brief  配置指定PAD为GPIO mode，方向为input，指定中断触发方式
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  trig：4种中断触发方式，参考枚举类型sys_cfg_trigger_e
* @retval 无
*/
void hal_gpio_init_eint(io_pad_e pad, sys_cfg_trigger_e trig);

/**
* @brief  注册GPIO中断回调函数
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  cb_func：回调函数地址
* @param  data：回调函数参数地址
* @retval 无
*/
void hal_gpio_reg_eint_cb(io_pad_e pad, fcb_type cb_func);

/**
* @brief  开关GPIO中断
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  state：开关控制
* @retval 无
*/
void hal_gpio_ctrl_eint(io_pad_e pad, bool state);

/**
* @brief  获取GPIO中断类型
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @retval 无
*/
gpio_int_e hal_gpio_get_int_type(io_pad_e pad);

/**
* @brief  配置指定PAD为GPIO mode，方向为output，指定初始电平
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  lvl：初始电平，参考枚举类型gpio_level_e
* @retval 无
*/
void hal_gpio_init_output(io_pad_e pad, gpio_level_e lvl);

/**
* @brief  封装设置输出接口
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  lvl：初始电平，参考枚举类型gpio_level_e
* @retval 无
*/
void hal_gpio_set_output_data(io_pad_e pad, gpio_level_e lvl);

/**
* @brief  配置指定PAD为GPIO mode，方向为input
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @retval 无
*/
void hal_gpio_init_input(io_pad_e pad);

/**
* @brief  读取输入电平
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @retval 无
*/
gpio_level_e hal_gpio_get_input_data(io_pad_e pad);

/**
* @brief  设置io mode
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  mode：工作模式，参考各PAD对应的mode枚举类型
* @retval 无
*/
void hal_gpio_set_mode(io_pad_e pad, uint8_t mode);

/**
* @brief  设置io 为高阻态
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @retval 无
*/
void hal_gpio_set_high_impedance(io_pad_e pad);

/**
* @brief  获取指定PAD的默认上拉、下拉状态
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  up_enable：默认上拉状态
* @param  down_enable：默认下拉状态
* @retval 无
*/
void hal_gpio_get_pull_state(io_pad_e pad, bool *up_enable, bool *down_enable);

/**
* @brief  配置指定PAD的默认上拉、下拉状态
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  up_enable：默认上拉状态
* @param  down_enable：默认下拉状态
* @retval 无
*/
void hal_gpio_set_pull_state(io_pad_e pad, bool up_enable, bool down_enable);

/**
* @brief  配置指定PAD是否为施密特触发
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  st_enable：1为施密特触发，0为正常触发
* @retval 无
*/
void hal_gpio_set_schmitt_trigger(io_pad_e pad, bool st_enable);

/**
* @brief  配置指定PAD的驱动能力
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  strength：驱动强度，取值为0~3
* @retval 无
*/
void hal_gpio_set_driving_strength(io_pad_e pad, uint8_t strength);

/**
* @brief  配置指定PAD的电压转换速率
* @param  pad：GPIO序号，参考枚举类型gpio_pad_e
* @param  rate：驱动强度，取值为0~3
* @retval 无
*/
void hal_gpio_set_slew_rate(io_pad_e pad, pad_slew_rate_e rate);

/**
* @brief  配置AP_RSTN引脚中断
* @param  enable: 中断开关
* @param  cb_func：回调函数
* @param  trig：触发模式
* @retval 无
*/
void hal_gpio_set_ap_reset_int(bool enable, fcb_type cb_func, sys_cfg_trigger_e trig);

/**
* @brief  批量设置IO参数
* @param  attrs: PAD属性
* @param  size: 数组成员个数
* @retval 无
*/
void hal_gpio_config_pad(io_pad_attr_t *attrs, uint8_t size);

#endif /* __HAL_GPIO_H__ */
