Make the slave scheduler always jump to the next slave by disallowing slave drivers to lock the scheduler.

This commit is contained in:
László Monda
2017-05-05 01:08:39 +02:00
parent f713a13a21
commit b21cd8b493
6 changed files with 9 additions and 14 deletions

View File

@@ -54,7 +54,7 @@ uint8_t setFunctionFrameBuffer[] = {LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_
uint8_t setShutdownModeNormalBuffer[] = {LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL};
uint8_t setFrame1Buffer[] = {LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1};
bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId) {
void BridgeSlaveLedDriverHandler(uint8_t ledDriverId) {
uint8_t *ledDriverState = ledDriverStates + ledDriverId;
uint8_t ledDriverAddress = ledDriverId ? I2C_ADDRESS_LED_DRIVER_LEFT : I2C_ADDRESS_LED_DRIVER_RIGHT;
uint8_t *ledControlBuffer = ledDriverId ? ledControlBufferLeft : ledControlBufferRight;
@@ -80,7 +80,6 @@ bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId) {
I2cAsyncWrite(ledDriverAddress, ledsBuffer, BUFFER_SIZE);
break;
}
return true;
}
void SetLeds(uint8_t ledBrightness)

View File

@@ -17,7 +17,7 @@
// Functions:
extern bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId);
extern void BridgeSlaveLedDriverHandler(uint8_t ledDriverId);
extern void SetLeds(uint8_t ledBrightness);
#endif

View File

@@ -20,7 +20,7 @@ void InitUhkModules()
}
}
bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId)
void BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId)
{
uhk_module_state_t *uhkModuleInternalState = UhkModuleStates + uhkModuleId;
//uhk_module_state_t *uhkModuleExternalState = uhkModuleExternalStates + uhkModuleId;
@@ -66,6 +66,4 @@ bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId)
currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand;
break;
}
return true;
}

View File

@@ -33,6 +33,6 @@
// Functions:
extern void InitUhkModules();
extern bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId);
extern void BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId);
#endif

View File

@@ -23,13 +23,11 @@ static void bridgeProtocolCallback(I2C_Type *base, i2c_master_handle_t *handle,
}
uhk_slave_t *bridgeSlave = bridgeSlaves + currentBridgeSlaveId;
bool isFinished = bridgeSlave->slaveHandler(bridgeSlave->moduleId);
if (isFinished) {
currentBridgeSlaveId++;
bridgeSlave->slaveHandler(bridgeSlave->moduleId);
currentBridgeSlaveId++;
if (currentBridgeSlaveId >= (sizeof(bridgeSlaves) / sizeof(uhk_slave_t))) {
currentBridgeSlaveId = 0;
}
if (currentBridgeSlaveId >= (sizeof(bridgeSlaves) / sizeof(uhk_slave_t))) {
currentBridgeSlaveId = 0;
}
}

View File

@@ -13,7 +13,7 @@
UhkSlaveType_Touchpad
} uhk_slave_type_t;
typedef bool (slave_handler_t)(uint8_t);
typedef void (slave_handler_t)(uint8_t);
typedef struct {
uint8_t moduleId; // This is a unique, per-module ID.