Перейти к содержанию
    

USB custom hid, длина пакета

16 минут назад, Сергей Борщ сказал:

Вот пришел пакет. Как вы его будете разбирать?

Чего его разбирать, в дескрипторе репорта указано, что нет Report ID, поэтому весь пакет отводится под данные, правильно?

18 минут назад, Сергей Борщ сказал:

только один тип Report-а, то он не передается. И номер его совершенно ни при чем. Во всех остальных случаях ReportID передается.

Вот это непонятно. Пробовал в проге на компе, указывать нулевой байт равный единице, при этом пакет не доходит до контроллера, т.е. этот байт все таки действует. И непонятно, если есть Report ID отличный от нуля, с компа отправлять 65 байт или 64?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 минуту назад, compote сказал:

Чего его разбирать, в дескрипторе репорта указано, что нет Report ID, поэтому весь пакет отводится под данные, правильно?

Как вы поймете, что его нет? 

 

51 минуту назад, compote сказал:

И непонятно, если есть Report ID отличный от нуля, с компа отправлять 65 байт или 64?

Я не знаю, как еще объяснить. Вроде уже и английскую цитату привел, и русским языком написал. Читайте по губам:

Если у вас может быть больше одного типа Report-ов, то Report-id передается всегда. Вне зависимости от его значения. Если Report только один - его Report-id можно не передавать, в этом случае он не указывается в дескрипторе.

Если ваш Report имеет размер 64 байта и вам нужно передавать Report-id - вы передаете 65 байтов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, Сергей Борщ сказал:

Как вы поймете, что его нет? 

Так для этого дескриптор репорта и служит, разве нет? При подключении, юсб устройство отдает хосту дескриптор девайса, конфигурации, интерфейса, класса устройства, конечных точек и репорта. И уже на основании этого, хост все знает про устройство. Если в дескрипторе репорта нет Report ID, значит он нулевой-) Правильно?

25 минут назад, Сергей Борщ сказал:

Если ваш Report имеет размер 64 байта и вам нужно передавать Report-id - вы передаете 65 байтов.

Как раз вот это и не понимаю. Пусть у меня есть Report ID - 1 байт, данные 64 байта, итого 1 + 64, но на контроллер приходит только 64 байта, из которых первый Report ID, это не так? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, compote сказал:

Если в дескрипторе репорта нет Report ID, значит он нулевой-) Правильно?

Значит его нет. Но если у вас несколько разных Report-ов, то нельзя сделать один без Report-id, а остальные с Report-id.

1 час назад, compote сказал:

Пусть у меня есть Report ID - 1 байт, данные 64 байта, итого 1 + 64, но на контроллер приходит только 64 байта, из которых первый Report ID, это не так? 

Это так, но это не весь Report. Конечная точка может передать за раз не более 64 байтов. Более длинные пакеты передаются за несколько транзакций. Если в очередной транзакции принялось меньше 64 байтов (даже 0 байтов)  - это конец пакета. Поэтому пакет длиной 64 байта передается как одна транзакция длиной 64 байта и вторая длиной 0 байтов. 65 байтов передаются как 64+1. Как чтение таких пакетов реализовано в кубе - я не в курсе. Может он сам выделяет Report-id.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...