作者 潘浩彬

合并分支 'dev' 到 'master'

Dev



查看合并请求 !2
正在显示 36 个修改的文件 包含 1458 行增加572 行删除
# 编译链的配置
#1、编译链与设备类型的选择
set(DEVICE_NAME JZ_T40S)
set(DEVICE_NAME JZ_H150A)
#上一行为禁止修改行
message("**************************JZSDK构建编译开始***************************\n")
... ...
#include <stdio.h>
#include <stdio.h>
#include "./JZsdk_FileSystm.h"
#include <stdlib.h>
#include <stdbool.h>
... ... @@ -396,7 +396,7 @@ T_JZsdkReturnCode JZsdk_create_file(const char* file_path)
if (file != NULL)
{
fclose(file);
fsync(file);
fsync(fileno(file));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h> // Include this for strncpy
#include "./JZsdk_Task.h"
T_JZsdkReturnCode JZsdk_Osal_TaskCreate(const char *name, void *(*taskFunc)(void *), unsigned int stackSize, void *arg,
T_JZTaskHandle *task)
{
... ...
#include <pthread.h>
#include <pthread.h>
#include "JZsdkLib.h"
#include "BaseConfig.h"
... ... @@ -338,8 +338,8 @@ static T_JZsdkReturnCode EquipmentEnvironment_Init()
//sdklib加载
JZsdk_LibInit(JZ_FLAGCODE_ON);
//hal信息加载,这里后期需要优化
JZsdk_Hal_Init();
//hal信息加载
JZsdk_HalInit();
JZSDK_LOG_INFO("%x,PsdkVersion%d.%d.%d.%d\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
... ... @@ -369,7 +369,11 @@ T_JZsdkReturnCode Main_APP_Psdk()
JZSDK_WidgetMgMT_Init();
//初始化app模式
JZsdk_HalPort_SetUseFlag(DEVICE_PSDK ,JZ_FLAGCODE_ON);
T_JZsdk_DirectDataInfo DirectDataInfo = {
.Base.PortId = DEVICE_PSDK,
};
JZsdk_HalDirectDataInit(&DirectDataInfo);
Main_WorkModeSet(JZ_FLAGCODE_ON);
... ... @@ -398,17 +402,19 @@ int Main_TestAPP()
{
JZsdk_LibInit(JZ_FLAGCODE_ON);
JZsdk_Hal_Init();
JZsdk_HalInit();
CommonMod_Init();
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
T_JZsdk_UartInfo UartInfo = {
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.PortId = UART_DEV_1,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
JZsdk_HalUartInit(&UartInfo);
}
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -33,12 +33,15 @@ T_JZsdkReturnCode JZ_h10_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -39,12 +39,15 @@ T_JZsdkReturnCode JZ_h10t_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ... @@ -53,13 +56,14 @@ T_JZsdkReturnCode JZ_h10t_init(int mode)
JZsdk_data_transmisson_Receive_Init();
}
//4g设备初始化
s_JZ_SerialPortHalRegInfo Serial_4G_Info = {
.BitRate = COMM_4G_UART_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
//4G初始化
T_JZsdk_UartInfo Uart4GInfo = {
.Base.PortId = UART_4G,
.DevicePath = COMM_4G_UART_NUM,
.Baudrate = COMM_4G_UART_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_4G, (void *)&Serial_4G_Info);
JZsdk_HalUartInit(&Uart4GInfo);
//音频库初始化
AudioDeal_Init();
... ...
... ... @@ -74,12 +74,22 @@ T_JZsdkReturnCode JZ_H150A_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
//去检查有没有额外输入串口号
const char* devicepath = JZsdk_ParamterParsing_GetUart1Device();
if (devicepath != NULL)
{
memcpy(UartInfo.DevicePath, devicepath, sizeof(UartInfo.DevicePath));
}
JZsdk_HalUartInit(&UartInfo);
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
}
if (mode == APP_PSDK)
... ... @@ -88,12 +98,14 @@ T_JZsdkReturnCode JZ_H150A_init(int mode)
JZsdk_data_transmisson_Receive_Init();
}
//4G串口初始化
s_JZ_SerialPortHalRegInfo SerialInfo3 = {
.BitRate = COMM_4G_UART_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_MAIN,
//4g设备初始化
T_JZsdk_UartInfo Uart4GInfo = {
.Base.PortId = UART_4G,
.DevicePath = COMM_4G_UART_NUM,
.Baudrate = COMM_4G_UART_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_4G, (void *)&SerialInfo3);
JZsdk_HalUartInit(&Uart4GInfo);
//音频库初始化
AudioDeal_Init();
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -82,13 +82,15 @@ T_JZsdkReturnCode JZ_h150s_h150t_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ... @@ -100,13 +102,14 @@ T_JZsdkReturnCode JZ_h150s_h150t_init(int mode)
//h150t额外开启4g
if (DEVICE_VERSION == JZ_H150T)
{
//串口设备4g初始化
s_JZ_SerialPortHalRegInfo Serial_4G_Info = {
.BitRate = COMM_4G_UART_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
//4G初始化
T_JZsdk_UartInfo Uart4GInfo = {
.Base.PortId = UART_4G,
.DevicePath = COMM_4G_UART_NUM,
.Baudrate = COMM_4G_UART_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_4G, (void *)&Serial_4G_Info);
JZsdk_HalUartInit(&Uart4GInfo);
}
if (mode == APP_UART)
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -47,12 +47,13 @@ T_JZsdkReturnCode JZ_h1e_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -45,13 +45,16 @@ T_JZsdkReturnCode JZ_h1t_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalUartInit(&UartInfo);
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
}
if (mode == APP_PSDK)
{
... ... @@ -60,11 +63,13 @@ T_JZsdkReturnCode JZ_h1t_init(int mode)
}
//4g设备初始化
s_JZ_SerialPortHalRegInfo Serial_4G_Info = {
.BitRate = COMM_4G_UART_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
JZsdk_HalPort_Init(UART_4G, (void *)&Serial_4G_Info);
T_JZsdk_UartInfo Uart4GInfo = {
.Base.PortId = UART_4G,
.DevicePath = COMM_4G_UART_NUM,
.Baudrate = COMM_4G_UART_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalUartInit(&Uart4GInfo);
//音频库初始化
AudioDeal_Init();
... ...
... ... @@ -19,6 +19,8 @@
#include "UI_control/Psdk_ui_value_menu.h"
#include "UI_control/UI_control.h"
#include "../../ParamterParsing.h"
static int LeftDeviceId = 0; //t40专用分别左右id,用于判断是不是强激光
static int RightDeviceId = 0;
static int DeviceType = 0; //两边装的设备类型
... ... @@ -39,6 +41,15 @@ void *JZ_T40_SubConnectTask(void *arg)
static int DelayTime = 0; //最多尝试连接设备30s
T_JZsdkHalHandle* HalHandle = JZsdk_Platform_GetHalHandle();
if (HalHandle == NULL)
{
JZSDK_LOG_ERROR("无法正常获取hal权柄");
return;
}
T_JZsdk_HalInfo HalInfo = { 0 };
while (
(RightGimbalConnectFlag == JZ_FLAGCODE_OFF ||
LeftGimbalConnectFlag == JZ_FLAGCODE_OFF ||
... ... @@ -46,37 +57,44 @@ void *JZ_T40_SubConnectTask(void *arg)
LeftDeviceConnectFlag == JZ_FLAGCODE_OFF ) &&
DelayTime <= 20000)
{
s_JZsdk_Hal_Info *HalInfo = JZsdk_Hal_GetHalInfo();
HalHandle->GetHalInfo(&HalInfo);
//遍历hal信息
for (int i = 0; i < HalInfo->HalPort[UART_DEV_2].SubNum; i++)
for (int i = 0; i < HalInfo.UartNum; i++)
{
if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c11)
{
LeftGimbalConnectFlag = JZ_FLAGCODE_ON;
continue;
}
if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c12)
{
RightGimbalConnectFlag = JZ_FLAGCODE_ON;
continue;
}
if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c21
|| HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c31)
{
LeftDeviceId = HalInfo->HalPort[UART_DEV_2].SubId[i];
LeftDeviceConnectFlag = JZ_FLAGCODE_ON;
continue;
}
if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c22
|| HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c32)
if (HalInfo.UartInfo[i].Base.PortId == UART_DEV_2)
{
RightDeviceId = HalInfo->HalPort[UART_DEV_2].SubId[i];
RightDeviceConnectFlag = JZ_FLAGCODE_ON;
continue;
for (int j = 0; j < HalInfo.UartInfo[i].Base.HalStatus.SubNum; j++)
{
if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c11)
{
LeftGimbalConnectFlag = JZ_FLAGCODE_ON;
continue;
}
if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c12)
{
RightGimbalConnectFlag = JZ_FLAGCODE_ON;
continue;
}
if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c21 ||
HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c31)
{
LeftDeviceId = HalInfo.UartInfo[i].Base.HalStatus.SubId[j];
LeftDeviceConnectFlag = JZ_FLAGCODE_ON;
continue;
}
if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c22 ||
HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c32)
{
RightDeviceId = HalInfo.UartInfo[i].Base.HalStatus.SubId[j];
RightDeviceConnectFlag = JZ_FLAGCODE_ON;
continue;
}
}
break;
}
}
... ... @@ -127,7 +145,7 @@ void *JZ_T40_SubConnectTask(void *arg)
}
//右激光未连接
if (LeftDeviceConnectFlag == JZ_FLAGCODE_OFF)
if (RightDeviceConnectFlag == JZ_FLAGCODE_OFF)
{
//向左探照灯发送连接指令
HalSend_type1Send_ConnectFrame(UART_DEV_2, 0x32);
... ... @@ -325,7 +343,6 @@ void *JZ_T40_CheckLightTemperatureTask(void *arg)
HalSend_type1Send_CheckStatus_SearchLight_Temperture(UART_DEV_2, 0x21);
}
delayMs(10);
//检查右灯温度
... ... @@ -579,13 +596,15 @@ T_JZsdkReturnCode JZ_T40_init_JZ(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void*)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ... @@ -595,20 +614,26 @@ T_JZsdkReturnCode JZ_T40_init_JZ(int mode)
}
//串口设备2初始化
s_JZ_SerialPortHalRegInfo SerialInfo2 = {
.BitRate = UART_DEV2_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_MAIN,
T_JZsdk_UartInfo Uart2Info = {
.Base.PortId = UART_DEV_2,
.DevicePath = UART_DEV2_NUM,
.Baudrate = UART_DEV2_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_MAIN,
};
JZsdk_HalUartInit(&Uart2Info);
JZsdk_HalPort_Init(UART_DEV_2, (void*)&SerialInfo2);
#if DEVICE_VERSION == JZ_T40S
//4G初始化
s_JZ_SerialPortHalRegInfo SerialInfo3 = {
.BitRate = COMM_4G_UART_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
T_JZsdk_UartInfo Uart4GInfo = {
.Base.PortId = UART_4G,
.DevicePath = COMM_4G_UART_NUM,
.Baudrate = COMM_4G_UART_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_4G, (void*)&SerialInfo3);
JZsdk_HalUartInit(&Uart4GInfo);
#endif
//子设备连接
... ... @@ -718,31 +743,37 @@ T_JZsdkReturnCode JZ_T40_init_DT(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void*)&SerialInfo);
JZsdk_HalUartInit(&UartInfo);
}
//串口设备2初始化
s_JZ_SerialPortHalRegInfo SerialInfo2 = {
.BitRate = UART_DEV2_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_MAIN,
T_JZsdk_UartInfo Uart2Info = {
.Base.PortId = UART_DEV_2,
.DevicePath = UART_DEV2_NUM,
.Baudrate = UART_DEV2_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_MAIN,
};
JZsdk_HalUartInit(&Uart2Info);
JZsdk_HalPort_Init(UART_DEV_2, (void*)&SerialInfo2);
//子设备连接
JZ_T40_SubDevice_Init();
#if DEVICE_VERSION == JZ_T40S
//音频库初始化
AudioDeal_Init();
//喊话器初始化
Megaphone_Init();
#endif
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -44,13 +44,15 @@ T_JZsdkReturnCode JZ_u3_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ... @@ -60,12 +62,14 @@ T_JZsdkReturnCode JZ_u3_init(int mode)
}
//串口设备2初始化
s_JZ_SerialPortHalRegInfo SerialInfo2 = {
.BitRate = UART_DEV2_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo Uart2Info = {
.Base.PortId = UART_DEV_2,
.DevicePath = UART_DEV2_NUM,
.Baudrate = UART_DEV2_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalUartInit(&Uart2Info);
JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);
//音频库初始化
AudioDeal_Init();
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -31,16 +31,17 @@ T_JZsdkReturnCode JZ_u30_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
{
//外接传输模块,用于与飞机的数据通信
... ... @@ -48,12 +49,13 @@ T_JZsdkReturnCode JZ_u30_init(int mode)
}
//串口设备2初始化
s_JZ_SerialPortHalRegInfo SerialInfo2 = {
.BitRate = UART_DEV2_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);
T_JZsdk_UartInfo Uart2Info = {
.Base.PortId = UART_DEV_2,
.DevicePath = UART_DEV2_NUM,
.Baudrate = UART_DEV2_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalUartInit(&Uart2Info);
//音频库初始化
AudioDeal_Init();
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -30,13 +30,15 @@ T_JZsdkReturnCode JZ_u3d_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ... @@ -46,12 +48,13 @@ T_JZsdkReturnCode JZ_u3d_init(int mode)
}
//串口设备2初始化
s_JZ_SerialPortHalRegInfo SerialInfo2 = {
.BitRate = UART_DEV2_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);
T_JZsdk_UartInfo Uart2Info = {
.Base.PortId = UART_DEV_2,
.DevicePath = UART_DEV2_NUM,
.Baudrate = UART_DEV2_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalUartInit(&Uart2Info);
//音频库初始化
AudioDeal_Init();
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -62,13 +62,15 @@ T_JZsdkReturnCode JZ_u3s_init(int mode)
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ... @@ -78,12 +80,13 @@ T_JZsdkReturnCode JZ_u3s_init(int mode)
}
//串口设备2初始化
s_JZ_SerialPortHalRegInfo SerialInfo2 = {
.BitRate = UART_DEV2_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);
T_JZsdk_UartInfo Uart2Info = {
.Base.PortId = UART_DEV_2,
.DevicePath = UART_DEV2_NUM,
.Baudrate = UART_DEV2_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalUartInit(&Uart2Info);
//音频库初始化
AudioDeal_Init();
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
... ... @@ -29,16 +29,17 @@ T_JZsdkReturnCode TF_a1_init(int mode)
Ircut_Init(ircut_info);
//hal层初始化
if (mode == APP_UART)
{
//串口设备1初始化
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = UART_DEV1_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
T_JZsdk_UartInfo UartInfo = {
.Base.PortId = UART_DEV_1,
.DevicePath = UART_DEV1_NUM,
.Baudrate = UART_DEV1_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);
//串口设备1初始化
JZsdk_HalUartInit(&UartInfo);
}
if (mode == APP_PSDK)
... ... @@ -46,14 +47,15 @@ T_JZsdkReturnCode TF_a1_init(int mode)
//外接传输模块,用于与飞机的数据通信
JZsdk_data_transmisson_Receive_Init();
}
//串口设备2初始化
s_JZ_SerialPortHalRegInfo SerialInfo2 = {
.BitRate = UART_DEV2_BITRATE,
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);
//串口设备2初始化
T_JZsdk_UartInfo Uart2Info = {
.Base.PortId = UART_DEV_2,
.DevicePath = UART_DEV2_NUM,
.Baudrate = UART_DEV2_BITRATE,
.Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
};
JZsdk_HalUartInit(&Uart2Info);
//音频库初始化
AudioDeal_Init();
... ...
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
... ... @@ -36,6 +36,7 @@ typedef enum parameter{
PARAMETER_OUT_TIMEFLAG = 0x1010, //备用超时标志位
PARAMETER_OUT_TIMEOUT = 0x1011, //备用超时时间
PARAMETER_PLAY_PROMPT_TTS = 0x1012, //播放提示音
PARAMETER_UART1 = 0x1013, //修改串口1
}parameter;
static const struct option storage_opts[] = {
... ... @@ -43,6 +44,7 @@ static const struct option storage_opts[] = {
{ "OutTime", required_argument, 0, PARAMETER_OUT_TIMEOUT }, //超时时间
{ "play_prompt_tts", required_argument, NULL, PARAMETER_PLAY_PROMPT_TTS }, //提示选项
{ "uart1", required_argument, NULL, PARAMETER_UART1 }, //连接的串口1
{ 0, 0, 0, 0 }
};
... ... @@ -50,6 +52,7 @@ static const struct option storage_opts[] = {
static int Timeout_flag = JZ_FLAGCODE_OFF; //超时标记位,默认关闭
static int Timeout_time = 60; //超时时间
unsigned char *g_JZsdkParam_PlayPromptTTS = NULL; //播放提示音
static char* g_extern_uart1_device = NULL; //额外输入的串口1
int JZsdk_ParamterParsing_GetTimeOutFlag()
{
... ... @@ -61,6 +64,12 @@ int JZsdk_ParamterParsing_GetTimeOutTime()
return Timeout_time;
}
// getter 函数
const char* JZsdk_ParamterParsing_GetUart1Device(void)
{
return g_extern_uart1_device;
}
/*************************************
*
* * 程序参数解析
... ... @@ -105,6 +114,12 @@ T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mo
*mode = 1;
break;
//uart1选项
case PARAMETER_UART1:
printf("uart1 device: %s\n", optarg);
g_extern_uart1_device = optarg;
break;
case 'f': //超时标记位
Timeout_flag = atoi(optarg);
break;
... ...
/**
/**
********************************************************************
* @file ParamterParsing.h
* 用于文件系统操作
... ... @@ -27,6 +27,7 @@ extern "C" {
T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mode);
int JZsdk_ParamterParsing_GetTimeOutFlag();
int JZsdk_ParamterParsing_GetTimeOutTime();
const char* JZsdk_ParamterParsing_GetUart1Device(void);
#ifdef __cplusplus
}
... ...
/* ********************************************************************
*
* 用于确认对应设备的选择
*
***********************************************/
#ifndef VERSION_CHOOSE_H
#define VERSION_CHOOSE_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"
//1~10行 除了D可以修改版本选择 禁止动任何东西
#define DEVICE_VERSION JZ_T40
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_PSDK
//禁止修改行 板子型号
#define PLATFORM_VERSION PLATFORM_V3S
//禁止修改行 串口连接程序的软件版本号
#define MAJOR_VERSION_TEN_POSITION 0
#define MAJOR_VERSION_ONE_POSITION 0
/* ********************************************************************
/* ********************************************************************
*
* 用于确认对应设备的选择
*
... ... @@ -7,7 +7,7 @@
#define VERSION_CHOOSE_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"
//1~10行 除了D可以修改版本选择 禁止动任何东西
#define DEVICE_VERSION JZ_T40S
#define DEVICE_VERSION JZ_H150A
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_PSDK
... ... @@ -17,18 +17,18 @@
//禁止修改行 串口连接程序的软件版本号
#define MAJOR_VERSION_TEN_POSITION 0
#define MAJOR_VERSION_ONE_POSITION 0
#define MAJOR_VERSION_ONE_POSITION 1
#define MINOR_VERSION_TEN_POSITION 0
#define MINOR_VERSION_ONE_POSITION 0
#define MODIFY_VERSION_TEN_POSITION 0
#define MODIFY_VERSION_ONE_POSITION 2
#define DEBUG_VERSION_TEN_POSITION 2
#define DEBUG_VERSION_ONE_POSITION 7
#define MINOR_VERSION_ONE_POSITION 3
#define MODIFY_VERSION_TEN_POSITION 1
#define MODIFY_VERSION_ONE_POSITION 5
#define DEBUG_VERSION_TEN_POSITION 0
#define DEBUG_VERSION_ONE_POSITION 2
#define FIRMWARE_ORIGIN DOMESTIC_VERSION
//禁止修改行31 特殊版本号
#define SPECIAL_VERSION SPECIAL_DAOTONG
#define SPECIAL_VERSION SPECIAL_NORMAL
//版本号
#define MAJOR_VERSION (MAJOR_VERSION_TEN_POSITION*10+MAJOR_VERSION_ONE_POSITION)
... ... @@ -198,5 +198,4 @@
#endif
#endif
#endif
\ No newline at end of file
... ...
... ... @@ -88,54 +88,119 @@ static T_JZsdkReturnCode RecvDeal_AskForConnect(int Port, char *getbuf)
if (Port == UART_DEV_1)
{
Main_WorkModeSet(JZ_FLAGCODE_ON);
//设置
JZsdk_Hal_config_use_uart1(3);
}
//5、打开连接状态
s_JZsdk_Hal_Info *HalInfo = JZsdk_Hal_GetHalInfo();
HalInfo->HalPort[Port].ConnectStatus = JZ_FLAGCODE_ON;
// 通过 HAL 句柄安全地修改连接状态
T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
if (handle == NULL)
{
JZSDK_LOG_ERROR("HAL 未初始化");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
handle->lock(handle);
T_JZsdk_PortBase* halBase = JZsdk_FindPortBase(Port);
if (halBase != NULL)
{
halBase->HalStatus.ConnectStatus = JZ_FLAGCODE_ON;
}
else
{
handle->unlock(handle);
JZSDK_LOG_ERROR("端口 %d 未找到", Port);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
handle->unlock(handle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
*
* 心跳帧通知
*
**********/
static T_JZsdkReturnCode RecvDeal_HeartBeat(int Port, char *getbuf)
*
**********/
static T_JZsdkReturnCode RecvDeal_HeartBeat(int Port, char* getbuf)
{
JZSDK_LOG_INFO("%s,recvHBF",JZsdk_DefineCode_GetPortName(Port));
JZSDK_LOG_INFO("%s, recvHBF", JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、获取连接情况
s_JZsdk_Hal_Info *halInfo = JZsdk_Hal_GetHalInfo();
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
int mode = getbuf[9]; // 假设模式在第9字节
//分析模式
int mode = getbuf[9];
if (mode == 0x00)
T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
if (handle == NULL)
{
//2、回复心跳帧
HalSend_type1Send_Send_HeartBeatStatus(Port, FrameSequence, halInfo->HalPort[Port].ConnectStatus);
JZSDK_LOG_ERROR("HAL 未初始化");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
else if (mode == 0x01 || mode == 0x02)
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
if (mode == 0x00)
{
if(mode == 0x01)
int connectStatus = JZ_FLAGCODE_OFF; // 默认值
handle->lock(handle);
T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(Port);
if (portBase != NULL)
{
halInfo->HalPort[Port].HeartBeatStatusSend = JZ_FLAGCODE_ON;
connectStatus = portBase->HalStatus.ConnectStatus;
}
else {
JZSDK_LOG_ERROR("端口 %d 未找到", Port);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
else if (mode == 0x02)
handle->unlock(handle);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
halInfo->HalPort[Port].HeartBeatStatusSend = JZ_FLAGCODE_OFF;
// 使用复制的 connectStatus 发送心跳状态
HalSend_type1Send_Send_HeartBeatStatus(Port, FrameSequence, connectStatus);
}
}
else if (mode == 0x01 || mode == 0x02)
{
handle->lock(handle);
T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(Port);
HalSend_type1Send_Reply_Success(Port, FrameSequence);
if (portBase != NULL)
{
if (mode == 0x01)
{
portBase->HalStatus.HeartBeatStatusSend = JZ_FLAGCODE_ON;
}
else if(mode == 0x02)
{
portBase->HalStatus.HeartBeatStatusSend = JZ_FLAGCODE_OFF;
}
handle->unlock(handle);
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
handle->unlock(handle);
JZSDK_LOG_ERROR("端口 %d 未找到", Port);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
else
{
JZSDK_LOG_WARN("未知心跳模式: 0x%02x", mode);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
return ret;
}
/*********
*
* 获取所有版本号
... ... @@ -4279,68 +4344,77 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_WarningLightMode2(int Port, char *
********* ********|
********* ********|
*********************************************************************************************************/
/*******************************************************************************************************************************
*
* 设备相关
*
* *******************************************************************************************************************************/
static T_JZsdkReturnCode RecvDeal_ObtainConnectFrame(int Port, char *getbuf)
/*********
*
* 作为主设备,收到连接回复帧(从设备回复连接)
*
**********/
static T_JZsdkReturnCode RecvDeal_ObtainConnectFrame(int Port, char* getbuf)
{
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
JZSDK_LOG_INFO("%s,收到连接回复帧",JZsdk_DefineCode_GetPortName(Port));
JZSDK_LOG_INFO("%s,收到连接回复帧", JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
// 获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//获取设备id
//计算ID长度
int FrameLenth = JZsdk_Get_FrameLength(getbuf);
int IDLength = FrameLenth - 11;
// 计算设备ID长度
int FrameLength = JZsdk_Get_FrameLength(getbuf);
int IDLength = FrameLength - 11; // 假设协议头固定11字节
//获取ID
// 解析设备ID(移位累加)
int DeviceID = 0;
//将ID转换为int
for (int i = 0; i < IDLength; i++)
{
DeviceID = DeviceID + (getbuf[9 + i] << (8 * (IDLength - i - 1)));
DeviceID = (DeviceID << 8) | (getbuf[9 + i] & 0xFF);
}
JZSDK_LOG_INFO("收到连接回复帧, 设备ID: %d", DeviceID);
//将ID放入Hal信息
s_JZsdk_Hal_Info *halInfo = JZsdk_Hal_GetHalInfo();
if (halInfo == NULL)
// 获取HAL句柄
T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
if (handle == NULL)
{
JZSDK_LOG_ERROR("获取Hal信息失败");
JZSDK_LOG_ERROR("HAL 未初始化");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
handle->lock(handle);
// 查找端口基类
T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(Port);
if (portBase == NULL)
{
handle->unlock(handle);
JZSDK_LOG_ERROR("端口 %d 未找到", Port);
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
//遍历ID表
for (int i = 0; i < halInfo->HalPort[Port].SubNum ; i++)
// 检查设备ID是否已存在
for (int i = 0; i < portBase->HalStatus.SubNum; i++)
{
if (halInfo->HalPort[Port].SubId[i] == DeviceID)
if (portBase->HalStatus.SubId[i] == DeviceID)
{
JZSDK_LOG_INFO("已拥有设备ID: %d", DeviceID);
JZSDK_LOG_INFO("设备ID %d 已存在", DeviceID);
handle->unlock(handle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
//添加ID
if (halInfo->HalPort[Port].SubNum >= JZ_MAX_SUB_ID_NUM)
// 检查数组是否已满
if (portBase->HalStatus.SubNum >= JZ_MAX_SUB_ID_NUM)
{
JZSDK_LOG_INFO("设备ID表已满");
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
else
{
JZSDK_LOG_INFO("添加设备ID: %d", DeviceID);
JZSDK_LOG_ERROR("设备ID表已满,无法添加新ID");
handle->unlock(handle);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
halInfo->HalPort[Port].SubId[halInfo->HalPort[Port].SubNum] = DeviceID;
halInfo->HalPort[Port].SubNum++;
// 添加新设备ID
portBase->HalStatus.SubId[portBase->HalStatus.SubNum] = DeviceID;
portBase->HalStatus.SubNum++;
JZSDK_LOG_INFO("添加设备ID 0x%x 成功,当前从设备数量: %d", DeviceID, portBase->HalStatus.SubNum);
handle->unlock(handle);
return ret;
}
... ... @@ -5070,13 +5144,9 @@ static void *UartReinit_thread(void *arg)
int *arg_value = (int *)arg;
int Port = arg_value[0];
s_JZ_SerialPortHalRegInfo SerialInfo = {
.BitRate = arg_value[1],
.ConnectType = PORT_CONNECT_TYPE_AS_SUB
};
JZsdk_HalPort_ReInit(Port, (void *)&SerialInfo);
int BitRate = arg_value[1];
JZsdk_HalUartReInit(Port, BitRate);
JZSDK_LOG_INFO("串口重置完毕");
... ...
#include "JZsdkLib.h"
#include <string.h> // 确保包含头文件
#include "./JZsdk_Hal.h"
#include "BaseConfig.h"
#define JZSDK_HAL_CONFIG_FILE "/root/sdcard/config.ini"
/**
* 读取INI配置文件中的指定键值对
* @param config_file 配置文件路径
* @param section 配置段名称
* @param key 键名称
* @return 成功返回动态分配的字符串(需调用者 free),失败返回 NULL
*/
char* JZsdk_HalConfig_Read(const char* config_file, const char* section, const char* key) {
FILE* fp = fopen(config_file, "r");
if (!fp) return NULL;
char line[1024];
char section_buf[256];
int in_target_section = 0;
char* result = NULL;
while (fgets(line, sizeof(line), fp)) {
// 去除行尾换行符
size_t len = strlen(line);
while (len > 0 && (line[len - 1] == '\n' || line[len - 1] == '\r')) {
line[--len] = '\0';
}
if (line[0] == '[') {
if (sscanf(line, "[%[^]]]", section_buf) == 1) {
// 去除空格
char* start = section_buf;
char* end = section_buf + strlen(section_buf) - 1;
while (start <= end && (*start == ' ' || *start == '\t')) start++;
while (end >= start && (*end == ' ' || *end == '\t')) end--;
if (start <= end) {
*(end + 1) = '\0';
in_target_section = (strcmp(start, section) == 0);
}
}
continue;
}
if (in_target_section) {
char current_key[256], current_value[256];
if (sscanf(line, "%[^=]=%[^\n]", current_key, current_value) == 2) {
// 去除key两端空格
char* k_start = current_key;
char* k_end = current_key + strlen(current_key) - 1;
while (k_start <= k_end && (*k_start == ' ' || *k_start == '\t')) k_start++;
while (k_end >= k_start && (*k_end == ' ' || *k_end == '\t')) k_end--;
if (k_start <= k_end) {
*(k_end + 1) = '\0';
if (strcmp(k_start, key) == 0) {
// 去除value两端空格和行尾注释
char* v_start = current_value;
char* v_end = current_value + strlen(current_value) - 1;
while (v_start <= v_end && (*v_start == ' ' || *v_start == '\t')) v_start++;
while (v_end >= v_start) {
if (*v_end == ' ' || *v_end == '\t' || *v_end == '#') {
v_end--;
}
else {
break;
}
}
if (v_start <= v_end) {
size_t val_len = v_end - v_start + 1;
result = (char*)malloc(val_len + 1);
if (result) {
strncpy(result, v_start, val_len);
result[val_len] = '\0';
}
}
break;
}
}
}
}
}
fclose(fp);
return result;
}
/**
* 修改INI配置文件中的指定键值对
* @param config_file 配置文件路径
* @param section 配置段名称(如 "APP_RUN_TYPE")
* @param key 键名称(如 "appmode")
* @param new_value 新的值(字符串形式)
* @return 0成功,-1失败
*/
T_JZsdkReturnCode JZsdk_HalConfig_Write(const char* config_file, const char* section,
const char* key, const char* new_value)
{
FILE* fp, * fp_temp;
char temp_file[512];
char line[1024];
char section_buf[256];
int in_target_section = 0;
int key_found = 0;
int ret = 0;
// 参数检查
if (!config_file || !section || !key || !new_value) {
printf("错误:参数不能为空\n");
return -1;
}
// 检查原文件是否存在
fp = fopen(config_file, "r");
if (!fp) {
JZSDK_LOG_ERROR("错误:无法打开配置文件 %s\n", config_file);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 创建临时文件
snprintf(temp_file, sizeof(temp_file), "%s.tmp", config_file);
fp_temp = fopen(temp_file, "w");
if (!fp_temp) {
JZSDK_LOG_ERROR("错误:无法创建临时文件\n");
fclose(fp);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 逐行读取原文件并处理
while (fgets(line, sizeof(line), fp)) {
// 去除行尾的换行符(保留用于写入)
size_t len = strlen(line);
if (len > 0 && (line[len - 1] == '\n' || line[len - 1] == '\r')) {
line[len - 1] = '\0';
len--;
}
if (len > 0 && line[len - 1] == '\r') {
line[len - 1] = '\0';
}
// 检查是否是section行
if (line[0] == '[') {
// 解析section名称
if (sscanf(line, "[%[^]]]", section_buf) == 1) {
// 去除section名称两端的空格
char* start = section_buf;
char* end = section_buf + strlen(section_buf) - 1;
while (start <= end && (*start == ' ' || *start == '\t')) start++;
while (end >= start && (*end == ' ' || *end == '\t')) end--;
if (start <= end) {
*(end + 1) = '\0';
// 判断是否是目标section
if (strcmp(start, section) == 0) {
in_target_section = 1;
printf("进入目标段: [%s]\n", section);
}
else {
in_target_section = 0;
}
}
}
// 写入原section行
fprintf(fp_temp, "%s\n", line);
continue;
}
// 如果在目标section内,查找key
if (in_target_section && !key_found) {
char current_key[256];
char current_value[256];
// 尝试解析key=value格式
if (sscanf(line, "%[^=]=%[^\n]", current_key, current_value) == 2) {
// 去除key两端的空格
char* key_start = current_key;
char* key_end = current_key + strlen(current_key) - 1;
while (key_start <= key_end && (*key_start == ' ' || *key_start == '\t')) key_start++;
while (key_end >= key_start && (*key_end == ' ' || *key_end == '\t')) key_end--;
if (key_start <= key_end) {
*(key_end + 1) = '\0';
// 检查是否是目标key
if (strcmp(key_start, key) == 0) {
printf("找到目标键: %s,原值: %s,修改为新值: %s\n",
key, current_value, new_value);
// 保留原行的缩进和格式
// 找到等号的位置
char* eq_pos = strchr(line, '=');
if (eq_pos) {
// 计算等号前的部分(包括空格)
int prefix_len = eq_pos - line + 1;
// 写入key部分(保持原格式)
fprintf(fp_temp, "%.*s%s\n", prefix_len, line, new_value);
}
else {
// 如果找不到等号(不应该发生),简单写入
fprintf(fp_temp, "%s=%s\n", key, new_value);
}
key_found = 1;
continue;
}
}
}
}
// 如果不是目标key,写入原行
fprintf(fp_temp, "%s\n", line);
}
// 如果在目标section内没有找到目标key,则在section末尾添加
if (in_target_section && !key_found) {
printf("未找到键 %s,在段末添加: %s=%s\n", key, key, new_value);
fprintf(fp_temp, "%s=%s\n", key, new_value);
}
// 关闭文件
fclose(fp);
fclose(fp_temp);
// 用临时文件替换原文件
if (remove(config_file) != 0) {
printf("警告:无法删除原文件 %s\n", config_file);
ret = -1;
}
if (rename(temp_file, config_file) != 0) {
printf("错误:无法重命名临时文件为 %s\n", config_file);
ret = -1;
}
if (ret == 0) {
printf("成功修改配置文件: %s\n", config_file);
}
return ret;
}
T_JZsdkReturnCode JZsdk_Hal_config_use_uart1(int num)
{
// const char* config_file = JZSDK_HAL_CONFIG_FILE;
// const char* target_value = NULL;
// char* current_value = NULL;
// int need_write = 0;
//
// // 确定目标值
// if (num == 0) {
// target_value = "0";
// }
// else if (num == 1) {
// target_value = "1";
// }
// else if (num == 3) {
//#if DEVICE_VERSION == JZ_H150A
// T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
// if (handle != NULL) {
// T_JZsdk_HalInfo HalInfo;
// handle->GetHalInfo(&HalInfo);
// for (int i = 0; i < HalInfo.UartNum; i++) {
// if (strcmp(HalInfo.UartInfo[i].DevicePath, "/dev/ttyS2") == 0) {
// target_value = "0";
// break;
// }
// else if (strcmp(HalInfo.UartInfo[i].DevicePath, "/dev/ttyGS0") == 0) {
// target_value = "1";
// break;
// }
// }
// }
//#endif
// if (!target_value) {
// JZSDK_LOG_ERROR("无法确定目标设备类型");
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// }
// else {
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 其他num不处理
// }
//
// // 读取当前配置值
// current_value = JZsdk_HalConfig_Read(config_file, "UART1", "device");
// if (current_value) {
// if (strcmp(current_value, target_value) != 0) {
// need_write = 1;
// }
// free(current_value);
// }
// else {
// // 读取失败(如文件不存在或键不存在),需要写入
// need_write = 1;
// }
//
// if (need_write) {
// if (JZsdk_HalConfig_Write(config_file, "UART1", "device", target_value) == 0) {
// JZSDK_LOG_INFO("成功修改device为 %s\n", target_value);
// }
// else {
// JZSDK_LOG_ERROR("修改device失败");
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// }
// else {
// JZSDK_LOG_INFO("device已经是 %s,无需修改\n", target_value);
// }
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_HalConfigInit()
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
#include "JZsdkLib.h"
#include <stdio.h>
#include "JZsdkLib.h"
#include "Hal_Recv/HalRecv.h"
#include "Hal_Send/HalSend.h"
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "BaseConfig.h"
#include "JZsdk_uart/JZsdk_Uart.h"
static s_JZsdk_Hal_Info *g_HalInfo = NULL;
// 静态全局变量:HAL 信息指针和句柄指针
static T_JZsdk_HalInfo* g_pHalInfo = NULL;
static T_JZsdkHalHandle* g_HalHandle = NULL;
// 用于保护初始化的临时锁(仅用于 JZsdk_HalInit 和 JZsdk_HalDeinit)
static pthread_mutex_t g_initMutex = PTHREAD_MUTEX_INITIALIZER;
/* 默认锁函数实现(使用 pthread) */
static T_JZsdkReturnCode default_lock(T_JZsdkHalHandle* handle)
{
pthread_mutex_lock((pthread_mutex_t*)handle->lockCtx);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
s_JZsdk_Hal_Info *JZsdk_Hal_GetHalInfo()
static T_JZsdkReturnCode default_unlock(T_JZsdkHalHandle* handle)
{
return g_HalInfo;
pthread_mutex_unlock((pthread_mutex_t*)handle->lockCtx);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_Hal_Init()
/***************
*
* 查询设备是否被引用
*
***********/
static int JZsdk_Hal_PortIsUsed(int PortId)
{
T_JZsdkOsalHandler *pOsalHandler = JZsdk_Platform_GetOsalHandler();
// 检查句柄和数据是否已初始化
if (g_HalHandle == NULL || g_pHalInfo == NULL)
{
JZSDK_LOG_ERROR("HAL 未初始化,请先调用 JZsdk_HalInit");
return JZ_FLAGCODE_OFF;
}
// 加锁
g_HalHandle->lock(g_HalHandle);
int used = JZ_FLAGCODE_OFF;
for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++) {
if (g_pHalInfo->HaveUsePortId[i] == PortId) {
used = JZ_FLAGCODE_ON;
break;
}
}
g_HalHandle->unlock(g_HalHandle);
if (g_HalInfo == NULL)
return used;
}
/***************
*
* 获取结构体以获取信息
*
***********/
static T_JZsdkReturnCode JZsdk_Get_HalInfo(T_JZsdk_HalInfo* pHalInfo)
{
if (g_HalHandle == NULL || g_pHalInfo == NULL)
{
JZSDK_LOG_ERROR("获取hal信息失败:HAL未初始化");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (pHalInfo == NULL)
{
g_HalInfo = pOsalHandler->Malloc(sizeof(s_JZsdk_Hal_Info));
JZSDK_LOG_ERROR("无效参数:pHalInfo 为空");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//将结构体信息清空
memset(g_HalInfo, 0, sizeof(s_JZsdk_Hal_Info));
g_HalHandle->lock(g_HalHandle);
memcpy(pHalInfo, g_pHalInfo, sizeof(T_JZsdk_HalInfo));
g_HalHandle->unlock(g_HalHandle);
//PSDK系列初始化
for (int i = DEVICE_PSDK; i < UART_4G; i++)
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**
*
* @brief 上层UART端口注册与管理
* @param pUartInfo 指向UART配置信息的指针
* @return 成功返回JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS,失败返回相应错误码
*
*/
T_JZsdkReturnCode JZsdk_HalUartInit(T_JZsdk_UartInfo* pUartInfo)
{
if (pUartInfo == NULL)
{
g_HalInfo->HalPort[i].PortType = PORT_TYPE_PSDK;
JZSDK_LOG_ERROR("无效参数:pUartInfo 为空");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//UART系列初始化
for (int i = UART_4G; i < USB_DEV_1; i++)
// 检查句柄和数据是否已初始化
if (g_HalHandle == NULL || g_pHalInfo == NULL)
{
JZSDK_LOG_ERROR("HAL 未初始化,请先调用 JZsdk_HalInit");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
g_HalHandle->lock(g_HalHandle);
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// 1. 检查端口ID是否已经存在
for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++)
{
g_HalInfo->HalPort[i].PortType = PORT_TYPE_UART;
if (pUartInfo->Base.PortId == g_pHalInfo->HaveUsePortId[i])
{
JZSDK_LOG_INFO("端口 0x%x 已经初始化过", pUartInfo->Base.PortId);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
goto unlock;
}
}
//USB系列初始化
for (int i = USB_DEV_1; i < NET_DEV_1; i++)
// 2. 检查全局端口表是否已满
if (g_pHalInfo->HaveUsePortNum >= JZ_MAX_PORT_NUM)
{
g_HalInfo->HalPort[i].PortType = PORT_TYPE_USB;
JZSDK_LOG_ERROR("全局端口表已满(最多 %d 个)", JZ_MAX_PORT_NUM);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
goto unlock;
}
//网口系列初始化
for (int i = NET_DEV_1; i < HAL_DATA_TRANSMISSION; i++)
// 3. 检查UART端口数量是否已达上限
if (g_pHalInfo->UartNum >= JZ_MAX_UART_NUM)
{
g_HalInfo->HalPort[i].PortType = PORT_TYPE_NET;
}
JZSDK_LOG_ERROR("没有可用的UART槽位(最多 %d 个)", JZ_MAX_UART_NUM);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
goto unlock;
}
//特殊数据层
for (int i = HAL_DATA_TRANSMISSION; i < HAL_MAX; i++)
// 4. 调用底层硬件初始化
if (JZsdk_UartInit(pUartInfo) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
g_HalInfo->HalPort[i].PortType = PORT_TYPE_TRANS_DATA;
JZSDK_LOG_ERROR("UART硬件初始化失败,端口 0x%x", pUartInfo->Base.PortId);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
goto unlock;
}
JZSDK_LOG_INFO("JZsdk_Hal_Init Success");
// 5. 保存UART信息到UART数组(使用UartNum作为索引)
int uartIndex = g_pHalInfo->UartNum;
memcpy(&g_pHalInfo->UartInfo[uartIndex], pUartInfo, sizeof(T_JZsdk_UartInfo));
g_pHalInfo->UartNum++;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// 6. 记录端口ID到全局已使用表
g_pHalInfo->HaveUsePortId[g_pHalInfo->HaveUsePortNum] = pUartInfo->Base.PortId;
g_pHalInfo->HaveUsePortNum++;
JZSDK_LOG_INFO("UART端口 0x%x 初始化成功", pUartInfo->Base.PortId);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
unlock:
g_HalHandle->unlock(g_HalHandle);
return ret;
}
/**************
*
* jzsdk 获取hal的端口使用标志位
*
* *********************/
int JZsdk_HalPort_UseFlag(int PortName)
/**
*
* uart重初始化的专用指针
*
*
*/
T_JZsdkReturnCode JZsdk_HalUartReInit(int PortId, int NewBitRate)
{
if(g_HalInfo == NULL)
//获取id信息
T_JZsdkHalHandle* HalHandle = JZsdk_Platform_GetHalHandle();
if (HalHandle == NULL)
{
return JZ_FLAGCODE_OFF;
JZSDK_LOG_ERROR("注册错误,hal未初始化");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return g_HalInfo->HalPort[PortName].UseFlag;
}
//检查该id是否已被注册
if (HalHandle->PortIsUsed(PortId) == JZ_FLAGCODE_OFF)
{
JZSDK_LOG_ERROR("当前串口未被初始化");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
T_JZsdkReturnCode JZsdk_HalPort_SetUseFlag(int PortName,int UseFlag)
{
g_HalInfo->HalPort[PortName].UseFlag = UseFlag;
// 获取当前 HAL 信息(需要加锁,但 GetHalInfo 内部已经加锁)
T_JZsdk_HalInfo halInfo = { 0 };
T_JZsdkReturnCode ret = HalHandle->GetHalInfo(&halInfo);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return ret;
}
//将端口添加到已使用端口列表中 或从端口中移除
//如果是要添加进列表中
if (UseFlag == JZ_FLAGCODE_ON)
// 查找对应 UART 信息
int i = 0;
for (; i < halInfo.UartNum; i++)
{
//先检查列表中是否已经存在
for (int i = 0; i < g_HalInfo->HaveUsePortNum; i++)
{
if (g_HalInfo->HaveUsePort[i] == PortName)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (halInfo.UartInfo[i].Base.PortId == PortId) {
break;
}
}
if (i >= halInfo.UartNum)
{
JZSDK_LOG_ERROR("重初始化失败,未检测到串口信息");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果不存在,则添加
g_HalInfo->HaveUsePort[g_HalInfo->HaveUsePortNum] = PortName;
g_HalInfo->HaveUsePortNum++;
g_HalInfo->HalPort[PortName].UseFlag = JZ_FLAGCODE_ON;
// 修改波特率
T_JZsdk_UartInfo uartInfo = halInfo.UartInfo[i];
uartInfo.Baudrate = NewBitRate;
//重初始化
if (JZsdk_UartReinit(&uartInfo, PortId) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("串口重初始化失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//如果是要从列表中移除
else if (UseFlag == JZ_FLAGCODE_OFF)
// 更新全局信息(需要加锁)
HalHandle->lock(HalHandle);
// 再次查找(可能期间发生变化),确保索引有效
int j = 0;
for (; j < g_pHalInfo->UartNum; j++)
{
//先检查列表中是否已经存在
for (int i = 0; i < g_HalInfo->HaveUsePortNum; i++)
{
if (g_HalInfo->HaveUsePort[i] == PortName)
{
g_HalInfo->HaveUsePort[i] = g_HalInfo->HaveUsePort[g_HalInfo->HaveUsePortNum - 1];
g_HalInfo->HaveUsePortNum--;
g_HalInfo->HalPort[PortName].UseFlag = JZ_FLAGCODE_OFF;
g_HalInfo->HalPort[PortName].ConnectStatus = JZ_FLAGCODE_OFF;
g_HalInfo->HalPort[PortName].HeartBeatStatusSend = JZ_FLAGCODE_OFF;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (g_pHalInfo->UartInfo[j].Base.PortId == PortId) {
memcpy(&g_pHalInfo->UartInfo[j], &uartInfo, sizeof(T_JZsdk_UartInfo));
break;
}
}
//如果本来就不存在,则直接返回
JZSDK_LOG_INFO("hal口:%s,本来就未使用,无需移除", JZsdk_DefineCode_GetPortName(PortName));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
HalHandle->unlock(HalHandle);
if (j >= g_pHalInfo->UartNum) {
JZSDK_LOG_ERROR("更新失败,端口在查找过程中被移除");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZSDK_LOG_INFO("UART端口 0x%x 重初始化成功", PortId);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//用于给初始化函数调用
static T_JZsdkReturnCode JZsdK_HalPort_Init_Info(int PortName, int UseFlag
, int ConnectStatus, int HeartBeatStatusSend, int PortType, int ConnectType)
{
g_HalInfo->HalPort[PortName].UseFlag = UseFlag;
g_HalInfo->HalPort[PortName].ConnectStatus = ConnectStatus;
g_HalInfo->HalPort[PortName].HeartBeatStatusSend = HeartBeatStatusSend;
g_HalInfo->HalPort[PortName].PortType = PortType;
g_HalInfo->HalPort[PortName].ConnectType = ConnectType;
//记录端口
JZsdk_HalPort_SetUseFlag(PortName, JZ_FLAGCODE_ON);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**********************
*
* hal端口 初始化函数
* psdk初始化 value为NULL
* uart初始化 value[0]为波特率
*
* ******************/
T_JZsdkReturnCode JZsdk_HalPort_Init(int PortName, void *Value)
T_JZsdkReturnCode JZsdk_HalDirectDataInit(T_JZsdk_DirectDataInfo* pDirectDataInfo)
{
T_JZsdkReturnCode ret;
if (pDirectDataInfo == NULL)
{
JZSDK_LOG_ERROR("无效参数:pDirectDataInfo 为空");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//psdk初始化
if (PortName >= DEVICE_PSDK && PortName < UART_4G)
if (g_HalHandle == NULL || g_pHalInfo == NULL)
{
JZsdK_HalPort_Init_Info(PortName,
JZ_FLAGCODE_ON,
JZ_FLAGCODE_OFF,
JZ_FLAGCODE_OFF,
PORT_TYPE_PSDK,
PORT_CONNECT_TYPE_AS_SUB);
JZSDK_LOG_ERROR("HAL 未初始化,请先调用 JZsdk_HalInit");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZSDK_LOG_INFO("hal%s 初始化",JZsdk_DefineCode_GetPortName(PortName));
g_HalHandle->lock(g_HalHandle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
//uart初始化
if (PortName >= UART_4G && PortName < USB_DEV_1)
// 1. 检查端口ID是否已经存在
for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++)
{
JZSDK_LOG_INFO("hal%s 初始化",JZsdk_DefineCode_GetPortName(PortName));
if (Value == NULL)
if (pDirectDataInfo->Base.PortId == g_pHalInfo->HaveUsePortId[i])
{
JZSDK_LOG_ERROR("hal%s 初始化失败,Value为NULL",JZsdk_DefineCode_GetPortName(PortName));
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
JZSDK_LOG_INFO("端口 0x%x 已经初始化过", pDirectDataInfo->Base.PortId);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
goto unlock;
}
}
s_JZ_SerialPortHalRegInfo *PortInfo = (s_JZ_SerialPortHalRegInfo *)Value;
int BitRate = PortInfo->BitRate;
int ConnectType = PortInfo->ConnectType;
ret = JZsdk_Uart_ReInit(PortName, BitRate);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("hal%s 初始化失败",JZsdk_DefineCode_GetPortName(PortName));
return ret;
// 2. 检查全局端口表是否已满
if (g_pHalInfo->HaveUsePortNum >= JZ_MAX_PORT_NUM)
{
JZSDK_LOG_ERROR("全局端口表已满(最多 %d 个)", JZ_MAX_PORT_NUM);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
goto unlock;
}
// 3. 检查UART端口数量是否已达上限
if (g_pHalInfo->DirectNum >= JZ_MAX_DIRECT_NUM)
{
JZSDK_LOG_ERROR("没有可用的DIRECT槽位(最多 %d 个)", JZ_MAX_DIRECT_NUM);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
goto unlock;
}
// 4 初始化直通
//(只是把id打开)
// 5. 保存UART信息到UART数组(使用UartNum作为索引)
int Index = g_pHalInfo->DirectNum;
memcpy(&g_pHalInfo->DirectDataInfo[Index], pDirectDataInfo, sizeof(T_JZsdk_UartInfo));
g_pHalInfo->UartNum++;
// 6. 记录端口ID到全局已使用表
g_pHalInfo->HaveUsePortId[g_pHalInfo->HaveUsePortNum] = g_pHalInfo->DirectDataInfo->Base.PortId;
g_pHalInfo->HaveUsePortNum++;
JZSDK_LOG_INFO("DIRECT端口 0x%x 初始化成功", pDirectDataInfo->Base.PortId);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
unlock:
g_HalHandle->unlock(g_HalHandle);
return ret;
}
//hal的基类指针,用于快速修改或者找到某个数据
T_JZsdk_PortBase* JZsdk_FindPortBase(int PortId)
{
if (g_pHalInfo == NULL) return NULL;
// 遍历 UART
for (int i = 0; i < g_pHalInfo->UartNum; i++) {
if (g_pHalInfo->UartInfo[i].Base.PortId == PortId) {
return &g_pHalInfo->UartInfo[i].Base;
}
}
// 遍历 USB
for (int i = 0; i < g_pHalInfo->UsbNum; i++) {
if (g_pHalInfo->UsbInfo[i].Base.PortId == PortId) {
return &g_pHalInfo->UsbInfo[i].Base;
}
}
// 遍历 NET
for (int i = 0; i < g_pHalInfo->NetNum; i++) {
if (g_pHalInfo->NetInfo[i].Base.PortId == PortId) {
return &g_pHalInfo->NetInfo[i].Base;
}
}
// 遍历 DIRECT
for (int i = 0; i < g_pHalInfo->DirectNum; i++) {
if (g_pHalInfo->DirectDataInfo[i].Base.PortId == PortId) {
return &g_pHalInfo->DirectDataInfo[i].Base;
}
}
return NULL;
}
T_JZsdkHalHandle* JZsdk_Platform_GetHalHandle(void)
{
return g_HalHandle; // 返回已注册的 OSAL 处理器
}
JZsdK_HalPort_Init_Info(PortName, JZ_FLAGCODE_ON, JZ_FLAGCODE_OFF, JZ_FLAGCODE_OFF, PORT_TYPE_UART, ConnectType);
/**
* HAL 初始化(动态分配内存)
*/
T_JZsdkReturnCode JZsdk_HalInit(void)
{
// 使用单独的初始化锁保护
pthread_mutex_lock(&g_initMutex);
if (g_pHalInfo != NULL || g_HalHandle != NULL)
{
JZSDK_LOG_WARN("HAL 已经初始化过");
pthread_mutex_unlock(&g_initMutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//usb初始化
if (PortName >= USB_DEV_1 && PortName < NET_DEV_1)
// 1. 分配 HAL 信息内存
T_JZsdk_HalInfo* halInfo = (T_JZsdk_HalInfo*)malloc(sizeof(T_JZsdk_HalInfo));
if (halInfo == NULL)
{
//还没做
JZSDK_LOG_ERROR("分配 HAL 信息内存失败");
pthread_mutex_unlock(&g_initMutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
memset(halInfo, 0, sizeof(T_JZsdk_HalInfo));
//net初始化
if (PortName >= NET_DEV_1 && PortName < HAL_DATA_TRANSMISSION)
// 2. 分配句柄内存
T_JZsdkHalHandle* handle = (T_JZsdkHalHandle*)malloc(sizeof(T_JZsdkHalHandle));
if (handle == NULL)
{
//还没做
JZSDK_LOG_ERROR("分配 HAL 句柄内存失败");
free(halInfo);
pthread_mutex_unlock(&g_initMutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//数据传输初始化
if (PortName == HAL_DATA_TRANSMISSION)
// 3. 分配锁对象(使用 pthread_mutex_t)
pthread_mutex_t* mutex = (pthread_mutex_t*)malloc(sizeof(pthread_mutex_t));
if (mutex == NULL)
{
JZsdK_HalPort_Init_Info(PortName, JZ_FLAGCODE_ON, JZ_FLAGCODE_OFF, JZ_FLAGCODE_OFF, PORT_TYPE_TRANS_DATA, PORT_CONNECT_TYPE_AS_SUB);
JZSDK_LOG_ERROR("分配锁内存失败");
free(handle);
free(halInfo);
pthread_mutex_unlock(&g_initMutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
pthread_mutex_init(mutex, NULL);
// 4. 填充句柄
handle->lockCtx = mutex;
handle->lock = default_lock;
handle->unlock = default_unlock;
handle->PortIsUsed = JZsdk_Hal_PortIsUsed;
handle->GetHalInfo = JZsdk_Get_HalInfo;
JZSDK_LOG_INFO("hal%s 初始化",JZsdk_DefineCode_GetPortName(PortName));
// 5. 赋值给全局变量
g_pHalInfo = halInfo;
g_HalHandle = handle;
pthread_mutex_unlock(&g_initMutex);
JZSDK_LOG_INFO("JZSDK HAL INIT SUCCESS");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**
* HAL 去初始化(释放内存)
*/
T_JZsdkReturnCode JZsdk_HalDeinit(void)
{
pthread_mutex_lock(&g_initMutex);
if (g_HalHandle != NULL) {
// 销毁锁
pthread_mutex_t* mutex = (pthread_mutex_t*)g_HalHandle->lockCtx;
if (mutex) {
pthread_mutex_destroy(mutex);
free(mutex);
}
free(g_HalHandle);
g_HalHandle = NULL;
}
if (g_pHalInfo != NULL) {
free(g_pHalInfo);
g_pHalInfo = NULL;
}
pthread_mutex_unlock(&g_initMutex);
JZSDK_LOG_INFO("JZSDK HAL 去初始化成功");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/************************
*
* HalRort Reinit
* 专门用于已经初始化完毕端口
* 与init的区别是, Reinit 是要调用多线程来重初始化的
*
* ***************************/
T_JZsdkReturnCode JZsdk_HalPort_ReInit(int PortName, void *Value)
//temp
/**************
*
* jzsdk 获取hal的端口使用标志位
*
* *********************/
int JZsdk_HalPort_UseFlag(int PortName)
{
return JZsdk_HalPort_Init(PortName, Value);
for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++)
{
if (g_pHalInfo->HaveUsePortId[i] == PortName)
{
return JZ_FLAGCODE_ON;
}
}
return JZ_FLAGCODE_OFF;
}
\ No newline at end of file
... ...
/**
/**
********************************************************************
* @file JZsdk_Hal.h
* JZsdk_Hal.c 的头文件
... ... @@ -26,6 +26,11 @@ extern "C" {
/* 常亮定义*/
#define JZ_MAX_SUB_ID_NUM 10
#define JZ_MAX_PORT_NUM 64
#define JZ_MAX_UART_NUM 8
#define JZ_MAX_USB_NUM 4
#define JZ_MAX_NET_NUM 4
#define JZ_MAX_DIRECT_NUM 1
typedef enum E_HAL_PORT_TYPE
{
... ... @@ -46,60 +51,121 @@ typedef enum E_HAL_CONNECT_TYPE
/******************
*
* hal使用状态
*
*
* 端口使用状态
*
* ********/
typedef struct s_JZ_SerialPortHalRegInfo
typedef struct T_JZsdk_HalStatus
{
int BitRate; //波特率
E_HAL_CONNECT_TYPE ConnectType; //连接类型
}s_JZ_SerialPortHalRegInfo;
int PortType; // hal的端口类型
int ConnectType; // 主副设备类型
// 作为主设备专有
int SubId[JZ_MAX_SUB_ID_NUM]; // 副设备ID
int SubNum; // 副设备数量
/******************
*
* hal使用状态
*
*
*
* ********/
typedef struct s_JZsdk_HalStatus
// 作为副设备专有
int HeartBeatStatusSend; // 对主设备发送心跳帧的发送开关
int ConnectStatus; // 连接状态,接收过连接帧后打开
}T_JZsdk_HalStatus;
typedef struct {
T_JZsdk_HalStatus HalStatus;
int PortId;
}T_JZsdk_PortBase;
typedef struct T_JZsdk_UartInfo
{
int UseFlag; //hal使用标志位 //初始化时开关关闭
int PortType; //hal的端口类型
int ConnectType;//主副设备类型
T_JZsdk_PortBase Base;
//作为主设备专有
int SubId[JZ_MAX_SUB_ID_NUM]; //副设备ID
int SubNum; //副设备数量
// 独有参数
char DevicePath[64]; // 设备路径
int Baudrate; // 波特率
int UartId; // uart编号
}T_JZsdk_UartInfo;
//作为副设备专有
int HeartBeatStatusSend; //对主设备发送心跳帧的发送开关
int ConnectStatus; //连接状态,接收过连接帧后打开
typedef struct T_JZsdk_UsbInfo
{
T_JZsdk_PortBase Base;
}s_JZsdk_HalStatus;
// 独有参数
char DevicePath[64]; // 设备路径
typedef struct s_JZsdk_Hal_Info
}T_JZsdk_UsbInfo;
typedef struct T_JZsdk_NetInfo
{
s_JZsdk_HalStatus HalPort[0x50]; //记录hal使用的端口状态
int HaveUsePort[0x50]; //记录已经使用的端口
int HaveUsePortNum; //记录已经使用的端口数量
T_JZsdk_PortBase Base;
// 独有参数
char DevicePath[64]; // 设备路径
}s_JZsdk_Hal_Info;
} T_JZsdk_NetInfo;
typedef struct T_JZsdk_DirectDataInfo
{
T_JZsdk_PortBase Base;
}T_JZsdk_DirectDataInfo;
typedef struct T_JZsdk_HalInfo
{
// uart信息
T_JZsdk_UartInfo UartInfo[JZ_MAX_UART_NUM];
int UartNum;
// usb信息
T_JZsdk_UsbInfo UsbInfo[JZ_MAX_USB_NUM];
int UsbNum;
// 网口信息
T_JZsdk_NetInfo NetInfo[JZ_MAX_NET_NUM];
int NetNum;
// 直通数据类型接口
T_JZsdk_DirectDataInfo DirectDataInfo[JZ_MAX_DIRECT_NUM];
int DirectNum;
int HaveUsePortId[JZ_MAX_PORT_NUM]; // 记录已经使用的端口ID
//T_JZsdk_PortBase* PortPtrs[JZ_MAX_PORT_NUM]; // 与 HaveUsePortId 一一对应,存储端口基类指针
//ps : 基类指针的方法如果后期效率不够了再该用,前期遍历可能更安全一点
int HaveUsePortNum; // 记录已经使用的端口数量
} T_JZsdk_HalInfo;
//前向声明
typedef struct T_JZsdkHalHandle T_JZsdkHalHandle;
typedef struct T_JZsdkHalHandle
{
void* lockCtx; // 锁上下文(指向具体的锁对象)
T_JZsdkReturnCode(*lock)(T_JZsdkHalHandle* handle);
T_JZsdkReturnCode(*unlock)(T_JZsdkHalHandle* handle);
int (*PortIsUsed)(int PortId);
T_JZsdkReturnCode(*GetHalInfo)(T_JZsdk_HalInfo* HalInfo);
}T_JZsdkHalHandle;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int JZsdk_HalPort_UseFlag(int PortName);
T_JZsdkReturnCode JZsdk_HalPort_SetUseFlag(int PortName,int UseFlag);
T_JZsdkReturnCode JZsdk_HalInit(void);
T_JZsdkReturnCode JZsdk_HalDeinit(void);
T_JZsdkHalHandle* JZsdk_Platform_GetHalHandle(void);
T_JZsdk_PortBase* JZsdk_FindPortBase(int PortId);
T_JZsdkReturnCode JZsdk_HalPort_Init(int PortName, void *Value);
T_JZsdkReturnCode JZsdk_HalPort_ReInit(int PortName, void *Value);
T_JZsdkReturnCode JZsdk_Hal_Init();
//后期优化进 handle
T_JZsdkReturnCode JZsdk_HalUartInit(T_JZsdk_UartInfo* pUartInfo);
T_JZsdkReturnCode JZsdk_HalUartReInit(int PortId, int NewBitRate);
T_JZsdkReturnCode JZsdk_HalDirectDataInit(T_JZsdk_DirectDataInfo* pDirectDataInfo);
int JZsdk_HalPort_UseFlag(int PortName);
s_JZsdk_Hal_Info *JZsdk_Hal_GetHalInfo();
T_JZsdkReturnCode JZsdk_Hal_config_use_uart1(int num);
#ifdef __cplusplus
}
... ...
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
... ... @@ -11,29 +11,8 @@
#include "BaseConfig.h"
#include "JZsdk_uart/JZsdk_Uart_UartDeal.h"
#include "JZsdk_Hal.h"
static unsigned char *Get_UartDevPath(int UartDev)
{
switch (UartDev)
{
case UART_4G:
return COMM_4G_UART_NUM;
break;
case UART_DEV_1:
return UART_DEV1_NUM;
break;
case UART_DEV_2:
return UART_DEV2_NUM;
break;
default:
return NULL;
break;
}
}
#include "JZsdk_Uart.h"
#include "../JZsdk_Hal.h"
/********************
*
... ... @@ -130,41 +109,36 @@ T_JZsdkReturnCode JZsdk_Uart_UartEnabled(unsigned char *UartDev, unsigned int Bi
/****************
*
* 串口重初始化
* 该函数仅能被JZsdk_HalPort_Init调用,请勿直接使用
*
* ************************/
T_JZsdkReturnCode JZsdk_Uart_ReInit(int UART_DEV_NAME, int BitRate)
{
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
int UartFd = 0;
//JZSDK_LOG_INFO("初始化串口 0x%x", UART_DEV_NAME);
//检查是否已经初始化
if(JZsdk_HalPort_UseFlag(UART_DEV_NAME) == JZ_FLAGCODE_ON)
{
//先注释掉原来的串口
JZsdk_HalPort_SetUseFlag(UART_DEV_NAME, JZ_FLAGCODE_OFF);
/*
* 串口重初始化,比较特殊,该函数仅能用于已经被初始化的串口
* 注意, 外部初始化串口应该用hal uart reinit
*/
T_JZsdkReturnCode JZsdk_UartReinit(T_JZsdk_UartInfo* pUartInf, int PortId)
{
//然后关闭串口 注:该函数有延时
JZsdk_Uart_CloseUartThead(PortId);
//然后关闭串口 注:该函数有延时
JZsdk_Uart_CloseUartThead(UART_DEV_NAME);
}
return JZsdk_UartInit(pUartInf);
}
//2、串口初始化
ret = JZsdk_Uart_UartEnabled(Get_UartDevPath(UART_DEV_NAME), BitRate, &UartFd);
//该函数仅被hal.c引用,注意, 外部初始化串口应该用haluartinit
T_JZsdkReturnCode JZsdk_UartInit(T_JZsdk_UartInfo* pUartInfo)
{
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
//串口初始化
ret = JZsdk_Uart_UartEnabled(pUartInfo->DevicePath, pUartInfo->Baudrate, &pUartInfo->UartId);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return ret;
}
//3、串口接收初始化
JZsdk_Uart_UartDeal_Receive(UartFd, UART_DEV_NAME);
//串口接收初始化
JZsdk_Uart_UartDeal_Receive(pUartInfo->UartId, pUartInfo->Base.PortId);
JZSDK_LOG_INFO("init %s sucess", JZsdk_DefineCode_GetPortName(UART_DEV_NAME));
return ret;
}
JZSDK_LOG_INFO("init %s sucess", JZsdk_DefineCode_GetPortName(pUartInfo->Base.PortId));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
/**
********************************************************************
* @file JZsdk_Uart.h
* JZsdk_Uart.c 的头文件
... ... @@ -7,11 +7,12 @@
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_UART_H
#define JZSDK_UART_H
#ifndef JZSDK_UART_2_H
#define JZSDK_UART_2_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "../JZsdk_Hal.h"
#ifdef __cplusplus
extern "C" {
... ... @@ -24,8 +25,8 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_Uart_ReInit(int UART_DEV_NAME, int BitRate);
T_JZsdkReturnCode JZsdk_Uart_UartEnabled(unsigned char *UartDev, unsigned int BitRate, int *UartFd);
T_JZsdkReturnCode JZsdk_UartReinit(T_JZsdk_UartInfo* pUartInf, int PortId);
T_JZsdkReturnCode JZsdk_UartInit(T_JZsdk_UartInfo* pUartInfo);
#ifdef __cplusplus
}
... ...
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
... ... @@ -531,7 +531,7 @@ T_JZsdkReturnCode JZsdk_Uart_UartSend_NotTask(int Uart_Name, unsigned char *str,
//printf("向串口1号设备发送\n");
write(Uart_DEV1_fd, str, str_lenth);
}
else if (Uart_Name = UART_DEV_2)
else if (Uart_Name == UART_DEV_2)
{
//printf("向串口2号设备发送\n");
write(Uart_DEV2_fd, str, str_lenth);
... ... @@ -650,7 +650,7 @@ static T_JZsdkReturnCode JZsdk_Uart_CloseUartFd(int UartPort)
else if (UartPort == UART_DEV_2)
{
JZSDK_LOG_INFO("关闭串口2识别符\n");
close(Uart_DEV1_fd);
close(Uart_DEV2_fd);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
... ...
... ... @@ -393,7 +393,7 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType)
break;
case FILTER_FORMAL_H150A:
ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL_AUDIO);
ret = FF_Filter_ParamInit(AD_Info, FILTER_FORMAL_15_H150A);
break;
default:
... ...
/**
/**
********************************************************************
* @file FF_FilterParam.h
* FF_FilterParam.h
... ... @@ -350,6 +350,7 @@ extern "C" {
lowpass=f=6000:width_type=q:w=1.8, \
volume=0.98"
//测试 34~35度 26.3.18
#define FILTER_FORMAL_11_H150A "equalizer=f=250:t=q:w=2.0:g=-14, \
equalizer=f=500:t=q:w=2.0:g=-6, \
equalizer=f=1000:t=q:w=2.0:g=+0, \
... ... @@ -368,10 +369,28 @@ extern "C" {
highpass=f=80:width_type=q:w=1.2, \
volume=0.98"
#define FILTER_FORMAL_12_H150A "equalizer=f=250:t=q:w=2.0:g=-16, \
equalizer=f=500:t=q:w=2.0:g=-8, \
equalizer=f=1000:t=q:w=2.0:g=-4, \
equalizer=f=2000:t=q:w=2.0:g=-2, \
//温度过高,半小时61度,可能是aphaser带来的频谱位移导致
#define FILTER_MUSIC_13_H150A "equalizer=f=31:t=q:w=2.0:g=-12, \
equalizer=f=62:t=q:w=2.0:g=-3, \
equalizer=f=125:t=q:w=2.0:g=0, \
equalizer=f=250:t=q:w=2.0:g=-3, \
equalizer=f=500:t=q:w=2.0:g=0, \
equalizer=f=1000:t=q:w=2.0:g=+1, \
equalizer=f=2000:t=q:w=2.0:g=+1, \
equalizer=f=4000:t=q:w=2.0:g=+1, \
equalizer=f=8000:t=q:w=2.0:g=+2, \
equalizer=f=16000:t=q:w=2.0:g=+2, \
lowpass=f=18000:width_type=q:w=1.0, \
highpass=f=60:width_type=q:w=1.2, \
compand=attacks=0:decays=0.3:points=-60/-60|-30/-24|-20/-18|-10/-12|0/-6:gain=2, \
aphaser=delay=1:decay=0.1:speed=0.5, \
volume=1.0"
//比11补偿点中低频, 温度34,音量126-127
#define FILTER_FORMAL_14_H150A "equalizer=f=250:t=q:w=2.0:g=-14, \
equalizer=f=500:t=q:w=2.0:g=-6, \
equalizer=f=1000:t=q:w=2.0:g=+0, \
equalizer=f=2000:t=q:w=2.0:g=+0, \
equalizer=f=4000:t=q:w=2.0:g=+0, \
equalizer=f=8000:t=q:w=2.0:g=-8, \
equalizer=f=16000:t=q:w=2.0:g=-2, \
... ... @@ -384,14 +403,38 @@ extern "C" {
equalizer=f=125:t=q:w=2.0:g=-48, \
lowpass=f=6000:width_type=q:w=1.8, \
highpass=f=80:width_type=q:w=1.2, \
aphaser=delay=1:decay=0.1:speed=0.5, \
volume=0.98"
#define FILTER_FORMAL_13_H150A "equalizer=f=250:t=q:w=2.0:g=-24, \
equalizer=f=500:t=q:w=2.0:g=-16, \
equalizer=f=1000:t=q:w=2.0:g=-8, \
equalizer=f=2000:t=q:w=2.0:g=-4, \
//温度33,音量126
#define FILTER_FORMAL_15_H150A "equalizer=f=250:t=q:w=2.0:g=-10, \
equalizer=f=500:t=q:w=2.0:g=-3, \
equalizer=f=1000:t=q:w=2.0:g=+0, \
equalizer=f=2000:t=q:w=2.0:g=+0, \
equalizer=f=4000:t=q:w=2.0:g=+0, \
equalizer=f=8000:t=q:w=2.0:g=-8, \
equalizer=f=8000:t=q:w=2.0:g=-6, \
equalizer=f=16000:t=q:w=2.0:g=-2, \
compand=attacks=0:decays=0.3:points=-60/-60|-30/-20|-20/-15|-10/-10|0/-5:gain=3, \
equalizer=f=4:t=q:w=2.0:g=-96, \
equalizer=f=8:t=q:w=2.0:g=-96, \
equalizer=f=15:t=q:w=2.0:g=-96, \
equalizer=f=31:t=q:w=2.0:g=-72, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
lowpass=f=6000:width_type=q:w=1.8, \
highpass=f=80:width_type=q:w=1.2, \
aphaser=delay=1:decay=0.1:speed=0.5, \
volume=0.98"
//温度37,音量125-126 温度高了
#define FILTER_FORMAL_16_H150A "equalizer=f=250:t=q:w=2.0:g=-10, \
equalizer=f=500:t=q:w=2.0:g=-3, \
equalizer=f=1000:t=q:w=2.0:g=+0, \
equalizer=f=2000:t=q:w=2.0:g=+0, \
equalizer=f=4000:t=q:w=2.0:g=+0, \
equalizer=f=8000:t=q:w=2.0:g=-4, \
equalizer=f=16000:t=q:w=2.0:g=-2, \
compand=attacks=0:decays=0.3:points=-60/-60|-30/-20|-20/-15|-10/-10|0/-5:gain=3, \
equalizer=f=4:t=q:w=2.0:g=-96, \
... ... @@ -402,6 +445,7 @@ extern "C" {
equalizer=f=125:t=q:w=2.0:g=-48, \
lowpass=f=6000:width_type=q:w=1.8, \
highpass=f=80:width_type=q:w=1.2, \
aphaser=delay=1:decay=0.1:speed=0.5, \
volume=0.98"
... ...
#include <stdio.h>
#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()
T_JZsdkReturnCode HeartBeat_HalCheck(void)
{
s_JZsdk_Hal_Info *HalInfo = JZsdk_Hal_GetHalInfo();
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);
//1、获取心跳帧的开启情况 发送心跳帧
for (int i = 0; i < HalInfo->HaveUsePortNum; i++)
// 加锁保护共享数据
handle->lock(handle);
// 遍历所有已使用的端口
for (int i = 0; i < HalInfo.HaveUsePortNum; i++)
{
if (HalInfo->HalPort[HalInfo->HaveUsePort[i]].HeartBeatStatusSend == JZ_FLAGCODE_ON)
int portId = HalInfo.HaveUsePortId[i];
T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(portId);
if (portBase == NULL)
{
HalSend_type1Send_HeartBeatStatus(HalInfo->HaveUsePort[i], 0x00, HalInfo->HalPort[HalInfo->HaveUsePort[i]].ConnectStatus);
JZSDK_LOG_WARN("端口 %d 在已使用列表中但未找到对应结构", 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)
... ...
... ... @@ -173,7 +173,7 @@ T_JZsdkReturnCode Gimbal_Set_PitchAngle(int angle)
//独立模式
case JZ_MODULE_CONTROL_WAY_INDEPENDENT:
{
if (angle < g_GimbalInfo.PitchLimitMin || angle > g_GimbalInfo.PitchLimitMax || (g_GimbalInfo.PitchLimitMin == g_GimbalInfo.PitchLimitMax))
if ( (angle < g_GimbalInfo.PitchLimitMin) || (angle > g_GimbalInfo.PitchLimitMax) || (g_GimbalInfo.PitchLimitMin == g_GimbalInfo.PitchLimitMax))
{
printf("云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
... ...
/**
/**
********************************************************************
* @file VolumeLimit.h
* VolumeLimit.h 的头文件
... ... @@ -114,12 +114,12 @@ extern "C" {
// #define MAX_VOLUME (80)
// #define MAX_TTS_VOLUME (75)
//2.1~2.2欧姆的振膜 默认参数87 88 11号参数 73 73
//#define MAX_VOLUME (71)
//#define MAX_TTS_VOLUME (71)
#define MAX_VOLUME (85)
#define MAX_TTS_VOLUME (85)
#define MAX_VOLUME (73)
#define MAX_TTS_VOLUME (73)
//旧滤波 和 11参
//#define MAX_VOLUME (73)
//#define MAX_TTS_VOLUME (73)
#else
#define MAX_VOLUME (75)
#define MAX_TTS_VOLUME (75)
... ...
# cmake 最低版本要求 第三行名字不能动
cmake_minimum_required(VERSION 2.8)
project(JZ_T40S)
project(JZ_H150A)
#set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++")
#"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。
... ...
... ... @@ -62,6 +62,19 @@ extern "C" {
#define USER_DEVELOPER_ACCOUNT "jizhisdk@163.com"
#define USER_BAUD_RATE "921600"
//#define USER_APP_NAME "ID0570"
//#define USER_APP_ID "177576"
//#define USER_APP_KEY "5ce1ab19916613ec389a17c99670176"
//#define USER_APP_LICENSE "tSm/nAFGayFQ1WZ4WwR+OfHzopYB978IMd87NYb4zeXe/7rZHFVm8RIFZHi2MGZXx9VJJDovigWm6oGjiiRShshD8TmRC8mO4wcQKmZOaAuae915caKzsvFeMb0ekYyeYpzRB43cWH+Rvri3Sb6SMeAdxHI+i7FA/uGre0nNGhv6A+UXBUreufKMq9Rf9Y9qccQqGY8YtgldNlDJHapRuqKJsdZejkCEccNFv1O5AVZO63A7r/UfF49EkljCAhlAaSu1Z7qHHqBb9NbovuTf4d+omlL/ys+2ug7RPxhAdTKAbvvP49k8ObMze9FZTF4vBSuXzuveKCg/XMgWWP3dSw=="
//#define USER_DEVELOPER_ACCOUNT "acme20251208@163.com"
//#define USER_BAUD_RATE "921600"
//#define USER_APP_NAME "H150A"
//#define USER_APP_ID "180445"
//#define USER_APP_KEY "0164ed60d70b438c5ff26fde60c6609"
//#define USER_APP_LICENSE "rlyth08igUpD/ell+FOLoQJYI12b8IjnaylClO6T4n7sGopwUQ29aEXPaEK7HylrZBXbpYCpdZGbtjOj22G38FgEYOiVJqeFEzeZwJorDZzNt3X+i26h2pHvEMG9d+p3UnW8AGqowKAvOPOD8VW6jquj4iMkLrUP4NLrijWR9uMET1TenZY4MFSK+F5/Hl3+J8DFF8Uagj1q4UBaoUH/noZOiIspJB/s5mmYJAcqMwEMkv8YeE4gN8HLh8kDGFpmMXD2cy5UoQnZJVMzBYOMg4Fn1GPbuVGEIszgFY1XPjGvJ5219znC02ZHs9IKc6g8BxotKF8gUQbXI/yweGoCMA=="
//#define USER_DEVELOPER_ACCOUNT "jizhisdk@163.com"
//#define USER_BAUD_RATE "921600"
#else
#define USER_APP_NAME "H110"
#define USER_APP_ID "107188"
... ...
... ... @@ -68,6 +68,8 @@
#include "CommonMod/PowerManger/PowerManger.h"
#include "DJI_Expansion.h"
#include "JZsdk_Hal.h"
#ifdef AUDIODEAL_CONFIG_STATUS_ON
#include "AudioDeal/AudioDeal.h"
#endif
... ... @@ -1250,4 +1252,24 @@ void *getworkmodeTask(void *arg)
int flag = 0x01;
Main_StartupPriority(&flag);
#if DEVICE_VERSION == JZ_H150A
//h150a新增,如果是h150a,增加一个新的识别
//如果是m400,输入1 如果是m350输入0
T_DjiAircraftInfoBaseInfo aircraftInfoBaseInfo;
DjiAircraftInfo_GetBaseInfo(&aircraftInfoBaseInfo);
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_SERIES_M350)
{
//在hal层中写入uart口
JZsdk_Hal_config_use_uart1(0);
}
else if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M400)
{
//在hal层中写入uart口
JZsdk_Hal_config_use_uart1(1);
}
#endif // DEVICE_VERSION == JZ_H150A
}
\ No newline at end of file
... ...
/**
/**
********************************************************************
* @file hal_uart.c
* @brief
... ... @@ -25,7 +25,7 @@
/* Includes ------------------------------------------------------------------*/
#include <dji_logger.h>
#include "hal_uart.h"
#include "version_choose.h"
#include "BaseConfig.h"
/* Private constants ---------------------------------------------------------*/
#define UART_DEV_NAME_STR_SIZE (128)
... ... @@ -59,14 +59,25 @@ T_DjiReturnCode HalUart_Init(E_DjiHalUartNum uartNum, uint32_t baudRate, T_DjiUa
return DJI_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED;
}
if (uartNum == DJI_HAL_UART_NUM_0) {
strcpy(uartName, LINUX_UART_DEV1);
} else if (uartNum == DJI_HAL_UART_NUM_1) {
strcpy(uartName, LINUX_UART_DEV2);
} else {
goto free_uart_handle;
//获取 输入参数是否存在串口
if (JZsdk_ParamterParsing_GetUart1Device() == NULL)
{
if (uartNum == DJI_HAL_UART_NUM_0) {
strcpy(uartName, LINUX_UART_DEV1);
}
else if (uartNum == DJI_HAL_UART_NUM_1) {
strcpy(uartName, LINUX_UART_DEV2);
}
else {
goto free_uart_handle;
}
}
else
{
strcpy(uartName, JZsdk_ParamterParsing_GetUart1Device());
}
#ifdef USE_CLION_DEBUG
sprintf(systemCmd, "ls -l %s", uartName);
fp = popen(systemCmd, "r");
... ...