From 2457f3b0e044cf4f1509aea6fb38947cd1b7c5e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Tue, 3 Jan 2017 01:09:00 +0100 Subject: [PATCH] Add CurrentKeyStates and PreviousKeyStates globals and use them across the whole codebase. --- right/src/action.c | 24 ++++++++++++------------ right/src/action.h | 6 ++---- right/src/main.c | 3 +++ right/src/main.h | 6 ++++++ right/src/usb_interface_keyboard.c | 8 ++++---- right/src/usb_interface_keyboard.h | 1 + 6 files changed, 28 insertions(+), 20 deletions(-) diff --git a/right/src/action.c b/right/src/action.c index a8ff948..9f43c39 100644 --- a/right/src/action.c +++ b/right/src/action.c @@ -1,3 +1,4 @@ +#include "main.h" #include "action.h" #include "led_display.h" #include "layer.h" @@ -6,7 +7,6 @@ static uint8_t keyMasks[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; static uint8_t ActiveLayer = LAYER_ID_BASE; -uint8_t prevKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; static key_action_t getKeycode(uint8_t slotId, uint8_t keyId) { @@ -27,7 +27,7 @@ static key_action_t getKeycode(uint8_t slotId, uint8_t keyId) static void clearKeymasks(const uint8_t *leftKeyStates, const uint8_t *rightKeyStates) { - for (int i=0; i < MAX_KEY_COUNT_PER_MODULE; i++){ + for (uint8_t i=0; i < MAX_KEY_COUNT_PER_MODULE; i++) { if (rightKeyStates[i]==0){ keyMasks[SLOT_ID_RIGHT_KEYBOARD_HALF][i] = 0; } @@ -162,12 +162,12 @@ static void handleMouseKey(usb_mouse_report_t *report, key_action_t key, const u wasPreviousMouseActionWheelAction = isWheelAction; } -void HandleKeyboardEvents(usb_keyboard_report_t *keyboardReport, usb_mouse_report_t *mouseReport, const uint8_t *leftKeyStates, const uint8_t *rightKeyStates) { +void HandleKeyboardEvents(usb_keyboard_report_t *keyboardReport, usb_mouse_report_t *mouseReport) { int scancodeIdx = 0; - clearKeymasks(leftKeyStates, rightKeyStates); + clearKeymasks(CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], CurrentKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF]); - for (uint8_t keyId=0; keyId= USB_KEYBOARD_MAX_KEYS) { break; } @@ -175,15 +175,15 @@ void HandleKeyboardEvents(usb_keyboard_report_t *keyboardReport, usb_mouse_repor key_action_t code = getKeycode(SLOT_ID_RIGHT_KEYBOARD_HALF, keyId); if (code.type == KEY_ACTION_MOUSE) { - handleMouseKey(mouseReport, code, prevKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], rightKeyStates, keyId); + handleMouseKey(mouseReport, code, PreviousKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], CurrentKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], keyId); } else { - if (handleKey(code, scancodeIdx, keyboardReport, prevKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], rightKeyStates, keyId)) { + if (handleKey(code, scancodeIdx, keyboardReport, PreviousKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], CurrentKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], keyId)) { scancodeIdx++; } } } - for (uint8_t keyId=0; keyId= USB_KEYBOARD_MAX_KEYS) { break; } @@ -191,14 +191,14 @@ void HandleKeyboardEvents(usb_keyboard_report_t *keyboardReport, usb_mouse_repor key_action_t code = getKeycode(SLOT_ID_LEFT_KEYBOARD_HALF, keyId); if (code.type == KEY_ACTION_MOUSE) { - handleMouseKey(mouseReport, code, prevKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], leftKeyStates, keyId); + handleMouseKey(mouseReport, code, PreviousKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], keyId); } else { - if (handleKey(code, scancodeIdx, keyboardReport, prevKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], leftKeyStates, keyId)) { + if (handleKey(code, scancodeIdx, keyboardReport, PreviousKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], keyId)) { scancodeIdx++; } } } - memcpy(prevKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], rightKeyStates, KEY_STATE_COUNT); - memcpy(prevKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], leftKeyStates, KEY_STATE_COUNT); + memcpy(PreviousKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], CurrentKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], MAX_KEY_COUNT_PER_MODULE); + memcpy(PreviousKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], MAX_KEY_COUNT_PER_MODULE); } diff --git a/right/src/action.h b/right/src/action.h index a68985f..f82bcf6 100644 --- a/right/src/action.h +++ b/right/src/action.h @@ -4,6 +4,7 @@ #include #include "lufa/HIDClassCommon.h" #include "usb_composite_device.h" +#include "main.h" #include "module.h" @@ -19,8 +20,6 @@ // - fn layer // - mod+fn layer -#define KEY_STATE_COUNT (5*7) - typedef enum { KEY_ACTION_NONE, KEY_ACTION_KEYSTROKE, @@ -100,9 +99,8 @@ typedef struct { }; } __attribute__ ((packed)) key_action_t; -extern uint8_t prevKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; extern key_action_t CurrentKeymap[LAYER_COUNT][SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; -void HandleKeyboardEvents(usb_keyboard_report_t *keyboardReport, usb_mouse_report_t *mouseReport, const uint8_t *leftKeyStates, const uint8_t *rightKeyStates); +void HandleKeyboardEvents(usb_keyboard_report_t *keyboardReport, usb_mouse_report_t *mouseReport); #endif diff --git a/right/src/main.c b/right/src/main.c index 10db726..eaaffd4 100644 --- a/right/src/main.c +++ b/right/src/main.c @@ -44,6 +44,9 @@ key_matrix_t KeyMatrix = { #endif }; +uint8_t PreviousKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; +uint8_t CurrentKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; + void main() { InitPeripherials(); InitClock(); diff --git a/right/src/main.h b/right/src/main.h index 0303058..45a99a2 100644 --- a/right/src/main.h +++ b/right/src/main.h @@ -4,14 +4,20 @@ // Includes: #include "key_matrix.h" + #include "slot.h" + #include "module.h" // Macros: #define KEYBOARD_MATRIX_COLS_NUM 7 #define KEYBOARD_MATRIX_ROWS_NUM 5 + #define LEFT_KEYBOARD_HALF_KEY_COUNT (5*7) + // Variables: extern key_matrix_t KeyMatrix; + extern uint8_t PreviousKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; + extern uint8_t CurrentKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; #endif diff --git a/right/src/usb_interface_keyboard.c b/right/src/usb_interface_keyboard.c index edc0b95..59265bf 100644 --- a/right/src/usb_interface_keyboard.c +++ b/right/src/usb_interface_keyboard.c @@ -51,16 +51,16 @@ void UsbKeyboadTask() UsbKeyboardReport[newReportIndex].reserved = 0; KeyMatrix_Scan(&KeyMatrix); + memcpy(CurrentKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], KeyMatrix.keyStates, MAX_KEY_COUNT_PER_MODULE); uint8_t txData[] = {0}; - static uint8_t leftKeyStates[KEY_STATE_COUNT]; - bzero(leftKeyStates, KEY_STATE_COUNT); + bzero(CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], MAX_KEY_COUNT_PER_MODULE); if (I2cWrite(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, txData, sizeof(txData)) == kStatus_Success) { - I2cRead(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, leftKeyStates, KEY_STATE_COUNT); + I2cRead(I2C_MAIN_BUS_BASEADDR, I2C_ADDRESS_LEFT_KEYBOARD_HALF, CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], LEFT_KEYBOARD_HALF_KEY_COUNT); } bzero(&UsbKeyboardReport[newReportIndex].scancodes, USB_KEYBOARD_MAX_KEYS); - HandleKeyboardEvents(&UsbKeyboardReport[newReportIndex], &UsbMouseReport, leftKeyStates, KeyMatrix.keyStates); + HandleKeyboardEvents(&UsbKeyboardReport[newReportIndex], &UsbMouseReport); activeReportIndex = newReportIndex; } diff --git a/right/src/usb_interface_keyboard.h b/right/src/usb_interface_keyboard.h index ca2c920..74a25ee 100644 --- a/right/src/usb_interface_keyboard.h +++ b/right/src/usb_interface_keyboard.h @@ -37,4 +37,5 @@ extern usb_status_t UsbKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting); extern void UsbKeyboadTask(); + #endif