#include "BoardConfig.h"

void MS1826a_RST_GPIO_PP(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = MS1826_RST;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void MS1826a_RST_GPIO_IPU(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = MS1826_RST;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void MS933x_RST_GPIO_PP(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = MS933X_RST;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}


void MS933x_RST_GPIO_IPU(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = MS933X_RST;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void LED_GPIO_Init(void)
{
    //HDMI1_LED
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = HDMI1_LED;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //HDMI2_LED
    //GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = HDMI2_LED;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    //HDMI3_LED
    //GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = HDMI3_LED;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_WriteBit(GPIOA, HDMI1_LED,  Bit_SET);
    GPIO_WriteBit(GPIOC, HDMI2_LED,  Bit_SET);
    GPIO_WriteBit(GPIOC, HDMI3_LED,  Bit_SET);
}

void CH444G_GPIO_Init(void)
{
    //CH444G_A
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = CH444G_A;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    //CH444G_B
    //GPIO_InitTypeDef GPIO_InitStructure = {0};
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = CH444G_B;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_WriteBit(GPIOB, CH444G_A,  Bit_SET);
    GPIO_WriteBit(GPIOB, CH444G_B,  Bit_SET);
}

// L L L X0, Y0 _XY_0
// L L H X1, Y1 _XY_1
// L H L X2, Y2 _XY_2
// L H H X3, Y3 default
void CH444G_XY_2(void)
{
    GPIO_WriteBit(GPIOB, CH444G_A,  Bit_RESET);
    GPIO_WriteBit(GPIOB, CH444G_B,  Bit_RESET);
}

void CH444G_XY_1(void)
{
    GPIO_WriteBit(GPIOB, CH444G_A,  Bit_SET);
    GPIO_WriteBit(GPIOB, CH444G_B,  Bit_RESET);
}

void CH444G_XY_0(void)
{
    GPIO_WriteBit(GPIOB, CH444G_A,  Bit_RESET);
    GPIO_WriteBit(GPIOB, CH444G_B,  Bit_SET);
}

void CH444G_XY_NONE(void)
{
    GPIO_WriteBit(GPIOB, CH444G_A,  Bit_SET);
    GPIO_WriteBit(GPIOB, CH444G_B,  Bit_SET);
}

