【发布时间】:2012-06-09 11:11:06
【问题描述】:
我为 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。 如果我有一个完整的扫描,我需要解析这个 ascii 消息的不同部分(一些变量 uint_16、uint_8、enum_16、...)。
知道如何将完整的扫描读入 buf[],然后解析其组件吗?
【问题讨论】: