mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-31 15:11:40 +01:00 
			
		
		
		
	
		
			
	
	
		
			404 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			404 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | // Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
 | ||
|  | //
 | ||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||
|  | // you may not use this file except in compliance with the License.
 | ||
|  | // You may obtain a copy of the License at
 | ||
|  | //
 | ||
|  | //     http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  | //
 | ||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||
|  | // See the License for the specific language governing permissions and
 | ||
|  | // limitations under the License.
 | ||
|  | #pragma once
 | ||
|  | 
 | ||
|  | const unsigned char hidReportMap[] = { | ||
|  |     0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x02,        // Usage (Mouse)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x01,        //   Report ID (1)
 | ||
|  |     0x09, 0x01,        //   Usage (Pointer)
 | ||
|  |     0xA1, 0x00,        //   Collection (Physical)
 | ||
|  |     0x05, 0x09,        //     Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //     Usage Minimum (0x01)
 | ||
|  |     0x29, 0x03,        //     Usage Maximum (0x03)
 | ||
|  |     0x15, 0x00,        //     Logical Minimum (0)
 | ||
|  |     0x25, 0x01,        //     Logical Maximum (1)
 | ||
|  |     0x75, 0x01,        //     Report Size (1)
 | ||
|  |     0x95, 0x03,        //     Report Count (3)
 | ||
|  |     0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x75, 0x05,        //     Report Size (5)
 | ||
|  |     0x95, 0x01,        //     Report Count (1)
 | ||
|  |     0x81, 0x01,        //     Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x30,        //     Usage (X)
 | ||
|  |     0x09, 0x31,        //     Usage (Y)
 | ||
|  |     0x09, 0x38,        //     Usage (Wheel)
 | ||
|  |     0x15, 0x81,        //     Logical Minimum (-127)
 | ||
|  |     0x25, 0x7F,        //     Logical Maximum (127)
 | ||
|  |     0x75, 0x08,        //     Report Size (8)
 | ||
|  |     0x95, 0x03,        //     Report Count (3)
 | ||
|  |     0x81, 0x06,        //     Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x06,        // Usage (Keyboard)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x02,        //   Report ID (2)
 | ||
|  |     0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
 | ||
|  |     0x19, 0xE0,        //   Usage Minimum (0xE0)
 | ||
|  |     0x29, 0xE7,        //   Usage Maximum (0xE7)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x25, 0x01,        //   Logical Maximum (1)
 | ||
|  |     0x75, 0x01,        //   Report Size (1)
 | ||
|  |     0x95, 0x08,        //   Report Count (8)
 | ||
|  |     0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x75, 0x08,        //   Report Size (8)
 | ||
|  |     0x81, 0x01,        //   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x95, 0x05,        //   Report Count (5)
 | ||
|  |     0x75, 0x01,        //   Report Size (1)
 | ||
|  |     0x05, 0x08,        //   Usage Page (LEDs)
 | ||
|  |     0x19, 0x01,        //   Usage Minimum (Num Lock)
 | ||
|  |     0x29, 0x05,        //   Usage Maximum (Kana)
 | ||
|  |     0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x75, 0x03,        //   Report Size (3)
 | ||
|  |     0x91, 0x01,        //   Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
 | ||
|  |     0x95, 0x06,        //   Report Count (6)
 | ||
|  |     0x75, 0x08,        //   Report Size (8)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x25, 0x65,        //   Logical Maximum (101)
 | ||
|  |     0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
 | ||
|  |     0x19, 0x00,        //   Usage Minimum (0x00)
 | ||
|  |     0x29, 0x65,        //   Usage Maximum (0x65)
 | ||
|  |     0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     0x05, 0x0C,        // Usage Page (Consumer)
 | ||
|  |     0x09, 0x01,        // Usage (Consumer Control)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x03,        //   Report ID (3)
 | ||
|  |     0x09, 0x02,        //   Usage (Numeric Key Pad)
 | ||
|  |     0xA1, 0x02,        //   Collection (Logical)
 | ||
|  |     0x05, 0x09,        //     Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //     Usage Minimum (0x01)
 | ||
|  |     0x29, 0x0A,        //     Usage Maximum (0x0A)
 | ||
|  |     0x15, 0x01,        //     Logical Minimum (1)
 | ||
|  |     0x25, 0x0A,        //     Logical Maximum (10)
 | ||
|  |     0x75, 0x04,        //     Report Size (4)
 | ||
|  |     0x95, 0x01,        //     Report Count (1)
 | ||
|  |     0x81, 0x00,        //     Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0x05, 0x0C,        //   Usage Page (Consumer)
 | ||
|  |     0x09, 0x86,        //   Usage (Channel)
 | ||
|  |     0x15, 0xFF,        //   Logical Minimum (-1)
 | ||
|  |     0x25, 0x01,        //   Logical Maximum (1)
 | ||
|  |     0x75, 0x02,        //   Report Size (2)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x81, 0x46,        //   Input (Data,Var,Rel,No Wrap,Linear,Preferred State,Null State)
 | ||
|  |     0x09, 0xE9,        //   Usage (Volume Increment)
 | ||
|  |     0x09, 0xEA,        //   Usage (Volume Decrement)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x75, 0x01,        //   Report Size (1)
 | ||
|  |     0x95, 0x02,        //   Report Count (2)
 | ||
|  |     0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x09, 0xE2,        //   Usage (Mute)
 | ||
|  |     0x09, 0x30,        //   Usage (Power)
 | ||
|  |     0x09, 0x83,        //   Usage (Recall Last)
 | ||
|  |     0x09, 0x81,        //   Usage (Assign Selection)
 | ||
|  |     0x09, 0xB0,        //   Usage (Play)
 | ||
|  |     0x09, 0xB1,        //   Usage (Pause)
 | ||
|  |     0x09, 0xB2,        //   Usage (Record)
 | ||
|  |     0x09, 0xB3,        //   Usage (Fast Forward)
 | ||
|  |     0x09, 0xB4,        //   Usage (Rewind)
 | ||
|  |     0x09, 0xB5,        //   Usage (Scan Next Track)
 | ||
|  |     0x09, 0xB6,        //   Usage (Scan Previous Track)
 | ||
|  |     0x09, 0xB7,        //   Usage (Stop)
 | ||
|  |     0x15, 0x01,        //   Logical Minimum (1)
 | ||
|  |     0x25, 0x0C,        //   Logical Maximum (12)
 | ||
|  |     0x75, 0x04,        //   Report Size (4)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x09, 0x80,        //   Usage (Selection)
 | ||
|  |     0xA1, 0x02,        //   Collection (Logical)
 | ||
|  |     0x05, 0x09,        //     Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //     Usage Minimum (0x01)
 | ||
|  |     0x29, 0x03,        //     Usage Maximum (0x03)
 | ||
|  |     0x15, 0x01,        //     Logical Minimum (1)
 | ||
|  |     0x25, 0x03,        //     Logical Maximum (3)
 | ||
|  |     0x75, 0x02,        //     Report Size (2)
 | ||
|  |     0x81, 0x00,        //     Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0x81, 0x03,        //   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     0x06, 0xFF, 0xFF,  // Usage Page (Vendor Defined 0xFFFF)
 | ||
|  |     0x09, 0xA5,        // Usage (0xA5)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x04,        //   Report ID (4)
 | ||
|  |     0x09, 0xA6,        //   Usage (0xA6)
 | ||
|  |     0x09, 0xA9,        //   Usage (0xA9)
 | ||
|  |     0x75, 0x08,        //   Report Size (8)
 | ||
|  |     0x95, 0x7F,        //   Report Count (127)
 | ||
|  |     0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     // 250 bytes
 | ||
|  | }; | ||
|  | 
 | ||
|  | const unsigned char relMouseReportMap[] = { //4 bytes (btns,x,y,wheel)
 | ||
|  |     0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x02,        // Usage (Mouse)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x09, 0x01,        //   Usage (Pointer)
 | ||
|  |     0xA1, 0x00,        //   Collection (Physical)
 | ||
|  |     0x85, 0x01,        //     Report ID (1)
 | ||
|  |     0x05, 0x09,        //     Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //     Usage Minimum (0x01)
 | ||
|  |     0x29, 0x05,        //     Usage Maximum (0x05)
 | ||
|  |     0x15, 0x00,        //     Logical Minimum (0)
 | ||
|  |     0x25, 0x01,        //     Logical Maximum (1)
 | ||
|  |     0x95, 0x05,        //     Report Count (5)
 | ||
|  |     0x75, 0x01,        //     Report Size (1)
 | ||
|  |     0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x95, 0x01,        //     Report Count (1)
 | ||
|  |     0x75, 0x03,        //     Report Size (3)
 | ||
|  |     0x81, 0x03,        //     Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x30,        //     Usage (X)
 | ||
|  |     0x09, 0x31,        //     Usage (Y)
 | ||
|  |     0x09, 0x38,        //     Usage (Wheel)
 | ||
|  |     0x15, 0x81,        //     Logical Minimum (-127)
 | ||
|  |     0x25, 0x7F,        //     Logical Maximum (127)
 | ||
|  |     0x75, 0x08,        //     Report Size (8)
 | ||
|  |     0x95, 0x03,        //     Report Count (3)
 | ||
|  |     0x81, 0x06,        //     Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     // 54 bytes
 | ||
|  | }; | ||
|  | 
 | ||
