Update LED PWM and test LED states of UHK modules in an async manner.
This commit is contained in:
@@ -1,9 +1,40 @@
|
||||
#include "i2c_addresses.h"
|
||||
#include "i2c.h"
|
||||
#include "bridge_slave_uhk_module.h"
|
||||
#include "bridge_protocol.h"
|
||||
#include "main.h"
|
||||
|
||||
uhk_module_field_t currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand;
|
||||
uhk_module_state_t uhkModuleExternalStates[UHK_MODULE_MAX_COUNT];
|
||||
uint8_t txBuffer[2];
|
||||
|
||||
bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId) {
|
||||
I2cAsyncRead(I2C_ADDRESS_LEFT_KEYBOARD_HALF, CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], LEFT_KEYBOARD_HALF_KEY_COUNT);
|
||||
uhk_module_state_t *uhkModuleInternalState = UhkModuleStates + uhkModuleId;
|
||||
uhk_module_state_t *uhkModuleExternalState = uhkModuleExternalStates + uhkModuleId;
|
||||
|
||||
switch (currentUhkModuleField) {
|
||||
case UhkModuleField_SendKeystatesRequestCommand:
|
||||
txBuffer[0] = BridgeCommand_GetKeyStates;
|
||||
I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 1);
|
||||
currentUhkModuleField = UhkModuleField_ReceiveKeystates;
|
||||
break;
|
||||
case UhkModuleField_ReceiveKeystates:
|
||||
I2cAsyncRead(I2C_ADDRESS_LEFT_KEYBOARD_HALF, CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], LEFT_KEYBOARD_HALF_KEY_COUNT);
|
||||
currentUhkModuleField = UhkModuleField_SendPwmBrightnessCommand;
|
||||
break;
|
||||
case UhkModuleField_SendPwmBrightnessCommand:
|
||||
txBuffer[0] = BridgeCommand_SetLedPwmBrightness;
|
||||
txBuffer[1] = uhkModuleExternalState->ledPwmBrightness;
|
||||
I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2);
|
||||
currentUhkModuleField = UhkModuleField_SendTestLedCommand;
|
||||
break;
|
||||
case UhkModuleField_SendTestLedCommand:
|
||||
txBuffer[0] = BridgeCommand_SetTestLed;
|
||||
txBuffer[1] = uhkModuleExternalState->isTestLedOn;
|
||||
I2cAsyncWrite(I2C_ADDRESS_LEFT_KEYBOARD_HALF, txBuffer, 2);
|
||||
currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand;
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,28 @@
|
||||
|
||||
#include "fsl_common.h"
|
||||
|
||||
// Macros:
|
||||
|
||||
#define UHK_MODULE_MAX_COUNT 1
|
||||
|
||||
// Typedefs:
|
||||
|
||||
typedef enum {
|
||||
UhkModuleField_SendKeystatesRequestCommand,
|
||||
UhkModuleField_ReceiveKeystates,
|
||||
UhkModuleField_SendPwmBrightnessCommand,
|
||||
UhkModuleField_SendTestLedCommand,
|
||||
} uhk_module_field_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t ledPwmBrightness;
|
||||
bool isTestLedOn;
|
||||
} uhk_module_state_t;
|
||||
|
||||
// Variables:
|
||||
|
||||
uhk_module_state_t UhkModuleStates[UHK_MODULE_MAX_COUNT];
|
||||
|
||||
// Functions:
|
||||
|
||||
extern bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId);
|
||||
|
||||
Reference in New Issue
Block a user