logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

jetfire.c (3647B)


  1. /* Copyright 2018 MechMerlin
  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 "quantum.h"
  17. #include "indicator_leds.h"
  18. enum BACKLIGHT_AREAS {
  19. BACKLIGHT_ALPHA = 0b0000001,
  20. BACKLIGHT_MOD = 0b0000010,
  21. BACKLIGHT_FROW = 0b0000100,
  22. BACKLIGHT_NUMBLOCK = 0b0001000,
  23. BACKLIGHT_RGB = 0b0010000,
  24. BACKLIGHT_SWITCH = 0b0001111
  25. };
  26. enum StateLed {
  27. STATE_LED_SCROLL_LOCK,
  28. STATE_LED_CAPS_LOCK,
  29. STATE_LED_NUM_LOCK,
  30. STATE_LED_LAYER_0,
  31. STATE_LED_LAYER_1,
  32. STATE_LED_LAYER_2,
  33. STATE_LED_LAYER_3,
  34. STATE_LED_LAYER_4
  35. };
  36. uint8_t backlight_rgb_r = 255;
  37. uint8_t backlight_rgb_g = 0;
  38. uint8_t backlight_rgb_b = 0;
  39. uint8_t backlight_state_led = 1<<STATE_LED_LAYER_0;
  40. void backlight_toggle_rgb(bool enabled)
  41. {
  42. uint8_t rgb[RGBLIGHT_LED_COUNT][3] = { 0 };
  43. if(enabled) {
  44. for(uint8_t i = 0; i < RGBLIGHT_LED_COUNT; ++i) {
  45. rgb[i][0] = backlight_rgb_r;
  46. rgb[i][1] = backlight_rgb_g;
  47. rgb[i][2] = backlight_rgb_b;
  48. }
  49. }
  50. backlight_set_rgb(rgb);
  51. }
  52. void backlight_set_rgb(uint8_t cfg[RGBLIGHT_LED_COUNT][3])
  53. {
  54. cli();
  55. for(uint8_t i = 0; i < RGBLIGHT_LED_COUNT; ++i) {
  56. send_color(cfg[i][0], cfg[i][1], cfg[i][2], Device_PCBRGB);
  57. }
  58. sei();
  59. show();
  60. }
  61. void backlight_set(uint8_t level)
  62. {
  63. level & BACKLIGHT_ALPHA ? (PORTB |= 0b00000010) : (PORTB &= ~0b00000010);
  64. level & BACKLIGHT_MOD ? (PORTB |= 0b00000100) : (PORTB &= ~0b00000100);
  65. level & BACKLIGHT_FROW ? (PORTB |= 0b00001000) : (PORTB &= ~0b00001000);
  66. level & BACKLIGHT_NUMBLOCK ? (PORTE |= 0b01000000) : (PORTE &= ~0b01000000);
  67. backlight_toggle_rgb(level & BACKLIGHT_RGB);
  68. }
  69. void backlight_update_state(void)
  70. {
  71. cli();
  72. send_color(backlight_state_led & (1<<STATE_LED_SCROLL_LOCK) ? 255 : 0,
  73. backlight_state_led & (1<<STATE_LED_CAPS_LOCK) ? 255 : 0,
  74. backlight_state_led & (1<<STATE_LED_NUM_LOCK) ? 255 : 0,
  75. Device_STATUSLED);
  76. send_color(backlight_state_led & (1<<STATE_LED_LAYER_1) ? 255 : 0,
  77. backlight_state_led & (1<<STATE_LED_LAYER_2) ? 255 : 0,
  78. backlight_state_led & (1<<STATE_LED_LAYER_0) ? 255 : 0,
  79. Device_STATUSLED);
  80. send_color(backlight_state_led & (1<<STATE_LED_LAYER_4) ? 255 : 0,
  81. backlight_state_led & (1<<STATE_LED_LAYER_3) ? 255 : 0,
  82. 0,
  83. Device_STATUSLED);
  84. sei();
  85. show();
  86. }
  87. bool led_update_kb(led_t led_state) {
  88. bool res = led_update_user(led_state);
  89. if(res) {
  90. if(led_state.caps_lock) {
  91. backlight_state_led |= 1<<STATE_LED_CAPS_LOCK;
  92. } else {
  93. backlight_state_led &= ~(1<<STATE_LED_CAPS_LOCK);
  94. }
  95. if(led_state.scroll_lock) {
  96. backlight_state_led |= 1<<STATE_LED_SCROLL_LOCK;
  97. } else {
  98. backlight_state_led &= ~(1<<STATE_LED_SCROLL_LOCK);
  99. }
  100. if(led_state.num_lock) {
  101. backlight_state_led |= 1<<STATE_LED_NUM_LOCK;
  102. } else {
  103. backlight_state_led &= ~(1<<STATE_LED_NUM_LOCK);
  104. }
  105. backlight_update_state();
  106. }
  107. return res;
  108. }