1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-20 10:54:14 +01:00

hid joystick: restructure joystick HID report to work on windows

This commit is contained in:
Stacey Sheldon 2012-08-07 21:34:25 -04:00
parent 017d8c79c9
commit 94f6344fc5
2 changed files with 54 additions and 35 deletions

View File

@ -51,7 +51,7 @@ static const struct usb_device_desc device_desc = {
.bNumConfigurations = 1,
};
static const uint8_t hid_report_desc[88] = {
static const uint8_t hid_report_desc[127] = {
HID_GLOBAL_ITEM_2 (HID_TAG_GLOBAL_USAGE_PAGE),
0x9C, 0xFF, /* Usage Page 0xFF9C (Vendor Defined) */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
@ -97,57 +97,74 @@ static const uint8_t hid_report_desc[88] = {
/* 36 bytes to here */
/* Emulate a Joystick */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_USAGE_PAGE),
0x01, /* Usage Page 0x01 (Generic Desktop Controls) */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x04, /* Usage ID 0x0004 (Joystick) */
HID_MAIN_ITEM_1 (HID_TAG_MAIN_COLLECTION),
0x01, /* Application */
HID_MAIN_ITEM_1 (HID_TAG_MAIN_COLLECTION),
0x00, /* Physical */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_REPORT_ID),
0x03, /* OpenPilot Emulated joystick */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_USAGE_PAGE),
0x01, /* Usage Page 0x01 (Generic Desktop Controls) */
/* X + Y controls */
0x02, /* Usage ID 0x0002 (Simulation Control */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x30, 0x00, 0x01, 0x00, /* Usage ID 0x00010030 (Generic Desktop: X) */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x31, 0x00, 0x01, 0x00, /* Usage ID 0x00010031 (Generic Desktop: Y) */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_LOGICAL_MIN),
0x00, /* Values range from min = 0x00 */
HID_GLOBAL_ITEM_2 (HID_TAG_GLOBAL_LOGICAL_MAX),
0xFF, 0xFF, /* Values range to max = 0xFFFF */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_REPORT_SIZE),
0x10, /* 16 bits wide */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x04, /* Usage ID 0x0004 (Joystick) */
HID_MAIN_ITEM_1 (HID_TAG_MAIN_COLLECTION),
0x01, /* Application */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x02, /* Usage ID 0x0002 (Pointer) */
HID_MAIN_ITEM_1 (HID_TAG_MAIN_COLLECTION),
0x00, /* Physical */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x30, /* Usage ID 0x0030 (X) */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x31, /* Usage ID 0x0031 (Y) */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_REPORT_CNT),
2,
HID_MAIN_ITEM_1 (HID_TAG_MAIN_INPUT),
0x82, /* Data, Var, Abs, Vol */
HID_MAIN_ITEM_0 (HID_TAG_MAIN_ENDCOLLECTION),
HID_MAIN_ITEM_1 (HID_TAG_MAIN_COLLECTION),
0x00, /* Physical */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x32, /* Usage ID 0x0032 (Z) */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x33, /* Usage ID 0x0033 (Rx) */
/* Y + Rx controls */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_USAGE_PAGE),
0x02, /* Usage ID 0x0002 (Simulation Control */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x32, 0x00, 0x01, 0x00, /* Usage ID 0x00010032 (Generic Desktop: Z) */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x33, 0x00, 0x01, 0x00, /* Usage ID 0x00010031 (Generic Desktop: Rx) */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_LOGICAL_MIN),
0x00, /* Values range from min = 0x00 */
HID_GLOBAL_ITEM_2 (HID_TAG_GLOBAL_LOGICAL_MAX),
0xFF, 0xFF, /* Values range to max = 0xFFFF */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_REPORT_SIZE),
0x10, /* 16 bits wide */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_REPORT_CNT),
2,
HID_MAIN_ITEM_1 (HID_TAG_MAIN_INPUT),
0x82, /* Data, Var, Abs, Vol */
HID_MAIN_ITEM_0 (HID_TAG_MAIN_ENDCOLLECTION),
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x34, /* Usage ID 0x0034 (Ry) */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x35, /* Usage ID 0x0035 (Rz) */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x36, /* Usage ID 0x0036 (Slider) */
HID_LOCAL_ITEM_1 (HID_TAG_LOCAL_USAGE),
0x37, /* Usage ID 0x0037 (Dial) */
/* Ry, Rz, Slider + Dial controls */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_USAGE_PAGE),
0x02, /* Usage ID 0x0002 (Simulation Control */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x34, 0x00, 0x01, 0x00, /* Usage ID 0x00010034 (Generic Desktop: Ry) */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x35, 0x00, 0x01, 0x00, /* Usage ID 0x00010035 (Generic Desktop: Rz) */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x36, 0x00, 0x01, 0x00, /* Usage ID 0x00010036 (Generic Desktop: Slider) */
HID_LOCAL_ITEM_4 (HID_TAG_LOCAL_USAGE),
0x37, 0x00, 0x01, 0x00, /* Usage ID 0x00010037 (Generic Desktop: Dial) */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_LOGICAL_MIN),
0x00, /* Values range from min = 0x00 */
HID_GLOBAL_ITEM_2 (HID_TAG_GLOBAL_LOGICAL_MAX),
0xFF, 0xFF, /* Values range to max = 0xFFFF */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_REPORT_SIZE),
0x10, /* 16 bits wide */
HID_GLOBAL_ITEM_1 (HID_TAG_GLOBAL_REPORT_CNT),
4,
HID_MAIN_ITEM_1 (HID_TAG_MAIN_INPUT),
@ -155,7 +172,9 @@ static const uint8_t hid_report_desc[88] = {
HID_MAIN_ITEM_0 (HID_TAG_MAIN_ENDCOLLECTION),
/* 88 bytes to here */
HID_MAIN_ITEM_0 (HID_TAG_MAIN_ENDCOLLECTION),
/* 127 bytes to here */
};
struct usb_config_hid_cdc {

View File

@ -147,7 +147,7 @@ enum usb_ep_attr {
#define HID_LOCAL_ITEM_0(tag) HID_SHORT_ITEM((tag), HID_ITEM_TYPE_LOCAL, HID_ITEM_SIZE_0)
#define HID_LOCAL_ITEM_1(tag) HID_SHORT_ITEM((tag), HID_ITEM_TYPE_LOCAL, HID_ITEM_SIZE_1)
#define HID_LOCAL_ITEM_2(tag) HID_SHORT_ITEM((tag), HID_ITEM_TYPE_LOCAL, HID_ITEM_SIZE_2)
#define HID_LOCAL_ITEM_3(tag) HID_SHORT_ITEM((tag), HID_ITEM_TYPE_LOCAL, HID_ITEM_SIZE_3)
#define HID_LOCAL_ITEM_4(tag) HID_SHORT_ITEM((tag), HID_ITEM_TYPE_LOCAL, HID_ITEM_SIZE_4)
struct usb_device_desc {
uint8_t bLength;