Completely refactor I2C LED driver initialization from sync to async.
This commit is contained in:
@@ -53,16 +53,32 @@ uint8_t ledControlBufferRight[] = {
|
||||
0b00000000, // no display
|
||||
};
|
||||
|
||||
uint8_t setFunctionFrameBuffer[] = {LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_FUNCTION};
|
||||
uint8_t setShutdownModeNormalBuffer[] = {LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL};
|
||||
uint8_t setFrame1Buffer[] = {LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1};
|
||||
|
||||
bool BridgeSlaveLedDriverHandler(uint8_t ledDriverId) {
|
||||
uint8_t *ledDriverState = ledDriverStates + ledDriverId;
|
||||
uint8_t ledDriverAddress = ledDriverId ? I2C_ADDRESS_LED_DRIVER_LEFT : I2C_ADDRESS_LED_DRIVER_RIGHT;
|
||||
uint8_t *ledControlBuffer = ledDriverId ? ledControlBufferLeft : ledControlBufferRight;
|
||||
|
||||
switch (*ledDriverState) {
|
||||
case LedDriverState_SetFunctionFrame:
|
||||
I2cAsyncWrite(ledDriverAddress, setFunctionFrameBuffer, sizeof(setFunctionFrameBuffer));
|
||||
*ledDriverState = LedDriverState_SetShutdownModeNormal;
|
||||
break;
|
||||
case LedDriverState_SetShutdownModeNormal:
|
||||
I2cAsyncWrite(ledDriverAddress, setShutdownModeNormalBuffer, sizeof(setShutdownModeNormalBuffer));
|
||||
*ledDriverState = LedDriverState_SetFrame1;
|
||||
break;
|
||||
case LedDriverState_SetFrame1:
|
||||
I2cAsyncWrite(ledDriverAddress, setFrame1Buffer, sizeof(setFrame1Buffer));
|
||||
*ledDriverState = LedDriverState_InitLedControlRegisters;
|
||||
break;
|
||||
case LedDriverState_InitLedControlRegisters:
|
||||
I2cAsyncWrite(ledDriverAddress, ledControlBuffer, sizeof(ledControlBufferLeft));
|
||||
*ledDriverState = LedDriverState_Initialized;
|
||||
break;
|
||||
break;
|
||||
case LedDriverState_Initialized:
|
||||
I2cAsyncWrite(I2C_ADDRESS_LED_DRIVER_LEFT, ledsBuffer, BUFFER_SIZE);
|
||||
break;
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
// Typedefs:
|
||||
|
||||
typedef enum {
|
||||
LedDriverState_SetFunctionFrame,
|
||||
LedDriverState_SetShutdownModeNormal,
|
||||
LedDriverState_SetFrame1,
|
||||
LedDriverState_InitLedControlRegisters,
|
||||
LedDriverState_Initialized,
|
||||
} LedDriverState;
|
||||
|
||||
@@ -13,18 +13,4 @@ void LedDriver_InitAllLeds(char isEnabled)
|
||||
PORT_SetPinMux(LED_DRIVER_SDB_PORT, LED_DRIVER_SDB_PIN, kPORT_MuxAsGpio);
|
||||
GPIO_PinInit(LED_DRIVER_SDB_GPIO, LED_DRIVER_SDB_PIN, &(gpio_pin_config_t){kGPIO_DigitalOutput, 0});
|
||||
GPIO_WritePinOutput(LED_DRIVER_SDB_GPIO, LED_DRIVER_SDB_PIN, 1);
|
||||
|
||||
LedDriver_SetAllLedsTo(isEnabled ? 0xFF : 0x00);
|
||||
}
|
||||
|
||||
void LedDriver_SetAllLedsTo(uint8_t val)
|
||||
{
|
||||
uint8_t ledDriverAddresses[] = {I2C_ADDRESS_LED_DRIVER_LEFT, I2C_ADDRESS_LED_DRIVER_RIGHT};
|
||||
|
||||
for (uint8_t addressId=0; addressId<sizeof(ledDriverAddresses); addressId++) {
|
||||
uint8_t address = ledDriverAddresses[addressId];
|
||||
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_FUNCTION);
|
||||
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL);
|
||||
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
// Functions:
|
||||
|
||||
extern void LedDriver_WriteRegister(uint8_t i2cAddress, uint8_t reg, uint8_t val);
|
||||
extern void LedDriver_SetAllLedsTo(uint8_t val);
|
||||
extern void LedDriver_InitAllLeds(char isEnabled);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user