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; }