/* Copyright 2021 Glorious, LLC <salman@pcgamingrace.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"

#ifdef RGB_MATRIX_ENABLE

const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
 *   driver
 *   |     R location
 *   |     |          G location
 *   |     |          |          B location
 *   |     |          |          | */
    {0, CS1_SW1,   CS2_SW1,   CS3_SW1  },  //  0  Esc
    {0, CS4_SW2,   CS5_SW2,   CS6_SW2  },  //  1  1
    {0, CS4_SW3,   CS5_SW3,   CS6_SW3  },  //  2  2
    {0, CS4_SW4,   CS5_SW4,   CS6_SW4  },  //  3  3
    {0, CS4_SW5,   CS5_SW5,   CS6_SW5  },  //  4  4
    {0, CS4_SW6,   CS5_SW6,   CS6_SW6  },  //  5  5
    {0, CS4_SW7,   CS5_SW7,   CS6_SW7  },  //  6  6
    {0, CS4_SW8,   CS5_SW8,   CS6_SW8  },  //  7  7
    {0, CS4_SW9,   CS5_SW9,   CS6_SW9  },  //  8  8
    {0, CS4_SW10,  CS5_SW10,  CS6_SW10 },  //  9  9
    {0, CS4_SW11,  CS5_SW11,  CS6_SW11 },  //  10 0
    {0, CS4_SW12,  CS5_SW12,  CS6_SW12 },  //  11 -
    {1, CS1_SW5,   CS2_SW5,   CS3_SW5  },  //  12 =
    {1, CS1_SW7,   CS2_SW7,   CS3_SW7  },  //  13 Backspace
    {1, CS4_SW4,   CS5_SW4,   CS6_SW4  },  //  14 Del

    {0, CS7_SW1,   CS8_SW1,   CS9_SW1  },  //  15 Tab
    {0, CS7_SW2,   CS8_SW2,   CS9_SW2  },  //  16 Q
    {0, CS7_SW3,   CS8_SW3,   CS9_SW3  },  //  17 W
    {0, CS7_SW4,   CS8_SW4,   CS9_SW4  },  //  18 E
    {0, CS7_SW5,   CS8_SW5,   CS9_SW5  },  //  19 R
    {0, CS7_SW6,   CS8_SW6,   CS9_SW6  },  //  20 T
    {0, CS7_SW7,   CS8_SW7,   CS9_SW7  },  //  21 Y
    {0, CS7_SW8,   CS8_SW8,   CS9_SW8  },  //  22 U
    {0, CS7_SW9,   CS8_SW9,   CS9_SW9  },  //  23 I
    {0, CS7_SW10,  CS8_SW10,  CS9_SW10 },  //  24 O
    {0, CS7_SW11,  CS8_SW11,  CS9_SW11 },  //  25 P
    {0, CS7_SW12,  CS8_SW12,  CS9_SW12 },  //  26 [
    {1, CS1_SW8,   CS2_SW8,   CS3_SW8  },  //  27 ]
    {1, CS1_SW9,   CS2_SW9,   CS3_SW9  },  //  28 \|
    {1, CS4_SW7,   CS5_SW7,   CS6_SW7  },  //  29 PgUp

    {0, CS10_SW1,  CS11_SW1,  CS12_SW1 },  //  30 Caps Lock
    {0, CS10_SW2,  CS11_SW2,  CS12_SW2 },  //  31 A
    {0, CS10_SW3,  CS11_SW3,  CS12_SW3 },  //  32 S
    {0, CS10_SW4,  CS11_SW4,  CS12_SW4 },  //  33 D
    {0, CS10_SW5,  CS11_SW5,  CS12_SW5 },  //  34 F
    {0, CS10_SW6,  CS11_SW6,  CS12_SW6 },  //  35 G
    {0, CS10_SW7,  CS11_SW7,  CS12_SW7 },  //  36 H
    {0, CS10_SW8,  CS11_SW8,  CS12_SW8 },  //  37 J
    {0, CS10_SW9,  CS11_SW9,  CS12_SW9 },  //  38 K
    {0, CS10_SW10, CS11_SW10, CS12_SW10},  //  39 L
    {0, CS10_SW11, CS11_SW11, CS12_SW11},  //  40 ;
    {0, CS10_SW12, CS11_SW12, CS12_SW12},  //  41 '
    {1, CS1_SW11,  CS2_SW11,  CS3_SW11 },  //  42 Enter
    {1, CS4_SW5,   CS5_SW5,   CS6_SW5  },  //  43 PgDn

    {0, CS13_SW1,  CS14_SW1,  CS15_SW1 },  //  44 Shift_L
    {0, CS13_SW3,  CS14_SW3,  CS15_SW3 },  //  45 Z
    {0, CS13_SW4,  CS14_SW4,  CS15_SW4 },  //  46 X
    {0, CS13_SW5,  CS14_SW5,  CS15_SW5 },  //  47 C
    {0, CS13_SW6,  CS14_SW6,  CS15_SW6 },  //  48 V
    {0, CS13_SW7,  CS14_SW7,  CS15_SW7 },  //  49 B
    {0, CS13_SW8,  CS14_SW8,  CS15_SW8 },  //  50 N
    {0, CS13_SW9,  CS14_SW9,  CS15_SW9 },  //  51 M
    {0, CS13_SW10, CS14_SW10, CS15_SW10},  //  52 ,
    {0, CS13_SW11, CS14_SW11, CS15_SW11},  //  53 .
    {0, CS13_SW12, CS14_SW12, CS15_SW12},  //  54 /
    {1, CS4_SW8,   CS5_SW8,   CS6_SW8  },  //  55 Shift_R
    {1, CS4_SW9,   CS5_SW9,   CS6_SW9  },  //  56 Up
    {1, CS4_SW6,   CS5_SW6,   CS6_SW6  },  //  57 END

    {0, CS16_SW1,  CS17_SW1,  CS18_SW1 },  //  58 Ctrl_L
    {0, CS16_SW2,  CS17_SW2,  CS18_SW2 },  //  59 Win_L
    {0, CS16_SW3,  CS17_SW3,  CS18_SW3 },  //  60 Alt_L
    {0, CS16_SW6,  CS17_SW6,  CS18_SW6 },  //  61 Space
    {0, CS16_SW9,  CS17_SW9,  CS18_SW9 },  //  62 Alt_R
    {0, CS16_SW10, CS17_SW10, CS18_SW10},  //  63 FN
    {1, CS4_SW10,  CS5_SW10,  CS6_SW10 },  //  64 Left
    {1, CS4_SW11,  CS5_SW11,  CS6_SW11 },  //  65 Down
    {1, CS4_SW12,  CS5_SW12,  CS6_SW12 },  //  66 Right

    {1, CS13_SW1,  CS14_SW1,  CS15_SW1 },  //  69 LED 1
    {1, CS13_SW2,  CS14_SW2,  CS15_SW2 },  //  70 LED 2
    {1, CS13_SW3,  CS14_SW3,  CS15_SW3 },  //  71 LED 3
    {1, CS13_SW4,  CS14_SW4,  CS15_SW4 },  //  72 LED 4
    {1, CS13_SW5,  CS14_SW5,  CS15_SW5 },  //  73 LED 5
    {1, CS13_SW6,  CS14_SW6,  CS15_SW6 },  //  74 LED 6
    {1, CS13_SW7,  CS14_SW7,  CS15_SW7 },  //  75 LED 7
    {1, CS13_SW8,  CS14_SW8,  CS15_SW8 },  //  76 LED 8
    {1, CS13_SW9,  CS14_SW9,  CS15_SW9 },  //  77 LED 9
    {1, CS13_SW10, CS14_SW10, CS15_SW10},  //  78 LED 10
    {1, CS16_SW1,  CS17_SW1,  CS18_SW1 },  //  79 LED 11
    {1, CS16_SW2,  CS17_SW2,  CS18_SW2 },  //  80 LED 12
    {1, CS16_SW3,  CS17_SW3,  CS18_SW3 },  //  81 LED 13
    {1, CS16_SW4,  CS17_SW4,  CS18_SW4 },  //  82 LED 14
    {1, CS16_SW5,  CS17_SW5,  CS18_SW5 },  //  83 LED 15
    {1, CS16_SW6,  CS17_SW6,  CS18_SW6 },  //  84 LED 16
    {1, CS16_SW7,  CS17_SW7,  CS18_SW7 },  //  85 LED 17
    {1, CS16_SW8,  CS17_SW8,  CS18_SW8 },  //  86 LED 18
    {1, CS16_SW9,  CS17_SW9,  CS18_SW9 },  //  87 LED 19
    {1, CS16_SW10, CS17_SW10, CS18_SW10}   //  88 LED 20
};

