作者 ookk303

更新

... ... @@ -72,7 +72,13 @@
"rk_rga.h": "c",
"rgautils.h": "c",
"im2d_type.h": "c",
"im2d.h": "c"
"im2d.h": "c",
"halrecv_tpye1.h": "c",
"jzsdk_uart_recvdeal.h": "c",
"jzsdk_framecomparsion.h": "c",
"jzsdk_definingcode.h": "c",
"test_data_transmission.h": "c",
"halrecv_type1.h": "c"
},
"Codegeex.GenerationPreference": "automatic",
"C_Cpp.dimInactiveRegions": false
... ...
# 编译链的配置
#1、编译链与设备类型的选择
set(DEVICE_NAME JZ_H10T)
set(DEVICE_NAME JZ_H1E)
#上一行为禁止修改行
message("**************************JZSDK构建编译开始***************************\n")
... ...
... ... @@ -24,6 +24,7 @@ extern "C" {
#include "./JZsdk_ReturnCode.h"
#include "./JZsdk_FileType.h"
#include "./JZsdk_WidgetCode.h"
#include "./JZsdk_DefineCode.h"
/* Exported types ------------------------------------------------------------*/
... ...
#include <stdio.h>
#include "./JZsdk_DefineCode.h"
unsigned char * JZsdk_DefineCode_GetPortName(int Port)
{
switch (Port)
{
case UART_4G:
return "设备4G";
break;
case UART_DEV_1:
return "设备UART1";
break;
case UART_DEV_2:
return "设备UART2";
break;
case HAL_DATA_TRANSMISSION:
return "HAL数据";
break;
case NO_SPECIFIED:
return "无指定设备";
break;
default:
return "无指定设备";
break;
}
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZsdk_DefiningCode.h
* 用于记录各种定义类型的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_DEFININGCODE_H
#define JZSDK_DEFININGCODE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C"
{
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
typedef enum
{
DEVICE_PSDK = 0x1000, // psdk功能
UART_4G = 0x1001, // 4G功能
UART_DEV_1 = 0x1002, // 1号设备功能
UART_DEV_2 = 0x1003, // 2号设备功能
UART_DEV_3 = 0x1004, // 3号设备功能
UART_DEV_4 = 0x1005, // 4号设备功能
UART_DEV_5 = 0x1006, // 5号设备功能
UART_USB_1 = 0x1100, // usb设备
UART_USB_2 = 0x1101, // usb设备
UART_USB_3 = 0x1102, // usb设备
UART_USB_4 = 0x1103, // usb设备
UART_USB_5 = 0x1104, // usb设备
HAL_DATA_TRANSMISSION = 0x1200, // hal定制的特殊数据传播
COMBINE_DEVICE = 0x1998, // 组合设备
NO_SPECIFIED = 0x1999, // 无制定设备
} JZ_DEVICE_PORT_TYPE;
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
... ... @@ -21,25 +21,6 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#define DEVICE_PSDK 0x1000 //psdk功能
#define UART_4G 0x1001 //4G功能
#define UART_DEV_1 0x1002 //1号设备功能
#define UART_DEV_2 0x1003 //2号设备功能
#define UART_DEV_3 0x1004 //3号设备功能
#define UART_DEV_4 0x1005 //4号设备功能
#define UART_DEV_5 0x1006 //5号设备功能
#define UART_USB_1 0x1100 //usb设备
#define UART_USB_2 0x1101 //usb设备
#define UART_USB_3 0x1102 //usb设备
#define UART_USB_4 0x1103 //usb设备
#define UART_USB_5 0x1104 //usb设备
#define HAL_DATA_TRANSMISSION 0x1200 //hal定制的特殊数据传播
#define COMBINE_DEVICE 0x1998 //组合设备
#define NO_SPECIFIED 0x1999 //无制定设备
//展架通讯串口
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
... ...
... ... @@ -7,19 +7,19 @@
#define VERSION_CHOOSE_H
#include "./ConfigParams.h"
//1~10行 除了D可以修改版本选择 禁止动任何东西
#define DEVICE_VERSION JZ_H10T
#define DEVICE_VERSION JZ_H1E
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_PSDK
#define APP_VERSION APP_UART
//禁止修改行 板子型号
#define PLATFORM_VERSION PLATFORM_V3S
//禁止修改行 串口连接程序的软件版本号
#define MAJOR_VERSION 0x01
#define MINOR_VERSION 0x03
#define MODIFY_VERSION 0x09
#define DEBUG_VERSION 0x03
#define MAJOR_VERSION 0x00
#define MINOR_VERSION 0x00
#define MODIFY_VERSION 0x02
#define DEBUG_VERSION 0x09
//禁止修改行 滤波方式
#define FILTERING_TYPE HIGH_PASS_FILTERING
... ...
... ... @@ -9,6 +9,8 @@
#include <stdio.h>
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include "Hal_Recv/HalRecv_type1/HalRecv_type1.h"
#include "Hal_Recv/HalRecv_type1/HalRecv_type1_RecvDeal.h"
/***************
*
... ... @@ -19,12 +21,27 @@
* 输入要 处理的原始数据data 以及 数据长度DataLen 还有输入的接口
* 返回值:未处理的长度数据
*
* 返回后在
* 该协议的帧排序为
*
* 帧头三位 0x5A 0x5A 0x77 | 组成了实际的帧头
* 帧长度两位 0x00 0x00 |
*
* 应答位一位 0x00 | 组成了识别顺序的部分
* 帧序列一位 0x00 |
*
* 一级功能码一位 0x00 | 组成了数据功能识别的部分
* 二级功能码一位 0x00 |
*
* 数据位 不定 | 用于描述该帧的实际内容
*
* 帧尾两位 0x00 0x23 | 祖册了实际的帧尾
*
* ********************/
int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int DataLen, int Port)
int HalRecv_type1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int DataLen, int Port)
{
int ResidualLength = 0; // 剩余数据长度
//串口打印
switch (Port)
{
case UART_DEV_1:
... ... @@ -63,9 +80,10 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D
int FrameLen = 0;
//将数据提取出来
//为什么是减3呢,因为帧头为3位
for (HaveReadLen = 0; HaveReadLen <= (DataLen - 3); )
{
//查找是否存在 帧头
//查找是否存在帧头
switch (Data[HaveReadLen])
{
case 0x5A:
... ... @@ -124,28 +142,34 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D
break;
}
//没有检测到帧头,向后继续查找
if (FrameFlag == 0x00)
{
if (HaveReadLen >= (DataLen - 5))
{
//JZSDK_LOG_INFO("没有找到帧头");
}
{
HaveReadLen++;
continue;
}
//如果有帧头,则先判断前面有没有多余的数据残留,并将其移除
//如果有帧头
//判断前面有没有多余的数据残留,并将其移除
if (HaveReadLen > HaveDealLen)
{
//JZSDK_LOG_INFO("残余处理%d",(HaveReadLen - HaveDealLen));
HaveDealLen = HaveReadLen;
}
//检查帧长度是否超出数据剩余的内容
//检查此时的剩余长度是否足够容纳帧长度位
if ((DataLen - HaveReadLen) < 5)
{
//如果已经容纳不下长度位了,则返回内容
ResidualLength = (DataLen - HaveReadLen);
return ResidualLength;
}
//此时有足够的长度位置,可以计算长度,检查帧长度是否超出数据剩余的内容
FrameLen = (((int)Data[HaveReadLen+3]) << 8) + (int)Data[HaveReadLen+4];
if (FrameLen > (DataLen - HaveReadLen))
{
//JZSDK_LOG_DEBUG("当前帧长度位长度%d 超出剩余帧长度%d ",FrameLen,(getbufLen - HaveReadLen));
//JZSDK_LOG_DEBUG("当前帧长度位长度%d 超出剩余帧长度%d ",FrameLen,(DataLen - HaveReadLen));
// 直接跳出for循环
break;
}
... ... @@ -160,32 +184,118 @@ int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int D
//以上检查都没问题,则正常输出帧
//JZSDK_LOG_INFO("正常输出帧%d",FrameLen);
HalRecv_type1_FrameDeal(Port, &Data[HaveReadLen], FrameLen);
//UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveReadLen], FrameLen);
HaveReadLen = HaveReadLen + FrameLen;
HaveDealLen = HaveReadLen;
JZSDK_LOG_INFO("Prot:%x f_len%d h_r%d [h_r]:%x get%d",Port,FrameLen ,HaveReadLen, getbuf[HaveReadLen-1], DataLen);
JZSDK_LOG_INFO("Prot:%x f_len%d h_r%d [h_r]:%x get%d",Port,FrameLen ,HaveReadLen, Data[HaveReadLen-1], DataLen);
FrameLen = 0;
FrameFlag = 0;
}
// 如果没有数据残留了
// 如果没有数据残留了,可以直接退出了
if (HaveDealLen >= DataLen)
{
//printf("HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen);
//printf("HaveReadLen:%d HaveDealLen%d DataLen:%d\n",HaveReadLen,HaveDealLen,DataLen);
ResidualLength = 0;
return ResidualLength;
}
else
{
// 到达这里时
// 完整的帧 已处理
// 有帧头且长度为4的帧则已返回
// 没有剩余数据则已返回
// 剩下的是
// 1、剩余长度为所有0~3的帧
// 2、切帧的帧(即带帧头 长度大于4 小于帧长度的帧)
// 3、以及无实际意义数据
// 如果有帧头与长度位判定, 说明是切帧的帧,判断长度是否合理,如果合理返回帧长度给接收线程
if (FrameFlag != 0) //bu
{
// 1、判断帧的长度会不会不合理,帧的长度最大为文件名帧,其长度为9+2+1024
if (FrameLen > (9 + 2 + 1024))
{
// 将其移除数据
HaveDealLen = HaveReadLen;
ResidualLength = 0;
return ResidualLength;
}
printf("切帧返回%d\n",(DataLen - HaveDealLen));
// 2、如果合理,则返回剩余长度
ResidualLength = (DataLen - HaveDealLen);
return ResidualLength;
}
//接下来判断1类型
//检查最后3位
for (; HaveReadLen < DataLen - 2; HaveReadLen++)
{
if ((Data[HaveReadLen] == 0x5A && Data[HaveReadLen + 1] == 0x5A && Data[HaveReadLen + 2] == 0x77) ||
(Data[HaveReadLen] == 0x5B && Data[HaveReadLen + 1] == 0x5B && Data[HaveReadLen + 2] == 0x77) ||
(Data[HaveReadLen] == 0x6A && Data[HaveReadLen + 1] == 0x6A && Data[HaveReadLen + 2] == 0x77) ||
(Data[HaveReadLen] == 0x6B && Data[HaveReadLen + 1] == 0x6B && Data[HaveReadLen + 2] == 0x77))
{
//如果最后三位前还有数据,将其清空
if ((HaveReadLen - HaveDealLen) > 0)
{
HaveDealLen = HaveReadLen;
}
printf("检查最后3 4位%d\n",(DataLen - HaveDealLen));
ResidualLength = (DataLen - HaveDealLen);
return ResidualLength;
}
}
return ResidualLength;
}
//检查最后两位
for (; HaveReadLen < DataLen - 1; HaveReadLen++)
{
if ((Data[HaveReadLen] == 0x5A && Data[HaveReadLen + 1] == 0x5A) ||
(Data[HaveReadLen] == 0x5B && Data[HaveReadLen + 1] == 0x5B) ||
(Data[HaveReadLen] == 0x6A && Data[HaveReadLen + 1] == 0x6A) ||
(Data[HaveReadLen] == 0x6B && Data[HaveReadLen + 1] == 0x6B))
{
if ((HaveReadLen - HaveDealLen) > 0)
{
HaveDealLen = HaveReadLen;
}
printf("检查最后两位%d\n",(DataLen - HaveDealLen));
static T_JZsdkReturnCode
\ No newline at end of file
ResidualLength = (DataLen - HaveDealLen);
return ResidualLength;
}
}
//检查最后一位
for (; HaveReadLen < DataLen - 0; HaveReadLen++)
{
if (Data[HaveReadLen] == 0x5A ||
Data[HaveReadLen] == 0x5B ||
Data[HaveReadLen] == 0x6A ||
Data[HaveReadLen] == 0x6B)
{
if ((HaveReadLen - HaveDealLen) > 0)
{
HaveDealLen = HaveReadLen;
}
printf("检查最后一位%d\n",(DataLen - HaveDealLen));
ResidualLength = (DataLen - HaveDealLen);
return ResidualLength;
}
}
//都检查完了,还是没有帧头在里面,清空所有数据
ResidualLength = 0;
return ResidualLength;
}
... ...
/**
********************************************************************
* @file HalRecv_tpye1.h
* HalRecv_tpye1.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef HALRECV_TPYE1_H
#define HALRECV_TPYE1_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int HalRecv_tpye1_PreliminaryScreeningOfData(unsigned char *Data, unsigned int DataLen, int Port);
#ifdef __cplusplus
}
#endif
#endif
... ...
/**
********************************************************************
* @file HalRecv_type1_RecvDeal.h
* HalRecv_type1_RecvDeal
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef HALRECV_TYPE1_RECVDEAL_H
#define HALRECV_TYPE1_RECVDEAL_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode HalRecv_type1_FrameDeal(int Port, unsigned char *getbuf, int len);
#ifdef __cplusplus
}
#endif
#endif
... ...
... ... @@ -8,6 +8,7 @@
#include "JZsdk_Base/JZsdk_FrameComparsion/JZsdk_FrameComparsion.h"
#include "JZsdk_uart/JZsdk_Uart_UartDeal.h"
#include "BaseConfig.h"
#include "Hal_Recv/HalRecv_type1/HalRecv_type1.h"
typedef struct
{
... ... @@ -365,7 +366,7 @@ static void *JZsdk_hal_data_deal(void *arg)
}
// 处理数据
ResidualLength = UartDeal_Recv_interface(1,HAL_DATA_TRANSMISSION, args->Message, args->MessageLength);
ResidualLength = HalRecv_type1_PreliminaryScreeningOfData(args->Message, args->MessageLength, HAL_DATA_TRANSMISSION);
//如果还有剩余的长度
if (ResidualLength != 0)
{
... ...
... ... @@ -8,12 +8,13 @@
#include <termios.h>
#include <sys/time.h>
#include "JZsdk_uart/Uart_Config.h"
#include "JZsdk_Uart_Recv/JZsdk_Uart_RecvDeal.h"
#include "JZsdkLib.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "JZsdk_TaskManagement/TaskManagement.h"
#include "JZsdk_Uart_UartDeal.h"
#include "Hal_Recv/HalRecv_type1/HalRecv_type1.h"
#if APP_VERSION == APP_PSDK
#include "data_transmission/test_data_transmission.h"
... ... @@ -301,7 +302,7 @@ static void *UartDeal_deal(void *arg)
if (args->MessageLength > 0)
{
//处理数据
ResidualLength = UartDeal_Recv_interface(0, args->UartFd, args->Message, args->MessageLength);
ResidualLength = HalRecv_tpye1_PreliminaryScreeningOfData(args->Message, args->MessageLength, args->UartDevName);
//如果还有剩余的长度
if (ResidualLength != 0) //将其返还到缓冲区
... ... @@ -357,346 +358,6 @@ static void *UartDeal_deal(void *arg)
**********************************************************************************************************************/
/*
数据排出函数
*/
static int UartDeal_Recv_Ouput(int tpye, int fd, unsigned char *getbuf, int ReadLen)
{
//JZSDK_LOG_INFO("UartDeal_Recv_Ouput排出函数%d",ReadLen);
if (tpye == 0)
{
if (fd == Uart_DEV1_fd)
{
JZsdk_Uart_RecvDeal_CharmDeal(UART_DEV_1, getbuf, ReadLen);
}
else if (fd == Uart_DEV2_fd)
{
JZsdk_Uart_RecvDeal_CharmDeal(UART_DEV_2, getbuf, ReadLen);
}
else if (fd == Uart_4G_fd)
{
JZsdk_Uart_RecvDeal_CharmDeal(UART_4G, getbuf, ReadLen);
}
else
{
JZSDK_LOG_ERROR("接收到的数据不是从正常串口来的");
return 0;
}
}
else if (tpye == 1)
{
if (fd == HAL_DATA_TRANSMISSION)
{
JZsdk_Uart_RecvDeal_CharmDeal(HAL_DATA_TRANSMISSION, getbuf, ReadLen);
}
else
{
JZSDK_LOG_ERROR("接收到的数据不是从hal_transmisson来的");
return 0;
}
}
}
/*
处理数据接口,返回没有处理的数据长度
*/
int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int getbufLen)
{
//0即是串口内容
if (type == 0)
{
if (Uart_fd == Uart_DEV1_fd)
{
//JZSDK_LOG_INFO("串口-设备1号,接受到数据+未处理数据的长度len: %d", getbufLen);
}
else if (Uart_fd == Uart_DEV2_fd)
{
//JZSDK_LOG_INFO("串口-设备2号,接受到数据+未处理数据的长度len: %d", getbufLen);
}
else if (Uart_fd == Uart_4G_fd)
{
//JZSDK_LOG_INFO("串口-设备4G,接受到数据+未处理数据的长度len: %d", getbufLen);
}
else
{
JZSDK_LOG_ERROR("接收到的数据不是从正常串口来的");
return 0;
}
}
else if (type == 1)
{
if (Uart_fd == HAL_DATA_TRANSMISSION)
{
//JZSDK_LOG_INFO("hal_data,接受到数据+未处理数据的长度len: %d", getbufLen);
}
else
{
JZSDK_LOG_ERROR("接收到的数据不是从hal_transmisson来的");
return 0;
}
}
// 是否要打印内容
// printf("getbuf: %s\n", getbuf);
// for (int i = 0; i < getbufLen; i++)
// {
// printf("%x ", getbuf[i]);
// }
// printf("\n");
int HaveReadLen = 0; // 已读长度
int HaveDealLen = 0; // 已处理长度
int FrameFlag = 0; // 帧标志
int FrameLen = 0;
// 检索出帧数据
// 遍历数据找帧头,直到数据的倒数第4位,如果这里有帧,帧存在帧头3位+数据长度两位
//printf("遍历开始\n");
for (HaveReadLen = 0; HaveReadLen < (getbufLen - 4); )
{
// 1、如果找到 5A 5B 6A 6B 判断是否是帧
switch (getbuf[HaveReadLen])
{
case 0x5A:
if ( (getbuf[HaveReadLen + 1] == 0x5A) && (getbuf[HaveReadLen + 2] == 0x77))
{
//JZSDK_LOG_INFO("输入5A");
FrameFlag = 0x5A;
break;
}
else
{
FrameFlag = 0x00;
break;
}
case 0x5B:
if ((getbuf[HaveReadLen + 1] == 0x5B) && (getbuf[HaveReadLen + 2] == 0x77))
{
//JZSDK_LOG_INFO("输入5B");
FrameFlag = 0x5B;
break;
}
else
{
FrameFlag = 0x00;
break;
}
case 0x6A:
if ((getbuf[HaveReadLen + 1] == 0x6A) && (getbuf[HaveReadLen + 2] == 0x77))
{
//JZSDK_LOG_INFO("输入6A");
FrameFlag = 0x6A;
break;
}
else
{
FrameFlag = 0x00;
break;
}
case 0x6B:
if ((getbuf[HaveReadLen + 1] == 0x6B) && (getbuf[HaveReadLen + 2] == 0x77))
{
//JZSDK_LOG_INFO("输入6B");
FrameFlag = 0x6B;
break;
}
else
{
FrameFlag = 0x00;
break;
}
default:
FrameFlag = 0x00;
break;
}
if (FrameFlag == 0)
{
if (HaveReadLen >= (getbufLen - 5))
{
//JZSDK_LOG_INFO("没有找到帧头");
}
HaveReadLen++;
continue;
}
// 3、如果有帧头,则先判断前面有没有多余的数据残留,并将其排出到处理线程
if ((HaveReadLen - HaveDealLen) > 0)
{
//JZSDK_LOG_INFO("残余处理%d",(HaveReadLen - HaveDealLen));
UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));
HaveDealLen = HaveReadLen;
}
// 4、检查帧长度是否超过数组剩余内容
FrameLen = (((int)getbuf[HaveReadLen+3]) << 8) + (int)getbuf[HaveReadLen+4];
if (FrameLen > (getbufLen - HaveReadLen))
{
JZSDK_LOG_DEBUG("当前帧长度位长度%d 超出剩余帧长度%d ",FrameLen,(getbufLen - HaveReadLen));
// 直接跳出for循环
break;
}
//5、检查帧长度是否为0,避免卡死接收串口
if (FrameLen == 0)
{
JZSDK_LOG_ERROR("严重错误,接收到的帧出现长度为空");
//直接清空接收的数组
return 0;
}
// 6、以上检查都没问题,则正常输出帧
//JZSDK_LOG_INFO("正常输出帧%d",FrameLen);
UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveReadLen], FrameLen);
HaveReadLen = HaveReadLen + FrameLen;
HaveDealLen = HaveReadLen;
JZSDK_LOG_INFO("fd:%x f_len%d h_r%d [h_r]:%x get%d", Uart_fd,FrameLen ,HaveReadLen, getbuf[HaveReadLen-1], getbufLen);
FrameLen = 0;
FrameFlag = 0;
}
//JZSDK_LOG_INFO("UartDeal_Recv_Ouput%d %d %d",HaveDealLen,HaveReadLen , getbufLen);
// 如果没有数据残留了
if (HaveDealLen >= getbufLen)
{
//printf("HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen);
return 0;
}
// 如果是有帧头的情况跳出的,说明是帧被切了,需要返回帧长度给接收线程
if (FrameFlag != 0) //bu
{
// 1、判断帧的长度会不会不合理,帧的长度最大为文件名帧,其长度为9+2+400
if (FrameLen > (9 + 2 + 400))
{
// 将其排出不返回
UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveReadLen], (getbufLen - HaveReadLen));
HaveDealLen = HaveReadLen;
return 0;
}
printf("切帧返回%d\n",(getbufLen - HaveDealLen));
// 2、如果合理,则返回剩余长度
return (getbufLen - HaveDealLen);
}
// 如果是没有帧头的情况下跳出的
// 1、先检查 未经检查最后 最后4 3位
//如果还有4 或者 3 位未处理
for (; HaveReadLen < getbufLen - 2; HaveReadLen++)
{
if ((getbuf[HaveReadLen] == 0x5A && getbuf[HaveReadLen + 1] == 0x5A && getbuf[HaveReadLen + 2] == 0x77) ||
(getbuf[HaveReadLen] == 0x5B && getbuf[HaveReadLen + 1] == 0x5B && getbuf[HaveReadLen + 2] == 0x77) ||
(getbuf[HaveReadLen] == 0x6A && getbuf[HaveReadLen + 1] == 0x6A && getbuf[HaveReadLen + 2] == 0x77) ||
(getbuf[HaveReadLen] == 0x6B && getbuf[HaveReadLen + 1] == 0x6B && getbuf[HaveReadLen + 2] == 0x77))
{
if ((HaveReadLen - HaveDealLen) > 0)
{
UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));
HaveDealLen = HaveReadLen;
}
printf("检查最后3 4位%d\n",(getbufLen - HaveDealLen));
return (getbufLen - HaveDealLen);
}
}
// 2、检查最后两位
// 如果还有两位未处理
for (; HaveReadLen < getbufLen - 1; HaveReadLen++)
{
if ((getbuf[HaveReadLen] == 0x5A && getbuf[HaveReadLen + 1] == 0x5A) ||
(getbuf[HaveReadLen] == 0x5B && getbuf[HaveReadLen + 1] == 0x5B) ||
(getbuf[HaveReadLen] == 0x6A && getbuf[HaveReadLen + 1] == 0x6A) ||
(getbuf[HaveReadLen] == 0x6B && getbuf[HaveReadLen + 1] == 0x6B))
{
if ((HaveReadLen - HaveDealLen) > 0)
{
UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));
HaveDealLen = HaveReadLen;
}
printf("检查最后两位%d\n",(getbufLen - HaveDealLen));
return (getbufLen - HaveDealLen);
}
}
// 2、检查最后一位
// 如果还有一位未处理
for (; HaveReadLen < getbufLen - 0; HaveReadLen++)
{
// 1、检查最后一位
if (getbuf[HaveReadLen] == 0x5A ||
getbuf[HaveReadLen] == 0x5B ||
getbuf[HaveReadLen] == 0x6A ||
getbuf[HaveReadLen] == 0x6B)
{
if ((HaveReadLen - HaveDealLen) > 0)
{
UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));
HaveDealLen = HaveReadLen;
}
printf("检查最后一位%d\n",(getbufLen - HaveDealLen));
return (getbufLen - HaveDealLen);
}
}
// 都检查完了,还是没有帧头在里面, 将剩余的所有数据排出
UartDeal_Recv_Ouput(type, Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen));
printf("检查完毕,排出剩余数据HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen);
return 0;
}
/**********
*
* 无任务发送函数
*
* ***********/
T_JZsdkReturnCode JZsdk_Uart_UartSend_NotTask(int Uart_Name, unsigned char *str, int str_lenth)
{
if (Uart_Name == UART_4G)
{
printf("向4G设备发送\n");
write(Uart_4G_fd, str, str_lenth);
}
else if (Uart_Name == UART_DEV_1)
{
printf("向串口1号设备发送\n");
write(Uart_DEV1_fd, str, str_lenth);
}
else if (Uart_Name = UART_DEV_2)
{
printf("向串口2号设备发送\n");
write(Uart_DEV2_fd, str, str_lenth);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
typedef struct {
char* str;
int str_lenth;
... ...