Rerequest transfer if CRC is invalid.
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user