Replace "type" with "slaveHandler" callback inside bridge_slave_t.

This commit is contained in:
László Monda
2017-03-17 01:57:49 +01:00
parent d9ffdb6bb3
commit 38d3da05a4
2 changed files with 9 additions and 11 deletions

View File

@@ -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;

View File

@@ -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;