From 3c223d4b3d3c386c944c629187873a87e05d0aba Mon Sep 17 00:00:00 2001 From: Jesse Vincent Date: Mon, 1 Feb 2016 20:09:20 -0800 Subject: [PATCH] better implementation/general separation for keyswitch matrix --- KeyboardioFirmware.h | 1 - KeyboardioFirmware.ino | 1 - implementation/Model01.cpp | 5 +++-- implementation/Model01.h | 1 - implementation/Model01Beta.cpp | 4 ++-- implementation/Model01Beta.h | 3 +-- key_events.cpp | 15 +++++++-------- key_events.h | 9 ++++----- 8 files changed, 17 insertions(+), 22 deletions(-) diff --git a/KeyboardioFirmware.h b/KeyboardioFirmware.h index abef7126..6ffac297 100644 --- a/KeyboardioFirmware.h +++ b/KeyboardioFirmware.h @@ -27,7 +27,6 @@ void setup(); extern HARDWARE_IMPLEMENTATION KeyboardHardware; -extern uint8_t matrixState[ROWS][COLS]; extern const Key keymaps[KEYMAPS][ROWS][COLS]; extern uint8_t primary_keymap; extern uint8_t temporary_keymap; diff --git a/KeyboardioFirmware.ino b/KeyboardioFirmware.ino index 297e4312..54fec12b 100644 --- a/KeyboardioFirmware.ino +++ b/KeyboardioFirmware.ino @@ -7,7 +7,6 @@ #include "KeyboardioHID.h" -uint8_t matrixState[ROWS][COLS] = {0}; const Key keymaps[KEYMAPS][ROWS][COLS] = { KEYMAP_LIST }; uint8_t primary_keymap = 0; uint8_t temporary_keymap = 0; diff --git a/implementation/Model01.cpp b/implementation/Model01.cpp index 43d1b979..f0dc6b7a 100644 --- a/implementation/Model01.cpp +++ b/implementation/Model01.cpp @@ -23,12 +23,13 @@ void Model01::led_sync() { void Model01::scan_matrix() { + uint8_t key_data; //scan the Keyboard matrix looking for connections for (byte row = 0; row < LEFT_ROWS; row++) { for (byte col = 0; col < LEFT_COLS; col++) { - handle_key_event(row, col); - handle_key_event(row, (COLS - 1) - col); + handle_key_event(row, col, &key_data); + handle_key_event(row, (COLS - 1) - col, &key_data); } } } diff --git a/implementation/Model01.h b/implementation/Model01.h index f8403c50..57ba4e14 100644 --- a/implementation/Model01.h +++ b/implementation/Model01.h @@ -4,7 +4,6 @@ #include "../keymaps.h" -#include "../generated/keymaps.h" #include "../key_events.h" diff --git a/implementation/Model01Beta.cpp b/implementation/Model01Beta.cpp index 78453c08..14ecc880 100644 --- a/implementation/Model01Beta.cpp +++ b/implementation/Model01Beta.cpp @@ -42,11 +42,11 @@ void Model01Beta::scan_matrix() { for (byte col = 0; col < LEFT_COLS; col++) { scan_left_col(row,col,&matrixState[row][col]); - handle_key_event(row, col); + handle_key_event(row, col, &matrixState[row][col]); if (right_hand_connected()) { scan_right_col(row,col,&matrixState[row][(COLS - 1) - col]); - handle_key_event(row, (COLS - 1) - col); + handle_key_event(row, (COLS - 1) - col, &matrixState[row][(COLS - 1) - col]); } } finish_scanning_row(row); diff --git a/implementation/Model01Beta.h b/implementation/Model01Beta.h index a3e56e33..a8beaae8 100644 --- a/implementation/Model01Beta.h +++ b/implementation/Model01Beta.h @@ -2,7 +2,6 @@ #include #include "../keymaps.h" -#include "../generated/keymaps.h" #include "WS2812.h" #include "KeyboardioSX1509.h" #include "../key_events.h" @@ -41,7 +40,7 @@ class Model01Beta { static WS2812 LED; int right_initted = 0; int left_initted = 0; - + uint8_t matrixState[ROWS][COLS] = {{0}}; uint8_t left_colpins[LEFT_COLS]= {7,6,5,4,3,2,1,0}; uint8_t left_rowpins[LEFT_ROWS]= {8,9,10,11}; diff --git a/key_events.cpp b/key_events.cpp index 4520c116..e37bade8 100644 --- a/key_events.cpp +++ b/key_events.cpp @@ -1,6 +1,6 @@ #include "key_events.h" -void handle_synthetic_key_event(byte switchState, Key mappedKey) { +void handle_synthetic_key_event(uint8_t switchState, Key mappedKey) { if (mappedKey.flags & IS_MOUSE_KEY && !( mappedKey.rawKey & KEY_MOUSE_WARP) ) { handle_mouse_key_event(switchState, mappedKey); } else if (! (mappedKey.flags & IS_INTERNAL) @@ -44,19 +44,18 @@ void handle_synthetic_key_event(byte switchState, Key mappedKey) { } } -void handle_key_event(byte row, byte col) { +void handle_key_event(byte row, byte col, uint8_t *switchState) { //for every newly pressed button, figure out what logical key it is and send a key down event // for every newly released button, figure out what logical key it is and send a key up event - byte switchState = matrixState[row][col]; Key mappedKey = keymaps[temporary_keymap][row][col]; if (keymaps[primary_keymap][row][col].flags & SWITCH_TO_KEYMAP) { - handle_keymap_key_event(switchState, keymaps[primary_keymap][row][col]); + handle_keymap_key_event(*switchState, keymaps[primary_keymap][row][col]); } if (mappedKey.flags & SYNTHETIC_KEY) { - handle_synthetic_key_event(switchState, mappedKey); - } else if (key_is_pressed(switchState)) { + handle_synthetic_key_event(*switchState, mappedKey); + } else if (key_is_pressed(*switchState)) { press_key(mappedKey); } } @@ -78,7 +77,7 @@ void press_key(Key mappedKey) { } -void handle_keymap_key_event(byte switchState, Key keymapEntry) { +void handle_keymap_key_event(uint8_t switchState, Key keymapEntry) { if (keymapEntry.flags & MOMENTARY ) { if (key_toggled_on(switchState)) { if ( keymapEntry.rawKey == KEYMAP_NEXT) { @@ -100,7 +99,7 @@ void handle_keymap_key_event(byte switchState, Key keymapEntry) { } } -void handle_mouse_key_event(byte switchState, Key mappedKey) { +void handle_mouse_key_event(uint8_t switchState, Key mappedKey) { if (key_is_pressed(switchState)) { if (mappedKey.rawKey & KEY_MOUSE_UP) { MouseWrapper.move(0,-1); diff --git a/key_events.h b/key_events.h index fd01ab6a..a05aff0e 100644 --- a/key_events.h +++ b/key_events.h @@ -7,15 +7,14 @@ #include "LEDControl.h" #include "Storage.h" -extern uint8_t matrixState[ROWS][COLS]; extern const Key keymaps[KEYMAPS][ROWS][COLS]; extern uint8_t primary_keymap; extern uint8_t temporary_keymap; // sending events to the computer -void handle_synthetic_key_event(byte switchState, Key mappedKey); -void handle_key_event(byte row, byte col); +void handle_synthetic_key_event(uint8_t switchState, Key mappedKey); +void handle_key_event(byte row, byte col, uint8_t *switch_state); void press_key(Key mappedKey); -void handle_keymap_key_event(byte switchState, Key keymapEntry); -void handle_mouse_key_event(byte switchState, Key mappedKey); +void handle_keymap_key_event(uint8_t switchState, Key keymapEntry); +void handle_mouse_key_event(uint8_t switchState, Key mappedKey);