Add slave_driver_initializer_t, slaveDriverInitializers, and initialize slaves in a more organized fashion.

This commit is contained in:
László Monda
2017-05-05 02:06:13 +02:00
parent 5371a3c17f
commit 107a771a4c
4 changed files with 19 additions and 2 deletions

View File

@@ -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 setFrame1Buffer[] = {LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1};
void InitLedSlaveDriver() {
SetLeds(0xff);
}
void UhkSlaveLedDriverHandler(uint8_t ledDriverId) {
uint8_t *ledDriverState = ledDriverStates + ledDriverId;
uint8_t ledDriverAddress = ledDriverId ? I2C_ADDRESS_LED_DRIVER_LEFT : I2C_ADDRESS_LED_DRIVER_RIGHT;

View File

@@ -17,6 +17,7 @@
// Functions:
extern void InitLedSlaveDriver();
extern void UhkSlaveLedDriverHandler(uint8_t ledDriverId);
extern void SetLeds(uint8_t ledBrightness);

View File

@@ -10,6 +10,11 @@
uint8_t currentBridgeSlaveId = 0;
slave_driver_initializer_t slaveDriverInitializers[] = {
InitUhkModules,
InitLedSlaveDriver,
};
uhk_slave_t slaves[] = {
{ .slaveHandler = UhkSlaveUhkModuleHandler, .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()
{
InitUhkModules();
SetLeds(0xff);
initSlaveDrivers();
I2C_MasterTransferCreateHandle(I2C_MAIN_BUS_BASEADDR, &I2cMasterHandle, bridgeProtocolCallback, NULL);
// Kickstart the scheduler by triggering the first callback.

View File

@@ -14,6 +14,7 @@
} uhk_slave_type_t;
typedef void (slave_handler_t)(uint8_t);
typedef void (*slave_driver_initializer_t)();
typedef struct {
uint8_t moduleId; // This is a unique, per-module ID.