diff options
author | Zach Eveland <zeveland@blacklabel-development.com> | 2012-03-26 17:28:02 -0400 |
---|---|---|
committer | Zach Eveland <zeveland@blacklabel-development.com> | 2012-03-26 17:28:02 -0400 |
commit | 58c36f76d51d1fe4859140acf5c9c056b4204da5 (patch) | |
tree | c9699c9a4ed1ba313fea8b18b8f67f3aa4186305 /cores/arduino/HID.cpp | |
parent | f646c9186d33b26adeaada088e9549417463cdab (diff) |
added methods to Keyboard to handle multiple simultaneous key presses or releases (up to six each)
Diffstat (limited to 'cores/arduino/HID.cpp')
-rw-r--r-- | cores/arduino/HID.cpp | 92 |
1 files changed, 81 insertions, 11 deletions
diff --git a/cores/arduino/HID.cpp b/cores/arduino/HID.cpp index b0ef6e3..b556223 100644 --- a/cores/arduino/HID.cpp +++ b/cores/arduino/HID.cpp @@ -467,17 +467,6 @@ size_t Keyboard_::press(uint8_t k) // it shouldn't be repeated any more. size_t Keyboard_::release(uint8_t k) { - /* - uint8_t i; - k = pgm_read_byte(_asciimap + k); - if (!k) { - return 0; - } - if (k & 0x80) { - _keyReport.modifiers |= 0x02; // the left shift modifier - k &= 0x7F; - } - */ uint8_t i; if (k >= 136) { // it's a non-printing key (not a modifier) k = k - 136; @@ -509,6 +498,87 @@ size_t Keyboard_::release(uint8_t k) return 1; } +size_t Keyboard_::press(uint8_t k[], uint8_t len) { + uint8_t i; + uint8_t result = 0; + for (i=0; i<len; i++) { + result += press(k[i]); + } + return result; +} + +size_t Keyboard_::press(uint8_t k1, uint8_t k2) +{ + uint8_t k[] = {k1, k2}; + return press(k, 2); +} + +size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3) +{ + uint8_t k[] = {k1, k2, k3}; + return press(k, 3); +} + +size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4) +{ + uint8_t k[] = {k1, k2, k3, k4}; + return press(k, 4); +} + +size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5) +{ + uint8_t k[] = {k1, k2, k3, k4, k5}; + return press(k, 5); +} + +size_t Keyboard_::press(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5, uint8_t k6) +{ + uint8_t k[] = {k1, k2, k3, k4, k5, k6}; + return press(k, 6); +} + + + +size_t Keyboard_::release(uint8_t k[], uint8_t len) { + uint8_t i; + uint8_t result = 0; + for (i=0; i<len; i++) { + result += release(k[i]); + } + return result; +} + +size_t Keyboard_::release(uint8_t k1, uint8_t k2) +{ + uint8_t k[] = {k1, k2}; + return release(k, 2); +} + +size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3) +{ + uint8_t k[] = {k1, k2, k3}; + return release(k, 3); +} + +size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4) +{ + uint8_t k[] = {k1, k2, k3, k4}; + return release(k, 4); +} + +size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5) +{ + uint8_t k[] = {k1, k2, k3, k4, k5}; + return release(k, 5); +} + +size_t Keyboard_::release(uint8_t k1, uint8_t k2, uint8_t k3, uint8_t k4, uint8_t k5, uint8_t k6) +{ + uint8_t k[] = {k1, k2, k3, k4, k5, k6}; + return release(k, 6); +} + + void Keyboard_::releaseAll(void) { _keyReport.keys[0] = 0; |