#ifndef RTE_GPIO_BAT32A239_H__
#define RTE_GPIO_BAT32A239_H__

#include "stdint.h"

#define RTE_GPIO_PORT_MAX 15
#define RTE_GPIO_PORT_PIN_MAX 8

#define RTE_GPIO_IRQ_MAX 12

typedef struct
{
    uint16_t  u16Pin;
    uint16_t  u16Type;
    int32_t   i32Flag;
    void     *pvHandler;
}RTE_GPIO_IRQ_Desc_st_t;

#define   RTE_GPIO_PORT_GROUP_00             (00U)
#define   RTE_GPIO_PORT_GROUP_01             (01U)
#define   RTE_GPIO_PORT_GROUP_02             (02U)
#define   RTE_GPIO_PORT_GROUP_03             (03U)
#define   RTE_GPIO_PORT_GROUP_04             (04U)
#define   RTE_GPIO_PORT_GROUP_05             (05U)
#define   RTE_GPIO_PORT_GROUP_06             (06U)
#define   RTE_GPIO_PORT_GROUP_07             (07U)
#define   RTE_GPIO_PORT_GROUP_12             (12U)
#define   RTE_GPIO_PORT_GROUP_13             (13U)
#define   RTE_GPIO_PORT_GROUP_14             (14U)

#define   RTE_GPIO_PIN_NUM_00               (0x00U)
#define   RTE_GPIO_PIN_NUM_01               (0x01U)
#define   RTE_GPIO_PIN_NUM_02               (0x02U)
#define   RTE_GPIO_PIN_NUM_03               (0x03U)
#define   RTE_GPIO_PIN_NUM_04               (0x04U)
#define   RTE_GPIO_PIN_NUM_05               (0x05U)
#define   RTE_GPIO_PIN_NUM_06               (0x06U)
#define   RTE_GPIO_PIN_NUM_07               (0x07U)

#define   RTE_GPIO_PORT00_PIN00             (((uint16_t)RTE_GPIO_PORT_GROUP_00 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT00_PIN01             (((uint16_t)RTE_GPIO_PORT_GROUP_00 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT00_PIN02             (((uint16_t)RTE_GPIO_PORT_GROUP_00 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT00_PIN03             (((uint16_t)RTE_GPIO_PORT_GROUP_00 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)
#define   RTE_GPIO_PORT00_PIN04             (((uint16_t)RTE_GPIO_PORT_GROUP_00 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_04)
#define   RTE_GPIO_PORT00_PIN05             (((uint16_t)RTE_GPIO_PORT_GROUP_00 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_05)
#define   RTE_GPIO_PORT00_PIN06             (((uint16_t)RTE_GPIO_PORT_GROUP_00 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_06)

#define   RTE_GPIO_PORT01_PIN00             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT01_PIN01             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT01_PIN02             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT01_PIN03             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)
#define   RTE_GPIO_PORT01_PIN04             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_04)
#define   RTE_GPIO_PORT01_PIN05             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_05)
#define   RTE_GPIO_PORT01_PIN06             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_06)
#define   RTE_GPIO_PORT01_PIN07             (((uint16_t)RTE_GPIO_PORT_GROUP_01 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_07)

#define   RTE_GPIO_PORT02_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT02_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT02_PIN02              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT02_PIN03              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)
#define   RTE_GPIO_PORT02_PIN04              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_04)
#define   RTE_GPIO_PORT02_PIN05              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_05)
#define   RTE_GPIO_PORT02_PIN06              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_06)
#define   RTE_GPIO_PORT02_PIN07              (((uint16_t)RTE_GPIO_PORT_GROUP_02 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_07)

#define   RTE_GPIO_PORT03_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_03 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT03_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_03 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)

#define   RTE_GPIO_PORT04_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_04 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT04_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_04 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT04_PIN02              (((uint16_t)RTE_GPIO_PORT_GROUP_04 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT04_PIN03              (((uint16_t)RTE_GPIO_PORT_GROUP_04 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)

#define   RTE_GPIO_PORT05_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_05 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT05_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_05 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT05_PIN02              (((uint16_t)RTE_GPIO_PORT_GROUP_05 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT05_PIN03              (((uint16_t)RTE_GPIO_PORT_GROUP_05 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)
#define   RTE_GPIO_PORT05_PIN04              (((uint16_t)RTE_GPIO_PORT_GROUP_05 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_04)
#define   RTE_GPIO_PORT05_PIN05              (((uint16_t)RTE_GPIO_PORT_GROUP_05 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_05)

#define   RTE_GPIO_PORT06_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_06 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT06_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_06 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT06_PIN02              (((uint16_t)RTE_GPIO_PORT_GROUP_06 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT06_PIN03              (((uint16_t)RTE_GPIO_PORT_GROUP_06 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)

#define   RTE_GPIO_PORT07_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT07_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT07_PIN02              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT07_PIN03              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)
#define   RTE_GPIO_PORT07_PIN04              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_04)
#define   RTE_GPIO_PORT07_PIN05              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_05)
#define   RTE_GPIO_PORT07_PIN06              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_06)
#define   RTE_GPIO_PORT07_PIN07              (((uint16_t)RTE_GPIO_PORT_GROUP_07 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_07)

#define   RTE_GPIO_PORT12_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_12 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT12_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_12 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT12_PIN02              (((uint16_t)RTE_GPIO_PORT_GROUP_12 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_02)
#define   RTE_GPIO_PORT12_PIN03              (((uint16_t)RTE_GPIO_PORT_GROUP_12 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_03)
#define   RTE_GPIO_PORT12_PIN04              (((uint16_t)RTE_GPIO_PORT_GROUP_12 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_04)

#define   RTE_GPIO_PORT13_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_13 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT13_PIN06              (((uint16_t)RTE_GPIO_PORT_GROUP_13 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_06)
#define   RTE_GPIO_PORT13_PIN07              (((uint16_t)RTE_GPIO_PORT_GROUP_13 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_07)

#define   RTE_GPIO_PORT14_PIN00              (((uint16_t)RTE_GPIO_PORT_GROUP_14 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_00)
#define   RTE_GPIO_PORT14_PIN01              (((uint16_t)RTE_GPIO_PORT_GROUP_14 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_01)
#define   RTE_GPIO_PORT14_PIN06              (((uint16_t)RTE_GPIO_PORT_GROUP_14 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_06)
#define   RTE_GPIO_PORT14_PIN07              (((uint16_t)RTE_GPIO_PORT_GROUP_14 << 8) | (uint16_t)RTE_GPIO_PIN_NUM_07)


#endif /* RTE_GPIO_BAT32A239_H__ */