我为 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 所有值用 20hex {SPC} 分隔
它认为我需要某种 while 循环来不断地从 \x02 读取数据,直到我读取 \x03。如果我有一个完整的扫描,我需要在其单独的部分(一些变量 uint_16、uint_8、enum_16、...)中解析这个 ascii 消息。
知道如何将完整扫描读入 buf[] 然后解析其组件吗?