qmk_firmware

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

rev1_qmk.c (6485B)


      1 /* Copyright 2017 Jason Williams (Wilba)
      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 
     17 #include "quantum.h"
     18 
     19 #include "i2c_master.h"
     20 #include "led_tables.h"
     21 #include "rgb_matrix.h"
     22 #include "drivers/led/issi/is31fl3731.h"
     23 #include "ws2812.h"
     24 
     25 #ifdef RGB_MATRIX_ENABLE
     26 const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {
     27 /* Refer to IS31 manual for these locations
     28  *   driver
     29  *   |  R location
     30  *   |  |      G location
     31  *   |  |      |      B location
     32  *   |  |      |      | */
     33     {0, C1_1,   C3_2,   C4_2}, //A1
     34     {0, C1_2,   C2_2,   C4_3}, //A2
     35     {0, C1_3,   C2_3,   C3_3}, //A3
     36     {0, C1_4,   C2_4,   C3_4}, //A4
     37     {0, C1_5,   C2_5,   C3_5}, //A5
     38     {0, C1_6,   C2_6,   C3_6}, //A6
     39     {0, C1_7,   C2_7,   C3_7}, //A7
     40     {0, C1_8,   C2_8,   C3_8}, //A8
     41     {0, C9_1,   C8_1,   C7_1}, //A9
     42     {0, C9_2,   C8_2,   C7_2}, //A10
     43     {0, C9_3,   C8_3,   C7_3}, //A11
     44     {0, C9_4,   C8_4,   C7_4}, //A12
     45     {0, C9_5,   C8_5,   C7_5}, //A13
     46     {0, C9_6,   C8_6,   C7_6}, //A14
     47     {0, C9_7,   C8_7,   C6_6}, //A15
     48     {0, C9_8,   C7_7,   C6_7}, //A16
     49 
     50     {0, C1_9,   C3_10,  C4_10}, //B1
     51     {0, C1_10,  C2_10,  C4_11}, //B2
     52     {0, C1_11,  C2_11,  C3_11}, //B3
     53     {0, C1_12,  C2_12,  C3_12}, //B4
     54     {0, C1_13,  C2_13,  C3_13}, //B5
     55     {0, C1_14,  C2_14,  C3_14}, //B6
     56     {0, C1_15,  C2_15,  C3_15}, //B7
     57     {0, C1_16,  C2_16,  C3_16}, //B8
     58     {0, C9_9,   C8_9,   C7_9},  //B9
     59     {0, C9_10,  C8_10,  C7_10}, //B10
     60     {0, C9_11,  C8_11,  C7_11}, //B11
     61     {0, C9_12,  C8_12,  C7_12}, //B12
     62     {0, C9_13,  C8_13,  C7_13}, //B13
     63     {0, C9_14,  C8_14,  C7_14}, //B14
     64     {0, C9_15,  C8_15,  C6_14}, //B15
     65     {0, C9_16,  C7_15,  C6_15}, //B16
     66 
     67     {1, C1_1,   C3_2,   C4_2}, //C1
     68     {1, C1_2,   C2_2,   C4_3}, //C2
     69     {1, C1_3,   C2_3,   C3_3}, //C3
     70     {1, C1_4,   C2_4,   C3_4}, //C4
     71     {1, C1_5,   C2_5,   C3_5}, //C5
     72     {1, C1_6,   C2_6,   C3_6}, //C6
     73     {1, C1_7,   C2_7,   C3_7}, //C7
     74     {1, C1_8,   C2_8,   C3_8}, //C8
     75     {1, C9_1,   C8_1,   C7_1}, //C9
     76     {1, C9_2,   C8_2,   C7_2}, //C10
     77     {1, C9_3,   C8_3,   C7_3}, //C11
     78     {1, C9_4,   C8_4,   C7_4}, //C12
     79     {1, C9_5,   C8_5,   C7_5}, //C13
     80     {1, C9_6,   C8_6,   C7_6}, //C14
     81     {1, C9_7,   C8_7,   C6_6}, //C15
     82     {1, C9_8,   C7_7,   C6_7}, //C16
     83 
     84     {1, C1_9,   C3_10,  C4_10}, //D1
     85     {1, C1_10,  C2_10,  C4_11}, //D2
     86     {1, C1_11,  C2_11,  C3_11}, //D3
     87     {1, C1_12,  C2_12,  C3_12}, //D4
     88     {1, C1_13,  C2_13,  C3_13}, //D5
     89     {1, C1_14,  C2_14,  C3_14}, //D6
     90     {1, C1_15,  C2_15,  C3_15}, //D7
     91     {1, C1_16,  C2_16,  C3_16}, //D8
     92     {1, C9_9,    C8_9,   C7_9},  //D9
     93     {1, C9_10,  C8_10,  C7_10}, //D10
     94     {1, C9_11,  C8_11,  C7_11}, //D11
     95     {1, C9_12,  C8_12,  C7_12}, //D12
     96     {1, C9_13,  C8_13,  C7_13}, //D13
     97     {1, C9_14,  C8_14,  C7_14}, //D14
     98     {1, C9_15,  C8_15,  C6_14}, //D15
     99     {1, C9_16,  C7_15,  C6_15}, //D16
    100 };
    101 
    102 __attribute__ ((weak))
    103 led_config_t g_led_config = { {
    104     { 15, 14, 13,     12,     11, 10,      9,      8,     16, 17,     18, 19, 20, 21 },
    105     {  6,  5,  4,      3,      2,  1,      0,     24,     25, 26,     27, 28, 29, 30 },
    106     {  7, 45, 44,     43,     42, 41,     40,     48,     49, 50,     51, 52, 23, 22 },
    107     { 46, 36, 35,     34,     33, 32,     56,     57,     58, 59, NO_LED, 53, 54, 31 },
    108     { 47, 39, 38, NO_LED, NO_LED, 37, NO_LED, NO_LED, NO_LED, 60,     61, 62, 63, 55 }
    109 }, {
    110     // LA1..LA16
    111     {104, 16}, {88 , 16}, {72 , 16}, {56 , 16}, {40 , 16}, {24 , 16}, {4  , 16}, {6  , 32},
    112     {112,  0}, {96 ,  0}, {80 ,  0}, {64 ,  0}, {48 ,  0}, {32 ,  0}, {16 ,  0}, {0  ,  0},
    113 
    114     // LB1..LB16
    115     {128,  0}, {144,  0}, {160,  0}, {176,  0}, {192,  0}, {208,  0}, {224,  0}, {214, 32},
    116     {120, 16}, {136, 16}, {152, 16}, {168, 16}, {184, 16}, {200, 16}, {220, 16}, {224, 48},
    117 
    118     // LC1..LC16
    119     {100, 48}, {84 , 48}, {68 , 48}, {52 , 48}, {36 , 48}, {102, 64}, {42 , 64}, {22 , 64},
    120     {108, 32}, {92 , 32}, {76 , 32}, {60 , 32}, {44 , 32}, {28 , 32}, {10 , 48}, {2  , 64},
    121 
    122     // LD1..LD16
    123     {124, 32}, {140, 32}, {156, 32}, {172, 32}, {188, 32}, {180, 48}, {202, 48}, {224, 64},
    124     {116, 48}, {132, 48}, {148, 48}, {164, 48}, {160, 64},  {176, 64}, {192, 64}, {208, 64},
    125 
    126     //RGB UNDERGLOW
    127     {27 , 3}, {64 , 3}, {100, 3}, {137, 3}, {173, 3}, {209, 3}, {242, 4}, {255, 8}, {255,32}, {255,64},
    128     {241,64}, {212,64}, {173,64}, {137,64}, {100,64}, {63 ,64}, {28 ,64}, {0  ,64}, {0  ,32}, {0  , 8} //20
    129 }, {
    130     4, 4, 4, 4, 4, 4, 1, 1,
    131     4, 4, 4, 4, 4, 4, 4, 1,
    132     4, 4, 4, 4, 4, 4, 1, 1,
    133     4, 4, 4, 4, 4, 4, 1, 1,
    134     4, 4, 4, 4, 4, 4, 1, 1,
    135     4, 4, 4, 4, 4, 4, 1, 1,
    136     4, 4, 4, 4, 4, 1, 1, 1,
    137     4, 4, 4, 4, 1, 1, 1, 4,
    138 
    139     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    140     3, 3, 3, 3, 3, 3, 3, 3, 3, 3
    141 } };
    142 
    143 //Custom Driver
    144 static void init(void) {
    145     i2c_init();
    146     is31fl3731_init(0);
    147     is31fl3731_init(1);
    148     for (int index = 0; index < IS31FL3731_LED_COUNT; index++) {
    149         bool enabled = true;
    150         is31fl3731_set_led_control_register(index, enabled, enabled, enabled);
    151     }
    152     is31fl3731_update_led_control_registers(0);
    153     is31fl3731_update_led_control_registers(1);
    154     
    155     //RGB Underglow ws2812
    156     ws2812_init();
    157 }
    158 
    159 static void flush(void) {
    160     is31fl3731_update_pwm_buffers(0);
    161     is31fl3731_update_pwm_buffers(1);
    162     ws2812_flush();
    163 }
    164 
    165 static void set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
    166     if (index < IS31FL3731_LED_COUNT) {
    167         is31fl3731_set_color(index, red, green, blue);
    168     } else {
    169         ws2812_set_color(index - IS31FL3731_LED_COUNT, red, green, blue);
    170     }
    171 }
    172 
    173 static void set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
    174     is31fl3731_set_color_all( red, green, blue );
    175     ws2812_set_color_all( red, green, blue );
    176 }
    177 
    178 
    179 const rgb_matrix_driver_t rgb_matrix_driver = {
    180     .init = init,
    181     .flush = flush,
    182     .set_color = set_color,
    183     .set_color_all = set_color_all
    184 };
    185 
    186 #endif