Mercurial > louis > kiibohd-controller
diff Scan/ISSILed/led_scan.c @ 422:cbcdb7a16b7c
Fixing potential WF LED issue
- Added fix for USB Current Change
* If called during interrupt, could hang the I2C bus
* Delaying I2C writes till scan loop
author | Jacob Alexander <haata@kiibohd.com> |
---|---|
date | Tue, 01 Mar 2016 19:35:21 -0800 |
parents | 23a1868b4ac2 |
children |
line wrap: on
line diff
--- a/Scan/ISSILed/led_scan.c Tue Feb 23 14:35:08 2016 -0800 +++ b/Scan/ISSILed/led_scan.c Tue Mar 01 19:35:21 2016 -0800 @@ -639,12 +639,26 @@ // LED State processing loop +unsigned int LED_currentEvent = 0; inline uint8_t LED_scan() { + // Check for current change event + if ( LED_currentEvent ) + { + // TODO dim LEDs in low power mode instead of shutting off + if ( LED_currentEvent < 150 ) + { + // Enable Software shutdown of ISSI chip + LED_writeReg( 0x0A, 0x00, 0x0B ); + } + else + { + // Disable Software shutdown of ISSI chip + LED_writeReg( 0x0A, 0x01, 0x0B ); + } - // I2C Busy - // S & I2C_S_BUSY - //I2C_S_BUSY + LED_currentEvent = 0; + } return 0; } @@ -654,17 +668,8 @@ // current - mA void LED_currentChange( unsigned int current ) { - // TODO dim LEDs in low power mode instead of shutting off - if ( current < 150 ) - { - // Enabled Software shutdown of ISSI chip - LED_writeReg( 0x0A, 0x00, 0x0B ); - } - else - { - // Disable Software shutdown of ISSI chip - LED_writeReg( 0x0A, 0x01, 0x0B ); - } + // Delay action till next LED scan loop (as this callback sometimes occurs during interrupt requests) + LED_currentEvent = current; }