我正在尝试利用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.
}
}