62 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| Copyright 2021 Stanrc85
 | |
| 
 | |
| 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 "stanrc85.h"
 | |
| 
 | |
| // Backlight timeout feature
 | |
| // Modified from https://www.reddit.com/r/MechanicalKeyboards/comments/ix65z0/looking_for_qmk_led_idle_timeout_info/g64yov7/
 | |
| #define BACKLIGHT_TIMEOUT 10 // in minutes
 | |
| static uint16_t idle_timer = 0;
 | |
| static uint8_t halfmin_counter = 0;
 | |
| static bool led_on = true;
 | |
| static bool rgb_on = true;
 | |
| static bool rgb_was_on = false;
 | |
| 
 | |
| void matrix_scan_user(void) {
 | |
|   // idle_timer needs to be set one time
 | |
|     if (idle_timer == 0) idle_timer = timer_read();
 | |
|         if ( (led_on && timer_elapsed(idle_timer) > 30000) || (rgb_on && timer_elapsed(idle_timer) > 30000)) {
 | |
|             halfmin_counter++;
 | |
|             idle_timer = timer_read();
 | |
|         }
 | |
| 
 | |
|         if ( (led_on && halfmin_counter >= BACKLIGHT_TIMEOUT * 2) || (rgb_on && halfmin_counter >= BACKLIGHT_TIMEOUT * 2)) {
 | |
|             if(rgblight_is_enabled()) {
 | |
|                 rgb_was_on = true;
 | |
|                 rgblight_disable_noeeprom();
 | |
|                 led_on = false;
 | |
|                 rgb_on = false;
 | |
|             } else {
 | |
|                 rgb_was_on = false;
 | |
|             }
 | |
|             halfmin_counter = 0;
 | |
|         }
 | |
| };
 | |
| 
 | |
| bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | |
|     if (record->event.pressed) {
 | |
|             if (led_on == false || rgb_on == false ) {
 | |
|                 if (rgb_was_on) {
 | |
|                     rgblight_enable_noeeprom();
 | |
|                     led_on = true;
 | |
|                     rgb_on = true;
 | |
|                 }
 | |
|             }
 | |
|         idle_timer = timer_read();
 | |
|         halfmin_counter = 0;
 | |
|     }
 | |
|     return true;
 | |
| }
 | 
