/dev/myusbdev0 的命令行,我可以向设备-6ren">
gpt4 book ai didi

c++ - 在 C++ 中解析设备文件的 ASCII 输出

转载 作者:行者123 更新时间:2023-11-28 08:02:50 27 4
gpt4 key购买 nike

我为 USB 设备编写了内核空间驱动程序。例如,如果已连接,它会挂载到/dev/myusbdev0。通过带有 echo -en "command">/dev/myusbdev0 的命令行,我可以向设备发送命令并使用 cat/dev/myusbdev0 读取结果。

好的,现在我必须编写一个 C++ 程序。起初我会打开设备文件进行读/写:

int fd = open("/dev/echo", O_RDRW);

之后将发送一个 cmd 以使设备工作:

char cmd[] = { "\x02sEN LMDscandata 1\x03" };
write(fd, cmd, sizeof(cmd));

现在我到了我现在还不知道如何处理的部分。我现在需要从设备中读取数据,因为它不断地向我发送数据。我现在需要读取和解析这些数据......

char buf[512];
read(fd, buf, sizeof(buf);

数据如下所示,每一个都以\x02 开始并以\x03 结束,它们的大小并不总是相同:

sRA LMDscandata 1 1 89A27F 0 0 343 347 27477BA9 2747813B 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 186A0 1388 15 8A1 8A5 8AB 8AC 8A6 8AC 8B6 8C8 8C2 8C9 8CB 8C4 8E4 8E1 8EB 8E0 8F5 908 8FC 907 906 0 0 0 0 0 0 All Values are separated with a 20hex {SPC}

它认为我需要某种 while 循环来连续读取\x02 中的数据,直到我读取\x03。如果我有一个完整的扫描,我需要在它的单独部分(一些变量 uint_16、uint_8、enum_16、...)中解析这个 ascii 消息。

知道如何将完整扫描读入 buf[] 然后解析其组件吗?

最佳答案

正如你所说的设备连续发送,我建议添加一个队列来保存传入的 block ,并进行一些分派(dispatch)以取出部分队列,即 x02 到 x03,将完成的工作与接收 block 分离.

此外,您还可以让单个对象处理从 x02 到 x03 的一个完整 block ,也许是线程化的(对给定的信息有意义)。

设备=> block 读取器=>输入队列=>输入器读取器=>数据处理

希望对你有帮助

关于c++ - 在 C++ 中解析设备文件的 ASCII 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960495/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com