SearchLightTemControl.c
3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#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;
}
}