#include "CD4051.h"
#include "GPIO.h"
volatile u_CD4051_Input CD4051_Input[ID_MAX];
unsigned char pChannel = 0;

void CD4051_Pin_Init(void)
{
    CD4051_Input[ID_COM1].Byte = 0x00;
    CD4051_Input[ID_COM2].Byte = 0x00;
    CD4051_Input[ID_COM3].Byte = 0x00;
    CD4051_Input[ID_COM4].Byte = 0x00;
    CD4051_Input[ID_COM5].Byte = 0x00;
    CD4051_Input[ID_COM6].Byte = 0x00;
    CD4051_Input[ID_COM7].Byte = 0x00;

    pChannel = 0;

    CD4051A_A_MCU_OUT = 0;
    CD4051A_B_MCU_OUT = 0;
    CD4051A_C_MCU_OUT = 0;
}

void CD4051_GetInputStatus(unsigned char Channel)
{
}

void CD4051_Choose_Channel(unsigned char Channel)
{
    CD4051A_A_MCU_OUT = Channel & 0x01;
    CD4051A_B_MCU_OUT = (Channel >> 1) & 0x01;
    CD4051A_C_MCU_OUT = (Channel >> 2) & 0x01;
}

void CD4051_IOStatus(unsigned char Channel)
{
    if (CD4051A_COM1_MCU_IN)
    {
        CD4051_Input[ID_COM1].Byte |= (1 << Channel);
    }
    else
    {
        CD4051_Input[ID_COM1].Byte &= ~(1 << Channel);
    }
    if (CD4051A_COM2_MCU_IN)
    {
        CD4051_Input[ID_COM2].Byte |= (1 << Channel);
    }
    else
    {
        CD4051_Input[ID_COM2].Byte &= ~(1 << Channel);
    }
    if (CD4051A_COM3_MCU_IN)
    {
        CD4051_Input[ID_COM3].Byte |= (1 << Channel);
    }
    else
    {
        CD4051_Input[ID_COM3].Byte &= ~(1 << Channel);
    }
    if (CD4051A_COM4_MCU_IN)
    {
        CD4051_Input[ID_COM4].Byte |= (1 << Channel);
    }
    else
    {
        CD4051_Input[ID_COM4].Byte &= ~(1 << Channel);
    }
    if (CD4051A_COM5_MCU_IN)
    {
        CD4051_Input[ID_COM5].Byte |= (1 << Channel);
    }
    else
    {
        CD4051_Input[ID_COM5].Byte &= ~(1 << Channel);
    }
    if (CD4051A_COM6_MCU_IN)
    {
        CD4051_Input[ID_COM6].Byte |= (1 << Channel);
    }
    else
    {
        CD4051_Input[ID_COM6].Byte &= ~(1 << Channel);
    }
    if (CD4051A_COM7_MCU_IN)
    {
        CD4051_Input[ID_COM7].Byte |= (1 << Channel);
    }
    else
    {
        CD4051_Input[ID_COM7].Byte &= ~(1 << Channel);
    }
}

void CD4051_GetInputStatusProc(void)
{
    CD4051_IOStatus(pChannel);
    pChannel++;
    CD4051_Choose_Channel(pChannel);
    if (pChannel > 7)
    {
        pChannel = 0;
    }
}