Remove keyMasks because they made the right keyboard half crash when pressing a layer switcher key.

This commit is contained in:
László Monda
2017-02-26 00:35:26 +01:00
parent ce4d9ca839
commit 73dec54ee1
-28
View File
@@ -5,32 +5,15 @@
#include "usb_interface_mouse.h" #include "usb_interface_mouse.h"
#include "current_keymap.h" #include "current_keymap.h"
static uint8_t keyMasks[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE];
static uint8_t ActiveLayer = LAYER_ID_BASE; static uint8_t ActiveLayer = LAYER_ID_BASE;
static key_action_t keyToAction(uint8_t slotId, uint8_t keyId) static key_action_t keyToAction(uint8_t slotId, uint8_t keyId)
{ {
if (keyMasks[slotId][keyId]!=0 && keyMasks[slotId][keyId]!=ActiveLayer) {
// Mask out key presses after releasing modifier keys
return (key_action_t){.type = KEY_ACTION_NONE};
}
key_action_t key = CurrentKeymap[ActiveLayer][slotId][keyId]; key_action_t key = CurrentKeymap[ActiveLayer][slotId][keyId];
keyMasks[slotId][keyId] = ActiveLayer;
return key; return key;
} }
static void clearKeymask(const uint8_t *keyStates)
{
for (uint8_t i=0; i < MAX_KEY_COUNT_PER_MODULE; i++) {
if (keyStates[i]==0) {
keyMasks[SLOT_ID_LEFT_KEYBOARD_HALF][i] = 0;
}
}
}
static bool pressKey(key_action_t key, int scancodeIdx, usb_keyboard_report_t *report) static bool pressKey(key_action_t key, int scancodeIdx, usb_keyboard_report_t *report)
{ {
if (key.type != KEY_ACTION_KEYSTROKE) { if (key.type != KEY_ACTION_KEYSTROKE) {
@@ -51,21 +34,11 @@ static bool pressKey(key_action_t key, int scancodeIdx, usb_keyboard_report_t *r
return true; return true;
} }
static bool hasKeyPressed(const uint8_t *prevKeyStates, const uint8_t *currKeyStates, uint8_t keyId)
{
return (!prevKeyStates[keyId]) && currKeyStates[keyId];
}
static bool isKeyPressed(const uint8_t *currKeyStates, uint8_t keyId) static bool isKeyPressed(const uint8_t *currKeyStates, uint8_t keyId)
{ {
return currKeyStates[keyId]; return currKeyStates[keyId];
} }
static bool hasKeyReleased(const uint8_t *prevKeyStates, const uint8_t *currKeyStates, uint8_t keyId)
{
return (!currKeyStates[keyId]) && prevKeyStates[keyId];
}
static bool handleKey(key_action_t key, int scancodeIdx, usb_keyboard_report_t *report, const uint8_t *prevKeyStates, const uint8_t *currKeyStates, uint8_t keyId) { static bool handleKey(key_action_t key, int scancodeIdx, usb_keyboard_report_t *report, const uint8_t *prevKeyStates, const uint8_t *currKeyStates, uint8_t keyId) {
switch (key.type) { switch (key.type) {
case KEY_ACTION_KEYSTROKE: case KEY_ACTION_KEYSTROKE:
@@ -159,7 +132,6 @@ void HandleKeyboardEvents(usb_keyboard_report_t *keyboardReport, usb_mouse_repor
} }
for (uint8_t slotId=0; slotId<SLOT_COUNT; slotId++) { for (uint8_t slotId=0; slotId<SLOT_COUNT; slotId++) {
clearKeymask(CurrentKeyStates[slotId]);
for (uint8_t keyId=0; keyId<MAX_KEY_COUNT_PER_MODULE; keyId++) { for (uint8_t keyId=0; keyId<MAX_KEY_COUNT_PER_MODULE; keyId++) {
if (scancodeIdx >= USB_KEYBOARD_MAX_KEYS) { if (scancodeIdx >= USB_KEYBOARD_MAX_KEYS) {
break; break;