Rerequest transfer if CRC is invalid.

This commit is contained in:
László Monda
2017-10-05 20:02:12 +02:00
parent 6be45c4521
commit f8e83b139d

View File

@@ -104,13 +104,15 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
status = rx(rxMessage, i2cAddress); status = rx(rxMessage, i2cAddress);
*uhkModulePhase = UhkModulePhase_ProcessProtocolVersion; *uhkModulePhase = UhkModulePhase_ProcessProtocolVersion;
break; break;
case UhkModulePhase_ProcessProtocolVersion: case UhkModulePhase_ProcessProtocolVersion: {
if (CRC16_IsMessageValid(rxMessage)) { bool isMessageValid = CRC16_IsMessageValid(rxMessage);
if (isMessageValid) {
uhkModuleState->protocolVersion = rxMessage->data[0]; uhkModuleState->protocolVersion = rxMessage->data[0];
} }
status = kStatus_Uhk_NoTransfer; status = kStatus_Uhk_NoTransfer;
*uhkModulePhase = UhkModulePhase_RequestModuleId; *uhkModulePhase = isMessageValid ? UhkModulePhase_RequestModuleId : UhkModulePhase_RequestProtocolVersion;
break; break;
}
// Get module id // Get module id
case UhkModulePhase_RequestModuleId: case UhkModulePhase_RequestModuleId:
@@ -124,13 +126,15 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
status = rx(rxMessage, i2cAddress); status = rx(rxMessage, i2cAddress);
*uhkModulePhase = UhkModulePhase_ProcessModuleId; *uhkModulePhase = UhkModulePhase_ProcessModuleId;
break; break;
case UhkModulePhase_ProcessModuleId: case UhkModulePhase_ProcessModuleId: {
if (CRC16_IsMessageValid(rxMessage)) { bool isMessageValid = CRC16_IsMessageValid(rxMessage);
if (isMessageValid) {
uhkModuleState->moduleId = rxMessage->data[0]; uhkModuleState->moduleId = rxMessage->data[0];
} }
status = kStatus_Uhk_NoTransfer; status = kStatus_Uhk_NoTransfer;
*uhkModulePhase = UhkModulePhase_RequestModuleFeatures; *uhkModulePhase = isMessageValid ? UhkModulePhase_RequestModuleFeatures : UhkModulePhase_RequestModuleId;
break; break;
}
// Get module features // Get module features
case UhkModulePhase_RequestModuleFeatures: case UhkModulePhase_RequestModuleFeatures:
@@ -144,14 +148,16 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
status = rx(rxMessage, i2cAddress); status = rx(rxMessage, i2cAddress);
*uhkModulePhase = UhkModulePhase_ProcessModuleFeatures; *uhkModulePhase = UhkModulePhase_ProcessModuleFeatures;
break; break;
case UhkModulePhase_ProcessModuleFeatures: case UhkModulePhase_ProcessModuleFeatures: {
if (CRC16_IsMessageValid(rxMessage)) { bool isMessageValid = CRC16_IsMessageValid(rxMessage);
if (isMessageValid) {
memcpy(&uhkModuleState->features, rxMessage->data, sizeof(uhk_module_features_t)); memcpy(&uhkModuleState->features, rxMessage->data, sizeof(uhk_module_features_t));
uhkModuleState->isEnumerated = true; uhkModuleState->isEnumerated = true;
} }
status = kStatus_Uhk_NoTransfer; status = kStatus_Uhk_NoTransfer;
*uhkModulePhase = UhkModulePhase_RequestKeyStates; *uhkModulePhase = isMessageValid ? UhkModulePhase_RequestKeyStates : UhkModulePhase_RequestModuleFeatures;
break; break;
}
// Get key states // Get key states
case UhkModulePhase_RequestKeyStates: case UhkModulePhase_RequestKeyStates: