Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

USB HID report descriptor

Непрочитано 27.06.2010, 00:51  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию USB HID report descriptor

В общем, не могу разобраться, как писать report descriptor'ы для устройств ввода. За основу взял статью с сайта http://www.helmpcb.com/Electronics/U...BJoystick.aspx
Сделал джойстик. Дескриптор делал в программе HID Descriptor Tool
Перенес в компилятор. Все заработало. Чужой дескриптор работает.
Пытался сделать свой. Простейший джойстик на двух осях, без кнопок и прочего. Ничего не выходит. Не понимаю принципа, как эти дескрипторы писать. Вроде 2х8 бит, кратно 8, условие выполняется. Что ему еще не нравится? Поясните принцип, кто в теме, пожалуйста.
Заранее благодарю за дельные советы.
Могу проект в протеусе приложить, кому интересно посмотреть на виртуальный джойстик.
Реклама:
Easyrider83 вне форума  
Непрочитано 27.06.2010, 02:29  
DK
Почётный гражданин KAZUS.RUN
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,480
Сказал спасибо: 734
Сказали Спасибо 1,899 раз(а) в 777 сообщении(ях)
DK на пути к лучшему
По умолчанию Re: USB HID report descriptor

Вот мой дескриптор
Цитата:
0x05,0x01, // USAGE_PAGE (Generic Desktop)
0x15,0x00, // LOGICAL_MINIMUM (0)
0x09,0x04, // USAGE (Joystick)
0xa1,0x01, // COLLECTION (Application)
0x05,0x02, // USAGE_PAGE (Simulation Controls)
0x09,0xbb, // USAGE (Throttle)
0x15,0x81, // LOGICAL_MINIMUM (-127)
0x25,0x7f, // LOGICAL_MAXIMUM (127)
0x75,0x08, // REPORT_SIZE (
0x95,0x01, // REPORT_COUNT (1)
0x81,0x02, // INPUT (Data,Var,Abs)
0x05,0x01, // USAGE_PAGE (Generic Desktop)
0x09,0x01, // USAGE (Pointer)
0xa1,0x00, // COLLECTION (Physical)
0x09,0x30, // USAGE (X)
0x09,0x31, // USAGE (Y)
0x95,0x02, // REPORT_COUNT (2)
0x81,0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0x05,0x09, // USAGE_PAGE (Button)
0x19,0x01, // USAGE_MINIMUM (Button 1)
0x29,0x04, // USAGE_MAXIMUM (Button 4)
0x15,0x00, // LOGICAL_MINIMUM (0)
0x25,0x01, // LOGICAL_MAXIMUM (1)
0x75,0x01, // REPORT_SIZE (1)
0x95,0x04, // REPORT_COUNT (4)
0x55,0x00, // UNIT_EXPONENT (0)
0x65,0x00, // UNIT (None)
0x81,0x02, // INPUT (Data,Var,Abs)
0x95,0x04, // REPORT_COUNT (4)
0x81,0x03, // INPUT (Cnst,Var,Abs)
0xc0, // END_COLLECTION
Два направления, скорость и 4 кнопки

Для твоего варианта... Вот как-то так
Цитата:
0x05,0x01, // USAGE_PAGE (Generic Desktop)
0x15,0x00, // LOGICAL_MINIMUM (0)
0x09,0x04, // USAGE (Joystick)
0xa1,0x01, // COLLECTION (Application)
0x05,0x01, // USAGE_PAGE (Generic Desktop)
0x09,0x01, // USAGE (Pointer)
0xa1,0x00, // COLLECTION (Physical)
0x09,0x30, // USAGE (X)
0x09,0x31, // USAGE (Y)
0x95,0x02, // REPORT_COUNT (2)
0x81,0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Сказали "Спасибо" DK
Easyrider83 (27.06.2010)
Непрочитано 27.06.2010, 09:39  
AJScorp
Почётный гражданин KAZUS.RUN
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,550
Сказал спасибо: 384
Сказали Спасибо 735 раз(а) в 416 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: USB HID report descriptor

