реклама на сайте
подробности

 
 
> STM32F439 + USB мышь, Не работает
hd44780
сообщение Nov 29 2015, 16:14
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Привет всем.

Вот уже пару недель (непостоянно конечно rolleyes.gif ) пытаюсь завести USB мышку на USB хосте STM32F439.
Использовал СТ-шные либы и частично переделанные библиотеки немца - http://mikrocontroller.bplaced.net/wordpress/?page_id=2991
Результаты весьма плачевные - проверял на 3-х мышах:
1. (какой-то Logitch) не опознаётся, обламывается где-то на этапе энумерации. Там я не копался, забил пока на неё.
2. Logitech RX250 (PS2+USB) и Terratech mouse опознаются с полпинка, но ведут себя как пьяный заяц на дороге - даже если мыша просто лежит
на столе без движения, координаты как-то странно скачут, в подавляющем большинстве случаев в сторону увеличения, довольно быстро упираются
в заданные мною максимумы, на чём всё и замирает. Кнопки вроде нормально отрабатывают, но с задержкой в несколько секунд - от одной до 10 (на глаз).

Ну и ещё один общий вопрос.
В HID ядре прописана некая частота опроса мыши (HID устройства):
CODE
if ( HID_Machine.poll < HID_MIN_POLL)
{
HID_Machine.poll = HID_MIN_POLL;
} // if
....................

case HID_POLL:
t= HCD_GetCurrentFrame ( pdev ) - HID_Machine.timer;
if ( t >= HID_Machine.poll )
{ // прошло больше HID_Machine.poll SOF-ов
HID_Machine.state = HID_GET_DATA;
}
else if ( HCD_GetURB_State ( pdev, HID_Machine.hc_num_in ) == URB_DONE )
{
// handle data once
if ( start_toggle == 1 )
{
start_toggle = 0;
HID_Machine.cb->Decode ( HID_Machine.buff );
} // if
} // if
else if ( HCD_GetURB_State(pdev, HID_Machine.hc_num_in) == URB_STALL ) /* IN Endpoint Stalled */
{
/* Issue Clear Feature on interrupt IN endpoint */
if ( USBH_ClrFeature ( pdev, pphost, HID_Machine.ep_addr, HID_Machine.hc_num_in ) == USBH_OK )
{
/* Change state to issue next IN token */
HID_Machine.state = HID_GET_DATA;
}
} // if
break;


Зачем это сделано - понятно, но по факту это выполнимо только если проц выполняет один только USBH_Process(&USB_OTG_Core_dev, &USB_Host);в главном цикле. А если надо делать ещё что-то? Та же немецкая либа в чистом виде у меня не пошла именно из-за условия if ( t >= HID_Machine.poll )
Можно вызывать USBH_Process в каком-нибудь таймере, но я не знаю, насколько безопасно вызывать эту функцию в прерывании.

У кого-то USB-мышки работают? Может кто-то помочь?
Приложил свой проект, посмотрите кто может пожалуйста. На кокосе.
Спасибо.

