Skip to content

Commit 8828e50

Browse files
committed
removed pressRaw + releaseRaw because this functionality is already contained in the fix for issue arduino#1391 and the code was redundant
1 parent b51dc87 commit 8828e50

File tree

2 files changed

+52
-72
lines changed

2 files changed

+52
-72
lines changed

hardware/arduino/cores/arduino/HID.cpp

+52-69
Original file line numberDiff line numberDiff line change
@@ -458,33 +458,9 @@ uint8_t USBPutChar(uint8_t c);
458458
// to the persistent key report and sends the report. Because of the way
459459
// USB HID works, the host acts like the key remains pressed until we
460460
// call release(), releaseAll(), or otherwise clear the report and resend.
461-
size_t Keyboard_::pressRaw(uint8_t k)
462-
{
463-
uint8_t i;
464-
// Add k to the key report only if it's not already present
465-
// and if there is an empty slot.
466-
if (_keyReport.keys[0] != k && _keyReport.keys[1] != k &&
467-
_keyReport.keys[2] != k && _keyReport.keys[3] != k &&
468-
_keyReport.keys[4] != k && _keyReport.keys[5] != k) {
469-
470-
for (i=0; i<6; i++) {
471-
if (_keyReport.keys[i] == 0x00) {
472-
_keyReport.keys[i] = k;
473-
break;
474-
}
475-
}
476-
if (i == 6 || (k >= 0xE0)) {
477-
setWriteError();
478-
return 0;
479-
}
480-
}
481-
sendReport(&_keyReport);
482-
return 1;
483-
}
484-
485-
// translates ASCII characters to usage
486461
size_t Keyboard_::press(uint8_t k)
487462
{
463+
uint8_t i;
488464
if (k >= 136) { // it's a non-printing key (not a modifier)
489465
k = k - 136;
490466
} else if (k >= 128) { // it's a modifier key
@@ -501,48 +477,28 @@ size_t Keyboard_::press(uint8_t k)
501477
k &= 0x7F;
502478
}
503479
}
504-
return pressRaw(k);
505-
}
506-
507-
// release() takes the specified key out of the persistent key report and
508-
// sends the report. This tells the OS the key is no longer pressed and that
509-
// it shouldn't be repeated any more.
510-
size_t Keyboard_::releaseRaw(uint8_t k)
511-
{
512-
uint8_t i;
513-
// Test the key report to see if k is present. Clear it if it exists.
514-
// Check all positions in case the key is present more than once (which it shouldn't be)
515-
for (i=0; i<6; i++) {
516-
if (0 != k && _keyReport.keys[i] == k) {
517-
_keyReport.keys[i] = 0x00;
480+
481+
// Add k to the key report only if it's not already present
482+
// and if there is an empty slot.
483+
if (_keyReport.keys[0] != k && _keyReport.keys[1] != k &&
484+
_keyReport.keys[2] != k && _keyReport.keys[3] != k &&
485+
_keyReport.keys[4] != k && _keyReport.keys[5] != k) {
486+
487+
for (i=0; i<6; i++) {
488+
if (_keyReport.keys[i] == 0x00) {
489+
_keyReport.keys[i] = k;
490+
break;
491+
}
518492
}
493+
if (i == 6) {
494+
setWriteError();
495+
return 0;
496+
}
519497
}
520-
521498
sendReport(&_keyReport);
522499
return 1;
523500
}
524501

525-
// translates ASCII characters to usage
526-
size_t Keyboard_::release(uint8_t k)
527-
{
528-
if (k >= 136) { // it's a non-printing key (not a modifier)
529-
k = k - 136;
530-
} else if (k >= 128) { // it's a modifier key
531-
_keyReport.modifiers &= ~(1<<(k-128));
532-
k = 0;
533-
} else { // it's a printing key
534-
k = pgm_read_byte(_asciimap + k);
535-
if (!k) {
536-
return 0;
537-
}
538-
if (k & 0x80) { // it's a capital letter or other character reached with shift
539-
_keyReport.modifiers &= ~(0x02); // the left shift modifier
540-
k &= 0x7F;
541-
}
542-
}
543-
return releaseRaw(k);
544-
}
545-
546502
// System Control
547503
// k is one of the SYSTEM_CONTROL defines which come from the HID usage table "Generic Desktop Page (0x01)"
548504
// in "HID Usage Tables" (HUT1_12v2.pdf)
@@ -575,6 +531,40 @@ size_t Keyboard_::systemControl(uint8_t k)
575531
}
576532
}
577533

534+
// release() takes the specified key out of the persistent key report and
535+
// sends the report. This tells the OS the key is no longer pressed and that
536+
// it shouldn't be repeated any more.
537+
size_t Keyboard_::release(uint8_t k)
538+
{
539+
uint8_t i;
540+
if (k >= 136) { // it's a non-printing key (not a modifier)
541+
k = k - 136;
542+
} else if (k >= 128) { // it's a modifier key
543+
_keyReport.modifiers &= ~(1<<(k-128));
544+
k = 0;
545+
} else { // it's a printing key
546+
k = pgm_read_byte(_asciimap + k);
547+
if (!k) {
548+
return 0;
549+
}
550+
if (k & 0x80) { // it's a capital letter or other character reached with shift
551+
_keyReport.modifiers &= ~(0x02); // the left shift modifier
552+
k &= 0x7F;
553+
}
554+
}
555+
556+
// Test the key report to see if k is present. Clear it if it exists.
557+
// Check all positions in case the key is present more than once (which it shouldn't be)
558+
for (i=0; i<6; i++) {
559+
if (0 != k && _keyReport.keys[i] == k) {
560+
_keyReport.keys[i] = 0x00;
561+
}
562+
}
563+
564+
sendReport(&_keyReport);
565+
return 1;
566+
}
567+
578568
void Keyboard_::releaseAll(void)
579569
{
580570
_keyReport.keys[0] = 0;
@@ -587,17 +577,10 @@ void Keyboard_::releaseAll(void)
587577
sendReport(&_keyReport);
588578
}
589579

590-
size_t Keyboard_::writeRaw(uint8_t c)
591-
{
592-
uint8_t p = pressRaw(c); // Keydown
593-
releaseRaw(c); // Keyup
594-
return (p); // just return the result of press() since release() almost always returns 1
595-
}
596-
597580
size_t Keyboard_::write(uint8_t c)
598581
{
599582
uint8_t p = press(c); // Keydown
600-
release(c); // Keyup
583+
uint8_t r = release(c); // Keyup
601584
return (p); // just return the result of press() since release() almost always returns 1
602585
}
603586

hardware/arduino/cores/arduino/USBAPI.h

-3
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,8 @@ class Keyboard_ : public Print
154154
void begin(void);
155155
void end(void);
156156
virtual size_t write(uint8_t k);
157-
virtual size_t writeRaw(uint8_t c);
158157
virtual size_t press(uint8_t k);
159-
virtual size_t pressRaw(uint8_t k);
160158
virtual size_t release(uint8_t k);
161-
virtual size_t releaseRaw(uint8_t k);
162159
virtual void releaseAll(void);
163160
virtual size_t systemControl(uint8_t k);
164161
};

0 commit comments

Comments
 (0)