diff --git a/right/src/bridge_slave_led_driver_handler.c b/right/src/bridge_slave_led_driver_handler.c index a0e87f9..944d02f 100644 --- a/right/src/bridge_slave_led_driver_handler.c +++ b/right/src/bridge_slave_led_driver_handler.c @@ -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; diff --git a/right/src/bridge_slave_led_driver_handler.h b/right/src/bridge_slave_led_driver_handler.h index 9ecc3ab..8a4c0cc 100644 --- a/right/src/bridge_slave_led_driver_handler.h +++ b/right/src/bridge_slave_led_driver_handler.h @@ -8,6 +8,9 @@ // Typedefs: typedef enum { + LedDriverState_SetFunctionFrame, + LedDriverState_SetShutdownModeNormal, + LedDriverState_SetFrame1, LedDriverState_InitLedControlRegisters, LedDriverState_Initialized, } LedDriverState; diff --git a/right/src/led_driver.c b/right/src/led_driver.c index dccbea1..c9248a2 100644 --- a/right/src/led_driver.c +++ b/right/src/led_driver.c @@ -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