|  | const unsigned char absMouseReportMap[] = { //6 bytes (btns,x*2,y*2,wheel)
 | ||
|  |     0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x02,        // Usage (Mouse)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x09, 0x01,        //   Usage (Pointer)
 | ||
|  |     0xA1, 0x00,        //   Collection (Physical)
 | ||
|  |     0x85, 0x01,        //     Report ID (1)
 | ||
|  |     0x05, 0x09,        //     Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //     Usage Minimum (0x01)
 | ||
|  |     0x29, 0x05,        //     Usage Maximum (0x05)
 | ||
|  |     0x15, 0x00,        //     Logical Minimum (0)
 | ||
|  |     0x25, 0x01,        //     Logical Maximum (1)
 | ||
|  |     0x95, 0x05,        //     Report Count (5)
 | ||
|  |     0x75, 0x01,        //     Report Size (1)
 | ||
|  |     0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x95, 0x01,        //     Report Count (1)
 | ||
|  |     0x75, 0x03,        //     Report Size (3)
 | ||
|  |     0x81, 0x01,        //     Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x30,        //     Usage (X)
 | ||
|  |     0x09, 0x31,        //     Usage (Y)
 | ||
|  |     0x15, 0x00,        //     Logical Minimum (0)
 | ||
|  |     0x26, 0xFF, 0x7F,  //     Logical Maximum (32767)
 | ||
|  |     0x75, 0x10,        //     Report Size (16)
 | ||
|  |     0x95, 0x02,        //     Report Count (2)
 | ||
|  |     0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x38,        //     Usage (Wheel)
 | ||
|  |     0x15, 0x81,        //     Logical Minimum (-127)
 | ||
|  |     0x25, 0x7F,        //     Logical Maximum (127)
 | ||
|  |     0x75, 0x08,        //     Report Size (8)
 | ||
|  |     0x95, 0x01,        //     Report Count (1)
 | ||
|  |     0x81, 0x06,        //     Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     // 67 bytes
 | ||
|  | }; | ||
|  | 
 | ||
|  | const unsigned char keyboardReportMap[] = { //7 bytes input (modifiers, resrvd, keys*5), 1 byte output
 | ||
|  |     0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x06,        // Usage (Keyboard)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x01,        //   Report ID (1)
 | ||
|  |     0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
 | ||
|  |     0x19, 0xE0,        //   Usage Minimum (0xE0)
 | ||
|  |     0x29, 0xE7,        //   Usage Maximum (0xE7)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x25, 0x01,        //   Logical Maximum (1)
 | ||
|  |     0x75, 0x01,        //   Report Size (1)
 | ||
|  |     0x95, 0x08,        //   Report Count (8)
 | ||
|  |     0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x75, 0x08,        //   Report Size (8)
 | ||
|  |     0x81, 0x03,        //   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x95, 0x05,        //   Report Count (5)
 | ||
|  |     0x75, 0x01,        //   Report Size (1)
 | ||
|  |     0x05, 0x08,        //   Usage Page (LEDs)
 | ||
|  |     0x19, 0x01,        //   Usage Minimum (Num Lock)
 | ||
|  |     0x29, 0x05,        //   Usage Maximum (Kana)
 | ||
|  |     0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x75, 0x03,        //   Report Size (3)
 | ||
|  |     0x91, 0x03,        //   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
 | ||
|  |     0x95, 0x05,        //   Report Count (5)
 | ||
|  |     0x75, 0x08,        //   Report Size (8)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x25, 0x65,        //   Logical Maximum (101)
 | ||
|  |     0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
 | ||
|  |     0x19, 0x00,        //   Usage Minimum (0x00)
 | ||
|  |     0x29, 0x65,        //   Usage Maximum (0x65)
 | ||
|  |     0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     // 65 bytes
 | ||
|  | }; | ||
|  | 
 | ||
