Skip to content

Commit 259a2f1

Browse files
committed
added methods to Keyboard to handle multiple simultaneous key presses or releases (up to six each)
1 parent 63fdb8e commit 259a2f1

File tree

2 files changed

+96
-11
lines changed

2 files changed

+96
-11
lines changed

hardware/arduino/cores/arduino/HID.cpp

Lines changed: 81 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -467,17 +467,6 @@ size_t Keyboard_::press(uint8_t k)
467467
// it shouldn't be repeated any more.
468468
size_t Keyboard_::release(uint8_t k)
469469
{
470-
/*
471-
uint8_t i;
472-
k = pgm_read_byte(_asciimap + k);
473-
if (!k) {
474-
return 0;
475-
}
476-
if (k & 0x80) {
477-
_keyReport.modifiers |= 0x02; // the left shift modifier
478-
k &= 0x7F;
479-
}
480-
*/
481470
uint8_t i;
482471
if (k >= 136) { // it's a non-printing key (not a modifier)
483472
k = k - 136;
@@ -509,6 +498,87 @@ size_t Keyboard_::release(uint8_t k)
509498
return 1;
510499
}
511500

501+
size_t Keyboard_::press(uint8_t k[], uint8_t len) {
502+
uint8_t i;
503+
uint8_t result = 0;
504+
for (i=0; i<len; i++) {
505+
result += press(k[i]);
506+
}
507+
return result;
508+
}
509+
510+
size_t Keyboard_::press(uint8_t k1, uint8_t k2)
511+
{
512+
uint8_t k[] = {k1, k2};
513+
return press(k, 2);
514+
}
515+
516+
size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3)
517+
{
518+
uint8_t k[] = {k1, k2, k3};
519+
return press(k, 3);
520+
}
521+
522+
size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4)
523+
{
524+
uint8_t k[] = {k1, k2, k3, k4};
525+
return press(k, 4);
526+
}
527+
528+
size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5)
529+
{
530+
uint8_t k[] = {k1, k2, k3, k4, k5};
531+
return press(k, 5);
532+
}
533+
534+
size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5, uint8_t k6)
535+
{
536+
uint8_t k[] = {k1, k2, k3, k4, k5, k6};
537+
return press(k, 6);
538+
}
539+
540+
541+
542+
size_t Keyboard_::release(uint8_t k[], uint8_t len) {
543+
uint8_t i;
544+
uint8_t result = 0;
545+
for (i=0; i<len; i++) {
546+
result += release(k[i]);
547+
}
548+
return result;
549+
}
550+
551+
size_t Keyboard_::release(uint8_t k1, uint8_t k2)
552+
{
553+
uint8_t k[] = {k1, k2};
554+
return release(k, 2);
555+
}
556+
557+
size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3)
558+
{
559+
uint8_t k[] = {k1, k2, k3};
560+
return release(k, 3);
561+
}
562+
563+
size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4)
564+
{
565+
uint8_t k[] = {k1, k2, k3, k4};
566+
return release(k, 4);
567+
}
568+
569+
size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5)
570+
{
571+
uint8_t k[] = {k1, k2, k3, k4, k5};
572+
return release(k, 5);
573+
}
574+
575+
size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5, uint8_t k6)
576+
{
577+
uint8_t k[] = {k1, k2, k3, k4, k5, k6};
578+
return release(k, 6);
579+
}
580+
581+
512582
void Keyboard_::releaseAll(void)
513583
{
514584
_keyReport.keys[0] = 0;

hardware/arduino/cores/arduino/USBAPI.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,21 @@ class Keyboard_ : public Print
130130
virtual size_t type(uint8_t k);
131131
virtual size_t press(uint8_t k);
132132
virtual size_t release(uint8_t k);
133+
134+
virtual size_t press(uint8_t k[], uint8_t len);
135+
virtual size_t press(uint8_t k1, uint8_t k2);
136+
virtual size_t press(uint8_t k1, uint8_t k2, uint8_t k3);
137+
virtual size_t press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4);
138+
virtual size_t press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5);
139+
virtual size_t press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5, uint8_t k6);
140+
141+
virtual size_t release(uint8_t k[], uint8_t len);
142+
virtual size_t release(uint8_t k1, uint8_t k2);
143+
virtual size_t release(uint8_t k1, uint8_t k2, uint8_t k3);
144+
virtual size_t release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4);
145+
virtual size_t release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5);
146+
virtual size_t release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5, uint8_t k6);
147+
133148
virtual void releaseAll(void);
134149
};
135150
extern Keyboard_ Keyboard;

0 commit comments

Comments
 (0)