Add CurrentKeyStates and PreviousKeyStates globals and use them across the whole codebase.

This commit is contained in:
László Monda
2017-01-03 01:09:00 +01:00
parent 3942d089de
commit 2457f3b0e0
6 changed files with 28 additions and 20 deletions

View File

@@ -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<KEY_STATE_COUNT; keyId++) {
for (uint8_t keyId=0; keyId<LEFT_KEYBOARD_HALF_KEY_COUNT; keyId++) {
if (scancodeIdx >= 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<KEY_STATE_COUNT; keyId++) {
for (uint8_t keyId=0; keyId<LEFT_KEYBOARD_HALF_KEY_COUNT; keyId++) {
if (scancodeIdx >= 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);
}

View File

@@ -4,6 +4,7 @@
#include <stdint.h>
#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

View File

@@ -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();

View File

@@ -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

View File

@@ -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;
}

View File

@@ -37,4 +37,5 @@
extern usb_status_t UsbKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting);
extern void UsbKeyboadTask();
#endif