-void set_lock_leds(uint8_t lock_type, uint8_t led_on) {
- uint8_t page, led_addr, start, temp;
- uint8_t led_control_word[2] = {0};
- //TODO: this function call could send led address vs lock_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
- //TODO: blink of all leds are on, clear blink register if not
- is31_read_register(0, 0x00, &temp);
- led_addr += temp == 0 ? 0 : 0x12;//send bit to blink register instead
- start = BACKLIGHT_OFF_LOCK_LED_OFF ? 1 : 0;
-
- for(page=start; page<8; page++) {
- set_led_bit(page,led_control_word,led_addr,led_on);
- is31_write_data(page, led_control_word, 0x02);
- }
+void write_led_byte (uint8_t page, uint8_t row, uint8_t led_byte) {
+ uint8_t led_control_word[2] = {0};//register address and on/off byte
+
+ led_control_word[0] = (row - 1 ) * 0x02;// A-matrix is every other byte
+ led_control_word[1] = led_byte;
+ is31_write_data(page, led_control_word, 0x02);