作者 潘浩彬

合并分支 'dev_00.00.02.28' 到 'dev'

Dev 00.00.02.28



查看合并请求 !1
正在显示 36 个修改的文件 包含 1388 行增加502 行删除
1 # 编译链的配置 1 # 编译链的配置
2 2
3 #1、编译链与设备类型的选择 3 #1、编译链与设备类型的选择
4 -set(DEVICE_NAME JZ_T40S) 4 +set(DEVICE_NAME JZ_H150A)
5 #上一行为禁止修改行 5 #上一行为禁止修改行
6 6
7 message("**************************JZSDK构建编译开始***************************\n") 7 message("**************************JZSDK构建编译开始***************************\n")
1 -#include <stdio.h> 1 +#include <stdio.h>
2 #include "./JZsdk_FileSystm.h" 2 #include "./JZsdk_FileSystm.h"
3 #include <stdlib.h> 3 #include <stdlib.h>
4 #include <stdbool.h> 4 #include <stdbool.h>
@@ -396,7 +396,7 @@ T_JZsdkReturnCode JZsdk_create_file(const char* file_path) @@ -396,7 +396,7 @@ T_JZsdkReturnCode JZsdk_create_file(const char* file_path)
396 if (file != NULL) 396 if (file != NULL)
397 { 397 {
398 fclose(file); 398 fclose(file);
399 - fsync(file); 399 + fsync(fileno(file));
400 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 400 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
401 } 401 }
402 402
1 -#include <stdio.h> 1 +#include <stdio.h>
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <pthread.h> 3 #include <pthread.h>
4 #include <string.h> // Include this for strncpy 4 #include <string.h> // Include this for strncpy
5 5
6 #include "./JZsdk_Task.h" 6 #include "./JZsdk_Task.h"
7 7
  8 +
8 T_JZsdkReturnCode JZsdk_Osal_TaskCreate(const char *name, void *(*taskFunc)(void *), unsigned int stackSize, void *arg, 9 T_JZsdkReturnCode JZsdk_Osal_TaskCreate(const char *name, void *(*taskFunc)(void *), unsigned int stackSize, void *arg,
9 T_JZTaskHandle *task) 10 T_JZTaskHandle *task)
10 { 11 {
1 -#include <pthread.h> 1 +#include <pthread.h>
2 #include "JZsdkLib.h" 2 #include "JZsdkLib.h"
3 3
4 #include "BaseConfig.h" 4 #include "BaseConfig.h"
@@ -338,8 +338,8 @@ static T_JZsdkReturnCode EquipmentEnvironment_Init() @@ -338,8 +338,8 @@ static T_JZsdkReturnCode EquipmentEnvironment_Init()
338 //sdklib加载 338 //sdklib加载
339 JZsdk_LibInit(JZ_FLAGCODE_ON); 339 JZsdk_LibInit(JZ_FLAGCODE_ON);
340 340
341 - //hal信息加载,这里后期需要优化  
342 - JZsdk_Hal_Init(); 341 + //hal信息加载
  342 + JZsdk_HalInit();
343 343
344 JZSDK_LOG_INFO("%x,PsdkVersion%d.%d.%d.%d\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION); 344 JZSDK_LOG_INFO("%x,PsdkVersion%d.%d.%d.%d\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
345 345
@@ -369,7 +369,11 @@ T_JZsdkReturnCode Main_APP_Psdk() @@ -369,7 +369,11 @@ T_JZsdkReturnCode Main_APP_Psdk()
369 JZSDK_WidgetMgMT_Init(); 369 JZSDK_WidgetMgMT_Init();
370 370
371 //初始化app模式 371 //初始化app模式
372 - JZsdk_HalPort_SetUseFlag(DEVICE_PSDK ,JZ_FLAGCODE_ON); 372 +
  373 + T_JZsdk_DirectDataInfo DirectDataInfo = {
  374 + .Base.PortId = DEVICE_PSDK,
  375 + };
  376 + JZsdk_HalDirectDataInit(&DirectDataInfo);
373 377
374 Main_WorkModeSet(JZ_FLAGCODE_ON); 378 Main_WorkModeSet(JZ_FLAGCODE_ON);
375 379
@@ -398,17 +402,19 @@ int Main_TestAPP() @@ -398,17 +402,19 @@ int Main_TestAPP()
398 { 402 {
399 JZsdk_LibInit(JZ_FLAGCODE_ON); 403 JZsdk_LibInit(JZ_FLAGCODE_ON);
400 404
401 - JZsdk_Hal_Init(); 405 + JZsdk_HalInit();
402 406
403 CommonMod_Init(); 407 CommonMod_Init();
404 408
405 //串口设备1初始化 409 //串口设备1初始化
406 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
407 - .BitRate = UART_DEV1_BITRATE,  
408 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB  
409 - }; 410 + T_JZsdk_UartInfo UartInfo = {
410 411
411 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 412 + .DevicePath = UART_DEV1_NUM,
  413 + .Baudrate = UART_DEV1_BITRATE,
  414 + .Base.PortId = UART_DEV_1,
  415 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
  416 + };
  417 + JZsdk_HalUartInit(&UartInfo);
412 } 418 }
413 419
414 420
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -33,12 +33,15 @@ T_JZsdkReturnCode JZ_h10_init(int mode) @@ -33,12 +33,15 @@ T_JZsdkReturnCode JZ_h10_init(int mode)
33 if (mode == APP_UART) 33 if (mode == APP_UART)
34 { 34 {
35 //串口设备1初始化 35 //串口设备1初始化
36 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
37 - .BitRate = UART_DEV1_BITRATE,  
38 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 36 + T_JZsdk_UartInfo UartInfo = {
  37 + .Base.PortId = UART_DEV_1,
  38 + .DevicePath = UART_DEV1_NUM,
  39 + .Baudrate = UART_DEV1_BITRATE,
  40 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
39 }; 41 };
40 42
41 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 43 + //串口设备1初始化
  44 + JZsdk_HalUartInit(&UartInfo);
42 } 45 }
43 46
44 if (mode == APP_PSDK) 47 if (mode == APP_PSDK)
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -39,12 +39,15 @@ T_JZsdkReturnCode JZ_h10t_init(int mode) @@ -39,12 +39,15 @@ T_JZsdkReturnCode JZ_h10t_init(int mode)
39 if (mode == APP_UART) 39 if (mode == APP_UART)
40 { 40 {
41 //串口设备1初始化 41 //串口设备1初始化
42 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
43 - .BitRate = UART_DEV1_BITRATE,  
44 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 42 + T_JZsdk_UartInfo UartInfo = {
  43 + .Base.PortId = UART_DEV_1,
  44 + .DevicePath = UART_DEV1_NUM,
  45 + .Baudrate = UART_DEV1_BITRATE,
  46 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
45 }; 47 };
46 48
47 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 49 + //串口设备1初始化
  50 + JZsdk_HalUartInit(&UartInfo);
48 } 51 }
49 52
50 if (mode == APP_PSDK) 53 if (mode == APP_PSDK)
@@ -53,13 +56,14 @@ T_JZsdkReturnCode JZ_h10t_init(int mode) @@ -53,13 +56,14 @@ T_JZsdkReturnCode JZ_h10t_init(int mode)
53 JZsdk_data_transmisson_Receive_Init(); 56 JZsdk_data_transmisson_Receive_Init();
54 } 57 }
55 58
56 - //4g设备初始化  
57 - s_JZ_SerialPortHalRegInfo Serial_4G_Info = {  
58 - .BitRate = COMM_4G_UART_BITRATE,  
59 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 59 + //4G初始化
  60 + T_JZsdk_UartInfo Uart4GInfo = {
  61 + .Base.PortId = UART_4G,
  62 + .DevicePath = COMM_4G_UART_NUM,
  63 + .Baudrate = COMM_4G_UART_BITRATE,
  64 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
60 }; 65 };
61 -  
62 - JZsdk_HalPort_Init(UART_4G, (void *)&Serial_4G_Info); 66 + JZsdk_HalUartInit(&Uart4GInfo);
63 67
64 //音频库初始化 68 //音频库初始化
65 AudioDeal_Init(); 69 AudioDeal_Init();
@@ -74,12 +74,22 @@ T_JZsdkReturnCode JZ_H150A_init(int mode) @@ -74,12 +74,22 @@ T_JZsdkReturnCode JZ_H150A_init(int mode)
74 if (mode == APP_UART) 74 if (mode == APP_UART)
75 { 75 {
76 //串口设备1初始化 76 //串口设备1初始化
77 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
78 - .BitRate = UART_DEV1_BITRATE,  
79 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 77 + T_JZsdk_UartInfo UartInfo = {
  78 + .Base.PortId = UART_DEV_1,
  79 + .DevicePath = UART_DEV1_NUM,
  80 + .Baudrate = UART_DEV1_BITRATE,
  81 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
80 }; 82 };
81 83
82 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 84 + //去检查有没有额外输入串口号
  85 + const char* devicepath = JZsdk_ParamterParsing_GetUart1Device();
  86 + if (devicepath != NULL)
  87 + {
  88 + memcpy(UartInfo.DevicePath, devicepath, sizeof(UartInfo.DevicePath));
  89 + }
  90 +
  91 + JZsdk_HalUartInit(&UartInfo);
  92 +
83 } 93 }
84 94
85 if (mode == APP_PSDK) 95 if (mode == APP_PSDK)
@@ -88,12 +98,14 @@ T_JZsdkReturnCode JZ_H150A_init(int mode) @@ -88,12 +98,14 @@ T_JZsdkReturnCode JZ_H150A_init(int mode)
88 JZsdk_data_transmisson_Receive_Init(); 98 JZsdk_data_transmisson_Receive_Init();
89 } 99 }
90 100
91 - //4G串口初始化  
92 - s_JZ_SerialPortHalRegInfo SerialInfo3 = {  
93 - .BitRate = COMM_4G_UART_BITRATE,  
94 - .ConnectType = PORT_CONNECT_TYPE_AS_MAIN, 101 + //4g设备初始化
  102 + T_JZsdk_UartInfo Uart4GInfo = {
  103 + .Base.PortId = UART_4G,
  104 + .DevicePath = COMM_4G_UART_NUM,
  105 + .Baudrate = COMM_4G_UART_BITRATE,
  106 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
95 }; 107 };
96 - JZsdk_HalPort_Init(UART_4G, (void *)&SerialInfo3); 108 + JZsdk_HalUartInit(&Uart4GInfo);
97 109
98 //音频库初始化 110 //音频库初始化
99 AudioDeal_Init(); 111 AudioDeal_Init();
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -82,13 +82,15 @@ T_JZsdkReturnCode JZ_h150s_h150t_init(int mode) @@ -82,13 +82,15 @@ T_JZsdkReturnCode JZ_h150s_h150t_init(int mode)
82 82
83 if (mode == APP_UART) 83 if (mode == APP_UART)
84 { 84 {
85 - //串口设备1初始化  
86 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
87 - .BitRate = UART_DEV1_BITRATE,  
88 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 85 + T_JZsdk_UartInfo UartInfo = {
  86 + .Base.PortId = UART_DEV_1,
  87 + .DevicePath = UART_DEV1_NUM,
  88 + .Baudrate = UART_DEV1_BITRATE,
  89 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
89 }; 90 };
90 91
91 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 92 + //串口设备1初始化
  93 + JZsdk_HalUartInit(&UartInfo);
92 } 94 }
93 95
94 if (mode == APP_PSDK) 96 if (mode == APP_PSDK)
@@ -100,13 +102,14 @@ T_JZsdkReturnCode JZ_h150s_h150t_init(int mode) @@ -100,13 +102,14 @@ T_JZsdkReturnCode JZ_h150s_h150t_init(int mode)
100 //h150t额外开启4g 102 //h150t额外开启4g
101 if (DEVICE_VERSION == JZ_H150T) 103 if (DEVICE_VERSION == JZ_H150T)
102 { 104 {
103 - //串口设备4g初始化  
104 - s_JZ_SerialPortHalRegInfo Serial_4G_Info = {  
105 - .BitRate = COMM_4G_UART_BITRATE,  
106 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 105 + //4G初始化
  106 + T_JZsdk_UartInfo Uart4GInfo = {
  107 + .Base.PortId = UART_4G,
  108 + .DevicePath = COMM_4G_UART_NUM,
  109 + .Baudrate = COMM_4G_UART_BITRATE,
  110 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
107 }; 111 };
108 -  
109 - JZsdk_HalPort_Init(UART_4G, (void *)&Serial_4G_Info); 112 + JZsdk_HalUartInit(&Uart4GInfo);
110 } 113 }
111 114
112 if (mode == APP_UART) 115 if (mode == APP_UART)
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -47,12 +47,13 @@ T_JZsdkReturnCode JZ_h1e_init(int mode) @@ -47,12 +47,13 @@ T_JZsdkReturnCode JZ_h1e_init(int mode)
47 if (mode == APP_UART) 47 if (mode == APP_UART)
48 { 48 {
49 //串口设备1初始化 49 //串口设备1初始化
50 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
51 - .BitRate = UART_DEV1_BITRATE,  
52 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 50 + T_JZsdk_UartInfo UartInfo = {
  51 + .Base.PortId = UART_DEV_1,
  52 + .DevicePath = UART_DEV1_NUM,
  53 + .Baudrate = UART_DEV1_BITRATE,
  54 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
53 }; 55 };
54 -  
55 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 56 + JZsdk_HalUartInit(&UartInfo);
56 } 57 }
57 58
58 if (mode == APP_PSDK) 59 if (mode == APP_PSDK)
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -45,14 +45,17 @@ T_JZsdkReturnCode JZ_h1t_init(int mode) @@ -45,14 +45,17 @@ T_JZsdkReturnCode JZ_h1t_init(int mode)
45 if (mode == APP_UART) 45 if (mode == APP_UART)
46 { 46 {
47 //串口设备1初始化 47 //串口设备1初始化
48 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
49 - .BitRate = UART_DEV1_BITRATE,  
50 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 48 + T_JZsdk_UartInfo UartInfo = {
  49 + .Base.PortId = UART_DEV_1,
  50 + .DevicePath = UART_DEV1_NUM,
  51 + .Baudrate = UART_DEV1_BITRATE,
  52 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
51 }; 53 };
  54 + JZsdk_HalUartInit(&UartInfo);
52 55
53 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo);  
54 } 56 }
55 57
  58 +
56 if (mode == APP_PSDK) 59 if (mode == APP_PSDK)
57 { 60 {
58 //外接传输模块,用于与飞机的数据通信 61 //外接传输模块,用于与飞机的数据通信
@@ -60,11 +63,13 @@ T_JZsdkReturnCode JZ_h1t_init(int mode) @@ -60,11 +63,13 @@ T_JZsdkReturnCode JZ_h1t_init(int mode)
60 } 63 }
61 64
62 //4g设备初始化 65 //4g设备初始化
63 - s_JZ_SerialPortHalRegInfo Serial_4G_Info = {  
64 - .BitRate = COMM_4G_UART_BITRATE,  
65 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 66 + T_JZsdk_UartInfo Uart4GInfo = {
  67 + .Base.PortId = UART_4G,
  68 + .DevicePath = COMM_4G_UART_NUM,
  69 + .Baudrate = COMM_4G_UART_BITRATE,
  70 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
66 }; 71 };
67 - JZsdk_HalPort_Init(UART_4G, (void *)&Serial_4G_Info); 72 + JZsdk_HalUartInit(&Uart4GInfo);
68 73
69 //音频库初始化 74 //音频库初始化
70 AudioDeal_Init(); 75 AudioDeal_Init();
@@ -19,6 +19,8 @@ @@ -19,6 +19,8 @@
19 #include "UI_control/Psdk_ui_value_menu.h" 19 #include "UI_control/Psdk_ui_value_menu.h"
20 #include "UI_control/UI_control.h" 20 #include "UI_control/UI_control.h"
21 21
  22 +#include "../../ParamterParsing.h"
  23 +
22 static int LeftDeviceId = 0; //t40专用分别左右id,用于判断是不是强激光 24 static int LeftDeviceId = 0; //t40专用分别左右id,用于判断是不是强激光
23 static int RightDeviceId = 0; 25 static int RightDeviceId = 0;
24 static int DeviceType = 0; //两边装的设备类型 26 static int DeviceType = 0; //两边装的设备类型
@@ -39,6 +41,15 @@ void *JZ_T40_SubConnectTask(void *arg) @@ -39,6 +41,15 @@ void *JZ_T40_SubConnectTask(void *arg)
39 41
40 static int DelayTime = 0; //最多尝试连接设备30s 42 static int DelayTime = 0; //最多尝试连接设备30s
41 43
  44 + T_JZsdkHalHandle* HalHandle = JZsdk_Platform_GetHalHandle();
  45 + if (HalHandle == NULL)
  46 + {
  47 + JZSDK_LOG_ERROR("无法正常获取hal权柄");
  48 + return;
  49 + }
  50 +
  51 + T_JZsdk_HalInfo HalInfo = { 0 };
  52 +