#define __ NO_LED

led_config_t g_led_config = {{
    { 44, 57, __, 64, __, 66, 58, 55},
    { 16, 15, 31,  0, 45, 59, __,  1},
    { 17, 30, 32, 60, 46, 14, 29,  2},
    { 18, 61, 33, 63, 47, 56, 62,  3},
    { 19, 20, 34, 35, 48, 49,  5,  4},
    { 22, 21, 37, 36, 51, 50,  6,  7},
    { 23, 27, 38, __, 52, 43, 12,  8},
    { 24, 13, 39, 65, 53, __, 28,  9},
    { 25, 26, 40, 41, 42, 54, 11, 10}
}, {
    {14,  0 }, //  0  Esc
    {28,  0 }, //  1  1
    {42,  0 }, //  2  2
    {56,  0 }, //  3  3
    {70,  0 }, //  4  4
    {84,  0 }, //  5  5
    {98,  0 }, //  6  6
    {112, 0 }, //  7  7
    {126, 0 }, //  8  8
    {140, 0 }, //  9  9
    {154, 0 }, //  10 0
    {168, 0 }, //  11 -
    {182, 0 }, //  12 =
    {196, 0 }, //  13 Backspace
    {210, 0 }, //  14 Del

    {14,  16}, //  15 Tab
    {28,  16}, //  16 Q
    {42,  16}, //  17 W
    {56,  16}, //  18 E
    {70,  16}, //  19 R
    {84,  16}, //  20 T
    {98,  16}, //  21 Y
    {112, 16}, //  22 U
    {126, 16}, //  23 I
    {140, 16}, //  24 O
    {154, 16}, //  25 P
    {168, 16}, //  26 [
    {182, 16}, //  27 ]
    {196, 16}, //  28 \|
    {210, 16}, //  29 PgUp

    {14,  32}, //  30 Caps Lock
    {28,  32}, //  31 A
    {42,  32}, //  32 S
    {56,  32}, //  33 D
    {70,  32}, //  34 F
    {84,  32}, //  35 G
    {98,  32}, //  36 H
    {112, 32}, //  37 J
    {126, 32}, //  38 K
    {140, 32}, //  39 L
    {154, 32}, //  40 ;
    {168, 32}, //  41 '
    {196, 32}, //  42 Enter
    {210, 32}, //  43 PgDn

    {14,  48}, //  44 Shift_L
    {42,  48}, //  45 Z
    {56,  48}, //  46 X
    {70,  48}, //  47 C
    {84,  48}, //  48 V
    {98,  48}, //  49 B
    {112, 48}, //  50 N
    {126, 48}, //  51 M
    {140, 48}, //  52 ,
    {154, 48}, //  53 .
    {168, 48}, //  54 /
    {182, 48}, //  55 Shift_R
    {196, 48}, //  56 Up
    {210, 48}, //  57 END

    {14,  64}, //  58 Ctrl_L
    {28,  64}, //  59 Win_L
    {42,  64}, //  60 Alt_L
    {84,  64}, //  61 Space
    {126, 64}, //  62 Alt_R
    {140, 64}, //  63 FN
    {182, 64}, //  64 Left
    {196, 64}, //  65 Down
    {210, 64}, //  66 Right

    {0,   0},  //  69 LED 1
    {0,   7},  //  70 LED 2
    {0,   14}, //  71 LED 3
    {0,   21}, //  72 LED 4
    {0,   28}, //  73 LED 5
    {0,   35}, //  74 LED 6
    {0,   42}, //  75 LED 7
    {0,   49}, //  76 LED 8
    {0,   56}, //  77 LED 9
    {0,   64}, //  78 LED 10
    {224, 0 }, //  79 LED 11
    {224, 7 }, //  80 LED 12
    {224, 14}, //  81 LED 13
    {224, 21}, //  82 LED 14
    {224, 28}, //  83 LED 15
    {224, 35}, //  84 LED 16
    {224, 42}, //  85 LED 17
    {224, 49}, //  86 LED 18
    {224, 56}, //  87 LED 19
    {224, 64}, //  88 LED 20
}, {
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    4, 4, 4, 4, 4, 4, 4, 4, 4,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2
} };
#endif