Add kStatus_Uhk_NoOp and make the scheduler handle it.

This commit is contained in:
László Monda
2017-09-22 14:32:43 +02:00
parent 2aa74853b5
commit ef9d9ee9a7
3 changed files with 7 additions and 3 deletions

View File

@@ -39,6 +39,7 @@ status_t UhkModuleSlaveDriver_Update(uint8_t uhkModuleId)
if (CRC16_IsMessageValid(rxBuffer, KEY_STATE_SIZE)) { if (CRC16_IsMessageValid(rxBuffer, KEY_STATE_SIZE)) {
BoolBitsToBytes(rxBuffer, CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], LEFT_KEYBOARD_HALF_KEY_COUNT); BoolBitsToBytes(rxBuffer, CurrentKeyStates[SLOT_ID_LEFT_KEYBOARD_HALF], LEFT_KEYBOARD_HALF_KEY_COUNT);
} }
status = kStatus_Uhk_NoOp;
uhkModulePhase = UhkModulePhase_SetLedPwmBrightness; uhkModulePhase = UhkModulePhase_SetLedPwmBrightness;
break; break;
case UhkModulePhase_SetLedPwmBrightness: case UhkModulePhase_SetLedPwmBrightness:

View File

@@ -34,14 +34,16 @@ static void masterCallback(I2C_Type *base, i2c_master_handle_t *handle, status_t
} }
status_t currentStatus = currentSlave->update(currentSlave->perDriverId); status_t currentStatus = currentSlave->update(currentSlave->perDriverId);
isTransferScheduled = currentStatus != kStatus_Uhk_IdleSlave; isTransferScheduled = currentStatus != kStatus_Uhk_IdleSlave && currentStatus != kStatus_Uhk_NoOp;
//isTransferScheduled = currentStatus == kStatus_Success // Why it is not working? //isTransferScheduled = currentStatus == kStatus_Success // Why it is not working?
if (isTransferScheduled) { if (isTransferScheduled) {
currentSlave->isConnected = true; currentSlave->isConnected = true;
} }
previousSlaveId = currentSlaveId; previousSlaveId = currentSlaveId;
if (currentStatus != kStatus_Uhk_NoOp) {
currentSlaveId++; currentSlaveId++;
}
if (currentSlaveId >= (sizeof(Slaves) / sizeof(uhk_slave_t))) { if (currentSlaveId >= (sizeof(Slaves) / sizeof(uhk_slave_t))) {
currentSlaveId = 0; currentSlaveId = 0;

View File

@@ -28,7 +28,8 @@
} uhk_status_group_t; } uhk_status_group_t;
typedef enum { typedef enum {
kStatus_Uhk_IdleSlave = MAKE_STATUS(kStatusGroup_Uhk, 0), kStatus_Uhk_IdleSlave = MAKE_STATUS(kStatusGroup_Uhk, 0), // An other slave should be scheduled
kStatus_Uhk_NoOp = MAKE_STATUS(kStatusGroup_Uhk, 1), // The same slave should be rescheduled
} uhk_status_t; } uhk_status_t;
// Variables: // Variables: