Add slave_driver_initializer_t, slaveDriverInitializers, and initialize slaves in a more organized fashion.
This commit is contained in:
@@ -54,6 +54,10 @@ 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};
|
||||||
|
|
||||||
|
void InitLedSlaveDriver() {
|
||||||
|
SetLeds(0xff);
|
||||||
|
}
|
||||||
|
|
||||||
void UhkSlaveLedDriverHandler(uint8_t ledDriverId) {
|
void UhkSlaveLedDriverHandler(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;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
// Functions:
|
// Functions:
|
||||||
|
|
||||||
|
extern void InitLedSlaveDriver();
|
||||||
extern void UhkSlaveLedDriverHandler(uint8_t ledDriverId);
|
extern void UhkSlaveLedDriverHandler(uint8_t ledDriverId);
|
||||||
extern void SetLeds(uint8_t ledBrightness);
|
extern void SetLeds(uint8_t ledBrightness);
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,11 @@
|
|||||||
|
|
||||||
uint8_t currentBridgeSlaveId = 0;
|
uint8_t currentBridgeSlaveId = 0;
|
||||||
|
|
||||||
|
slave_driver_initializer_t slaveDriverInitializers[] = {
|
||||||
|
InitUhkModules,
|
||||||
|
InitLedSlaveDriver,
|
||||||
|
};
|
||||||
|
|
||||||
uhk_slave_t slaves[] = {
|
uhk_slave_t slaves[] = {
|
||||||
{ .slaveHandler = UhkSlaveUhkModuleHandler, .moduleId = 0 },
|
{ .slaveHandler = UhkSlaveUhkModuleHandler, .moduleId = 0 },
|
||||||
{ .slaveHandler = UhkSlaveLedDriverHandler, .moduleId = 0 },
|
{ .slaveHandler = UhkSlaveLedDriverHandler, .moduleId = 0 },
|
||||||
@@ -31,10 +36,16 @@ static void bridgeProtocolCallback(I2C_Type *base, i2c_master_handle_t *handle,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void initSlaveDrivers()
|
||||||
|
{
|
||||||
|
for (uint8_t i=0; i<sizeof(slaveDriverInitializers) / sizeof(slave_driver_initializer_t); i++) {
|
||||||
|
slaveDriverInitializers[i]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void InitSlaveScheduler()
|
void InitSlaveScheduler()
|
||||||
{
|
{
|
||||||
InitUhkModules();
|
initSlaveDrivers();
|
||||||
SetLeds(0xff);
|
|
||||||
I2C_MasterTransferCreateHandle(I2C_MAIN_BUS_BASEADDR, &I2cMasterHandle, bridgeProtocolCallback, NULL);
|
I2C_MasterTransferCreateHandle(I2C_MAIN_BUS_BASEADDR, &I2cMasterHandle, bridgeProtocolCallback, NULL);
|
||||||
|
|
||||||
// Kickstart the scheduler by triggering the first callback.
|
// Kickstart the scheduler by triggering the first callback.
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
} uhk_slave_type_t;
|
} uhk_slave_type_t;
|
||||||
|
|
||||||
typedef void (slave_handler_t)(uint8_t);
|
typedef void (slave_handler_t)(uint8_t);
|
||||||
|
typedef void (*slave_driver_initializer_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.
|
||||||
|
|||||||
Reference in New Issue
Block a user