diff --git a/right/src/bridge_protocol_scheduler.c b/right/src/bridge_protocol_scheduler.c index f234616..349dd7f 100644 --- a/right/src/bridge_protocol_scheduler.c +++ b/right/src/bridge_protocol_scheduler.c @@ -9,11 +9,6 @@ uint8_t ledsBuffer[BUFFER_SIZE] = {FRAME_REGISTER_PWM_FIRST}; uint8_t currentBridgeSlaveId = 0; -bridge_slave_t bridgeSlaves[] = { - { .moduleId = 0, .type = BridgeSlaveType_UhkModule }, - { .moduleId = 0, .type = BridgeSlaveType_LedDriver }, -}; - bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId) { I2cAsyncWrite(I2C_ADDRESS_LED_DRIVER_LEFT, ledsBuffer, BUFFER_SIZE); return true; @@ -24,16 +19,17 @@ bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId) { return true; } +bridge_slave_t bridgeSlaves[] = { + { .slaveHandler = BridgeSlaveUhkModuleHandler, .moduleId = 0 }, + { .slaveHandler = BridgeSlaveLedDriverHandler, .moduleId = 0 }, +}; + static void bridgeProtocolCallback(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData) { bridge_slave_t *bridgeSlave = bridgeSlaves + currentBridgeSlaveId; SetLeds(0xff); - if (bridgeSlave->type == BridgeSlaveType_UhkModule) { - BridgeSlaveUhkModuleHandler(bridgeSlave->moduleId); - } else if (bridgeSlave->type == BridgeSlaveType_LedDriver) { - BridgeSlaveLedDriverHandler(bridgeSlave->moduleId); - } + bridgeSlave->slaveHandler(bridgeSlave->moduleId); if (++currentBridgeSlaveId >= (sizeof(bridgeSlaves) / sizeof(bridge_slave_t))) { currentBridgeSlaveId = 0; diff --git a/right/src/bridge_protocol_scheduler.h b/right/src/bridge_protocol_scheduler.h index a986c00..79d8cb4 100644 --- a/right/src/bridge_protocol_scheduler.h +++ b/right/src/bridge_protocol_scheduler.h @@ -13,9 +13,11 @@ BridgeSlaveType_Touchpad } bridge_slave_type_t; + typedef bool (slave_handler_t)(uint8_t); + typedef struct { uint8_t moduleId; // This is a unique, per-module ID. - bridge_slave_type_t type; + slave_handler_t *slaveHandler; bool isConnected; } bridge_slave_t;