Накурился я этой хрени ... голова кругом
Report descriptor в ст-шных либах я нашёл, он у них там нормально вычитывается, но полностью игнорится.
Также нашёл, где они включают мыше boot протокол.
Я скинул этот дескриптор (мышь Logitech RX250) в комп через UART, руками расшифровал его:
Код
05 01 - 05 01 - Usage page (Generic Desktop)
09 02 - 09 02 - Usage ID (Mouse)
A1 01 - A1 01 - Collection (Application)
09 01 - 09 01 - Usage Page (Pointer) -- описатель - указатель
a1 00 - A1 00 - Collection (Physical)
05 09 - 05 09 - Usage Page (Buttons) -- описатель - кнопка
19 01 - 19 01 - Usage Minimum (01) -- мин номер кнопки
29 08 - 29 08 - Usage Maximum (08) -- макс номер кнопки
15 00 - 15 00 - Logical Minimum (00) -- мин значение кнопки
25 01 - 25 01 - Logical Maximum (01) -- макс значение кнопки
95 08 - 95 08 - Report Count (08) -- кол-во полей в репорте = 8
75 01 - 75 01 - Report Size (01) -- размер поля в битах = 1
81 02 - 81 02 - Input (Constant) -- тип - ввод данных в хост
95 00 - 95 00 - Report Count (00) -- кол-во полей в репорте = 0
81 03 - 81 03 - Input (Constant) -- тип - ввод данных в хост
05 01 - 05 01 - Usage page (Generic Desktop)
09 30 - 09 30 - Usage (X) -- x координата
09 31 - 09 31 - Usage (Y) -- Y координата
09 38 - 09 38 - Usage ID (38) - wheel -- Описатель - колесо
15 81 - 15 81 - Logical Minimum (-127) -- мин значение
25 7F - 25 7F - Logical Maximum (127) -- макс значение
75 08 - 75 08 - Report Size (08) -- размер поля в битах = 8
95 03 - 95 03 - Report Count (03) -- кол-во полей в репорте = 3
81 06 - 81 02 - Input (Constant) -- Feature тип - ввод данных в хост
05 0C - 05 0C - Usage ???
0a 38 02 - 0a 38 02 - Usage ???? data = 0x0238
95 01 - 95 01 - Report Count (01) -- кол-во полей в репорте = 1
81 06 - 81 06 - Input (Constant) -- Feature тип - ввод данных в хост
c0 - C0 - End Collection
c0 - C0 - End Collection
Декодер дескриптора я честно слизал из NXP, подключил, но результаты пока нигде не использую.
Я переключил мышь в Report режим (такая возможность там заложена, но там задаётся boot режим)
А вот пример самого репорта:
00 01 ff 00 00
Размер 5 байт задан в дескрипторе конечной точки.
Как правильно его расшифровать, используя дескриптор?
Как я понимаю: 1-й байт - кнопки (почему-то 8 штук, хотя их там 3

).
Потом 3 байта координаты и колесо.
Что такое 5-й байт, я не понял

. В то же время есть какой-то непонятные usage:
05 0C - 05 0C - Usage ???
0a 38 02 - 0a 38 02 - Usage ???? data = 0x0238
95 01 - 95 01 - Report Count (01) -- кол-во полей в репорте = 1
81 06 - 81 06 - Input (Constant) -- Feature тип - ввод данных в хост
судя по всему оно одно другому соответствует.
Вторую мышь завтра покажу. Там дескриптор совсем не такой.
Второй вопрос. Скорее 2-я пачка вопросов:
Репорты валят из мыши постоянно, практически непрерывным потоком. При этом там идут полные дубли, если мышь не двигается. На фига?
Это какой-то ST-шный косяк или же это делается специально и я должен сам проверять, получил ли я дубль или что-то изменилось?
И вдогонку:
Судя по дескриптору, в вышеприведенном репорте байты 01 FF 00 - это X, Y, колесо. Т.е. по X там +1, по Y - -1, колесо - 0 (т.е. не двигалось).
Но эти числа меняются как-то странно - такое ощущение, что слишком быстро. Но я даже в этом не уверен.
Можно ли как-то управлять скоростью?
В PS2 мышах есть команда задания скорости к каких-то там DPI. Здесь я такого не нашёл. Хотя в той же винде такая регулировка есть.
Или это некая программная имитация?
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда