usb: hid: move hid definitions to usb_hid_def.h

rockbox-gerrit-noreply--- via rockbox-cvs <[email protected]>
Newsgroups gmane.comp.systems.archos.rockbox.cvs
Message-ID <[email protected]>
commit 13194267491aaada0f390d345e585aeb289e7f17
Author: mojyack <[email protected]>
Date:   Fri Nov 21 13:11:53 2025 +0900

    usb: hid: move hid definitions to usb_hid_def.h
    
    Change-Id: I5883d27b96dcedfc0d0149961228a170b8d8e744

diff --git a/firmware/usbstack/usb_hid.c b/firmware/usbstack/usb_hid.c
index 44aee59b98..ee99e29fdc 100644
--- a/firmware/usbstack/usb_hid.c
+++ b/firmware/usbstack/usb_hid.c
@@ -25,76 +25,19 @@
 #include "kernel.h"
 #include "powermgmt.h"
 #include "usb_hid.h"
+#include "usb_hid_def.h"
 #include "usb_class_driver.h"
 /*#define LOGF_ENABLE*/
 #include "logf.h"
 
-/* Documents avaiable here: http://www.usb.org/developers/devclass_docs/ */
-
-#define HID_VER                         0x0110 /* 1.1 */
-/* Subclass Codes (HID1_11.pdf, page 18) */
-#define SUBCLASS_NONE                   0
-#define SUBCLASS_BOOT_INTERFACE         1
-/* Protocol Codes (HID1_11.pdf, page 19) */
-#define PROTOCOL_CODE_NONE              0
-#define PROTOCOL_CODE_KEYBOARD          1
-#define PROTOCOL_CODE_MOUSE             2
-/* HID main items (HID1_11.pdf, page 38) */
-#define INPUT                           0x80
-#define OUTPUT                          0x90
-#define FEATURE                         0xB0
-#define COLLECTION                      0xA0
-#define COLLECTION_PHYSICAL             0x00
-#define COLLECTION_APPLICATION          0x01
-#define END_COLLECTION                  0xC0
-/* Parts (HID1_11.pdf, page 40) */
-#define MAIN_ITEM_CONSTANT              BIT_N(0) /* 0x01 */
-#define MAIN_ITEM_VARIABLE              BIT_N(1) /* 0x02 */
-#define MAIN_ITEM_RELATIVE              BIT_N(2) /* 0x04 */
-#define MAIN_ITEM_WRAP                  BIT_N(3) /* 0x08 */
-#define MAIN_ITEM_NONLINEAR             BIT_N(4) /* 0x10 */
-#define MAIN_ITEM_NO_PREFERRED          BIT_N(5) /* 0x20 */
-#define MAIN_ITEM_NULL_STATE            BIT_N(6) /* 0x40 */
-#define MAIN_ITEM_VOLATILE              BIT_N(7) /* 0x80 */
-#define MAIN_ITEM_BUFFERED_BYTES        BIT_N(8) /* 0x0100 */
-/* HID global items (HID1_11.pdf, page 45) */
-#define USAGE_PAGE                      0x04
-#define LOGICAL_MINIMUM                 0x14
-#define LOGICAL_MAXIMUM                 0x24
-#define REPORT_SIZE                     0x74
-#define REPORT_ID                       0x84
-#define REPORT_COUNT                    0x94
-/* HID local items (HID1_11.pdf, page 50) */
-#define USAGE_MINIMUM                   0x18
-#define USAGE_MAXIMUM                   0x28
-/* Types of class descriptors (HID1_11.pdf, page 59) */
-#define USB_DT_HID                      0x21
-#define USB_DT_REPORT                   0x22
-
-#define CONSUMER_USAGE                  0x09
-
-/* HID-only class specific requests (HID1_11.pdf, page 61) */
-#define USB_HID_GET_REPORT              0x01
-#define USB_HID_GET_IDLE                0x02
-#define USB_HID_GET_PROTOCOL            0x03
-#define USB_HID_SET_REPORT              0x09
-#define USB_HID_SET_IDLE                0x0A
-#define USB_HID_SET_PROTOCOL            0x0B
-
-/* Get_Report and Set_Report Report Type field (HID1_11.pdf, page 61) */
-#define REPORT_TYPE_INPUT               0x01
-#define REPORT_TYPE_OUTPUT              0x02
-#define REPORT_TYPE_FEATURE             0x03
-
-#define HID_BUF_SIZE_MSG                16
-#define HID_BUF_SIZE_CMD                16
-#define HID_BUF_SIZE_REPORT             160
-#define HID_NUM_BUFFERS                 5
-#define SET_REPORT_BUF_LEN 2
-#define GET_REPORT_BUF_LEN 2
+#define HID_BUF_SIZE_MSG        16
+#define HID_BUF_SIZE_CMD        16
+#define HID_BUF_SIZE_REPORT     160
+#define HID_NUM_BUFFERS         5
+#define SET_REPORT_BUF_LEN      2
+#define GET_REPORT_BUF_LEN      2
 
 #ifdef LOGF_ENABLE
