qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

nk87.c (8180B)


      1 /* Copyright 2020 Yiancar
      2  *
      3  * This program is free software: you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License as published by
      5  * the Free Software Foundation, either version 2 of the License, or
      6  * (at your option) any later version.
      7  *
      8  * This program is distributed in the hope that it will be useful,
      9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11  * GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  */
     16 #ifndef RGB_BACKLIGHT_NK87
     17 #error RGB_BACKLIGHT_NK87 not defined, recheck config.h
     18 #endif
     19 
     20 #include "nk87.h"
     21 #include "drivers/led/issi/is31fl3733.h"
     22 
     23 #if defined(RGB_MATRIX_ENABLE) || defined(RGB_BACKLIGHT_NK87)
     24 const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = {
     25 /* Refer to IS31 manual for these locations
     26  *   driver
     27  *   |  R location
     28  *   |  |      G location
     29  *   |  |      |      B location
     30  *   |  |      |      | */
     31     {0, SW2_CS1,   SW1_CS1,   SW3_CS1}, //LA1
     32     {0, SW5_CS1,   SW4_CS1,   SW6_CS1}, //LA2
     33     {0, SW8_CS1,   SW7_CS1,   SW9_CS1}, //LA3
     34     {0, SW11_CS1,   SW10_CS1,   SW12_CS1}, //LA4
     35     {0, SW2_CS2,   SW1_CS2,   SW3_CS2}, //LA5
     36     {0, SW5_CS2,   SW4_CS2,   SW6_CS2}, //LA6
     37     {0, SW8_CS2,   SW7_CS2,   SW9_CS2}, //LA7
     38     {0, SW11_CS2,   SW10_CS2,   SW12_CS2}, //LA8
     39     {0, SW2_CS3,   SW1_CS3,   SW3_CS3}, //LA9
     40     {0, SW5_CS3,   SW4_CS3,   SW6_CS3}, //LA10
     41     {0, SW8_CS3,   SW7_CS3,   SW9_CS3}, //LA11
     42     {0, SW11_CS3,   SW10_CS3,   SW12_CS3}, //LA12
     43     {0, SW2_CS4,   SW1_CS4,   SW3_CS4}, //LA13
     44     {0, SW5_CS4,   SW4_CS4,   SW6_CS4}, //LA14
     45     {0, SW8_CS4,   SW7_CS4,   SW9_CS4}, //LA15
     46     {0, SW11_CS4,   SW10_CS4,   SW12_CS4}, //LA16
     47     {0, SW2_CS5,   SW1_CS5,   SW3_CS5}, //LA17
     48     {0, SW5_CS5,   SW4_CS5,   SW6_CS5}, //LA18
     49     {0, SW8_CS5,   SW7_CS5,   SW9_CS5}, //LA19
     50     {0, SW11_CS5,   SW10_CS5,   SW12_CS5}, //LA20
     51     {0, SW2_CS6,   SW1_CS6,   SW3_CS6}, //LA21
     52     {0, SW5_CS6,   SW4_CS6,   SW6_CS6}, //LA22
     53     {0, SW8_CS6,   SW7_CS6,   SW9_CS6}, //LA23
     54     {0, SW11_CS6,   SW10_CS6,   SW12_CS6}, //LA24
     55     {0, SW2_CS7,   SW1_CS7,   SW3_CS7}, //LA25
     56     {0, SW5_CS7,   SW4_CS7,   SW6_CS7}, //LA26
     57     {0, SW8_CS7,   SW7_CS7,   SW9_CS7}, //LA27
     58     {0, SW11_CS7,   SW10_CS7,   SW12_CS7}, //LA28
     59     {0, SW2_CS8,   SW1_CS8,   SW3_CS8}, //LA29
     60     {0, SW5_CS8,   SW4_CS8,   SW6_CS8}, //LA30
     61     {0, SW8_CS8,   SW7_CS8,   SW9_CS8}, //LA31
     62     {0, SW11_CS8,   SW10_CS8,   SW12_CS8}, //LA32
     63     {0, SW2_CS9,   SW1_CS9,   SW3_CS9}, //LA33
     64     {0, SW5_CS9,   SW4_CS9,   SW6_CS9}, //LA34
     65     {0, SW8_CS9,   SW7_CS9,   SW9_CS9}, //LA35
     66     {0, SW11_CS9,   SW10_CS9,   SW12_CS9}, //LA36
     67     {0, SW2_CS10,  SW1_CS10,  SW3_CS10}, //LA37
     68     {0, SW5_CS10,  SW4_CS10,  SW6_CS10}, //LA38
     69     {0, SW8_CS10,  SW7_CS10,  SW9_CS10}, //LA39
     70     {0, SW11_CS10,  SW10_CS10,  SW12_CS10}, //LA40
     71     {0, SW2_CS11,  SW1_CS11,  SW3_CS11}, //LA41
     72     {0, SW5_CS11,  SW4_CS11,  SW6_CS11}, //LA42
     73     {0, SW8_CS11,  SW7_CS11,  SW9_CS11}, //LA43
     74     {0, SW11_CS11,  SW10_CS11,  SW12_CS11}, //LA44
     75     {0, SW2_CS12,  SW1_CS12,  SW3_CS12}, //LA45
     76     {0, SW5_CS12,  SW4_CS12,  SW6_CS12}, //LA46
     77     {0, SW8_CS12,  SW7_CS12,  SW9_CS12}, //LA47
     78     {0, SW11_CS12,  SW10_CS12,  SW12_CS12}, //LA48
     79     {0, SW2_CS13,  SW1_CS13,  SW3_CS13}, //LA49
     80     {0, SW5_CS13,  SW4_CS13,  SW6_CS13}, //LA50
     81     {0, SW8_CS13,  SW7_CS13,  SW9_CS13}, //LA51
     82     {0, SW11_CS13,  SW10_CS13,  SW12_CS13}, //LA52
     83     {0, SW2_CS14,  SW1_CS14,  SW3_CS14}, //LA53
     84     {0, SW5_CS14,  SW4_CS14,  SW6_CS14}, //LA54
     85     {0, SW8_CS14,  SW7_CS14,  SW9_CS14}, //LA55
     86     {0, SW11_CS14,  SW10_CS14,  SW12_CS14}, //LA56
     87     {0, SW2_CS15,  SW1_CS15,  SW3_CS15}, //LA57
     88     {0, SW5_CS15,  SW4_CS15,  SW6_CS15}, //LA58
     89     {0, SW8_CS15,  SW7_CS15,  SW9_CS15}, //LA59
     90     {0, SW11_CS15,  SW10_CS15,  SW12_CS15}, //LA60
     91     {0, SW2_CS16,  SW1_CS16,  SW3_CS16}, //LA61
     92     {0, SW5_CS16,  SW4_CS16,  SW6_CS16}, //LA62
     93     {0, SW8_CS16,  SW7_CS16,  SW9_CS16}, //LA63
     94     {0, SW11_CS16,  SW10_CS16,  SW12_CS16}, //LA64
     95 
     96     {1, SW2_CS1,   SW1_CS1,   SW3_CS1}, //LB1
     97     {1, SW5_CS1,   SW4_CS1,   SW6_CS1}, //LB2
     98     {1, SW8_CS1,   SW7_CS1,   SW9_CS1}, //LB3
     99     {1, SW11_CS1,   SW10_CS1,   SW12_CS1}, //LB4
    100     {1, SW2_CS2,   SW1_CS2,   SW3_CS2}, //LB5
    101     {1, SW5_CS2,   SW4_CS2,   SW6_CS2}, //LB6
    102     {1, SW8_CS2,   SW7_CS2,   SW9_CS2}, //LB7
    103     {1, SW11_CS2,   SW10_CS2,   SW12_CS2}, //LB8
    104     {1, SW2_CS3,   SW1_CS3,   SW3_CS3}, //LB9
    105     {1, SW5_CS3,   SW4_CS3,   SW6_CS3}, //LB10
    106     {1, SW8_CS3,   SW7_CS3,   SW9_CS3}, //LB11
    107     {1, SW11_CS3,   SW10_CS3,   SW12_CS3}, //LB12
    108     {1, SW2_CS4,   SW1_CS4,   SW3_CS4}, //LB13
    109     {1, SW5_CS4,   SW4_CS4,   SW6_CS4}, //LB14
    110     {1, SW8_CS4,   SW7_CS4,   SW9_CS4}, //LB15
    111     {1, SW11_CS4,   SW10_CS4,   SW12_CS4}, //LB16
    112     {1, SW2_CS5,   SW1_CS5,   SW3_CS5}, //LB17
    113     {1, SW5_CS5,   SW4_CS5,   SW6_CS5}, //LB18
    114     {1, SW8_CS5,   SW7_CS5,   SW9_CS5}, //LB19
    115     {1, SW11_CS5,   SW10_CS5,   SW12_CS5}, //LB20
    116     {1, SW2_CS6,   SW1_CS6,   SW3_CS6}, //LB21
    117     {1, SW5_CS6,   SW4_CS6,   SW6_CS6}, //LB22
    118     {1, SW8_CS6,   SW7_CS6,   SW9_CS6}, //LB23
    119     {1, SW11_CS6,   SW10_CS6,   SW12_CS6}, //LB24
    120     {1, SW2_CS7,   SW1_CS7,   SW3_CS7}, //LB25
    121     {1, SW5_CS7,   SW4_CS7,   SW6_CS7}, //LB26
    122     {1, SW8_CS7,   SW7_CS7,   SW9_CS7}, //LB27
    123     {1, SW11_CS7,   SW10_CS7,   SW12_CS7}, //LB28
    124     {1, SW2_CS8,   SW1_CS8,   SW3_CS8}, //LB29
    125     {1, SW5_CS8,   SW4_CS8,   SW6_CS8}, //LB30
    126     {1, SW8_CS8,   SW7_CS8,   SW9_CS8}, //LB31
    127     {1, SW11_CS8,   SW10_CS8,   SW12_CS8}, //LB32
    128     {1, SW2_CS9,   SW1_CS9,   SW3_CS9}, //LB33
    129     {1, SW5_CS9,   SW4_CS9,   SW6_CS9}, //LB34
    130     {1, SW8_CS9,   SW7_CS9,   SW9_CS9}, //LB35
    131     {1, SW11_CS9,   SW10_CS9,   SW12_CS9}, //LB36
    132     {1, SW2_CS10,  SW1_CS10,  SW3_CS10}, //LB37
    133     {1, SW5_CS10,  SW4_CS10,  SW6_CS10}, //LB38
    134     {1, SW8_CS10,  SW7_CS10,  SW9_CS10}, //LB39
    135     {1, SW11_CS10,  SW10_CS10,  SW12_CS10}, //LB40
    136     {1, SW2_CS11,  SW1_CS11,  SW3_CS11}, //LB41
    137     {1, SW5_CS11,  SW4_CS11,  SW6_CS11}, //LB42
    138     {1, SW8_CS11,  SW7_CS11,  SW9_CS11}, //LB43
    139     {1, SW11_CS11,  SW10_CS11,  SW12_CS11}, //LB44
    140     {1, SW2_CS12,  SW1_CS12,  SW3_CS12}, //LB45
    141     {1, SW5_CS12,  SW4_CS12,  SW6_CS12}, //LB46
    142     {1, SW8_CS12,  SW7_CS12,  SW9_CS12}, //LB47
    143     {1, SW11_CS12,  SW10_CS12,  SW12_CS12}, //LB48
    144     {1, SW2_CS13,  SW1_CS13,  SW3_CS13}, //LB49
    145     {1, SW5_CS13,  SW4_CS13,  SW6_CS13}, //LB50
    146     {1, SW8_CS13,  SW7_CS13,  SW9_CS13}, //LB51
    147     {1, SW11_CS13,  SW10_CS13,  SW12_CS13}, //LB52
    148     {1, SW2_CS14,  SW1_CS14,  SW3_CS14}, //LB53
    149     {1, SW5_CS14,  SW4_CS14,  SW6_CS14}, //LB54
    150     {1, SW8_CS14,  SW7_CS14,  SW9_CS14}, //LB55
    151     {1, SW11_CS14,  SW10_CS14,  SW12_CS14}, //LB56
    152     {1, SW2_CS15,  SW1_CS15,  SW3_CS15}, //LB57
    153     {1, SW5_CS15,  SW4_CS15,  SW6_CS15}, //LB58
    154     {1, SW8_CS15,  SW7_CS15,  SW9_CS15}, //LB59
    155     {1, SW11_CS15,  SW10_CS15,  SW12_CS15}, //LB60
    156     {1, SW2_CS16,  SW1_CS16,  SW3_CS16}, //LB61
    157     {1, SW5_CS16,  SW4_CS16,  SW6_CS16}, //LB62
    158     {1, SW8_CS16,  SW7_CS16,  SW9_CS16}, //LB63
    159     {1, SW11_CS16,  SW10_CS16,  SW12_CS16}, //LB64
    160 };
    161 #endif
    162 
    163 /* Indicator LEDS are part of the LED driver
    164  * Top LED is blue only. LED driver 2 RGB 63 Blue channel
    165  * Middle LED is blue and red. LED driver 2 RGB 63 Red and Green channel
    166  * Bottom LED is red only LED driver 2 RGB 48 Blue channel.
    167  */
    168 uint8_t CAPS = 0;
    169 uint8_t FN1 = 0;
    170 uint8_t FN2 = 0;
    171 
    172 bool led_update_kb(led_t led_state) {
    173     bool res = led_update_user(led_state);
    174     if(res) {
    175         if (led_state.caps_lock) {
    176             CAPS = 255;
    177         } else {
    178             CAPS = 0;
    179         }
    180     }
    181     is31fl3733_set_color( 63+64-1, FN1, FN1, CAPS );
    182     is31fl3733_set_color( 48+64-1, 0, 0, FN2 );
    183     return res;
    184 }
    185 
    186 __attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
    187     if (state & (1UL << 1)) {
    188         FN1 = 255;
    189     } else {
    190         FN1 = 0;
    191     }
    192     if (state & (1UL << 2)) {
    193         FN2 = 255;
    194     } else {
    195         FN2 = 0;
    196     }
    197   return state;
    198 }