From 0e41e403a97fcdea85519278a298fcda7e8231f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Wed, 31 May 2017 23:29:02 +0200 Subject: [PATCH] Move LED control register commands to ledDriverStates. --- .../slave_drivers/slave_driver_led_driver.c | 96 +++++++++---------- .../slave_drivers/slave_driver_led_driver.h | 7 ++ 2 files changed, 54 insertions(+), 49 deletions(-) diff --git a/right/src/slave_drivers/slave_driver_led_driver.c b/right/src/slave_drivers/slave_driver_led_driver.c index af21404..ead636d 100644 --- a/right/src/slave_drivers/slave_driver_led_driver.c +++ b/right/src/slave_drivers/slave_driver_led_driver.c @@ -3,70 +3,68 @@ uint8_t ledsBuffer[BUFFER_SIZE] = {FRAME_REGISTER_PWM_FIRST}; led_driver_state_t ledDriverStates[LED_DRIVER_MAX_COUNT] = { { - .i2cAddress = I2C_ADDRESS_LED_DRIVER_RIGHT + .i2cAddress = I2C_ADDRESS_LED_DRIVER_RIGHT, + .setupLedControlRegistersCommand = { + FRAME_REGISTER_LED_CONTROL_FIRST, + 0b01111111, // key row 1 + 0b00000000, // no display + 0b01111111, // keys row 2 + 0b00000000, // no display + 0b01111111, // keys row 3 + 0b00000000, // no display + 0b01111111, // keys row 4 + 0b00000000, // no display + 0b01111010, // keys row 5 + 0b00000000, // no display + 0b00000000, // keys row 6 + 0b00000000, // no display + 0b00000000, // keys row 7 + 0b00000000, // no display + 0b00000000, // keys row 8 + 0b00000000, // no display + 0b00000000, // keys row 9 + 0b00000000, // no display + } }, { - .i2cAddress = I2C_ADDRESS_LED_DRIVER_LEFT + .i2cAddress = I2C_ADDRESS_LED_DRIVER_LEFT, + .setupLedControlRegistersCommand = { + FRAME_REGISTER_LED_CONTROL_FIRST, + 0b01111111, // key row 1 + 0b00111111, // display row 1 + 0b01011111, // keys row 2 + 0b00111111, // display row 2 + 0b01011111, // keys row 3 + 0b00111111, // display row 3 + 0b01111101, // keys row 4 + 0b00011111, // display row 4 + 0b00101111, // keys row 5 + 0b00011111, // display row 5 + 0b00000000, // keys row 6 + 0b00011111, // display row 6 + 0b00000000, // keys row 7 + 0b00011111, // display row 7 + 0b00000000, // keys row 8 + 0b00011111, // display row 8 + 0b00000000, // keys row 9 + 0b00011111, // display row 9 + } }, }; -uint8_t ledControlBufferLeft[] = { - FRAME_REGISTER_LED_CONTROL_FIRST, - 0b01111111, // key row 1 - 0b00111111, // display row 1 - 0b01011111, // keys row 2 - 0b00111111, // display row 2 - 0b01011111, // keys row 3 - 0b00111111, // display row 3 - 0b01111101, // keys row 4 - 0b00011111, // display row 4 - 0b00101111, // keys row 5 - 0b00011111, // display row 5 - 0b00000000, // keys row 6 - 0b00011111, // display row 6 - 0b00000000, // keys row 7 - 0b00011111, // display row 7 - 0b00000000, // keys row 8 - 0b00011111, // display row 8 - 0b00000000, // keys row 9 - 0b00011111, // display row 9 -}; - -uint8_t ledControlBufferRight[] = { - FRAME_REGISTER_LED_CONTROL_FIRST, - 0b01111111, // key row 1 - 0b00000000, // no display - 0b01111111, // keys row 2 - 0b00000000, // no display - 0b01111111, // keys row 3 - 0b00000000, // no display - 0b01111111, // keys row 4 - 0b00000000, // no display - 0b01111010, // keys row 5 - 0b00000000, // no display - 0b00000000, // keys row 6 - 0b00000000, // no display - 0b00000000, // keys row 7 - 0b00000000, // no display - 0b00000000, // keys row 8 - 0b00000000, // no display - 0b00000000, // keys row 9 - 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}; void LedSlaveDriver_Init() { - ledControlBufferLeft[7] |= 0b00000010; // Enable the LED of the ISO key. + ledDriverStates[ledDriverId_Left].setupLedControlRegistersCommand[7] |= 0b00000010; // Enable the LED of the ISO key. SetLeds(0xff); } void LedSlaveDriver_Update(uint8_t ledDriverId) { uint8_t *ledDriverPhase = &ledDriverStates[ledDriverId].phase; uint8_t ledDriverAddress = ledDriverStates[ledDriverId].i2cAddress; - uint8_t *ledControlBuffer = ledDriverId ? ledControlBufferLeft : ledControlBufferRight; + uint8_t *ledControlBuffer = ledDriverStates[ledDriverId].setupLedControlRegistersCommand; switch (*ledDriverPhase) { case LedDriverPhase_SetFunctionFrame: @@ -82,7 +80,7 @@ void LedSlaveDriver_Update(uint8_t ledDriverId) { *ledDriverPhase = LedDriverPhase_InitLedControlRegisters; break; case LedDriverPhase_InitLedControlRegisters: - I2cAsyncWrite(ledDriverAddress, ledControlBuffer, sizeof(ledControlBufferLeft)); + I2cAsyncWrite(ledDriverAddress, ledControlBuffer, LED_CONTROL_REGISTERS_COMMAND_LENGTH); *ledDriverPhase = LedDriverPhase_Initialized; break; case LedDriverPhase_Initialized: diff --git a/right/src/slave_drivers/slave_driver_led_driver.h b/right/src/slave_drivers/slave_driver_led_driver.h index 3868a1c..c94f4f4 100644 --- a/right/src/slave_drivers/slave_driver_led_driver.h +++ b/right/src/slave_drivers/slave_driver_led_driver.h @@ -10,9 +10,15 @@ #define LED_DRIVER_MAX_COUNT 2 #define BUFFER_SIZE (LED_DRIVER_LED_COUNT + 1) + #define LED_CONTROL_REGISTERS_COMMAND_LENGTH 19 // Typedefs: + typedef enum { + ledDriverId_Right, + ledDriverId_Left, + } led_driver_id_t; + typedef enum { LedDriverPhase_SetFunctionFrame, LedDriverPhase_SetShutdownModeNormal, @@ -26,6 +32,7 @@ uint8_t frames[LED_DRIVER_LED_COUNT]; uint8_t ledIndex; uint8_t i2cAddress; + uint8_t setupLedControlRegistersCommand[LED_CONTROL_REGISTERS_COMMAND_LENGTH]; } led_driver_state_t; // Functions: