1

Я хочу, чтобы мое встроенное в 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. Затем данные отправляются в hidg_setup (HID_REQ_SET_REPORT) и выполняются сбои.

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
    },
};

0