25
25
26
26
// ================================================================================
27
27
// ================================================================================
28
- // Keyboard
28
+ // Keyboard
29
29
30
30
static const uint8_t _hidReportDescriptor[] PROGMEM = {
31
31
32
- // Keyboard
32
+ // Keyboard
33
33
0x05 , 0x01 , // USAGE_PAGE (Generic Desktop) // 47
34
34
0x09 , 0x06 , // USAGE (Keyboard)
35
35
0xa1 , 0x01 , // COLLECTION (Application)
36
36
0x85 , 0x02 , // REPORT_ID (2)
37
37
0x05 , 0x07 , // USAGE_PAGE (Keyboard)
38
-
39
- 0x19 , 0xe0 , // USAGE_MINIMUM (Keyboard LeftControl)
38
+
39
+ 0x19 , 0xe0 , // USAGE_MINIMUM (Keyboard LeftControl)
40
40
0x29 , 0xe7 , // USAGE_MAXIMUM (Keyboard Right GUI)
41
41
0x15 , 0x00 , // LOGICAL_MINIMUM (0)
42
42
0x25 , 0x01 , // LOGICAL_MAXIMUM (1)
43
43
0x75 , 0x01 , // REPORT_SIZE (1)
44
-
45
- 0x95 , 0x08 , // REPORT_COUNT (8)
44
+
45
+ 0x95 , 0x08 , // REPORT_COUNT (8)
46
46
0x81 , 0x02 , // INPUT (Data,Var,Abs)
47
47
0x95 , 0x01 , // REPORT_COUNT (1)
48
48
0x75 , 0x08 , // REPORT_SIZE (8)
49
49
0x81 , 0x03 , // INPUT (Cnst,Var,Abs)
50
-
51
- 0x95 , 0x06 , // REPORT_COUNT (6)
50
+
51
+ 0x95 , 0x06 , // REPORT_COUNT (6)
52
52
0x75 , 0x08 , // REPORT_SIZE (8)
53
53
0x15 , 0x00 , // LOGICAL_MINIMUM (0)
54
54
0x25 , 0x73 , // LOGICAL_MAXIMUM (115)
55
55
0x05 , 0x07 , // USAGE_PAGE (Keyboard)
56
-
57
- 0x19 , 0x00 , // USAGE_MINIMUM (Reserved (no event indicated))
56
+
57
+ 0x19 , 0x00 , // USAGE_MINIMUM (Reserved (no event indicated))
58
58
0x29 , 0x73 , // USAGE_MAXIMUM (Keyboard Application)
59
59
0x81 , 0x00 , // INPUT (Data,Ary,Abs)
60
60
0xc0 , // END_COLLECTION
61
61
};
62
62
63
- Keyboard_::Keyboard_ (void )
63
+ Keyboard_::Keyboard_ (void )
64
64
{
65
65
static HIDSubDescriptor node (_hidReportDescriptor, sizeof (_hidReportDescriptor));
66
66
HID ().AppendDescriptor (&node);
@@ -91,16 +91,16 @@ const uint8_t _asciimap[128] =
91
91
0x00 , // ETX
92
92
0x00 , // EOT
93
93
0x00 , // ENQ
94
- 0x00 , // ACK
94
+ 0x00 , // ACK
95
95
0x00 , // BEL
96
- 0x2a , // BS Backspace
97
- 0x2b , // TAB Tab
98
- 0x28 , // LF Enter
99
- 0x00 , // VT
100
- 0x00 , // FF
101
- 0x00 , // CR
102
- 0x00 , // SO
103
- 0x00 , // SI
96
+ 0x2a , // BS Backspace
97
+ 0x2b , // TAB Tab
98
+ 0x28 , // LF Enter
99
+ 0x00 , // VT
100
+ 0x00 , // FF
101
+ 0x00 , // CR
102
+ 0x00 , // SO
103
+ 0x00 , // SI
104
104
0x00 , // DEL
105
105
0x00 , // DC1
106
106
0x00 , // DC2
@@ -110,17 +110,17 @@ const uint8_t _asciimap[128] =
110
110
0x00 , // SYN
111
111
0x00 , // ETB
112
112
0x00 , // CAN
113
- 0x00 , // EM
113
+ 0x00 , // EM
114
114
0x00 , // SUB
115
115
0x00 , // ESC
116
- 0x00 , // FS
117
- 0x00 , // GS
118
- 0x00 , // RS
119
- 0x00 , // US
120
-
121
- 0x2c , // ' '
122
- 0x1e |SHIFT, // !
123
- 0x34 |SHIFT, // "
116
+ 0x00 , // FS
117
+ 0x00 , // GS
118
+ 0x00 , // RS
119
+ 0x00 , // US
120
+
121
+ 0x2c , // ' '
122
+ 0x1e |SHIFT, // !
123
+ 0x34 |SHIFT, // "
124
124
0x20 |SHIFT, // #
125
125
0x21 |SHIFT, // $
126
126
0x22 |SHIFT, // %
@@ -144,39 +144,39 @@ const uint8_t _asciimap[128] =
144
144
0x24 , // 7
145
145
0x25 , // 8
146
146
0x26 , // 9
147
- 0x33 |SHIFT, // :
147
+ 0x33 |SHIFT, // :
148
148
0x33 , // ;
149
- 0x36 |SHIFT, // <
149
+ 0x36 |SHIFT, // <
150
150
0x2e , // =
151
- 0x37 |SHIFT, // >
152
- 0x38 |SHIFT, // ?
153
- 0x1f |SHIFT, // @
154
- 0x04 |SHIFT, // A
155
- 0x05 |SHIFT, // B
156
- 0x06 |SHIFT, // C
157
- 0x07 |SHIFT, // D
158
- 0x08 |SHIFT, // E
159
- 0x09 |SHIFT, // F
160
- 0x0a |SHIFT, // G
161
- 0x0b |SHIFT, // H
162
- 0x0c |SHIFT, // I
163
- 0x0d |SHIFT, // J
164
- 0x0e |SHIFT, // K
165
- 0x0f |SHIFT, // L
166
- 0x10 |SHIFT, // M
167
- 0x11 |SHIFT, // N
168
- 0x12 |SHIFT, // O
169
- 0x13 |SHIFT, // P
170
- 0x14 |SHIFT, // Q
171
- 0x15 |SHIFT, // R
172
- 0x16 |SHIFT, // S
173
- 0x17 |SHIFT, // T
174
- 0x18 |SHIFT, // U
175
- 0x19 |SHIFT, // V
176
- 0x1a |SHIFT, // W
177
- 0x1b |SHIFT, // X
178
- 0x1c |SHIFT, // Y
179
- 0x1d |SHIFT, // Z
151
+ 0x37 |SHIFT, // >
152
+ 0x38 |SHIFT, // ?
153
+ 0x1f |SHIFT, // @
154
+ 0x04 |SHIFT, // A
155
+ 0x05 |SHIFT, // B
156
+ 0x06 |SHIFT, // C
157
+ 0x07 |SHIFT, // D
158
+ 0x08 |SHIFT, // E
159
+ 0x09 |SHIFT, // F
160
+ 0x0a |SHIFT, // G
161
+ 0x0b |SHIFT, // H
162
+ 0x0c |SHIFT, // I
163
+ 0x0d |SHIFT, // J
164
+ 0x0e |SHIFT, // K
165
+ 0x0f |SHIFT, // L
166
+ 0x10 |SHIFT, // M
167
+ 0x11 |SHIFT, // N
168
+ 0x12 |SHIFT, // O
169
+ 0x13 |SHIFT, // P
170
+ 0x14 |SHIFT, // Q
171
+ 0x15 |SHIFT, // R
172
+ 0x16 |SHIFT, // S
173
+ 0x17 |SHIFT, // T
174
+ 0x18 |SHIFT, // U
175
+ 0x19 |SHIFT, // V
176
+ 0x1a |SHIFT, // W
177
+ 0x1b |SHIFT, // X
178
+ 0x1c |SHIFT, // Y
179
+ 0x1d |SHIFT, // Z
180
180
0x2f , // [
181
181
0x31 , // bslash
182
182
0x30 , // ]
@@ -213,17 +213,17 @@ const uint8_t _asciimap[128] =
213
213
0x31 |SHIFT, // |
214
214
0x30 |SHIFT, // }
215
215
0x35 |SHIFT, // ~
216
- 0 // DEL
216
+ 0x00 // DEL
217
217
};
218
218
219
219
220
220
uint8_t USBPutChar (uint8_t c);
221
221
222
222
// press() adds the specified key (printing, non-printing, or modifier)
223
- // to the persistent key report and sends the report. Because of the way
224
- // USB HID works, the host acts like the key remains pressed until we
223
+ // to the persistent key report and sends the report. Because of the way
224
+ // USB HID works, the host acts like the key remains pressed until we
225
225
// call release(), releaseAll(), or otherwise clear the report and resend.
226
- size_t Keyboard_::press (uint8_t k)
226
+ size_t Keyboard_::press (uint8_t k)
227
227
{
228
228
uint8_t i;
229
229
if (k >= 136 ) { // it's a non-printing key (not a modifier)
@@ -242,13 +242,13 @@ size_t Keyboard_::press(uint8_t k)
242
242
k &= 0x7F ;
243
243
}
244
244
}
245
-
245
+
246
246
// Add k to the key report only if it's not already present
247
247
// and if there is an empty slot.
248
- if (_keyReport.keys [0 ] != k && _keyReport.keys [1 ] != k &&
248
+ if (_keyReport.keys [0 ] != k && _keyReport.keys [1 ] != k &&
249
249
_keyReport.keys [2 ] != k && _keyReport.keys [3 ] != k &&
250
250
_keyReport.keys [4 ] != k && _keyReport.keys [5 ] != k) {
251
-
251
+
252
252
for (i=0 ; i<6 ; i++) {
253
253
if (_keyReport.keys [i] == 0x00 ) {
254
254
_keyReport.keys [i] = k;
@@ -258,7 +258,7 @@ size_t Keyboard_::press(uint8_t k)
258
258
if (i == 6 ) {
259
259
setWriteError ();
260
260
return 0 ;
261
- }
261
+ }
262
262
}
263
263
sendReport (&_keyReport);
264
264
return 1 ;
@@ -267,7 +267,7 @@ size_t Keyboard_::press(uint8_t k)
267
267
// release() takes the specified key out of the persistent key report and
268
268
// sends the report. This tells the OS the key is no longer pressed and that
269
269
// it shouldn't be repeated any more.
270
- size_t Keyboard_::release (uint8_t k)
270
+ size_t Keyboard_::release (uint8_t k)
271
271
{
272
272
uint8_t i;
273
273
if (k >= 136 ) { // it's a non-printing key (not a modifier)
@@ -285,7 +285,7 @@ size_t Keyboard_::release(uint8_t k)
285
285
k &= 0x7F ;
286
286
}
287
287
}
288
-
288
+
289
289
// Test the key report to see if k is present. Clear it if it exists.
290
290
// Check all positions in case the key is present more than once (which it shouldn't be)
291
291
for (i=0 ; i<6 ; i++) {
@@ -301,30 +301,30 @@ size_t Keyboard_::release(uint8_t k)
301
301
void Keyboard_::releaseAll (void )
302
302
{
303
303
_keyReport.keys [0 ] = 0 ;
304
- _keyReport.keys [1 ] = 0 ;
304
+ _keyReport.keys [1 ] = 0 ;
305
305
_keyReport.keys [2 ] = 0 ;
306
- _keyReport.keys [3 ] = 0 ;
306
+ _keyReport.keys [3 ] = 0 ;
307
307
_keyReport.keys [4 ] = 0 ;
308
- _keyReport.keys [5 ] = 0 ;
308
+ _keyReport.keys [5 ] = 0 ;
309
309
_keyReport.modifiers = 0 ;
310
310
sendReport (&_keyReport);
311
311
}
312
312
313
313
size_t Keyboard_::write (uint8_t c)
314
314
{
315
- uint8_t p = press (c); // Keydown
316
- release (c); // Keyup
317
- return p; // just return the result of press() since release() almost always returns 1
315
+ uint8_t p = press (c); // Keydown
316
+ release (c); // Keyup
317
+ return p; // just return the result of press() since release() almost always returns 1
318
318
}
319
319
320
320
size_t Keyboard_::write (const uint8_t *buffer, size_t size) {
321
321
size_t n = 0 ;
322
322
while (size--) {
323
323
if (*buffer != ' \r ' ) {
324
324
if (write (*buffer)) {
325
- n++;
325
+ n++;
326
326
} else {
327
- break ;
327
+ break ;
328
328
}
329
329
}
330
330
buffer++;
0 commit comments