diff --git a/left/src/bridge_protocol_handler.c b/left/src/bridge_protocol_handler.c index 5449058..998ea9d 100644 --- a/left/src/bridge_protocol_handler.c +++ b/left/src/bridge_protocol_handler.c @@ -5,6 +5,7 @@ #include "i2c.h" #include "led_pwm.h" #include "bridge_protocol.h" +#include "main.h" void SetError(uint8_t error); void SetGenericError(); @@ -43,5 +44,9 @@ void BridgeProtocolHandler() uint8_t brightnessPercent = BridgeRxBuffer[1]; LedPwm_SetBrightness(brightnessPercent); break; + case BridgeCommand_SetDisableKeyMatrixScanState: + BridgeTxSize = 0; + DisableKeyMatrixScanState = BridgeRxBuffer[1]; + break; } } diff --git a/left/src/main.c b/left/src/main.c index f4a339d..caace88 100644 --- a/left/src/main.c +++ b/left/src/main.c @@ -42,6 +42,8 @@ key_matrix_t keyMatrix = { #endif }; +volatile bool DisableKeyMatrixScanState; + typedef struct BootloaderConfiguration { uint32_t tag; // Magic number to verify bootloader configuration is valid. Must be set to 'kcfg'. @@ -86,7 +88,9 @@ int main(void) KeyMatrix_Init(&keyMatrix); while (1) { - KeyMatrix_Scan(&keyMatrix); + if (!DisableKeyMatrixScanState) { + KeyMatrix_Scan(&keyMatrix); + } asm("wfi"); } } diff --git a/left/src/main.h b/left/src/main.h index 7df0c8c..0c79075 100644 --- a/left/src/main.h +++ b/left/src/main.h @@ -13,5 +13,6 @@ // Variables: extern key_matrix_t keyMatrix; + extern volatile bool DisableKeyMatrixScanState; #endif diff --git a/right/src/bridge_slaves/bridge_slave_uhk_module.c b/right/src/bridge_slaves/bridge_slave_uhk_module.c index 39c9d2a..56f3c0e 100644 --- a/right/src/bridge_slaves/bridge_slave_uhk_module.c +++ b/right/src/bridge_slaves/bridge_slave_uhk_module.c @@ -4,6 +4,7 @@ #include "bridge_protocol.h" #include "main.h" #include "peripherals/test_led.h" +#include "test_states.h" uhk_module_state_t UhkModuleStates[UHK_MODULE_MAX_COUNT]; uhk_module_field_t currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand; @@ -44,6 +45,12 @@ bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId) txBuffer[0] = BridgeCommand_SetTestLed; txBuffer[1] = uhkModuleInternalState->isTestLedOn; I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2); + currentUhkModuleField = UhkModuleField_SendDisableKeyMatrixScanState; + break; + case UhkModuleField_SendDisableKeyMatrixScanState: + txBuffer[0] = BridgeCommand_SetDisableKeyMatrixScanState; + txBuffer[1] = TestStates.disableKeyMatrixScan; + I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2); currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand; break; } diff --git a/right/src/bridge_slaves/bridge_slave_uhk_module.h b/right/src/bridge_slaves/bridge_slave_uhk_module.h index db01ef9..0aa0945 100644 --- a/right/src/bridge_slaves/bridge_slave_uhk_module.h +++ b/right/src/bridge_slaves/bridge_slave_uhk_module.h @@ -16,6 +16,7 @@ UhkModuleField_ReceiveKeystates, UhkModuleField_SendPwmBrightnessCommand, UhkModuleField_SendTestLedCommand, + UhkModuleField_SendDisableKeyMatrixScanState, } uhk_module_field_t; typedef struct { diff --git a/right/src/main.c b/right/src/main.c index 22e6daf..934cef3 100644 --- a/right/src/main.c +++ b/right/src/main.c @@ -12,6 +12,7 @@ #include "bus_pal_hardware.h" #include "bootloader_config.h" #include "command.h" +#include "test_states.h" key_matrix_t KeyMatrix = { .colNum = KEYBOARD_MATRIX_COLS_NUM, @@ -75,7 +76,10 @@ void UpdateUsbReports() ResetActiveUsbMediaKeyboardReport(); ResetActiveUsbSystemKeyboardReport(); - KeyMatrix_Scan(&KeyMatrix); + if (!TestStates.disableKeyMatrixScan) { + KeyMatrix_Scan(&KeyMatrix); + } + memcpy(CurrentKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], KeyMatrix.keyStates, MAX_KEY_COUNT_PER_MODULE); UpdateActiveUsbReports(); diff --git a/shared/bridge_protocol.h b/shared/bridge_protocol.h index 807c064..1a5a703 100644 --- a/shared/bridge_protocol.h +++ b/shared/bridge_protocol.h @@ -7,6 +7,7 @@ BridgeCommand_GetKeyStates, BridgeCommand_SetTestLed, BridgeCommand_SetLedPwmBrightness, + BridgeCommand_SetDisableKeyMatrixScanState, } bridge_command_t; #endif diff --git a/shared/key_matrix.c b/shared/key_matrix.c index 1fe29a3..75c0b67 100644 --- a/shared/key_matrix.c +++ b/shared/key_matrix.c @@ -1,6 +1,5 @@ #include "fsl_gpio.h" #include "key_matrix.h" -#include "test_states.h" void KeyMatrix_Init(key_matrix_t *keyMatrix) { @@ -21,10 +20,6 @@ void KeyMatrix_Init(key_matrix_t *keyMatrix) void KeyMatrix_Scan(key_matrix_t *keyMatrix) { - if (TestStates.disableKeyMatrixScan) { - return; - } - uint8_t *keyState = keyMatrix->keyStates; key_matrix_pin_t *rowEnd = keyMatrix->rows + keyMatrix->rowNum;