-
 #define BUF_DUMP_BUF_LEN       HID_BUF_SIZE_REPORT
 #define BUF_DUMP_PREFIX_SIZE   5
 #define BUF_DUMP_ITEMS_IN_LINE 8
@@ -127,26 +70,16 @@ static struct usb_interface_descriptor __attribute__((aligned(2)))
     .bAlternateSetting  = 0,
     .bNumEndpoints      = 1,
     .bInterfaceClass    = USB_CLASS_HID,
-    .bInterfaceSubClass = SUBCLASS_BOOT_INTERFACE,
-    .bInterfaceProtocol = PROTOCOL_CODE_KEYBOARD,
+    .bInterfaceSubClass = USB_HID_SUBCLASS_BOOT_INTERFACE,
+    .bInterfaceProtocol = USB_HID_PROTOCOL_CODE_KEYBOARD,
     .iInterface         = 0
 };
 
-struct usb_hid_descriptor {
-    uint8_t  bLength;
-    uint8_t  bDescriptorType;
-    uint16_t wBcdHID;
-    uint8_t  bCountryCode;
-    uint8_t  bNumDescriptors;
-    uint8_t  bDescriptorType0;
-    uint16_t wDescriptorLength0;
-} __attribute__ ((packed));
-
 static struct usb_hid_descriptor __attribute__((aligned(2))) hid_descriptor =
 {
     .bLength            = sizeof(struct usb_hid_descriptor),
     .bDescriptorType    = USB_DT_HID,
-    .wBcdHID            = HID_VER,
+    .wBcdHID            = USB_HID_VER,
     .bCountryCode       = 0,
     .bNumDescriptors    = 1,
     .bDescriptorType0   = USB_DT_REPORT,
@@ -462,37 +395,37 @@ static size_t descriptor_report_get(unsigned char *dest)
     usb_hid_report->buf_set = buf_set_keyboard;
     usb_hid_report->is_key_released = 1;
 
-    pack_parameter(&report, 0, 1, USAGE_PAGE,
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE,
             HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_KEYBOARD);
-    pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
-    pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_KEYBOARD);
-    pack_parameter(&report, 0, 1, USAGE_PAGE, HID_GENERIC_DESKTOP_KEYPAD);
-    pack_parameter(&report, 0, 1, USAGE_MINIMUM, HID_KEYBOARD_LEFT_CONTROL);
-    pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_KEYBOARD_RIGHT_GUI);
-    pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
-    pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 1);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 8);
-    pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 5);
-    pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_LEDS);
-    pack_parameter(&report, 0, 1, USAGE_MINIMUM, HID_LED_NUM_LOCK);
-    pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_LED_KANA);
-    pack_parameter(&report, 0, 1, OUTPUT, MAIN_ITEM_VARIABLE);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 3);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 1);
-    pack_parameter(&report, 0, 1, OUTPUT, MAIN_ITEM_CONSTANT);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 6);
-    pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
-    pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, HID_KEYBOARD_EX_SEL);
-    pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_KEYBOARD_KEYPAD);
-    pack_parameter(&report, 0, 1, USAGE_MINIMUM, 0);
-    pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_KEYBOARD_EX_SEL);
-    pack_parameter(&report, 0, 1, INPUT, 0);
-    PACK_VAL(report, END_COLLECTION);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DESKTOP_KEYBOARD);
+    pack_parameter(&report, 0, 1, USB_HID_COLLECTION, USB_HID_COLLECTION_APPLICATION);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_ID, REPORT_ID_KEYBOARD);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE, HID_GENERIC_DESKTOP_KEYPAD);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MINIMUM, HID_KEYBOARD_LEFT_CONTROL);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MAXIMUM, HID_KEYBOARD_RIGHT_GUI);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MINIMUM, 0);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MAXIMUM, 1);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 1);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 8);
+    pack_parameter(&report, 0, 1, USB_HID_INPUT, USB_HID_MAIN_ITEM_VARIABLE);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 1);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 5);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE, HID_USAGE_PAGE_LEDS);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MINIMUM, HID_LED_NUM_LOCK);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MAXIMUM, HID_LED_KANA);
+    pack_parameter(&report, 0, 1, USB_HID_OUTPUT, USB_HID_MAIN_ITEM_VARIABLE);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 3);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 1);
+    pack_parameter(&report, 0, 1, USB_HID_OUTPUT, USB_HID_MAIN_ITEM_CONSTANT);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 8);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 6);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MINIMUM, 0);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MAXIMUM, HID_KEYBOARD_EX_SEL);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE, HID_USAGE_PAGE_KEYBOARD_KEYPAD);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MINIMUM, 0);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MAXIMUM, HID_KEYBOARD_EX_SEL);
+    pack_parameter(&report, 0, 1, USB_HID_INPUT, 0);
+    PACK_VAL(report, USB_HID_END_COLLECTION);
 
     /* Consumer usage controls - play/pause, stop, etc. */
     usb_hid_report = &usb_hid_reports[REPORT_ID_CONSUMER];
@@ -500,21 +433,21 @@ static size_t descriptor_report_get(unsigned char *dest)
     usb_hid_report->buf_set = buf_set_consumer;
     usb_hid_report->is_key_released = 1;
 
-    pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_CONSUMER);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE,
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE, HID_USAGE_PAGE_CONSUMER);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE,
             HID_CONSUMER_USAGE_CONSUMER_CONTROL);
-    pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
-    pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_CONSUMER);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 16);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 2);
-    pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 1);
-    pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 652);
-    pack_parameter(&report, 0, 1, USAGE_MINIMUM,
+    pack_parameter(&report, 0, 1, USB_HID_COLLECTION, USB_HID_COLLECTION_APPLICATION);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_ID, REPORT_ID_CONSUMER);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 16);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 2);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MINIMUM, 1);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MAXIMUM, 652);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MINIMUM,
             HID_CONSUMER_USAGE_CONSUMER_CONTROL);
-    pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_CONSUMER_USAGE_AC_SEND);
-    pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_NO_PREFERRED |
-            MAIN_ITEM_NULL_STATE);
-    PACK_VAL(report, END_COLLECTION);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MAXIMUM, HID_CONSUMER_USAGE_AC_SEND);
+    pack_parameter(&report, 0, 1, USB_HID_INPUT, USB_HID_MAIN_ITEM_NO_PREFERRED |
+            USB_HID_MAIN_ITEM_NULL_STATE);
+    PACK_VAL(report, USB_HID_END_COLLECTION);
 
 #ifdef HAVE_USB_HID_MOUSE
     /* Mouse control */
@@ -523,55 +456,55 @@ static size_t descriptor_report_get(unsigned char *dest)
     usb_hid_report->buf_set = buf_set_mouse;
     usb_hid_report->is_key_released = 0;
 
-    pack_parameter(&report, 0, 1, USAGE_PAGE,
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE,
             HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_MOUSE);
-    pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
-    pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_MOUSE);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_POINTER);
-    pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_PHYSICAL);
-    pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_BUTTON);
-    pack_parameter(&report, 0, 1, USAGE_MINIMUM, 1);
-    pack_parameter(&report, 0, 1, USAGE_MAXIMUM, 8);
-    pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
-    pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 1);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 8);
-    pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE);
-    pack_parameter(&report, 0, 1, USAGE_PAGE,
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DESKTOP_MOUSE);
+    pack_parameter(&report, 0, 1, USB_HID_COLLECTION, USB_HID_COLLECTION_APPLICATION);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_ID, REPORT_ID_MOUSE);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DESKTOP_POINTER);
+    pack_parameter(&report, 0, 1, USB_HID_COLLECTION, USB_HID_COLLECTION_PHYSICAL);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE, HID_USAGE_PAGE_BUTTON);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MINIMUM, 1);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_MAXIMUM, 8);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MINIMUM, 0);
+    pack_parameter(&report, 1, 1, USB_HID_LOGICAL_MAXIMUM, 1);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 1);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 8);
+    pack_parameter(&report, 0, 1, USB_HID_INPUT, USB_HID_MAIN_ITEM_VARIABLE);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE,
             HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_X);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_Y);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_WHEEL);
-    pack_parameter(&report, 0, 1, LOGICAL_MINIMUM, -127 & 0xFF);
-    pack_parameter(&report, 0, 1, LOGICAL_MAXIMUM, 127);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 3);
-    pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE | MAIN_ITEM_RELATIVE);
-    PACK_VAL(report, END_COLLECTION);
-    PACK_VAL(report, END_COLLECTION);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DESKTOP_X);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DESKTOP_Y);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DESKTOP_WHEEL);
+    pack_parameter(&report, 0, 1, USB_HID_LOGICAL_MINIMUM, -127 & 0xFF);
+    pack_parameter(&report, 0, 1, USB_HID_LOGICAL_MAXIMUM, 127);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 8);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 3);
+    pack_parameter(&report, 0, 1, USB_HID_INPUT, USB_HID_MAIN_ITEM_VARIABLE | USB_HID_MAIN_ITEM_RELATIVE);
+    PACK_VAL(report, USB_HID_END_COLLECTION);
+    PACK_VAL(report, USB_HID_END_COLLECTION);
 #endif /* HAVE_USB_HID_MOUSE */
 
     /* Background reports */
-    pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_GENERIC_DEVICE_CONTROLS);
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DEVICE_BACKGROUND_CONTROLS);
-    pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
-    pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_BACKGROUND);
+    pack_parameter(&report, 0, 1, USB_HID_USAGE_PAGE, HID_USAGE_PAGE_GENERIC_DEVICE_CONTROLS);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DEVICE_BACKGROUND_CONTROLS);
+    pack_parameter(&report, 0, 1, USB_HID_COLLECTION, USB_HID_COLLECTION_APPLICATION);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_ID, REPORT_ID_BACKGROUND);
     /* Padding */
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DEVICE_UNDEFINED);
-    pack_parameter(&report, 0, 1, LOGICAL_MINIMUM, 0);
-    pack_parameter(&report, 0, 1, LOGICAL_MAXIMUM, 255);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 1);
-    pack_parameter(&report, 0, 1, FEATURE, MAIN_ITEM_CONSTANT);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DEVICE_UNDEFINED);
+    pack_parameter(&report, 0, 1, USB_HID_LOGICAL_MINIMUM, 0);
+    pack_parameter(&report, 0, 1, USB_HID_LOGICAL_MAXIMUM, 255);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 8);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 1);
+    pack_parameter(&report, 0, 1, USB_HID_FEATURE, USB_HID_MAIN_ITEM_CONSTANT);
     /* Battery percentage */
-    pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DEVICE_BATTERY_STRENGTH);
-    pack_parameter(&report, 0, 1, LOGICAL_MINIMUM, 0);
-    pack_parameter(&report, 0, 1, LOGICAL_MAXIMUM, 100);
-    pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
-    pack_parameter(&report, 0, 1, REPORT_COUNT, 1);
-    pack_parameter(&report, 0, 1, FEATURE, MAIN_ITEM_VARIABLE);
-    PACK_VAL(report, END_COLLECTION);
+    pack_parameter(&report, 0, 0, USB_HID_CONSUMER_USAGE, HID_GENERIC_DEVICE_BATTERY_STRENGTH);
+    pack_parameter(&report, 0, 1, USB_HID_LOGICAL_MINIMUM, 0);
+    pack_parameter(&report, 0, 1, USB_HID_LOGICAL_MAXIMUM, 100);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_SIZE, 8);
+    pack_parameter(&report, 0, 1, USB_HID_REPORT_COUNT, 1);
+    pack_parameter(&report, 0, 1, USB_HID_FEATURE, USB_HID_MAIN_ITEM_VARIABLE);
+    PACK_VAL(report, USB_HID_END_COLLECTION);
 
     return (size_t)(report - dest);
 }
@@ -665,7 +598,7 @@ static int usb_hid_set_report(struct usb_ctrlrequest *req, void *reqdata)
     static unsigned char buf[64] USB_DEVBSS_ATTR __attribute__((aligned(32)));
     int length;
 
-    if ((req->wValue >> 8) != REPORT_TYPE_OUTPUT)
+    if ((req->wValue >> 8) != USB_HID_REPORT_TYPE_OUTPUT)
     {
         logf("Unsupported report type");
         return 1;
@@ -714,7 +647,7 @@ static int usb_hid_set_report(struct usb_ctrlrequest *req, void *reqdata)
 
 static int usb_hid_get_report(struct usb_ctrlrequest *req, unsigned char* dest)
 {
-    if ((req->wValue >> 8) != REPORT_TYPE_FEATURE)
+    if ((req->wValue >> 8) != USB_HID_REPORT_TYPE_FEATURE)
     {
         logf("Unsupported report type");
         return 1;
diff --git a/firmware/usbstack/usb_hid_def.h b/firmware/usbstack/usb_hid_def.h
new file mode 100644
index 0000000000..8bee1bed44
--- /dev/null
+++ b/firmware/usbstack/usb_hid_def.h
@@ -0,0 +1,92 @@
+/***************************************************************************
+ *             __________               __   ___.
+ *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
+ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
+ *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
+ *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
+ *                     \/            \/     \/    \/            \/
+ * $Id:  $
+ *
+ * Copyright (C) 2010 by Amaury Pouly
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#ifndef USB_HID_DEF_H
+#define USB_HID_DEF_H
+
+#include "usb_ch9.h"
+
+/* Documents avaiable here: http://www.usb.org/developers/devclass_docs/ */
+
+#define USB_HID_VER                     0x0110 /* 1.1 */
+/* Subclass Codes (HID1_11.pdf, page 18) */
+#define USB_HID_SUBCLASS_NONE           0
+#define USB_HID_SUBCLASS_BOOT_INTERFACE 1
+/* Protocol Codes (HID1_11.pdf, page 19) */
+#define USB_HID_PROTOCOL_CODE_NONE      0
+#define USB_HID_PROTOCOL_CODE_KEYBOARD  1
+#define USB_HID_PROTOCOL_CODE_MOUSE     2
+/* HID main items (HID1_11.pdf, page 38) */
+#define USB_HID_INPUT                   0x80
+#define USB_HID_OUTPUT                  0x90
+#define USB_HID_FEATURE                 0xB0
+#define USB_HID_COLLECTION              0xA0
+#define USB_HID_COLLECTION_PHYSICAL     0x00
+#define USB_HID_COLLECTION_APPLICATION  0x01
+#define USB_HID_END_COLLECTION          0xC0
+/* Parts (HID1_11.pdf, page 40) */
+#define USB_HID_MAIN_ITEM_CONSTANT       BIT_N(0) /* 0x01 */
+#define USB_HID_MAIN_ITEM_VARIABLE       BIT_N(1) /* 0x02 */
+#define USB_HID_MAIN_ITEM_RELATIVE       BIT_N(2) /* 0x04 */
+#define USB_HID_MAIN_ITEM_WRAP           BIT_N(3) /* 0x08 */
+#define USB_HID_MAIN_ITEM_NONLINEAR      BIT_N(4) /* 0x10 */
+#define USB_HID_MAIN_ITEM_NO_PREFERRED   BIT_N(5) /* 0x20 */
+#define USB_HID_MAIN_ITEM_NULL_STATE     BIT_N(6) /* 0x40 */
+#define USB_HID_MAIN_ITEM_VOLATILE       BIT_N(7) /* 0x80 */
+#define USB_HID_MAIN_ITEM_BUFFERED_BYTES BIT_N(8) /* 0x0100 */
+/* HID global items (HID1_11.pdf, page 45) */
+#define USB_HID_USAGE_PAGE          0x04
+#define USB_HID_LOGICAL_MINIMUM     0x14
+#define USB_HID_LOGICAL_MAXIMUM     0x24
+#define USB_HID_REPORT_SIZE         0x74
+#define USB_HID_REPORT_ID           0x84
+#define USB_HID_REPORT_COUNT        0x94
+/* HID local items (HID1_11.pdf, page 50) */
+#define USB_HID_USAGE_MINIMUM       0x18
+#define USB_HID_USAGE_MAXIMUM       0x28
+/* Types of class descriptors (HID1_11.pdf, page 59) */
+#define USB_DT_HID                  0x21
+#define USB_DT_REPORT               0x22
+
+#define USB_HID_CONSUMER_USAGE      0x09
+
+/* HID-only class specific requests (HID1_11.pdf, page 61) */
+#define USB_HID_GET_REPORT              0x01
+#define USB_HID_GET_IDLE                0x02
+#define USB_HID_GET_PROTOCOL            0x03
+#define USB_HID_SET_REPORT              0x09
+#define USB_HID_SET_IDLE                0x0A
+#define USB_HID_SET_PROTOCOL            0x0B
+
+/* Get_Report and Set_Report Report Type field (HID1_11.pdf, page 61) */
+#define USB_HID_REPORT_TYPE_INPUT       0x01
+#define USB_HID_REPORT_TYPE_OUTPUT      0x02
+#define USB_HID_REPORT_TYPE_FEATURE     0x03
+
+struct usb_hid_descriptor {
+    uint8_t  bLength;
+    uint8_t  bDescriptorType;
+    uint16_t wBcdHID;
+    uint8_t  bCountryCode;
+    uint8_t  bNumDescriptors;
+    uint8_t  bDescriptorType0;
+    uint16_t wDescriptorLength0;
+} __attribute__ ((packed));
+
+#endif
-- 
rockbox-cvs mailing list
[email protected]
https://lists.haxx.se/mailman/listinfo/rockbox-cvs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.