lightsaver.c (1746B)
1 /* Copyright 2017 Rasmus Schults <rasmusx@gmail.com> 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 19 enum BACKLIGHT_AREAS { 20 BACKLIGHT_ALPHAS = 0b00000010, // Alpha keys 21 BACKLIGHT_FKEYS = 0b00000100, // Function row keys 22 BACKLIGHT_MODNUM = 0b00001000, // Modifiers and number row 23 BACKLIGHT_NUMPAD = 0b01000000 // Numpad area 24 }; 25 26 void backlight_set(uint8_t level) { 27 if (level > 0) { 28 // Turn on leds 29 PORTB &= ~BACKLIGHT_ALPHAS; 30 PORTB &= ~BACKLIGHT_FKEYS; 31 PORTB &= ~BACKLIGHT_MODNUM; 32 PORTE &= ~BACKLIGHT_NUMPAD; 33 } else { 34 // Turn off leds 35 PORTB |= BACKLIGHT_ALPHAS; 36 PORTB |= BACKLIGHT_FKEYS; 37 PORTB |= BACKLIGHT_MODNUM; 38 PORTE |= BACKLIGHT_NUMPAD; 39 } 40 } 41 42 bool led_update_kb(led_t led_state) { 43 bool res = led_update_user(led_state); 44 if(res) { 45 bool leds[8] = { 46 led_state.caps_lock, 47 led_state.scroll_lock, 48 led_state.num_lock, 49 layer_state & (1<<1), 50 layer_state & (1<<2), 51 layer_state & (1<<3), 52 layer_state & (1<<4), 53 layer_state & (1<<5) 54 }; 55 indicator_leds_set(leds); 56 } 57 return res; 58 }