解决USB转串口数据拆包问题的方法!防止USB转串口数据拆包的技巧

来源:豆ok3301 时间:2023-04-04 22:42:51

解决USB转串口数据拆包的问题的方法。在读回调函数中,定义了一个缓冲区来存储读取的数据。当数据可用时,将其添加到缓冲区中,同时检查缓冲区中是否存在完整的数据帧。如果存在完整的数据帧,则将其传递给tty驱动缓冲区。在传递完整的数据帧后,将其从缓冲区中删除,以便存储下一个数据帧。该方法可以确保数据不会被拆分,并且只有完整的数据帧会被传递给tty驱动缓冲区。


【资料图】

数据被拆分成多个部分,每个部分之间有明显的时间间隔。这可能是由于传输速率过慢,导致数据被拆成多个部分,或者是由于数据帧之间没有使用正确的分隔符。

为了将完整的数据传递给tty驱动缓冲区,您可以使用以下方法:

1、在读回调函数中定义一个缓冲区,用于存储读取的数据。

2、当数据可用时,将其添加到缓冲区中,同时检查缓冲区中是否存在完整的数据帧。

3、如果缓冲区中存在完整的数据帧,则将其传递给tty驱动缓冲区,使用tty_flip_buffer_push函数。

4、在传递完整的数据帧后,将其从缓冲区中删除,以便存储下一个数据帧。

以下是一个可能的实现示例:

#define MAX_BUFFER_SIZE 1024

static char buffer[MAX_BUFFER_SIZE];

static int buffer_pos = 0;

void usb_serial_generic_read_bulk_callback(struct urb *urb)

{

// Check for errors and handle them

if (urb->status) {

return;

}

// Get the received data and its length

char *data = urb->transfer_buffer;

int len = urb->actual_length;

// Add the received data to the buffer

memcpy(buffer + buffer_pos, data, len);

buffer_pos += len;

// Check if there is a complete data frame in the buffer

int i = 0;

while (i < buffer_pos) {

// Check for a complete data frame

if (buffer[i] == "<" && buffer[i + 7] == ">") {

// Copy the data frame to a new buffer

char frame[8];

memcpy(frame, buffer + i, 8);

// Pass the data frame to tty driver buffer

tty_flip_buffer_push(tty->port);

// Remove the data frame from the buffer

memmove(buffer, buffer + i + 8, buffer_pos - i - 8);

buffer_pos -= i + 8;

i = 0;

} else {

i++;

}

}

}

在这个示例中,假设数据帧以<开头,以>结尾,长度为8个字节。每当接收到一些数据时,它将添加到buffer中。然后,它将在buffer中查找完整的数据帧。如果找到了完整的数据帧,则将其传递给tty驱动缓冲区,并将其从buffer中删除。这将保证数据不会被拆分,并且只有完整的数据帧会被传递给tty驱动缓冲区。

X 关闭

解决USB转串口数据拆包问题的方法!防止USB转串口数据拆包的技巧

解决USB转串口数据拆包的问题的方法。在读回调函数中,定义了一个缓冲区来存储读取的数据。当数据可用时,将其添加到缓冲区中,同时检查缓冲区

2023-04-04

西安最新人口数据!增量全国第四、在校大学生超百万 全球快消息

西安最新人口数据!增量全国第四、在校大学生超百万,西安,武汉,增量,大学生,人口数据,自然增长率

2023-04-04

好书推荐:《新科技革命视域下劳动关系治理现代化研究》

《新科技革命视域下劳动关系治理现代化研究》孙璇著光明日报出版社二十一世纪以来,新一轮科技革命蓬勃兴起,人工智能、大数

2023-04-04

中材节能:联合体签订19.25亿元分布式发电项目EPC总承包合同_世界要闻

上证报中国证券网讯(记者孔子元)中材节能公告,公司和中国市政工程华北设计研究总院有限公司组成联合体,与红河华平新能源科技有限公司签订

2023-04-04

一次承诺,老人为烈士义务守墓38年 全球看点

今年清明节,叶官山比较忙碌。“这几天来了好多人,我要去给他们做义务讲解。”4月3日,这位82岁的铜陵义安区老人操着浓重的方言口音告诉人民

2023-04-04

南宁市人力资源和社会保障局地址_南宁市人力资源社会保障局

1、在桂春路南二里。2、你到了金洲路后,有个标致性的建筑区人才市场懂吧,在它旁边有个十字路口,你会看到广西人民出版社。3

2023-04-04

爱立信、英特尔携手推进马来西亚5G普及

爱立信、英特尔携手推进马来西亚5G普及,C114讯北京时间4月4日下午消息(蒋均牧)爱立信和英特尔推进了促进马来西亚5G普及的计划,称该技

2023-04-04

杭州小伙高速开特斯拉 “自动驾驶”变“自动撞车” 环球视点

杭州小伙高速开特斯拉“自动驾驶”变“自动撞车”

2023-04-04

中孚实业:子公司年产50万吨铝循环再生项目首期预计年底基本建成 视焦点讯

中孚实业近期接受机构调研时表示,2023年,公司子公司巩义市汇丰再生资源有限公司将新建年产50万吨铝循环再生项目,其中首期建设年产15万吨UBC

2023-04-04

亨德逊夫人的礼物 天天速递

亨德逊夫人的礼物,这样的礼物不是很多,但是如果想送礼物给父母,可以选择一些实用的礼物,像一些定制的保暖内衣,都是不错的选

2023-04-04

Copyright ?  2015-2022 华东科技网版权所有  备案号:京ICP备2022016840号-41   联系邮箱:2 913 236 @qq.com