Сообщение от Easyrider83 Посмотреть сообщение
проект в протеусе приложить
Выкладывайте, так проблему будет проще решить.
Особенно интересуют ReportDescriptor и дескриптор ендпоинта (насколько я помню, значение wMaxLength связано с данными, описанными в ReportDescriptor)

Последний раз редактировалось AJScorp; 27.06.2010 в 11:37.
AJScorp вне форума  
Сказали "Спасибо" AJScorp
Easyrider83 (27.06.2010)
Непрочитано 27.06.2010, 10:18  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: USB HID report descriptor

Дорогие господа, огромное спасибо за помощь. Хочу все таки понять принцип.
Цитата:
0x05,0x01, ' USAGE_PAGE (Generic Desktop)
0x15,0x00, ' LOGICAL_MINIMUM (0)
0x09,0x04, ' USAGE (Joystick)
0xa1,0x01, ' COLLECTION (Application)
0x05,0x01, ' USAGE_PAGE (Generic Desktop)
0x09,0x01, ' USAGE (Pointer)
0xa1,0x00, ' COLLECTION (Physical)
0x09,0x30, ' USAGE (X)
0x09,0x31, ' USAGE (Y)
0x95,0x02, ' REPORT_COUNT (2)
0x81,0x02, ' INPUT (Data,Var,Abs)
0xc0, ' END_COLLECTION
Не работает ((
Вложения:
Тип файла: rar simple joystik.rar (101.1 Кб, 202 просмотров)

Последний раз редактировалось Easyrider83; 27.06.2010 в 10:24.
Easyrider83 вне форума  
Непрочитано 27.06.2010, 11:38  
AJScorp
Почётный гражданин KAZUS.RUN
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,550
Сказал спасибо: 384
Сказали Спасибо 735 раз(а) в 416 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: USB HID report descriptor

Через пару часов проверю в железе
AJScorp вне форума  
Непрочитано 27.06.2010, 13:43  
AJScorp
Почётный гражданин KAZUS.RUN
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,550
Сказал спасибо: 384
Сказали Спасибо 735 раз(а) в 416 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: USB HID report descriptor

Сообщение от Easyrider83 Посмотреть сообщение
Не работает ((
Не указан REPORT_SIZE - размер в битах для X и Y

Код:
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x15, 0x00,                    // LOGICAL_MINIMUM (0)
    0x09, 0x04,                    // USAGE (Joystick)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x05, 0x01,                    //   USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x75, 0x08,                    //     REPORT_SIZE (8)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //   END_COLLECTION
    0xc0                           // END_COLLECTION
AJScorp вне форума  
Непрочитано 27.06.2010, 13:50  
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: USB HID report descriptor

Сообщение от Easyrider83 Посмотреть сообщение
Не работает ((
Уважаемый Easyrider83. У меня Ваша проект работает в Proteus 7.6 SP0. Скачал простейшую тестовую программу JoyTester2. Управление по каналам X, У и газ работает. Единственное, USB-устройство через некоторое время вываливается из системы, но, может быть, это проблема Proteus.
oleg_harp вне форума  
Непрочитано 27.06.2010, 13:54  
AJScorp
Почётный гражданин KAZUS.RUN
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,550
Сказал спасибо: 384
Сказали Спасибо 735 раз(а) в 416 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: USB HID report descriptor

Дополнительно необходимо, чтобы количество данных передаваемых хосту точно соответствовало количеству, заявленному в ReportDescriptor, иначе устройство работать не будет.

Допустим, если взять дескриптор уважаемого DK:
Код:
0x05,0x01, // USAGE_PAGE (Generic Desktop)
0x15,0x00, // LOGICAL_MINIMUM (0)
0x09,0x04, // USAGE (Joystick)
0xa1,0x01, // COLLECTION (Application)
0x05,0x02, // USAGE_PAGE (Simulation Controls)
0x09,0xbb, // USAGE (Throttle)
0x15,0x81, // LOGICAL_MINIMUM (-127)
0x25,0x7f, // LOGICAL_MAXIMUM (127)
0x75,0x08, // REPORT_SIZE (8)            -›Размер данных 8 бит
0x95,0x01, // REPORT_COUNT (1)
0x81,0x02, // INPUT (Data,Var,Abs)       -›8 бит*1 = 1 байт
0x05,0x01, // USAGE_PAGE (Generic Desktop)
0x09,0x01, // USAGE (Pointer)
0xa1,0x00, // COLLECTION (Physical)
0x09,0x30, // USAGE (X)
0x09,0x31, // USAGE (Y)
0x95,0x02, // REPORT_COUNT (2)
0x81,0x02, // INPUT (Data,Var,Abs)       -›8 бит*2 = 2 байта
0xc0, // END_COLLECTION
0x05,0x09, // USAGE_PAGE (Button)
0x19,0x01, // USAGE_MINIMUM (Button 1)
0x29,0x04, // USAGE_MAXIMUM (Button 4)
0x15,0x00, // LOGICAL_MINIMUM (0)
0x25,0x01, // LOGICAL_MAXIMUM (1)
0x75,0x01, // REPORT_SIZE (1)            -›Размер данных 1 бит
0x95,0x04, // REPORT_COUNT (4)
0x55,0x00, // UNIT_EXPONENT (0)
0x65,0x00, // UNIT (None)
0x81,0x02, // INPUT (Data,Var,Abs)       -›1 бит*4 = 0.5 байта
0x95,0x04, // REPORT_COUNT (4)
0x81,0x03, // INPUT (Cnst,Var,Abs)       -›1 бит*4 = 0.5 байта
0xc0, // END_COLLECTION
то выдать хосту мы должны ровно 4 байта
Цитата:
joystik.mbas:
while(HID_Write(@writebuff,4) = 0) wend

Последний раз редактировалось AJScorp; 27.06.2010 в 14:06.
AJScorp вне форума  
Непрочитано 27.06.2010, 14:37  
DK
Почётный гражданин KAZUS.RUN
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,480
Сказал спасибо: 734
Сказали Спасибо 1,899 раз(а) в 777 сообщении(ях)
DK на пути к лучшему
По умолчанию Re: USB HID report descriptor

Сообщение от AJScorp Посмотреть сообщение
то выдать хосту мы должны ровно 4 байта
и в программе длину самого дескриптора точно посчитать надо.
У меня с дескриптором проблем не возникло... И протеусе все работало. А в реале - нет Спасибо Urry, помог с линкером справиться.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Непрочитано 27.06.2010, 17:38  
AJScorp
Почётный гражданин KAZUS.RUN
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,550
Сказал спасибо: 384
Сказали Спасибо 735 раз(а) в 416 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: USB HID report descriptor

Сообщение от DK Посмотреть сообщение
и в программе длину самого дескриптора точно посчитать надо.
Согласен!
для MPLAB Cxx объявлял так
Код:
const char ReportDescriptor[] = 
                                    {
                                    ...
                                    };
#define REPT_DESC_SIZE sizeof(ReportDescriptor)
и проблем не было
AJScorp вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
связь lpc17xx c PC по USB Vallav Микроконтроллеры, АЦП, память и т.д 0 01.06.2010 08:35
Помогите разобраться USB Device - HID - Joystick redb Микроконтроллеры, АЦП, память и т.д 6 11.03.2010 14:20
USB HID девайс на 18F13K50 не хочет работать. DK Микроконтроллеры, АЦП, память и т.д 17 26.02.2010 18:31
USB HID Keyboard Atmega8 snayperAlfa Proteus 12 24.02.2010 22:01
Питание USB устройств nml Делимся опытом 1 11.02.2010 14:06


Часовой пояс GMT +4, время: 07:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.