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

 
 
 
Reply to this topicStart new topic
> v-usb (Virtual USB por for AVR) кто-нибудь ковырял?, Что-то не получается HID сделать.
Сергей Борщ
сообщение Jun 14 2011, 12:10
Сообщение #1


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Разобрался с дескриптором репорта, устройство определяется.
CODE
__attribute__((section(".progmem.Descriptor")))
char usbHidReportDescriptor[79] =
{
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x04, // USAGE (Joystick)
0xA1, 0x01, // COLLECTION (Application)
0x16, 0x00, 0xFE, // LOGICAL_MINIMUM (-512)
0x26, 0xFF, 0x01, // LOGICAL_MAXIMUM (511)
0x75, 0x0A, // REPORT_SIZE (10)
0x95, 0x05, // REPORT_COUNT (5)

0x85, 0x01, // REPORT_ID (1) // 5 axes
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x32, // USAGE (Z)
0x09, 0x36, // USAGE (Slider)
0x09, 0x37, // USAGE (Dial)
0x81, 0x02, // INPUT (Data, Var, Abs)
// Padding to 8-bit boundary
0xA4, // PUSH
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x06, // REPORT_SIZE (6)
0x81, 0x01, // INPUT (Constant)
0xB4, // POP

0x85, 0x02, // REPORT_ID (2) // 5 axes
0x05, 0x02, // USAGE_PAGE (Simulation Controls)
0x09, 0xB0, // USAGE (Aileron)
0x09, 0xB8, // USAGE (Elevator)
0x09, 0xBA, // USAGE (Rudder)
0x09, 0xBB, // USAGE (Throttle)
0x09, 0xC3, // USAGE (Wing flaps)
0x81, 0x02, // INPUT (Data, Var, Abs)
// Padding to 8-bit boundary
// 0xA4, // PUSH
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x06, // REPORT_SIZE (6)
0x81, 0x01, // INPUT (Constant)
// 0xB4, // POP


0x85, 0x03, // REPORT_ID (3) // 72 buttons
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 72, // USAGE_MAXIMUM (Button 72)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 72, // REPORT_COUNT (72)
// 0x55, 0x00, // UNIT_EXPONENT (0)
// 0x65, 0x00, // UNIT (None)

0x81, 0x02, // INPUT (Data, Var, Abs)

0xC0, // END COLLECTION
};

В цикле отсылаю данные:
CODE
    for(;;)
    {                /* main event loop */
        wdt_reset();
        usbPoll();

        if(usbConfiguration && usbInterruptIsReady())
        {
            // called after every poll of the interrupt endpoint
            Axes[0].Report.Axe1_lo = ++Report_counter;
            usbSetInterrupt(Axes[0].get_report(), Axes[0].get_report_size());
        }
    }
Однако SnoopyPro показывает, что в комп поступает только каждый второй пакет. Куда копать? И еще непонятка с нумерацией пакетов - (если я правильно понял) почему-то устройство отвечает с предыдущим sequence number:
Прикрепленное изображение


Прерывания кроме v-usb не используются, задержаться программе негде, кварц 12МГц, главный цикл выполняется 35мс, USB_CFG_INTR_POLL_INTERVAL указал 100 мс. Собственно что делать и какая еще информация нужна от меня для лечения?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 14 2011, 14:12
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Разобрался.
Умножал 7 на 8, получил 72 cranky.gif , что и вписал в дескриптор. Естественно, столько бит в одну 8-байтовую посылку не влезает, и простое наличие такой записи в дескрипторе сводило винду с ума (этот пакет я даже не пытался передавать).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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