|  | const unsigned char joystickReportMap[] = { // 8bytes (8but, 4but+hat, r, y, rx, ry, z, rz)
 | ||
|  |     0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x04,        // Usage (Joystick)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x01,        //   Report ID (1)
 | ||
|  |     0x05, 0x09,        //   Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //   Usage Minimum (0x01)
 | ||
|  |     0x29, 0x0C,        //   Usage Maximum (0x0C)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x25, 0x01,        //   Logical Maximum (1)
 | ||
|  |     0x75, 0x01,        //   Report Size (1)
 | ||
|  |     0x95, 0x0C,        //   Report Count (12)
 | ||
|  |     0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x05, 0x01,        //   Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0x09, 0x39,        //   Usage (Hat switch)
 | ||
|  |     0x15, 0x01,        //   Logical Minimum (1)
 | ||
|  |     0x25, 0x08,        //   Logical Maximum (8)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x75, 0x04,        //   Report Size (4)
 | ||
|  |     0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x05, 0x01,        //   Usage Page (Generic Desktop Ctrls)
 | ||
|  |     0xA1, 0x00,        //   Collection (Physical)
 | ||
|  |     0x09, 0x30,        //     Usage (X)
 | ||
|  |     0x09, 0x31,        //     Usage (Y)
 | ||
|  |     0x09, 0x33,        //     Usage (Rx)
 | ||
|  |     0x09, 0x34,        //     Usage (Ry)
 | ||
|  |     0x15, 0x80,        //     Logical Minimum (-128)
 | ||
|  |     0x25, 0x7F,        //     Logical Maximum (127)
 | ||
|  |     0x75, 0x08,        //     Report Size (8)
 | ||
|  |     0x95, 0x04,        //     Report Count (4)
 | ||
|  |     0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x09, 0x32,        //     Usage (Z)
 | ||
|  |     0x09, 0x35,        //     Usage (Rz)
 | ||
|  |     0x15, 0x80,        //     Logical Minimum (-128)
 | ||
|  |     0x25, 0x7F,        //     Logical Maximum (127)
 | ||
|  |     0x75, 0x08,        //     Report Size (8)
 | ||
|  |     0x95, 0x02,        //     Report Count (2)
 | ||
|  |     0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     // 76 bytes
 | ||
|  | }; | ||
|  | 
 | ||
|  | const unsigned char mediaReportMap[] = { //6 bytes (3 x 16bit)
 | ||
|  |     0x05, 0x0C,        // Usage Page (Consumer)
 | ||
|  |     0x09, 0x01,        // Usage (Consumer Control)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x03,        //   Report ID (3)
 | ||
|  |     0x19, 0x00,        //   Usage Minimum (Unassigned)
 | ||
|  |     0x2A, 0xFF, 0x03,  //   Usage Maximum (0x03FF)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x26, 0xFF, 0x03,  //   Logical Maximum (1023)
 | ||
|  |     0x95, 0x03,        //   Report Count (3)
 | ||
|  |     0x75, 0x10,        //   Report Size (16)
 | ||
|  |     0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     // 25 bytes
 | ||
|  | }; | ||
|  | 
 | ||
|  | const unsigned char mediaReportMap2[] = { | ||
|  |     0x05, 0x0C,        // Usage Page (Consumer)
 | ||
|  |     0x09, 0x01,        // Usage (Consumer Control)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x03,        //   Report ID (3)
 | ||
|  |     0x09, 0x02,        //   Usage (Numeric Key Pad)
 | ||
|  |     0xA1, 0x02,        //   Collection (Logical)
 | ||
|  |     0x05, 0x09,        //     Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //     Usage Minimum (0x01)
 | ||
|  |     0x29, 0x0A,        //     Usage Maximum (0x0A)
 | ||
|  |     0x15, 0x01,        //     Logical Minimum (1)
 | ||
|  |     0x25, 0x0A,        //     Logical Maximum (10)
 | ||
|  |     0x75, 0x04,        //     Report Size (4)
 | ||
|  |     0x95, 0x01,        //     Report Count (1)
 | ||
|  |     0x81, 0x00,        //     Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0x05, 0x0C,        //   Usage Page (Consumer)
 | ||
|  |     0x09, 0x86,        //   Usage (Channel)
 | ||
|  |     0x15, 0xFF,        //   Logical Minimum (-1)
 | ||
|  |     0x25, 0x01,        //   Logical Maximum (1)
 | ||
|  |     0x75, 0x02,        //   Report Size (2)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x81, 0x46,        //   Input (Data,Var,Rel,No Wrap,Linear,Preferred State,Null State)
 | ||
|  |     0x09, 0xE9,        //   Usage (Volume Increment)
 | ||
|  |     0x09, 0xEA,        //   Usage (Volume Decrement)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x75, 0x01,        //   Report Size (1)
 | ||
|  |     0x95, 0x02,        //   Report Count (2)
 | ||
|  |     0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x09, 0xE2,        //   Usage (Mute)
 | ||
|  |     0x09, 0x30,        //   Usage (Power)
 | ||
|  |     0x09, 0x83,        //   Usage (Recall Last)
 | ||
|  |     0x09, 0x81,        //   Usage (Assign Selection)
 | ||
|  |     0x09, 0xB0,        //   Usage (Play)
 | ||
|  |     0x09, 0xB1,        //   Usage (Pause)
 | ||
|  |     0x09, 0xB2,        //   Usage (Record)
 | ||
|  |     0x09, 0xB3,        //   Usage (Fast Forward)
 | ||
|  |     0x09, 0xB4,        //   Usage (Rewind)
 | ||
|  |     0x09, 0xB5,        //   Usage (Scan Next Track)
 | ||
|  |     0x09, 0xB6,        //   Usage (Scan Previous Track)
 | ||
|  |     0x09, 0xB7,        //   Usage (Stop)
 | ||
|  |     0x15, 0x01,        //   Logical Minimum (1)
 | ||
|  |     0x25, 0x0C,        //   Logical Maximum (12)
 | ||
|  |     0x75, 0x04,        //   Report Size (4)
 | ||
|  |     0x95, 0x01,        //   Report Count (1)
 | ||
|  |     0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0x09, 0x80,        //   Usage (Selection)
 | ||
|  |     0xA1, 0x02,        //   Collection (Logical)
 | ||
|  |     0x05, 0x09,        //     Usage Page (Button)
 | ||
|  |     0x19, 0x01,        //     Usage Minimum (0x01)
 | ||
|  |     0x29, 0x03,        //     Usage Maximum (0x03)
 | ||
|  |     0x15, 0x01,        //     Logical Minimum (1)
 | ||
|  |     0x25, 0x03,        //     Logical Maximum (3)
 | ||
|  |     0x75, 0x02,        //     Report Size (2)
 | ||
|  |     0x81, 0x00,        //     Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              //   End Collection
 | ||
|  |     0x81, 0x03,        //   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | }; | ||
|  | 
 | ||
|  | const unsigned char hidapiReportMap[] = { //8 bytes input, 8 bytes feature
 | ||
|  |     0x06, 0x00, 0xFF,  // Usage Page (Vendor Defined 0xFF00)
 | ||
|  |     0x0A, 0x00, 0x01,  // Usage (0x0100)
 | ||
|  |     0xA1, 0x01,        // Collection (Application)
 | ||
|  |     0x85, 0x01,        //   Report ID (1)
 | ||
|  |     0x15, 0x00,        //   Logical Minimum (0)
 | ||
|  |     0x26, 0xFF, 0x00,  //   Logical Maximum (255)
 | ||
|  |     0x75, 0x08,        //   Report Size (8)
 | ||
|  |     0x95, 0x08,        //   Report Count (8)
 | ||
|  |     0x09, 0x01,        //   Usage (0x01)
 | ||
|  |     0x82, 0x02, 0x01,  //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Buffered Bytes)
 | ||
|  |     0x95, 0x08,        //   Report Count (8)
 | ||
|  |     0x09, 0x02,        //   Usage (0x02)
 | ||
|  |     0xB2, 0x02, 0x01,  //   Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile,Buffered Bytes)
 | ||
|  |     0x95, 0x08,        //   Report Count (8)
 | ||
|  |     0x09, 0x03,        //   Usage (0x03)
 | ||
|  |     0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
 | ||
|  |     0xC0,              // End Collection
 | ||
|  | 
 | ||
|  |     // 38 bytes
 | ||
|  | }; |