Make slaves send their module id to the master.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user