Make the modules transfer their firmware version to the device. Fix the message length of the module protocol version.
This commit is contained in:
@@ -21,6 +21,12 @@ static version_t moduleProtocolVersion = {
|
|||||||
MODULE_PROTOCOL_PATCH_VERSION,
|
MODULE_PROTOCOL_PATCH_VERSION,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static version_t firmwareVersion = {
|
||||||
|
FIRMWARE_MAJOR_VERSION,
|
||||||
|
FIRMWARE_MINOR_VERSION,
|
||||||
|
FIRMWARE_PATCH_VERSION,
|
||||||
|
};
|
||||||
|
|
||||||
void SlaveRxHandler(void)
|
void SlaveRxHandler(void)
|
||||||
{
|
{
|
||||||
if (!CRC16_IsMessageValid(&RxMessage)) {
|
if (!CRC16_IsMessageValid(&RxMessage)) {
|
||||||
@@ -65,7 +71,12 @@ void SlaveTxHandler(void)
|
|||||||
}
|
}
|
||||||
case SlaveProperty_ModuleProtocolVersion: {
|
case SlaveProperty_ModuleProtocolVersion: {
|
||||||
memcpy(TxMessage.data, &moduleProtocolVersion, sizeof(version_t));
|
memcpy(TxMessage.data, &moduleProtocolVersion, sizeof(version_t));
|
||||||
TxMessage.length = 1;
|
TxMessage.length = sizeof(version_t);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SlaveProperty_FirmwareVersion:
|
||||||
|
memcpy(TxMessage.data, &firmwareVersion, sizeof(version_t));
|
||||||
|
TxMessage.length = sizeof(version_t);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SlaveProperty_Features: {
|
case SlaveProperty_Features: {
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get protocol version
|
// Get module protocol version
|
||||||
case UhkModulePhase_RequestModuleProtocolVersion:
|
case UhkModulePhase_RequestModuleProtocolVersion:
|
||||||
txMessage.data[0] = SlaveCommand_RequestProperty;
|
txMessage.data[0] = SlaveCommand_RequestProperty;
|
||||||
txMessage.data[1] = SlaveProperty_ModuleProtocolVersion;
|
txMessage.data[1] = SlaveProperty_ModuleProtocolVersion;
|
||||||
@@ -116,7 +116,29 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
|
|||||||
memcpy(&uhkModuleState->moduleProtocolVersion, rxMessage->data, sizeof(version_t));
|
memcpy(&uhkModuleState->moduleProtocolVersion, rxMessage->data, sizeof(version_t));
|
||||||
}
|
}
|
||||||
status = kStatus_Uhk_NoTransfer;
|
status = kStatus_Uhk_NoTransfer;
|
||||||
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestModuleId : UhkModulePhase_RequestModuleProtocolVersion;
|
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestFirmwareVersion : UhkModulePhase_RequestModuleProtocolVersion;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get firmware version
|
||||||
|
case UhkModulePhase_RequestFirmwareVersion:
|
||||||
|
txMessage.data[0] = SlaveCommand_RequestProperty;
|
||||||
|
txMessage.data[1] = SlaveProperty_FirmwareVersion;
|
||||||
|
txMessage.length = 2;
|
||||||
|
status = tx(i2cAddress);
|
||||||
|
*uhkModulePhase = UhkModulePhase_ReceiveFirmwareVersion;
|
||||||
|
break;
|
||||||
|
case UhkModulePhase_ReceiveFirmwareVersion:
|
||||||
|
status = rx(rxMessage, i2cAddress);
|
||||||
|
*uhkModulePhase = UhkModulePhase_ProcessFirmwareVersion;
|
||||||
|
break;
|
||||||
|
case UhkModulePhase_ProcessFirmwareVersion: {
|
||||||
|
bool isMessageValid = CRC16_IsMessageValid(rxMessage);
|
||||||
|
if (isMessageValid) {
|
||||||
|
memcpy(&uhkModuleState->firmwareVersion, rxMessage->data, sizeof(version_t));
|
||||||
|
}
|
||||||
|
status = kStatus_Uhk_NoTransfer;
|
||||||
|
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestModuleId : UhkModulePhase_RequestFirmwareVersion;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,11 @@
|
|||||||
UhkModulePhase_ReceiveModuleProtocolVersion,
|
UhkModulePhase_ReceiveModuleProtocolVersion,
|
||||||
UhkModulePhase_ProcessModuleProtocolVersion,
|
UhkModulePhase_ProcessModuleProtocolVersion,
|
||||||
|
|
||||||
|
// Get firmware version
|
||||||
|
UhkModulePhase_RequestFirmwareVersion,
|
||||||
|
UhkModulePhase_ReceiveFirmwareVersion,
|
||||||
|
UhkModulePhase_ProcessFirmwareVersion,
|
||||||
|
|
||||||
// Get module id
|
// Get module id
|
||||||
UhkModulePhase_RequestModuleId,
|
UhkModulePhase_RequestModuleId,
|
||||||
UhkModulePhase_ReceiveModuleId,
|
UhkModulePhase_ReceiveModuleId,
|
||||||
@@ -64,6 +69,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t moduleId;
|
uint8_t moduleId;
|
||||||
version_t moduleProtocolVersion;
|
version_t moduleProtocolVersion;
|
||||||
|
version_t firmwareVersion;
|
||||||
uhk_module_phase_t phase;
|
uhk_module_phase_t phase;
|
||||||
uhk_module_vars_t sourceVars;
|
uhk_module_vars_t sourceVars;
|
||||||
uhk_module_vars_t targetVars;
|
uhk_module_vars_t targetVars;
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
SlaveProperty_Sync,
|
SlaveProperty_Sync,
|
||||||
SlaveProperty_ModuleProtocolVersion,
|
SlaveProperty_ModuleProtocolVersion,
|
||||||
|
SlaveProperty_FirmwareVersion,
|
||||||
SlaveProperty_ModuleId,
|
SlaveProperty_ModuleId,
|
||||||
SlaveProperty_Features,
|
SlaveProperty_Features,
|
||||||
} slave_property_t;
|
} slave_property_t;
|
||||||
|
|||||||
Reference in New Issue
Block a user