From bd76fb44c22faa6066d63aa5710382927718025a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 5 Oct 2017 17:26:10 +0200 Subject: [PATCH] Make slaves send their module id to the master. --- left/src/slave_protocol_handler.c | 5 +++++ right/src/module.h | 8 -------- right/src/slave_drivers/uhk_module_driver.c | 22 ++++++++++++++++++++- right/src/slave_drivers/uhk_module_driver.h | 6 ++++++ shared/slave_protocol.h | 9 +++++++++ 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/left/src/slave_protocol_handler.c b/left/src/slave_protocol_handler.c index 70eddb9..2bb495b 100644 --- a/left/src/slave_protocol_handler.c +++ b/left/src/slave_protocol_handler.c @@ -70,6 +70,11 @@ void SlaveTxHandler(void) TxMessage.length = SLAVE_SYNC_STRING_LENGTH; break; } + case SlaveProperty_ModuleId: { + TxMessage.data[0] = ModuleId_LeftKeyboardHalf; + TxMessage.length = 1; + break; + } case SlaveProperty_Features: { uhk_module_features_t *moduleFeatures = (uhk_module_features_t*)&TxMessage.data; moduleFeatures->keyCount = MODULE_KEY_COUNT; diff --git a/right/src/module.h b/right/src/module.h index 4d2dcd6..76fce8f 100644 --- a/right/src/module.h +++ b/right/src/module.h @@ -25,14 +25,6 @@ // Typedefs: - typedef enum { - ModuleId_LeftKeyboardHalf = 1, - ModuleId_KeyClusterLeft = 2, - ModuleId_TrackballRight = 3, - ModuleId_TrackpointRight = 4, - ModuleId_TouchpadRight = 5, - } module_id_t; - typedef struct { uint8_t acceleration; uint8_t maxSpeed; diff --git a/right/src/slave_drivers/uhk_module_driver.c b/right/src/slave_drivers/uhk_module_driver.c index efde3e8..595eed6 100644 --- a/right/src/slave_drivers/uhk_module_driver.c +++ b/right/src/slave_drivers/uhk_module_driver.c @@ -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_RequestModuleFeatures + ? UhkModulePhase_RequestModuleId : UhkModulePhase_RequestSync; break; } + // Get module id + case UhkModulePhase_RequestModuleId: + txMessage.data[0] = SlaveCommand_RequestProperty; + txMessage.data[1] = SlaveProperty_ModuleId; + txMessage.length = 2; + status = tx(i2cAddress); + *uhkModulePhase = UhkModulePhase_ReceiveModuleId; + break; + case UhkModulePhase_ReceiveModuleId: + status = rx(rxMessage, i2cAddress); + *uhkModulePhase = UhkModulePhase_ProcessModuleId; + break; + case UhkModulePhase_ProcessModuleId: + if (CRC16_IsMessageValid(rxMessage)) { + uhkModuleState->moduleId = rxMessage->data[0]; + } + status = kStatus_Uhk_NoTransfer; + *uhkModulePhase = UhkModulePhase_RequestModuleFeatures; + break; + // Get module features case UhkModulePhase_RequestModuleFeatures: txMessage.data[0] = SlaveCommand_RequestProperty; diff --git a/right/src/slave_drivers/uhk_module_driver.h b/right/src/slave_drivers/uhk_module_driver.h index 274cd64..54e8ac7 100644 --- a/right/src/slave_drivers/uhk_module_driver.h +++ b/right/src/slave_drivers/uhk_module_driver.h @@ -26,6 +26,11 @@ UhkModulePhase_ReceiveSync, UhkModulePhase_ProcessSync, + // Get module id + UhkModulePhase_RequestModuleId, + UhkModulePhase_ReceiveModuleId, + UhkModulePhase_ProcessModuleId, + // Get module features UhkModulePhase_RequestModuleFeatures, UhkModulePhase_ReceiveModuleFeatures, @@ -48,6 +53,7 @@ } uhk_module_vars_t; typedef struct { + uint8_t moduleId; uhk_module_phase_t phase; uhk_module_vars_t targetVars; i2c_message_t rxMessage; diff --git a/shared/slave_protocol.h b/shared/slave_protocol.h index 7d8fed6..066c0be 100644 --- a/shared/slave_protocol.h +++ b/shared/slave_protocol.h @@ -27,9 +27,18 @@ typedef enum { SlaveProperty_Sync, + SlaveProperty_ModuleId, SlaveProperty_Features, } slave_property_t; + typedef enum { + ModuleId_LeftKeyboardHalf = 1, + ModuleId_KeyClusterLeft = 2, + ModuleId_TrackballRight = 3, + ModuleId_TrackpointRight = 4, + ModuleId_TouchpadRight = 5, + } module_id_t; + typedef struct { uint8_t keyCount; bool hasPointer;