首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有函数USB的Linux USB小工具:读取终结点1不成功

带有函数USB的Linux USB小工具:读取终结点1不成功
EN

Stack Overflow用户
提问于 2019-06-25 20:48:45
回答 1查看 715关注 0票数 0

我想在装有WINUSB驱动程序的Windows10-PC上使用iMX7-SOM作为特定于供应商的设备(小工具)。我在Kernel v4.9.166中使用了一个基于Angstrom的Yocto制作的镜像。

我用libusbgx配置了这个小工具,在/ffs上挂载了函数ffs,并将解析器写到了/ff/ep0。设备按照预期被枚举,我在端点0上得到了命令(如"BIND","ENABLE","DISABLE“等)。

太久太好了..。

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

我使用select()代替,但结果完全相同。

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

代码语言:javascript
复制
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");
    }
}

我期望当我打开我的应用程序时,select/poll函数将返回,并且端点将由主机编写。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 15:16:03

我自己找到了答案:

似乎只有端点0 (ep0)支持轮询功能。

当您查看轮询(link)支持的操作时,您可以发现‘ep0’有一个处理程序。相比之下,其他端点(epX)没有类似的功能(link)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56754470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档