Add CurrentKeyStates and PreviousKeyStates globals and use them across the whole codebase.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -37,4 +37,5 @@
|
||||
extern usb_status_t UsbKeyboardSetInterface(class_handle_t handle, uint8_t interface, uint8_t alternateSetting);
|
||||
|
||||
extern void UsbKeyboadTask();
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user