Make slaves send their module id to the master.

This commit is contained in:
László Monda
2017-10-05 17:26:10 +02:00
parent 21beb59cb6
commit bd76fb44c2
5 changed files with 41 additions and 9 deletions

View File

@@ -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;

View File

@@ -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;

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_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;

View File

@@ -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;

View File

@@ -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;