Update LEDs in small chunks, improving the responsivity of the keys of the left keyboard half dramatically.
This commit is contained in:
@@ -55,6 +55,7 @@ led_driver_state_t ledDriverStates[LED_DRIVER_MAX_COUNT] = {
|
||||
uint8_t setFunctionFrameBuffer[] = {LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_FUNCTION};
|
||||
uint8_t setShutdownModeNormalBuffer[] = {LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL};
|
||||
uint8_t setFrame1Buffer[] = {LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1};
|
||||
uint8_t updatePwmRegistersBuffer[PWM_REGISTER_BUFFER_LENGTH];
|
||||
|
||||
void LedSlaveDriver_Init() {
|
||||
ledDriverStates[ledDriverId_Left].setupLedControlRegistersCommand[7] |= 0b00000010; // Enable the LED of the ISO key.
|
||||
@@ -65,6 +66,7 @@ void LedSlaveDriver_Update(uint8_t ledDriverId) {
|
||||
led_driver_state_t *currentLedDriverState = ledDriverStates + ledDriverId;
|
||||
uint8_t *ledDriverPhase = ¤tLedDriverState->phase;
|
||||
uint8_t ledDriverAddress = currentLedDriverState->i2cAddress;
|
||||
uint8_t *ledIndex = ¤tLedDriverState->ledIndex;
|
||||
|
||||
switch (*ledDriverPhase) {
|
||||
case LedDriverPhase_SetFunctionFrame:
|
||||
@@ -84,7 +86,13 @@ void LedSlaveDriver_Update(uint8_t ledDriverId) {
|
||||
*ledDriverPhase = LedDriverPhase_Initialized;
|
||||
break;
|
||||
case LedDriverPhase_Initialized:
|
||||
I2cAsyncWrite(ledDriverAddress, ledsBuffer, BUFFER_SIZE);
|
||||
updatePwmRegistersBuffer[0] = FRAME_REGISTER_PWM_FIRST + *ledIndex;
|
||||
memcpy(updatePwmRegistersBuffer+1, ledsBuffer + *ledIndex, PMW_REGISTER_UPDATE_CHUNK_SIZE);
|
||||
I2cAsyncWrite(ledDriverAddress, updatePwmRegistersBuffer, PWM_REGISTER_BUFFER_LENGTH);
|
||||
*ledIndex += PMW_REGISTER_UPDATE_CHUNK_SIZE;
|
||||
if (*ledIndex >= LED_DRIVER_LED_COUNT) {
|
||||
ledIndex = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#define LED_DRIVER_MAX_COUNT 2
|
||||
#define BUFFER_SIZE (LED_DRIVER_LED_COUNT + 1)
|
||||
#define LED_CONTROL_REGISTERS_COMMAND_LENGTH 19
|
||||
#define PMW_REGISTER_UPDATE_CHUNK_SIZE 8
|
||||
#define PWM_REGISTER_BUFFER_LENGTH (1 + PMW_REGISTER_UPDATE_CHUNK_SIZE)
|
||||
|
||||
// Typedefs:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user