RX messages are per-module by nature, so instead of using a singleton, add rxMessage to uhk_module_state_t.

This commit is contained in:
László Monda
2017-09-28 17:17:30 +02:00
parent 3fda14df27
commit f80a88c419
2 changed files with 7 additions and 7 deletions

View File

@@ -10,16 +10,14 @@
uhk_module_vars_t UhkModuleVars[UHK_MODULE_MAX_COUNT]; uhk_module_vars_t UhkModuleVars[UHK_MODULE_MAX_COUNT];
static uhk_module_state_t uhkModuleStates[UHK_MODULE_MAX_COUNT]; static uhk_module_state_t uhkModuleStates[UHK_MODULE_MAX_COUNT];
static i2c_message_t rxMessage;
static i2c_message_t txMessage; static i2c_message_t txMessage;
static status_t tx(void) { static status_t tx(void) {
return I2cAsyncWriteMessage(I2C_ADDRESS_LEFT_KEYBOARD_HALF_FIRMWARE, &txMessage); return I2cAsyncWriteMessage(I2C_ADDRESS_LEFT_KEYBOARD_HALF_FIRMWARE, &txMessage);
} }
static status_t rx(void) { static status_t rx(i2c_message_t *rxMessage) {
return I2cAsyncReadMessage(I2C_ADDRESS_LEFT_KEYBOARD_HALF_FIRMWARE, &rxMessage); return I2cAsyncReadMessage(I2C_ADDRESS_LEFT_KEYBOARD_HALF_FIRMWARE, rxMessage);
} }
void UhkModuleSlaveDriver_Init(uint8_t uhkModuleId) void UhkModuleSlaveDriver_Init(uint8_t uhkModuleId)
@@ -45,6 +43,7 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId)
uhk_module_state_t *uhkModuleState = uhkModuleStates + uhkModuleId; uhk_module_state_t *uhkModuleState = uhkModuleStates + uhkModuleId;
uhk_module_vars_t *uhkModuleTargetVars = &uhkModuleState->targetVars; uhk_module_vars_t *uhkModuleTargetVars = &uhkModuleState->targetVars;
uhk_module_phase_t *uhkModulePhase = &uhkModuleState->phase; uhk_module_phase_t *uhkModulePhase = &uhkModuleState->phase;
i2c_message_t *rxMessage = &uhkModuleState->rxMessage;
switch (*uhkModulePhase) { switch (*uhkModulePhase) {
case UhkModulePhase_RequestKeyStates: case UhkModulePhase_RequestKeyStates:
@@ -54,12 +53,12 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId)
*uhkModulePhase = UhkModulePhase_ReceiveKeystates; *uhkModulePhase = UhkModulePhase_ReceiveKeystates;
break; break;
case UhkModulePhase_ReceiveKeystates: case UhkModulePhase_ReceiveKeystates:
status = rx(); status = rx(rxMessage);
*uhkModulePhase = UhkModulePhase_ProcessKeystates; *uhkModulePhase = UhkModulePhase_ProcessKeystates;
break; break;
case UhkModulePhase_ProcessKeystates: case UhkModulePhase_ProcessKeystates:
if (CRC16_IsMessageValid(&rxMessage)) { if (CRC16_IsMessageValid(rxMessage)) {
BoolBitsToBytes(rxMessage.data, CurrentKeyStates[SlotId_LeftKeyboardHalf], LEFT_KEYBOARD_HALF_KEY_COUNT); BoolBitsToBytes(rxMessage->data, CurrentKeyStates[SlotId_LeftKeyboardHalf], LEFT_KEYBOARD_HALF_KEY_COUNT);
} }
status = kStatus_Uhk_NoTransfer; status = kStatus_Uhk_NoTransfer;
*uhkModulePhase = UhkModulePhase_SetTestLed; *uhkModulePhase = UhkModulePhase_SetTestLed;

View File

@@ -36,6 +36,7 @@
typedef struct { typedef struct {
uhk_module_phase_t phase; uhk_module_phase_t phase;
uhk_module_vars_t targetVars; uhk_module_vars_t targetVars;
i2c_message_t rxMessage;
} uhk_module_state_t; } uhk_module_state_t;
// Variables: // Variables: