USB小工具-FunctionFS:如何使用标志FUNCTIONFS_VIRTUAL_ADDR访问端点

时间:2019-04-10 14:54:39

标签: c++ linux usb

我正在尝试利用functionFS API来实现自定义USB设备。我设法通过configFS以及接口设置了设备描述符,并通过functionFS指定了描述符。 为了获得更具确定性的端点编号(functionFS在后台执行),我尝试使用标志FUNCTIONFS_VIRTUAL_ADDR,该标志将端点文件命名为“ ep02”和“ ep81”,而不是“ ep2”和“ ep1”。

我现在的问题是,一旦我使用标志FUNCTIONFS_VIRTUAL_ADDR,我将不再能接收批量传输。那里有端点文件(在我的情况下是“ / mnt / ffs / ep02”和“ / mnt / ffs / ep81”),但是读取ep02文件不会返回任何内容。

有人对此有任何经验吗?

欢呼本城

我已经用Wireshark嗅探了流量,并且可以看到从主机到端点0x02的批量传输,但是我的设备从未看到过此消息。

void Usb::dumpThread()
{
    std::ofstream ep1File(m_ffsPath + "/ep81");
    std::ifstream ep2File(m_ffsPath + "/ep02");

    static std::array<char, maxPacketSize> buffer;
    while (true)
    {
        ep2File.getline(&buffer[0], buffer.size(), '\0');
        if (ep2File.gcount() > 0)
        {
            std::cout << "Received " << ep2File.gcount() << " bytes." << std::endl;
            std::cout << reinterpret_cast<const char*>(&buffer[0]) << std::endl;
            std::string command(reinterpret_cast<const char*>(&buffer[1]));

            if (command == "ABC")
            {
                // do sth.
            }
}

0 个答案:

没有答案