作者 ookk303

更新

@@ -72,7 +72,13 @@ @@ -72,7 +72,13 @@
72 "rk_rga.h": "c", 72 "rk_rga.h": "c",
73 "rgautils.h": "c", 73 "rgautils.h": "c",
74 "im2d_type.h": "c", 74 "im2d_type.h": "c",
75 - "im2d.h": "c" 75 + "im2d.h": "c",
  76 + "halrecv_tpye1.h": "c",
  77 + "jzsdk_uart_recvdeal.h": "c",
  78 + "jzsdk_framecomparsion.h": "c",
  79 + "jzsdk_definingcode.h": "c",
  80 + "test_data_transmission.h": "c",
  81 + "halrecv_type1.h": "c"
76 }, 82 },
77 "Codegeex.GenerationPreference": "automatic", 83 "Codegeex.GenerationPreference": "automatic",
78 "C_Cpp.dimInactiveRegions": false 84 "C_Cpp.dimInactiveRegions": false
1 # 编译链的配置 1 # 编译链的配置
2 2
3 #1、编译链与设备类型的选择 3 #1、编译链与设备类型的选择
4 -set(DEVICE_NAME JZ_H10T) 4 +set(DEVICE_NAME JZ_H1E)
5 #上一行为禁止修改行 5 #上一行为禁止修改行
6 6
7 message("**************************JZSDK构建编译开始***************************\n") 7 message("**************************JZSDK构建编译开始***************************\n")
@@ -24,6 +24,7 @@ extern "C" { @@ -24,6 +24,7 @@ extern "C" {
24 #include "./JZsdk_ReturnCode.h" 24 #include "./JZsdk_ReturnCode.h"
25 #include "./JZsdk_FileType.h" 25 #include "./JZsdk_FileType.h"
26 #include "./JZsdk_WidgetCode.h" 26 #include "./JZsdk_WidgetCode.h"
  27 +#include "./JZsdk_DefineCode.h"
27 28
28 /* Exported types ------------------------------------------------------------*/ 29 /* Exported types ------------------------------------------------------------*/
29 30
  1 +#include <stdio.h>
  2 +#include "./JZsdk_DefineCode.h"
  3 +
  4 +unsigned char * JZsdk_DefineCode_GetPortName(int Port)
  5 +{
  6 + switch (Port)
  7 + {
  8 + case UART_4G:
  9 + return "设备4G";
  10 + break;
  11 +
  12 + case UART_DEV_1:
  13 + return "设备UART1";
  14 + break;
  15 +
  16 + case UART_DEV_2:
  17 + return "设备UART2";
  18 + break;
  19 +
  20 + case HAL_DATA_TRANSMISSION:
  21 + return "HAL数据";
  22 + break;
  23 +
  24 + case NO_SPECIFIED:
  25 + return "无指定设备";
  26 + break;
  27 +
  28 + default:
  29 + return "无指定设备";
  30 + break;
  31 + }
  32 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_DefiningCode.h
  4 + * 用于记录各种定义类型的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_DEFININGCODE_H
  11 +#define JZSDK_DEFININGCODE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C"
  17 +{
  18 +#endif
  19 +
  20 +/* Exported constants --------------------------------------------------------*/
  21 +/* 常亮定义*/
  22 +
  23 +/* Exported types ------------------------------------------------------------*/
  24 +typedef enum
  25 +{
  26 + DEVICE_PSDK = 0x1000, // psdk功能
  27 + UART_4G = 0x1001, // 4G功能
  28 + UART_DEV_1 = 0x1002, // 1号设备功能
  29 + UART_DEV_2 = 0x1003, // 2号设备功能
  30 + UART_DEV_3 = 0x1004, // 3号设备功能
  31 + UART_DEV_4 = 0x1005, // 4号设备功能
  32 + UART_DEV_5 = 0x1006, // 5号设备功能
  33 +
  34 + UART_USB_1 = 0x1100, // usb设备
  35 + UART_USB_2 = 0x1101, // usb设备
  36 + UART_USB_3 = 0x1102, // usb设备
  37 + UART_USB_4 = 0x1103, // usb设备
  38 + UART_USB_5 = 0x1104, // usb设备
  39 +
  40 + HAL_DATA_TRANSMISSION = 0x1200, // hal定制的特殊数据传播
  41 +
  42 + COMBINE_DEVICE = 0x1998, // 组合设备
  43 + NO_SPECIFIED = 0x1999, // 无制定设备
  44 +} JZ_DEVICE_PORT_TYPE;
  45 +
  46 +/* Exported functions --------------------------------------------------------*/
  47 +
  48 +#ifdef __cplusplus
  49 +}
  50 +#endif
  51 +
  52 +#endif
@@ -21,25 +21,6 @@ extern "C" { @@ -21,25 +21,6 @@ extern "C" {
21 21
22 /* Exported constants --------------------------------------------------------*/ 22 /* Exported constants --------------------------------------------------------*/
23 /* 常亮定义*/ 23 /* 常亮定义*/
24 -#define DEVICE_PSDK 0x1000 //psdk功能  
25 -#define UART_4G 0x1001 //4G功能  
26 -#define UART_DEV_1 0x1002 //1号设备功能  
27 -#define UART_DEV_2 0x1003 //2号设备功能  
28 -#define UART_DEV_3 0x1004 //3号设备功能  
29 -#define UART_DEV_4 0x1005 //4号设备功能  
30 -#define UART_DEV_5 0x1006 //5号设备功能  
31 -  
32 -#define UART_USB_1 0x1100 //usb设备  
33 -#define UART_USB_2 0x1101 //usb设备  
34 -#define UART_USB_3 0x1102 //usb设备  
35 -#define UART_USB_4 0x1103 //usb设备  
36 -#define UART_USB_5 0x1104 //usb设备  
37 -  
38 -#define HAL_DATA_TRANSMISSION 0x1200 //hal定制的特殊数据传播  
39 -  
40 -  
41 -#define COMBINE_DEVICE 0x1998 //组合设备  
42 -#define NO_SPECIFIED 0x1999 //无制定设备  
43 24
44 //展架通讯串口 25 //展架通讯串口
45 #if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T 26 #if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
@@ -7,19 +7,19 @@ @@ -7,19 +7,19 @@
7 #define VERSION_CHOOSE_H 7 #define VERSION_CHOOSE_H
8 #include "./ConfigParams.h" 8 #include "./ConfigParams.h"
9 //1~10行 除了D可以修改版本选择 禁止动任何东西 9 //1~10行 除了D可以修改版本选择 禁止动任何东西
10 -#define DEVICE_VERSION JZ_H10T 10 +#define DEVICE_VERSION JZ_H1E
11 11
12 //禁止修改行 选择是串口程序 还是 psdk程序 12 //禁止修改行 选择是串口程序 还是 psdk程序
13 -#define APP_VERSION APP_PSDK 13 +#define APP_VERSION APP_UART
14 14
15 //禁止修改行 板子型号 15 //禁止修改行 板子型号
16 #define PLATFORM_VERSION PLATFORM_V3S 16 #define PLATFORM_VERSION PLATFORM_V3S
17 17
18 //禁止修改行 串口连接程序的软件版本号 18 //禁止修改行 串口连接程序的软件版本号
19 -#define MAJOR_VERSION 0x01  
20 -#define MINOR_VERSION 0x03  
21 -#define MODIFY_VERSION 0x09  
22 -#define DEBUG_VERSION 0x03 19 +#define MAJOR_VERSION 0x00
  20 +#define MINOR_VERSION 0x00
  21 +#define MODIFY_VERSION 0x02
  22 +#define DEBUG_VERSION 0x09
23 23
24 //禁止修改行 滤波方式 24 //禁止修改行 滤波方式
25 #define FILTERING_TYPE HIGH_PASS_FILTERING 25 #define FILTERING_TYPE HIGH_PASS_FILTERING
@@ -9,6 +9,8 @@ @@ -9,6 +9,8 @@
9 #include <stdio.h> 9 #include <stdio.h>
10 #include "JZsdkLib.h" 10 #include "JZsdkLib.h"
11 #include "BaseConfig.h" 11 #include "BaseConfig.h"
  12 +#include "Hal_Recv/HalRecv_type1/HalRecv_type1.h"
  13 +#include "Hal_Recv/HalRecv_type1/HalRecv_type1_RecvDeal.h"
12 14
13 /*************** 15 /***************
14 * 16 *
@@ -19,12 +21,27 @@ @@ -19,12 +21,27 @@
19 * 输入要 处理的原始数据data 以及 数据长度DataLen 还有输入的接口 21 * 输入要 处理的原始数据data 以及 数据长度DataLen 还有输入的接口
20 * 返回值:未处理的长度数据 22 * 返回值:未处理的长度数据
21 * 23 *
22 - * 返回后在 24 + * 该协议的帧排序为
  25 + *
  26 + * 帧头三位 0x5A 0x5A 0x77 | 组成了实际的帧头
  27 + * 帧长度两位 0x00 0x00 |
  28 + *
  29 + * 应答位一位 0x00 | 组成了识别顺序的部分
  30 + * 帧序列一位 0x00 |
  31 + *
  32 + * 一级功能码一位 0x00 | 组成了数据功能识别的部分
  33 + * 二级功能码一位 0x00 |
  34 + *
  35 + * 数据位 不定 | 用于描述该帧的实际内容
  36 + *
  37 + * 帧尾两位 0x00 0x23 | 祖册了实际的帧尾
  38 + *
23 * ********************/ 39 * ********************/
24 -int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int DataLen, int Port) 40 +int HalRecv_type1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int DataLen, int Port)
25 { 41 {
26 int ResidualLength = 0; // 剩余数据长度 42 int ResidualLength = 0; // 剩余数据长度
27 43
  44 + //串口打印
28 switch (Port) 45 switch (Port)
29 { 46 {
30 case UART_DEV_1: 47 case UART_DEV_1:
@@ -63,9 +80,10 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D @@ -63,9 +80,10 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D
63 int FrameLen = 0; 80 int FrameLen = 0;
64 81
65 //将数据提取出来 82 //将数据提取出来
  83 + //为什么是减3呢,因为帧头为3位
66 for (HaveReadLen = 0; HaveReadLen <= (DataLen - 3); ) 84 for (HaveReadLen = 0; HaveReadLen <= (DataLen - 3); )
67 { 85 {
68 - //查找是否存在 帧头 86 + //查找是否存在帧头
69 switch (Data[HaveReadLen]) 87 switch (Data[HaveReadLen])
70 { 88 {
71 case 0x5A: 89 case 0x5A:
@@ -124,28 +142,34 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D @@ -124,28 +142,34 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D
124 break; 142 break;
125 } 143 }
126 144
  145 + //没有检测到帧头,向后继续查找
127 if (FrameFlag == 0x00) 146 if (FrameFlag == 0x00)
128 { 147 {
129 - if (HaveReadLen >= (DataLen - 5))  
130 - {  
131 - //JZSDK_LOG_INFO("没有找到帧头");  
132 - }  
133 HaveReadLen++; 148 HaveReadLen++;
134 continue; 149 continue;
135 } 150 }
136 151
137 - //如果有帧头,则先判断前面有没有多余的数据残留,并将其移除 152 + //如果有帧头
  153 + //判断前面有没有多余的数据残留,并将其移除
138 if (HaveReadLen > HaveDealLen) 154 if (HaveReadLen > HaveDealLen)
139 { 155 {
140 //JZSDK_LOG_INFO("残余处理%d",(HaveReadLen - HaveDealLen)); 156 //JZSDK_LOG_INFO("残余处理%d",(HaveReadLen - HaveDealLen));
141 HaveDealLen = HaveReadLen; 157 HaveDealLen = HaveReadLen;
142 } 158 }
143 159
144 - //检查帧长度是否超出数据剩余的内容 160 + //检查此时的剩余长度是否足够容纳帧长度位
  161 + if ((DataLen - HaveReadLen) < 5)
  162 + {
  163 + //如果已经容纳不下长度位了,则返回内容
  164 + ResidualLength = (DataLen - HaveReadLen);
  165 + return ResidualLength;
  166 + }
  167 +
  168 + //此时有足够的长度位置,可以计算长度,检查帧长度是否超出数据剩余的内容
145 FrameLen = (((int)Data[HaveReadLen+3]) << 8) + (int)Data[HaveReadLen+4]; 169 FrameLen = (((int)Data[HaveReadLen+3]) << 8) + (int)Data[HaveReadLen+4];
146 if (FrameLen > (DataLen - HaveReadLen)) 170 if (FrameLen > (DataLen - HaveReadLen))
147 { 171 {
148 - //JZSDK_LOG_DEBUG("当前帧长度位长度%d 超出剩余帧长度%d ",FrameLen,(getbufLen - HaveReadLen)); 172 + //JZSDK_LOG_DEBUG("当前帧长度位长度%d 超出剩余帧长度%d ",FrameLen,(DataLen - HaveReadLen));
149 // 直接跳出for循环 173 // 直接跳出for循环
150 break; 174 break;
151 } 175 }
@@ -160,32 +184,118 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D @@ -160,32 +184,118 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D
160 184
161 //以上检查都没问题,则正常输出帧 185 //以上检查都没问题,则正常输出帧
162 //JZSDK_LOG_INFO("正常输出帧%d",FrameLen); 186 //JZSDK_LOG_INFO("正常输出帧%d",FrameLen);
  187 + HalRecv_type1_FrameDeal(Port, &Data[HaveReadLen], FrameLen);
163 188
164 - //UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveReadLen], FrameLen);  
165 HaveReadLen = HaveReadLen + FrameLen; 189 HaveReadLen = HaveReadLen + FrameLen;
166 HaveDealLen = HaveReadLen; 190 HaveDealLen = HaveReadLen;
167 191
168 - JZSDK_LOG_INFO("Prot:%x f_len%d h_r%d [h_r]:%x get%d",Port,FrameLen ,HaveReadLen, getbuf[HaveReadLen-1], DataLen); 192 + JZSDK_LOG_INFO("Prot:%x f_len%d h_r%d [h_r]:%x get%d",Port,FrameLen ,HaveReadLen, Data[HaveReadLen-1], DataLen);
169 193
170 FrameLen = 0; 194 FrameLen = 0;
171 FrameFlag = 0; 195 FrameFlag = 0;
172 } 196 }
173 197
174 - // 如果没有数据残留了 198 + // 如果没有数据残留了,可以直接退出了
175 if (HaveDealLen >= DataLen) 199 if (HaveDealLen >= DataLen)
176 { 200 {
177 - //printf("HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen); 201 + //printf("HaveReadLen:%d HaveDealLen%d DataLen:%d\n",HaveReadLen,HaveDealLen,DataLen);
178 ResidualLength = 0; 202 ResidualLength = 0;
179 return ResidualLength; 203 return ResidualLength;
180 } 204 }
181 205
182 - else 206 + // 到达这里时
  207 + // 完整的帧 已处理
  208 + // 有帧头且长度为4的帧则已返回
  209 + // 没有剩余数据则已返回
  210 +
  211 + // 剩下的是
  212 + // 1、剩余长度为所有0~3的帧
  213 + // 2、切帧的帧(即带帧头 长度大于4 小于帧长度的帧)
  214 + // 3、以及无实际意义数据
  215 +
  216 + // 如果有帧头与长度位判定, 说明是切帧的帧,判断长度是否合理,如果合理返回帧长度给接收线程
  217 + if (FrameFlag != 0) //bu
183 { 218 {
  219 + // 1、判断帧的长度会不会不合理,帧的长度最大为文件名帧,其长度为9+2+1024
  220 + if (FrameLen > (9 + 2 + 1024))
  221 + {
  222 + // 将其移除数据
  223 + HaveDealLen = HaveReadLen;
  224 + ResidualLength = 0;
  225 + return ResidualLength;
  226 + }
  227 +
  228 + printf("切帧返回%d\n",(DataLen - HaveDealLen));
  229 +
  230 + // 2、如果合理,则返回剩余长度
  231 + ResidualLength = (DataLen - HaveDealLen);
  232 + return ResidualLength;
  233 + }
184 234
  235 + //接下来判断1类型
  236 +
  237 + //检查最后3位
  238 + for (; HaveReadLen < DataLen - 2; HaveReadLen++)
  239 + {
  240 + if ((Data[HaveReadLen] == 0x5A && Data[HaveReadLen + 1] == 0x5A && Data[HaveReadLen + 2] == 0x77) ||
  241 + (Data[HaveReadLen] == 0x5B && Data[HaveReadLen + 1] == 0x5B && Data[HaveReadLen + 2] == 0x77) ||
  242 + (Data[HaveReadLen] == 0x6A && Data[HaveReadLen + 1] == 0x6A && Data[HaveReadLen + 2] == 0x77) ||
  243 + (Data[HaveReadLen] == 0x6B && Data[HaveReadLen + 1] == 0x6B && Data[HaveReadLen + 2] == 0x77))
  244 + {
  245 + //如果最后三位前还有数据,将其清空
  246 + if ((HaveReadLen - HaveDealLen) > 0)
  247 + {
  248 + HaveDealLen = HaveReadLen;
185 } 249 }
186 250
  251 + printf("检查最后3 4位%d\n",(DataLen - HaveDealLen));
  252 +
  253 + ResidualLength = (DataLen - HaveDealLen);
187 return ResidualLength; 254 return ResidualLength;
188 -} 255 + }
  256 + }
  257 +
  258 + //检查最后两位
  259 + for (; HaveReadLen < DataLen - 1; HaveReadLen++)
  260 + {
  261 + if ((Data[HaveReadLen] == 0x5A && Data[HaveReadLen + 1] == 0x5A) ||
  262 + (Data[HaveReadLen] == 0x5B && Data[HaveReadLen + 1] == 0x5B) ||
  263 + (Data[HaveReadLen] == 0x6A && Data[HaveReadLen + 1] == 0x6A) ||
  264 + (Data[HaveReadLen] == 0x6B && Data[HaveReadLen + 1] == 0x6B))
  265 + {
  266 + if ((HaveReadLen - HaveDealLen) > 0)
  267 + {
  268 + HaveDealLen = HaveReadLen;
  269 + }
  270 +
  271 + printf("检查最后两位%d\n",(DataLen - HaveDealLen));
  272 +
  273 + ResidualLength = (DataLen - HaveDealLen);
  274 + return ResidualLength;
  275 + }
  276 + }
  277 +
  278 + //检查最后一位
  279 + for (; HaveReadLen < DataLen - 0; HaveReadLen++)
  280 + {
  281 + if (Data[HaveReadLen] == 0x5A ||
  282 + Data[HaveReadLen] == 0x5B ||
  283 + Data[HaveReadLen] == 0x6A ||
  284 + Data[HaveReadLen] == 0x6B)
  285 + {
  286 + if ((HaveReadLen - HaveDealLen) > 0)
  287 + {
  288 + HaveDealLen = HaveReadLen;
  289 + }
189 290
  291 + printf("检查最后一位%d\n",(DataLen - HaveDealLen));
190 292
191 -static T_JZsdkReturnCode  
  293 + ResidualLength = (DataLen - HaveDealLen);
  294 + return ResidualLength;
  295 + }
  296 + }
  297 +
  298 + //都检查完了,还是没有帧头在里面,清空所有数据
  299 + ResidualLength = 0;
  300 + return ResidualLength;
  301 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file HalRecv_tpye1.h
  4 + * HalRecv_tpye1.h的头文件
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef HALRECV_TPYE1_H
  11 +#define HALRECV_TPYE1_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +/* Exported types ------------------------------------------------------------*/
  23 +
  24 +/* Exported functions --------------------------------------------------------*/
  25 +
  26 +int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int DataLen, int Port);
  27 +
  28 +
  29 +#ifdef __cplusplus
  30 +}
  31 +#endif
  32 +
  33 +#endif
  1 +/**
  2 + ********************************************************************
  3 + * @file HalRecv_type1_RecvDeal.h
  4 + * HalRecv_type1_RecvDeal
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef HALRECV_TYPE1_RECVDEAL_H
  11 +#define HALRECV_TYPE1_RECVDEAL_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
  22 +
  23 +/* Exported types ------------------------------------------------------------*/
  24 +
  25 +/* Exported functions --------------------------------------------------------*/
  26 +T_JZsdkReturnCode HalRecv_type1_FrameDeal(int Port, unsigned char *getbuf, int len);
  27 +
  28 +#ifdef __cplusplus
  29 +}
  30 +#endif
  31 +
  32 +#endif
@@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
8 #include "JZsdk_Base/JZsdk_FrameComparsion/JZsdk_FrameComparsion.h" 8 #include "JZsdk_Base/JZsdk_FrameComparsion/JZsdk_FrameComparsion.h"
9 #include "JZsdk_uart/JZsdk_Uart_UartDeal.h" 9 #include "JZsdk_uart/JZsdk_Uart_UartDeal.h"
10 #include "BaseConfig.h" 10 #include "BaseConfig.h"
  11 +#include "Hal_Recv/HalRecv_type1/HalRecv_type1.h"
11 12
12 typedef struct 13 typedef struct
13 { 14 {
@@ -365,7 +366,7 @@ static void *JZsdk_hal_data_deal(void *arg) @@ -365,7 +366,7 @@ static void *JZsdk_hal_data_deal(void *arg)
365 } 366 }
366 367
367 // 处理数据 368 // 处理数据
368 - ResidualLength = UartDeal_Recv_interface(1,HAL_DATA_TRANSMISSION, args->Message, args->MessageLength); 369 + ResidualLength = HalRecv_type1_PreliminaryScreeningOfData(args->Message, args->MessageLength, HAL_DATA_TRANSMISSION);
369 //如果还有剩余的长度 370 //如果还有剩余的长度
370 if (ResidualLength != 0) 371 if (ResidualLength != 0)
371 { 372 {
@@ -8,12 +8,13 @@ @@ -8,12 +8,13 @@
8 #include <termios.h> 8 #include <termios.h>
9 #include <sys/time.h> 9 #include <sys/time.h>
10 #include "JZsdk_uart/Uart_Config.h" 10 #include "JZsdk_uart/Uart_Config.h"
11 -#include "JZsdk_Uart_Recv/JZsdk_Uart_RecvDeal.h" 11 +
12 #include "JZsdkLib.h" 12 #include "JZsdkLib.h"
13 #include "JZsdk_uart/JZsdk_Uart_Input.h" 13 #include "JZsdk_uart/JZsdk_Uart_Input.h"
14 #include "JZsdk_TaskManagement/TaskManagement.h" 14 #include "JZsdk_TaskManagement/TaskManagement.h"
15 #include "JZsdk_Uart_UartDeal.h" 15 #include "JZsdk_Uart_UartDeal.h"
16 16
  17 +#include "Hal_Recv/HalRecv_type1/HalRecv_type1.h"
17 18
18 #if APP_VERSION == APP_PSDK 19 #if APP_VERSION == APP_PSDK
19 #include "data_transmission/test_data_transmission.h" 20 #include "data_transmission/test_data_transmission.h"
@@ -301,7 +302,7 @@ static void *UartDeal_deal(void *arg) @@ -301,7 +302,7 @@ static void *UartDeal_deal(void *arg)
301 if (args->MessageLength > 0) 302 if (args->MessageLength > 0)
302 { 303 {
303 //处理数据 304 //处理数据
304 - ResidualLength = UartDeal_Recv_interface(0, args->UartFd, args->Message, args->MessageLength); 305 + ResidualLength = HalRecv_tpye1_PreliminaryScreeningOfData(args->Message, args->MessageLength, args->UartDevName);
305 306
306 //如果还有剩余的长度 307 //如果还有剩余的长度
307 if (ResidualLength != 0) //将其返还到缓冲区 308 if (ResidualLength != 0) //将其返还到缓冲区
@@ -357,346 +358,6 @@ static void *UartDeal_deal(void *arg) @@ -357,346 +358,6 @@ static void *UartDeal_deal(void *arg)
357 **********************************************************************************************************************/ 358 **********************************************************************************************************************/
358 359
359 360
360 -  
361 -  
362 -  
363 -  
364 -/*  
365 -  
366 - 数据排出函数  
367 -  
368 -*/  
369 -static int UartDeal_Recv_Ouput(int tpye, int fd, unsigned char *getbuf, int ReadLen)  
370 -{  
371 - //JZSDK_LOG_INFO("UartDeal_Recv_Ouput排出函数%d",ReadLen);  
372 - if (tpye == 0)  
373 - {  
374 - if (fd == Uart_DEV1_fd)  
375 - {  
376 - JZsdk_Uart_RecvDeal_CharmDeal(UART_DEV_1, getbuf, ReadLen);  
377 -  
378 - }  
379 - else if (fd == Uart_DEV2_fd)  
380 - {  
381 - JZsdk_Uart_RecvDeal_CharmDeal(UART_DEV_2, getbuf, ReadLen);  
382 - }  
383 - else if (fd == Uart_4G_fd)  
384 - {  
385 - JZsdk_Uart_RecvDeal_CharmDeal(UART_4G, getbuf, ReadLen);  
386 - }  
387 - else  
388 - {  
389 - JZSDK_LOG_ERROR("接收到的数据不是从正常串口来的");  
390 - return 0;  
391 - }  
392 - }  
393 - else if (tpye == 1)  
394 - {  
395 - if (fd == HAL_DATA_TRANSMISSION)  
396 - {  
397 - JZsdk_Uart_RecvDeal_CharmDeal(HAL_DATA_TRANSMISSION, getbuf, ReadLen);  
398 - }  
399 - else  
400 - {  
401 - JZSDK_LOG_ERROR("接收到的数据不是从hal_transmisson来的");  
402 - return 0;  
403 - }  
404 - }  
405 -}  
406 -  
407 -/*  
408 -  
409 - 处理数据接口,返回没有处理的数据长度  
410 -  
411 -*/  
412 -int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int getbufLen)  
413 -{  
414 - //0即是串口内容  
415 - if (type == 0)  
416 - {  
417 - if (Uart_fd == Uart_DEV1_fd)  
418 - {  
419 - //JZSDK_LOG_INFO("串口-设备1号,接受到数据+未处理数据的长度len: %d", getbufLen);  
420 - }  
421 - else if (Uart_fd == Uart_DEV2_fd)  
422 - {  
423 - //JZSDK_LOG_INFO("串口-设备2号,接受到数据+未处理数据的长度len: %d", getbufLen);  
424 - }  
425 - else if (Uart_fd == Uart_4G_fd)  
426 - {  
427 - //JZSDK_LOG_INFO("串口-设备4G,接受到数据+未处理数据的长度len: %d", getbufLen);  
428 - }  
429 - else  
430 - {  
431 - JZSDK_LOG_ERROR("接收到的数据不是从正常串口来的");  
432 - return 0;  
433 - }  
434 - }  
435 - else if (type == 1)  
436 - {  
437 - if (Uart_fd == HAL_DATA_TRANSMISSION)  
438 - {  
439 - //JZSDK_LOG_INFO("hal_data,接受到数据+未处理数据的长度len: %d", getbufLen);  
440 - }  
441 - else  
442 - {  
443 - JZSDK_LOG_ERROR("接收到的数据不是从hal_transmisson来的");  
444 - return 0;  
445 - }  
446 - }  
447 -  
448 - // 是否要打印内容  
449 - // printf("getbuf: %s\n", getbuf);  
450 - // for (int i = 0; i < getbufLen; i++)  
451 - // {  
452 - // printf("%x ", getbuf[i]);  
453 - // }  
454 - // printf("\n");  
455 -  
456 - int HaveReadLen = 0; // 已读长度  
457 - int HaveDealLen = 0; // 已处理长度  
458 - int FrameFlag = 0; // 帧标志  
459 - int FrameLen = 0;  
460 -  
461 - // 检索出帧数据  
462 -  
463 - // 遍历数据找帧头,直到数据的倒数第4位,如果这里有帧,帧存在帧头3位+数据长度两位  
464 -  
465 - //printf("遍历开始\n");  
466 - for (HaveReadLen = 0; HaveReadLen < (getbufLen - 4); )  
467 - {  
468 - // 1、如果找到 5A 5B 6A 6B 判断是否是帧  
469 - switch (getbuf[HaveReadLen])  
470 - {  
471 - case 0x5A:  
472 - if ( (getbuf[HaveReadLen + 1] == 0x5A) && (getbuf[HaveReadLen + 2] == 0x77))  
473 - {  
474 - //JZSDK_LOG_INFO("输入5A");  
475 - FrameFlag = 0x5A;  
476 - break;  
477 - }  
478 - else  
479 - {  
480 - FrameFlag = 0x00;  
481 - break;  
482 - }  
483 -  
484 - case 0x5B:  
485 - if ((getbuf[HaveReadLen + 1] == 0x5B) && (getbuf[HaveReadLen + 2] == 0x77))  
486 - {  
487 - //JZSDK_LOG_INFO("输入5B");  
488 - FrameFlag = 0x5B;  
489 - break;  
490 - }  
491 - else  
492 - {  
493 - FrameFlag = 0x00;  
494 - break;  
495 - }  
496 -  
497 - case 0x6A:  
498 - if ((getbuf[HaveReadLen + 1] == 0x6A) && (getbuf[HaveReadLen + 2] == 0x77))  
499 - {  
500 - //JZSDK_LOG_INFO("输入6A");  
501 - FrameFlag = 0x6A;  
502 - break;  
503 - }  
504 - else  
505 - {  
506 - FrameFlag = 0x00;  
507 - break;  
508 - }  
509 -  
510 - case 0x6B:  
511 - if ((getbuf[HaveReadLen + 1] == 0x6B) && (getbuf[HaveReadLen + 2] == 0x77))  
512 - {  
513 - //JZSDK_LOG_INFO("输入6B");  
514 - FrameFlag = 0x6B;  
515 - break;  
516 - }  
517 - else  
518 - {  
519 - FrameFlag = 0x00;  
520 - break;  
521 - }  
522 -  
523 - default:  
524 - FrameFlag = 0x00;  
525 - break;  
526 - }  
527 -  
528 - if (FrameFlag == 0)  
529 - {  
530 - if (HaveReadLen >= (getbufLen - 5))  
531 - {  
532 - //JZSDK_LOG_INFO("没有找到帧头");  
533 - }  
534 - HaveReadLen++;  
535 - continue;  
536 - }  
537 -  
538 - // 3、如果有帧头,则先判断前面有没有多余的数据残留,并将其排出到处理线程  
539 - if ((HaveReadLen - HaveDealLen) > 0)  
540 - {  
541 - //JZSDK_LOG_INFO("残余处理%d",(HaveReadLen - HaveDealLen));  
542 - UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));  
543 - HaveDealLen = HaveReadLen;  
544 - }  
545 -  
546 - // 4、检查帧长度是否超过数组剩余内容  
547 - FrameLen = (((int)getbuf[HaveReadLen+3]) << 8) + (int)getbuf[HaveReadLen+4];  
548 - if (FrameLen > (getbufLen - HaveReadLen))  
549 - {  
550 - JZSDK_LOG_DEBUG("当前帧长度位长度%d 超出剩余帧长度%d ",FrameLen,(getbufLen - HaveReadLen));  
551 - // 直接跳出for循环  
552 - break;  
553 - }  
554 -  
555 - //5、检查帧长度是否为0,避免卡死接收串口  
556 - if (FrameLen == 0)  
557 - {  
558 - JZSDK_LOG_ERROR("严重错误,接收到的帧出现长度为空");  
559 - //直接清空接收的数组  
560 - return 0;  
561 - }  
562 -  
563 - // 6、以上检查都没问题,则正常输出帧  
564 - //JZSDK_LOG_INFO("正常输出帧%d",FrameLen);  
565 - UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveReadLen], FrameLen);  
566 - HaveReadLen = HaveReadLen + FrameLen;  
567 - HaveDealLen = HaveReadLen;  
568 -  
569 - JZSDK_LOG_INFO("fd:%x f_len%d h_r%d [h_r]:%x get%d", Uart_fd,FrameLen ,HaveReadLen, getbuf[HaveReadLen-1], getbufLen);  
570 -  
571 - FrameLen = 0;  
572 - FrameFlag = 0;  
573 - }  
574 -  
575 - //JZSDK_LOG_INFO("UartDeal_Recv_Ouput%d %d %d",HaveDealLen,HaveReadLen , getbufLen);  
576 -  
577 - // 如果没有数据残留了  
578 - if (HaveDealLen >= getbufLen)  
579 - {  
580 - //printf("HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen);  
581 - return 0;  
582 - }  
583 -  
584 - // 如果是有帧头的情况跳出的,说明是帧被切了,需要返回帧长度给接收线程  
585 - if (FrameFlag != 0) //bu  
586 - {  
587 - // 1、判断帧的长度会不会不合理,帧的长度最大为文件名帧,其长度为9+2+400  
588 - if (FrameLen > (9 + 2 + 400))  
589 - {  
590 - // 将其排出不返回  
591 - UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveReadLen], (getbufLen - HaveReadLen));  
592 - HaveDealLen = HaveReadLen;  
593 - return 0;  
594 - }  
595 -  
596 - printf("切帧返回%d\n",(getbufLen - HaveDealLen));  
597 -  
598 - // 2、如果合理,则返回剩余长度  
599 - return (getbufLen - HaveDealLen);  
600 - }  
601 -  
602 - // 如果是没有帧头的情况下跳出的  
603 - // 1、先检查 未经检查最后 最后4 3位  
604 - //如果还有4 或者 3 位未处理  
605 - for (; HaveReadLen < getbufLen - 2; HaveReadLen++)  
606 - {  
607 - if ((getbuf[HaveReadLen] == 0x5A && getbuf[HaveReadLen + 1] == 0x5A && getbuf[HaveReadLen + 2] == 0x77) ||  
608 - (getbuf[HaveReadLen] == 0x5B && getbuf[HaveReadLen + 1] == 0x5B && getbuf[HaveReadLen + 2] == 0x77) ||  
609 - (getbuf[HaveReadLen] == 0x6A && getbuf[HaveReadLen + 1] == 0x6A && getbuf[HaveReadLen + 2] == 0x77) ||  
610 - (getbuf[HaveReadLen] == 0x6B && getbuf[HaveReadLen + 1] == 0x6B && getbuf[HaveReadLen + 2] == 0x77))  
611 - {  
612 - if ((HaveReadLen - HaveDealLen) > 0)  
613 - {  
614 - UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));  
615 - HaveDealLen = HaveReadLen;  
616 - }  
617 -  
618 - printf("检查最后3 4位%d\n",(getbufLen - HaveDealLen));  
619 -  
620 - return (getbufLen - HaveDealLen);  
621 - }  
622 - }  
623 -  
624 - // 2、检查最后两位  
625 - // 如果还有两位未处理  
626 - for (; HaveReadLen < getbufLen - 1; HaveReadLen++)  
627 - {  
628 - if ((getbuf[HaveReadLen] == 0x5A && getbuf[HaveReadLen + 1] == 0x5A) ||  
629 - (getbuf[HaveReadLen] == 0x5B && getbuf[HaveReadLen + 1] == 0x5B) ||  
630 - (getbuf[HaveReadLen] == 0x6A && getbuf[HaveReadLen + 1] == 0x6A) ||  
631 - (getbuf[HaveReadLen] == 0x6B && getbuf[HaveReadLen + 1] == 0x6B))  
632 - {  
633 - if ((HaveReadLen - HaveDealLen) > 0)  
634 - {  
635 - UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));  
636 - HaveDealLen = HaveReadLen;  
637 - }  
638 -  
639 - printf("检查最后两位%d\n",(getbufLen - HaveDealLen));  
640 -  
641 - return (getbufLen - HaveDealLen);  
642 - }  
643 - }  
644 -  
645 - // 2、检查最后一位  
646 - // 如果还有一位未处理  
647 - for (; HaveReadLen < getbufLen - 0; HaveReadLen++)  
648 - {  
649 - // 1、检查最后一位  
650 - if (getbuf[HaveReadLen] == 0x5A ||  
651 - getbuf[HaveReadLen] == 0x5B ||  
652 - getbuf[HaveReadLen] == 0x6A ||  
653 - getbuf[HaveReadLen] == 0x6B)  
654 - {  
655 - if ((HaveReadLen - HaveDealLen) > 0)  
656 - {  
657 - UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));  
658 - HaveDealLen = HaveReadLen;  
659 - }  
660 -  
661 - printf("检查最后一位%d\n",(getbufLen - HaveDealLen));  
662 -  
663 - return (getbufLen - HaveDealLen);  
664 - }  
665 - }  
666 -  
667 - // 都检查完了,还是没有帧头在里面, 将剩余的所有数据排出  
668 - UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));  
669 - printf("检查完毕,排出剩余数据HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen);  
670 -  
671 - return 0;  
672 -}  
673 -  
674 -/**********  
675 - *  
676 - * 无任务发送函数  
677 - *  
678 - * ***********/  
679 -T_JZsdkReturnCode JZsdk_Uart_UartSend_NotTask(int Uart_Name, unsigned char *str, int str_lenth)  
680 -{  
681 - if (Uart_Name == UART_4G)  
682 - {  
683 - printf("向4G设备发送\n");  
684 - write(Uart_4G_fd, str, str_lenth);  
685 - }  
686 - else if (Uart_Name == UART_DEV_1)  
687 - {  
688 - printf("向串口1号设备发送\n");  
689 - write(Uart_DEV1_fd, str, str_lenth);  
690 - }  
691 - else if (Uart_Name = UART_DEV_2)  
692 - {  
693 - printf("向串口2号设备发送\n");  
694 - write(Uart_DEV2_fd, str, str_lenth);  
695 - }  
696 -  
697 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
698 -}  
699 -  
700 typedef struct { 361 typedef struct {
701 char* str; 362 char* str;
702 int str_lenth; 363 int str_lenth;