v3.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /* Copyright 2021 DZTECH <moyi4681@live.cn>
  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. #include "v3.h"
  17. #ifdef RGB_MATRIX_ENABLE
  18. const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
  19. {0, CS21_SW1, CS20_SW1, CS19_SW1},
  20. {0, CS21_SW2, CS20_SW2, CS19_SW2},
  21. {0, CS21_SW3, CS20_SW3, CS19_SW3},
  22. {0, CS21_SW4, CS20_SW4, CS19_SW4},
  23. {0, CS21_SW5, CS20_SW5, CS19_SW5},
  24. {0, CS21_SW6, CS20_SW6, CS19_SW6},
  25. {0, CS21_SW7, CS20_SW7, CS19_SW7},
  26. {0, CS21_SW8, CS20_SW8, CS19_SW8},
  27. {0, CS24_SW1, CS23_SW1, CS22_SW1},
  28. {0, CS24_SW2, CS23_SW2, CS22_SW2},
  29. {0, CS24_SW3, CS23_SW3, CS22_SW3},
  30. {0, CS24_SW4, CS23_SW4, CS22_SW4},
  31. {0, CS24_SW5, CS23_SW5, CS22_SW5},
  32. {0, CS24_SW6, CS23_SW6, CS22_SW6},
  33. {0, CS24_SW7, CS23_SW7, CS22_SW7},
  34. {0, CS15_SW1, CS14_SW1, CS13_SW1},
  35. {0, CS15_SW2, CS14_SW2, CS13_SW2},
  36. {0, CS15_SW3, CS14_SW3, CS13_SW3},
  37. {0, CS15_SW4, CS14_SW4, CS13_SW4},
  38. {0, CS15_SW5, CS14_SW5, CS13_SW5},
  39. {0, CS15_SW6, CS14_SW6, CS13_SW6},
  40. {0, CS15_SW7, CS14_SW7, CS13_SW7},
  41. {0, CS15_SW8, CS14_SW8, CS13_SW8},
  42. {0, CS30_SW1, CS29_SW1, CS28_SW1},
  43. {0, CS30_SW2, CS29_SW2, CS28_SW2},
  44. {0, CS30_SW3, CS29_SW3, CS28_SW3},
  45. {0, CS30_SW4, CS29_SW4, CS28_SW4},
  46. {0, CS30_SW5, CS29_SW5, CS28_SW5},
  47. {0, CS30_SW6, CS29_SW6, CS28_SW6},
  48. {0, CS30_SW7, CS29_SW7, CS28_SW7},
  49. {0, CS12_SW1, CS11_SW1, CS10_SW1},
  50. {0, CS12_SW2, CS11_SW2, CS10_SW2},
  51. {0, CS12_SW3, CS11_SW3, CS10_SW3},
  52. {0, CS12_SW4, CS11_SW4, CS10_SW4},
  53. {0, CS12_SW5, CS11_SW5, CS10_SW5},
  54. {0, CS12_SW6, CS11_SW6, CS10_SW6},
  55. {0, CS12_SW7, CS11_SW7, CS10_SW7},
  56. {0, CS12_SW8, CS11_SW8, CS10_SW8},
  57. {0, CS33_SW1, CS32_SW1, CS31_SW1},
  58. {0, CS33_SW2, CS32_SW2, CS31_SW2},
  59. {0, CS33_SW3, CS32_SW3, CS31_SW3},
  60. {0, CS33_SW4, CS32_SW4, CS31_SW4},
  61. {0, CS33_SW5, CS32_SW5, CS31_SW5},
  62. {0, CS33_SW7, CS32_SW7, CS31_SW7},
  63. {0, CS9_SW1, CS8_SW1, CS7_SW1},
  64. {0, CS9_SW2, CS8_SW2, CS7_SW2},
  65. {0, CS9_SW3, CS8_SW3, CS7_SW3},
  66. {0, CS9_SW4, CS8_SW4, CS7_SW4},
  67. {0, CS9_SW5, CS8_SW5, CS7_SW5},
  68. {0, CS9_SW6, CS8_SW6, CS7_SW6},
  69. {0, CS9_SW7, CS8_SW7, CS7_SW7},
  70. {0, CS9_SW8, CS8_SW8, CS7_SW8},
  71. {0, CS36_SW1, CS35_SW1, CS34_SW1},
  72. {0, CS36_SW2, CS35_SW2, CS34_SW2},
  73. {0, CS36_SW3, CS35_SW3, CS34_SW3},
  74. {0, CS36_SW4, CS35_SW4, CS34_SW4},
  75. {0, CS36_SW5, CS35_SW5, CS34_SW5},
  76. {0, CS36_SW7, CS35_SW7, CS34_SW7},
  77. {0, CS3_SW1, CS2_SW1, CS1_SW1},
  78. {0, CS3_SW2, CS2_SW2, CS1_SW2},
  79. {0, CS3_SW3, CS2_SW3, CS1_SW3},
  80. {0, CS3_SW6, CS2_SW6, CS1_SW6},
  81. // {0, CS39_SW1, CS38_SW1, CS37_SW1},
  82. {0, CS39_SW2, CS38_SW2, CS37_SW2},
  83. {0, CS39_SW3, CS38_SW3, CS37_SW3},
  84. {0, CS39_SW4, CS38_SW4, CS37_SW4},
  85. {0, CS39_SW5, CS38_SW5, CS37_SW5},
  86. {0, CS39_SW7, CS38_SW7, CS37_SW7}
  87. };
  88. #define __ NO_LED
  89. #define CAPS_LOCK_LED_INDEX 30
  90. led_config_t g_led_config = { {
  91. // Key Matrix to LED Index
  92. { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 },
  93. { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
  94. { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, __, 42, 43 },
  95. { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, 57 },
  96. { 58, 59, 60, __, __, 61, __, __, 62, __, 63, 64, __, 65, 66 }
  97. }, {
  98. // LED Index to Physical Position
  99. // based on: https://gist.github.com/vinorodrigues/07fd735683856b2a06c7c52b9b3878cb
  100. {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {119, 0}, {134, 0}, {149, 0}, {164, 0}, {179, 0}, {202, 0}, {224, 0},
  101. {4, 16}, {22, 16}, {37, 16}, {52, 16}, {67, 16}, {82, 16}, {97, 16}, {112, 16}, {127, 16}, {142, 16}, {157, 16}, {172, 16}, {187, 16}, {205, 16}, {224, 16},
  102. {6, 32}, {26, 32}, {41, 32}, {56, 32}, {71, 32}, {86, 32}, {101, 32}, {116, 32}, {131, 32}, {146, 32}, {161, 32}, {175, 32}, {200, 32}, {224, 32},
  103. {9, 48}, {34, 48}, {49, 48}, {63, 48}, {78, 48}, {93, 48}, {108, 48}, {123, 48}, {138, 48}, {153, 48}, {168, 48}, {189, 48}, {209, 48}, {224, 48},
  104. {2, 64}, {21, 64}, {39, 64}, {95, 64}, {151, 64}, {170, 64}, {194, 64}, {209, 64}, {224, 64}
  105. }, {
  106. // LED Index to Flag
  107. 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
  108. 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
  109. 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // caps lock is also an indicator so mask is `0x01 | 0x08`
  110. 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
  111. 1, 1, 1, 4, 1, 1, 1, 1, 1
  112. } };
  113. #endif
  114. #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
  115. #ifdef RGB_MATRIX_MAXIMUM_BRIGHTNESS
  116. #define CAPS_LOCK_MAX_BRIGHTNESS RGB_MATRIX_MAXIMUM_BRIGHTNESS
  117. #else
  118. #define CAPS_LOCK_MAX_BRIGHTNESS 0xFF
  119. #endif
  120. #ifdef RGB_MATRIX_VAL_STEP
  121. #define CAPS_LOCK_VAL_STEP RGB_MATRIX_VAL_STEP
  122. #else
  123. #define CAPS_LOCK_VAL_STEP 8
  124. #endif
  125. bool rgb_matrix_indicators_kb(void) {
  126. if (!rgb_matrix_indicators_user()) {
  127. return false;
  128. }
  129. if (host_keyboard_led_state().caps_lock) {
  130. uint8_t b = rgb_matrix_get_val();
  131. if (b < CAPS_LOCK_VAL_STEP) {
  132. b = CAPS_LOCK_VAL_STEP;
  133. } else if (b < (CAPS_LOCK_MAX_BRIGHTNESS - CAPS_LOCK_VAL_STEP)) {
  134. b += CAPS_LOCK_VAL_STEP; // one step more than current brightness
  135. } else {
  136. b = CAPS_LOCK_MAX_BRIGHTNESS;
  137. }
  138. rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, b, b, b); // white, with the adjusted brightness
  139. }
  140. return true;
  141. }
  142. #endif