#include "exo_gpio.h"
//#include "exo_osal.h"
#include "exo_common.h"
//#include "eps_pgood.h"
#include "exo_pinmap.h"
#include "exo_osal_thread.h"
#include "stm32f7xx_hal.h"
#include "stm32f7xx_hal_gpio.h"


#ifndef __weak
#define __weak __attribute__((weak))
#endif

#ifndef EXO_UNUSED
#define EXO_UNUSED(X) (void)X
#endif

__weak void spi_uart_conv_int(void * args)
{
    EXO_UNUSED(args);
}

/* GEN2 PIN IMPLEMENTATION*/
void obc_gen2_gpio_init()
{
    ioal_gpio_config ioal_gpio_cfg;

	ioal_gpio_cfg.pin_number = ETH_RESET_N;
	ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
	ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
	ioal_gpio_cfg.external_int.isr_handler =NULL;
	ioal_gpio_cfg.external_int.isr_args = NULL;
	ioal_gpio_cfg.speed = IOAL_GPIO_SPEED_FREQ_LOW;
	io_hal_gpio_init(&ioal_gpio_cfg);
	io_hal_gpio_writepin(ETH_RESET_N,IOAL_GPIO_PIN_SET);

    ioal_gpio_cfg.pin_number = ETH_RESET;      //payload server ethernet reset
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    ioal_gpio_cfg.speed = IOAL_GPIO_SPEED_FREQ_LOW;
    io_hal_gpio_init(&ioal_gpio_cfg);
    io_hal_gpio_writepin(ETH_RESET,IOAL_GPIO_PIN_SET);

    ioal_gpio_cfg.pin_number = SSD_EXPANDER_INTRPT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

//    ioal_gpio_cfg.pin_number = MCO;
//    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
//    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
//    ioal_gpio_cfg.external_int.isr_handler =spi_uart_conv_int;
//    ioal_gpio_cfg.external_int.isr_args = NULL;
//    io_hal_gpio_init(&ioal_gpio_cfg);

        ioal_gpio_cfg.pin_number = OPTICAL_I2C_SEL;
        ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
        ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
        ioal_gpio_cfg.external_int.isr_handler =NULL;
        ioal_gpio_cfg.external_int.isr_args = NULL;
        io_hal_gpio_init(&ioal_gpio_cfg);

    //io_hal_gpio_writepin(SHUTDOWN_REQ,IOAL_GPIO_PIN_RESET);
    ioal_gpio_cfg.pin_number = SHUTDOWN_REQ;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(POWER_EN,IOAL_GPIO_PIN_RESET);
    ioal_gpio_cfg.pin_number = POWER_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SUS_S3_CORE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PB4_GPIO_NJTRST;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SYS_RESET;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_IO1_EXPD_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler = NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = EDGE_U40_EXPD_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PS_MUX_PC6;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = RTC_OUT_GPIO_TP;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler = NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PS_TRIGGER_SW_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler = NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = BMX160_U2_INT1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_TEM_SEN_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PS_USB_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
///> GPIO_10

    ioal_gpio_cfg.pin_number = BMX160_U1_INT1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler = NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = MCU2_INTERRUPT_EPS;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_ETH_UART5_SW_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = EDGE_GBE_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = EDGE_UART_SW_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler = NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = GPS_SW_SELECTION;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler = NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = POER10_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = EPS_RST_GPIO;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PAYLOAD_PCB_SEN_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_I2C2_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PAYLOAD_TEM_SEN_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = EDGE_IO_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_IO3_EXPD_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PWRBT_CORE_PCB;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = GPS_IO_EXPD_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = ADCS_PWR_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PG_CORE_PCB;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = QUADSPI_BK1_NCS2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = GPIO_PJ4;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    io_hal_gpio_writepin(GPIO_PJ4,IOAL_GPIO_PIN_RESET);


    ioal_gpio_cfg.pin_number = PS_CAN_SW_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_1PPS_1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_PS_SW_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PS_ETH_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PL_IO_EXPD_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = GPIO_PJ10;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PAY_CAN_SWSELECTION;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_HEAT_ENABLE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_IO2_EXPD_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = RESETBT_CORE_PCB;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CORE_EDGE_SW_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
}

