#include "stdio.h"
#include "version_choose.h"
#include "./V3s_ircut/V3s_ircut.h"
#include "./H3_ircut/H3_ircut.h"
#include "ircut.h"

#include "JZsdkLib.h"

static int OutPutPower = JZ_FLAGCODE_OFF;

T_JZsdkReturnCode Ircut_Init()//引脚初始化
{
    if (DEVICE_VERSION == JZ_H1E || DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_H10T || 
        DEVICE_VERSION == JZ_U3  || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D  || DEVICE_VERSION == JZ_U30|| 
        DEVICE_VERSION == TF_A1)
    { 
        V3s_Ircut_Init();
    }

    else if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T || DEVICE_VERSION == JZ_H10)
    {
        H3_ircut_init();
    }
    else if (DEVICE_VERSION == JZ_C1)
    {
        //快门引脚初始化
        SysfsGPIO_Init_ircut(KT_IRC_SHUTTER_GPIO_NUM, "out");
    }
    
    else
    {
        printf("无引脚使用\n");
    }

    JZSDK_LOG_INFO("MODULE_IRCUT_INIT_COMPLETE");

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}


T_JZsdkReturnCode Ircut_uInit()  
{
    if (DEVICE_VERSION == JZ_H1E)
    {
        V3s_Ircut_uInit();
    }

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//功放开关
T_JZsdkReturnCode set_amplifier(int amplifier_mode)
{
    if (DEVICE_VERSION == JZ_H1E || DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_H10T || 
        DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D  || DEVICE_VERSION == JZ_U30 || 
        DEVICE_VERSION == TF_A1)
    {
        V3s_set_amplifier(amplifier_mode);
    }

    if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T || DEVICE_VERSION == JZ_H10)
    {
        H3_ircut_set_amplifier(amplifier_mode);
    }

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//PWM控制
int Ircut_PWM_control(int pwm_num)
{
    if (DEVICE_VERSION == JZ_H10T)
    {
        V3s_PWM_contrl(pwm_num);
    }
}

//对外电源控制
T_JZsdkReturnCode Ircut_Set_OutPutPower_Control(int value)
{
    if (DEVICE_VERSION == JZ_H10T)
    {
        if (value == JZ_FLAGCODE_OFF || value == JZ_FLAGCODE_ON)
        {
            Ircut_V3S_Set_OutPutPowerControl(value);
            OutPutPower = value;
            return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
        }
    }
    
    return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}


//查询是否有开启电源控制
T_JZsdkReturnCode Ircut_CheckStatus_OutPutPower(int *value)
{
    if (DEVICE_VERSION == JZ_H10T)
    {
        *value = OutPutPower;
        
        return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
    }
    
    return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}

/***********************
 * 
 *  引脚控制
 * 
 * 
 * ********************/
T_JZsdkReturnCode Ircut_PinControl(int port, int num, int status)
{
    if (DEVICE_VERSION == JZ_H1E || DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_H10T || 
        DEVICE_VERSION == JZ_U3  || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D  || DEVICE_VERSION == JZ_U30 || 
        DEVICE_VERSION == TF_A1)
    { 
        V3s_PinControl(port, num, status);
    }
}