HeartBeat.c
2.5 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
#include <stdio.h>
#include <pthread.h>
#include "JZsdkLib.h"
#include "JZsdk_Hal.h"
#include "Hal_Send/HalSend_type1/HalSend_type1.h"
T_JZsdkReturnCode HeartBeat_HalCheck(void)
{
T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
if (handle == NULL)
{
JZSDK_LOG_ERROR("HAL未初始化");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
T_JZsdk_HalInfo HalInfo = { 0 };
handle->GetHalInfo(&HalInfo);
// 加锁保护共享数据
handle->lock(handle);
// 遍历所有已使用的端口
for (int i = 0; i < HalInfo.HaveUsePortNum; i++)
{
int portId = HalInfo.HaveUsePortId[i];
T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(portId);
if (portBase == NULL)
{
JZSDK_LOG_WARN("第 %d 端口 %d 在已使用列表中但未找到对应结构",i ,portId);
continue;
}
// 如果心跳发送开关开启,则发送心跳状态
if (portBase->HalStatus.HeartBeatStatusSend == JZ_FLAGCODE_ON)
{
// 发送心跳状态,第二个参数为序列号,此处沿用原代码的0x00
HalSend_type1Send_HeartBeatStatus(portId, 0x00, portBase->HalStatus.ConnectStatus);
}
}
handle->unlock(handle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static void *HeartBeatTask(void *arg)
{
int angle = 0;
int UAV_self_angle;
int PitchFineTuning;
JZSDK_LOG_DEBUG("心跳帧主动发送线程\n");
while (1)
{
delayS(10);
HeartBeat_HalCheck();
}
}
/*****************
*
* 心跳帧主设备类型的初始化
*
*
* *************************/
static T_JZsdkReturnCode HeartBeat_Main()
{
pthread_t PowerMangerTask;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
int opus_Protection = pthread_create(&PowerMangerTask,&task_attribute,HeartBeatTask,NULL); //线程
if(opus_Protection != 0)
{
JZSDK_LOG_ERROR("创建心跳线程失败!");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*****************
*
* 心跳帧初始化
*
*
* *************************/
T_JZsdkReturnCode HeartBeat_Init()
{
HeartBeat_Main();
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}