/*
 * This function init edge server gpio pin
 */
void edge_server_gpio_init()
{
    ioal_gpio_config ioal_gpio_cfg;
    ioal_gpio_cfg.pin_number = E1_EN_5V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_EDGE_TEM_SEN_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_EN_1P8V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_EN_3P3V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_PGOOD_1P8V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_PGOOD_3P3V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = MUX_SSD_EN1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = MUX_SSD_EN2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CLK_EN_A_B;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_RST_CON_ENB;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_WAKE_CON_ENB;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_FORCE_RECOVERY_LT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E2_FORCE_RECOVERY_LT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E2_EDGE_TEM_SEN_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = CONN2_PCIE0_CLKREQ;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
	io_hal_gpio_writepin(CONN2_PCIE0_CLKREQ,GPIO_EXP_PIN_RESET);       ///< GP6

    ioal_gpio_cfg.pin_number = CONN1_PCIE0_CLKREQ;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    io_hal_gpio_writepin(CONN1_PCIE0_CLKREQ,GPIO_EXP_PIN_RESET);       ///< GP7

    ioal_gpio_cfg.pin_number = E2_EN_5V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E2_EN_1P8V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E2_EN_3P3V_EDGE_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E2_PGOOD_1P8V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E2_PGOOD_3P3V_EDGE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = USB_PD1_PD2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    io_hal_gpio_writepin(USB_PD1_PD2,GPIO_EXP_PIN_RESET);

    ioal_gpio_cfg.pin_number = USB_SEL1_SEL2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_RST_ENB;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_WAKE_ENB;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = EI_SEL1_SEL2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E2_SEL1_SEL2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD0_SEL1_SEL2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD1_SEL1_SEL2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_E2_PD;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD0_SSD1_PD;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
}

/*
 * This function init IO board pin
 */
void io_board_init()
{

	 ioal_gpio_config ioal_gpio_cfg;
    ioal_gpio_cfg.pin_number = A_ETH_DCDC1_ON;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = A_ETH_DCDC2_ON;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = A_DVDDL_PG;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = A_DVDDIO_PG;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PORT10_USB_SEL;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = A2_ETH_RESET;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = IO_BOARD_ON;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = FDTI_RESETN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = B_DVDDL_PG;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = B_DVDDIO_PG;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = B1_ETH_RESET;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = B2_ETH_RESET;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = MUX_PD_ENABLE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);


    ioal_gpio_cfg.pin_number = B_ETH_DCDC1_ON;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = B_ETH_DCDC2_ON;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = IO_TEM_SEN_INT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_RISING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

//    ioal_gpio_cfg.pin_number = SPI_UART_IRQ;
//    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
//    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
//    ioal_gpio_cfg.external_int.isr_handler =NULL;
//    ioal_gpio_cfg.external_int.isr_args = NULL;
//    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SPI1_CS;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    io_hal_gpio_writepin(SPI1_CS,IOAL_GPIO_PIN_SET);


    ioal_gpio_cfg.pin_number = SPI_UART_RST;
     ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
     ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
     ioal_gpio_cfg.external_int.isr_handler =NULL;
     ioal_gpio_cfg.external_int.isr_args = NULL;
     io_hal_gpio_init(&ioal_gpio_cfg);
}

/*
 * This function init SSD board pin
 */
void ssd_board_init()
{
    ioal_gpio_config ioal_gpio_cfg;
    io_hal_gpio_writepin(SSD_MUX_SW_IN1,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD_MUX_SW_IN1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(SSD_MUX_SW_IN2,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD_MUX_SW_IN2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(REDRIVER_SW_IN1,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = REDRIVER_SW_IN1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(REDRIVER_SW_IN2,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = REDRIVER_SW_IN2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(CON_MUX_SW_IN1,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = CON_MUX_SW_IN1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(CON_MUX_SW_IN2,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = CON_MUX_SW_IN2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    io_hal_gpio_writepin(CON_MUX_SW_IN2,GPIO_EXP_PIN_RESET);

    io_hal_gpio_writepin(CLK_SSD_EN_A_B,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = CLK_SSD_EN_A_B;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(ALL_MUX_ENABLE,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = ALL_MUX_ENABLE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(SSD_EN1,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD_EN1;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(SSD_EN2,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD_EN2;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(SSD_EN3,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD_EN3;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(SSD_EN4,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD_EN4;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(SSD1_SSD3_PD,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD1_SSD3_PD;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(A_SSD1_SSD2_PD,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = A_SSD1_SSD2_PD;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(B_SSD1_SSD2_PD,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = B_SSD1_SSD2_PD;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(SSD2_SSD4_PD,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = SSD2_SSD4_PD;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
}

/*
 * This function init PS board pins
 */
void ps_brd_init()
{

    ioal_gpio_config ioal_gpio_cfg;

    io_hal_gpio_writepin(ETH_VDD3V3_EN,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = ETH_VDD3V3_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    //io_hal_gpio_writepin(ETH_VDD3V3_PG,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = ETH_VDD3V3_PG;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
    //ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(PAYLOAD_VCC_ENABLE,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = PAYLOAD_VCC_ENABLE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(PAYLOAD_SB_ENABLE,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = PAYLOAD_SB_ENABLE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(PAYLOAD_SSD_CORE_ENABLE,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = PAYLOAD_SSD_CORE_ENABLE;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    io_hal_gpio_writepin(ETH_RESET,GPIO_EXP_PIN_RESET);
    ioal_gpio_cfg.pin_number = ETH_RESET;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
}

/*
 * This function init Backplane board pins
 */
void bck_panel_brd_init()
{
    ioal_gpio_config ioal_gpio_cfg;
    ioal_gpio_cfg.pin_number = SPI_IRQ;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

//    ioal_gpio_cfg.pin_number = SPI_RST;
//    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
//    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
//    ioal_gpio_cfg.external_int.isr_handler =NULL;
//    ioal_gpio_cfg.external_int.isr_args = NULL;
//    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PL72A1_RESET;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = GPS_ON;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = BP_PWR_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = NRESET_IN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
}

/*
 * This function init Power board pins
 */
void power_board_init()
{
    ioal_gpio_config ioal_gpio_cfg;
    ioal_gpio_cfg.pin_number = E1_SSD0_HEAT_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    
    ioal_gpio_cfg.pin_number = E2_SSD0_HEAT_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_HEAT_TOP1_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    
    ioal_gpio_cfg.pin_number = SSD_HEAT_TOP2_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_HEAT_BOT1_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = SSD_HEAT_BOT2_EN;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PS1_PCB_SEN_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PS2_PCB_SEN_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PAY_LOAD1_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = PAY_LOAD2_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = IO_PCB_SEN_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);

    ioal_gpio_cfg.pin_number = E1_PCB_SEN_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    
    ioal_gpio_cfg.pin_number = CORE2_PCB_SEN_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
    
    ioal_gpio_cfg.pin_number = E2_PCB_SEN_ALERT;
    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_IT_FALLING;
    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
    ioal_gpio_cfg.external_int.isr_handler =NULL;
    ioal_gpio_cfg.external_int.isr_args = NULL;
    io_hal_gpio_init(&ioal_gpio_cfg);
}

void gps_gpio_init()
{
    int a =0 ;
    a++;
}

void payload_server_gpio_init()
    {
    }

void ps_intr_deinit()
{
}

void edge_intr_deinit()
{
}

void gps_intr_deinit()
{
}

uint8_t obc_gpio_test(uint8_t *data)
{
	uint8_t read_val = 0;
	uint8_t gpio_sts = 1;
	//ioal_gpio_config ioal_gpio_cfg;
	if(data[0] == 1)
	{
		switch(data[1])
		{
		case 1:
		{
			if((read_val = io_hal_gpio_readpin(SSD_EXPANDER_INTRPT)) == 1){
				read_val = 0;
				gpio_sts = 0;}
			else
				gpio_sts = 1;
		}
		break;
		case 2:
		{
			if((read_val = io_hal_gpio_readpin(SHUTDOWN_REQ)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 3:
		{
			if((read_val = io_hal_gpio_readpin(CORE_IO1_EXPD_INT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 4:
		{
			if((read_val = io_hal_gpio_readpin(EDGE_U40_EXPD_INT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
//		case 5:
//		{
//			HAL_GPIO_DeInit(GPIOG, GPIO_PIN_10);
//		    ioal_gpio_cfg.pin_number = GPIO_PG10;
//		    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
//		    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
//		    ioal_gpio_cfg.external_int.isr_handler =NULL;
//		    ioal_gpio_cfg.external_int.isr_args = NULL;
//		    io_hal_gpio_init(&ioal_gpio_cfg);
//
//			if((read_val = io_hal_gpio_readpin(GPIO_PG10)) == 1){
//				read_val = 0;
//				gpio_sts = 0;
//			}
//			else
//				gpio_sts = 1;
//			//HAL_GPIO_DeInit(GPIOG, GPIO_PIN_10);
//		}
//		break;
//		case 6:
//		{
//			HAL_GPIO_DeInit(GPIOG, GPIO_PIN_11);
//		    ioal_gpio_cfg.pin_number = SPI_UART_IRQ;
//		    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_INPUT;
//		    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
//		    ioal_gpio_cfg.external_int.isr_handler =NULL;
//		    ioal_gpio_cfg.external_int.isr_args = NULL;
//		    io_hal_gpio_init(&ioal_gpio_cfg);
//
//			if((read_val = io_hal_gpio_readpin(SPI_UART_IRQ)) == 1){
//				read_val = 0;
//				gpio_sts = 0;
//			}
//			else
//				gpio_sts = 1;
//			//HAL_GPIO_DeInit(GPIOG, GPIO_PIN_11);
//		}
//		break;
		case 5:
		{
			if((read_val = io_hal_gpio_readpin(GPS_IO_EXPD_INT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 6:
		{
			if((read_val = io_hal_gpio_readpin(GPIO_PJ10)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 7:
		{
			if((read_val = io_hal_gpio_readpin(CORE_IO2_EXPD_INT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 8:
		{
			if((read_val = io_hal_gpio_readpin(RESETBT_CORE_PCB)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 9:
		{
			if((read_val = io_hal_gpio_readpin(PAYLOAD_PCB_SEN_ALERT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 10:
		{
			if((read_val = io_hal_gpio_readpin(PAYLOAD_TEM_SEN_INT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 11:
		{
			if((read_val = io_hal_gpio_readpin(EDGE_IO_INT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 12:
		{
			if((read_val = io_hal_gpio_readpin(CORE_IO3_EXPD_INT)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 13:
		{
			if((read_val = io_hal_gpio_readpin(PWRBT_CORE_PCB)) == 1){
				read_val = 0;
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		default:
			gpio_sts = 1;
		break;
		}
	}
	if(data[0] == 2)
	{
		switch(data[1])
		{
		case 1:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(POWER_EN,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(POWER_EN,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts =1;
		}
		break;
		case 2:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(SYS_RESET,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(SYS_RESET,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 3:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(PS_MUX_PC6,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(PS_MUX_PC6,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 4:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(OPTICAL_I2C_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(OPTICAL_I2C_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 5:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(PS_TRIGGER_SW_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(PS_TRIGGER_SW_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 6:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(PS_USB_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(PS_USB_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
//		case 7:
//		{
//			HAL_GPIO_DeInit(GPIOG, GPIO_PIN_10);
//			io_hal_gpio_writepin(GPIO_PG10,IOAL_GPIO_PIN_RESET);
//		    ioal_gpio_cfg.pin_number = GPIO_PG10;
//		    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
//		    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
//		    ioal_gpio_cfg.external_int.isr_handler =NULL;
//		    ioal_gpio_cfg.external_int.isr_args = NULL;
//		    io_hal_gpio_init(&ioal_gpio_cfg);
//
//			if(data[2] == 1)
//			{
//				io_hal_gpio_writepin(GPIO_PG10,IOAL_GPIO_PIN_SET);
//				gpio_sts = 0;
//			}
//			else if(data[2] == 2)
//			{
//				io_hal_gpio_writepin(GPIO_PG10,IOAL_GPIO_PIN_RESET);
//				gpio_sts = 0;
//			}
//			else
//				gpio_sts = 1;
//			//HAL_GPIO_DeInit(GPIOG, GPIO_PIN_10);
//		}
//		break;
//		case 8:
//		{
//			HAL_GPIO_DeInit(GPIOG, GPIO_PIN_11);
//			ioal_gpio_cfg.pin_number = SPI_UART_IRQ;
//		    ioal_gpio_cfg.mode = IOAL_GPIO_MODE_OUTPUT_PP;
//		    ioal_gpio_cfg.pull_sts = IOAL_GPIO_NOPULL;
//		    ioal_gpio_cfg.external_int.isr_handler =NULL;
//		    ioal_gpio_cfg.external_int.isr_args = NULL;
//		    io_hal_gpio_init(&ioal_gpio_cfg);
//
//			if(data[2] == 1)
//			{
//				io_hal_gpio_writepin(SPI_UART_IRQ,IOAL_GPIO_PIN_SET);
//				gpio_sts = 0;
//			}
//			else if(data[2] == 2)
//			{
//				io_hal_gpio_writepin(SPI_UART_IRQ,IOAL_GPIO_PIN_RESET);
//				gpio_sts = 0;
//			}
//			else
//				gpio_sts = 1;
//			//HAL_GPIO_DeInit(GPIOG, GPIO_PIN_11);
//		}
//		break;
		case 7:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(CORE_ETH_UART5_SW_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(CORE_ETH_UART5_SW_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 8:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(EDGE_GBE_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(EDGE_GBE_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 9:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(GPS_SW_SELECTION,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(GPS_SW_SELECTION,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 10:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(EDGE_UART_SW_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(EDGE_UART_SW_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 11:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(POER10_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(POER10_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 12:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(ADCS_PWR_EN,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(ADCS_PWR_EN,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 13:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(QUADSPI_BK1_NCS2,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(QUADSPI_BK1_NCS2,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 14:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(PS_CAN_SW_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(PS_CAN_SW_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 15:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(CORE_1PPS_1,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(CORE_1PPS_1,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 16:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(CORE_PS_SW_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(CORE_PS_SW_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 17:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(PS_ETH_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(PS_ETH_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 18:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(PAY_CAN_SWSELECTION,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(PAY_CAN_SWSELECTION,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 19:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(SSD_HEAT_ENABLE,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(SSD_HEAT_ENABLE,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 20:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(CORE_EDGE_SW_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(CORE_EDGE_SW_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		case 21:
		{
			if(data[2] == 1)
			{
				io_hal_gpio_writepin(CORE_I2C2_SEL,IOAL_GPIO_PIN_SET);
				gpio_sts = 0;
			}
			else if(data[2] == 2)
			{
				io_hal_gpio_writepin(CORE_I2C2_SEL,IOAL_GPIO_PIN_RESET);
				gpio_sts = 0;
			}
			else
				gpio_sts = 1;
		}
		break;
		default:
			gpio_sts = 1;
		break;
		}
	}
	return gpio_sts;
}

