Сергей Борщ 143 14 июня, 2011 Опубликовано 14 июня, 2011 · Жалоба Разобрался с дескриптором репорта, устройство определяется. __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 }; В цикле отсылаю данные: 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 мс. Собственно что делать и какая еще информация нужна от меня для лечения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 14 июня, 2011 Опубликовано 14 июня, 2011 · Жалоба Разобрался. Умножал 7 на 8, получил 72 :cranky: , что и вписал в дескриптор. Естественно, столько бит в одну 8-байтовую посылку не влезает, и простое наличие такой записи в дескрипторе сводило винду с ума (этот пакет я даже не пытался передавать). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться