qmk_firmware

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

ansi.c (8223B)


      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_KW_MEGA
     17 #error RGB_BACKLIGHT_KW_MEGA not defined, recheck config.h
     18 #endif
     19 
     20 #include "ansi.h"
     21 #include "drivers/led/issi/is31fl3733.h"
     22 
     23 #if defined(RGB_MATRIX_ENABLE) || defined(RGB_BACKLIGHT_KW_MEGA)
     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 uint8_t R = 0;
    164 uint8_t G = 0;
    165 uint8_t B = 0;
    166 
    167 /* Indicator LEDs are part of the LED driver
    168  * Here the LEDs are used to indicate layers 1, 2 and 3.
    169  * Below there is a commented out example of how to use the indicators for capslock.
    170  */
    171 // bool led_update_kb(led_t led_state) {
    172 //     bool res = led_update_user(led_state);
    173 //     if(res) {
    174 //         if (led_state.caps_lock) {
    175 //             G = 255;
    176 //         } else {
    177 //             G = 0;
    178 //         }
    179 //         is31fl3733_set_color( 6+64-1, R, G, B );
    180 //     }
    181 //     return res;
    182 // }
    183 
    184 __attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
    185     R = 0;
    186     G = 0;
    187     B = 0;
    188     if (IS_LAYER_ON_STATE(layer_state, 1)) {
    189         G = 255;
    190     }
    191     if (IS_LAYER_ON_STATE(layer_state, 2)) {
    192         R = 255;
    193     }
    194     if (IS_LAYER_ON_STATE(layer_state, 3)) {
    195         B = 255;
    196     }
    197     is31fl3733_set_color( 6+64-1, R, G, B );
    198   return state;
    199 }