gpt4 book ai didi

c - 具有 functionfs : reading endpoint 1 not successful 的 Linux USB 小工具

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:49 25 4
gpt4 key购买 nike

我想在带有 WINUSB 驱动程序的 Windows10-PC 上使用 iMX7-SOM 作为供应商特定设备(小工具)。我正在使用基于 Angstrom 的 Yocto 制作的图像和内核 v4.9.166。

我用 libusbgx 配置了小工具,将 functionfs 安装在/ffs 并将描述符写入/ffs/ep0。设备按预期枚举,我在端点 0 上获得命令(如“BIND”、“ENABLE”、“DISABLE”等)。

这么好...

在端点 0 接收到“ENABLE”后,我想打开/ffs/ep1 并使用 poll() 读取传入数据。但是 poll() 立即返回并且 read() 永远不会返回(仅当我拔出设备时)。在主机端,没有应用程序正在运行。

我改用 select() 但结果完全一样。

当我使用 ioctl(fd_of_ep_1, FUNCTIONFS_FIFO_STATUS) 时,我收到错误消息“不支持操作”。

int fd = open("/ffs/ep1", O_RDWR);

fd_set read_set;
FD_ZERO(&read_set);
FD_SET(fd, &read_set);

int ret = select(fd + 1, &read_set, NULL, NULL, NULL);
if (ret < 0)
{
perror("select");
}
else if (FD_ISSET(fd, &read_set))
{
int foo = ioctl(fd, FUNCTIONFS_FIFO_STATUS);
if (foo < 0) perror("ioctl");
else fprintf(stdout, "%i\n", foo);

char buffer[1024];
if (read(fd, buffer, sizeof(buffer)) < 0)
{
perror("ep read");
}
}

我预计当我打开我的应用程序时选择/轮询函数将返回并且端点将由主机写入。

最佳答案

我自己找到了答案:

好像只有端点0(ep0)支持轮询功能。

当您查看 ep0 ( link ) 支持的操作时,您会发现“poll”有一个处理程序。相比之下,其他端点 (epX) 没有类似的功能 (link)。

因此 epX 的 poll() 设置标志 POLLIN 并立即返回 ( link )。

关于c - 具有 functionfs : reading endpoint 1 not successful 的 Linux USB 小工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56754470/

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