Я пытаюсь использовать API-функцию FS для реализации пользовательского USB-устройства.Мне удалось настроить дескрипторы устройств с помощью configFS, а также интерфейс и дескрипторы enpoint через functionFS.Чтобы иметь более детерминированную нумерацию конечных точек (функцияFS делает это в фоновом режиме), я попытался использовать флаг FUNCTIONFS_VIRTUAL_ADDR, который называет файлы конечных точек, например, «ep02» и «ep81» вместо «ep2» и «ep1».
Моя проблема сейчас в том, что как только я использую флаг FUNCTIONFS_VIRTUAL_ADDR, я больше не могу получать массовые переводы.Файлы конечной точки есть (в моем случае «/ mnt / ffs / ep02» и «/ mnt / ffs / ep81»), но чтение файла ep02 не возвращает никакого содержимого.
Кто-нибудь имеет опыт работы сthis?
cheers benjo
Я прослушал трафик с помощью 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.
}
}