From 5473c102ec6b0ed643a3ae52f22bf6b4ea209b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 28 Sep 2017 02:24:28 +0200 Subject: [PATCH] Add per-module UHK module phases. --- right/src/slave_drivers/uhk_module_driver.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/right/src/slave_drivers/uhk_module_driver.c b/right/src/slave_drivers/uhk_module_driver.c index 42524af..4cd1099 100644 --- a/right/src/slave_drivers/uhk_module_driver.c +++ b/right/src/slave_drivers/uhk_module_driver.c @@ -10,7 +10,7 @@ uhk_module_state_t UhkModuleStates[UHK_MODULE_MAX_COUNT]; static uhk_module_state_t uhkModuleTargetStates[UHK_MODULE_MAX_COUNT]; -uhk_module_phase_t uhkModulePhase = UhkModulePhase_RequestKeyStates; +static uhk_module_phase_t uhkModulePhases[UHK_MODULE_MAX_COUNT]; i2c_message_t rxMessage; i2c_message_t txMessage; @@ -33,6 +33,9 @@ void UhkModuleSlaveDriver_Init(uint8_t uhkModuleId) uhkModuleSourceState->ledPwmBrightness = MAX_PWM_BRIGHTNESS; uhkModuleTargetState->ledPwmBrightness = 0; + + uhk_module_phase_t *uhkModulePhase = uhkModulePhases + uhkModuleId; + *uhkModulePhase = UhkModulePhase_RequestKeyStates; } status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId) @@ -40,24 +43,25 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId) status_t status = kStatus_Uhk_IdleSlave; uhk_module_state_t *uhkModuleSourceState = UhkModuleStates + uhkModuleId; uhk_module_state_t *uhkModuleTargetState = uhkModuleTargetStates + uhkModuleId; + uhk_module_phase_t *uhkModulePhase = uhkModulePhases + uhkModuleId; - switch (uhkModulePhase) { + switch (*uhkModulePhase) { case UhkModulePhase_RequestKeyStates: txMessage.data[0] = SlaveCommand_RequestKeyStates; txMessage.length = 1; status = tx(); - uhkModulePhase = UhkModulePhase_ReceiveKeystates; + *uhkModulePhase = UhkModulePhase_ReceiveKeystates; break; case UhkModulePhase_ReceiveKeystates: status = rx(); - uhkModulePhase = UhkModulePhase_ProcessKeystates; + *uhkModulePhase = UhkModulePhase_ProcessKeystates; break; case UhkModulePhase_ProcessKeystates: if (CRC16_IsMessageValid(&rxMessage)) { BoolBitsToBytes(rxMessage.data, CurrentKeyStates[SlotId_LeftKeyboardHalf], LEFT_KEYBOARD_HALF_KEY_COUNT); } status = kStatus_Uhk_NoOp; - uhkModulePhase = UhkModulePhase_SetTestLed; + *uhkModulePhase = UhkModulePhase_SetTestLed; break; case UhkModulePhase_SetTestLed: if (uhkModuleSourceState->isTestLedOn == uhkModuleTargetState->isTestLedOn) { @@ -69,7 +73,7 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId) status = tx(); uhkModuleTargetState->isTestLedOn = uhkModuleSourceState->isTestLedOn; } - uhkModulePhase = UhkModulePhase_SetLedPwmBrightness; + *uhkModulePhase = UhkModulePhase_SetLedPwmBrightness; break; case UhkModulePhase_SetLedPwmBrightness: if (uhkModuleSourceState->ledPwmBrightness == uhkModuleTargetState->ledPwmBrightness) { @@ -81,7 +85,7 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId) status = tx(); uhkModuleTargetState->ledPwmBrightness = uhkModuleSourceState->ledPwmBrightness; } - uhkModulePhase = UhkModulePhase_RequestKeyStates; + *uhkModulePhase = UhkModulePhase_RequestKeyStates; break; }