Поддержка HID целевого устройства Linux

580
Crizzo

Я хочу, чтобы мое встроенное в ARM устройство Linux target 3.10 получало и отправляло команды на ПК HOST через USB HID. ПК HOST будет иметь графический интерфейс, который обменивается данными через HID USB с целевым устройством Linux. Обычно я бы использовал не-HID драйвер для такого типа вещей, но сейчас это не вариант. На целевой стороне я создал платформу struct hidg_func_descriptor для драйвера "hidg". Идентификатор отчета - 5, который я использую для первого байта ДАННЫХ. Я создал "/ dev / hidg0". Я могу записать обратно на хост-компьютер с помощью write () для hidg0. Он поступает как прерывание с данными на анализаторе. Но мне нужно прочитать () HID_SET_REPORT с USB-компьютера. В настоящее время read () просто зависает независимо от того, что отправляет HOST. На анализаторе USB я вижу, что он отправляет USB_REQ_SET_CONFIGURATION (0x9) на уровне UDC.

Q1. Hidg0 предназначен для обработки HID_SET / GET_REPORT как цели?

Q2. Как целевое устройство, я должен использовать другой / dev / xxx для этого типа операции?

Q3. Лучше использовать / dev / hidraw0 для этой несколько нестандартной платформы HID.

platform configuration: static struct hidg_func_descriptor hcr4_usb_hid_data = { .subclass = 0, .protocol = 0, .report_length = 64, .report_desc_length = 41, .report_desc = { 0x06, 0x20, 0xFF, // Usage Page (Vendor Defined 0xFF20) 0x09, 0x01, // Usage (0x01) 0xA1, 0x01, // Collection (Application) 0x75, 0x08, // Report Size (8) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x85, 0x05, // Report ID (5) 0x09, 0x05, // Usage (0x05) 0x95, 0x3F, // Report Count (63) 0xB2, 0x02, 0x01, // Feature () 0x85, 0x02, // Report ID (2) 0x09, 0x20, // Usage (0x20) 0x95, 0x3F, // Report Count (63) 0x82, 0x02, 0x01, // Input () 0x85, 0x03, // Report ID (3) 0x09, 0x21, // Usage (0x21) 0x95, 0x05, // Report Count (5) 0x91, 0x02, // Output () 0xC0, // End Collection }, }; 
1

0 ответов на вопрос