PS.
USB клавиатуру я не пробовал, хотя и не вырезал.
Прикрепленные файлы
Прикрепленный файл  STM32F4x9_HID.zip ( 347.22 килобайт ) Кол-во скачиваний: 14
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
hd44780
сообщение Dec 23 2015, 19:09
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Накурился я этой хрени ... голова кругом wacko.gif
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 biggrin.gif ).
Потом 3 байта координаты и колесо.
Что такое 5-й байт, я не понял sad.gif . В то же время есть какой-то непонятные 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. Здесь я такого не нашёл. Хотя в той же винде такая регулировка есть.
Или это некая программная имитация?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- hd44780   STM32F439 + USB мышь   Nov 29 2015, 16:14
- - mantech   Цитата(hd44780 @ Nov 29 2015, 19:14) У ко...   Nov 29 2015, 17:00
|- - kovigor   Цитата(mantech @ Nov 29 2015, 21:00) Не у...   Nov 29 2015, 17:24
|- - aaarrr   Цитата(mantech @ Nov 29 2015, 20:00) Не у...   Nov 29 2015, 17:52
|- - mantech   Цитата(aaarrr @ Nov 29 2015, 20:52) Прави...   Nov 29 2015, 18:11
|- - aaarrr   Цитата(mantech @ Nov 29 2015, 21:08) Толь...   Nov 29 2015, 18:13
|- - mantech   Цитата(aaarrr @ Nov 29 2015, 21:13) Увы, ...   Nov 29 2015, 18:15
- - hd44780   Спасибо за ответы. С энумерацией понятно вроде. Гд...   Nov 30 2015, 12:54
|- - mantech   Цитата(hd44780 @ Nov 30 2015, 15:54) Спас...   Nov 30 2015, 14:22
- - hd44780   Ок. Буду смотреть.   Nov 30 2015, 14:54
- - hd44780   Скачал отсюда - https://www.lpcware.com/content/pr...   Dec 1 2015, 17:36
|- - mantech   Цитата(hd44780 @ Dec 1 2015, 20:36) Скача...   Dec 1 2015, 17:45
- - hd44780   ага. нашёл. спасибо.   Dec 1 2015, 17:48
|- - mantech   Цитата(hd44780 @ Dec 23 2015, 22:09) Наку...   Dec 23 2015, 20:24
- - hd44780   угу. спасибо. Радиомышки я на потом оставлю. Сейча...   Dec 24 2015, 08:36
|- - mantech   Цитата(hd44780 @ Dec 24 2015, 11:36) угу....   Dec 24 2015, 09:19
- - hd44780   Пытаюсь понять феномен этого автоповтора ...   Dec 24 2015, 10:53
- - hd44780   Посмотрел куб - там тоже бут протокол, но автоповт...   Dec 24 2015, 16:36
|- - mantech   Цитата(hd44780 @ Dec 24 2015, 19:36) Посм...   Dec 24 2015, 18:37
- - hd44780   Всех с наступающим! Переделал проект с нуля на...   Dec 30 2015, 08:39
|- - Огурцов   не хватает питания ?   Dec 30 2015, 09:49
- - hd44780   А хз. Питается от программаторского USB. Проверю.   Dec 30 2015, 12:33
- - hd44780   Всех с наступившими Новым годом и Рождеством. Пит...   Jan 7 2016, 18:04
- - Rash   извиняюсь за офф топик, может кто знает где можно ...   Jan 8 2016, 17:10
- - hd44780   Rash, я не знаю. Новую USB либу я увидел, когда са...   Jan 9 2016, 07:52
- - Огурцов   когда говорите либа, что это означает ?   Jan 9 2016, 11:11
- - hd44780   СТ-шники выкладывают архив: USB ядро, драйвера флэ...   Jan 9 2016, 12:42
|- - mantech   Цитата(hd44780 @ Jan 9 2016, 15:42) Факти...   Jan 9 2016, 18:37
|- - hd44780   Цитата(mantech @ Jan 9 2016, 21:37) А что...   Jan 10 2016, 09:11
- - Огурцов   немец крут но только поначалу потом оказывается, ч...   Jan 10 2016, 11:19
- - hd44780   Не, куба я у него пока не видел. У него SPL и не к...   Jan 10 2016, 13:02
- - Огурцов   старый куб был на spl, не ? в любом случае, пример...   Jan 10 2016, 14:34
|- - hd44780   Цитата(Огурцов @ Jan 10 2016, 17:34) стар...   Jan 10 2016, 15:28
|- - Огурцов   так либы на spl или это третья реинкарнация стшног...   Jan 10 2016, 16:34
- - hd44780   В USB либах SPL есть только в 2-х местах: 1. Файл ...   Jan 10 2016, 17:06
- - hd44780   Сделал флэшки на новой либе. На всех моих платах и...   Jan 19 2016, 07:57
|- - mantech   Цитата(hd44780 @ Jan 19 2016, 10:57) Тепе...   Jan 19 2016, 18:22
- - hd44780   Не, пока не хаб. Просто так или то или то. Хабовый...   Jan 20 2016, 08:26
|- - mantech   Цитата(hd44780 @ Jan 20 2016, 11:26) Не, ...   Jan 21 2016, 13:57
|- - mantech   Цитата(mantech @ Jan 21 2016, 16:57) Поль...   Jan 28 2016, 09:33
- - hd44780   Не, флэшки у меня нормально вроде пашут. Знакомый,...   Jan 22 2016, 13:17
|- - mantech   Цитата(hd44780 @ Jan 22 2016, 16:17) Не, ...   Jan 22 2016, 13:38
- - hd44780   Апну древнюю тему. Сейчас осталась только одна про...   Nov 27 2016, 16:12
|- - mantech   Цитата(hd44780 @ Nov 27 2016, 19:12) Поэт...   Nov 29 2016, 17:28
|- - hd44780   Цитата(mantech @ Nov 29 2016, 20:28) Рабо...   Nov 29 2016, 18:38
|- - mantech   Цитата(hd44780 @ Nov 29 2016, 21:38) вызы...   Nov 30 2016, 12:24
- - hd44780   угу. спасибо.   Nov 30 2016, 16:35
- - hd44780   Нашёл я, как это отловить, добавил туда свой флажо...   Dec 3 2016, 09:08


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th September 2025 - 16:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.02211 секунд с 7
ELECTRONIX ©2004-2016