From d0678bbb519ba42ebb1b2451704f5f7562d44d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 1 Jun 2017 10:59:41 +0200 Subject: [PATCH] Make sure that SDB of the LED driver is pulled high before talking to it over I2C. --- right/src/slave_drivers/slave_driver_led_driver.c | 4 ++++ right/src/slave_scheduler.h | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/right/src/slave_drivers/slave_driver_led_driver.c b/right/src/slave_drivers/slave_driver_led_driver.c index 65c183a..38794e8 100644 --- a/right/src/slave_drivers/slave_driver_led_driver.c +++ b/right/src/slave_drivers/slave_driver_led_driver.c @@ -1,4 +1,5 @@ #include "slave_drivers/slave_driver_led_driver.h" +#include "slave_scheduler.h" led_driver_state_t ledDriverStates[LED_DRIVER_MAX_COUNT] = { { @@ -72,6 +73,9 @@ void LedSlaveDriver_Update(uint8_t ledDriverId) { switch (*ledDriverPhase) { case LedDriverPhase_SetFunctionFrame: + if (!slaves[SlaveId_LeftKeyboardHalf].isConnected) { + break; + } I2cAsyncWrite(ledDriverAddress, setFunctionFrameBuffer, sizeof(setFunctionFrameBuffer)); *ledDriverPhase = LedDriverPhase_SetShutdownModeNormal; break; diff --git a/right/src/slave_scheduler.h b/right/src/slave_scheduler.h index 8891bdc..72cb7a8 100644 --- a/right/src/slave_scheduler.h +++ b/right/src/slave_scheduler.h @@ -13,6 +13,12 @@ UhkSlaveType_Touchpad } uhk_slave_type_t; + typedef enum { + SlaveId_LeftKeyboardHalf, + SlaveId_RightLedDriver, + SlaveId_LeftLedDriver, + } slave_id_t; + typedef void (slave_initializer_t)(uint8_t); typedef void (slave_updater_t)(uint8_t); @@ -23,6 +29,10 @@ bool isConnected; } uhk_slave_t; +// Variables: + + extern uhk_slave_t slaves[]; + // Functions: void InitSlaveScheduler();