#include "tcXHHW.h"


void tcu_BSP_init(void)
{
    // user define key
    config_gpio_in(SOC_GPIO0, 36);

    //run leds
    config_gpio_out(MCU_GPIO0, 15, 1);
    config_gpio_out(MCU_GPIO0, 16, 0);

    //switch
    config_gpio_in(SOC_GPIO0, 10);
    config_gpio_in(SOC_GPIO0, 6);
    config_gpio_in(SOC_GPIO0, 7);
    config_gpio_in(MCU_GPIO0, 2);

    //LED
    config_gpio_out(SOC_GPIO0, 11, 0);
    config_gpio_out(SOC_GPIO0, 12, 0);
    config_gpio_out(SOC_GPIO0, 13, 0);
    config_gpio_out(SOC_GPIO0, 1,  0);

    //KMD_Out
    config_gpio_out(SOC_GPIO0, 3, 1);
    config_gpio_out(SOC_GPIO0, 4, 1);
    config_gpio_out(SOC_GPIO0, 5, 1);
    config_gpio_out(SOC_GPIO0, 9, 1);

    //KMD_FB
    config_gpio_in(SOC_GPIO0, 14);
    config_gpio_in(SOC_GPIO0, 0);
    config_gpio_in(SOC_GPIO0, 2);
    config_gpio_in(SOC_GPIO0, 8);
}

void tcu_BSP_exit(void)
{
    config_gpio_free(SOC_GPIO0, 36);

    config_gpio_free(MCU_GPIO0, 15);
    config_gpio_free(MCU_GPIO0, 16);

    config_gpio_free(SOC_GPIO0, 10);
    config_gpio_free(SOC_GPIO0, 6);
    config_gpio_free(SOC_GPIO0, 7);
    config_gpio_free(MCU_GPIO0, 2);

    config_gpio_free(SOC_GPIO0, 11);
    config_gpio_free(SOC_GPIO0, 12);
    config_gpio_free(SOC_GPIO0, 13);
    config_gpio_free(SOC_GPIO0, 1);

    config_gpio_free(SOC_GPIO0, 3);
    config_gpio_free(SOC_GPIO0, 4);
    config_gpio_free(SOC_GPIO0, 5);
    config_gpio_free(SOC_GPIO0, 9);

    config_gpio_free(SOC_GPIO0, 14);
    config_gpio_free(SOC_GPIO0, 0);
    config_gpio_free(SOC_GPIO0, 2);
    config_gpio_free(SOC_GPIO0, 8);

}

int get_USEKEY(void)
{
    return get_gpio_value(SOC_GPIO0, 36);//user key
}

void set_SYSLED_on(int idx, int on)
{
    switch(idx)
    {
        case 0: set_gpio_value(MCU_GPIO0, 15, on); break;//user Led
        case 1: set_gpio_value(MCU_GPIO0, 16, on); break;//sys led
    }
}

int get_TCUID(void)
{
    int code = 0;
    code |= (!get_gpio_value(SOC_GPIO0, 6))<<0;
    code |= (!get_gpio_value(SOC_GPIO0, 7))<<1;
    code |= (!get_gpio_value(SOC_GPIO0, 10))<<2;
    code |= (!get_gpio_value(MCU_GPIO0, 2))<<3;
    return code;
}


void set_GUNLED_on(int idx, int on)
{
    switch(idx)
    {
        case 0: set_gpio_value(SOC_GPIO0, 12, !on); break;//1R
        case 1: set_gpio_value(SOC_GPIO0, 13, !on); break;//1G
        case 2: set_gpio_value(SOC_GPIO0, 11, !on); break;//2R
        case 3: set_gpio_value(SOC_GPIO0, 1, !on); break;//2G
    }
}

void set_KMD_out(int idx, int on)
{
    switch(idx)
    {
        case 0: set_gpio_value(SOC_GPIO0, 9, !on); break;//1P
        case 1: set_gpio_value(SOC_GPIO0, 5, !on); break;//1N
        case 2: set_gpio_value(SOC_GPIO0, 4, !on); break;//2P
        case 3: set_gpio_value(SOC_GPIO0, 3, !on); break;//2N
    }
}

int get_KMDFB(int idx)
{
    switch(idx)
    {
        case 0: return !get_gpio_value(SOC_GPIO0, 14);//F1P
        case 1: return !get_gpio_value(SOC_GPIO0, 0);//F1N
        case 2: return !get_gpio_value(SOC_GPIO0, 8);//F2P
        case 3: return !get_gpio_value(SOC_GPIO0, 2);//F2N
    }
    return 0;
}