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
|
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) {
|
bool BridgeSlaveLedDriverHandler(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;
|
||||||
uint8_t *ledControlBuffer = ledDriverId ? ledControlBufferLeft : ledControlBufferRight;
|
uint8_t *ledControlBuffer = ledDriverId ? ledControlBufferLeft : ledControlBufferRight;
|
||||||
|
|
||||||
switch (*ledDriverState) {
|
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:
|
case LedDriverState_InitLedControlRegisters:
|
||||||
I2cAsyncWrite(ledDriverAddress, ledControlBuffer, sizeof(ledControlBufferLeft));
|
I2cAsyncWrite(ledDriverAddress, ledControlBuffer, sizeof(ledControlBufferLeft));
|
||||||
*ledDriverState = LedDriverState_Initialized;
|
*ledDriverState = LedDriverState_Initialized;
|
||||||
break;
|
break;
|
||||||
case LedDriverState_Initialized:
|
case LedDriverState_Initialized:
|
||||||
I2cAsyncWrite(I2C_ADDRESS_LED_DRIVER_LEFT, ledsBuffer, BUFFER_SIZE);
|
I2cAsyncWrite(I2C_ADDRESS_LED_DRIVER_LEFT, ledsBuffer, BUFFER_SIZE);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
// Typedefs:
|
// Typedefs:
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
LedDriverState_SetFunctionFrame,
|
||||||
|
LedDriverState_SetShutdownModeNormal,
|
||||||
|
LedDriverState_SetFrame1,
|
||||||
LedDriverState_InitLedControlRegisters,
|
LedDriverState_InitLedControlRegisters,
|
||||||
LedDriverState_Initialized,
|
LedDriverState_Initialized,
|
||||||
} LedDriverState;
|
} LedDriverState;
|
||||||
|
|||||||
@@ -13,18 +13,4 @@ void LedDriver_InitAllLeds(char isEnabled)
|
|||||||
PORT_SetPinMux(LED_DRIVER_SDB_PORT, LED_DRIVER_SDB_PIN, kPORT_MuxAsGpio);
|
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_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);
|
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:
|
// Functions:
|
||||||
|
|
||||||
extern void LedDriver_WriteRegister(uint8_t i2cAddress, uint8_t reg, uint8_t val);
|
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);
|
extern void LedDriver_InitAllLeds(char isEnabled);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user