42 while ( 53 while (
43 (RightGimbalConnectFlag == JZ_FLAGCODE_OFF || 54 (RightGimbalConnectFlag == JZ_FLAGCODE_OFF ||
44 LeftGimbalConnectFlag == JZ_FLAGCODE_OFF || 55 LeftGimbalConnectFlag == JZ_FLAGCODE_OFF ||
@@ -46,40 +57,47 @@ void *JZ_T40_SubConnectTask(void *arg) @@ -46,40 +57,47 @@ void *JZ_T40_SubConnectTask(void *arg)
46 LeftDeviceConnectFlag == JZ_FLAGCODE_OFF ) && 57 LeftDeviceConnectFlag == JZ_FLAGCODE_OFF ) &&
47 DelayTime <= 20000) 58 DelayTime <= 20000)
48 { 59 {
49 - s_JZsdk_Hal_Info *HalInfo = JZsdk_Hal_GetHalInfo(); 60 + HalHandle->GetHalInfo(&HalInfo);
50 61
51 - //遍历hal信息  
52 - for (int i = 0; i < HalInfo->HalPort[UART_DEV_2].SubNum; i++) 62 + for (int i = 0; i < HalInfo.UartNum; i++)
  63 + {
  64 + if (HalInfo.UartInfo[i].Base.PortId == UART_DEV_2)
53 { 65 {
54 - if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c11) 66 + for (int j = 0; j < HalInfo.UartInfo[i].Base.HalStatus.SubNum; j++)
  67 + {
  68 + if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c11)
55 { 69 {
56 LeftGimbalConnectFlag = JZ_FLAGCODE_ON; 70 LeftGimbalConnectFlag = JZ_FLAGCODE_ON;
57 continue; 71 continue;
58 } 72 }
59 73
60 - if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c12) 74 + if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c12)
61 { 75 {
62 RightGimbalConnectFlag = JZ_FLAGCODE_ON; 76 RightGimbalConnectFlag = JZ_FLAGCODE_ON;
63 continue; 77 continue;
64 } 78 }
65 79
66 - if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c21  
67 - || HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c31) 80 + if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c21 ||
  81 + HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c31)
68 { 82 {
69 - LeftDeviceId = HalInfo->HalPort[UART_DEV_2].SubId[i]; 83 + LeftDeviceId = HalInfo.UartInfo[i].Base.HalStatus.SubId[j];
70 LeftDeviceConnectFlag = JZ_FLAGCODE_ON; 84 LeftDeviceConnectFlag = JZ_FLAGCODE_ON;
71 continue; 85 continue;
72 } 86 }
73 87
74 - if(HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c22  
75 - || HalInfo->HalPort[UART_DEV_2].SubId[i] == 0x1c32) 88 + if (HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c22 ||
  89 + HalInfo.UartInfo[i].Base.HalStatus.SubId[j] == 0x1c32)
76 { 90 {
77 - RightDeviceId = HalInfo->HalPort[UART_DEV_2].SubId[i]; 91 + RightDeviceId = HalInfo.UartInfo[i].Base.HalStatus.SubId[j];
78 RightDeviceConnectFlag = JZ_FLAGCODE_ON; 92 RightDeviceConnectFlag = JZ_FLAGCODE_ON;
79 continue; 93 continue;
80 } 94 }
81 } 95 }
82 96
  97 + break;
  98 + }
  99 + }
  100 +
83 //左云台未连接 101 //左云台未连接
84 if (LeftGimbalConnectFlag == JZ_FLAGCODE_OFF) 102 if (LeftGimbalConnectFlag == JZ_FLAGCODE_OFF)
85 { 103 {
@@ -127,7 +145,7 @@ void *JZ_T40_SubConnectTask(void *arg) @@ -127,7 +145,7 @@ void *JZ_T40_SubConnectTask(void *arg)
127 } 145 }
128 146
129 //右激光未连接 147 //右激光未连接
130 - if (LeftDeviceConnectFlag == JZ_FLAGCODE_OFF) 148 + if (RightDeviceConnectFlag == JZ_FLAGCODE_OFF)
131 { 149 {
132 //向左探照灯发送连接指令 150 //向左探照灯发送连接指令
133 HalSend_type1Send_ConnectFrame(UART_DEV_2, 0x32); 151 HalSend_type1Send_ConnectFrame(UART_DEV_2, 0x32);
@@ -325,7 +343,6 @@ void *JZ_T40_CheckLightTemperatureTask(void *arg) @@ -325,7 +343,6 @@ void *JZ_T40_CheckLightTemperatureTask(void *arg)
325 HalSend_type1Send_CheckStatus_SearchLight_Temperture(UART_DEV_2, 0x21); 343 HalSend_type1Send_CheckStatus_SearchLight_Temperture(UART_DEV_2, 0x21);
326 } 344 }
327 345
328 -  
329 delayMs(10); 346 delayMs(10);
330 347
331 //检查右灯温度 348 //检查右灯温度
@@ -579,13 +596,15 @@ T_JZsdkReturnCode JZ_T40_init_JZ(int mode) @@ -579,13 +596,15 @@ T_JZsdkReturnCode JZ_T40_init_JZ(int mode)
579 596
580 if (mode == APP_UART) 597 if (mode == APP_UART)
581 { 598 {
582 - //串口设备1初始化  
583 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
584 - .BitRate = UART_DEV1_BITRATE,  
585 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 599 + T_JZsdk_UartInfo UartInfo = {
  600 + .Base.PortId = UART_DEV_1,
  601 + .DevicePath = UART_DEV1_NUM,
  602 + .Baudrate = UART_DEV1_BITRATE,
  603 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
586 }; 604 };
587 605
588 - JZsdk_HalPort_Init(UART_DEV_1, (void*)&SerialInfo); 606 + //串口设备1初始化
  607 + JZsdk_HalUartInit(&UartInfo);
589 } 608 }
590 609
591 if (mode == APP_PSDK) 610 if (mode == APP_PSDK)
@@ -595,20 +614,26 @@ T_JZsdkReturnCode JZ_T40_init_JZ(int mode) @@ -595,20 +614,26 @@ T_JZsdkReturnCode JZ_T40_init_JZ(int mode)
595 } 614 }
596 615
597 //串口设备2初始化 616 //串口设备2初始化
598 - s_JZ_SerialPortHalRegInfo SerialInfo2 = {  
599 - .BitRate = UART_DEV2_BITRATE,  
600 - .ConnectType = PORT_CONNECT_TYPE_AS_MAIN, 617 + T_JZsdk_UartInfo Uart2Info = {
  618 + .Base.PortId = UART_DEV_2,
  619 + .DevicePath = UART_DEV2_NUM,
  620 + .Baudrate = UART_DEV2_BITRATE,
  621 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_MAIN,
601 }; 622 };
  623 + JZsdk_HalUartInit(&Uart2Info);
602 624
603 - JZsdk_HalPort_Init(UART_DEV_2, (void*)&SerialInfo2);  
604 625
605 #if DEVICE_VERSION == JZ_T40S 626 #if DEVICE_VERSION == JZ_T40S
  627 +
606 //4G初始化 628 //4G初始化
607 - s_JZ_SerialPortHalRegInfo SerialInfo3 = {  
608 - .BitRate = COMM_4G_UART_BITRATE,  
609 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB, 629 + T_JZsdk_UartInfo Uart4GInfo = {
  630 + .Base.PortId = UART_4G,
  631 + .DevicePath = COMM_4G_UART_NUM,
  632 + .Baudrate = COMM_4G_UART_BITRATE,
  633 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
610 }; 634 };
611 - JZsdk_HalPort_Init(UART_4G, (void*)&SerialInfo3); 635 + JZsdk_HalUartInit(&Uart4GInfo);
  636 +
612 #endif 637 #endif
613 638
614 //子设备连接 639 //子设备连接
@@ -718,31 +743,37 @@ T_JZsdkReturnCode JZ_T40_init_DT(int mode) @@ -718,31 +743,37 @@ T_JZsdkReturnCode JZ_T40_init_DT(int mode)
718 if (mode == APP_UART) 743 if (mode == APP_UART)
719 { 744 {
720 //串口设备1初始化 745 //串口设备1初始化
721 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
722 - .BitRate = UART_DEV1_BITRATE,  
723 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 746 + T_JZsdk_UartInfo UartInfo = {
  747 + .Base.PortId = UART_DEV_1,
  748 + .DevicePath = UART_DEV1_NUM,
  749 + .Baudrate = UART_DEV1_BITRATE,
  750 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
724 }; 751 };
725 -  
726 - JZsdk_HalPort_Init(UART_DEV_1, (void*)&SerialInfo); 752 + JZsdk_HalUartInit(&UartInfo);
727 } 753 }
728 754
729 //串口设备2初始化 755 //串口设备2初始化
730 - s_JZ_SerialPortHalRegInfo SerialInfo2 = {  
731 - .BitRate = UART_DEV2_BITRATE,  
732 - .ConnectType = PORT_CONNECT_TYPE_AS_MAIN, 756 + T_JZsdk_UartInfo Uart2Info = {
  757 + .Base.PortId = UART_DEV_2,
  758 + .DevicePath = UART_DEV2_NUM,
  759 + .Baudrate = UART_DEV2_BITRATE,
  760 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_MAIN,
733 }; 761 };
734 -  
735 - JZsdk_HalPort_Init(UART_DEV_2, (void*)&SerialInfo2); 762 + JZsdk_HalUartInit(&Uart2Info);
736 763
737 //子设备连接 764 //子设备连接
738 JZ_T40_SubDevice_Init(); 765 JZ_T40_SubDevice_Init();
739 766
  767 +#if DEVICE_VERSION == JZ_T40S
  768 +
740 //音频库初始化 769 //音频库初始化
741 AudioDeal_Init(); 770 AudioDeal_Init();
742 771
743 //喊话器初始化 772 //喊话器初始化
744 Megaphone_Init(); 773 Megaphone_Init();
745 774
  775 +#endif
  776 +
746 //云台初始化 777 //云台初始化
747 Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); 778 Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
748 779
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -44,13 +44,15 @@ T_JZsdkReturnCode JZ_u3_init(int mode) @@ -44,13 +44,15 @@ T_JZsdkReturnCode JZ_u3_init(int mode)
44 44
45 if (mode == APP_UART) 45 if (mode == APP_UART)
46 { 46 {
47 - //串口设备1初始化  
48 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
49 - .BitRate = UART_DEV1_BITRATE,  
50 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 47 + T_JZsdk_UartInfo UartInfo = {
  48 + .Base.PortId = UART_DEV_1,
  49 + .DevicePath = UART_DEV1_NUM,
  50 + .Baudrate = UART_DEV1_BITRATE,
  51 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
51 }; 52 };
52 53
53 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 54 + //串口设备1初始化
  55 + JZsdk_HalUartInit(&UartInfo);
54 } 56 }
55 57
56 if (mode == APP_PSDK) 58 if (mode == APP_PSDK)
@@ -60,12 +62,14 @@ T_JZsdkReturnCode JZ_u3_init(int mode) @@ -60,12 +62,14 @@ T_JZsdkReturnCode JZ_u3_init(int mode)
60 } 62 }
61 63
62 //串口设备2初始化 64 //串口设备2初始化
63 - s_JZ_SerialPortHalRegInfo SerialInfo2 = {  
64 - .BitRate = UART_DEV2_BITRATE,  
65 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 65 + T_JZsdk_UartInfo Uart2Info = {
  66 + .Base.PortId = UART_DEV_2,
  67 + .DevicePath = UART_DEV2_NUM,
  68 + .Baudrate = UART_DEV2_BITRATE,
  69 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
66 }; 70 };
  71 + JZsdk_HalUartInit(&Uart2Info);
67 72
68 - JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);  
69 73
70 //音频库初始化 74 //音频库初始化
71 AudioDeal_Init(); 75 AudioDeal_Init();
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -31,16 +31,17 @@ T_JZsdkReturnCode JZ_u30_init(int mode) @@ -31,16 +31,17 @@ T_JZsdkReturnCode JZ_u30_init(int mode)
31 31
32 if (mode == APP_UART) 32 if (mode == APP_UART)
33 { 33 {
34 - //串口设备1初始化  
35 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
36 - .BitRate = UART_DEV1_BITRATE,  
37 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 34 + T_JZsdk_UartInfo UartInfo = {
  35 + .Base.PortId = UART_DEV_1,
  36 + .DevicePath = UART_DEV1_NUM,
  37 + .Baudrate = UART_DEV1_BITRATE,
  38 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
38 }; 39 };
39 40
40 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 41 + //串口设备1初始化
  42 + JZsdk_HalUartInit(&UartInfo);
41 } 43 }
42 44
43 -  
44 if (mode == APP_PSDK) 45 if (mode == APP_PSDK)
45 { 46 {
46 //外接传输模块,用于与飞机的数据通信 47 //外接传输模块,用于与飞机的数据通信
@@ -48,12 +49,13 @@ T_JZsdkReturnCode JZ_u30_init(int mode) @@ -48,12 +49,13 @@ T_JZsdkReturnCode JZ_u30_init(int mode)
48 } 49 }
49 50
50 //串口设备2初始化 51 //串口设备2初始化
51 - s_JZ_SerialPortHalRegInfo SerialInfo2 = {  
52 - .BitRate = UART_DEV2_BITRATE,  
53 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 52 + T_JZsdk_UartInfo Uart2Info = {
  53 + .Base.PortId = UART_DEV_2,
  54 + .DevicePath = UART_DEV2_NUM,
  55 + .Baudrate = UART_DEV2_BITRATE,
  56 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
54 }; 57 };
55 -  
56 - JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2); 58 + JZsdk_HalUartInit(&Uart2Info);
57 59
58 //音频库初始化 60 //音频库初始化
59 AudioDeal_Init(); 61 AudioDeal_Init();
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -30,13 +30,15 @@ T_JZsdkReturnCode JZ_u3d_init(int mode) @@ -30,13 +30,15 @@ T_JZsdkReturnCode JZ_u3d_init(int mode)
30 30
31 if (mode == APP_UART) 31 if (mode == APP_UART)
32 { 32 {
33 - //串口设备1初始化  
34 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
35 - .BitRate = UART_DEV1_BITRATE,  
36 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 33 + T_JZsdk_UartInfo UartInfo = {
  34 + .Base.PortId = UART_DEV_1,
  35 + .DevicePath = UART_DEV1_NUM,
  36 + .Baudrate = UART_DEV1_BITRATE,
  37 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
37 }; 38 };
38 39
39 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 40 + //串口设备1初始化
  41 + JZsdk_HalUartInit(&UartInfo);
40 } 42 }
41 43
42 if (mode == APP_PSDK) 44 if (mode == APP_PSDK)
@@ -46,12 +48,13 @@ T_JZsdkReturnCode JZ_u3d_init(int mode) @@ -46,12 +48,13 @@ T_JZsdkReturnCode JZ_u3d_init(int mode)
46 } 48 }
47 49
48 //串口设备2初始化 50 //串口设备2初始化
49 - s_JZ_SerialPortHalRegInfo SerialInfo2 = {  
50 - .BitRate = UART_DEV2_BITRATE,  
51 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 51 + T_JZsdk_UartInfo Uart2Info = {
  52 + .Base.PortId = UART_DEV_2,
  53 + .DevicePath = UART_DEV2_NUM,
  54 + .Baudrate = UART_DEV2_BITRATE,
  55 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
52 }; 56 };
53 -  
54 - JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2); 57 + JZsdk_HalUartInit(&Uart2Info);
55 58
56 //音频库初始化 59 //音频库初始化
57 AudioDeal_Init(); 60 AudioDeal_Init();
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -62,13 +62,15 @@ T_JZsdkReturnCode JZ_u3s_init(int mode) @@ -62,13 +62,15 @@ T_JZsdkReturnCode JZ_u3s_init(int mode)
62 62
63 if (mode == APP_UART) 63 if (mode == APP_UART)
64 { 64 {
65 - //串口设备1初始化  
66 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
67 - .BitRate = UART_DEV1_BITRATE,  
68 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 65 + T_JZsdk_UartInfo UartInfo = {
  66 + .Base.PortId = UART_DEV_1,
  67 + .DevicePath = UART_DEV1_NUM,
  68 + .Baudrate = UART_DEV1_BITRATE,
  69 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
69 }; 70 };
70 71
71 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 72 + //串口设备1初始化
  73 + JZsdk_HalUartInit(&UartInfo);
72 } 74 }
73 75
74 if (mode == APP_PSDK) 76 if (mode == APP_PSDK)
@@ -78,12 +80,13 @@ T_JZsdkReturnCode JZ_u3s_init(int mode) @@ -78,12 +80,13 @@ T_JZsdkReturnCode JZ_u3s_init(int mode)
78 } 80 }
79 81
80 //串口设备2初始化 82 //串口设备2初始化
81 - s_JZ_SerialPortHalRegInfo SerialInfo2 = {  
82 - .BitRate = UART_DEV2_BITRATE,  
83 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 83 + T_JZsdk_UartInfo Uart2Info = {
  84 + .Base.PortId = UART_DEV_2,
  85 + .DevicePath = UART_DEV2_NUM,
  86 + .Baudrate = UART_DEV2_BITRATE,
  87 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
84 }; 88 };
85 -  
86 - JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2); 89 + JZsdk_HalUartInit(&Uart2Info);
87 90
88 //音频库初始化 91 //音频库初始化
89 AudioDeal_Init(); 92 AudioDeal_Init();
1 -#include "JZsdkLib.h" 1 +#include "JZsdkLib.h"
2 #include "BaseConfig.h" 2 #include "BaseConfig.h"
3 #include <pthread.h> 3 #include <pthread.h>
4 4
@@ -29,16 +29,17 @@ T_JZsdkReturnCode TF_a1_init(int mode) @@ -29,16 +29,17 @@ T_JZsdkReturnCode TF_a1_init(int mode)
29 29
30 Ircut_Init(ircut_info); 30 Ircut_Init(ircut_info);
31 31
32 - //hal层初始化  
33 if (mode == APP_UART) 32 if (mode == APP_UART)
34 { 33 {
35 - //串口设备1初始化  
36 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
37 - .BitRate = UART_DEV1_BITRATE,  
38 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 34 + T_JZsdk_UartInfo UartInfo = {
  35 + .Base.PortId = UART_DEV_1,
  36 + .DevicePath = UART_DEV1_NUM,
  37 + .Baudrate = UART_DEV1_BITRATE,
  38 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
39 }; 39 };
40 40
41 - JZsdk_HalPort_Init(UART_DEV_1, (void *)&SerialInfo); 41 + //串口设备1初始化
  42 + JZsdk_HalUartInit(&UartInfo);
42 } 43 }
43 44
44 if (mode == APP_PSDK) 45 if (mode == APP_PSDK)
@@ -48,12 +49,13 @@ T_JZsdkReturnCode TF_a1_init(int mode) @@ -48,12 +49,13 @@ T_JZsdkReturnCode TF_a1_init(int mode)
48 } 49 }
49 50
50 //串口设备2初始化 51 //串口设备2初始化
51 - s_JZ_SerialPortHalRegInfo SerialInfo2 = {  
52 - .BitRate = UART_DEV2_BITRATE,  
53 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB 52 + T_JZsdk_UartInfo Uart2Info = {
  53 + .Base.PortId = UART_DEV_2,
  54 + .DevicePath = UART_DEV2_NUM,
  55 + .Baudrate = UART_DEV2_BITRATE,
  56 + .Base.HalStatus.ConnectType = PORT_CONNECT_TYPE_AS_SUB,
54 }; 57 };
55 -  
56 - JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2); 58 + JZsdk_HalUartInit(&Uart2Info);
57 59
58 //音频库初始化 60 //音频库初始化
59 AudioDeal_Init(); 61 AudioDeal_Init();
1 -#include <stdio.h> 1 +#include <stdio.h>
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <string.h> 3 #include <string.h>
4 #include <unistd.h> 4 #include <unistd.h>
@@ -36,6 +36,7 @@ typedef enum parameter{ @@ -36,6 +36,7 @@ typedef enum parameter{
36 PARAMETER_OUT_TIMEFLAG = 0x1010, //备用超时标志位 36 PARAMETER_OUT_TIMEFLAG = 0x1010, //备用超时标志位
37 PARAMETER_OUT_TIMEOUT = 0x1011, //备用超时时间 37 PARAMETER_OUT_TIMEOUT = 0x1011, //备用超时时间
38 PARAMETER_PLAY_PROMPT_TTS = 0x1012, //播放提示音 38 PARAMETER_PLAY_PROMPT_TTS = 0x1012, //播放提示音
  39 + PARAMETER_UART1 = 0x1013, //修改串口1
39 }parameter; 40 }parameter;
40 41
41 static const struct option storage_opts[] = { 42 static const struct option storage_opts[] = {
@@ -43,6 +44,7 @@ static const struct option storage_opts[] = { @@ -43,6 +44,7 @@ static const struct option storage_opts[] = {
43 { "OutTime", required_argument, 0, PARAMETER_OUT_TIMEOUT }, //超时时间 44 { "OutTime", required_argument, 0, PARAMETER_OUT_TIMEOUT }, //超时时间
44 45
45 { "play_prompt_tts", required_argument, NULL, PARAMETER_PLAY_PROMPT_TTS }, //提示选项 46 { "play_prompt_tts", required_argument, NULL, PARAMETER_PLAY_PROMPT_TTS }, //提示选项
  47 + { "uart1", required_argument, NULL, PARAMETER_UART1 }, //连接的串口1
46 { 0, 0, 0, 0 } 48 { 0, 0, 0, 0 }
47 }; 49 };
48 50
@@ -50,6 +52,7 @@ static const struct option storage_opts[] = { @@ -50,6 +52,7 @@ static const struct option storage_opts[] = {
50 static int Timeout_flag = JZ_FLAGCODE_OFF; //超时标记位,默认关闭 52 static int Timeout_flag = JZ_FLAGCODE_OFF; //超时标记位,默认关闭
51 static int Timeout_time = 60; //超时时间 53 static int Timeout_time = 60; //超时时间
52 unsigned char *g_JZsdkParam_PlayPromptTTS = NULL; //播放提示音 54 unsigned char *g_JZsdkParam_PlayPromptTTS = NULL; //播放提示音
  55 +static char* g_extern_uart1_device = NULL; //额外输入的串口1
53 56
54 int JZsdk_ParamterParsing_GetTimeOutFlag() 57 int JZsdk_ParamterParsing_GetTimeOutFlag()
55 { 58 {
@@ -61,6 +64,12 @@ int JZsdk_ParamterParsing_GetTimeOutTime() @@ -61,6 +64,12 @@ int JZsdk_ParamterParsing_GetTimeOutTime()
61 return Timeout_time; 64 return Timeout_time;
62 } 65 }
63 66
  67 +// getter 函数
  68 +const char* JZsdk_ParamterParsing_GetUart1Device(void)
  69 +{
  70 + return g_extern_uart1_device;
  71 +}
  72 +
64 /************************************* 73 /*************************************
65 * 74 *
66 * * 程序参数解析 75 * * 程序参数解析
@@ -105,6 +114,12 @@ T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mo @@ -105,6 +114,12 @@ T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mo
105 *mode = 1; 114 *mode = 1;
106 break; 115 break;
107 116
  117 + //uart1选项
  118 + case PARAMETER_UART1:
  119 + printf("uart1 device: %s\n", optarg);
  120 + g_extern_uart1_device = optarg;
  121 + break;
  122 +
108 case 'f': //超时标记位 123 case 'f': //超时标记位
109 Timeout_flag = atoi(optarg); 124 Timeout_flag = atoi(optarg);
110 break; 125 break;
1 -/** 1 +/**
2 ******************************************************************** 2 ********************************************************************
3 * @file ParamterParsing.h 3 * @file ParamterParsing.h
4 * 用于文件系统操作 4 * 用于文件系统操作
@@ -27,6 +27,7 @@ extern "C" { @@ -27,6 +27,7 @@ extern "C" {
27 T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mode); 27 T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mode);
28 int JZsdk_ParamterParsing_GetTimeOutFlag(); 28 int JZsdk_ParamterParsing_GetTimeOutFlag();
29 int JZsdk_ParamterParsing_GetTimeOutTime(); 29 int JZsdk_ParamterParsing_GetTimeOutTime();
  30 +const char* JZsdk_ParamterParsing_GetUart1Device(void);
30 31
31 #ifdef __cplusplus 32 #ifdef __cplusplus
32 } 33 }
1 -/* ********************************************************************  
2 -*  
3 -* 用于确认对应设备的选择  
4 -*  
5 -***********************************************/  
6 -#ifndef VERSION_CHOOSE_H  
7 -#define VERSION_CHOOSE_H  
8 -#include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"  
9 -//1~10行 除了D可以修改版本选择 禁止动任何东西  
10 -#define DEVICE_VERSION JZ_T40  
11 -  
12 -//禁止修改行 选择是串口程序 还是 psdk程序  
13 -#define APP_VERSION APP_PSDK  
14 -  
15 -//禁止修改行 板子型号  
16 -#define PLATFORM_VERSION PLATFORM_V3S  
17 -  
18 -//禁止修改行 串口连接程序的软件版本号  
19 -#define MAJOR_VERSION_TEN_POSITION 0  
20 -#define MAJOR_VERSION_ONE_POSITION 0  
1 -/* ******************************************************************** 1 +/* ********************************************************************
2 * 2 *
3 * 用于确认对应设备的选择 3 * 用于确认对应设备的选择
4 * 4 *
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 #define VERSION_CHOOSE_H 7 #define VERSION_CHOOSE_H
8 #include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h" 8 #include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"
9 //1~10行 除了D可以修改版本选择 禁止动任何东西 9 //1~10行 除了D可以修改版本选择 禁止动任何东西
10 -#define DEVICE_VERSION JZ_T40S 10 +#define DEVICE_VERSION JZ_H150A
11 11
12 //禁止修改行 选择是串口程序 还是 psdk程序 12 //禁止修改行 选择是串口程序 还是 psdk程序
13 #define APP_VERSION APP_PSDK 13 #define APP_VERSION APP_PSDK
@@ -17,18 +17,18 @@ @@ -17,18 +17,18 @@
17 17
18 //禁止修改行 串口连接程序的软件版本号 18 //禁止修改行 串口连接程序的软件版本号
19 #define MAJOR_VERSION_TEN_POSITION 0 19 #define MAJOR_VERSION_TEN_POSITION 0
20 -#define MAJOR_VERSION_ONE_POSITION 0 20 +#define MAJOR_VERSION_ONE_POSITION 1
21 #define MINOR_VERSION_TEN_POSITION 0 21 #define MINOR_VERSION_TEN_POSITION 0
22 -#define MINOR_VERSION_ONE_POSITION 0  
23 -#define MODIFY_VERSION_TEN_POSITION 0  
24 -#define MODIFY_VERSION_ONE_POSITION 2  
25 -#define DEBUG_VERSION_TEN_POSITION 2  
26 -#define DEBUG_VERSION_ONE_POSITION 7 22 +#define MINOR_VERSION_ONE_POSITION 3
  23 +#define MODIFY_VERSION_TEN_POSITION 1
  24 +#define MODIFY_VERSION_ONE_POSITION 5
  25 +#define DEBUG_VERSION_TEN_POSITION 0
  26 +#define DEBUG_VERSION_ONE_POSITION 2
27 27
28 #define FIRMWARE_ORIGIN DOMESTIC_VERSION 28 #define FIRMWARE_ORIGIN DOMESTIC_VERSION
29 29
30 //禁止修改行31 特殊版本号 30 //禁止修改行31 特殊版本号
31 -#define SPECIAL_VERSION SPECIAL_DAOTONG 31 +#define SPECIAL_VERSION SPECIAL_NORMAL
32 32
33 //版本号 33 //版本号
34 #define MAJOR_VERSION (MAJOR_VERSION_TEN_POSITION*10+MAJOR_VERSION_ONE_POSITION) 34 #define MAJOR_VERSION (MAJOR_VERSION_TEN_POSITION*10+MAJOR_VERSION_ONE_POSITION)
@@ -199,4 +199,3 @@ @@ -199,4 +199,3 @@
199 199
200 200
201 #endif 201 #endif
202 -  
@@ -88,11 +88,34 @@ static T_JZsdkReturnCode RecvDeal_AskForConnect(int Port, char *getbuf) @@ -88,11 +88,34 @@ static T_JZsdkReturnCode RecvDeal_AskForConnect(int Port, char *getbuf)
88 if (Port == UART_DEV_1) 88 if (Port == UART_DEV_1)
89 { 89 {
90 Main_WorkModeSet(JZ_FLAGCODE_ON); 90 Main_WorkModeSet(JZ_FLAGCODE_ON);
  91 +
  92 + //设置
  93 + JZsdk_Hal_config_use_uart1(3);
91 } 94 }
92 95
93 //5、打开连接状态 96 //5、打开连接状态
94 - s_JZsdk_Hal_Info *HalInfo = JZsdk_Hal_GetHalInfo();  
95 - HalInfo->HalPort[Port].ConnectStatus = JZ_FLAGCODE_ON; 97 +
  98 + // 通过 HAL 句柄安全地修改连接状态
  99 + T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
  100 + if (handle == NULL)
  101 + {
  102 + JZSDK_LOG_ERROR("HAL 未初始化");
  103 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  104 + }
  105 +
  106 + handle->lock(handle);
  107 + T_JZsdk_PortBase* halBase = JZsdk_FindPortBase(Port);
  108 + if (halBase != NULL)
  109 + {
  110 + halBase->HalStatus.ConnectStatus = JZ_FLAGCODE_ON;
  111 + }
  112 + else
  113 + {
  114 + handle->unlock(handle);
  115 + JZSDK_LOG_ERROR("端口 %d 未找到", Port);
  116 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  117 + }
  118 + handle->unlock(handle);
96 119
97 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 120 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
98 } 121 }
@@ -101,41 +124,83 @@ static T_JZsdkReturnCode RecvDeal_AskForConnect(int Port, char *getbuf) @@ -101,41 +124,83 @@ static T_JZsdkReturnCode RecvDeal_AskForConnect(int Port, char *getbuf)
101 * 124 *
102 * 心跳帧通知 125 * 心跳帧通知
103 * 126 *
104 -**********/  
105 -static T_JZsdkReturnCode RecvDeal_HeartBeat(int Port, char *getbuf) 127 + **********/
  128 +static T_JZsdkReturnCode RecvDeal_HeartBeat(int Port, char* getbuf)
106 { 129 {
107 - JZSDK_LOG_INFO("%s,recvHBF",JZsdk_DefineCode_GetPortName(Port)); 130 + JZSDK_LOG_INFO("%s, recvHBF", JZsdk_DefineCode_GetPortName(Port));
108 131
109 - //获取帧的序列号  
110 int FrameSequence = JZsdk_Get_FrameSequence(getbuf); 132 int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
  133 + int mode = getbuf[9]; // 假设模式在第9字节
111 134
112 - //1、获取连接情况  
113 - s_JZsdk_Hal_Info *halInfo = JZsdk_Hal_GetHalInfo(); 135 + T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
  136 + if (handle == NULL)
  137 + {
  138 + JZSDK_LOG_ERROR("HAL 未初始化");
  139 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  140 + }
  141 +
  142 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
114 143
115 - //分析模式  
116 - int mode = getbuf[9];  
117 if (mode == 0x00) 144 if (mode == 0x00)
118 { 145 {
119 - //2、回复心跳帧  
120 - HalSend_type1Send_Send_HeartBeatStatus(Port, FrameSequence, halInfo->HalPort[Port].ConnectStatus); 146 + int connectStatus = JZ_FLAGCODE_OFF; // 默认值
  147 + handle->lock(handle);
  148 + T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(Port);
  149 +
  150 + if (portBase != NULL)
  151 + {
  152 + connectStatus = portBase->HalStatus.ConnectStatus;
  153 + }
  154 + else {
  155 + JZSDK_LOG_ERROR("端口 %d 未找到", Port);
  156 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  157 + }
  158 +
  159 + handle->unlock(handle);
  160 +
  161 + if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  162 + {
  163 + // 使用复制的 connectStatus 发送心跳状态
  164 + HalSend_type1Send_Send_HeartBeatStatus(Port, FrameSequence, connectStatus);
  165 + }
121 } 166 }
122 else if (mode == 0x01 || mode == 0x02) 167 else if (mode == 0x01 || mode == 0x02)
123 { 168 {
124 - if(mode == 0x01) 169 +
  170 + handle->lock(handle);
  171 + T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(Port);
  172 +
  173 + if (portBase != NULL)
  174 + {
  175 + if (mode == 0x01)
125 { 176 {
126 - halInfo->HalPort[Port].HeartBeatStatusSend = JZ_FLAGCODE_ON; 177 + portBase->HalStatus.HeartBeatStatusSend = JZ_FLAGCODE_ON;
127 } 178 }
128 - else if (mode == 0x02) 179 + else if(mode == 0x02)
129 { 180 {
130 - halInfo->HalPort[Port].HeartBeatStatusSend = JZ_FLAGCODE_OFF; 181 + portBase->HalStatus.HeartBeatStatusSend = JZ_FLAGCODE_OFF;
131 } 182 }
  183 + handle->unlock(handle);
132 184
133 HalSend_type1Send_Reply_Success(Port, FrameSequence); 185 HalSend_type1Send_Reply_Success(Port, FrameSequence);
134 } 186 }
  187 + else
  188 + {
  189 + handle->unlock(handle);
  190 + JZSDK_LOG_ERROR("端口 %d 未找到", Port);
  191 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  192 + }
  193 + }
  194 + else
  195 + {
  196 + JZSDK_LOG_WARN("未知心跳模式: 0x%02x", mode);
  197 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  198 + }
135 199
136 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 200 + return ret;
137 } 201 }
138 202
  203 +
139 /********* 204 /*********
140 * 205 *
141 * 获取所有版本号 206 * 获取所有版本号
@@ -4279,68 +4344,77 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_WarningLightMode2(int Port, char * @@ -4279,68 +4344,77 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_WarningLightMode2(int Port, char *
4279 ********* ********| 4344 ********* ********|
4280 ********* ********| 4345 ********* ********|
4281 *********************************************************************************************************/ 4346 *********************************************************************************************************/
4282 -/******************************************************************************************************************************* 4347 +/*********
4283 * 4348 *
4284 - * 设备相关 4349 + * 作为主设备,收到连接回复帧(从设备回复连接)
4285 * 4350 *
4286 - * *******************************************************************************************************************************/  
4287 -static T_JZsdkReturnCode RecvDeal_ObtainConnectFrame(int Port, char *getbuf) 4351 + **********/
  4352 +static T_JZsdkReturnCode RecvDeal_ObtainConnectFrame(int Port, char* getbuf)
4288 { 4353 {
4289 T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 4354 T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
4290 4355
4291 - JZSDK_LOG_INFO("%s,收到连接回复帧",JZsdk_DefineCode_GetPortName(Port)); 4356 + JZSDK_LOG_INFO("%s,收到连接回复帧", JZsdk_DefineCode_GetPortName(Port));
4292 4357
4293 - //获取帧的序列号 4358 + // 获取帧的序列号
4294 int FrameSequence = JZsdk_Get_FrameSequence(getbuf); 4359 int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
4295 4360
4296 - //获取设备id  
4297 - //计算ID长度  
4298 - int FrameLenth = JZsdk_Get_FrameLength(getbuf);  
4299 - int IDLength = FrameLenth - 11; 4361 + // 计算设备ID长度
  4362 + int FrameLength = JZsdk_Get_FrameLength(getbuf);
  4363 + int IDLength = FrameLength - 11; // 假设协议头固定11字节
4300 4364
4301 - //获取ID 4365 + // 解析设备ID(移位累加)
4302 int DeviceID = 0; 4366 int DeviceID = 0;
4303 -  
4304 - //将ID转换为int  
4305 for (int i = 0; i < IDLength; i++) 4367 for (int i = 0; i < IDLength; i++)
4306 { 4368 {
4307 - DeviceID = DeviceID + (getbuf[9 + i] << (8 * (IDLength - i - 1))); 4369 + DeviceID = (DeviceID << 8) | (getbuf[9 + i] & 0xFF);
4308 } 4370 }
4309 4371
4310 JZSDK_LOG_INFO("收到连接回复帧, 设备ID: %d", DeviceID); 4372 JZSDK_LOG_INFO("收到连接回复帧, 设备ID: %d", DeviceID);
4311 4373
4312 - //将ID放入Hal信息  
4313 - s_JZsdk_Hal_Info *halInfo = JZsdk_Hal_GetHalInfo();  
4314 - if (halInfo == NULL) 4374 + // 获取HAL句柄
  4375 + T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
  4376 + if (handle == NULL)
  4377 + {
  4378 + JZSDK_LOG_ERROR("HAL 未初始化");
  4379 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  4380 + }
  4381 +
  4382 + handle->lock(handle);
  4383 +
  4384 + // 查找端口基类
  4385 + T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(Port);
  4386 + if (portBase == NULL)
4315 { 4387 {
4316 - JZSDK_LOG_ERROR("获取Hal信息失败"); 4388 + handle->unlock(handle);
  4389 + JZSDK_LOG_ERROR("端口 %d 未找到", Port);
4317 return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; 4390 return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
4318 } 4391 }
4319 4392
4320 - //遍历ID表  
4321 - for (int i = 0; i < halInfo->HalPort[Port].SubNum ; i++) 4393 + // 检查设备ID是否已存在
  4394 + for (int i = 0; i < portBase->HalStatus.SubNum; i++)
4322 { 4395 {
4323 - if (halInfo->HalPort[Port].SubId[i] == DeviceID) 4396 + if (portBase->HalStatus.SubId[i] == DeviceID)
4324 { 4397 {
4325 - JZSDK_LOG_INFO("已拥有设备ID: %d", DeviceID); 4398 + JZSDK_LOG_INFO("设备ID %d 已存在", DeviceID);
  4399 + handle->unlock(handle);
4326 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 4400 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
4327 } 4401 }
4328 } 4402 }
4329 4403
4330 - //添加ID  
4331 - if (halInfo->HalPort[Port].SubNum >= JZ_MAX_SUB_ID_NUM)  
4332 - {  
4333 - JZSDK_LOG_INFO("设备ID表已满");  
4334 - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;  
4335 - }  
4336 - else 4404 + // 检查数组是否已满
  4405 + if (portBase->HalStatus.SubNum >= JZ_MAX_SUB_ID_NUM)
4337 { 4406 {
4338 - JZSDK_LOG_INFO("添加设备ID: %d", DeviceID); 4407 + JZSDK_LOG_ERROR("设备ID表已满,无法添加新ID");
  4408 + handle->unlock(handle);
  4409 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
4339 } 4410 }
4340 4411
4341 - halInfo->HalPort[Port].SubId[halInfo->HalPort[Port].SubNum] = DeviceID;  
4342 - halInfo->HalPort[Port].SubNum++; 4412 + // 添加新设备ID
  4413 + portBase->HalStatus.SubId[portBase->HalStatus.SubNum] = DeviceID;
  4414 + portBase->HalStatus.SubNum++;
  4415 + JZSDK_LOG_INFO("添加设备ID 0x%x 成功,当前从设备数量: %d", DeviceID, portBase->HalStatus.SubNum);
4343 4416
  4417 + handle->unlock(handle);
4344 return ret; 4418 return ret;
4345 } 4419 }
4346 4420
@@ -5070,13 +5144,9 @@ static void *UartReinit_thread(void *arg) @@ -5070,13 +5144,9 @@ static void *UartReinit_thread(void *arg)
5070 int *arg_value = (int *)arg; 5144 int *arg_value = (int *)arg;
5071 5145
5072 int Port = arg_value[0]; 5146 int Port = arg_value[0];
  5147 + int BitRate = arg_value[1];
5073 5148
5074 - s_JZ_SerialPortHalRegInfo SerialInfo = {  
5075 - .BitRate = arg_value[1],  
5076 - .ConnectType = PORT_CONNECT_TYPE_AS_SUB  
5077 - };  
5078 -  
5079 - JZsdk_HalPort_ReInit(Port, (void *)&SerialInfo); 5149 + JZsdk_HalUartReInit(Port, BitRate);
5080 5150
5081 JZSDK_LOG_INFO("串口重置完毕"); 5151 JZSDK_LOG_INFO("串口重置完毕");
5082 5152
  1 +#include "JZsdkLib.h"
  2 +#include <string.h> // 确保包含头文件
  3 +
  4 +#include "./JZsdk_Hal.h"
  5 +#include "BaseConfig.h"
  6 +
  7 +#define JZSDK_HAL_CONFIG_FILE "/root/sdcard/config.ini"
  8 +
  9 +/**
  10 + * 读取INI配置文件中的指定键值对
  11 + * @param config_file 配置文件路径
  12 + * @param section 配置段名称
  13 + * @param key 键名称
  14 + * @return 成功返回动态分配的字符串(需调用者 free),失败返回 NULL
  15 + */
  16 +char* JZsdk_HalConfig_Read(const char* config_file, const char* section, const char* key) {
  17 + FILE* fp = fopen(config_file, "r");
  18 + if (!fp) return NULL;
  19 +
  20 + char line[1024];
  21 + char section_buf[256];
  22 + int in_target_section = 0;
  23 + char* result = NULL;
  24 +
  25 + while (fgets(line, sizeof(line), fp)) {
  26 + // 去除行尾换行符
  27 + size_t len = strlen(line);
  28 + while (len > 0 && (line[len - 1] == '\n' || line[len - 1] == '\r')) {
  29 + line[--len] = '\0';
  30 + }
  31 +
  32 + if (line[0] == '[') {
  33 + if (sscanf(line, "[%[^]]]", section_buf) == 1) {
  34 + // 去除空格
  35 + char* start = section_buf;
  36 + char* end = section_buf + strlen(section_buf) - 1;
  37 + while (start <= end && (*start == ' ' || *start == '\t')) start++;
  38 + while (end >= start && (*end == ' ' || *end == '\t')) end--;
  39 + if (start <= end) {
  40 + *(end + 1) = '\0';
  41 + in_target_section = (strcmp(start, section) == 0);
  42 + }
  43 + }
  44 + continue;
  45 + }
  46 +
  47 + if (in_target_section) {
  48 + char current_key[256], current_value[256];
  49 + if (sscanf(line, "%[^=]=%[^\n]", current_key, current_value) == 2) {
  50 + // 去除key两端空格
  51 + char* k_start = current_key;
  52 + char* k_end = current_key + strlen(current_key) - 1;
  53 + while (k_start <= k_end && (*k_start == ' ' || *k_start == '\t')) k_start++;
  54 + while (k_end >= k_start && (*k_end == ' ' || *k_end == '\t')) k_end--;
  55 + if (k_start <= k_end) {
  56 + *(k_end + 1) = '\0';
  57 + if (strcmp(k_start, key) == 0) {
  58 + // 去除value两端空格和行尾注释
  59 + char* v_start = current_value;
  60 + char* v_end = current_value + strlen(current_value) - 1;
  61 + while (v_start <= v_end && (*v_start == ' ' || *v_start == '\t')) v_start++;
  62 + while (v_end >= v_start) {
  63 + if (*v_end == ' ' || *v_end == '\t' || *v_end == '#') {
  64 + v_end--;
  65 + }
  66 + else {
  67 + break;
  68 + }
  69 + }
  70 + if (v_start <= v_end) {
  71 + size_t val_len = v_end - v_start + 1;
  72 + result = (char*)malloc(val_len + 1);
  73 + if (result) {
  74 + strncpy(result, v_start, val_len);
  75 + result[val_len] = '\0';
  76 + }
  77 + }
  78 + break;
  79 + }
  80 + }
  81 + }
  82 + }
  83 + }
  84 + fclose(fp);
  85 + return result;
  86 +}
  87 +
  88 +/**
  89 + * 修改INI配置文件中的指定键值对
  90 + * @param config_file 配置文件路径
  91 + * @param section 配置段名称(如 "APP_RUN_TYPE")
  92 + * @param key 键名称(如 "appmode")
  93 + * @param new_value 新的值(字符串形式)
  94 + * @return 0成功,-1失败
  95 + */
  96 +T_JZsdkReturnCode JZsdk_HalConfig_Write(const char* config_file, const char* section,
  97 + const char* key, const char* new_value)
  98 +{
  99 + FILE* fp, * fp_temp;
  100 + char temp_file[512];
  101 + char line[1024];
  102 + char section_buf[256];
  103 + int in_target_section = 0;
  104 + int key_found = 0;
  105 + int ret = 0;
  106 +
  107 + // 参数检查
  108 + if (!config_file || !section || !key || !new_value) {
  109 + printf("错误:参数不能为空\n");
  110 + return -1;
  111 + }
  112 +
  113 + // 检查原文件是否存在
  114 + fp = fopen(config_file, "r");
  115 + if (!fp) {
  116 + JZSDK_LOG_ERROR("错误:无法打开配置文件 %s\n", config_file);
  117 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  118 + }
  119 +
  120 + // 创建临时文件
  121 + snprintf(temp_file, sizeof(temp_file), "%s.tmp", config_file);
  122 + fp_temp = fopen(temp_file, "w");
  123 + if (!fp_temp) {
  124 + JZSDK_LOG_ERROR("错误:无法创建临时文件\n");
  125 + fclose(fp);
  126 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  127 + }
  128 +
  129 + // 逐行读取原文件并处理
  130 + while (fgets(line, sizeof(line), fp)) {
  131 + // 去除行尾的换行符(保留用于写入)
  132 + size_t len = strlen(line);
  133 + if (len > 0 && (line[len - 1] == '\n' || line[len - 1] == '\r')) {
  134 + line[len - 1] = '\0';
  135 + len--;
  136 + }
  137 + if (len > 0 && line[len - 1] == '\r') {
  138 + line[len - 1] = '\0';
  139 + }
  140 +
  141 + // 检查是否是section行
  142 + if (line[0] == '[') {
  143 + // 解析section名称
  144 + if (sscanf(line, "[%[^]]]", section_buf) == 1) {
  145 + // 去除section名称两端的空格
  146 + char* start = section_buf;
  147 + char* end = section_buf + strlen(section_buf) - 1;
  148 + while (start <= end && (*start == ' ' || *start == '\t')) start++;
  149 + while (end >= start && (*end == ' ' || *end == '\t')) end--;
  150 + if (start <= end) {
  151 + *(end + 1) = '\0';
  152 + // 判断是否是目标section
  153 + if (strcmp(start, section) == 0) {
  154 + in_target_section = 1;
  155 + printf("进入目标段: [%s]\n", section);
  156 + }
  157 + else {
  158 + in_target_section = 0;
  159 + }
  160 + }
  161 + }
  162 + // 写入原section行
  163 + fprintf(fp_temp, "%s\n", line);
  164 + continue;
  165 + }
  166 +
  167 + // 如果在目标section内,查找key
  168 + if (in_target_section && !key_found) {
  169 + char current_key[256];
  170 + char current_value[256];
  171 +
  172 + // 尝试解析key=value格式
  173 + if (sscanf(line, "%[^=]=%[^\n]", current_key, current_value) == 2) {
  174 + // 去除key两端的空格
  175 + char* key_start = current_key;
  176 + char* key_end = current_key + strlen(current_key) - 1;
  177 + while (key_start <= key_end && (*key_start == ' ' || *key_start == '\t')) key_start++;
  178 + while (key_end >= key_start && (*key_end == ' ' || *key_end == '\t')) key_end--;
  179 + if (key_start <= key_end) {
  180 + *(key_end + 1) = '\0';
  181 +
  182 + // 检查是否是目标key
  183 + if (strcmp(key_start, key) == 0) {
  184 + printf("找到目标键: %s,原值: %s,修改为新值: %s\n",
  185 + key, current_value, new_value);
  186 +
  187 + // 保留原行的缩进和格式
  188 + // 找到等号的位置
  189 + char* eq_pos = strchr(line, '=');
  190 + if (eq_pos) {
  191 + // 计算等号前的部分(包括空格)
  192 + int prefix_len = eq_pos - line + 1;
  193 + // 写入key部分(保持原格式)
  194 + fprintf(fp_temp, "%.*s%s\n", prefix_len, line, new_value);
  195 + }
  196 + else {
  197 + // 如果找不到等号(不应该发生),简单写入
  198 + fprintf(fp_temp, "%s=%s\n", key, new_value);
  199 + }
  200 + key_found = 1;
  201 + continue;
  202 + }
  203 + }
  204 + }
  205 + }
  206 +
  207 + // 如果不是目标key,写入原行
  208 + fprintf(fp_temp, "%s\n", line);
  209 + }
  210 +
  211 + // 如果在目标section内没有找到目标key,则在section末尾添加
  212 + if (in_target_section && !key_found) {
  213 + printf("未找到键 %s,在段末添加: %s=%s\n", key, key, new_value);
  214 + fprintf(fp_temp, "%s=%s\n", key, new_value);
  215 + }
  216 +
  217 + // 关闭文件
  218 + fclose(fp);
  219 + fclose(fp_temp);
  220 +
  221 + // 用临时文件替换原文件
  222 + if (remove(config_file) != 0) {
  223 + printf("警告:无法删除原文件 %s\n", config_file);
  224 + ret = -1;
  225 + }
  226 +
  227 + if (rename(temp_file, config_file) != 0) {
  228 + printf("错误:无法重命名临时文件为 %s\n", config_file);
  229 + ret = -1;
  230 + }
  231 +
  232 + if (ret == 0) {
  233 + printf("成功修改配置文件: %s\n", config_file);
  234 + }
  235 +
  236 + return ret;
  237 +}
  238 +
  239 +
  240 +T_JZsdkReturnCode JZsdk_Hal_config_use_uart1(int num)
  241 +{
  242 +// const char* config_file = JZSDK_HAL_CONFIG_FILE;
  243 +// const char* target_value = NULL;
  244 +// char* current_value = NULL;
  245 +// int need_write = 0;
  246 +//
  247 +// // 确定目标值
  248 +// if (num == 0) {
  249 +// target_value = "0";
  250 +// }
  251 +// else if (num == 1) {
  252 +// target_value = "1";
  253 +// }
  254 +// else if (num == 3) {
  255 +//#if DEVICE_VERSION == JZ_H150A
  256 +// T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
  257 +// if (handle != NULL) {
  258 +// T_JZsdk_HalInfo HalInfo;
  259 +// handle->GetHalInfo(&HalInfo);
  260 +// for (int i = 0; i < HalInfo.UartNum; i++) {
  261 +// if (strcmp(HalInfo.UartInfo[i].DevicePath, "/dev/ttyS2") == 0) {
  262 +// target_value = "0";
  263 +// break;
  264 +// }
  265 +// else if (strcmp(HalInfo.UartInfo[i].DevicePath, "/dev/ttyGS0") == 0) {
  266 +// target_value = "1";
  267 +// break;
  268 +// }
  269 +// }
  270 +// }
  271 +//#endif
  272 +// if (!target_value) {
  273 +// JZSDK_LOG_ERROR("无法确定目标设备类型");
  274 +// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  275 +// }
  276 +// }
  277 +// else {
  278 +// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 其他num不处理
  279 +// }
  280 +//
  281 +// // 读取当前配置值
  282 +// current_value = JZsdk_HalConfig_Read(config_file, "UART1", "device");
  283 +// if (current_value) {
  284 +// if (strcmp(current_value, target_value) != 0) {
  285 +// need_write = 1;
  286 +// }
  287 +// free(current_value);
  288 +// }
  289 +// else {
  290 +// // 读取失败(如文件不存在或键不存在),需要写入
  291 +// need_write = 1;
  292 +// }
  293 +//
  294 +// if (need_write) {
  295 +// if (JZsdk_HalConfig_Write(config_file, "UART1", "device", target_value) == 0) {
  296 +// JZSDK_LOG_INFO("成功修改device为 %s\n", target_value);
  297 +// }
  298 +// else {
  299 +// JZSDK_LOG_ERROR("修改device失败");
  300 +// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  301 +// }
  302 +// }
  303 +// else {
  304 +// JZSDK_LOG_INFO("device已经是 %s,无需修改\n", target_value);
  305 +// }
  306 +
  307 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  308 +}
  309 +
  310 +T_JZsdkReturnCode JZsdk_HalConfigInit()
  311 +{
  312 +
  313 +
  314 +
  315 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  316 +}
  317 +
  318 +
  1 +#include "JZsdkLib.h"
1 #include <stdio.h> 2 #include <stdio.h>
2 -  
3 -#include "JZsdkLib.h"  
4 -#include "Hal_Recv/HalRecv.h"  
5 -#include "Hal_Send/HalSend.h" 3 +#include <string.h>
  4 +#include <stdlib.h>
  5 +#include <pthread.h>
6 #include "JZsdk_Hal.h" 6 #include "JZsdk_Hal.h"
7 -#include "BaseConfig.h"  
8 7
9 #include "JZsdk_uart/JZsdk_Uart.h" 8 #include "JZsdk_uart/JZsdk_Uart.h"
10 9
11 -static s_JZsdk_Hal_Info *g_HalInfo = NULL; 10 +// 静态全局变量:HAL 信息指针和句柄指针
  11 +static T_JZsdk_HalInfo* g_pHalInfo = NULL;
  12 +static T_JZsdkHalHandle* g_HalHandle = NULL;
  13 +
  14 +// 用于保护初始化的临时锁(仅用于 JZsdk_HalInit 和 JZsdk_HalDeinit)
  15 +static pthread_mutex_t g_initMutex = PTHREAD_MUTEX_INITIALIZER;
  16 +
12 17
13 -s_JZsdk_Hal_Info *JZsdk_Hal_GetHalInfo() 18 +/* 默认锁函数实现(使用 pthread) */
  19 +static T_JZsdkReturnCode default_lock(T_JZsdkHalHandle* handle)
14 { 20 {
15 - return g_HalInfo; 21 + pthread_mutex_lock((pthread_mutex_t*)handle->lockCtx);
  22 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
16 } 23 }
17 24
18 -T_JZsdkReturnCode JZsdk_Hal_Init() 25 +static T_JZsdkReturnCode default_unlock(T_JZsdkHalHandle* handle)
19 { 26 {
20 - T_JZsdkOsalHandler *pOsalHandler = JZsdk_Platform_GetOsalHandler(); 27 + pthread_mutex_unlock((pthread_mutex_t*)handle->lockCtx);
  28 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  29 +}
  30 +
  31 +/***************
  32 +*
  33 +* 查询设备是否被引用
  34 +*
  35 +***********/
  36 +static int JZsdk_Hal_PortIsUsed(int PortId)
  37 +{
  38 + // 检查句柄和数据是否已初始化
  39 + if (g_HalHandle == NULL || g_pHalInfo == NULL)
  40 + {
  41 + JZSDK_LOG_ERROR("HAL 未初始化,请先调用 JZsdk_HalInit");
  42 + return JZ_FLAGCODE_OFF;
  43 + }
21 44
22 - if (g_HalInfo == NULL) 45 + // 加锁
  46 + g_HalHandle->lock(g_HalHandle);
  47 +
  48 + int used = JZ_FLAGCODE_OFF;
  49 + for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++) {
  50 + if (g_pHalInfo->HaveUsePortId[i] == PortId) {
  51 + used = JZ_FLAGCODE_ON;
  52 + break;
  53 + }
  54 + }
  55 +
  56 + g_HalHandle->unlock(g_HalHandle);
  57 +
  58 + return used;
  59 +}
  60 +
  61 +/***************
  62 +*
  63 +* 获取结构体以获取信息
  64 +*
  65 +***********/
  66 +static T_JZsdkReturnCode JZsdk_Get_HalInfo(T_JZsdk_HalInfo* pHalInfo)
  67 +{
  68 + if (g_HalHandle == NULL || g_pHalInfo == NULL)
  69 + {
  70 + JZSDK_LOG_ERROR("获取hal信息失败:HAL未初始化");
  71 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  72 + }
  73 + if (pHalInfo == NULL)
23 { 74 {
24 - g_HalInfo = pOsalHandler->Malloc(sizeof(s_JZsdk_Hal_Info)); 75 + JZSDK_LOG_ERROR("无效参数:pHalInfo 为空");
  76 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
25 } 77 }
26 78
27 - //将结构体信息清空  
28 - memset(g_HalInfo, 0, sizeof(s_JZsdk_Hal_Info)); 79 + g_HalHandle->lock(g_HalHandle);
  80 + memcpy(pHalInfo, g_pHalInfo, sizeof(T_JZsdk_HalInfo));
  81 + g_HalHandle->unlock(g_HalHandle);
  82 +
  83 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  84 +}
  85 +
  86 +
  87 +
  88 +/**
  89 +*
  90 + * @brief 上层UART端口注册与管理
  91 + * @param pUartInfo 指向UART配置信息的指针
  92 + * @return 成功返回JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS,失败返回相应错误码
  93 + *
  94 + */
  95 +T_JZsdkReturnCode JZsdk_HalUartInit(T_JZsdk_UartInfo* pUartInfo)
  96 +{
  97 + if (pUartInfo == NULL)
  98 + {
  99 + JZSDK_LOG_ERROR("无效参数:pUartInfo 为空");
  100 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  101 + }
29 102
30 - //PSDK系列初始化  
31 - for (int i = DEVICE_PSDK; i < UART_4G; i++) 103 + // 检查句柄和数据是否已初始化
  104 + if (g_HalHandle == NULL || g_pHalInfo == NULL)
32 { 105 {
33 - g_HalInfo->HalPort[i].PortType = PORT_TYPE_PSDK; 106 + JZSDK_LOG_ERROR("HAL 未初始化,请先调用 JZsdk_HalInit");
  107 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
34 } 108 }
35 109
36 - //UART系列初始化  
37 - for (int i = UART_4G; i < USB_DEV_1; i++) 110 + g_HalHandle->lock(g_HalHandle);
  111 +
  112 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  113 +
  114 + // 1. 检查端口ID是否已经存在
  115 + for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++)
  116 + {
  117 + if (pUartInfo->Base.PortId == g_pHalInfo->HaveUsePortId[i])
38 { 118 {
39 - g_HalInfo->HalPort[i].PortType = PORT_TYPE_UART; 119 + JZSDK_LOG_INFO("端口 0x%x 已经初始化过", pUartInfo->Base.PortId);
  120 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  121 + goto unlock;
  122 + }
40 } 123 }
41 124
42 - //USB系列初始化  
43 - for (int i = USB_DEV_1; i < NET_DEV_1; i++) 125 + // 2. 检查全局端口表是否已满
  126 + if (g_pHalInfo->HaveUsePortNum >= JZ_MAX_PORT_NUM)
44 { 127 {
45 - g_HalInfo->HalPort[i].PortType = PORT_TYPE_USB; 128 + JZSDK_LOG_ERROR("全局端口表已满(最多 %d 个)", JZ_MAX_PORT_NUM);
  129 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  130 + goto unlock;
46 } 131 }
47 132
48 - //网口系列初始化  
49 - for (int i = NET_DEV_1; i < HAL_DATA_TRANSMISSION; i++) 133 + // 3. 检查UART端口数量是否已达上限
  134 + if (g_pHalInfo->UartNum >= JZ_MAX_UART_NUM)
50 { 135 {
51 - g_HalInfo->HalPort[i].PortType = PORT_TYPE_NET; 136 + JZSDK_LOG_ERROR("没有可用的UART槽位(最多 %d 个)", JZ_MAX_UART_NUM);
  137 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  138 + goto unlock;
52 } 139 }
53 140
54 - //特殊数据层  
55 - for (int i = HAL_DATA_TRANSMISSION; i < HAL_MAX; i++) 141 + // 4. 调用底层硬件初始化
  142 + if (JZsdk_UartInit(pUartInfo) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
56 { 143 {
57 - g_HalInfo->HalPort[i].PortType = PORT_TYPE_TRANS_DATA; 144 + JZSDK_LOG_ERROR("UART硬件初始化失败,端口 0x%x", pUartInfo->Base.PortId);
  145 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  146 + goto unlock;
58 } 147 }
59 148
60 - JZSDK_LOG_INFO("JZsdk_Hal_Init Success"); 149 + // 5. 保存UART信息到UART数组(使用UartNum作为索引)
  150 + int uartIndex = g_pHalInfo->UartNum;
  151 + memcpy(&g_pHalInfo->UartInfo[uartIndex], pUartInfo, sizeof(T_JZsdk_UartInfo));
  152 + g_pHalInfo->UartNum++;
61 153
62 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 154 + // 6. 记录端口ID到全局已使用表
  155 + g_pHalInfo->HaveUsePortId[g_pHalInfo->HaveUsePortNum] = pUartInfo->Base.PortId;
  156 + g_pHalInfo->HaveUsePortNum++;
  157 +
  158 + JZSDK_LOG_INFO("UART端口 0x%x 初始化成功", pUartInfo->Base.PortId);
  159 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  160 +
  161 +unlock:
  162 + g_HalHandle->unlock(g_HalHandle);
  163 + return ret;
63 } 164 }
64 165
65 166
66 -/************** 167 +/**
  168 +*
  169 + * uart重初始化的专用指针
67 * 170 *
68 - * jzsdk 获取hal的端口使用标志位  
69 * 171 *
70 - * *********************/  
71 -int JZsdk_HalPort_UseFlag(int PortName) 172 + */
  173 +T_JZsdkReturnCode JZsdk_HalUartReInit(int PortId, int NewBitRate)
72 { 174 {
73 - if(g_HalInfo == NULL) 175 + //获取id信息
  176 + T_JZsdkHalHandle* HalHandle = JZsdk_Platform_GetHalHandle();
  177 + if (HalHandle == NULL)
74 { 178 {
75 - return JZ_FLAGCODE_OFF; 179 + JZSDK_LOG_ERROR("注册错误,hal未初始化");
  180 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
76 } 181 }
77 182
78 - return g_HalInfo->HalPort[PortName].UseFlag;  
79 -} 183 + //检查该id是否已被注册
  184 + if (HalHandle->PortIsUsed(PortId) == JZ_FLAGCODE_OFF)
  185 + {
  186 + JZSDK_LOG_ERROR("当前串口未被初始化");
  187 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  188 + }
80 189
81 -T_JZsdkReturnCode JZsdk_HalPort_SetUseFlag(int PortName,int UseFlag)  
82 -{  
83 - g_HalInfo->HalPort[PortName].UseFlag = UseFlag; 190 + // 获取当前 HAL 信息(需要加锁,但 GetHalInfo 内部已经加锁)
  191 + T_JZsdk_HalInfo halInfo = { 0 };
  192 + T_JZsdkReturnCode ret = HalHandle->GetHalInfo(&halInfo);
  193 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  194 + {
  195 + return ret;
  196 + }
84 197
85 - //将端口添加到已使用端口列表中 或从端口中移除  
86 198
87 - //如果是要添加进列表中  
88 - if (UseFlag == JZ_FLAGCODE_ON) 199 + // 查找对应 UART 信息
  200 + int i = 0;
  201 + for (; i < halInfo.UartNum; i++)
89 { 202 {
90 - //先检查列表中是否已经存在  
91 - for (int i = 0; i < g_HalInfo->HaveUsePortNum; i++)  
92 - {  
93 - if (g_HalInfo->HaveUsePort[i] == PortName)  
94 - {  
95 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 203 + if (halInfo.UartInfo[i].Base.PortId == PortId) {
  204 + break;
96 } 205 }
97 } 206 }
98 -  
99 - //如果不存在,则添加  
100 - g_HalInfo->HaveUsePort[g_HalInfo->HaveUsePortNum] = PortName;  
101 - g_HalInfo->HaveUsePortNum++;  
102 - g_HalInfo->HalPort[PortName].UseFlag = JZ_FLAGCODE_ON; 207 + if (i >= halInfo.UartNum)
  208 + {
  209 + JZSDK_LOG_ERROR("重初始化失败,未检测到串口信息");
  210 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
103 } 211 }
104 212
105 - //如果是要从列表中移除  
106 - else if (UseFlag == JZ_FLAGCODE_OFF)  
107 - {  
108 - //先检查列表中是否已经存在  
109 - for (int i = 0; i < g_HalInfo->HaveUsePortNum; i++)  
110 - {  
111 - if (g_HalInfo->HaveUsePort[i] == PortName) 213 + // 修改波特率
  214 + T_JZsdk_UartInfo uartInfo = halInfo.UartInfo[i];
  215 + uartInfo.Baudrate = NewBitRate;
  216 +
  217 + //重初始化
  218 + if (JZsdk_UartReinit(&uartInfo, PortId) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
112 { 219 {
113 - g_HalInfo->HaveUsePort[i] = g_HalInfo->HaveUsePort[g_HalInfo->HaveUsePortNum - 1];  
114 - g_HalInfo->HaveUsePortNum--;  
115 - g_HalInfo->HalPort[PortName].UseFlag = JZ_FLAGCODE_OFF;  
116 - g_HalInfo->HalPort[PortName].ConnectStatus = JZ_FLAGCODE_OFF;  
117 - g_HalInfo->HalPort[PortName].HeartBeatStatusSend = JZ_FLAGCODE_OFF; 220 + JZSDK_LOG_ERROR("串口重初始化失败");
118 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 221 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
119 } 222 }
  223 +
  224 + // 更新全局信息(需要加锁)
  225 + HalHandle->lock(HalHandle);
  226 + // 再次查找(可能期间发生变化),确保索引有效
  227 + int j = 0;
  228 + for (; j < g_pHalInfo->UartNum; j++)
  229 + {
  230 + if (g_pHalInfo->UartInfo[j].Base.PortId == PortId) {
  231 + memcpy(&g_pHalInfo->UartInfo[j], &uartInfo, sizeof(T_JZsdk_UartInfo));
  232 + break;
  233 + }
120 } 234 }
121 235
122 - //如果本来就不存在,则直接返回  
123 - JZSDK_LOG_INFO("hal口:%s,本来就未使用,无需移除", JZsdk_DefineCode_GetPortName(PortName));  
124 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 236 + HalHandle->unlock(HalHandle);
  237 +
  238 + if (j >= g_pHalInfo->UartNum) {
  239 + JZSDK_LOG_ERROR("更新失败,端口在查找过程中被移除");
  240 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
125 } 241 }
126 242
  243 + JZSDK_LOG_INFO("UART端口 0x%x 重初始化成功", PortId);
127 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 244 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
128 } 245 }
129 246
130 -//用于给初始化函数调用  
131 -static T_JZsdkReturnCode JZsdK_HalPort_Init_Info(int PortName, int UseFlag  
132 - , int ConnectStatus, int HeartBeatStatusSend, int PortType, int ConnectType)  
133 -{  
134 - g_HalInfo->HalPort[PortName].UseFlag = UseFlag;  
135 - g_HalInfo->HalPort[PortName].ConnectStatus = ConnectStatus;  
136 - g_HalInfo->HalPort[PortName].HeartBeatStatusSend = HeartBeatStatusSend;  
137 - g_HalInfo->HalPort[PortName].PortType = PortType;  
138 - g_HalInfo->HalPort[PortName].ConnectType = ConnectType;  
139 247
140 - //记录端口  
141 - JZsdk_HalPort_SetUseFlag(PortName, JZ_FLAGCODE_ON);  
142 248
143 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
144 -}  
145 249
146 -/**********************  
147 - *  
148 - * hal端口 初始化函数  
149 - * psdk初始化 value为NULL  
150 - * uart初始化 value[0]为波特率  
151 - *  
152 - * ******************/  
153 -T_JZsdkReturnCode JZsdk_HalPort_Init(int PortName, void *Value) 250 +
  251 +T_JZsdkReturnCode JZsdk_HalDirectDataInit(T_JZsdk_DirectDataInfo* pDirectDataInfo)
154 { 252 {
155 - T_JZsdkReturnCode ret; 253 + if (pDirectDataInfo == NULL)
  254 + {
  255 + JZSDK_LOG_ERROR("无效参数:pDirectDataInfo 为空");
  256 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  257 + }
156 258
157 - //psdk初始化  
158 - if (PortName >= DEVICE_PSDK && PortName < UART_4G) 259 + if (g_HalHandle == NULL || g_pHalInfo == NULL)
159 { 260 {
160 - JZsdK_HalPort_Init_Info(PortName,  
161 - JZ_FLAGCODE_ON,  
162 - JZ_FLAGCODE_OFF,  
163 - JZ_FLAGCODE_OFF,  
164 - PORT_TYPE_PSDK,  
165 - PORT_CONNECT_TYPE_AS_SUB); 261 + JZSDK_LOG_ERROR("HAL 未初始化,请先调用 JZsdk_HalInit");
  262 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  263 + }
166 264
167 - JZSDK_LOG_INFO("hal%s 初始化",JZsdk_DefineCode_GetPortName(PortName)); 265 + g_HalHandle->lock(g_HalHandle);
168 266
169 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 267 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  268 +
  269 + // 1. 检查端口ID是否已经存在
  270 + for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++)
  271 + {
  272 + if (pDirectDataInfo->Base.PortId == g_pHalInfo->HaveUsePortId[i])
  273 + {
  274 + JZSDK_LOG_INFO("端口 0x%x 已经初始化过", pDirectDataInfo->Base.PortId);
  275 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  276 + goto unlock;
  277 + }
170 } 278 }
171 279
172 - //uart初始化  
173 - if (PortName >= UART_4G && PortName < USB_DEV_1) 280 + // 2. 检查全局端口表是否已满
  281 + if (g_pHalInfo->HaveUsePortNum >= JZ_MAX_PORT_NUM)
174 { 282 {
175 - JZSDK_LOG_INFO("hal%s 初始化",JZsdk_DefineCode_GetPortName(PortName)); 283 + JZSDK_LOG_ERROR("全局端口表已满(最多 %d 个)", JZ_MAX_PORT_NUM);
  284 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  285 + goto unlock;
  286 + }
176 287
177 - if (Value == NULL) 288 + // 3. 检查UART端口数量是否已达上限
  289 + if (g_pHalInfo->DirectNum >= JZ_MAX_DIRECT_NUM)
178 { 290 {
179 - JZSDK_LOG_ERROR("hal%s 初始化失败,Value为NULL",JZsdk_DefineCode_GetPortName(PortName));  
180 - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 291 + JZSDK_LOG_ERROR("没有可用的DIRECT槽位(最多 %d 个)", JZ_MAX_DIRECT_NUM);
  292 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  293 + goto unlock;
181 } 294 }
182 295
183 - s_JZ_SerialPortHalRegInfo *PortInfo = (s_JZ_SerialPortHalRegInfo *)Value; 296 + // 4 初始化直通
  297 + //(只是把id打开)
184 298
185 - int BitRate = PortInfo->BitRate;  
186 - int ConnectType = PortInfo->ConnectType; 299 + // 5. 保存UART信息到UART数组(使用UartNum作为索引)
  300 + int Index = g_pHalInfo->DirectNum;
  301 + memcpy(&g_pHalInfo->DirectDataInfo[Index], pDirectDataInfo, sizeof(T_JZsdk_UartInfo));
  302 + g_pHalInfo->UartNum++;
187 303
188 - ret = JZsdk_Uart_ReInit(PortName, BitRate);  
189 - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)  
190 - {  
191 - JZSDK_LOG_ERROR("hal%s 初始化失败",JZsdk_DefineCode_GetPortName(PortName)); 304 + // 6. 记录端口ID到全局已使用表
  305 + g_pHalInfo->HaveUsePortId[g_pHalInfo->HaveUsePortNum] = g_pHalInfo->DirectDataInfo->Base.PortId;
  306 + g_pHalInfo->HaveUsePortNum++;
  307 +
  308 + JZSDK_LOG_INFO("DIRECT端口 0x%x 初始化成功", pDirectDataInfo->Base.PortId);
  309 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  310 +
  311 +unlock:
  312 + g_HalHandle->unlock(g_HalHandle);
192 return ret; 313 return ret;
  314 +}
  315 +
  316 +
  317 +
  318 +
  319 +
  320 +
  321 +
  322 +
  323 +
  324 +
  325 +
  326 +
  327 +
  328 +
  329 +
  330 +
  331 +
  332 +
  333 +
  334 +
  335 +
  336 +
  337 +
  338 +
  339 +
  340 +//hal的基类指针,用于快速修改或者找到某个数据
  341 +T_JZsdk_PortBase* JZsdk_FindPortBase(int PortId)
  342 +{
  343 + if (g_pHalInfo == NULL) return NULL;
  344 +
  345 + // 遍历 UART
  346 + for (int i = 0; i < g_pHalInfo->UartNum; i++) {
  347 + if (g_pHalInfo->UartInfo[i].Base.PortId == PortId) {
  348 + return &g_pHalInfo->UartInfo[i].Base;
  349 + }
  350 + }
  351 + // 遍历 USB
  352 + for (int i = 0; i < g_pHalInfo->UsbNum; i++) {
  353 + if (g_pHalInfo->UsbInfo[i].Base.PortId == PortId) {
  354 + return &g_pHalInfo->UsbInfo[i].Base;
  355 + }
  356 + }
  357 + // 遍历 NET
  358 + for (int i = 0; i < g_pHalInfo->NetNum; i++) {
  359 + if (g_pHalInfo->NetInfo[i].Base.PortId == PortId) {
  360 + return &g_pHalInfo->NetInfo[i].Base;
193 } 361 }
  362 + }
  363 + // 遍历 DIRECT
  364 + for (int i = 0; i < g_pHalInfo->DirectNum; i++) {
  365 + if (g_pHalInfo->DirectDataInfo[i].Base.PortId == PortId) {
  366 + return &g_pHalInfo->DirectDataInfo[i].Base;
  367 + }
  368 + }
  369 + return NULL;
  370 +}
194 371
195 - JZsdK_HalPort_Init_Info(PortName, JZ_FLAGCODE_ON, JZ_FLAGCODE_OFF, JZ_FLAGCODE_OFF, PORT_TYPE_UART, ConnectType);  
196 372
  373 +T_JZsdkHalHandle* JZsdk_Platform_GetHalHandle(void)
  374 +{
  375 + return g_HalHandle; // 返回已注册的 OSAL 处理器
  376 +}
  377 +
  378 +
  379 +
  380 +/**
  381 + * HAL 初始化(动态分配内存)
  382 + */
  383 +T_JZsdkReturnCode JZsdk_HalInit(void)
  384 +{
  385 + // 使用单独的初始化锁保护
  386 + pthread_mutex_lock(&g_initMutex);
  387 +
  388 + if (g_pHalInfo != NULL || g_HalHandle != NULL)
  389 + {
  390 + JZSDK_LOG_WARN("HAL 已经初始化过");
  391 + pthread_mutex_unlock(&g_initMutex);
197 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 392 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
198 } 393 }
199 394
200 - //usb初始化  
201 - if (PortName >= USB_DEV_1 && PortName < NET_DEV_1) 395 + // 1. 分配 HAL 信息内存
  396 + T_JZsdk_HalInfo* halInfo = (T_JZsdk_HalInfo*)malloc(sizeof(T_JZsdk_HalInfo));
  397 + if (halInfo == NULL)
202 { 398 {
203 - //还没做 399 + JZSDK_LOG_ERROR("分配 HAL 信息内存失败");
  400 + pthread_mutex_unlock(&g_initMutex);
  401 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
204 } 402 }
  403 + memset(halInfo, 0, sizeof(T_JZsdk_HalInfo));
205 404
206 - //net初始化  
207 - if (PortName >= NET_DEV_1 && PortName < HAL_DATA_TRANSMISSION) 405 + // 2. 分配句柄内存
  406 + T_JZsdkHalHandle* handle = (T_JZsdkHalHandle*)malloc(sizeof(T_JZsdkHalHandle));
  407 + if (handle == NULL)
208 { 408 {
209 - //还没做 409 + JZSDK_LOG_ERROR("分配 HAL 句柄内存失败");
  410 + free(halInfo);
  411 + pthread_mutex_unlock(&g_initMutex);
  412 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
210 } 413 }
211 414
212 - //数据传输初始化  
213 - if (PortName == HAL_DATA_TRANSMISSION) 415 + // 3. 分配锁对象(使用 pthread_mutex_t)
  416 + pthread_mutex_t* mutex = (pthread_mutex_t*)malloc(sizeof(pthread_mutex_t));
  417 + if (mutex == NULL)
214 { 418 {
215 - JZsdK_HalPort_Init_Info(PortName, JZ_FLAGCODE_ON, JZ_FLAGCODE_OFF, JZ_FLAGCODE_OFF, PORT_TYPE_TRANS_DATA, PORT_CONNECT_TYPE_AS_SUB); 419 + JZSDK_LOG_ERROR("分配锁内存失败");
  420 + free(handle);
  421 + free(halInfo);
  422 + pthread_mutex_unlock(&g_initMutex);
  423 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  424 + }
  425 + pthread_mutex_init(mutex, NULL);
216 426
217 - JZSDK_LOG_INFO("hal%s 初始化",JZsdk_DefineCode_GetPortName(PortName)); 427 + // 4. 填充句柄
  428 + handle->lockCtx = mutex;
  429 + handle->lock = default_lock;
  430 + handle->unlock = default_unlock;
  431 + handle->PortIsUsed = JZsdk_Hal_PortIsUsed;
  432 + handle->GetHalInfo = JZsdk_Get_HalInfo;
  433 +
  434 + // 5. 赋值给全局变量
  435 + g_pHalInfo = halInfo;
  436 + g_HalHandle = handle;
  437 +
  438 + pthread_mutex_unlock(&g_initMutex);
  439 +
  440 + JZSDK_LOG_INFO("JZSDK HAL INIT SUCCESS");
  441 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  442 +}
  443 +
  444 +/**
  445 + * HAL 去初始化(释放内存)
  446 + */
  447 +T_JZsdkReturnCode JZsdk_HalDeinit(void)
  448 +{
  449 + pthread_mutex_lock(&g_initMutex);
  450 +
  451 + if (g_HalHandle != NULL) {
  452 + // 销毁锁
  453 + pthread_mutex_t* mutex = (pthread_mutex_t*)g_HalHandle->lockCtx;
  454 + if (mutex) {
  455 + pthread_mutex_destroy(mutex);
  456 + free(mutex);
  457 + }
  458 + free(g_HalHandle);
  459 + g_HalHandle = NULL;
  460 + }
  461 + if (g_pHalInfo != NULL) {
  462 + free(g_pHalInfo);
  463 + g_pHalInfo = NULL;
218 } 464 }
219 465
  466 + pthread_mutex_unlock(&g_initMutex);
  467 + JZSDK_LOG_INFO("JZSDK HAL 去初始化成功");
220 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 468 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
221 } 469 }
222 470
223 471
224 -/************************ 472 +
  473 +
  474 +
  475 +
  476 +
  477 +
  478 +
  479 +
  480 +
  481 +
  482 +
  483 +
  484 +
  485 +//temp
  486 +/**************
225 * 487 *
226 - * HalRort Reinit  
227 - * 专门用于已经初始化完毕端口  
228 - * 与init的区别是, Reinit 是要调用多线程来重初始化的 488 + * jzsdk 获取hal的端口使用标志位
229 * 489 *
230 - * ***************************/  
231 -T_JZsdkReturnCode JZsdk_HalPort_ReInit(int PortName, void *Value) 490 + * *********************/
  491 +int JZsdk_HalPort_UseFlag(int PortName)
232 { 492 {
233 - return JZsdk_HalPort_Init(PortName, Value); 493 + for (int i = 0; i < g_pHalInfo->HaveUsePortNum; i++)
  494 + {
  495 + if (g_pHalInfo->HaveUsePortId[i] == PortName)
  496 + {
  497 + return JZ_FLAGCODE_ON;
  498 + }
  499 + }
  500 +
  501 + return JZ_FLAGCODE_OFF;
234 } 502 }
1 -/** 1 +/**
2 ******************************************************************** 2 ********************************************************************
3 * @file JZsdk_Hal.h 3 * @file JZsdk_Hal.h
4 * JZsdk_Hal.c 的头文件 4 * JZsdk_Hal.c 的头文件
@@ -26,6 +26,11 @@ extern "C" { @@ -26,6 +26,11 @@ extern "C" {
26 /* 常亮定义*/ 26 /* 常亮定义*/
27 27
28 #define JZ_MAX_SUB_ID_NUM 10 28 #define JZ_MAX_SUB_ID_NUM 10
  29 +#define JZ_MAX_PORT_NUM 64
  30 +#define JZ_MAX_UART_NUM 8
  31 +#define JZ_MAX_USB_NUM 4
  32 +#define JZ_MAX_NET_NUM 4
  33 +#define JZ_MAX_DIRECT_NUM 1
29 34
30 typedef enum E_HAL_PORT_TYPE 35 typedef enum E_HAL_PORT_TYPE
31 { 36 {
@@ -47,59 +52,120 @@ typedef enum E_HAL_CONNECT_TYPE @@ -47,59 +52,120 @@ typedef enum E_HAL_CONNECT_TYPE
47 52
48 /****************** 53 /******************
49 * 54 *
50 - * hal使用状态 55 + * 端口使用状态
51 * 56 *
52 * ********/ 57 * ********/
53 -typedef struct s_JZ_SerialPortHalRegInfo 58 +typedef struct T_JZsdk_HalStatus
54 { 59 {
55 - int BitRate; //波特率  
56 - E_HAL_CONNECT_TYPE ConnectType; //连接类型  
57 -}s_JZ_SerialPortHalRegInfo; 60 + int PortType; // hal的端口类型
  61 + int ConnectType; // 主副设备类型
58 62
  63 + // 作为主设备专有
  64 + int SubId[JZ_MAX_SUB_ID_NUM]; // 副设备ID
  65 + int SubNum; // 副设备数量
59 66
60 -/******************  
61 - *  
62 - * hal使用状态  
63 - *  
64 - *  
65 - *  
66 - * ********/  
67 -typedef struct s_JZsdk_HalStatus 67 + // 作为副设备专有
  68 + int HeartBeatStatusSend; // 对主设备发送心跳帧的发送开关
  69 + int ConnectStatus; // 连接状态,接收过连接帧后打开
  70 +
  71 +}T_JZsdk_HalStatus;
  72 +
  73 +typedef struct {
  74 + T_JZsdk_HalStatus HalStatus;
  75 + int PortId;
  76 +}T_JZsdk_PortBase;
  77 +
  78 +typedef struct T_JZsdk_UartInfo
  79 +{
  80 + T_JZsdk_PortBase Base;
  81 +
  82 + // 独有参数
  83 + char DevicePath[64]; // 设备路径
  84 + int Baudrate; // 波特率
  85 + int UartId; // uart编号
  86 +}T_JZsdk_UartInfo;
  87 +
  88 +typedef struct T_JZsdk_UsbInfo
68 { 89 {
69 - int UseFlag; //hal使用标志位 //初始化时开关关闭  
70 - int PortType; //hal的端口类型  
71 - int ConnectType;//主副设备类型 90 + T_JZsdk_PortBase Base;
72 91
73 -//作为主设备专有  
74 - int SubId[JZ_MAX_SUB_ID_NUM]; //副设备ID  
75 - int SubNum; //副设备数量 92 + // 独有参数
  93 + char DevicePath[64]; // 设备路径
76 94
77 -//作为副设备专有  
78 - int HeartBeatStatusSend; //对主设备发送心跳帧的发送开关  
79 - int ConnectStatus; //连接状态,接收过连接帧后打开 95 +}T_JZsdk_UsbInfo;
80 96
81 -}s_JZsdk_HalStatus; 97 +typedef struct T_JZsdk_NetInfo
  98 +{
  99 + T_JZsdk_PortBase Base;
  100 +
  101 + // 独有参数
  102 + char DevicePath[64]; // 设备路径
82 103
83 -typedef struct s_JZsdk_Hal_Info 104 +} T_JZsdk_NetInfo;
  105 +
  106 +typedef struct T_JZsdk_DirectDataInfo
84 { 107 {
85 - s_JZsdk_HalStatus HalPort[0x50]; //记录hal使用的端口状态  
86 - int HaveUsePort[0x50]; //记录已经使用的端口  
87 - int HaveUsePortNum; //记录已经使用的端口数量 108 + T_JZsdk_PortBase Base;
88 109
89 -}s_JZsdk_Hal_Info; 110 +}T_JZsdk_DirectDataInfo;
  111 +
  112 +typedef struct T_JZsdk_HalInfo
  113 +{
  114 + // uart信息
  115 + T_JZsdk_UartInfo UartInfo[JZ_MAX_UART_NUM];
  116 + int UartNum;
  117 +
  118 + // usb信息
  119 + T_JZsdk_UsbInfo UsbInfo[JZ_MAX_USB_NUM];
  120 + int UsbNum;
  121 +
  122 + // 网口信息
  123 + T_JZsdk_NetInfo NetInfo[JZ_MAX_NET_NUM];
  124 + int NetNum;
  125 +
  126 + // 直通数据类型接口
  127 + T_JZsdk_DirectDataInfo DirectDataInfo[JZ_MAX_DIRECT_NUM];
  128 + int DirectNum;
  129 +
  130 + int HaveUsePortId[JZ_MAX_PORT_NUM]; // 记录已经使用的端口ID
  131 + //T_JZsdk_PortBase* PortPtrs[JZ_MAX_PORT_NUM]; // 与 HaveUsePortId 一一对应,存储端口基类指针
  132 + //ps : 基类指针的方法如果后期效率不够了再该用,前期遍历可能更安全一点
  133 + int HaveUsePortNum; // 记录已经使用的端口数量
  134 +} T_JZsdk_HalInfo;
  135 +
  136 +//前向声明
  137 +typedef struct T_JZsdkHalHandle T_JZsdkHalHandle;
  138 +
  139 +typedef struct T_JZsdkHalHandle
  140 +{
  141 + void* lockCtx; // 锁上下文(指向具体的锁对象)
  142 + T_JZsdkReturnCode(*lock)(T_JZsdkHalHandle* handle);
  143 + T_JZsdkReturnCode(*unlock)(T_JZsdkHalHandle* handle);
  144 +
  145 + int (*PortIsUsed)(int PortId);
  146 +
  147 + T_JZsdkReturnCode(*GetHalInfo)(T_JZsdk_HalInfo* HalInfo);
  148 +}T_JZsdkHalHandle;
90 149
91 /* Exported types ------------------------------------------------------------*/ 150 /* Exported types ------------------------------------------------------------*/
92 151
93 /* Exported functions --------------------------------------------------------*/ 152 /* Exported functions --------------------------------------------------------*/
94 -int JZsdk_HalPort_UseFlag(int PortName);  
95 -T_JZsdkReturnCode JZsdk_HalPort_SetUseFlag(int PortName,int UseFlag); 153 +T_JZsdkReturnCode JZsdk_HalInit(void);
  154 +T_JZsdkReturnCode JZsdk_HalDeinit(void);
  155 +
  156 +T_JZsdkHalHandle* JZsdk_Platform_GetHalHandle(void);
  157 +T_JZsdk_PortBase* JZsdk_FindPortBase(int PortId);
96 158
97 -T_JZsdkReturnCode JZsdk_HalPort_Init(int PortName, void *Value);  
98 -T_JZsdkReturnCode JZsdk_HalPort_ReInit(int PortName, void *Value);  
99 159
100 -T_JZsdkReturnCode JZsdk_Hal_Init(); 160 +//后期优化进 handle
  161 +T_JZsdkReturnCode JZsdk_HalUartInit(T_JZsdk_UartInfo* pUartInfo);
  162 +T_JZsdkReturnCode JZsdk_HalUartReInit(int PortId, int NewBitRate);
  163 +T_JZsdkReturnCode JZsdk_HalDirectDataInit(T_JZsdk_DirectDataInfo* pDirectDataInfo);
  164 +
  165 +int JZsdk_HalPort_UseFlag(int PortName);
  166 +
101 167
102 -s_JZsdk_Hal_Info *JZsdk_Hal_GetHalInfo(); 168 +T_JZsdkReturnCode JZsdk_Hal_config_use_uart1(int num);
103 169
104 #ifdef __cplusplus 170 #ifdef __cplusplus
105 } 171 }
1 -#include <stdio.h> 1 +#include <stdio.h>
2 #include <string.h> 2 #include <string.h>
3 #include <stdlib.h> 3 #include <stdlib.h>
4 4
@@ -11,29 +11,8 @@ @@ -11,29 +11,8 @@
11 #include "BaseConfig.h" 11 #include "BaseConfig.h"
12 12
13 #include "JZsdk_uart/JZsdk_Uart_UartDeal.h" 13 #include "JZsdk_uart/JZsdk_Uart_UartDeal.h"
14 -#include "JZsdk_Hal.h"  
15 -  
16 -static unsigned char *Get_UartDevPath(int UartDev)  
17 -{  
18 - switch (UartDev)  
19 - {  
20 - case UART_4G:  
21 - return COMM_4G_UART_NUM;  
22 - break;  
23 -  
24 - case UART_DEV_1:  
25 - return UART_DEV1_NUM;  
26 - break;  
27 -  
28 - case UART_DEV_2:  
29 - return UART_DEV2_NUM;  
30 - break;  
31 -  
32 - default:  
33 - return NULL;  
34 - break;  
35 - }  
36 -} 14 +#include "JZsdk_Uart.h"
  15 +#include "../JZsdk_Hal.h"
37 16
38 /******************** 17 /********************
39 * 18 *
@@ -130,41 +109,36 @@ T_JZsdkReturnCode JZsdk_Uart_UartEnabled(unsigned char *UartDev, unsigned int Bi @@ -130,41 +109,36 @@ T_JZsdkReturnCode JZsdk_Uart_UartEnabled(unsigned char *UartDev, unsigned int Bi
130 109
131 110
132 111
133 -/****************  
134 - *  
135 - * 串口重初始化  
136 - * 该函数仅能被JZsdk_HalPort_Init调用,请勿直接使用  
137 - *  
138 - * ************************/  
139 -T_JZsdkReturnCode JZsdk_Uart_ReInit(int UART_DEV_NAME, int BitRate)  
140 -{  
141 - T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
142 - int UartFd = 0;  
143 112
144 - //JZSDK_LOG_INFO("初始化串口 0x%x", UART_DEV_NAME);  
145 -  
146 - //检查是否已经初始化  
147 - if(JZsdk_HalPort_UseFlag(UART_DEV_NAME) == JZ_FLAGCODE_ON)  
148 - {  
149 - //先注释掉原来的串口  
150 - JZsdk_HalPort_SetUseFlag(UART_DEV_NAME, JZ_FLAGCODE_OFF);  
151 113
  114 +/*
  115 +* 串口重初始化,比较特殊,该函数仅能用于已经被初始化的串口
  116 +* 注意, 外部初始化串口应该用hal uart reinit
  117 +*/
  118 +T_JZsdkReturnCode JZsdk_UartReinit(T_JZsdk_UartInfo* pUartInf, int PortId)
  119 +{
152 //然后关闭串口 注:该函数有延时 120 //然后关闭串口 注:该函数有延时
153 - JZsdk_Uart_CloseUartThead(UART_DEV_NAME);  
154 - } 121 + JZsdk_Uart_CloseUartThead(PortId);
  122 +
  123 + return JZsdk_UartInit(pUartInf);
  124 +}
  125 +
  126 +//该函数仅被hal.c引用,注意, 外部初始化串口应该用haluartinit
  127 +T_JZsdkReturnCode JZsdk_UartInit(T_JZsdk_UartInfo* pUartInfo)
  128 +{
  129 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
155 130
156 - //2、串口初始化  
157 - ret = JZsdk_Uart_UartEnabled(Get_UartDevPath(UART_DEV_NAME), BitRate, &UartFd); 131 + //串口初始化
  132 + ret = JZsdk_Uart_UartEnabled(pUartInfo->DevicePath, pUartInfo->Baudrate, &pUartInfo->UartId);
158 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 133 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
159 { 134 {
160 return ret; 135 return ret;
161 } 136 }
162 137
163 - //3、串口接收初始化  
164 - JZsdk_Uart_UartDeal_Receive(UartFd, UART_DEV_NAME); 138 + //串口接收初始化
  139 + JZsdk_Uart_UartDeal_Receive(pUartInfo->UartId, pUartInfo->Base.PortId);
165 140
166 - JZSDK_LOG_INFO("init %s sucess", JZsdk_DefineCode_GetPortName(UART_DEV_NAME)); 141 + JZSDK_LOG_INFO("init %s sucess", JZsdk_DefineCode_GetPortName(pUartInfo->Base.PortId));
167 142
168 - return ret; 143 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
169 } 144 }
170 -  
1 -/** 1 +/**
2 ******************************************************************** 2 ********************************************************************
3 * @file JZsdk_Uart.h 3 * @file JZsdk_Uart.h
4 * JZsdk_Uart.c 的头文件 4 * JZsdk_Uart.c 的头文件
@@ -7,11 +7,12 @@ @@ -7,11 +7,12 @@
7 */ 7 */
8 8
9 /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ 9 /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
10 -#ifndef JZSDK_UART_H  
11 -#define JZSDK_UART_H 10 +#ifndef JZSDK_UART_2_H
  11 +#define JZSDK_UART_2_H
12 12
13 /* Includes ------------------------------------------------------------------*/ 13 /* Includes ------------------------------------------------------------------*/
14 #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" 14 #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
  15 +#include "../JZsdk_Hal.h"
15 16
16 #ifdef __cplusplus 17 #ifdef __cplusplus
17 extern "C" { 18 extern "C" {
@@ -24,8 +25,8 @@ extern "C" { @@ -24,8 +25,8 @@ extern "C" {
24 /* Exported types ------------------------------------------------------------*/ 25 /* Exported types ------------------------------------------------------------*/
25 26
26 /* Exported functions --------------------------------------------------------*/ 27 /* Exported functions --------------------------------------------------------*/
27 -T_JZsdkReturnCode JZsdk_Uart_ReInit(int UART_DEV_NAME, int BitRate);  
28 -T_JZsdkReturnCode JZsdk_Uart_UartEnabled(unsigned char *UartDev, unsigned int BitRate, int *UartFd); 28 +T_JZsdkReturnCode JZsdk_UartReinit(T_JZsdk_UartInfo* pUartInf, int PortId);
  29 +T_JZsdkReturnCode JZsdk_UartInit(T_JZsdk_UartInfo* pUartInfo);
29 30
30 #ifdef __cplusplus 31 #ifdef __cplusplus
31 } 32 }
1 -#include <stdio.h> 1 +#include <stdio.h>
2 #include <string.h> 2 #include <string.h>
3 #include <pthread.h> 3 #include <pthread.h>
4 #include <stdlib.h> 4 #include <stdlib.h>
@@ -531,7 +531,7 @@ T_JZsdkReturnCode JZsdk_Uart_UartSend_NotTask(int Uart_Name, unsigned char *str, @@ -531,7 +531,7 @@ T_JZsdkReturnCode JZsdk_Uart_UartSend_NotTask(int Uart_Name, unsigned char *str,
531 //printf("向串口1号设备发送\n"); 531 //printf("向串口1号设备发送\n");
532 write(Uart_DEV1_fd, str, str_lenth); 532 write(Uart_DEV1_fd, str, str_lenth);
533 } 533 }
534 - else if (Uart_Name = UART_DEV_2) 534 + else if (Uart_Name == UART_DEV_2)
535 { 535 {
536 //printf("向串口2号设备发送\n"); 536 //printf("向串口2号设备发送\n");
537 write(Uart_DEV2_fd, str, str_lenth); 537 write(Uart_DEV2_fd, str, str_lenth);
@@ -650,7 +650,7 @@ static T_JZsdkReturnCode JZsdk_Uart_CloseUartFd(int UartPort) @@ -650,7 +650,7 @@ static T_JZsdkReturnCode JZsdk_Uart_CloseUartFd(int UartPort)
650 else if (UartPort == UART_DEV_2) 650 else if (UartPort == UART_DEV_2)
651 { 651 {
652 JZSDK_LOG_INFO("关闭串口2识别符\n"); 652 JZSDK_LOG_INFO("关闭串口2识别符\n");
653 - close(Uart_DEV1_fd); 653 + close(Uart_DEV2_fd);
654 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 654 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
655 } 655 }
656 } 656 }
@@ -393,7 +393,7 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType) @@ -393,7 +393,7 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType)
393 break; 393 break;
394 394
395 case FILTER_FORMAL_H150A: 395 case FILTER_FORMAL_H150A:
396 - ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL_AUDIO); 396 + ret = FF_Filter_ParamInit(AD_Info, FILTER_FORMAL_15_H150A);
397 break; 397 break;
398 398
399 default: 399 default:
1 -/** 1 +/**
2 ******************************************************************** 2 ********************************************************************
3 * @file FF_FilterParam.h 3 * @file FF_FilterParam.h
4 * FF_FilterParam.h 4 * FF_FilterParam.h
@@ -350,6 +350,7 @@ extern "C" { @@ -350,6 +350,7 @@ extern "C" {
350 lowpass=f=6000:width_type=q:w=1.8, \ 350 lowpass=f=6000:width_type=q:w=1.8, \
351 volume=0.98" 351 volume=0.98"
352 352
  353 +//测试 34~35度 26.3.18
353 #define FILTER_FORMAL_11_H150A "equalizer=f=250:t=q:w=2.0:g=-14, \ 354 #define FILTER_FORMAL_11_H150A "equalizer=f=250:t=q:w=2.0:g=-14, \
354 equalizer=f=500:t=q:w=2.0:g=-6, \ 355 equalizer=f=500:t=q:w=2.0:g=-6, \
355 equalizer=f=1000:t=q:w=2.0:g=+0, \ 356 equalizer=f=1000:t=q:w=2.0:g=+0, \
@@ -368,10 +369,28 @@ extern "C" { @@ -368,10 +369,28 @@ extern "C" {
368 highpass=f=80:width_type=q:w=1.2, \ 369 highpass=f=80:width_type=q:w=1.2, \
369 volume=0.98" 370 volume=0.98"
370 371
371 -#define FILTER_FORMAL_12_H150A "equalizer=f=250:t=q:w=2.0:g=-16, \  
372 - equalizer=f=500:t=q:w=2.0:g=-8, \  
373 - equalizer=f=1000:t=q:w=2.0:g=-4, \  
374 - equalizer=f=2000:t=q:w=2.0:g=-2, \ 372 +//温度过高,半小时61度,可能是aphaser带来的频谱位移导致
  373 +#define FILTER_MUSIC_13_H150A "equalizer=f=31:t=q:w=2.0:g=-12, \
  374 + equalizer=f=62:t=q:w=2.0:g=-3, \
  375 + equalizer=f=125:t=q:w=2.0:g=0, \
  376 + equalizer=f=250:t=q:w=2.0:g=-3, \
  377 + equalizer=f=500:t=q:w=2.0:g=0, \
  378 + equalizer=f=1000:t=q:w=2.0:g=+1, \
  379 + equalizer=f=2000:t=q:w=2.0:g=+1, \
  380 + equalizer=f=4000:t=q:w=2.0:g=+1, \
  381 + equalizer=f=8000:t=q:w=2.0:g=+2, \
  382 + equalizer=f=16000:t=q:w=2.0:g=+2, \
  383 + lowpass=f=18000:width_type=q:w=1.0, \
  384 + highpass=f=60:width_type=q:w=1.2, \
  385 + compand=attacks=0:decays=0.3:points=-60/-60|-30/-24|-20/-18|-10/-12|0/-6:gain=2, \
  386 + aphaser=delay=1:decay=0.1:speed=0.5, \
  387 + volume=1.0"
  388 +
  389 +//比11补偿点中低频, 温度34,音量126-127
  390 +#define FILTER_FORMAL_14_H150A "equalizer=f=250:t=q:w=2.0:g=-14, \
  391 + equalizer=f=500:t=q:w=2.0:g=-6, \
  392 + equalizer=f=1000:t=q:w=2.0:g=+0, \
  393 + equalizer=f=2000:t=q:w=2.0:g=+0, \
375 equalizer=f=4000:t=q:w=2.0:g=+0, \ 394 equalizer=f=4000:t=q:w=2.0:g=+0, \
376 equalizer=f=8000:t=q:w=2.0:g=-8, \ 395 equalizer=f=8000:t=q:w=2.0:g=-8, \
377 equalizer=f=16000:t=q:w=2.0:g=-2, \ 396 equalizer=f=16000:t=q:w=2.0:g=-2, \
@@ -384,14 +403,38 @@ extern "C" { @@ -384,14 +403,38 @@ extern "C" {
384 equalizer=f=125:t=q:w=2.0:g=-48, \ 403 equalizer=f=125:t=q:w=2.0:g=-48, \
385 lowpass=f=6000:width_type=q:w=1.8, \ 404 lowpass=f=6000:width_type=q:w=1.8, \
386 highpass=f=80:width_type=q:w=1.2, \ 405 highpass=f=80:width_type=q:w=1.2, \
  406 + aphaser=delay=1:decay=0.1:speed=0.5, \
387 volume=0.98" 407 volume=0.98"
388 408
389 -#define FILTER_FORMAL_13_H150A "equalizer=f=250:t=q:w=2.0:g=-24, \  
390 - equalizer=f=500:t=q:w=2.0:g=-16, \  
391 - equalizer=f=1000:t=q:w=2.0:g=-8, \  
392 - equalizer=f=2000:t=q:w=2.0:g=-4, \ 409 +
  410 +//温度33,音量126
  411 +#define FILTER_FORMAL_15_H150A "equalizer=f=250:t=q:w=2.0:g=-10, \
  412 + equalizer=f=500:t=q:w=2.0:g=-3, \
  413 + equalizer=f=1000:t=q:w=2.0:g=+0, \
  414 + equalizer=f=2000:t=q:w=2.0:g=+0, \
393 equalizer=f=4000:t=q:w=2.0:g=+0, \ 415 equalizer=f=4000:t=q:w=2.0:g=+0, \
394 - equalizer=f=8000:t=q:w=2.0:g=-8, \ 416 + equalizer=f=8000:t=q:w=2.0:g=-6, \
  417 + equalizer=f=16000:t=q:w=2.0:g=-2, \
  418 + compand=attacks=0:decays=0.3:points=-60/-60|-30/-20|-20/-15|-10/-10|0/-5:gain=3, \
  419 + equalizer=f=4:t=q:w=2.0:g=-96, \
  420 + equalizer=f=8:t=q:w=2.0:g=-96, \
  421 + equalizer=f=15:t=q:w=2.0:g=-96, \
  422 + equalizer=f=31:t=q:w=2.0:g=-72, \
  423 + equalizer=f=62:t=q:w=2.0:g=-48, \
  424 + equalizer=f=125:t=q:w=2.0:g=-48, \
  425 + lowpass=f=6000:width_type=q:w=1.8, \
  426 + highpass=f=80:width_type=q:w=1.2, \
  427 + aphaser=delay=1:decay=0.1:speed=0.5, \
  428 + volume=0.98"
  429 +
  430 +
  431 +//温度37,音量125-126 温度高了
  432 +#define FILTER_FORMAL_16_H150A "equalizer=f=250:t=q:w=2.0:g=-10, \
  433 + equalizer=f=500:t=q:w=2.0:g=-3, \
  434 + equalizer=f=1000:t=q:w=2.0:g=+0, \
  435 + equalizer=f=2000:t=q:w=2.0:g=+0, \
  436 + equalizer=f=4000:t=q:w=2.0:g=+0, \
  437 + equalizer=f=8000:t=q:w=2.0:g=-4, \
395 equalizer=f=16000:t=q:w=2.0:g=-2, \ 438 equalizer=f=16000:t=q:w=2.0:g=-2, \
396 compand=attacks=0:decays=0.3:points=-60/-60|-30/-20|-20/-15|-10/-10|0/-5:gain=3, \ 439 compand=attacks=0:decays=0.3:points=-60/-60|-30/-20|-20/-15|-10/-10|0/-5:gain=3, \
397 equalizer=f=4:t=q:w=2.0:g=-96, \ 440 equalizer=f=4:t=q:w=2.0:g=-96, \
@@ -402,6 +445,7 @@ extern "C" { @@ -402,6 +445,7 @@ extern "C" {
402 equalizer=f=125:t=q:w=2.0:g=-48, \ 445 equalizer=f=125:t=q:w=2.0:g=-48, \
403 lowpass=f=6000:width_type=q:w=1.8, \ 446 lowpass=f=6000:width_type=q:w=1.8, \
404 highpass=f=80:width_type=q:w=1.2, \ 447 highpass=f=80:width_type=q:w=1.2, \
  448 + aphaser=delay=1:decay=0.1:speed=0.5, \
405 volume=0.98" 449 volume=0.98"
406 450
407 451
1 -#include <stdio.h> 1 +#include <stdio.h>
2 #include <pthread.h> 2 #include <pthread.h>
3 3
4 #include "JZsdkLib.h" 4 #include "JZsdkLib.h"
5 #include "JZsdk_Hal.h" 5 #include "JZsdk_Hal.h"
6 #include "Hal_Send/HalSend_type1/HalSend_type1.h" 6 #include "Hal_Send/HalSend_type1/HalSend_type1.h"
7 7
8 -T_JZsdkReturnCode HeartBeat_HalCheck() 8 +T_JZsdkReturnCode HeartBeat_HalCheck(void)
9 { 9 {
10 - s_JZsdk_Hal_Info *HalInfo = JZsdk_Hal_GetHalInfo(); 10 + T_JZsdkHalHandle* handle = JZsdk_Platform_GetHalHandle();
  11 + if (handle == NULL)
  12 + {
  13 + JZSDK_LOG_ERROR("HAL未初始化");
  14 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  15 + }
  16 +
  17 + T_JZsdk_HalInfo HalInfo = { 0 };
  18 + handle->GetHalInfo(&HalInfo);
  19 +
  20 + // 加锁保护共享数据
  21 + handle->lock(handle);
11 22
12 - //1、获取心跳帧的开启情况 发送心跳帧  
13 - for (int i = 0; i < HalInfo->HaveUsePortNum; i++) 23 + // 遍历所有已使用的端口
  24 + for (int i = 0; i < HalInfo.HaveUsePortNum; i++)
14 { 25 {
15 - if (HalInfo->HalPort[HalInfo->HaveUsePort[i]].HeartBeatStatusSend == JZ_FLAGCODE_ON) 26 + int portId = HalInfo.HaveUsePortId[i];
  27 + T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(portId);
  28 + if (portBase == NULL)
16 { 29 {
17 - HalSend_type1Send_HeartBeatStatus(HalInfo->HaveUsePort[i], 0x00, HalInfo->HalPort[HalInfo->HaveUsePort[i]].ConnectStatus); 30 + JZSDK_LOG_WARN("端口 %d 在已使用列表中但未找到对应结构", portId);
  31 + continue;
  32 + }
  33 +
  34 + // 如果心跳发送开关开启,则发送心跳状态
  35 + if (portBase->HalStatus.HeartBeatStatusSend == JZ_FLAGCODE_ON)
  36 + {
  37 + // 发送心跳状态,第二个参数为序列号,此处沿用原代码的0x00
  38 + HalSend_type1Send_HeartBeatStatus(portId, 0x00, portBase->HalStatus.ConnectStatus);
18 } 39 }
19 } 40 }
20 41
  42 + handle->unlock(handle);
  43 +
  44 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
21 } 45 }
22 46
23 static void *HeartBeatTask(void *arg) 47 static void *HeartBeatTask(void *arg)
@@ -173,7 +173,7 @@ T_JZsdkReturnCode Gimbal_Set_PitchAngle(int angle) @@ -173,7 +173,7 @@ T_JZsdkReturnCode Gimbal_Set_PitchAngle(int angle)
173 //独立模式 173 //独立模式
174 case JZ_MODULE_CONTROL_WAY_INDEPENDENT: 174 case JZ_MODULE_CONTROL_WAY_INDEPENDENT:
175 { 175 {
176 - if (angle < g_GimbalInfo.PitchLimitMin || angle > g_GimbalInfo.PitchLimitMax || (g_GimbalInfo.PitchLimitMin == g_GimbalInfo.PitchLimitMax)) 176 + if ( (angle < g_GimbalInfo.PitchLimitMin) || (angle > g_GimbalInfo.PitchLimitMax) || (g_GimbalInfo.PitchLimitMin == g_GimbalInfo.PitchLimitMax))
177 { 177 {
178 printf("云台俯仰输入值范围出错:%d\n", angle); 178 printf("云台俯仰输入值范围出错:%d\n", angle);
179 return JZ_ERRORCODE_GIMBAL_INVALID_PITCH; 179 return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
1 -/** 1 +/**
2 ******************************************************************** 2 ********************************************************************
3 * @file VolumeLimit.h 3 * @file VolumeLimit.h
4 * VolumeLimit.h 的头文件 4 * VolumeLimit.h 的头文件
@@ -114,12 +114,12 @@ extern "C" { @@ -114,12 +114,12 @@ extern "C" {
114 // #define MAX_VOLUME (80) 114 // #define MAX_VOLUME (80)
115 // #define MAX_TTS_VOLUME (75) 115 // #define MAX_TTS_VOLUME (75)
116 116
117 - //2.1~2.2欧姆的振膜 默认参数87 88 11号参数 73 73  
118 - //#define MAX_VOLUME (71)  
119 - //#define MAX_TTS_VOLUME (71) 117 + #define MAX_VOLUME (85)
  118 + #define MAX_TTS_VOLUME (85)
120 119
121 - #define MAX_VOLUME (73)  
122 - #define MAX_TTS_VOLUME (73) 120 + //旧滤波 和 11参
  121 + //#define MAX_VOLUME (73)
  122 + //#define MAX_TTS_VOLUME (73)
123 #else 123 #else
124 #define MAX_VOLUME (75) 124 #define MAX_VOLUME (75)
125 #define MAX_TTS_VOLUME (75) 125 #define MAX_TTS_VOLUME (75)
1 # cmake 最低版本要求 第三行名字不能动 1 # cmake 最低版本要求 第三行名字不能动
2 cmake_minimum_required(VERSION 2.8) 2 cmake_minimum_required(VERSION 2.8)
3 -project(JZ_T40S) 3 +project(JZ_H150A)
4 4
5 #set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++") 5 #set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++")
6 #"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。 6 #"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。
@@ -62,6 +62,19 @@ extern "C" { @@ -62,6 +62,19 @@ extern "C" {
62 #define USER_DEVELOPER_ACCOUNT "jizhisdk@163.com" 62 #define USER_DEVELOPER_ACCOUNT "jizhisdk@163.com"
63 #define USER_BAUD_RATE "921600" 63 #define USER_BAUD_RATE "921600"
64 64
  65 + //#define USER_APP_NAME "ID0570"
  66 + //#define USER_APP_ID "177576"
  67 + //#define USER_APP_KEY "5ce1ab19916613ec389a17c99670176"
  68 + //#define USER_APP_LICENSE "tSm/nAFGayFQ1WZ4WwR+OfHzopYB978IMd87NYb4zeXe/7rZHFVm8RIFZHi2MGZXx9VJJDovigWm6oGjiiRShshD8TmRC8mO4wcQKmZOaAuae915caKzsvFeMb0ekYyeYpzRB43cWH+Rvri3Sb6SMeAdxHI+i7FA/uGre0nNGhv6A+UXBUreufKMq9Rf9Y9qccQqGY8YtgldNlDJHapRuqKJsdZejkCEccNFv1O5AVZO63A7r/UfF49EkljCAhlAaSu1Z7qHHqBb9NbovuTf4d+omlL/ys+2ug7RPxhAdTKAbvvP49k8ObMze9FZTF4vBSuXzuveKCg/XMgWWP3dSw=="
  69 + //#define USER_DEVELOPER_ACCOUNT "acme20251208@163.com"
  70 + //#define USER_BAUD_RATE "921600"
  71 +
  72 + //#define USER_APP_NAME "H150A"
  73 + //#define USER_APP_ID "180445"
  74 + //#define USER_APP_KEY "0164ed60d70b438c5ff26fde60c6609"
  75 + //#define USER_APP_LICENSE "rlyth08igUpD/ell+FOLoQJYI12b8IjnaylClO6T4n7sGopwUQ29aEXPaEK7HylrZBXbpYCpdZGbtjOj22G38FgEYOiVJqeFEzeZwJorDZzNt3X+i26h2pHvEMG9d+p3UnW8AGqowKAvOPOD8VW6jquj4iMkLrUP4NLrijWR9uMET1TenZY4MFSK+F5/Hl3+J8DFF8Uagj1q4UBaoUH/noZOiIspJB/s5mmYJAcqMwEMkv8YeE4gN8HLh8kDGFpmMXD2cy5UoQnZJVMzBYOMg4Fn1GPbuVGEIszgFY1XPjGvJ5219znC02ZHs9IKc6g8BxotKF8gUQbXI/yweGoCMA=="
  76 + //#define USER_DEVELOPER_ACCOUNT "jizhisdk@163.com"
  77 + //#define USER_BAUD_RATE "921600"
65 #else 78 #else
66 #define USER_APP_NAME "H110" 79 #define USER_APP_NAME "H110"
67 #define USER_APP_ID "107188" 80 #define USER_APP_ID "107188"
@@ -68,6 +68,8 @@ @@ -68,6 +68,8 @@
68 #include "CommonMod/PowerManger/PowerManger.h" 68 #include "CommonMod/PowerManger/PowerManger.h"
69 #include "DJI_Expansion.h" 69 #include "DJI_Expansion.h"
70 70
  71 +#include "JZsdk_Hal.h"
  72 +
71 #ifdef AUDIODEAL_CONFIG_STATUS_ON 73 #ifdef AUDIODEAL_CONFIG_STATUS_ON
72 #include "AudioDeal/AudioDeal.h" 74 #include "AudioDeal/AudioDeal.h"
73 #endif 75 #endif
@@ -1250,4 +1252,24 @@ void *getworkmodeTask(void *arg) @@ -1250,4 +1252,24 @@ void *getworkmodeTask(void *arg)
1250 int flag = 0x01; 1252 int flag = 0x01;
1251 Main_StartupPriority(&flag); 1253 Main_StartupPriority(&flag);
1252 1254
  1255 +#if DEVICE_VERSION == JZ_H150A
  1256 + //h150a新增,如果是h150a,增加一个新的识别
  1257 + //如果是m400,输入1 如果是m350输入0
  1258 + T_DjiAircraftInfoBaseInfo aircraftInfoBaseInfo;
  1259 + DjiAircraftInfo_GetBaseInfo(&aircraftInfoBaseInfo);
  1260 +
  1261 + if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_SERIES_M350)
  1262 + {
  1263 + //在hal层中写入uart口
  1264 + JZsdk_Hal_config_use_uart1(0);
  1265 + }
  1266 + else if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M400)
  1267 + {
  1268 + //在hal层中写入uart口
  1269 + JZsdk_Hal_config_use_uart1(1);
  1270 + }
  1271 +
  1272 +#endif // DEVICE_VERSION == JZ_H150A
  1273 +
  1274 +
1253 } 1275 }
1 -/** 1 +/**
2 ******************************************************************** 2 ********************************************************************
3 * @file hal_uart.c 3 * @file hal_uart.c
4 * @brief 4 * @brief
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 /* Includes ------------------------------------------------------------------*/ 25 /* Includes ------------------------------------------------------------------*/
26 #include <dji_logger.h> 26 #include <dji_logger.h>
27 #include "hal_uart.h" 27 #include "hal_uart.h"
28 -#include "version_choose.h" 28 +#include "BaseConfig.h"
29 29
30 /* Private constants ---------------------------------------------------------*/ 30 /* Private constants ---------------------------------------------------------*/
31 #define UART_DEV_NAME_STR_SIZE (128) 31 #define UART_DEV_NAME_STR_SIZE (128)
@@ -59,13 +59,24 @@ T_DjiReturnCode HalUart_Init(E_DjiHalUartNum uartNum, uint32_t baudRate, T_DjiUa @@ -59,13 +59,24 @@ T_DjiReturnCode HalUart_Init(E_DjiHalUartNum uartNum, uint32_t baudRate, T_DjiUa
59 return DJI_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED; 59 return DJI_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED;
60 } 60 }
61 61
  62 + //获取 输入参数是否存在串口
  63 + if (JZsdk_ParamterParsing_GetUart1Device() == NULL)
  64 + {
62 if (uartNum == DJI_HAL_UART_NUM_0) { 65 if (uartNum == DJI_HAL_UART_NUM_0) {
63 strcpy(uartName, LINUX_UART_DEV1); 66 strcpy(uartName, LINUX_UART_DEV1);
64 - } else if (uartNum == DJI_HAL_UART_NUM_1) { 67 + }
  68 + else if (uartNum == DJI_HAL_UART_NUM_1) {
65 strcpy(uartName, LINUX_UART_DEV2); 69 strcpy(uartName, LINUX_UART_DEV2);
66 - } else { 70 + }
  71 + else {
67 goto free_uart_handle; 72 goto free_uart_handle;
68 } 73 }
  74 + }
  75 + else
  76 + {
  77 + strcpy(uartName, JZsdk_ParamterParsing_GetUart1Device());
  78 + }
  79 +
69 80
70 #ifdef USE_CLION_DEBUG 81 #ifdef USE_CLION_DEBUG
71 sprintf(systemCmd, "ls -l %s", uartName); 82 sprintf(systemCmd, "ls -l %s", uartName);