AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
19.05.2017, 18:27
|
|
Временная регистрация
Регистрация: 10.03.2017
Сообщений: 69
Сказал спасибо: 77
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
USB HID.Помогите разобраться с дескрипторами.
Всем привет,задумал сделать USB HID joystick на МК ATxmega256A3BU.Так как мои познания по программированию не простираются далее написания мигалки,решил использовать готовый пример USB HID мыши на этом контроллере,с последующей переделкой его под джойстик.
Насколько я вычитал,при этом варианте достаточно изменить дескрипторы,а вся библиотека работы
с регистрами аппаратного USB остается нетронутой.
Подскажите пожалуйста,что нужно изменить кроме,естественно,HID ReportDescriptor,чтобы получить из мыши джойстик?
С уважением,Alex 54.
Последний раз редактировалось alex 54; 19.05.2017 в 18:39.
|
|
|
Сказали "Спасибо" alex 54
|
|
|
19.05.2017, 22:04
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,859 раз(а) в 2,929 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
Для начала ничего не менять и написать сам джойстик для управления курсором мыши. Так будет проще отладится с этой частью.
А с дескриптором и драйверами разбираться после.
Так геморроя будет значительно меньше. Иначе сильно многовариантный поиск ошибок - обработка данных с джойстика/обработка USB HID/проблемы драйвера/…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
19.05.2017, 22:29
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,673
Сказал спасибо: 74
Сказали Спасибо 1,806 раз(а) в 654 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
Сообщение от alex 54
|
Подскажите пожалуйста,что нужно изменить кроме,естественно,HID ReportDescriptor,чтобы получить из мыши джойстик?
|
Достаточно изменить HID Report Descriptor. Если всё сделаете правильно - сможете найти свой джойстик в диспетчере устройств и проверить его работу.
|
|
|
|
07.06.2017, 00:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
Если хотите разобраться с USB и в том числе с HID, советую начать с основ.
Берёте спецификацию USB 2.0 и изучаете.
Для начала советую изучить главу 9.
Там описаны основные коды запросов и ответов для любого USB устройства.
Потом надо изучить USB HID спецификацию, в ней описаны коды запросов, используемые только для HID устройств.
Потом, желательно изучить последовательность работы Windows с USB устройствами. То есть там описаны какие запросы и сколько раз исходят от компьютера при подключении USB устройства.
В частности, у меня был затык на usb_reset, потратил из-за него много времени.
Далее - описание репортов.
Для HID устройств есть специальный тип HID_REPORT со своим кодом запроса.
В сети есть специальная утилита - HID Descriptor Tool.
Она помогает создать нужный репорт.
Сначала рекомендую создать просто HID устройство. Не мышь, не клавиатуру. Со своим репортом - просто данные, например 8 байт.
Из подводных граблей - винда запоминает USB устройства. И может получиться так, что сначала у вас программа была написана криво, винда запомнила ваше "кривое" устройство. Потом вы исправили программу, а винда по прежнему думает, что это прежнее "кривое" устройство и не работает с ним.
Запросов в USB не так уж и много: примерно пару десятков и около десятка репортов.
|
|
|
Эти 8 пользователя(ей) сказали Спасибо Godzilla82 за это сообщение:
|
|
|
08.07.2017, 11:44
|
|
Временная регистрация
Регистрация: 10.03.2017
Сообщений: 69
Сказал спасибо: 77
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
mike-y-k, Здравствуйте,после основательного"rtfm"столкнулся с затруднением которое не смог найти
в этом источнике.
Вкратце:в своем проекте в качестве датчиков управления курсором(а в дальнейшем осями джойстика)с собираюсь использовать 3 кв.энкодера.
Добавил в проект мыши модуль Qdec,прописал все по инструкции в файле main "C",
но когда дошел до функций:
// Read the current QDec position:
code qdec_get_position(&config); \endcode
// Read the current QDec direction:
code qdec_get_direction(&config); \endcode
тормознул,эти функции,как я понимаю,получают данные от декодера.
Вы не можете в общих чертах подсказать как это привязать к управлению курсором?
Последний раз редактировалось alex 54; 08.07.2017 в 11:51.
|
|
|
|
09.07.2017, 03:55
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,859 раз(а) в 2,929 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
А как это у мыши сделано было?
Тут все аналогично.
Там читались данные из датчика перемещения (хоть из старого оптико-механического с шариком и колёсами ). На выходе были значения перемещения, накопленные между опросами по двум координатам.
Тут надо просто в программе изобразить работу чипа с датчиками.
Не забыть решить проблему с границами по осям в обе стороны (конец счета).
Как решён вопрос с подключением и обработкой информации от энкодеров?
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
09.07.2017, 12:23
|
|
Временная регистрация
Регистрация: 10.03.2017
Сообщений: 69
Сказал спасибо: 77
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
В примере мыши который я использую перемещение курсора осуществляется кнопками.
Если бы я использовал пример обычной мыши ничего бы переделывать бы не пришлось,там
уже все готово.
Вычитал что управление курсором осуществляется функцией mouse_event,а что дальше
не соображу,возможно что не умею искать нужную информацию.
Вопрос с подключением и обработкой информации от энкодеров пока решен не полностью:
Пока что добавил в main C рекомендованные функции инициализации модуля qdec и и считывания данных от декодера.
Сейчас разбираюсь с вопросом тактирования ТС,похоже его нужно установить одинаковым с
модулем USB(32MHZ)
|
|
|
|
10.07.2017, 01:54
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,859 раз(а) в 2,929 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
Энкодер на выходе выдаёт направление (что эквивалентно одной из кнопок) и число шагов (что эквивалентно числу нажатий на кнопку).
Осталось вызвать нужное число раз ту функцию, которая отвечала за нажатие нужной кнопки.
Результат должен появиться в виде перемещения курсора в нужном направлении и на нужное расстояние.
PS При отсутствии навыка программирования - самое лучшее, это сесть за изучение программирования. Данный проект может хорошо помочь, как стимул.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
10.07.2017, 02:34
|
|
Прописка
Регистрация: 25.03.2013
Адрес: Глубокое замкадье
Сообщений: 216
Сказал спасибо: 3
Сказали Спасибо 71 раз(а) в 55 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
Сообщение от alex 54
|
ATxmega256A3BU
|
По моему скромному мнению, для джойстика это жуткий перебор. Хватит Atmega8/88. Даже для USB загрузчика места хватит и еще куча свободного останется.
Дескрипторы и примеры реализации можно посмотреть здесь: https://www.obdev.at/products/vusb/prjinterface.html
|
|
|
Сказали "Спасибо" vladisslav1
|
|
|
10.07.2017, 05:02
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,673
Сказал спасибо: 74
Сказали Спасибо 1,806 раз(а) в 654 сообщении(ях)
|
Re: USB HID.Помогите разобраться с дескрипторами.
Сообщение от alex 54
|
Вы не можете в общих чертах подсказать как это привязать к управлению курсором?
|
Попробуем рассмотреть это на конкретном примере.
Допустим, есть джойстик с двумя переменными резисторами и четырьмя кнопками, который описан таким репорт-дескриптором:
Код:
|
USAGE_PAGE (Generic Desktop) 05, 01
USAGE (Joystick) 09, 04
COLLECTION (Application) A1, 01
USAGE_PAGE (Sim. Controls) 05, 02
USAGE (Throttle) 09, BB
LOGICAL_MINIMUM (0) 15, 00
LOGICAL_MAXIMUM (255) 26, FF, 00
REPORT_SIZE (8) 75, 08
REPORT_COUNT (1) 95, 01
INPUT (Data,Var,Abs) 81, 02
USAGE_PAGE (Sim. Controls) 05, 02
USAGE (Brake) 09, C5
LOGICAL_MINIMUM (0) 15, 00
LOGICAL_MAXIMUM (255) 26, FF, 00
REPORT_SIZE (8) 75, 08
REPORT_COUNT (1) 95, 01
INPUT (Data,Var,Abs) 81, 02
USAGE_PAGE (Button) 05, 09
USAGE_MINIMUM (Button 1) 19, 01
USAGE_MAXIMUM (Button 4) 29, 04
LOGICAL_MINIMUM (0) 15, 00
LOGICAL_MAXIMUM (1) 25, 01
REPORT_SIZE (1) 75, 01
REPORT_COUNT (8) 95, 08
UNIT_EXPONENT (0) 55, 00
UNIT (None) 65, 00
INPUT (Data,Var,Abs) 81, 02
END_COLLECTION C0 |
При каждом изменении состояния такое устройство должно передавать на комп пакет данных в следующем виде:
1-й байт: положение первого переменника, в абсолютных единицах (0..255);
2-й байт: положение второго переменника, также в абсолютных единицах (0..255);
3-й байт: биты 0-3 соответствуют положению кнопок, остальные биты =0.
Далее идут незначащие байты, общее количество байт в пакете будет определяться значением параметра wMaxPacketSize, которое Вы установили в дескрипторе конечной точки.
Вот, собственно, и всё. Вам осталось только переделать это под свой пример...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:56.
|
|