#include "HD_GPIO.h"

void HD_GPIO_Init(void)
{
    GPIO_InitTypeDef   GPIO_InitStructure;

    /* 安卓模块电源使能引脚，默认不使能 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_PwrCtrl_GPIO_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIO_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(GPIO_PwrCtrl_GPIO_PROT, GPIO_PwrCtrl_GPIO_PIN, Bit_RESET);

    /* 复位安卓模块引脚，默认低电平 */
    GPIO_InitStructure.GPIO_Pin = GPIO_PwrKey_GPIO_PIN;
    GPIO_Init(GPIO_PwrKey_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(GPIO_PwrKey_GPIO_PROT, GPIO_PwrKey_GPIO_PIN, Bit_RESET);

    /* 电源控制引脚，默认不开启电源 */
    GPIO_InitStructure.GPIO_Pin = J1_PwrCtrl_GPIO_PIN;
    GPIO_Init(J1_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J1_PwrCtrl_GPIO_PROT, J1_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J2_PwrCtrl_GPIO_PIN;
    GPIO_Init(J2_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J2_PwrCtrl_GPIO_PROT, J2_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J3_PwrCtrl_GPIO_PIN;
    GPIO_Init(J3_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J3_PwrCtrl_GPIO_PROT, J3_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J4_PwrCtrl_GPIO_PIN;
    GPIO_Init(J4_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J4_PwrCtrl_GPIO_PROT, J4_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J5_PwrCtrl_GPIO_PIN;
    GPIO_Init(J5_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J5_PwrCtrl_GPIO_PROT, J5_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J6_PwrCtrl_GPIO_PIN;
    GPIO_Init(J6_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J6_PwrCtrl_GPIO_PROT, J6_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J7_PwrCtrl_GPIO_PIN;
    GPIO_Init(J7_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J7_PwrCtrl_GPIO_PROT, J7_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J8_PwrCtrl_GPIO_PIN;
    GPIO_Init(J8_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J8_PwrCtrl_GPIO_PROT, J8_PwrCtrl_GPIO_PIN, Bit_RESET);

    GPIO_InitStructure.GPIO_Pin = J9_PwrCtrl_GPIO_PIN;
    GPIO_Init(J9_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(J9_PwrCtrl_GPIO_PROT, J9_PwrCtrl_GPIO_PIN, Bit_RESET);

    /* 喂狗引脚 */
    GPIO_InitStructure.GPIO_Pin = WDI_GPIO_PIN;
    GPIO_Init(WDI_GPIO_PROT, &GPIO_InitStructure);
    GPIO_WriteBit(WDI_GPIO_PROT, WDI_GPIO_PIN, Bit_SET);
}

/**
  * @brief  设置IO输出电平
  * @param  GPIOx
            GPIO_Pin
            BitVal
  * @retval 
  */
void HD_GPIO_Write(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin, BitOperation BitVal)
{
    GPIO_WriteBit(GPIOx, GPIO_Pin, BitVal);
}

/**
  * @brief  得到IO电平
  * @param  GPIOx
            GPIO_Pin
  * @retval 
  */
uint8_t HD_InputGPIO_Read(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin)
{
    return GPIO_ReadInputDataBit(GPIOx, GPIO_Pin);
}

/**
  * @brief  得到IO电平
  * @param  GPIOx
            GPIO_Pin
  * @retval 
  */
uint8_t HD_OutputGPIO_Read(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin)
{
    return GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin);
}
