diff options
| -rw-r--r-- | keyboards/infinity60/led_controller.c | 123 | 
1 files changed, 65 insertions, 58 deletions
| diff --git a/keyboards/infinity60/led_controller.c b/keyboards/infinity60/led_controller.c index bc501d9f29..c5303a3e70 100644 --- a/keyboards/infinity60/led_controller.c +++ b/keyboards/infinity60/led_controller.c @@ -23,22 +23,24 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "ch.h"  #include "hal.h" +#include "print.h"  #include "led_controller.h" -#include "hook.h"  #include "suspend.h"  #include "usb_main.h" -/* WF LED MAP +/* Infinity60 LED MAP      - digits mean "row" and "col", i.e. 45 means C4-5 in the IS31 datasheet, matrix A -  11 12 13 14 15 16 17 18 21 22 23 24 25 26 27  28 -   31 32 33 34 35 36 37 38 41 42 43 44 45  46   47 -   48 51 52 53 54 55 56 57 58 61 62 63 64   65  66 -    67 68 71 72 73 74 75 76 77 78 81 82  83  84 85 -  86  87  88       91        92  93 (94)  95 96 97 +  11 12 13 14 15 16 17 18 21 22 23 24 25  26 27* +   28 31 32 33 34 35 36 37 38 41 42 43 44 45 +   46 47 48 51 52 53 54 55 56 57 58 61    62 +    63 64 65 66 67 68 71 72 73 74 75      76 77* +  78  81  82       83         84  85  86  87 + +*Unused in Alphabet Layout  */  /* @@ -52,10 +54,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */  /* Which LED should be used for CAPS LOCK indicator - * The usual Caps Lock position is C4-8, so the address is - * 0x24 + (4-1)*0x10 + (8-1) = 0x5B */ + * The usual Caps Lock position is C4-6, so the address is + * 0x24 + (4-1)*0x10 + (8-1) = 0x59 */  #if !defined(CAPS_LOCK_LED_ADDRESS) -#define CAPS_LOCK_LED_ADDRESS 0x5B +#define CAPS_LOCK_LED_ADDRESS 0x59  #endif  /* Which LED should breathe during sleep */ @@ -81,9 +83,12 @@ uint8_t rx[1] __attribute__((aligned(2)));  uint8_t full_page[0xB4+1] = {0};  // LED mask (which LEDs are present, selected by bits) -const uint8_t is31_wf_leds_mask[0x12] = { +// See page comment above, control alternates CA matrix/CB matrix +// IC60 pcb uses only CA matrix. +// Each byte is a control pin for 8 leds 8-1 +const uint8_t is31_ic60_leds_mask[0x12] = {    0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, -  0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, 0x00 +  0x00, 0xFF, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x00, 0x00  };  /* ============================ @@ -233,56 +238,55 @@ static THD_FUNCTION(LEDthread, arg) {    }  } +//These relate to the LED map above, row and column +//0x24 = first byte (CA1) of PWM page, 0x34 is 17th byte (CA2)  /* LED game mode */ -const uint8_t led_game[83] = { +const uint8_t led_game[72] = {    0x24,    0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    0x34,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    0x44, -  0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, +  0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    0x54, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,    0x64, -  0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, +  0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    0x74,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    0x84,    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    0x94, -  0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, -  0xA4, -  0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  };  /* ALL LEDs */ -const uint8_t led_all[83] = { +const uint8_t led_all[72] = {    0x24, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,    0x34, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, -  0x44, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0x44, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,    0x54, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,    0x64, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,    0x74, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,    0x84, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,    0x94, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, -  0xA4, -  0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  };  /* =============   * hook into TMK   * ============= */ -void hook_early_init(void) { +void led_controller_init(void) {    uint8_t i; +  xprintf("led_controller_init");    /* initialise I2C */    /* I2C pins */    palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL @@ -299,9 +303,9 @@ void hook_early_init(void) {    /* initialise IS31 chip */    is31_init(); -  /* enable WF LEDs on all pages */ +  /* enable LEDs on all pages */    full_page[0] = 0; -  __builtin_memcpy(full_page+1, is31_wf_leds_mask, 0x12); +  __builtin_memcpy(full_page+1, is31_ic60_leds_mask, 0x12);    for(i=0; i<8; i++) {      is31_write_data(i, full_page, 1+0x12);    } @@ -312,7 +316,7 @@ void hook_early_init(void) {    is31_write_register(IS31_FUNCTIONREG, IS31_REG_BREATHCTRL2, IS31_REG_BREATHCTRL2_ENABLE|3);    /* Write pages */ -  for(i=0; i<9; i++) { +  for(i=0; i<8; i++) {      is31_write_data(1,(uint8_t *)(led_game+(9*i)),9);      chThdSleepMilliseconds(5);      is31_write_data(2,(uint8_t *)(led_all+(9*i)),9); @@ -329,26 +333,29 @@ void hook_early_init(void) {    chThdCreateStatic(waLEDthread, sizeof(waLEDthread), LOWPRIO, LEDthread, NULL);  } -void hook_usb_suspend_entry(void) { -#ifdef SLEEP_LED_ENABLE -  chSysLockFromISR(); -  chMBPostI(&led_mailbox, LED_MSG_SLEEP_LED_ON); -  chSysUnlockFromISR(); -#endif /* SLEEP_LED_ENABLE */ -} - -void hook_usb_suspend_loop(void) { -  chThdSleepMilliseconds(100); -  /* Remote wakeup */ -  if((USB_DRIVER.status & 2) && suspend_wakeup_condition()) { -    send_remote_wakeup(&USB_DRIVER); -  } -} - -void hook_usb_wakeup(void) { -#ifdef SLEEP_LED_ENABLE -  chSysLockFromISR(); -  chMBPostI(&led_mailbox, LED_MSG_SLEEP_LED_OFF); -  chSysUnlockFromISR(); -#endif /* SLEEP_LED_ENABLE */ -} +//TODO: Don't know equivalent QMK hooks for these +// +//void hook_usb_suspend_entry(void) { +//#ifdef SLEEP_LED_ENABLE +//  chSysLockFromISR(); +//  chMBPostI(&led_mailbox, LED_MSG_SLEEP_LED_ON); +//  chSysUnlockFromISR(); +//#endif /* SLEEP_LED_ENABLE */ +//} +// +//void hook_usb_suspend_loop(void) { +//  chThdSleepMilliseconds(100); +//  /* Remote wakeup */ +//  if((USB_DRIVER.status & 2) && suspend_wakeup_condition()) { +//    send_remote_wakeup(&USB_DRIVER); +//  } +//} +// +//void hook_usb_wakeup(void) { +//#ifdef SLEEP_LED_ENABLE +//  chSysLockFromISR(); +//  chMBPostI(&led_mailbox, LED_MSG_SLEEP_LED_OFF); +//  chSysUnlockFromISR(); +//#endif /* SLEEP_LED_ENABLE */ +//} +//*/ | 
