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

View File

@@ -17,7 +17,7 @@
// Functions: // Functions:
extern bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId); extern void BridgeSlaveLedDriverHandler(uint8_t ledDriverId);
extern void SetLeds(uint8_t ledBrightness); extern void SetLeds(uint8_t ledBrightness);
#endif #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 *uhkModuleInternalState = UhkModuleStates + uhkModuleId;
//uhk_module_state_t *uhkModuleExternalState = uhkModuleExternalStates + uhkModuleId; //uhk_module_state_t *uhkModuleExternalState = uhkModuleExternalStates + uhkModuleId;
@@ -66,6 +66,4 @@ bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId)
currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand; currentUhkModuleField = UhkModuleField_SendKeystatesRequestCommand;
break; break;
} }
return true;
} }

View File

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

View File

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

View File

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