HeartBeat.c 2.5 KB
#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;
}