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

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

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

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

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

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

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

 
Опции темы
Непрочитано 27.06.2010, 00:51  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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.RU
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,529
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
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.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
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,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
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.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: USB HID report descriptor

Через пару часов проверю в железе
AJScorp вне форума  
Непрочитано 27.06.2010, 13:43  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
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.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
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.RU
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,529
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
DK на пути к лучшему
По умолчанию Re: USB HID report descriptor

Сообщение от AJScorp Посмотреть сообщение
то выдать хосту мы должны ровно 4 байта
и в программе длину самого дескриптора точно посчитать надо.
У меня с дескриптором проблем не возникло... И протеусе все работало. А в реале - нет Спасибо Urry, помог с линкером справиться.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Непрочитано 27.06.2010, 17:38  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
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, время: 04:54.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot