@@ -45,23 +45,54 @@ Keyboard_ Keyboard;
45
45
#define RAWHID_TX_SIZE 64
46
46
#define RAWHID_RX_SIZE 64
47
47
48
- #define HID_REPORTID_MOUSE (1 )
49
- #define HID_REPORTID_KEYBOARD (2 )
50
- #define HID_REPORTID_RAWHID (3 )
48
+ #define HID_REPORTID_KEYBOARD (1 )
49
+ #define HID_REPORTID_MOUSE (2 )
50
+ #define HID_REPORTID_MOUSE_ABS (3 )
51
51
#define HID_REPORTID_SYSTEMCONTROL (4 )
52
- #define HID_REPORTID_MOUSE_ABS (5 )
53
- #define HID_REPORTID_CONSUMERCONTROL (6 )
52
+ #define HID_REPORTID_CONSUMERCONTROL (5 )
53
+ #define HID_REPORTID_RAWHID (6 )
54
54
55
55
extern const u8 _hidReportDescriptor[] PROGMEM;
56
56
const u8 _hidReportDescriptor[] = {
57
57
58
+ // Keyboard
59
+ 0x05 , 0x01 , // USAGE_PAGE (Generic Desktop) // 47
60
+ 0x09 , 0x06 , // USAGE (Keyboard)
61
+ 0xa1 , 0x01 , // COLLECTION (Application)
62
+ 0x85 , HID_REPORTID_KEYBOARD, // REPORT_ID
63
+ 0x05 , 0x07 , // USAGE_PAGE (Keyboard)
64
+
65
+ // Keyboard Modifiers (shift, alt, ...)
66
+ 0x19 , 0xe0 , // USAGE_MINIMUM (Keyboard LeftControl)
67
+ 0x29 , 0xe7 , // USAGE_MAXIMUM (Keyboard Right GUI)
68
+ 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
69
+ 0x25 , 0x01 , // LOGICAL_MAXIMUM (1)
70
+ 0x75 , 0x01 , // REPORT_SIZE (1)
71
+
72
+ 0x95 , 0x08 , // REPORT_COUNT (8)
73
+ 0x81 , 0x02 , // INPUT (Data,Var,Abs)
74
+ 0x95 , 0x01 , // REPORT_COUNT (1)
75
+ 0x75 , 0x08 , // REPORT_SIZE (8)
76
+ 0x81 , 0x03 , // INPUT (Cnst,Var,Abs)
77
+
78
+ // Keyboard keys
79
+ 0x95 , 0x06 , // REPORT_COUNT (6)
80
+ 0x75 , 0x08 , // REPORT_SIZE (8)
81
+ 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
82
+ 0x26 , 0xDF , 0x00 , // LOGICAL_MAXIMUM (239)
83
+ 0x05 , 0x07 , // USAGE_PAGE (Keyboard)
84
+ 0x19 , 0x00 , // USAGE_MINIMUM (Reserved (no event indicated))
85
+ 0x29 , 0xDF , // USAGE_MAXIMUM (Left Control - 1)
86
+ 0x81 , 0x00 , // INPUT (Data,Ary,Abs)
87
+ 0xc0 , // END_COLLECTION
88
+
58
89
// Mouse relative
59
90
0x05 , 0x01 , // USAGE_PAGE (Generic Desktop) // 54
60
91
0x09 , 0x02 , // USAGE (Mouse)
61
92
0xa1 , 0x01 , // COLLECTION (Application)
62
93
0x09 , 0x01 , // USAGE (Pointer)
63
94
0xa1 , 0x00 , // COLLECTION (Physical)
64
- 0x85 , HID_REPORTID_MOUSE, // REPORT_ID (1)
95
+ 0x85 , HID_REPORTID_MOUSE, // REPORT_ID
65
96
0x05 , 0x09 , // USAGE_PAGE (Button)
66
97
0x19 , 0x01 , // USAGE_MINIMUM (Button 1)
67
98
0x29 , 0x03 , // USAGE_MAXIMUM (Button 3)
@@ -92,7 +123,7 @@ const u8 _hidReportDescriptor[] = {
92
123
0xa1 , 0x01 , // COLLECTION (Application)
93
124
0x09 , 0x01 , // USAGE (Pointer)
94
125
0xa1 , 0x00 , // COLLECTION (Physical)
95
- 0x85 , HID_REPORTID_MOUSE_ABS, // REPORT_ID (5)
126
+ 0x85 , HID_REPORTID_MOUSE_ABS, // REPORT_ID
96
127
0x05 , 0x09 , // USAGE_PAGE (Button)
97
128
0x19 , 0x01 , // USAGE_MINIMUM (Button 1)
98
129
0x29 , 0x03 , // USAGE_MAXIMUM (Button 3)
@@ -116,106 +147,76 @@ const u8 _hidReportDescriptor[] = {
116
147
0xc0 , // END_COLLECTION
117
148
#endif
118
149
119
- // Keyboard
120
- 0x05 , 0x01 , // USAGE_PAGE (Generic Desktop) // 47
121
- 0x09 , 0x06 , // USAGE (Keyboard)
122
- 0xa1 , 0x01 , // COLLECTION (Application)
123
- 0x85 , HID_REPORTID_KEYBOARD, // REPORT_ID (2)
124
- 0x05 , 0x07 , // USAGE_PAGE (Keyboard)
125
-
126
- // Keyboard Modifiers (shift, alt, ...)
127
- 0x19 , 0xe0 , // USAGE_MINIMUM (Keyboard LeftControl)
128
- 0x29 , 0xe7 , // USAGE_MAXIMUM (Keyboard Right GUI)
129
- 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
130
- 0x25 , 0x01 , // LOGICAL_MAXIMUM (1)
131
- 0x75 , 0x01 , // REPORT_SIZE (1)
132
-
133
- 0x95 , 0x08 , // REPORT_COUNT (8)
134
- 0x81 , 0x02 , // INPUT (Data,Var,Abs)
135
- 0x95 , 0x01 , // REPORT_COUNT (1)
136
- 0x75 , 0x08 , // REPORT_SIZE (8)
137
- 0x81 , 0x03 , // INPUT (Cnst,Var,Abs)
138
-
139
- // Keyboard keys
140
- 0x95 , 0x06 , // REPORT_COUNT (6)
141
- 0x75 , 0x08 , // REPORT_SIZE (8)
142
- 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
143
- 0x26 , 0xDF , 0x00 , // LOGICAL_MAXIMUM (239)
144
- 0x05 , 0x07 , // USAGE_PAGE (Keyboard)
145
- 0x19 , 0x00 , // USAGE_MINIMUM (Reserved (no event indicated))
146
- 0x29 , 0xDF , // USAGE_MAXIMUM (Left Control - 1)
147
- 0x81 , 0x00 , // INPUT (Data,Ary,Abs)
148
- 0xc0 , // END_COLLECTION
149
-
150
150
// System Control (Power Down, Sleep, Wakeup, ...)
151
- 0x05 , 0x01 , // USAGE_PAGE (Generic Desktop)
152
- 0x09 , 0x80 , // USAGE (System Control)
153
- 0xa1 , 0x01 , // COLLECTION (Application)
154
- 0x85 , HID_REPORTID_SYSTEMCONTROL,// REPORT_ID (4)
155
- 0x09 , 0x81 , // USAGE (System Power Down)
156
- 0x09 , 0x82 , // USAGE (System Sleep)
157
- 0x09 , 0x83 , // USAGE (System Wakeup)
158
- 0x09 , 0x8E , // USAGE (System Cold Restart)
159
- 0x09 , 0x8F , // USAGE (System Warm Restart)
160
- 0x09 , 0xA0 , // USAGE (System Dock)
161
- 0x09 , 0xA1 , // USAGE (System Undock)
162
- 0x09 , 0xA7 , // USAGE (System Speaker Mute)
163
- 0x09 , 0xA8 , // USAGE (System Hibernate)
164
- // although these display usages are not that important, they don't cost much more than declaring
165
- // the otherwise necessary constant fill bits
166
- 0x09 , 0xB0 , // USAGE (System Display Invert)
167
- 0x09 , 0xB1 , // USAGE (System Display Internal)
168
- 0x09 , 0xB2 , // USAGE (System Display External)
169
- 0x09 , 0xB3 , // USAGE (System Display Both)
170
- 0x09 , 0xB4 , // USAGE (System Display Dual)
171
- 0x09 , 0xB5 , // USAGE (System Display Toggle Intern/Extern)
172
- 0x09 , 0xB6 , // USAGE (System Display Swap)
173
- 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
174
- 0x25 , 0x01 , // LOGICAL_MAXIMUM (1)
175
- 0x75 , 0x01 , // REPORT_SIZE (1)
176
- 0x95 , 0x10 , // REPORT_COUNT (16)
177
- 0x81 , 0x02 , // INPUT (Data,Var,Abs)
178
- 0xc0 , // END_COLLECTION
151
+ 0x05 , 0x01 , // USAGE_PAGE (Generic Desktop)
152
+ 0x09 , 0x80 , // USAGE (System Control)
153
+ 0xa1 , 0x01 , // COLLECTION (Application)
154
+ 0x85 , HID_REPORTID_SYSTEMCONTROL, // REPORT_ID
155
+ 0x09 , 0x81 , // USAGE (System Power Down)
156
+ 0x09 , 0x82 , // USAGE (System Sleep)
157
+ 0x09 , 0x83 , // USAGE (System Wakeup)
158
+ 0x09 , 0x8E , // USAGE (System Cold Restart)
159
+ 0x09 , 0x8F , // USAGE (System Warm Restart)
160
+ 0x09 , 0xA0 , // USAGE (System Dock)
161
+ 0x09 , 0xA1 , // USAGE (System Undock)
162
+ 0x09 , 0xA7 , // USAGE (System Speaker Mute)
163
+ 0x09 , 0xA8 , // USAGE (System Hibernate)
164
+ // although these display usages are not that important, they don't cost
165
+ // much more than declaring the otherwise necessary constant fill bits
166
+ 0x09 , 0xB0 , // USAGE (System Display Invert)
167
+ 0x09 , 0xB1 , // USAGE (System Display Internal)
168
+ 0x09 , 0xB2 , // USAGE (System Display External)
169
+ 0x09 , 0xB3 , // USAGE (System Display Both)
170
+ 0x09 , 0xB4 , // USAGE (System Display Dual)
171
+ 0x09 , 0xB5 , // USAGE (System Display Toggle Intern/Extern)
172
+ 0x09 , 0xB6 , // USAGE (System Display Swap)
173
+ 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
174
+ 0x25 , 0x01 , // LOGICAL_MAXIMUM (1)
175
+ 0x75 , 0x01 , // REPORT_SIZE (1)
176
+ 0x95 , 0x10 , // REPORT_COUNT (16)
177
+ 0x81 , 0x02 , // INPUT (Data,Var,Abs)
178
+ 0xc0 , // END_COLLECTION
179
+
180
+ // Consumer Control (Sound/Media keys)
181
+ 0x05 , 0x0c , // USAGE_PAGE (Consumer Devices)
182
+ 0x09 , 0x01 , // USAGE (Consumer Control)
183
+ 0xa1 , 0x01 , // COLLECTION (Application)
184
+ 0x85 , HID_REPORTID_CONSUMERCONTROL,// REPORT_ID
185
+ 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
186
+ 0x25 , 0x01 , // LOGICAL_MAXIMUM (1)
187
+ 0x75 , 0x01 , // REPORT_SIZE (1)
188
+ 0x95 , 0x08 , // REPORT_COUNT (8)
189
+ 0x09 , 0xe2 , // USAGE (Mute) 0x01
190
+ 0x09 , 0xe9 , // USAGE (Volume Up) 0x02
191
+ 0x09 , 0xea , // USAGE (Volume Down) 0x03
192
+ 0x09 , 0xcd , // USAGE (Play/Pause) 0x04
193
+ 0x09 , 0xb7 , // USAGE (Stop) 0x05
194
+ 0x09 , 0xb6 , // USAGE (Scan Previous Track) 0x06
195
+ 0x09 , 0xb5 , // USAGE (Scan Next Track) 0x07
196
+ 0x09 , 0xb8 , // USAGE (Eject) 0x08
197
+ 0x81 , 0x02 , // INPUT (Data,Var,Abs)
198
+ 0xc0 ,
179
199
180
200
#if RAWHID_ENABLED
181
- // RAW HID
182
- 0x06 , LSB (RAWHID_USAGE_PAGE), MSB (RAWHID_USAGE_PAGE), // 30
183
- 0x0A , LSB (RAWHID_USAGE), MSB (RAWHID_USAGE),
184
-
185
- 0xA1 , 0x01 , // Collection 0x01
186
- 0x85 , HID_REPORTID_RAWHID, // REPORT_ID (3)
187
- 0x75 , 0x08 , // report size = 8 bits
188
- 0x15 , 0x00 , // logical minimum = 0
189
- 0x26 , 0xFF , 0x00 , // logical maximum = 255
190
-
191
- 0x95 , 64 , // report count TX
192
- 0x09 , 0x01 , // usage
193
- 0x81 , 0x02 , // Input (array)
194
-
195
- 0x95 , 64 , // report count RX
196
- 0x09 , 0x02 , // usage
197
- 0x91 , 0x02 , // Output (array)
198
- 0xC0 // end collection
201
+ // RAW HID
202
+ 0x06 , LSB (RAWHID_USAGE_PAGE), MSB (RAWHID_USAGE_PAGE), // 30
203
+ 0x0A , LSB (RAWHID_USAGE), MSB (RAWHID_USAGE),
204
+
205
+ 0xA1 , 0x01 , // Collection 0x01
206
+ 0x85 , HID_REPORTID_RAWHID, // REPORT_ID
207
+ 0x75 , 0x08 , // report size = 8 bits
208
+ 0x15 , 0x00 , // logical minimum = 0
209
+ 0x26 , 0xFF , 0x00 , // logical maximum = 255
210
+
211
+ 0x95 , 64 , // report count TX
212
+ 0x09 , 0x01 , // usage
213
+ 0x81 , 0x02 , // Input (array)
214
+
215
+ 0x95 , 64 , // report count RX
216
+ 0x09 , 0x02 , // usage
217
+ 0x91 , 0x02 , // Output (array)
218
+ 0xC0 // end collection
199
219
#endif
200
- 0x05 , 0x0c , // USAGE_PAGE (Consumer Devices)
201
- 0x09 , 0x01 , // USAGE (Consumer Control)
202
- 0xa1 , 0x01 , // COLLECTION (Application)
203
- 0x85 , HID_REPORTID_CONSUMERCONTROL, // REPORT_ID (6)
204
- 0x15 , 0x00 , // LOGICAL_MINIMUM (0)
205
- 0x25 , 0x01 , // LOGICAL_MAXIMUM (1)
206
- 0x75 , 0x01 , // REPORT_SIZE (1)
207
- 0x95 , 0x08 , // REPORT_COUNT (8)
208
- 0x09 , 0xe2 , // USAGE (Mute) 0x01
209
- 0x09 , 0xe9 , // USAGE (Volume Up) 0x02
210
- 0x09 , 0xea , // USAGE (Volume Down) 0x03
211
- 0x09 , 0xcd , // USAGE (Play/Pause) 0x04
212
- 0x09 , 0xb7 , // USAGE (Stop) 0x05
213
- 0x09 , 0xb6 , // USAGE (Scan Previous Track) 0x06
214
- 0x09 , 0xb5 , // USAGE (Scan Next Track) 0x07
215
- 0x09 , 0xb8 , // USAGE (Eject) 0x08
216
- 0x81 , 0x02 , // INPUT (Data,Var,Abs)
217
- 0xc0 ,
218
-
219
220
};
220
221
221
222
extern const HIDDescriptor _hidInterface PROGMEM;
0 commit comments