SearchLightTemControl.c 3.8 KB
#include <stdio.h>
#include "Psdk_UI_io.h"
#include "JZsdk_Base/JZsdk_Code/JZsdk_InsCode.h"
#include "BaseConfig.h"
#include "JZsdkLib.h"
#include "UI_control.h"

#include <unistd.h>
#include <string.h>
#include <pthread.h>

#include "./JZ_SearchLightTemp_calculation.h"
#include "./SearchLightTemControl.h"
#include "Lighting_InAndOut.h"

static int g_InputTemp = 0; //全局输入温度
static int g_InputLumen = 0;        //全局输入亮度
static int g_OutputLumen = 0;   //温控线程返回来的亮度
static int g_ControlLumen = 0;  //调控的亮度

static int g_OutputLumen_FinishFlag = 0;

//输入温度函数
T_JZsdkReturnCode SearchLightTemControl_Set_g_InputTemp(int temp)
{
    g_InputTemp = temp;
}

//刷新亮度函数
T_JZsdkReturnCode JZsdk_SearchLightTemControl_FlushLumen(int InputLumen)
{
    //刷新时,调平调控的亮度
    g_ControlLumen = InputLumen;

    //输入参数  
    g_InputLumen = InputLumen;
    JZsdk_SearchLightSetInitialLumen(g_InputLumen);
}

//以上函数用与刷新温控里的参数


//控温线程
static void *TempControl_Task(void *arg)
{
    int DelayTime;

    while (1)
    {
        JZsdk_SearchLightTemControl( (float)g_InputTemp, g_ControlLumen, &g_OutputLumen, &DelayTime);
        g_ControlLumen = g_OutputLumen;

        if (DelayTime > 0)
        {
            g_OutputLumen_FinishFlag = JZ_FLAGCODE_ON;
            printf("触发温控延迟,输入亮度%d,调控亮度%d,输出亮度%d\n",g_InputLumen,g_ControlLumen,g_OutputLumen);
            delayMs(DelayTime);
        }    
        else
        {
            delayMs(1);
        }
        
        DelayTime = 0;
    }
}

// 温控部分
//1、输入函数
static T_JZsdkReturnCode JZsdk_SearchLightTemControl_Input(int temp)
{
    int ReturnLumen; //返回的亮度值

    //1、判断是否超出温控范围了
    int ret = JZsdk_SearchLightTemControl_WhetherExceedsMaxRange(temp);
    if (ret == 1) //超出最大温度10度
    {
        ReturnLumen = 0;
        return ReturnLumen;
    }

    delayMs(2);
    
    //如果触发过温控,则返回温控后的值
    if (g_OutputLumen_FinishFlag == JZ_FLAGCODE_ON)
    {
        g_OutputLumen_FinishFlag = JZ_FLAGCODE_OFF;
        ReturnLumen = g_OutputLumen;
    }
    //如果没有触发,则返回之前的调控亮度
    else
    {
        ReturnLumen = g_ControlLumen;
    }
    
    return ReturnLumen;
}

//温度线程
static void *TempControl_TempTask(void *arg)
{
    int  Lumen; //新的亮度
    int  LastLumen; //上次亮度
    int light_mode; //探照灯模式

    while (1)
    {
        //温控开始
        Lumen = JZsdk_SearchLightTemControl_Input(g_InputTemp);

        //如果获取的温度
        if (Lumen != LastLumen)
        {
            //刷新上一次
            LastLumen = Lumen;

            
            Lighting_Get_SearchLightMode(&light_mode);

            if (light_mode != JZ_FLAGCODE_OFF)
            {       
                //重设亮度
                UIcontrol_Set_SearchLightLumen(NO_SPECIFIED, 0, Lumen, Lumen);
            }

        }
        
        delayMs(200);
    }
}



//控件控制初始化
T_JZsdkReturnCode JZsdk_SearchLightTemControl_Init()
{
#if DEVICE_VERSION == JZ_H1T
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif

	pthread_t WriteDataTask;
	pthread_attr_t task_attribute; //线程属性
	pthread_attr_init(&task_attribute);  //初始化线程属性
	pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED);      //设置线程分离属性
	int ret = pthread_create(&WriteDataTask,&task_attribute,TempControl_Task,NULL);		//线程
	if(ret != 0)
	{
		JZSDK_LOG_ERROR("创建控件写入线程失败!");
		return -1;
	}

    pthread_t TempTask;
	ret = pthread_create(&TempTask,&task_attribute,TempControl_TempTask,NULL);		//线程
	if(ret != 0)
	{
		JZSDK_LOG_ERROR("创建温度写入线程失败!");
		return -1;
	}
}