SearchLight.c 6.8 KB
#include "JZsdkLib.h"

#include "version_choose.h"
#include "Hal_Send/HalSend.h"
#include "SearchLight/SearchLight.h"

#include "SearchLight/SearchLightTemControl/SearchLightTemControl.h"

#define MAX(a,b) (	(a>b)	?a:b	)

static int g_SearchLight_Subscription_Flag = JZ_FLAGCODE_OFF; //消息订阅状态 默认关闭本机的



static T_JzSearchLightInfo g_SearchLight_Info;


T_JZsdkReturnCode SearchLight_Init(T_JzSearchLightInfo Info)
{

    memset(&g_SearchLight_Info, 0, sizeof(T_JzSearchLightInfo));
    memcpy(&g_SearchLight_Info, &Info, sizeof(T_JzSearchLightInfo));

    if (g_SearchLight_Info.ControlMode == JZ_MODULE_CONTROL_WAY_INDEPENDENT)
    {
        //温控初始化
        JZsdk_SearchLightTemControl_Init();
    }
    
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/************
 * 
 *  查询灯光属性
 * 
 * *************/
T_JZsdkReturnCode SearchLight_CheckStatus_Attribute(T_JzSearchLightAttribute *p)
{
    //如果是中继设备,则进行一次灯光属性查询
    if(g_SearchLight_Info.ControlMode == JZ_MODULE_CONTROL_WAY_TRANSPARENT)
    {
        //查询灯光属性
        
    }

    //如果是独立设备,则直接返回各类属性
    memcpy(p, &(g_SearchLight_Info.Attribute), sizeof(T_JzSearchLightAttribute));

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;   
}


//设置探照灯模式
T_JZsdkReturnCode SearchLight_SetMode(E_JzSearchLightMode mode)
{
    JZSDK_LOG_DEBUG("探照灯模式改变%d\n", mode);

    T_JZsdkOsalHandler *osalHandle = JZsdk_Platform_GetOsalHandler();
    if (osalHandle == NULL)
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }
    
    int FrameSequence = g_SearchLight_Info.FrameSequence;
    osalHandle->GetFrameSequenceQueueNum(&FrameSequence);

    HalSend_type1Send_SearchLight_Control(g_SearchLight_Info.Device, mode, FrameSequence);

    g_SearchLight_Info.Attribute.Mode = mode;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//收到并修改探照灯模式(中继修改)
T_JZsdkReturnCode SearchLight_Obtain_Mode(E_JzSearchLightMode mode)
{
    JZSDK_LOG_DEBUG("%x收到探照灯模式回复%d",DEVICE_VERSION, mode);

    g_SearchLight_Info.Attribute.Mode = mode;
    
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//设置探照灯亮度
T_JZsdkReturnCode SearchLight_SetBrightness(int left, int right, int FlushTempLumenFlag)
{
    JZSDK_LOG_DEBUG("探照灯亮度改变%d %d\n", left, right);
    //设置探照灯亮度
#if (DEVICE_VERSION == JZ_U3 || \
        DEVICE_VERSION == JZ_U3S || \
        DEVICE_VERSION == JZ_U3D || \
        DEVICE_VERSION == JZ_U30 || \
        DEVICE_VERSION == TF_A1)

    HalSend_type1Send_SearchLight_SetLumen(UART_DEV_2, left, right, 0x00);

#elif (DEVICE_VERSION == JZ_T40)

    int lumen = MAX(left, right);
    HalSend_type1Send_SearchLight_SetSingleLumem(UART_DEV_2, lumen, 0x20);

#elif (DEVICE_VERSION == JZ_H1T)

    HalSend_type1Send_SearchLight_SetLumen(UART_DEV_1, left, right, 0x00);

#endif

    g_SearchLight_Info.Attribute.LeftBrightness = left;
    g_SearchLight_Info.Attribute.RightBrightness = right;

    if (FlushTempLumenFlag == JZ_FLAGCODE_ON)
    {
        JZsdk_SearchLightTemControl_FlushLumen(MAX(left, right));
    }
    
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//收到并修改探照灯亮度(中继修改)
T_JZsdkReturnCode SearchLight_Obtain_Brightness(int left, int right)
{
    JZSDK_LOG_DEBUG("%x收到探照灯亮度回复%d %d",DEVICE_VERSION, left, right);

    g_SearchLight_Info.Attribute.LeftBrightness = left;
    g_SearchLight_Info.Attribute.RightBrightness = right;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//设置探照灯频率
T_JZsdkReturnCode SearchLight_SetFrequency(int Frequency)
{
    JZSDK_LOG_DEBUG("探照灯频率改变%d\n", Frequency);
    //设置探照灯频率
#if (DEVICE_VERSION == JZ_U3 || \
        DEVICE_VERSION == JZ_U3S || \
        DEVICE_VERSION == JZ_U3D || \
        DEVICE_VERSION == JZ_U30 || \
        DEVICE_VERSION == TF_A1)

    HalSend_type1Send_Set_SearchLightFrequency(UART_DEV_2, Frequency, 0x00);

#elif (DEVICE_VERSION == JZ_T40)

    HalSend_type1Send_Set_SearchLightFrequency(UART_DEV_2, Frequency, 0x20);

#elif (DEVICE_VERSION == JZ_H1T)

    HalSend_type1Send_Set_SearchLightFrequency(UART_DEV_1, Frequency, 0x00);

#endif

    g_SearchLight_Info.Attribute.Frequency = Frequency;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;    
}

//收到并修改探照灯频率(中继修改)
T_JZsdkReturnCode SearchLight_Obtain_Frequency(int Frequency)
{
    JZSDK_LOG_DEBUG("%x收到探照灯频率回复%d",DEVICE_VERSION, Frequency);

    g_SearchLight_Info.Attribute.Frequency = Frequency;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//收到探照灯温度
T_JZsdkReturnCode SearchLight_Obtain_Temperature(int left, int right)
{
    JZSDK_LOG_DEBUG("%x收到探照灯温度回复%d %d",DEVICE_VERSION, left, right);

    g_SearchLight_Info.Attribute.LeftTemperature = left;
    g_SearchLight_Info.Attribute.RightTemperature = right;

    int Max_tmeperature;    //最大温度值
    Max_tmeperature = MAX(left, right);

    //判断探照灯是否有打开
    if (g_SearchLight_Info.Attribute.Mode == E_JZ_SEARCHLIGHTMODE_OFF)
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
    }

    if (DEVICE_VERSION == JZ_U3 || 
        DEVICE_VERSION == JZ_U3S || 
        DEVICE_VERSION == JZ_U3D || 
        DEVICE_VERSION == JZ_U30 ||
        DEVICE_VERSION == TF_A1  ||
        DEVICE_VERSION == JZ_T40
        )
    {
        //输入温度进温度控制线程
        SearchLightTemControl_Set_g_InputTemp(Max_tmeperature);
    }
    
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/********************
 * 
 *  获取探照灯属性
 * 
 * *******************/
T_JZsdkReturnCode SearchLight_Get_SearchLightAttribute(T_JzSearchLightAttribute *SearchLightInfo)
{
    memcpy(SearchLightInfo, &g_SearchLight_Info.Attribute, sizeof(T_JzSearchLightAttribute));
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/******************
 * 
 *  刷新探照灯属性
 *  待补充
 * ********************/
T_JZsdkReturnCode SearchLight_Flush_SearchLightAttribute()
{
#if DEVICE_VERSION == JZ_H1T

    HalSend_type1Send_CheckStatus_SearchLight_Attribute(UART_DEV_1);
#endif

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;   
}

/***************
 * 
 *  刷新探照灯亮度
 * 
 * *************/
T_JZsdkReturnCode SearchLight_Flush_SearchLightTemerature()
{
#if DEVICE_VERSION == JZ_H1T

    HalSend_type1Send_CheckStatus_SearchLight_Temperture(UART_DEV_1, 0x00);
#endif
}

/****************
 * 
 *  获取消息订阅状态
 * 
 * *************/
int JZsdk_SearchLight_GetMessageSubFlag(void)
{
    return  g_SearchLight_Subscription_Flag;
}

/***************************
 * 
 *  设置消息订阅状态
 * 
 * 
************************/
T_JZsdkReturnCode JZsdk_SearchLight_SetMessageSubFlag(int InputFlag)
{
    g_SearchLight_Subscription_Flag = InputFlag;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}