Make slaves send their protocol version to the master.
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
// Macros:
|
// Macros:
|
||||||
|
|
||||||
|
#define MODULE_PROTOCOL_VERSION 1
|
||||||
#define MODULE_KEY_COUNT (KEYBOARD_MATRIX_ROWS_NUM * KEYBOARD_MATRIX_COLS_NUM)
|
#define MODULE_KEY_COUNT (KEYBOARD_MATRIX_ROWS_NUM * KEYBOARD_MATRIX_COLS_NUM)
|
||||||
#define MODULE_HAS_POINTER false
|
#define MODULE_HAS_POINTER false
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,11 @@ void SlaveTxHandler(void)
|
|||||||
TxMessage.length = 1;
|
TxMessage.length = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SlaveProperty_ProtocolVersion: {
|
||||||
|
TxMessage.data[0] = MODULE_PROTOCOL_VERSION;
|
||||||
|
TxMessage.length = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case SlaveProperty_Features: {
|
case SlaveProperty_Features: {
|
||||||
uhk_module_features_t *moduleFeatures = (uhk_module_features_t*)&TxMessage.data;
|
uhk_module_features_t *moduleFeatures = (uhk_module_features_t*)&TxMessage.data;
|
||||||
moduleFeatures->keyCount = MODULE_KEY_COUNT;
|
moduleFeatures->keyCount = MODULE_KEY_COUNT;
|
||||||
|
|||||||
@@ -87,11 +87,31 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
|
|||||||
bool isSyncValid = memcmp(rxMessage->data, SlaveSyncString, SLAVE_SYNC_STRING_LENGTH) == 0;
|
bool isSyncValid = memcmp(rxMessage->data, SlaveSyncString, SLAVE_SYNC_STRING_LENGTH) == 0;
|
||||||
status = kStatus_Uhk_NoTransfer;
|
status = kStatus_Uhk_NoTransfer;
|
||||||
*uhkModulePhase = isSyncValid && isMessageValid
|
*uhkModulePhase = isSyncValid && isMessageValid
|
||||||
? UhkModulePhase_RequestModuleId
|
? UhkModulePhase_RequestProtocolVersion
|
||||||
: UhkModulePhase_RequestSync;
|
: UhkModulePhase_RequestSync;
|
||||||
break;
|
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
|
// Get module id
|
||||||
case UhkModulePhase_RequestModuleId:
|
case UhkModulePhase_RequestModuleId:
|
||||||
txMessage.data[0] = SlaveCommand_RequestProperty;
|
txMessage.data[0] = SlaveCommand_RequestProperty;
|
||||||
|
|||||||
@@ -26,6 +26,11 @@
|
|||||||
UhkModulePhase_ReceiveSync,
|
UhkModulePhase_ReceiveSync,
|
||||||
UhkModulePhase_ProcessSync,
|
UhkModulePhase_ProcessSync,
|
||||||
|
|
||||||
|
// Get protocol version
|
||||||
|
UhkModulePhase_RequestProtocolVersion,
|
||||||
|
UhkModulePhase_ReceiveProtocolVersion,
|
||||||
|
UhkModulePhase_ProcessProtocolVersion,
|
||||||
|
|
||||||
// Get module id
|
// Get module id
|
||||||
UhkModulePhase_RequestModuleId,
|
UhkModulePhase_RequestModuleId,
|
||||||
UhkModulePhase_ReceiveModuleId,
|
UhkModulePhase_ReceiveModuleId,
|
||||||
@@ -54,6 +59,7 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t moduleId;
|
uint8_t moduleId;
|
||||||
|
uint8_t protocolVersion;
|
||||||
uhk_module_phase_t phase;
|
uhk_module_phase_t phase;
|
||||||
uhk_module_vars_t targetVars;
|
uhk_module_vars_t targetVars;
|
||||||
i2c_message_t rxMessage;
|
i2c_message_t rxMessage;
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SlaveProperty_Sync,
|
SlaveProperty_Sync,
|
||||||
|
SlaveProperty_ProtocolVersion,
|
||||||
SlaveProperty_ModuleId,
|
SlaveProperty_ModuleId,
|
||||||
SlaveProperty_Features,
|
SlaveProperty_Features,
|
||||||
} slave_property_t;
|
} slave_property_t;
|
||||||
|
|||||||
Reference in New Issue
Block a user