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

@@ -3,6 +3,7 @@
// Macros:
#define MODULE_PROTOCOL_VERSION 1
#define MODULE_KEY_COUNT (KEYBOARD_MATRIX_ROWS_NUM * KEYBOARD_MATRIX_COLS_NUM)
#define MODULE_HAS_POINTER false

View File

@@ -75,6 +75,11 @@ void SlaveTxHandler(void)
TxMessage.length = 1;
break;
}
case SlaveProperty_ProtocolVersion: {
TxMessage.data[0] = MODULE_PROTOCOL_VERSION;
TxMessage.length = 1;
break;
}
case SlaveProperty_Features: {
uhk_module_features_t *moduleFeatures = (uhk_module_features_t*)&TxMessage.data;
moduleFeatures->keyCount = MODULE_KEY_COUNT;

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;

View File

@@ -26,6 +26,11 @@
UhkModulePhase_ReceiveSync,
UhkModulePhase_ProcessSync,
// Get protocol version
UhkModulePhase_RequestProtocolVersion,
UhkModulePhase_ReceiveProtocolVersion,
UhkModulePhase_ProcessProtocolVersion,
// Get module id
UhkModulePhase_RequestModuleId,
UhkModulePhase_ReceiveModuleId,
@@ -54,6 +59,7 @@
typedef struct {
uint8_t moduleId;
uint8_t protocolVersion;
uhk_module_phase_t phase;
uhk_module_vars_t targetVars;
i2c_message_t rxMessage;

View File

@@ -27,6 +27,7 @@
typedef enum {
SlaveProperty_Sync,
SlaveProperty_ProtocolVersion,
SlaveProperty_ModuleId,
SlaveProperty_Features,
} slave_property_t;