#ifndef STM32F7XX_PIN_MAP
#define STM32F7XX_PIN_MAP

#include "exo_hal_io_al_common.h"
#include "exo_io_al_gpio_common.h"
#include "exo_ahw_al_gpio_exp_common.h"

#define RTC_CLOCK_SOURCE_LSE

#ifdef RTC_CLOCK_SOURCE_LSI
#define RTC_ASYNCH_PREDIV    0x7F
#define RTC_SYNCH_PREDIV     0x00F9
#endif

#ifdef RTC_CLOCK_SOURCE_LSE
#define RTC_ASYNCH_PREDIV  0x7F
#define RTC_SYNCH_PREDIV   0x00FF
#endif

#define I2C1_SDA          GPIO_PIN_9
#define I2C1_SCK          GPIO_PIN_8
#define I2C1_PORT         GPIOB

#define UART6_TX           GPIO_PIN_6
#define UART6_RX           GPIO_PIN_7
#define UART6_PORT         GPIOC

#define UART1_TX           GPIO_PIN_9
#define UART1_RX           GPIO_PIN_10
#define UART1_PORT         GPIOA

#define SPI2_MOSI          GPIO_PIN_15
#define SPI2_MISO          GPIO_PIN_14
#define SPI2_SCK           GPIO_PIN_12
#define SPI2_PORT          GPIOB
#define SPI2_SCK_PORT      GPIOA

#define CAN1_TX             GPIO_PIN_9
#define CAN1_RX             GPIO_PIN_8
#define CAN1_PORT           GPIOB

#define CAN3_TX             GPIO_PIN_4
#define CAN3_RX             GPIO_PIN_3
#define CAN3_PORT           GPIOB

#define CAN2_TX             GPIO_PIN_13
#define CAN2_RX             GPIO_PIN_12
#define CAN2_PORT           GPIOB


#define MCU_GPIO(x) ((x <<8)  | MCU_ID)
#define MCP23008_EDGE_1_GPIO(x) ((x <<8)  | GPIO_EXPANDER_MCP23008_EDGE_1)
#define MCP23008_EDGE_2_GPIO(x) ((x <<8)  | GPIO_EXPANDER_MCP23008_EDGE_2)
#define MCP23008_OBC_1_GPIO(x) ((x <<8)  | GPIO_EXPANDER_MCP23008_OBC_1)
#define MCP23008_OBC_2_GPIO(x) ((x <<8)  | GPIO_EXPANDER_MCP23008_OBC_2)
#define MCP23008_GPS_GPIO(x) ((x <<8)  | GPIO_EXPANDER_MCP23008_GPS)
#define PCAL6408A_PS_GPIO(x) ((x <<8)  | GPIO_EXPANDER_PCAL6408A_PS)


//#define CORE_CURRENT_SENSE_INT  MCU_GPIO(IOAL_GPIO_PIN_0)
#define PLD_SSD_EN   MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_6)

#define PS_SSD_HEAT_ENABLE                  MCU_GPIO(IOAL_GPIO_PIN_157) //157
#define CORE_CURRENT_SENSE_INT             MCU_GPIO(IOAL_GPIO_PIN_135)
#define CORE_IO2_EXPD_INT                  MCU_GPIO(IOAL_GPIO_PIN_143)
#define EDGE_IO_INT                        MCU_GPIO(IOAL_GPIO_PIN_163)
#define CORE_IO1_EXPD_INT                  MCU_GPIO(IOAL_GPIO_PIN_166)
#define CORE_TEMP_SENSE_INT                   MCU_GPIO(IOAL_GPIO_PIN_102)
#define GPS_IO_EXPD_INT                    MCU_GPIO(IOAL_GPIO_PIN_144)
#define PL_IO_EXPD_INT                    MCU_GPIO(IOAL_GPIO_PIN_154)
#define SHUTDOWN_REQ                       MCU_GPIO(IOAL_GPIO_PIN_16)
#define POWER_EN                           MCU_GPIO(IOAL_GPIO_PIN_17)
#define SUS_S3_CORE                        MCU_GPIO(IOAL_GPIO_PIN_18)

#define UART_SW_EN_1                       MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_0)
#define UART_SW_SEL_1                      MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_1)
#define UART_SW_EN_2                       MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_2)
#define UART_SW_SEL_2                      MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_3)
#define ETH_RESET                          MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_4)
#define GPS_CORE_PGOOD                     MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_5)
#define GPS_ON_CORE                        MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_6)
#define MRESET_IN                          MCP23008_OBC_1_GPIO(GPIO_EXP_GPIO_7)

#define ETH_DCDC1_ON                       MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_0)
#define ETH_DCDC2_ON                       MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_1)
#define OBC_DVDDL_PG                       MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_2)
#define OBC_DVDDIO_PG                      MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_3)
#define PAYLOAD_VCC_ENABLE                 MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_4)
#define PAYLOAD_SB_ENABLE                  MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_5)
#define PAYLOAD_SSD_CORE_ENABLE            MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_6)
#define SBAND_BB_EN                        MCP23008_OBC_2_GPIO(GPIO_EXP_GPIO_7)

#define PS_DVDDL_PG                        PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_0)
#define PS_PCIE_EW3                        PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_1)
#define PS_SSD_EN1                         PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_2)
#define PS_SSD_EN2                         PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_3)
#define PS_DVDDIO_PG                       PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_4)
#define PS_ETH_DCDC2_ON                    PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_5)
#define PS_ETH_RESET                       PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_6)
#define PS_ETH_DCDC1_ON                    PCAL6408A_PS_GPIO(GPIO_EXP_GPIO_7)

#define EDGE_SSD_EN1                       MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_0)
#define EDGE_SSD_EN2                       MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_1)
#define EDGE_UART_SW_EN_1                  MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_2)
#define EDGE_UART_SW_SEL_1                 MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_3)
#define EDGE_SSD_HEAT_ENABLE               MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_4)
#define EDGE_TEM_SEN_INT                   MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_5)
#define EDGE_UART_SW_EN_2                  MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_6)
#define EDGE_UART_SW_SEL_2                 MCP23008_EDGE_1_GPIO(GPIO_EXP_GPIO_7)

#define EDGE_EN_5V_EDGE                    MCP23008_EDGE_2_GPIO(GPIO_EXP_GPIO_0)
#define EDGE_IO2_EXPD_INT                  MCP23008_EDGE_2_GPIO(GPIO_EXP_GPIO_1)
#define EDGE_EN_1P8V_EDGE                  MCP23008_EDGE_2_GPIO(GPIO_EXP_GPIO_2)
#define EDGE_EN_3P3V_EDGE_EN               MCP23008_EDGE_2_GPIO(GPIO_EXP_GPIO_3)
#define EDGE_PGOOD_1P8V_EDGE               MCP23008_EDGE_2_GPIO(GPIO_EXP_GPIO_4)
#define EDGE_PGOOD_3P3V_EDGE               MCP23008_EDGE_2_GPIO(GPIO_EXP_GPIO_5)

#define GPS_TEM_SEN_INT                    MCP23008_GPS_GPIO(GPIO_EXP_GPIO_0)
#define GPS_HUB_ON                         MCP23008_GPS_GPIO(GPIO_EXP_GPIO_1)
#define GPS_HUB_PGOOD                      MCP23008_GPS_GPIO(GPIO_EXP_GPIO_2)
#define GPS_PGOOD                          MCP23008_GPS_GPIO(GPIO_EXP_GPIO_3)
#define GPS2_IO_EXPD_INT                   MCP23008_GPS_GPIO(GPIO_EXP_GPIO_4)
#define GPS_TRANS_WFDOUT                   MCP23008_GPS_GPIO(GPIO_EXP_GPIO_5)
#define GPS_FDTI_RESETN                    MCP23008_GPS_GPIO(GPIO_EXP_GPIO_6)
#define GPS_ON                             MCP23008_GPS_GPIO(GPIO_EXP_GPIO_7)



#endif
