Make slaves send their protocol version to the master.

This commit is contained in:
László Monda
2017-10-05 17:55:59 +02:00
parent bd76fb44c2
commit 96eb2ef7a3
5 changed files with 34 additions and 1 deletions

View File

@@ -87,11 +87,31 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
bool isSyncValid = memcmp(rxMessage->data, SlaveSyncString, SLAVE_SYNC_STRING_LENGTH) == 0;
status = kStatus_Uhk_NoTransfer;
*uhkModulePhase = isSyncValid && isMessageValid
? UhkModulePhase_RequestModuleId
? UhkModulePhase_RequestProtocolVersion
: UhkModulePhase_RequestSync;
break;
}
// Get protocol version
case UhkModulePhase_RequestProtocolVersion:
txMessage.data[0] = SlaveCommand_RequestProperty;
txMessage.data[1] = SlaveProperty_ProtocolVersion;
txMessage.length = 2;
status = tx(i2cAddress);
*uhkModulePhase = UhkModulePhase_ReceiveProtocolVersion;
break;
case UhkModulePhase_ReceiveProtocolVersion:
status = rx(rxMessage, i2cAddress);
*uhkModulePhase = UhkModulePhase_ProcessProtocolVersion;
break;
case UhkModulePhase_ProcessProtocolVersion:
if (CRC16_IsMessageValid(rxMessage)) {
uhkModuleState->protocolVersion = rxMessage->data[0];
}
status = kStatus_Uhk_NoTransfer;
*uhkModulePhase = UhkModulePhase_RequestModuleId;
break;
// Get module id
case UhkModulePhase_RequestModuleId:
txMessage.data[0] = SlaveCommand_RequestProperty;