simplified lock led function

This commit is contained in:
jpetermans 2017-04-29 09:22:40 -07:00
parent b3945c103c
commit ff6beeb7a3
2 changed files with 17 additions and 42 deletions

View File

@ -262,10 +262,10 @@ page_status = 0; //start frame 0 (all off/on)
//maintain lock leds //maintain lock leds
if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) { if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) {
set_lock_leds(USB_LED_NUM_LOCK, 1); set_lock_leds(NUM_LOCK_LED_ADDRESS, 1);
} }
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) { if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
set_lock_leds(USB_LED_CAPS_LOCK, 1); set_lock_leds(CAPS_LOCK_LED_ADDRESS, 1);
} }
page_status=0; page_status=0;
@ -308,28 +308,28 @@ page_status = 0; //start frame 0 (all off/on)
//maintain lock leds //maintain lock leds
if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) { if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) {
set_lock_leds(USB_LED_NUM_LOCK, 1); set_lock_leds(NUM_LOCK_LED_ADDRESS, 1);
} }
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) { if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
set_lock_leds(USB_LED_CAPS_LOCK, 1); set_lock_leds(CAPS_LOCK_LED_ADDRESS, 1);
} }
break; break;
case TOGGLE_NUM_LOCK: case TOGGLE_NUM_LOCK:
//msg_led = 0 or 1, off/on //msg_led = 0 or 1, off/on
set_lock_leds(USB_LED_NUM_LOCK, msg_led); set_lock_leds(NUM_LOCK_LED_ADDRESS, msg_led);
break; break;
case TOGGLE_CAPS_LOCK: case TOGGLE_CAPS_LOCK:
//msg_led = 0 or 1, off/on //msg_led = 0 or 1, off/on
set_lock_leds(USB_LED_CAPS_LOCK, msg_led); set_lock_leds(CAPS_LOCK_LED_ADDRESS, msg_led);
break; break;
//TODO: MODE_BREATH //TODO: MODE_BREATH
case MODE_BREATH: case MODE_BREATH:
break; break;
case STEP_BRIGHTNESS: case STEP_BRIGHTNESS:
xprintf("TOGGLE_BACKLIGHT\n"); xprintf("STEP_BACKLIGHT\n");
chThdSleepMilliseconds(10); chThdSleepMilliseconds(10);
//led_msg = step pwm up or down //led_msg = step pwm up or down
switch (msg_led) { switch (msg_led) {
@ -458,45 +458,20 @@ void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint
led_control_reg[1] = column_byte; led_control_reg[1] = column_byte;
} }
void set_lock_leds(uint8_t lock_type, uint8_t led_on) { void set_lock_leds(uint8_t led_addr, uint8_t led_action) {
uint8_t page, led_addr, start, temp; uint8_t page, temp;
uint8_t led_control_word[2] = {0}; uint8_t led_control_word[2] = {0};
//TODO: this function call could send led address vs lock_type. //TODO: this function call could send led address vs lock_type.
//however, the switch/case allows for additional steps, like audio, depending on type //however, the switch/case allows for additional steps, like audio, depending on type
led_addr = 0;
switch(lock_type) {
case USB_LED_NUM_LOCK:
led_addr = NUM_LOCK_LED_ADDRESS;
break;
case USB_LED_CAPS_LOCK:
led_addr = CAPS_LOCK_LED_ADDRESS;
break;
#ifdef SCROLL_LOCK_LED_ADDRESS
case USB_LED_SCROLL_LOCK:
led_addr = SCROLL_LOCK_LED_ADDRESS;
break;
#endif
#ifdef COMPOSE_LED_ADDRESS
case USB_LED_COMPOSE:
led_addr = COMPOSE_LED_ADDRESS;
break;
#endif
#ifdef SCROLL_LOCK_LED_ADDRESS
case USB_LED_KANA:
led_addr = KANA_LED_ADDRESS;
break;
#endif
}
//ignore frame0 if all leds are on or if option set in led_controller.h //ignore frame0 if all leds are on or if option set in led_controller.h
//TODO: blink of all leds are on, clear blink register if not //TODO: blink of all leds are on, clear blink register if not
is31_read_register(0, 0x00, &temp); //is31_read_register(0, 0x00, &temp);
led_addr += temp == 0 ? 0 : 0x12;//send bit to blink register instead //led_addr += temp == 0 ? 0 : 0x12;//send bit to blink register instead
start = BACKLIGHT_OFF_LOCK_LED_OFF ? 1 : 0; //start = BACKLIGHT_OFF_LOCK_LED_OFF ? 1 : 0;
for(page=start; page<8; page++) { for(page=0; page<8; page++) {
set_led_bit(page,led_control_word,led_addr,led_on); set_led_bit(page,led_control_word,led_addr,led_action);
is31_write_data(page, led_control_word, 0x02); is31_write_data(page, led_control_word, 0x02);
} }
} }
@ -558,8 +533,8 @@ void led_controller_init(void) {
is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL2, IS31_REG_BREATHCTRL2_ENABLE|3); is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL2, IS31_REG_BREATHCTRL2_ENABLE|3);
// clean up the lock LEDs // clean up the lock LEDs
set_lock_leds(USB_LED_NUM_LOCK, 0); set_lock_leds(NUM_LOCK_LED_ADDRESS, 0);
set_lock_leds(USB_LED_CAPS_LOCK, 0); set_lock_leds(CAPS_LOCK_LED_ADDRESS, 0);
/* more time consuming LED processing should be offloaded into /* more time consuming LED processing should be offloaded into
* a thread, with asynchronous messaging. */ * a thread, with asynchronous messaging. */

View File

@ -93,7 +93,7 @@ void led_controller_init(void);
extern mailbox_t led_mailbox; extern mailbox_t led_mailbox;
void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint8_t action); void set_led_bit (uint8_t page, uint8_t *led_control_reg, uint8_t led_addr, uint8_t action);
void set_lock_leds (uint8_t lock_type, uint8_t led_on); void set_lock_leds (uint8_t lock_addr, uint8_t led_action);
void write_led_page (uint8_t page, uint8_t *led_array, uint8_t led_count); void write_led_page (uint8_t page, uint8_t *led_array, uint8_t led_count);
// constants for signaling the LED controller thread // constants for signaling the LED controller thread