Query module key count and pointer count in separate messages instead of a combined message for better clarity.
This commit is contained in:
@@ -6,6 +6,6 @@
|
|||||||
#define MODULE_PROTOCOL_VERSION 1
|
#define MODULE_PROTOCOL_VERSION 1
|
||||||
#define MODULE_ID ModuleId_LeftKeyboardHalf
|
#define MODULE_ID ModuleId_LeftKeyboardHalf
|
||||||
#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_POINTER_COUNT 0
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -64,26 +64,29 @@ void SlaveTxHandler(void)
|
|||||||
TxMessage.length = SLAVE_SYNC_STRING_LENGTH;
|
TxMessage.length = SLAVE_SYNC_STRING_LENGTH;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SlaveProperty_ModuleId: {
|
|
||||||
TxMessage.data[0] = MODULE_ID;
|
|
||||||
TxMessage.length = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SlaveProperty_ModuleProtocolVersion: {
|
case SlaveProperty_ModuleProtocolVersion: {
|
||||||
memcpy(TxMessage.data, &moduleProtocolVersion, sizeof(version_t));
|
memcpy(TxMessage.data, &moduleProtocolVersion, sizeof(version_t));
|
||||||
TxMessage.length = sizeof(version_t);
|
TxMessage.length = sizeof(version_t);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SlaveProperty_FirmwareVersion:
|
case SlaveProperty_FirmwareVersion: {
|
||||||
memcpy(TxMessage.data, &firmwareVersion, sizeof(version_t));
|
memcpy(TxMessage.data, &firmwareVersion, sizeof(version_t));
|
||||||
TxMessage.length = sizeof(version_t);
|
TxMessage.length = sizeof(version_t);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SlaveProperty_Features: {
|
case SlaveProperty_ModuleId: {
|
||||||
uhk_module_features_t *moduleFeatures = (uhk_module_features_t*)&TxMessage.data;
|
TxMessage.data[0] = MODULE_ID;
|
||||||
moduleFeatures->keyCount = MODULE_KEY_COUNT;
|
TxMessage.length = 1;
|
||||||
moduleFeatures->hasPointer = MODULE_HAS_POINTER;
|
break;
|
||||||
TxMessage.length = sizeof(uhk_module_features_t);
|
}
|
||||||
|
case SlaveProperty_KeyCount: {
|
||||||
|
TxMessage.data[0] = MODULE_KEY_COUNT;
|
||||||
|
TxMessage.length = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SlaveProperty_PointerCount: {
|
||||||
|
TxMessage.data[0] = MODULE_POINTER_COUNT;
|
||||||
|
TxMessage.length = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -160,29 +160,51 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
|
|||||||
uhkModuleState->moduleId = rxMessage->data[0];
|
uhkModuleState->moduleId = rxMessage->data[0];
|
||||||
}
|
}
|
||||||
status = kStatus_Uhk_NoTransfer;
|
status = kStatus_Uhk_NoTransfer;
|
||||||
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestModuleFeatures : UhkModulePhase_RequestModuleId;
|
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestModuleKeyCount : UhkModulePhase_RequestModuleId;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get module features
|
// Get module key count
|
||||||
case UhkModulePhase_RequestModuleFeatures:
|
case UhkModulePhase_RequestModuleKeyCount:
|
||||||
txMessage.data[0] = SlaveCommand_RequestProperty;
|
txMessage.data[0] = SlaveCommand_RequestProperty;
|
||||||
txMessage.data[1] = SlaveProperty_Features;
|
txMessage.data[1] = SlaveProperty_KeyCount;
|
||||||
txMessage.length = 2;
|
txMessage.length = 2;
|
||||||
status = tx(i2cAddress);
|
status = tx(i2cAddress);
|
||||||
*uhkModulePhase = UhkModulePhase_ReceiveModuleFeatures;
|
*uhkModulePhase = UhkModulePhase_ReceiveModuleKeyCount;
|
||||||
break;
|
break;
|
||||||
case UhkModulePhase_ReceiveModuleFeatures:
|
case UhkModulePhase_ReceiveModuleKeyCount:
|
||||||
status = rx(rxMessage, i2cAddress);
|
status = rx(rxMessage, i2cAddress);
|
||||||
*uhkModulePhase = UhkModulePhase_ProcessModuleFeatures;
|
*uhkModulePhase = UhkModulePhase_ProcessModuleKeyCount;
|
||||||
break;
|
break;
|
||||||
case UhkModulePhase_ProcessModuleFeatures: {
|
case UhkModulePhase_ProcessModuleKeyCount: {
|
||||||
bool isMessageValid = CRC16_IsMessageValid(rxMessage);
|
bool isMessageValid = CRC16_IsMessageValid(rxMessage);
|
||||||
if (isMessageValid) {
|
if (isMessageValid) {
|
||||||
memcpy(&uhkModuleState->features, rxMessage->data, sizeof(uhk_module_features_t));
|
uhkModuleState->keyCount = rxMessage->data[0];
|
||||||
}
|
}
|
||||||
status = kStatus_Uhk_NoTransfer;
|
status = kStatus_Uhk_NoTransfer;
|
||||||
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestKeyStates : UhkModulePhase_RequestModuleFeatures;
|
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestModulePointerCount : UhkModulePhase_RequestModuleKeyCount;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get module pointer count
|
||||||
|
case UhkModulePhase_RequestModulePointerCount:
|
||||||
|
txMessage.data[0] = SlaveCommand_RequestProperty;
|
||||||
|
txMessage.data[1] = SlaveProperty_PointerCount;
|
||||||
|
txMessage.length = 2;
|
||||||
|
status = tx(i2cAddress);
|
||||||
|
*uhkModulePhase = UhkModulePhase_ReceiveModulePointerCount;
|
||||||
|
break;
|
||||||
|
case UhkModulePhase_ReceiveModulePointerCount:
|
||||||
|
status = rx(rxMessage, i2cAddress);
|
||||||
|
*uhkModulePhase = UhkModulePhase_ProcessModulePointerCount;
|
||||||
|
break;
|
||||||
|
case UhkModulePhase_ProcessModulePointerCount: {
|
||||||
|
bool isMessageValid = CRC16_IsMessageValid(rxMessage);
|
||||||
|
if (isMessageValid) {
|
||||||
|
uhkModuleState->pointerCount = rxMessage->data[0];
|
||||||
|
}
|
||||||
|
status = kStatus_Uhk_NoTransfer;
|
||||||
|
*uhkModulePhase = isMessageValid ? UhkModulePhase_RequestKeyStates : UhkModulePhase_RequestModulePointerCount;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,8 +222,8 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleDriverId)
|
|||||||
case UhkModulePhase_ProcessKeystates:
|
case UhkModulePhase_ProcessKeystates:
|
||||||
if (CRC16_IsMessageValid(rxMessage)) {
|
if (CRC16_IsMessageValid(rxMessage)) {
|
||||||
uint8_t slotId = uhkModuleDriverId + 1;
|
uint8_t slotId = uhkModuleDriverId + 1;
|
||||||
BoolBitsToBytes(rxMessage->data, keyStatesBuffer, uhkModuleState->features.keyCount);
|
BoolBitsToBytes(rxMessage->data, keyStatesBuffer, uhkModuleState->keyCount);
|
||||||
for (uint8_t keyId=0; keyId<uhkModuleState->features.keyCount; keyId++) {
|
for (uint8_t keyId=0; keyId<uhkModuleState->keyCount; keyId++) {
|
||||||
KeyStates[slotId][keyId].current = keyStatesBuffer[keyId];
|
KeyStates[slotId][keyId].current = keyStatesBuffer[keyId];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,10 +44,15 @@
|
|||||||
UhkModulePhase_ReceiveModuleId,
|
UhkModulePhase_ReceiveModuleId,
|
||||||
UhkModulePhase_ProcessModuleId,
|
UhkModulePhase_ProcessModuleId,
|
||||||
|
|
||||||
// Get module features
|
// Get module key count
|
||||||
UhkModulePhase_RequestModuleFeatures,
|
UhkModulePhase_RequestModuleKeyCount,
|
||||||
UhkModulePhase_ReceiveModuleFeatures,
|
UhkModulePhase_ReceiveModuleKeyCount,
|
||||||
UhkModulePhase_ProcessModuleFeatures,
|
UhkModulePhase_ProcessModuleKeyCount,
|
||||||
|
|
||||||
|
// Get module key count
|
||||||
|
UhkModulePhase_RequestModulePointerCount,
|
||||||
|
UhkModulePhase_ReceiveModulePointerCount,
|
||||||
|
UhkModulePhase_ProcessModulePointerCount,
|
||||||
|
|
||||||
// Get key states
|
// Get key states
|
||||||
UhkModulePhase_RequestKeyStates,
|
UhkModulePhase_RequestKeyStates,
|
||||||
@@ -76,7 +81,8 @@
|
|||||||
i2c_message_t rxMessage;
|
i2c_message_t rxMessage;
|
||||||
uint8_t firmwareI2cAddress;
|
uint8_t firmwareI2cAddress;
|
||||||
uint8_t bootloaderI2cAddress;
|
uint8_t bootloaderI2cAddress;
|
||||||
uhk_module_features_t features;
|
uint8_t keyCount;
|
||||||
|
uint8_t pointerCount;
|
||||||
} uhk_module_state_t;
|
} uhk_module_state_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
SlaveProperty_ModuleProtocolVersion,
|
SlaveProperty_ModuleProtocolVersion,
|
||||||
SlaveProperty_FirmwareVersion,
|
SlaveProperty_FirmwareVersion,
|
||||||
SlaveProperty_ModuleId,
|
SlaveProperty_ModuleId,
|
||||||
SlaveProperty_Features,
|
SlaveProperty_KeyCount,
|
||||||
|
SlaveProperty_PointerCount,
|
||||||
} slave_property_t;
|
} slave_property_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@@ -41,11 +42,6 @@
|
|||||||
ModuleId_TouchpadRight = 5,
|
ModuleId_TouchpadRight = 5,
|
||||||
} module_id_t;
|
} module_id_t;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t keyCount;
|
|
||||||
bool hasPointer;
|
|
||||||
} uhk_module_features_t;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
uint16_t crc;
|
uint16_t crc;
|
||||||
|
|||||||
Reference in New Issue
Block a user