Replace "type" with "slaveHandler" callback inside bridge_slave_t.
This commit is contained in:
@@ -9,11 +9,6 @@
|
|||||||
uint8_t ledsBuffer[BUFFER_SIZE] = {FRAME_REGISTER_PWM_FIRST};
|
uint8_t ledsBuffer[BUFFER_SIZE] = {FRAME_REGISTER_PWM_FIRST};
|
||||||
uint8_t currentBridgeSlaveId = 0;
|
uint8_t currentBridgeSlaveId = 0;
|
||||||
|
|
||||||
bridge_slave_t bridgeSlaves[] = {
|
|
||||||
{ .moduleId = 0, .type = BridgeSlaveType_UhkModule },
|
|
||||||
{ .moduleId = 0, .type = BridgeSlaveType_LedDriver },
|
|
||||||
};
|
|
||||||
|
|
||||||
bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId) {
|
bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId) {
|
||||||
I2cAsyncWrite(I2C_ADDRESS_LED_DRIVER_LEFT, ledsBuffer, BUFFER_SIZE);
|
I2cAsyncWrite(I2C_ADDRESS_LED_DRIVER_LEFT, ledsBuffer, BUFFER_SIZE);
|
||||||
return true;
|
return true;
|
||||||
@@ -24,16 +19,17 @@ bool BridgeSlaveUhkModuleHandler(uint8_t uhkModuleId) {
|
|||||||
return true;
|
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)
|
static void bridgeProtocolCallback(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData)
|
||||||
{
|
{
|
||||||
bridge_slave_t *bridgeSlave = bridgeSlaves + currentBridgeSlaveId;
|
bridge_slave_t *bridgeSlave = bridgeSlaves + currentBridgeSlaveId;
|
||||||
SetLeds(0xff);
|
SetLeds(0xff);
|
||||||
|
|
||||||
if (bridgeSlave->type == BridgeSlaveType_UhkModule) {
|
bridgeSlave->slaveHandler(bridgeSlave->moduleId);
|
||||||
BridgeSlaveUhkModuleHandler(bridgeSlave->moduleId);
|
|
||||||
} else if (bridgeSlave->type == BridgeSlaveType_LedDriver) {
|
|
||||||
BridgeSlaveLedDriverHandler(bridgeSlave->moduleId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (++currentBridgeSlaveId >= (sizeof(bridgeSlaves) / sizeof(bridge_slave_t))) {
|
if (++currentBridgeSlaveId >= (sizeof(bridgeSlaves) / sizeof(bridge_slave_t))) {
|
||||||
currentBridgeSlaveId = 0;
|
currentBridgeSlaveId = 0;
|
||||||
|
|||||||
@@ -13,9 +13,11 @@
|
|||||||
BridgeSlaveType_Touchpad
|
BridgeSlaveType_Touchpad
|
||||||
} bridge_slave_type_t;
|
} bridge_slave_type_t;
|
||||||
|
|
||||||
|
typedef bool (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.
|
||||||
bridge_slave_type_t type;
|
slave_handler_t *slaveHandler;
|
||||||
bool isConnected;
|
bool isConnected;
|
||||||
} bridge_slave_t;
|
} bridge_slave_t;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user