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