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
+1
View File
@@ -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
+5
View File
@@ -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;
+21 -1
View File
@@ -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;
+1
View File
@@ -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;