From abea4c281cd75f8301682f99e7502aa6a45d0cb9 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 13:13:07 -0600 Subject: [PATCH 1/9] Simplify if(keyToggledOn) --- src/Kaleidoscope/Qukeys.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/Kaleidoscope/Qukeys.cpp b/src/Kaleidoscope/Qukeys.cpp index 3d921c19..602c12ce 100644 --- a/src/Kaleidoscope/Qukeys.cpp +++ b/src/Kaleidoscope/Qukeys.cpp @@ -191,17 +191,13 @@ Key Qukeys::keyScanHook(Key mapped_key, byte row, byte col, uint8_t key_state) { // If the key was just pressed: if (keyToggledOn(key_state)) { - // I think I may need to call maskKey() somewhere here, but I'm not sure - if (key_queue_length_) { - enqueue(key_addr); - } else { - // If it's not a qukey, proceed: - if (qukey_index == QUKEY_NOT_FOUND) - return mapped_key; - // Otherwise, queue the qukey: - enqueue(key_addr); - return Key_NoKey; // is this right? - } + // If the queue is empty and the key isn't a qukey, proceed: + if (key_queue_length_ == 0 && + qukey_index == QUKEY_NOT_FOUND) + return mapped_key; + // Otherwise, queue the key and stop processing: + enqueue(key_addr); + return Key_NoKey; } // In all other cases, we need to know if the key is queued already From c112cc615d9c1f87fecc531f621cecd170223198 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:29:25 -0600 Subject: [PATCH 2/9] Flush non-qukeys from the head of the queue --- src/Kaleidoscope/Qukeys.cpp | 19 ++++++++++--------- src/Kaleidoscope/Qukeys.h | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Kaleidoscope/Qukeys.cpp b/src/Kaleidoscope/Qukeys.cpp index 602c12ce..a8177543 100644 --- a/src/Kaleidoscope/Qukeys.cpp +++ b/src/Kaleidoscope/Qukeys.cpp @@ -72,6 +72,7 @@ int8_t Qukeys::lookupQukey(uint8_t key_addr) { void Qukeys::enqueue(uint8_t key_addr) { if (key_queue_length_ == QUKEYS_QUEUE_MAX) { flushKey(QUKEY_STATE_PRIMARY, IS_PRESSED | WAS_PRESSED); + flushQueue(); } key_queue_[key_queue_length_].addr = key_addr; key_queue_[key_queue_length_].flush_time = millis() + time_limit_; @@ -143,15 +144,6 @@ void Qukeys::flushKey(bool qukey_state, uint8_t keyswitch_state) { key_queue_[i] = key_queue_[i + 1]; } key_queue_length_--; - // After flushing the first key in the queue, maybe the next key should be checked to - // see if it should also be flushed? - // while (key_queue_length_ > 0) { - // // If it's a qukey, stop: - // if ( lookupQukey(key_queue_[0].addr) != QUKEY_NOT_FOUND ) - // break; - // // Otherwise, flush the next key from the queue - // flushKey(QUKEY_STATE_PRIMARY, IS_PRESSED | WAS_PRESSED); - // } } // flushQueue() is called when a key that's in the key_queue is @@ -169,6 +161,15 @@ void Qukeys::flushQueue(int8_t index) { flushKey(QUKEY_STATE_PRIMARY, WAS_PRESSED); } +// Flush all the non-qukey keys from the front of the queue +void Qukeys::flushQueue(void) { + // flush keys until we find a qukey: + while (key_queue_length_ > 0 && + lookupQukey(key_queue_[0].addr) == QUKEY_NOT_FOUND) { + flushKey(QUKEY_STATE_PRIMARY, IS_PRESSED | WAS_PRESSED); + } +} + Key Qukeys::keyScanHook(Key mapped_key, byte row, byte col, uint8_t key_state) { // Uncomment this for debugging, so as not to make flashing difficult //if (row == 0 && col == 0) return mapped_key; diff --git a/src/Kaleidoscope/Qukeys.h b/src/Kaleidoscope/Qukeys.h index 3d48b996..403f6b81 100644 --- a/src/Kaleidoscope/Qukeys.h +++ b/src/Kaleidoscope/Qukeys.h @@ -92,6 +92,7 @@ class Qukeys : public KaleidoscopePlugin { static int8_t searchQueue(uint8_t key_addr); static void flushKey(bool qukey_state, uint8_t keyswitch_state); static void flushQueue(int8_t index); + static void flushQueue(void); static Qukey * qukeys_; static uint8_t qukeys_count_; From d33deda114a8ff99b3a9499b2e13b506b75b6f4e Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:34:12 -0600 Subject: [PATCH 3/9] astyle --- examples/Qukeys/Qukeys.ino | 32 ++++++++++++++++---------------- src/Kaleidoscope/Qukeys.cpp | 12 ++++++------ src/Kaleidoscope/Qukeys.h | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/examples/Qukeys/Qukeys.ino b/examples/Qukeys/Qukeys.ino index e821e194..27d61a20 100644 --- a/examples/Qukeys/Qukeys.ino +++ b/examples/Qukeys/Qukeys.ino @@ -8,22 +8,22 @@ enum { MACRO_TOGGLE_QUKEYS }; KEYMAPS( [0] = KEYMAP_STACKED - ( - Key_NoKey, Key_1, Key_2, Key_3, Key_4, Key_5, Key_NoKey, - Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab, - Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G, - Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape, - - Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift, - ___, - - M(MACRO_TOGGLE_QUKEYS), Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, - Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, - Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, - Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, - - Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl, - ___), + ( + Key_NoKey, Key_1, Key_2, Key_3, Key_4, Key_5, Key_NoKey, + Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab, + Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G, + Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape, + + Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift, + ___, + + M(MACRO_TOGGLE_QUKEYS), Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, + Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, + Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, + Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, + + Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl, + ___), ) // Defining a macro (on the "any" key: see above) to toggle Qukeys on and off diff --git a/src/Kaleidoscope/Qukeys.cpp b/src/Kaleidoscope/Qukeys.cpp index a8177543..3c2f9c54 100644 --- a/src/Kaleidoscope/Qukeys.cpp +++ b/src/Kaleidoscope/Qukeys.cpp @@ -136,7 +136,7 @@ void Qukeys::flushKey(bool qukey_state, uint8_t keyswitch_state) { memcpy(Keyboard.keyReport.allkeys, hid_report.allkeys, sizeof(hid_report)); // Last, if the key is still down, add its code back in - if ( ! keyToggledOn(keyswitch_state) ) + if (! keyToggledOn(keyswitch_state)) handleKeyswitchEvent(keycode, row, col, IS_PRESSED | WAS_PRESSED | INJECTED); // Shift the queue, so key_queue[0] is always the first key that gets processed @@ -164,11 +164,11 @@ void Qukeys::flushQueue(int8_t index) { // Flush all the non-qukey keys from the front of the queue void Qukeys::flushQueue(void) { // flush keys until we find a qukey: - while (key_queue_length_ > 0 && - lookupQukey(key_queue_[0].addr) == QUKEY_NOT_FOUND) { + while (key_queue_length_ > 0 && + lookupQukey(key_queue_[0].addr) == QUKEY_NOT_FOUND) { flushKey(QUKEY_STATE_PRIMARY, IS_PRESSED | WAS_PRESSED); } -} +} Key Qukeys::keyScanHook(Key mapped_key, byte row, byte col, uint8_t key_state) { // Uncomment this for debugging, so as not to make flashing difficult @@ -194,7 +194,7 @@ Key Qukeys::keyScanHook(Key mapped_key, byte row, byte col, uint8_t key_state) { if (keyToggledOn(key_state)) { // If the queue is empty and the key isn't a qukey, proceed: if (key_queue_length_ == 0 && - qukey_index == QUKEY_NOT_FOUND) + qukey_index == QUKEY_NOT_FOUND) return mapped_key; // Otherwise, queue the key and stop processing: enqueue(key_addr); @@ -245,7 +245,7 @@ void Qukeys::preReportHook(void) { // state to the alternate keycode and add it to the report uint32_t current_time = millis(); while (key_queue_length_ > 0) { - if ( lookupQukey(key_queue_[0].addr) == QUKEY_NOT_FOUND ) { + if (lookupQukey(key_queue_[0].addr) == QUKEY_NOT_FOUND) { flushKey(QUKEY_STATE_PRIMARY, IS_PRESSED | WAS_PRESSED); } else if (current_time > key_queue_[0].flush_time) { flushKey(QUKEY_STATE_ALTERNATE, IS_PRESSED | WAS_PRESSED); diff --git a/src/Kaleidoscope/Qukeys.h b/src/Kaleidoscope/Qukeys.h index 403f6b81..4c733919 100644 --- a/src/Kaleidoscope/Qukeys.h +++ b/src/Kaleidoscope/Qukeys.h @@ -105,7 +105,7 @@ class Qukeys : public KaleidoscopePlugin { //static uint8_t keyswitch_state[]; // Qukey state bitfield - static uint8_t qukey_state_[(TOTAL_KEYS)/8 + ((TOTAL_KEYS)%8 ? 1 : 0)]; + static uint8_t qukey_state_[(TOTAL_KEYS) / 8 + ((TOTAL_KEYS) % 8 ? 1 : 0)]; static bool getQukeyState(uint8_t addr) { return bitRead(qukey_state_[addr / 8], addr % 8); } From f2894fa455f2518801653533143db680c1be76fd Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:35:26 -0600 Subject: [PATCH 4/9] Removed unused & commented init() function --- src/Kaleidoscope/Qukeys.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Kaleidoscope/Qukeys.cpp b/src/Kaleidoscope/Qukeys.cpp index 3c2f9c54..76934a8f 100644 --- a/src/Kaleidoscope/Qukeys.cpp +++ b/src/Kaleidoscope/Qukeys.cpp @@ -47,11 +47,6 @@ byte Qukeys::qukey_state_[] = {}; // Empty constructor; nothing is stored at the instance level Qukeys::Qukeys(void) {} -// Qukeys::init(Qukey *qukeys, uint8_t qukeys_count) { -// qukeys_ = qukeys; -// qukeys_count_ = qukeys_count; -// } - int8_t Qukeys::lookupQukey(uint8_t key_addr) { if (key_addr == QUKEY_UNKNOWN_ADDR) { return QUKEY_NOT_FOUND; From e5813aba559448ff232d50090001fb17020b5690 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:37:11 -0600 Subject: [PATCH 5/9] Removed unnecessary comments --- src/Kaleidoscope/Qukeys.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/Kaleidoscope/Qukeys.cpp b/src/Kaleidoscope/Qukeys.cpp index 76934a8f..29d0236d 100644 --- a/src/Kaleidoscope/Qukeys.cpp +++ b/src/Kaleidoscope/Qukeys.cpp @@ -117,16 +117,6 @@ void Qukeys::flushKey(bool qukey_state, uint8_t keyswitch_state) { // Now we send the report (if there were any changes) hid::sendKeyboardReport(); - /* I think this is now unnecessary - // Now for the tricky bit; we need to know if the key was actually - // released, or if it's still being held. Otherwise, we'll screw up - // the next call to flushKey(). - if (keyToggledOff(keyswitch_state)) { - handleKeyswitchEvent(keycode, row, col, keyswitch_state | INJECTED); - hid::sendKeyboardReport(); - } - */ - // Next, we restore the current state of the report memcpy(Keyboard.keyReport.allkeys, hid_report.allkeys, sizeof(hid_report)); @@ -166,8 +156,6 @@ void Qukeys::flushQueue(void) { } Key Qukeys::keyScanHook(Key mapped_key, byte row, byte col, uint8_t key_state) { - // Uncomment this for debugging, so as not to make flashing difficult - //if (row == 0 && col == 0) return mapped_key; // If Qukeys is turned off, continue to next plugin if (!active_) From 50a074bafc8ac8a273426c325339018b2b5ed954 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:38:55 -0600 Subject: [PATCH 6/9] Make internal functions private --- src/Kaleidoscope/Qukeys.h | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Kaleidoscope/Qukeys.h b/src/Kaleidoscope/Qukeys.h index 4c733919..8a466264 100644 --- a/src/Kaleidoscope/Qukeys.h +++ b/src/Kaleidoscope/Qukeys.h @@ -21,8 +21,6 @@ #include #include -// Maximum number of qukeys allowed ­ not actually used -#define QUKEYS_MAX 64 // Maximum length of the pending queue #define QUKEYS_QUEUE_MAX 8 // Total number of keys on the keyboard (assuming full grid) @@ -87,13 +85,6 @@ class Qukeys : public KaleidoscopePlugin { time_limit_ = time_limit; } - static int8_t lookupQukey(uint8_t key_addr); - static void enqueue(uint8_t key_addr); - static int8_t searchQueue(uint8_t key_addr); - static void flushKey(bool qukey_state, uint8_t keyswitch_state); - static void flushQueue(int8_t index); - static void flushQueue(void); - static Qukey * qukeys_; static uint8_t qukeys_count_; @@ -113,6 +104,13 @@ class Qukeys : public KaleidoscopePlugin { bitWrite(qukey_state_[addr / 8], addr % 8, qukey_state); } + static int8_t lookupQukey(uint8_t key_addr); + static void enqueue(uint8_t key_addr); + static int8_t searchQueue(uint8_t key_addr); + static void flushKey(bool qukey_state, uint8_t keyswitch_state); + static void flushQueue(int8_t index); + static void flushQueue(void); + static Key keyScanHook(Key mapped_key, byte row, byte col, uint8_t key_state); static void preReportHook(void); static void postReportHook(void) {} From e842a7cef5a99216270390446290774497bfe18e Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:45:40 -0600 Subject: [PATCH 7/9] Removed trailing underscore from public member variable names --- src/Kaleidoscope/Qukeys.cpp | 17 +++++++++-------- src/Kaleidoscope/Qukeys.h | 10 +++++----- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Kaleidoscope/Qukeys.cpp b/src/Kaleidoscope/Qukeys.cpp index 29d0236d..aa3a12df 100644 --- a/src/Kaleidoscope/Qukeys.cpp +++ b/src/Kaleidoscope/Qukeys.cpp @@ -36,8 +36,9 @@ Qukey::Qukey(int8_t layer, byte row, byte col, Key alt_keycode) { this->alt_keycode = alt_keycode; } -Qukey * Qukeys::qukeys_; -uint8_t Qukeys::qukeys_count_ = 0; +Qukey * Qukeys::qukeys; +uint8_t Qukeys::qukeys_count = 0; + bool Qukeys::active_ = true; uint16_t Qukeys::time_limit_ = 500; QueueItem Qukeys::key_queue_[QUKEYS_QUEUE_MAX] = {}; @@ -51,12 +52,12 @@ int8_t Qukeys::lookupQukey(uint8_t key_addr) { if (key_addr == QUKEY_UNKNOWN_ADDR) { return QUKEY_NOT_FOUND; } - for (int8_t i = 0; i < qukeys_count_; i++) { - if (qukeys_[i].addr == key_addr) { + for (int8_t i = 0; i < qukeys_count; i++) { + if (qukeys[i].addr == key_addr) { byte row = addr::row(key_addr); byte col = addr::col(key_addr); - if ((qukeys_[i].layer == QUKEY_ALL_LAYERS) || - (qukeys_[i].layer == Layer.lookupActiveLayer(row, col))) { + if ((qukeys[i].layer == QUKEY_ALL_LAYERS) || + (qukeys[i].layer == Layer.lookupActiveLayer(row, col))) { return i; } } @@ -94,7 +95,7 @@ void Qukeys::flushKey(bool qukey_state, uint8_t keyswitch_state) { byte col = addr::col(key_queue_[0].addr); Key keycode = Key_NoKey; if (qukey_state == QUKEY_STATE_ALTERNATE && qukey_index != QUKEY_NOT_FOUND) { - keycode = qukeys_[qukey_index].alt_keycode; + keycode = qukeys[qukey_index].alt_keycode; } else { keycode = Layer.lookup(row, col); } @@ -213,7 +214,7 @@ Key Qukeys::keyScanHook(Key mapped_key, byte row, byte col, uint8_t key_state) { // If the qukey is not in the queue, check its state if (queue_index == QUKEY_NOT_FOUND) { if (getQukeyState(key_addr) == QUKEY_STATE_ALTERNATE) { - return qukeys_[qukey_index].alt_keycode; + return qukeys[qukey_index].alt_keycode; } else { // qukey_state == QUKEY_STATE_PRIMARY return mapped_key; } diff --git a/src/Kaleidoscope/Qukeys.h b/src/Kaleidoscope/Qukeys.h index 8a466264..ef34b09d 100644 --- a/src/Kaleidoscope/Qukeys.h +++ b/src/Kaleidoscope/Qukeys.h @@ -85,8 +85,8 @@ class Qukeys : public KaleidoscopePlugin { time_limit_ = time_limit; } - static Qukey * qukeys_; - static uint8_t qukeys_count_; + static Qukey * qukeys; + static uint8_t qukeys_count; private: static bool active_; @@ -123,7 +123,7 @@ extern kaleidoscope::Qukeys Qukeys; // macro for use in sketch file to simplify definition of qukeys #define QUKEYS(qukey_defs...) { \ - static kaleidoscope::Qukey qukeys[] = { qukey_defs }; \ - Qukeys.qukeys_ = qukeys; \ - Qukeys.qukeys_count_ = sizeof(qukeys) / sizeof(kaleidoscope::Qukey); \ + static kaleidoscope::Qukey qk_table[] = { qukey_defs }; \ + Qukeys.qukeys = qk_table; \ + Qukeys.qukeys_count = sizeof(qk_table) / sizeof(kaleidoscope::Qukey); \ } From 41437c789a66a311407caaa413b4c25addfc4f16 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:47:27 -0600 Subject: [PATCH 8/9] Spurious comments removed --- src/Kaleidoscope/Qukeys.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Kaleidoscope/Qukeys.h b/src/Kaleidoscope/Qukeys.h index ef34b09d..5a8d9989 100644 --- a/src/Kaleidoscope/Qukeys.h +++ b/src/Kaleidoscope/Qukeys.h @@ -70,7 +70,6 @@ class Qukeys : public KaleidoscopePlugin { public: Qukeys(void); - //static void init(Qukey *qukeys, uint8_t qukeys_count); void begin(void) final; static void activate(void) { active_ = true; @@ -93,7 +92,6 @@ class Qukeys : public KaleidoscopePlugin { static uint16_t time_limit_; static QueueItem key_queue_[QUKEYS_QUEUE_MAX]; static uint8_t key_queue_length_; - //static uint8_t keyswitch_state[]; // Qukey state bitfield static uint8_t qukey_state_[(TOTAL_KEYS) / 8 + ((TOTAL_KEYS) % 8 ? 1 : 0)]; From cd0073f0ae3bc75556c67471108effec3571ebe1 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Mon, 4 Dec 2017 14:53:02 -0600 Subject: [PATCH 9/9] Prettier formatting of keymap; astyle off for that section --- examples/Qukeys/Qukeys.ino | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/examples/Qukeys/Qukeys.ino b/examples/Qukeys/Qukeys.ino index 27d61a20..862fabb0 100644 --- a/examples/Qukeys/Qukeys.ino +++ b/examples/Qukeys/Qukeys.ino @@ -6,25 +6,27 @@ enum { MACRO_TOGGLE_QUKEYS }; +// *INDENT-OFF* KEYMAPS( [0] = KEYMAP_STACKED - ( - Key_NoKey, Key_1, Key_2, Key_3, Key_4, Key_5, Key_NoKey, - Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab, - Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G, - Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape, - - Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift, - ___, - - M(MACRO_TOGGLE_QUKEYS), Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, - Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, - Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, - Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, - - Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl, - ___), + ( + Key_NoKey, Key_1, Key_2, Key_3, Key_4, Key_5, Key_NoKey, + Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab, + Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G, + Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape, + + Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift, + ___, + + M(MACRO_TOGGLE_QUKEYS), Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, + Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, + Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, + Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, + + Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl, + ___), ) +// *INDENT-ON* // Defining a macro (on the "any" key: see above) to toggle Qukeys on and off const macro_t *macroAction(uint8_t macro_index, uint8_t key_state) {