forked from mirrors/qmk_userspace
		
	RGB Matrix support for Massdrop CTRL/ALT (#5328)
* port Massdrop CTRL/ALT to use RGB Matrix Co-authored-by: Matt Schneeberger <helluvamatt@gmail.com> * Massdrop lighting support working This commit is to get the Massdrop lighting code working again through use of the compilation define USE_MASSDROP_CONFIGURATOR added to a keymap's rules.mk. Added keymaps for both CTRL and ALT named default_md and mac_md. These should be used if the Massdrop style lighting is desired. * Updating config based on testing results with patrickmt & compile errors * Updates for PR5328 For CTRL and ALT: Moved location of new RGB Matrix macros from config_led.h to config.h. Added RGB_MATRIX_LED_FLUSH_LIMIT (time between flushes) to config.h for correct LED driver update timing. Re-added missing breathing code for when Massdrop configurator mode is defined. * remove prilik keymap form PR
This commit is contained in:
		
					parent
					
						
							
								63177760de
							
						
					
				
			
			
				commit
				
					
						763b26cdb9
					
				
			
		
					 38 changed files with 1688 additions and 1070 deletions
				
			
		| 
						 | 
					@ -119,3 +119,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
//#define NO_ACTION_ONESHOT
 | 
					//#define NO_ACTION_ONESHOT
 | 
				
			||||||
//#define NO_ACTION_MACRO
 | 
					//#define NO_ACTION_MACRO
 | 
				
			||||||
//#define NO_ACTION_FUNCTION
 | 
					//#define NO_ACTION_FUNCTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define RGB_MATRIX_KEYPRESSES
 | 
				
			||||||
 | 
					#define RGB_MATRIX_LED_PROCESS_LIMIT 15
 | 
				
			||||||
 | 
					#define RGB_MATRIX_LED_FLUSH_LIMIT 10
 | 
				
			||||||
 | 
					#define RGB_MATRIX_EXTRA_TOG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "config_led.h"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										148
									
								
								keyboards/massdrop/alt/config_led.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								keyboards/massdrop/alt/config_led.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,148 @@
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
 | 
					#include "alt.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "led_matrix.h"
 | 
				
			||||||
 | 
					#include "rgb_matrix.h"
 | 
				
			||||||
 | 
					#include "config_led.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This table can be almost-automatically derived from ISSI3733_LED_MAP that is
 | 
				
			||||||
 | 
					// defined in config_led.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// You can calculate the (0-244, 0-64) x/y values from the x/y values defined in
 | 
				
			||||||
 | 
					// ISSI3733_LED_MAP with the following formula:
 | 
				
			||||||
 | 
					//   uint8_t rgb_x = ((ISSI3733_LED_MAP[i].x - MIN_X) / (MAX_X - MIN_X)) * 224;
 | 
				
			||||||
 | 
					//   uint8_t rgb_y = ((ISSI3733_LED_MAP[i].y - MIN_Y) / (MAX_Y - MIN_Y)) * 64;
 | 
				
			||||||
 | 
					// Where the min/max vars are the minimum and maximum "bounds" of x/y values
 | 
				
			||||||
 | 
					// present in ISSI3733_LED_MAP
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The row/col values need to be manually tweaked though, compensating for the
 | 
				
			||||||
 | 
					// "empty" cells that are a product of larger keys
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// There is a quick-and-dirty implementation of this under ledvis.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
 | 
				
			||||||
 | 
					  /*  0 */ { { (0)|(0  << 4) }, { 8,   56 }, 0 }, // KC_ESC
 | 
				
			||||||
 | 
					  /*  1 */ { { (0)|(1  << 4) }, { 22,  56 }, 0 }, // KC_1
 | 
				
			||||||
 | 
					  /*  2 */ { { (0)|(2  << 4) }, { 35,  56 }, 0 }, // KC_2
 | 
				
			||||||
 | 
					  /*  3 */ { { (0)|(3  << 4) }, { 49,  56 }, 0 }, // KC_3
 | 
				
			||||||
 | 
					  /*  4 */ { { (0)|(4  << 4) }, { 63,  56 }, 0 }, // KC_4
 | 
				
			||||||
 | 
					  /*  5 */ { { (0)|(5  << 4) }, { 77,  56 }, 0 }, // KC_5
 | 
				
			||||||
 | 
					  /*  6 */ { { (0)|(6  << 4) }, { 91,  56 }, 0 }, // KC_6
 | 
				
			||||||
 | 
					  /*  7 */ { { (0)|(7  << 4) }, { 105, 56 }, 0 }, // KC_7
 | 
				
			||||||
 | 
					  /*  8 */ { { (0)|(8  << 4) }, { 118, 56 }, 0 }, // KC_8
 | 
				
			||||||
 | 
					  /*  9 */ { { (0)|(9  << 4) }, { 132, 56 }, 0 }, // KC_9
 | 
				
			||||||
 | 
					  /* 10 */ { { (0)|(10 << 4) }, { 146, 56 }, 0 }, // KC_0
 | 
				
			||||||
 | 
					  /* 11 */ { { (0)|(11 << 4) }, { 160, 56 }, 0 }, // KC_MINS
 | 
				
			||||||
 | 
					  /* 12 */ { { (0)|(12 << 4) }, { 174, 56 }, 0 }, // KC_EQL
 | 
				
			||||||
 | 
					  /* 13 */ { { (0)|(13 << 4) }, { 195, 56 }, 0 }, // KC_BSPC
 | 
				
			||||||
 | 
					  /* 14 */ { { (0)|(14 << 4) }, { 215, 56 }, 0 }, // KC_DEL
 | 
				
			||||||
 | 
					  /* 15 */ { { (1)|(0  << 4) }, { 11,  44 }, 0 }, // KC_TAB
 | 
				
			||||||
 | 
					  /* 16 */ { { (1)|(1  << 4) }, { 28,  44 }, 0 }, // KC_Q
 | 
				
			||||||
 | 
					  /* 17 */ { { (1)|(2  << 4) }, { 42,  44 }, 0 }, // KC_W
 | 
				
			||||||
 | 
					  /* 18 */ { { (1)|(3  << 4) }, { 56,  44 }, 0 }, // KC_E
 | 
				
			||||||
 | 
					  /* 19 */ { { (1)|(4  << 4) }, { 70,  44 }, 0 }, // KC_R
 | 
				
			||||||
 | 
					  /* 20 */ { { (1)|(5  << 4) }, { 84,  44 }, 0 }, // KC_T
 | 
				
			||||||
 | 
					  /* 21 */ { { (1)|(6  << 4) }, { 98,  44 }, 0 }, // KC_Y
 | 
				
			||||||
 | 
					  /* 22 */ { { (1)|(7  << 4) }, { 112, 44 }, 0 }, // KC_U
 | 
				
			||||||
 | 
					  /* 23 */ { { (1)|(8  << 4) }, { 125, 44 }, 0 }, // KC_I
 | 
				
			||||||
 | 
					  /* 24 */ { { (1)|(9  << 4) }, { 139, 44 }, 0 }, // KC_O
 | 
				
			||||||
 | 
					  /* 25 */ { { (1)|(10 << 4) }, { 153, 44 }, 0 }, // KC_P
 | 
				
			||||||
 | 
					  /* 26 */ { { (1)|(11 << 4) }, { 167, 44 }, 0 }, // KC_LBRC
 | 
				
			||||||
 | 
					  /* 27 */ { { (1)|(12 << 4) }, { 181, 44 }, 0 }, // KC_RBRC
 | 
				
			||||||
 | 
					  /* 28 */ { { (1)|(13 << 4) }, { 198, 44 }, 0 }, // KC_BSLS
 | 
				
			||||||
 | 
					  /* 29 */ { { (1)|(14 << 4) }, { 215, 44 }, 0 }, // KC_HOME
 | 
				
			||||||
 | 
					  /* 30 */ { { (2)|(0  << 4) }, { 13,  32 }, 1 }, // KC_CAPS
 | 
				
			||||||
 | 
					  /* 31 */ { { (2)|(1  << 4) }, { 32,  32 }, 0 }, // KC_A
 | 
				
			||||||
 | 
					  /* 32 */ { { (2)|(2  << 4) }, { 46,  32 }, 0 }, // KC_S
 | 
				
			||||||
 | 
					  /* 33 */ { { (2)|(3  << 4) }, { 60,  32 }, 0 }, // KC_D
 | 
				
			||||||
 | 
					  /* 34 */ { { (2)|(4  << 4) }, { 73,  32 }, 0 }, // KC_F
 | 
				
			||||||
 | 
					  /* 35 */ { { (2)|(5  << 4) }, { 87,  32 }, 0 }, // KC_G
 | 
				
			||||||
 | 
					  /* 36 */ { { (2)|(6  << 4) }, { 101, 32 }, 0 }, // KC_H
 | 
				
			||||||
 | 
					  /* 37 */ { { (2)|(7  << 4) }, { 115, 32 }, 0 }, // KC_J
 | 
				
			||||||
 | 
					  /* 38 */ { { (2)|(8  << 4) }, { 129, 32 }, 0 }, // KC_K
 | 
				
			||||||
 | 
					  /* 39 */ { { (2)|(9  << 4) }, { 143, 32 }, 0 }, // KC_L
 | 
				
			||||||
 | 
					  /* 40 */ { { (2)|(10 << 4) }, { 156, 32 }, 0 }, // KC_SCLN
 | 
				
			||||||
 | 
					  /* 41 */ { { (2)|(11 << 4) }, { 170, 32 }, 0 }, // KC_QUOT
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* 42 */ { { (2)|(13 << 4) }, { 193, 32 }, 0 }, // KC_ENT
 | 
				
			||||||
 | 
					  /* 43 */ { { (2)|(14 << 4) }, { 215, 32 }, 0 }, // KC_PGUP
 | 
				
			||||||
 | 
					  /* 44 */ { { (3)|(0  << 4) }, { 16,  19 }, 0 }, // KC_LSFT
 | 
				
			||||||
 | 
					  /* 45 */ { { (3)|(2  << 4) }, { 39,  19 }, 0 }, // KC_Z
 | 
				
			||||||
 | 
					  /* 46 */ { { (3)|(3  << 4) }, { 53,  19 }, 0 }, // KC_X
 | 
				
			||||||
 | 
					  /* 47 */ { { (3)|(4  << 4) }, { 67,  19 }, 0 }, // KC_C
 | 
				
			||||||
 | 
					  /* 48 */ { { (3)|(5  << 4) }, { 80,  19 }, 0 }, // KC_V
 | 
				
			||||||
 | 
					  /* 49 */ { { (3)|(6  << 4) }, { 94,  19 }, 0 }, // KC_B
 | 
				
			||||||
 | 
					  /* 50 */ { { (3)|(7  << 4) }, { 108, 19 }, 0 }, // KC_N
 | 
				
			||||||
 | 
					  /* 51 */ { { (3)|(8  << 4) }, { 122, 19 }, 0 }, // KC_M
 | 
				
			||||||
 | 
					  /* 52 */ { { (3)|(9  << 4) }, { 136, 19 }, 0 }, // KC_COMM
 | 
				
			||||||
 | 
					  /* 53 */ { { (3)|(10 << 4) }, { 150, 19 }, 0 }, // KC_DOT
 | 
				
			||||||
 | 
					  /* 54 */ { { (3)|(11 << 4) }, { 163, 19 }, 0 }, // KC_SLSH
 | 
				
			||||||
 | 
					  /* 55 */ { { (3)|(12 << 4) }, { 182, 19 }, 0 }, // KC_RSFT
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* 56 */ { { (3)|(13 << 4) }, { 201, 19 }, 0 }, // KC_UP
 | 
				
			||||||
 | 
					  /* 57 */ { { (3)|(14 << 4) }, { 215, 19 }, 0 }, // KC_PGDN
 | 
				
			||||||
 | 
					  /* 58 */ { { (4)|(0  << 4) }, { 9,    7 }, 0 }, // KC_LCTL
 | 
				
			||||||
 | 
					  /* 59 */ { { (4)|(1  << 4) }, { 27,   7 }, 0 }, // KC_LGUI
 | 
				
			||||||
 | 
					  /* 60 */ { { (4)|(2  << 4) }, { 44,   7 }, 0 }, // KC_LALT
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* 61 */ { { (4)|(6  << 4) }, { 96,   7 }, 0 }, // KC_SPC
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* _________________________________________ */ // ____
 | 
				
			||||||
 | 
					  /* 62 */ { { (4)|(10 << 4) }, { 148,  7 }, 0 }, // KC_RALT
 | 
				
			||||||
 | 
					  /* 63 */ { { (4)|(11 << 4) }, { 165,  7 }, 0 }, // MO(1)
 | 
				
			||||||
 | 
					  /* 64 */ { { (4)|(12 << 4) }, { 188,  7 }, 0 }, // KC_LEFT
 | 
				
			||||||
 | 
					  /* 65 */ { { (4)|(13 << 4) }, { 201,  7 }, 0 }, // KC_DOWN
 | 
				
			||||||
 | 
					  /* 66 */ { { (4)|(14 << 4) }, { 215,  7 }, 0 }, // KC_RGHT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Underglow LEDs
 | 
				
			||||||
 | 
					  { { 255 }, { 1,    1 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 15,   0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 31,   0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 47,   0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 63,   0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 79,   0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 95,   0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 112,  0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 128,  0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 144,  0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 160,  0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 176,  0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 192,  0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 208,  0 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 222,  1 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 224, 13 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 224, 25 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 224, 38 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 224, 50 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 222, 62 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 191, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 179, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 167, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 153, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 139, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 125, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 112, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 98,  64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 84,  64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 70,  64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 56,  64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 42,  64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 28,  64 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 1,   62 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 0,   50 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 0,   38 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 0,   25 }, 0 },
 | 
				
			||||||
 | 
					  { { 255 }, { 0,   13 }, 0 },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USB_LED_INDICATOR_ENABLE
 | 
				
			||||||
 | 
					void rgb_matrix_indicators_kb(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  led_matrix_indicators();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif // USB_LED_INDICATOR_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -15,11 +15,11 @@ You should have received a copy of the GNU General Public License
 | 
				
			||||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _config_led_h_
 | 
					#pragma once
 | 
				
			||||||
#define _config_led_h_
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Define number of ISSI3733 drivers being used (1...16)
 | 
					//Define number of ISSI3733 drivers being used (1...16)
 | 
				
			||||||
#define ISSI3733_DRIVER_COUNT 2
 | 
					#define ISSI3733_DRIVER_COUNT 2
 | 
				
			||||||
 | 
					#define DRIVER_LED_TOTAL ISSI3733_LED_COUNT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
 | 
					//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
 | 
				
			||||||
#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
 | 
					#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
 | 
				
			||||||
| 
						 | 
					@ -30,22 +30,25 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
//Count of LED bodies
 | 
					//Count of LED bodies
 | 
				
			||||||
#define ISSI3733_LED_COUNT 105
 | 
					#define ISSI3733_LED_COUNT 105
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Default Global Current Register value (Default brightness 0 - 255)
 | 
					 | 
				
			||||||
#define ISSI3733_GCR_DEFAULT 128
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define LED_GCR_MAX                 165         //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
 | 
					#define LED_GCR_MAX                 165         //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
 | 
				
			||||||
#define LED_GCR_STEP                10          //GCR increment/decrement value
 | 
					#define LED_GCR_STEP                10          //GCR increment/decrement value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					#define ANIMATION_SPEED_STEP        1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BREATHE_STEP                1
 | 
				
			||||||
 | 
					#define BREATHE_MIN_STEP            0
 | 
				
			||||||
 | 
					#define BREATHE_MAX_STEP            255
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Default Global Current Register value (Default brightness 0 - 255)
 | 
				
			||||||
 | 
					#define ISSI3733_GCR_DEFAULT LED_GCR_MAX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Automatic power rollback and recovery
 | 
					//Automatic power rollback and recovery
 | 
				
			||||||
#define V5_HIGH                     2540        //5V high level (After low power detect, point at which LEDs are allowed to use more power )
 | 
					#define V5_HIGH                     2540        //5V high level (After low power detect, point at which LEDs are allowed to use more power )
 | 
				
			||||||
#define V5_LOW                      2480        //5V low level (LED power rolled back to stay above this limit)
 | 
					#define V5_LOW                      2480        //5V low level (LED power rolled back to stay above this limit)
 | 
				
			||||||
#define V5_CAT                      2200        //5V catastrophic level (Host USB port potential to shut down)
 | 
					#define V5_CAT                      2200        //5V catastrophic level (Host USB port potential to shut down)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ANIMATION_SPEED_STEP        1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define BREATHE_MIN_STEP            0
 | 
					 | 
				
			||||||
#define BREATHE_MAX_STEP            255
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//LED Mapping - More practically generated from a spreadsheet program
 | 
					//LED Mapping - More practically generated from a spreadsheet program
 | 
				
			||||||
//id: ID of the LED (Sync with PCB callouts)
 | 
					//id: ID of the LED (Sync with PCB callouts)
 | 
				
			||||||
//x: Physical X coordinate of LED (units do not matter)
 | 
					//x: Physical X coordinate of LED (units do not matter)
 | 
				
			||||||
| 
						 | 
					@ -174,5 +177,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
    #define USB_LED_COMPOSE_SCANCODE        255
 | 
					    #define USB_LED_COMPOSE_SCANCODE        255
 | 
				
			||||||
    #define USB_LED_KANA_SCANCODE           255
 | 
					    #define USB_LED_KANA_SCANCODE           255
 | 
				
			||||||
#endif //USB_LED_INDICATOR_ENABLE
 | 
					#endif //USB_LED_INDICATOR_ENABLE
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif //_config_led_h_
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,25 +1,13 @@
 | 
				
			||||||
#include QMK_KEYBOARD_H
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum alt_keycodes {
 | 
					enum alt_keycodes {
 | 
				
			||||||
    L_BRI = SAFE_RANGE, //LED Brightness Increase
 | 
					    U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
 | 
				
			||||||
    L_BRD,              //LED Brightness Decrease
 | 
					    U_T_AGCR,              //USB Toggle Automatic GCR control
 | 
				
			||||||
    L_PTN,              //LED Pattern Select Next
 | 
					    DBG_TOG,               //DEBUG Toggle On / Off
 | 
				
			||||||
    L_PTP,              //LED Pattern Select Previous
 | 
					    DBG_MTRX,              //DEBUG Toggle Matrix Prints
 | 
				
			||||||
    L_PSI,              //LED Pattern Speed Increase
 | 
					    DBG_KBD,               //DEBUG Toggle Keyboard Prints
 | 
				
			||||||
    L_PSD,              //LED Pattern Speed Decrease
 | 
					    DBG_MOU,               //DEBUG Toggle Mouse Prints
 | 
				
			||||||
    L_T_MD,             //LED Toggle Mode
 | 
					    MD_BOOT,               //Restart into bootloader after hold timeout
 | 
				
			||||||
    L_T_ONF,            //LED Toggle On / Off
 | 
					 | 
				
			||||||
    L_ON,               //LED On
 | 
					 | 
				
			||||||
    L_OFF,              //LED Off
 | 
					 | 
				
			||||||
    L_T_BR,             //LED Toggle Breath Effect
 | 
					 | 
				
			||||||
    L_T_PTD,            //LED Toggle Scrolling Pattern Direction
 | 
					 | 
				
			||||||
    U_T_AUTO,           //USB Extra Port Toggle Auto Detect / Always Active
 | 
					 | 
				
			||||||
    U_T_AGCR,           //USB Toggle Automatic GCR control
 | 
					 | 
				
			||||||
    DBG_TOG,            //DEBUG Toggle On / Off
 | 
					 | 
				
			||||||
    DBG_MTRX,           //DEBUG Toggle Matrix Prints
 | 
					 | 
				
			||||||
    DBG_KBD,            //DEBUG Toggle Keyboard Prints
 | 
					 | 
				
			||||||
    DBG_MOU,            //DEBUG Toggle Mouse Prints
 | 
					 | 
				
			||||||
    MD_BOOT,            //Restart into bootloader after hold timeout
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
| 
						 | 
					@ -35,19 +23,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
					        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    [1] = LAYOUT(
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS, KC_MUTE, \
 | 
					        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_MUTE, \
 | 
				
			||||||
        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END, \
 | 
					        _______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
 | 
				
			||||||
        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_VOLU, \
 | 
					        _______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______,          _______, KC_VOLU, \
 | 
				
			||||||
        KC_TRNS, L_T_MD,  L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_PGUP, KC_VOLD, \
 | 
					        _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______,          KC_PGUP, KC_VOLD, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END  \
 | 
					        _______, _______, _______,                            _______,                            _______, _______, KC_HOME, KC_PGDN, KC_END  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    [X] = LAYOUT(
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS  \
 | 
					        _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -68,82 +56,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
    static uint32_t key_timer;
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (keycode) {
 | 
					    switch (keycode) {
 | 
				
			||||||
        case L_BRI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
					 | 
				
			||||||
                else gcr_desired += LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_BRD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
					 | 
				
			||||||
                else gcr_desired -= LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTN:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
					 | 
				
			||||||
                else led_animation_id++;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTP:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
					 | 
				
			||||||
                else led_animation_id--;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_MD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_lighting_mode++;
 | 
					 | 
				
			||||||
                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_ONF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = !led_enabled;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_ON:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 1;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_OFF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 0;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_BR:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_breathing = !led_animation_breathing;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) {
 | 
					 | 
				
			||||||
                    gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
					 | 
				
			||||||
                    breathe_dir = 1;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_PTD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_direction = !led_animation_direction;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case U_T_AUTO:
 | 
					        case U_T_AUTO:
 | 
				
			||||||
            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,25 +1,13 @@
 | 
				
			||||||
#include QMK_KEYBOARD_H
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum alt_keycodes {
 | 
					enum alt_keycodes {
 | 
				
			||||||
    L_BRI = SAFE_RANGE, //LED Brightness Increase
 | 
					    U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
 | 
				
			||||||
    L_BRD,              //LED Brightness Decrease
 | 
					    U_T_AGCR,              //USB Toggle Automatic GCR control
 | 
				
			||||||
    L_PTN,              //LED Pattern Select Next
 | 
					    DBG_TOG,               //DEBUG Toggle On / Off
 | 
				
			||||||
    L_PTP,              //LED Pattern Select Previous
 | 
					    DBG_MTRX,              //DEBUG Toggle Matrix Prints
 | 
				
			||||||
    L_PSI,              //LED Pattern Speed Increase
 | 
					    DBG_KBD,               //DEBUG Toggle Keyboard Prints
 | 
				
			||||||
    L_PSD,              //LED Pattern Speed Decrease
 | 
					    DBG_MOU,               //DEBUG Toggle Mouse Prints
 | 
				
			||||||
    L_T_MD,             //LED Toggle Mode
 | 
					    MD_BOOT,               //Restart into bootloader after hold timeout
 | 
				
			||||||
    L_T_ONF,            //LED Toggle On / Off
 | 
					 | 
				
			||||||
    L_ON,               //LED On
 | 
					 | 
				
			||||||
    L_OFF,              //LED Off
 | 
					 | 
				
			||||||
    L_T_BR,             //LED Toggle Breath Effect
 | 
					 | 
				
			||||||
    L_T_PTD,            //LED Toggle Scrolling Pattern Direction
 | 
					 | 
				
			||||||
    U_T_AUTO,           //USB Extra Port Toggle Auto Detect / Always Active
 | 
					 | 
				
			||||||
    U_T_AGCR,           //USB Toggle Automatic GCR control
 | 
					 | 
				
			||||||
    DBG_TOG,            //DEBUG Toggle On / Off
 | 
					 | 
				
			||||||
    DBG_MTRX,           //DEBUG Toggle Matrix Prints
 | 
					 | 
				
			||||||
    DBG_KBD,            //DEBUG Toggle Keyboard Prints
 | 
					 | 
				
			||||||
    DBG_MOU,            //DEBUG Toggle Mouse Prints
 | 
					 | 
				
			||||||
    MD_BOOT,            //Restart into bootloader after hold timeout
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
| 
						 | 
					@ -35,19 +23,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
					        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    [1] = LAYOUT(
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS, KC_MUTE, \
 | 
					        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_MUTE, \
 | 
				
			||||||
        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END, \
 | 
					        _______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
 | 
				
			||||||
        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_VOLU, \
 | 
					        _______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______,          _______, KC_VOLU, \
 | 
				
			||||||
        KC_TRNS, L_T_MD,  L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_PGUP, KC_VOLD, \
 | 
					        _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______,          KC_PGUP, KC_VOLD, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END  \
 | 
					        _______, _______, _______,                            _______,                            _______, _______, KC_HOME, KC_PGDN, KC_END  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    [X] = LAYOUT(
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS  \
 | 
					        _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -68,82 +56,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
    static uint32_t key_timer;
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (keycode) {
 | 
					    switch (keycode) {
 | 
				
			||||||
        case L_BRI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
					 | 
				
			||||||
                else gcr_desired += LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_BRD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
					 | 
				
			||||||
                else gcr_desired -= LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTN:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
					 | 
				
			||||||
                else led_animation_id++;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTP:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
					 | 
				
			||||||
                else led_animation_id--;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_MD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_lighting_mode++;
 | 
					 | 
				
			||||||
                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_ONF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = !led_enabled;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_ON:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 1;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_OFF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 0;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_BR:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_breathing = !led_animation_breathing;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) {
 | 
					 | 
				
			||||||
                    gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
					 | 
				
			||||||
                    breathe_dir = 1;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_PTD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_direction = !led_animation_direction;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case U_T_AUTO:
 | 
					        case U_T_AUTO:
 | 
				
			||||||
            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										223
									
								
								keyboards/massdrop/alt/keymaps/default_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								keyboards/massdrop/alt/keymaps/default_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,223 @@
 | 
				
			||||||
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum alt_keycodes {
 | 
				
			||||||
 | 
					    L_BRI = SAFE_RANGE, //LED Brightness Increase                                   //Working
 | 
				
			||||||
 | 
					    L_BRD,              //LED Brightness Decrease                                   //Working
 | 
				
			||||||
 | 
					    L_PTN,              //LED Pattern Select Next                                   //Working
 | 
				
			||||||
 | 
					    L_PTP,              //LED Pattern Select Previous                               //Working
 | 
				
			||||||
 | 
					    L_PSI,              //LED Pattern Speed Increase                                //Working
 | 
				
			||||||
 | 
					    L_PSD,              //LED Pattern Speed Decrease                                //Working
 | 
				
			||||||
 | 
					    L_T_MD,             //LED Toggle Mode                                           //Working
 | 
				
			||||||
 | 
					    L_T_ONF,            //LED Toggle On / Off                                       //Broken
 | 
				
			||||||
 | 
					    L_ON,               //LED On                                                    //Broken
 | 
				
			||||||
 | 
					    L_OFF,              //LED Off                                                   //Broken
 | 
				
			||||||
 | 
					    L_T_BR,             //LED Toggle Breath Effect                                  //Working
 | 
				
			||||||
 | 
					    L_T_PTD,            //LED Toggle Scrolling Pattern Direction                    //Working
 | 
				
			||||||
 | 
					    U_T_AGCR,           //USB Toggle Automatic GCR control                          //Working
 | 
				
			||||||
 | 
					    DBG_TOG,            //DEBUG Toggle On / Off                                     //
 | 
				
			||||||
 | 
					    DBG_MTRX,           //DEBUG Toggle Matrix Prints                                //
 | 
				
			||||||
 | 
					    DBG_KBD,            //DEBUG Toggle Keyboard Prints                              //
 | 
				
			||||||
 | 
					    DBG_MOU,            //DEBUG Toggle Mouse Prints                                 //
 | 
				
			||||||
 | 
					    MD_BOOT             //Restart into bootloader after hold timeout                //Working
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					keymap_config_t keymap_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    [0] = LAYOUT(
 | 
				
			||||||
 | 
					        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_DEL,  \
 | 
				
			||||||
 | 
					        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \
 | 
				
			||||||
 | 
					        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  KC_PGUP, \
 | 
				
			||||||
 | 
					        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,          KC_UP,   KC_PGDN, \
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
 | 
					        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_MUTE, \
 | 
				
			||||||
 | 
					        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   _______, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
 | 
				
			||||||
 | 
					        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   _______, _______, _______, _______, _______, _______, _______, _______,          _______, KC_VOLU, \
 | 
				
			||||||
 | 
					        _______, L_T_MD,  L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______,          KC_PGUP, KC_VOLD, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                            _______,                            _______, _______, KC_HOME, KC_PGDN, KC_END  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs just one time when the keyboard initializes.
 | 
				
			||||||
 | 
					void matrix_init_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs constantly in the background, in a loop.
 | 
				
			||||||
 | 
					void matrix_scan_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MODS_SHIFT  (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
 | 
				
			||||||
 | 
					#define MODS_CTRL  (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
 | 
				
			||||||
 | 
					#define MODS_ALT  (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (keycode) {
 | 
				
			||||||
 | 
					        case L_BRI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
				
			||||||
 | 
					                else gcr_desired += LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_BRD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
				
			||||||
 | 
					                else gcr_desired -= LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTN:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
				
			||||||
 | 
					                else led_animation_id++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTP:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
				
			||||||
 | 
					                else led_animation_id--;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_MD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_lighting_mode++;
 | 
				
			||||||
 | 
					                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_ONF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = !led_enabled;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_ON:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 1;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_OFF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 0;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_BR:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_breathing = !led_animation_breathing;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) {
 | 
				
			||||||
 | 
					                    gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
				
			||||||
 | 
					                    breathe_dir = 1;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_PTD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_direction = !led_animation_direction;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case U_T_AGCR:
 | 
				
			||||||
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_TOG:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MTRX:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_KBD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MOU:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case MD_BOOT:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                key_timer = timer_read32();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if (timer_elapsed32(key_timer) >= 500) {
 | 
				
			||||||
 | 
					                    reset_keyboard();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            return true; //Process all other keycodes normally
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_instruction_t led_instructions[] = {
 | 
				
			||||||
 | 
					    //LEDs are normally inactive, no processing is performed on them
 | 
				
			||||||
 | 
					    //Flags are used in matching criteria for an LED to be active and indicate how to color it
 | 
				
			||||||
 | 
					    //Flags can be found in tmk_core/protocol/arm_atsam/led_matrix.h (prefixed with LED_FLAG_)
 | 
				
			||||||
 | 
					    //LED IDs can be found in config_led.h in the keyboard's directory
 | 
				
			||||||
 | 
					    //Examples are below
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //All LEDs use the user's selected pattern (this is the factory default)
 | 
				
			||||||
 | 
					     { .flags = LED_FLAG_USE_ROTATE_PATTERN },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Specific LEDs use the user's selected pattern while all others are off
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_ROTATE_PATTERN, .id0 = 0xFFFFFFFF, .id1 = 0xAAAAAAAA, .id2 = 0x55555555, .id3 = 0x11111111 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Specific LEDs use specified RGB values while all others are off
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 0xFF, .id1 = 0x00FF, .id2 = 0x0000FF00, .id3 = 0xFF000000, .r = 75, .g = 150, .b = 225 },
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //All LEDs use the user's selected pattern
 | 
				
			||||||
 | 
					    //On layer 1, all key LEDs (except the top row which keeps active pattern) are red while all edge LEDs are green
 | 
				
			||||||
 | 
					    //When layer 1 is active, key LEDs use red    (id0  32 -  16: 1111 1111 1111 1111 1000 0000 0000 0000 = 0xFFFF8000) (except top row 15 - 1)
 | 
				
			||||||
 | 
					    //When layer 1 is active, key LEDs use red    (id1  64 -  33: 1111 1111 1111 1111 1111 1111 1111 1111 = 0xFFFFFFFF)
 | 
				
			||||||
 | 
					    //When layer 1 is active, key LEDs use red    (id2  67 -  65: 0000 0000 0000 0000 0000 0000 0000 0111 = 0x00000007)
 | 
				
			||||||
 | 
					    //When layer 1 is active, edge LEDs use green (id2  95 -  68: 1111 1111 1111 1111 1111 1111 1111 1000 = 0xFFFFFFF8)
 | 
				
			||||||
 | 
					    //When layer 1 is active, edge LEDs use green (id3 105 -  96: 0000 0000 0000 0000 0000 0011 1111 1111 = 0x000003FF)
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_USE_ROTATE_PATTERN },
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_MATCH_LAYER | LED_FLAG_USE_RGB, .id0 = 0xFFFF8000, .id1 = 0xFFFFFFFF, .id2 = 0x00000007, .r = 255, .layer = 1 },
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_MATCH_LAYER | LED_FLAG_USE_RGB, .id2 = 0xFFFFFFF8, .id3 = 0x000003FF, .g = 127, .layer = 1 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //All key LEDs use red while edge LEDs use the active pattern
 | 
				
			||||||
 | 
					    //All key LEDs use red     (id0  32 -   1: 1111 1111 1111 1111 1111 1111 1111 1111 = 0xFFFFFFFF)
 | 
				
			||||||
 | 
					    //All key LEDs use red     (id1  64 -  33: 1111 1111 1111 1111 1111 1111 1111 1111 = 0xFFFFFFFF)
 | 
				
			||||||
 | 
					    //All key LEDs use red     (id2  67 -  65: 0000 0000 0000 0000 0000 0000 0000 0111 = 0x00000007)
 | 
				
			||||||
 | 
					    //Edge uses active pattern (id2  95 -  68: 1111 1111 1111 1111 1111 1111 1111 1000 = 0xFFFFFFF8)
 | 
				
			||||||
 | 
					    //Edge uses active pattern (id3 105 -  96: 0000 0000 0000 0000 0000 0011 1111 1111 = 0x000003FF)
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 0xFFFFFFFF, .id1 = 0xFFFFFFFF, .id2 = 0x00000007, .r = 255 },
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_ROTATE_PATTERN , .id2 = 0xFFFFFFF8, .id3 = 0x000003FF },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //end must be set to 1 to indicate end of instruction set
 | 
				
			||||||
 | 
					     { .end = 1 }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										2
									
								
								keyboards/massdrop/alt/keymaps/default_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/massdrop/alt/keymaps/default_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					# This keymap requires Massdrop Configurator support
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
| 
						 | 
					@ -1,25 +1,13 @@
 | 
				
			||||||
#include QMK_KEYBOARD_H
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum alt_keycodes {
 | 
					enum alt_keycodes {
 | 
				
			||||||
    L_BRI = SAFE_RANGE, //LED Brightness Increase
 | 
					    U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
 | 
				
			||||||
    L_BRD,              //LED Brightness Decrease
 | 
					    U_T_AGCR,              //USB Toggle Automatic GCR control
 | 
				
			||||||
    L_PTN,              //LED Pattern Select Next
 | 
					    DBG_TOG,               //DEBUG Toggle On / Off
 | 
				
			||||||
    L_PTP,              //LED Pattern Select Previous
 | 
					    DBG_MTRX,              //DEBUG Toggle Matrix Prints
 | 
				
			||||||
    L_PSI,              //LED Pattern Speed Increase
 | 
					    DBG_KBD,               //DEBUG Toggle Keyboard Prints
 | 
				
			||||||
    L_PSD,              //LED Pattern Speed Decrease
 | 
					    DBG_MOU,               //DEBUG Toggle Mouse Prints
 | 
				
			||||||
    L_T_MD,             //LED Toggle Mode
 | 
					    MD_BOOT,               //Restart into bootloader after hold timeout
 | 
				
			||||||
    L_T_ONF,            //LED Toggle On / Off
 | 
					 | 
				
			||||||
    L_ON,               //LED On
 | 
					 | 
				
			||||||
    L_OFF,              //LED Off
 | 
					 | 
				
			||||||
    L_T_BR,             //LED Toggle Breath Effect
 | 
					 | 
				
			||||||
    L_T_PTD,            //LED Toggle Scrolling Pattern Direction
 | 
					 | 
				
			||||||
    U_T_AUTO,           //USB Extra Port Toggle Auto Detect / Always Active
 | 
					 | 
				
			||||||
    U_T_AGCR,           //USB Toggle Automatic GCR control
 | 
					 | 
				
			||||||
    DBG_TOG,            //DEBUG Toggle On / Off
 | 
					 | 
				
			||||||
    DBG_MTRX,           //DEBUG Toggle Matrix Prints
 | 
					 | 
				
			||||||
    DBG_KBD,            //DEBUG Toggle Keyboard Prints
 | 
					 | 
				
			||||||
    DBG_MOU,            //DEBUG Toggle Mouse Prints
 | 
					 | 
				
			||||||
    MD_BOOT,            //Restart into bootloader after hold timeout
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
| 
						 | 
					@ -35,19 +23,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
        KC_LCTL, KC_LALT, KC_LGUI,                            KC_SPC,                             KC_RGUI, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
					        KC_LCTL, KC_LALT, KC_LGUI,                            KC_SPC,                             KC_RGUI, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    [1] = LAYOUT(
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS, KC_MUTE, \
 | 
					        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_MUTE, \
 | 
				
			||||||
        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END, \
 | 
					        _______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
 | 
				
			||||||
        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_VOLU, \
 | 
					        _______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______,          _______, KC_VOLU, \
 | 
				
			||||||
        KC_TRNS, L_T_MD,  L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_PGUP, KC_VOLD, \
 | 
					        _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______,          KC_PGUP, KC_VOLD, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END  \
 | 
					        _______, _______, _______,                            _______,                            _______, _______, KC_HOME, KC_PGDN, KC_END  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    [X] = LAYOUT(
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS  \
 | 
					        _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -68,82 +56,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
    static uint32_t key_timer;
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (keycode) {
 | 
					    switch (keycode) {
 | 
				
			||||||
        case L_BRI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
					 | 
				
			||||||
                else gcr_desired += LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_BRD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
					 | 
				
			||||||
                else gcr_desired -= LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTN:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
					 | 
				
			||||||
                else led_animation_id++;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTP:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
					 | 
				
			||||||
                else led_animation_id--;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_MD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_lighting_mode++;
 | 
					 | 
				
			||||||
                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_ONF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = !led_enabled;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_ON:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 1;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_OFF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 0;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_BR:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_breathing = !led_animation_breathing;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) {
 | 
					 | 
				
			||||||
                    gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
					 | 
				
			||||||
                    breathe_dir = 1;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_PTD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_direction = !led_animation_direction;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case U_T_AUTO:
 | 
					        case U_T_AUTO:
 | 
				
			||||||
            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										193
									
								
								keyboards/massdrop/alt/keymaps/mac_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								keyboards/massdrop/alt/keymaps/mac_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,193 @@
 | 
				
			||||||
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum alt_keycodes {
 | 
				
			||||||
 | 
					    L_BRI = SAFE_RANGE, //LED Brightness Increase                                   //Working
 | 
				
			||||||
 | 
					    L_BRD,              //LED Brightness Decrease                                   //Working
 | 
				
			||||||
 | 
					    L_PTN,              //LED Pattern Select Next                                   //Working
 | 
				
			||||||
 | 
					    L_PTP,              //LED Pattern Select Previous                               //Working
 | 
				
			||||||
 | 
					    L_PSI,              //LED Pattern Speed Increase                                //Working
 | 
				
			||||||
 | 
					    L_PSD,              //LED Pattern Speed Decrease                                //Working
 | 
				
			||||||
 | 
					    L_T_MD,             //LED Toggle Mode                                           //Working
 | 
				
			||||||
 | 
					    L_T_ONF,            //LED Toggle On / Off                                       //Broken
 | 
				
			||||||
 | 
					    L_ON,               //LED On                                                    //Broken
 | 
				
			||||||
 | 
					    L_OFF,              //LED Off                                                   //Broken
 | 
				
			||||||
 | 
					    L_T_BR,             //LED Toggle Breath Effect                                  //Working
 | 
				
			||||||
 | 
					    L_T_PTD,            //LED Toggle Scrolling Pattern Direction                    //Working
 | 
				
			||||||
 | 
					    U_T_AGCR,           //USB Toggle Automatic GCR control                          //Working
 | 
				
			||||||
 | 
					    DBG_TOG,            //DEBUG Toggle On / Off                                     //
 | 
				
			||||||
 | 
					    DBG_MTRX,           //DEBUG Toggle Matrix Prints                                //
 | 
				
			||||||
 | 
					    DBG_KBD,            //DEBUG Toggle Keyboard Prints                              //
 | 
				
			||||||
 | 
					    DBG_MOU,            //DEBUG Toggle Mouse Prints                                 //
 | 
				
			||||||
 | 
					    MD_BOOT             //Restart into bootloader after hold timeout                //Working
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					keymap_config_t keymap_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    [0] = LAYOUT(
 | 
				
			||||||
 | 
					        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_DEL,  \
 | 
				
			||||||
 | 
					        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \
 | 
				
			||||||
 | 
					        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  KC_PGUP, \
 | 
				
			||||||
 | 
					        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,          KC_UP,   KC_PGDN, \
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LALT, KC_LGUI,                            KC_SPC,                             KC_RGUI, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
 | 
					        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_MUTE, \
 | 
				
			||||||
 | 
					        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   _______, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
 | 
				
			||||||
 | 
					        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   _______, _______, _______, _______, _______, _______, _______, _______,          _______, KC_VOLU, \
 | 
				
			||||||
 | 
					        _______, L_T_MD,  L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______,          KC_PGUP, KC_VOLD, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                            _______,                            _______, _______, KC_HOME, KC_PGDN, KC_END  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs just one time when the keyboard initializes.
 | 
				
			||||||
 | 
					void matrix_init_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs constantly in the background, in a loop.
 | 
				
			||||||
 | 
					void matrix_scan_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MODS_SHIFT  (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
 | 
				
			||||||
 | 
					#define MODS_CTRL  (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
 | 
				
			||||||
 | 
					#define MODS_ALT  (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (keycode) {
 | 
				
			||||||
 | 
					        case L_BRI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
				
			||||||
 | 
					                else gcr_desired += LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_BRD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
				
			||||||
 | 
					                else gcr_desired -= LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTN:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
				
			||||||
 | 
					                else led_animation_id++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTP:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
				
			||||||
 | 
					                else led_animation_id--;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_MD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_lighting_mode++;
 | 
				
			||||||
 | 
					                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_ONF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = !led_enabled;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_ON:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 1;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_OFF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 0;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_BR:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_breathing = !led_animation_breathing;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) {
 | 
				
			||||||
 | 
					                    gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
				
			||||||
 | 
					                    breathe_dir = 1;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_PTD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_direction = !led_animation_direction;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case U_T_AGCR:
 | 
				
			||||||
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_TOG:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MTRX:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_KBD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MOU:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case MD_BOOT:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                key_timer = timer_read32();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if (timer_elapsed32(key_timer) >= 500) {
 | 
				
			||||||
 | 
					                    reset_keyboard();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            return true; //Process all other keycodes normally
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_instruction_t led_instructions[] = {
 | 
				
			||||||
 | 
					    //Please see ../default_md/keymap.c for examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //All LEDs use the user's selected pattern (this is the factory default)
 | 
				
			||||||
 | 
					     { .flags = LED_FLAG_USE_ROTATE_PATTERN },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //end must be set to 1 to indicate end of instruction set
 | 
				
			||||||
 | 
					     { .end = 1 }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										2
									
								
								keyboards/massdrop/alt/keymaps/mac_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/massdrop/alt/keymaps/mac_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					# This keymap requires Massdrop Configurator support
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
							
								
								
									
										5
									
								
								keyboards/massdrop/alt/keymaps/reywood/README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								keyboards/massdrop/alt/keymaps/reywood/README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					# THIS KEYMAP IS BROKEN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The CTRL and ALT have both been switched to using the QMK RGB Matrix system,
 | 
				
			||||||
 | 
					rendering any custom effects that used the old, custom Massdrop lighting system,
 | 
				
			||||||
 | 
					BROKEN.
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,4 @@
 | 
				
			||||||
# project specific files
 | 
					# project specific files
 | 
				
			||||||
SRC = led_programs.c
 | 
					 | 
				
			||||||
SRC += matrix.c
 | 
					 | 
				
			||||||
SRC += rgb_matrix_user.c
 | 
					SRC += rgb_matrix_user.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#For platform and packs
 | 
					#For platform and packs
 | 
				
			||||||
| 
						 | 
					@ -32,3 +30,6 @@ HD44780_ENABLE = no         # Enable support for HD44780 based LCDs (+400)
 | 
				
			||||||
VIRTSER_ENABLE = no         # USB Serial Driver
 | 
					VIRTSER_ENABLE = no         # USB Serial Driver
 | 
				
			||||||
RAW_ENABLE = no             # Raw device
 | 
					RAW_ENABLE = no             # Raw device
 | 
				
			||||||
AUTO_SHIFT_ENABLE = no      # Auto Shift
 | 
					AUTO_SHIFT_ENABLE = no      # Auto Shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This keymap requires Massdrop Configurator support
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
# project specific files
 | 
					# project specific files
 | 
				
			||||||
SRC = led_programs.c
 | 
					SRC = matrix.c
 | 
				
			||||||
SRC += matrix.c
 | 
					SRC += config_led.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#For platform and packs
 | 
					#For platform and packs
 | 
				
			||||||
ARM_ATSAM = SAMD51J18A
 | 
					ARM_ATSAM = SAMD51J18A
 | 
				
			||||||
| 
						 | 
					@ -31,3 +31,6 @@ HD44780_ENABLE = no         # Enable support for HD44780 based LCDs (+400)
 | 
				
			||||||
VIRTSER_ENABLE = no         # USB Serial Driver
 | 
					VIRTSER_ENABLE = no         # USB Serial Driver
 | 
				
			||||||
RAW_ENABLE = no             # Raw device
 | 
					RAW_ENABLE = no             # Raw device
 | 
				
			||||||
AUTO_SHIFT_ENABLE = no      # Auto Shift
 | 
					AUTO_SHIFT_ENABLE = no      # Auto Shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Custom RGB matrix handling
 | 
				
			||||||
 | 
					RGB_MATRIX_ENABLE = custom
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -119,3 +119,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
//#define NO_ACTION_ONESHOT
 | 
					//#define NO_ACTION_ONESHOT
 | 
				
			||||||
//#define NO_ACTION_MACRO
 | 
					//#define NO_ACTION_MACRO
 | 
				
			||||||
//#define NO_ACTION_FUNCTION
 | 
					//#define NO_ACTION_FUNCTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define RGB_MATRIX_KEYPRESSES
 | 
				
			||||||
 | 
					#define RGB_MATRIX_LED_PROCESS_LIMIT 15
 | 
				
			||||||
 | 
					#define RGB_MATRIX_LED_FLUSH_LIMIT 10
 | 
				
			||||||
 | 
					#define RGB_MATRIX_EXTRA_TOG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "config_led.h"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										144
									
								
								keyboards/massdrop/ctrl/config_led.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								keyboards/massdrop/ctrl/config_led.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,144 @@
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
 | 
					#include "ctrl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "led_matrix.h"
 | 
				
			||||||
 | 
					#include "rgb_matrix.h"
 | 
				
			||||||
 | 
					#include "config_led.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
 | 
				
			||||||
 | 
					  // KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS
 | 
				
			||||||
 | 
					  { { 0|(0<<4) }, { 7, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 0|(1<<4) }, { 31, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 0|(2<<4) }, { 43, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 0|(3<<4) }, { 55, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 0|(4<<4) }, { 67, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 0|(5<<4) }, { 85, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 0|(6<<4) }, { 97, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 0|(7<<4) }, { 109, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 6|(0<<4) }, { 121, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 6|(1<<4) }, { 139, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 6|(2<<4) }, { 151, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 6|(3<<4) }, { 163, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 6|(4<<4) }, { 175, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 6|(5<<4) }, { 193, 5 }, 0 },
 | 
				
			||||||
 | 
					  { { 6|(6<<4) }, { 205, 5 }, 1 },
 | 
				
			||||||
 | 
					  { { 6|(7<<4) }, { 217, 5 }, 0 },
 | 
				
			||||||
 | 
					  // KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP
 | 
				
			||||||
 | 
					  { { 1|(0<<4) }, { 7, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 1|(1<<4) }, { 19, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 1|(2<<4) }, { 31, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 1|(3<<4) }, { 43, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 1|(4<<4) }, { 55, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 1|(5<<4) }, { 67, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 1|(6<<4) }, { 79, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 1|(7<<4) }, { 91, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(0<<4) }, { 103, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(1<<4) }, { 115, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(2<<4) }, { 127, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(3<<4) }, { 139, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(4<<4) }, { 151, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(5<<4) }, { 169, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(6<<4) }, { 193, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 7|(7<<4) }, { 205, 20 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(7<<4) }, { 217, 20 }, 0 },
 | 
				
			||||||
 | 
					  // KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN
 | 
				
			||||||
 | 
					  { { 2|(0<<4) }, { 10, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 2|(1<<4) }, { 25, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 2|(2<<4) }, { 37, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 2|(3<<4) }, { 49, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 2|(4<<4) }, { 61, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 2|(5<<4) }, { 73, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 2|(6<<4) }, { 85, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 2|(7<<4) }, { 97, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(0<<4) }, { 109, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(1<<4) }, { 121, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(2<<4) }, { 133, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(3<<4) }, { 145, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(4<<4) }, { 157, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(5<<4) }, { 172, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(6<<4) }, { 193, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 8|(7<<4) }, { 205, 30 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(6<<4) }, { 217, 30 }, 0 },
 | 
				
			||||||
 | 
					  // KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT
 | 
				
			||||||
 | 
					  { { 3|(0<<4) }, { 11, 39 }, 1 },
 | 
				
			||||||
 | 
					  { { 3|(1<<4) }, { 28, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 3|(2<<4) }, { 40, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 3|(3<<4) }, { 52, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 3|(4<<4) }, { 64, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 3|(5<<4) }, { 76, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 3|(6<<4) }, { 88, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 3|(7<<4) }, { 100, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(0<<4) }, { 112, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(1<<4) }, { 124, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(2<<4) }, { 136, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(3<<4) }, { 148, 39 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(4<<4) }, { 168, 39 }, 0 },
 | 
				
			||||||
 | 
					  // KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP
 | 
				
			||||||
 | 
					  { { 4|(0<<4) }, { 14, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 4|(1<<4) }, { 34, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 4|(2<<4) }, { 46, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 4|(3<<4) }, { 58, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 4|(4<<4) }, { 70, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 4|(5<<4) }, { 82, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 4|(6<<4) }, { 94, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 4|(7<<4) }, { 106, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 10|(0<<4) }, { 118, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 10|(1<<4) }, { 130, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 10|(2<<4) }, { 142, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 10|(3<<4) }, { 165, 49 }, 0 },
 | 
				
			||||||
 | 
					  { { 9|(5<<4) }, { 205, 49 }, 0 },
 | 
				
			||||||
 | 
					  // KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
 | 
				
			||||||
 | 
					  { { 5|(0<<4) }, { 8, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 5|(1<<4) }, { 23, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 5|(2<<4) }, { 38, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 5|(3<<4) }, { 83, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 5|(4<<4) }, { 129, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 5|(5<<4) }, { 144, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 5|(6<<4) }, { 159, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 5|(7<<4) }, { 174, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 10|(4<<4) }, { 193, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 10|(5<<4) }, { 205, 59 }, 0 },
 | 
				
			||||||
 | 
					  { { 10|(6<<4) }, { 217, 59 }, 0 },
 | 
				
			||||||
 | 
					  // Underglow / Border
 | 
				
			||||||
 | 
					  { { 0xFF }, { 222, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 204, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 186, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 167, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 149, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 130, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 112, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 94, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 75, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 57, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 38, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 20, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 0, 64 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 0, 47 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 0, 32 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 0, 17 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 0, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 20, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 38, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 57, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 75, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 94, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 112, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 130, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 149, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 167, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 186, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 204, 0 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 222, 1 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 224, 17 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 224, 32 }, 0 },
 | 
				
			||||||
 | 
					  { { 0xFF }, { 224, 47 }, 0 },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USB_LED_INDICATOR_ENABLE
 | 
				
			||||||
 | 
					void rgb_matrix_indicators_kb(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  led_matrix_indicators();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif // USB_LED_INDICATOR_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -15,11 +15,11 @@ You should have received a copy of the GNU General Public License
 | 
				
			||||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _config_led_h_
 | 
					#pragma once
 | 
				
			||||||
#define _config_led_h_
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Define number of ISSI3733 drivers being used (1...16)
 | 
					//Define number of ISSI3733 drivers being used (1...16)
 | 
				
			||||||
#define ISSI3733_DRIVER_COUNT 2
 | 
					#define ISSI3733_DRIVER_COUNT 2
 | 
				
			||||||
 | 
					#define DRIVER_LED_TOTAL ISSI3733_LED_COUNT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
 | 
					//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
 | 
				
			||||||
#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
 | 
					#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
 | 
				
			||||||
| 
						 | 
					@ -30,22 +30,25 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
//Count of LED bodies
 | 
					//Count of LED bodies
 | 
				
			||||||
#define ISSI3733_LED_COUNT 119
 | 
					#define ISSI3733_LED_COUNT 119
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Default Global Current Register value (Default brightness 0 - 255)
 | 
					 | 
				
			||||||
#define ISSI3733_GCR_DEFAULT 128
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define LED_GCR_MAX                 165         //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
 | 
					#define LED_GCR_MAX                 165         //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
 | 
				
			||||||
#define LED_GCR_STEP                10          //GCR increment/decrement value
 | 
					#define LED_GCR_STEP                10          //GCR increment/decrement value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					#define ANIMATION_SPEED_STEP        1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BREATHE_STEP                1
 | 
				
			||||||
 | 
					#define BREATHE_MIN_STEP            0
 | 
				
			||||||
 | 
					#define BREATHE_MAX_STEP            255
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Default Global Current Register value (Default brightness 0 - 255)
 | 
				
			||||||
 | 
					#define ISSI3733_GCR_DEFAULT LED_GCR_MAX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Automatic power rollback and recovery
 | 
					//Automatic power rollback and recovery
 | 
				
			||||||
#define V5_HIGH                     2540        //5V high level (After low power detect, point at which LEDs are allowed to use more power )
 | 
					#define V5_HIGH                     2540        //5V high level (After low power detect, point at which LEDs are allowed to use more power )
 | 
				
			||||||
#define V5_LOW                      2480        //5V low level (LED power rolled back to stay above this limit)
 | 
					#define V5_LOW                      2480        //5V low level (LED power rolled back to stay above this limit)
 | 
				
			||||||
#define V5_CAT                      2200        //5V catastrophic level (Host USB port potential to shut down)
 | 
					#define V5_CAT                      2200        //5V catastrophic level (Host USB port potential to shut down)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ANIMATION_SPEED_STEP        1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define BREATHE_MIN_STEP            0
 | 
					 | 
				
			||||||
#define BREATHE_MAX_STEP            255
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//LED Mapping - More practically generated from a spreadsheet program
 | 
					//LED Mapping - More practically generated from a spreadsheet program
 | 
				
			||||||
//id: ID of the LED (Sync with PCB callouts)
 | 
					//id: ID of the LED (Sync with PCB callouts)
 | 
				
			||||||
//x: Physical X coordinate of LED (units do not matter)
 | 
					//x: Physical X coordinate of LED (units do not matter)
 | 
				
			||||||
| 
						 | 
					@ -187,5 +190,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
    #define USB_LED_COMPOSE_SCANCODE        255
 | 
					    #define USB_LED_COMPOSE_SCANCODE        255
 | 
				
			||||||
    #define USB_LED_KANA_SCANCODE           255
 | 
					    #define USB_LED_KANA_SCANCODE           255
 | 
				
			||||||
#endif //USB_LED_INDICATOR_ENABLE
 | 
					#endif //USB_LED_INDICATOR_ENABLE
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif //_config_led_h_
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,25 +1,13 @@
 | 
				
			||||||
#include QMK_KEYBOARD_H
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum ctrl_keycodes {
 | 
					enum ctrl_keycodes {
 | 
				
			||||||
    L_BRI = SAFE_RANGE, //LED Brightness Increase
 | 
					    U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
 | 
				
			||||||
    L_BRD,              //LED Brightness Decrease
 | 
					    U_T_AGCR,              //USB Toggle Automatic GCR control
 | 
				
			||||||
    L_PTN,              //LED Pattern Select Next
 | 
					    DBG_TOG,               //DEBUG Toggle On / Off
 | 
				
			||||||
    L_PTP,              //LED Pattern Select Previous
 | 
					    DBG_MTRX,              //DEBUG Toggle Matrix Prints
 | 
				
			||||||
    L_PSI,              //LED Pattern Speed Increase
 | 
					    DBG_KBD,               //DEBUG Toggle Keyboard Prints
 | 
				
			||||||
    L_PSD,              //LED Pattern Speed Decrease
 | 
					    DBG_MOU,               //DEBUG Toggle Mouse Prints
 | 
				
			||||||
    L_T_MD,             //LED Toggle Mode
 | 
					    MD_BOOT,               //Restart into bootloader after hold timeout
 | 
				
			||||||
    L_T_ONF,            //LED Toggle On / Off
 | 
					 | 
				
			||||||
    L_ON,               //LED On
 | 
					 | 
				
			||||||
    L_OFF,              //LED Off
 | 
					 | 
				
			||||||
    L_T_BR,             //LED Toggle Breath Effect
 | 
					 | 
				
			||||||
    L_T_PTD,            //LED Toggle Scrolling Pattern Direction
 | 
					 | 
				
			||||||
    U_T_AUTO,           //USB Extra Port Toggle Auto Detect / Always Active
 | 
					 | 
				
			||||||
    U_T_AGCR,           //USB Toggle Automatic GCR control
 | 
					 | 
				
			||||||
    DBG_TOG,            //DEBUG Toggle On / Off
 | 
					 | 
				
			||||||
    DBG_MTRX,           //DEBUG Toggle Matrix Prints
 | 
					 | 
				
			||||||
    DBG_KBD,            //DEBUG Toggle Keyboard Prints
 | 
					 | 
				
			||||||
    DBG_MOU,            //DEBUG Toggle Mouse Prints
 | 
					 | 
				
			||||||
    MD_BOOT,            //Restart into bootloader after hold timeout
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
| 
						 | 
					@ -36,21 +24,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, MO(1),   KC_APP,  KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT \
 | 
					        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, MO(1),   KC_APP,  KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    [1] = LAYOUT(
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_MUTE, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            KC_MUTE, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_MPLY, KC_MSTP, KC_VOLU, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   KC_MPLY, KC_MSTP, KC_VOLU, \
 | 
				
			||||||
        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_MPRV, KC_MNXT, KC_VOLD, \
 | 
					        _______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______,   KC_MPRV, KC_MNXT, KC_VOLD, \
 | 
				
			||||||
        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, L_T_MD,  L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                              KC_TRNS, \
 | 
					        _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS \
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    [X] = LAYOUT(
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                              KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS \
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -71,82 +59,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
    static uint32_t key_timer;
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (keycode) {
 | 
					    switch (keycode) {
 | 
				
			||||||
        case L_BRI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
					 | 
				
			||||||
                else gcr_desired += LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_BRD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
					 | 
				
			||||||
                else gcr_desired -= LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTN:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
					 | 
				
			||||||
                else led_animation_id++;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTP:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
					 | 
				
			||||||
                else led_animation_id--;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_MD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_lighting_mode++;
 | 
					 | 
				
			||||||
                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_ONF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = !led_enabled;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_ON:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 1;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_OFF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 0;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_BR:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_breathing = !led_animation_breathing;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) {
 | 
					 | 
				
			||||||
                    gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
					 | 
				
			||||||
                    breathe_dir = 1;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_PTD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_direction = !led_animation_direction;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case U_T_AUTO:
 | 
					        case U_T_AUTO:
 | 
				
			||||||
            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										226
									
								
								keyboards/massdrop/ctrl/keymaps/default_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								keyboards/massdrop/ctrl/keymaps/default_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,226 @@
 | 
				
			||||||
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum ctrl_keycodes {
 | 
				
			||||||
 | 
					    L_BRI = SAFE_RANGE, //LED Brightness Increase                                   //Working
 | 
				
			||||||
 | 
					    L_BRD,              //LED Brightness Decrease                                   //Working
 | 
				
			||||||
 | 
					    L_PTN,              //LED Pattern Select Next                                   //Working
 | 
				
			||||||
 | 
					    L_PTP,              //LED Pattern Select Previous                               //Working
 | 
				
			||||||
 | 
					    L_PSI,              //LED Pattern Speed Increase                                //Working
 | 
				
			||||||
 | 
					    L_PSD,              //LED Pattern Speed Decrease                                //Working
 | 
				
			||||||
 | 
					    L_T_MD,             //LED Toggle Mode                                           //Working
 | 
				
			||||||
 | 
					    L_T_ONF,            //LED Toggle On / Off                                       //Broken
 | 
				
			||||||
 | 
					    L_ON,               //LED On                                                    //Broken
 | 
				
			||||||
 | 
					    L_OFF,              //LED Off                                                   //Broken
 | 
				
			||||||
 | 
					    L_T_BR,             //LED Toggle Breath Effect                                  //Working
 | 
				
			||||||
 | 
					    L_T_PTD,            //LED Toggle Scrolling Pattern Direction                    //Working
 | 
				
			||||||
 | 
					    U_T_AGCR,           //USB Toggle Automatic GCR control                          //Working
 | 
				
			||||||
 | 
					    DBG_TOG,            //DEBUG Toggle On / Off                                     //
 | 
				
			||||||
 | 
					    DBG_MTRX,           //DEBUG Toggle Matrix Prints                                //
 | 
				
			||||||
 | 
					    DBG_KBD,            //DEBUG Toggle Keyboard Prints                              //
 | 
				
			||||||
 | 
					    DBG_MOU,            //DEBUG Toggle Mouse Prints                                 //
 | 
				
			||||||
 | 
					    MD_BOOT             //Restart into bootloader after hold timeout                //Working
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					keymap_config_t keymap_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    [0] = LAYOUT(
 | 
				
			||||||
 | 
					        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,             KC_PSCR, KC_SLCK, KC_PAUS, \
 | 
				
			||||||
 | 
					        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,   KC_INS,  KC_HOME, KC_PGUP, \
 | 
				
			||||||
 | 
					        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,   KC_DEL,  KC_END,  KC_PGDN, \
 | 
				
			||||||
 | 
					        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT, \
 | 
				
			||||||
 | 
					        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                              KC_UP, \
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, MO(1),   KC_APP,  KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            KC_MUTE, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   KC_MPLY, KC_MSTP, KC_VOLU, \
 | 
				
			||||||
 | 
					        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   _______, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______,   KC_MPRV, KC_MNXT, KC_VOLD, \
 | 
				
			||||||
 | 
					        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, L_T_MD,  L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs just one time when the keyboard initializes.
 | 
				
			||||||
 | 
					void matrix_init_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs constantly in the background, in a loop.
 | 
				
			||||||
 | 
					void matrix_scan_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MODS_SHIFT  (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
 | 
				
			||||||
 | 
					#define MODS_CTRL  (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
 | 
				
			||||||
 | 
					#define MODS_ALT  (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (keycode) {
 | 
				
			||||||
 | 
					        case L_BRI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
				
			||||||
 | 
					                else gcr_desired += LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_BRD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
				
			||||||
 | 
					                else gcr_desired -= LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTN:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
				
			||||||
 | 
					                else led_animation_id++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTP:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
				
			||||||
 | 
					                else led_animation_id--;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_MD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_lighting_mode++;
 | 
				
			||||||
 | 
					                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_ONF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = !led_enabled;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_ON:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 1;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_OFF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 0;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_BR:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_breathing = !led_animation_breathing;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) {
 | 
				
			||||||
 | 
					                    gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
				
			||||||
 | 
					                    breathe_dir = 1;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_PTD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_direction = !led_animation_direction;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case U_T_AGCR:
 | 
				
			||||||
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_TOG:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MTRX:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_KBD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MOU:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case MD_BOOT:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                key_timer = timer_read32();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if (timer_elapsed32(key_timer) >= 500) {
 | 
				
			||||||
 | 
					                    reset_keyboard();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            return true; //Process all other keycodes normally
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_instruction_t led_instructions[] = {
 | 
				
			||||||
 | 
					    //LEDs are normally inactive, no processing is performed on them
 | 
				
			||||||
 | 
					    //Flags are used in matching criteria for an LED to be active and indicate how to color it
 | 
				
			||||||
 | 
					    //Flags can be found in tmk_core/protocol/arm_atsam/led_matrix.h (prefixed with LED_FLAG_)
 | 
				
			||||||
 | 
					    //LED IDs can be found in config_led.h in the keyboard's directory
 | 
				
			||||||
 | 
					    //Examples are below
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //All LEDs use the user's selected pattern (this is the factory default)
 | 
				
			||||||
 | 
					     { .flags = LED_FLAG_USE_ROTATE_PATTERN },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Specific LEDs use the user's selected pattern while all others are off
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_ROTATE_PATTERN, .id0 = 0xFFFFFFFF, .id1 = 0xAAAAAAAA, .id2 = 0x55555555, .id3 = 0x11111111 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Specific LEDs use specified RGB values while all others are off
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 0xFF, .id1 = 0x00FF, .id2 = 0x0000FF00, .id3 = 0xFF000000, .r = 75, .g = 150, .b = 225 },
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //All LEDs use the user's selected pattern
 | 
				
			||||||
 | 
					    //On layer 1, all key LEDs (except the top row which keeps active pattern) are red while all edge LEDs are green
 | 
				
			||||||
 | 
					    //When layer 1 is active, key LEDs use red    (id0  32 -  17: 1111 1111 1111 1111 0000 0000 0000 0000 = 0xFFFF0000) (except top row 16 - 1)
 | 
				
			||||||
 | 
					    //When layer 1 is active, key LEDs use red    (id1  64 -  33: 1111 1111 1111 1111 1111 1111 1111 1111 = 0xFFFFFFFF)
 | 
				
			||||||
 | 
					    //When layer 1 is active, key LEDs use red    (id2  87 -  65: 0000 0000 0111 1111 1111 1111 1111 1111 = 0x007FFFFF)
 | 
				
			||||||
 | 
					    //When layer 1 is active, edge LEDs use green (id2  95 -  88: 1111 1111 1000 0000 0000 0000 0000 0000 = 0xFF800000)
 | 
				
			||||||
 | 
					    //When layer 1 is active, edge LEDs use green (id3 119 -  96: 0000 0000 1111 1111 1111 1111 1111 1111 = 0x00FFFFFF)
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_USE_ROTATE_PATTERN },
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_MATCH_LAYER | LED_FLAG_USE_RGB, .id0 = 0xFFFF0000, .id1 = 0xFFFFFFFF, .id2 = 0x007FFFFF, .r = 255, .layer = 1 },
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_MATCH_LAYER | LED_FLAG_USE_RGB, .id2 = 0xFF800000, .id3 = 0x00FFFFFF, .g = 127, .layer = 1 },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //All key LEDs use red while edge LEDs use the active pattern
 | 
				
			||||||
 | 
					    //All key LEDs use red     (id0  32 -   1: 1111 1111 1111 1111 1111 1111 1111 1111 = 0xFFFFFFFF)
 | 
				
			||||||
 | 
					    //All key LEDs use red     (id1  64 -  33: 1111 1111 1111 1111 1111 1111 1111 1111 = 0xFFFFFFFF)
 | 
				
			||||||
 | 
					    //All key LEDs use red     (id2  87 -  65: 0000 0000 0111 1111 1111 1111 1111 1111 = 0x007FFFFF)
 | 
				
			||||||
 | 
					    //Edge uses active pattern (id2  95 -  88: 1111 1111 1000 0000 0000 0000 0000 0000 = 0xFF800000)
 | 
				
			||||||
 | 
					    //Edge uses active pattern (id3 119 -  96: 0000 0000 1111 1111 1111 1111 1111 1111 = 0x00FFFFFF)
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 0xFFFFFFFF, .id1 = 0xFFFFFFFF, .id2 = 0x007FFFFF, .r = 255 },
 | 
				
			||||||
 | 
					    // { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_ROTATE_PATTERN , .id2 = 0xFF800000, .id3 = 0x00FFFFFF },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //end must be set to 1 to indicate end of instruction set
 | 
				
			||||||
 | 
					     { .end = 1 }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										2
									
								
								keyboards/massdrop/ctrl/keymaps/default_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/massdrop/ctrl/keymaps/default_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					# This keymap requires Massdrop Configurator support
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
| 
						 | 
					@ -1,25 +1,13 @@
 | 
				
			||||||
#include QMK_KEYBOARD_H
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum ctrl_keycodes {
 | 
					enum ctrl_keycodes {
 | 
				
			||||||
    L_BRI = SAFE_RANGE, //LED Brightness Increase
 | 
					    U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
 | 
				
			||||||
    L_BRD,              //LED Brightness Decrease
 | 
					    U_T_AGCR,              //USB Toggle Automatic GCR control
 | 
				
			||||||
    L_PTN,              //LED Pattern Select Next
 | 
					    DBG_TOG,               //DEBUG Toggle On / Off
 | 
				
			||||||
    L_PTP,              //LED Pattern Select Previous
 | 
					    DBG_MTRX,              //DEBUG Toggle Matrix Prints
 | 
				
			||||||
    L_PSI,              //LED Pattern Speed Increase
 | 
					    DBG_KBD,               //DEBUG Toggle Keyboard Prints
 | 
				
			||||||
    L_PSD,              //LED Pattern Speed Decrease
 | 
					    DBG_MOU,               //DEBUG Toggle Mouse Prints
 | 
				
			||||||
    L_T_MD,             //LED Toggle Mode
 | 
					    MD_BOOT,               //Restart into bootloader after hold timeout
 | 
				
			||||||
    L_T_ONF,            //LED Toggle On / Off
 | 
					 | 
				
			||||||
    L_ON,               //LED On
 | 
					 | 
				
			||||||
    L_OFF,              //LED Off
 | 
					 | 
				
			||||||
    L_T_BR,             //LED Toggle Breath Effect
 | 
					 | 
				
			||||||
    L_T_PTD,            //LED Toggle Scrolling Pattern Direction
 | 
					 | 
				
			||||||
    U_T_AUTO,           //USB Extra Port Toggle Auto Detect / Always Active
 | 
					 | 
				
			||||||
    U_T_AGCR,           //USB Toggle Automatic GCR control
 | 
					 | 
				
			||||||
    DBG_TOG,            //DEBUG Toggle On / Off
 | 
					 | 
				
			||||||
    DBG_MTRX,           //DEBUG Toggle Matrix Prints
 | 
					 | 
				
			||||||
    DBG_KBD,            //DEBUG Toggle Keyboard Prints
 | 
					 | 
				
			||||||
    DBG_MOU,            //DEBUG Toggle Mouse Prints
 | 
					 | 
				
			||||||
    MD_BOOT,            //Restart into bootloader after hold timeout
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
| 
						 | 
					@ -36,21 +24,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
        KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPC,                             KC_RGUI, MO(1),   KC_APP,  KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT \
 | 
					        KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPC,                             KC_RGUI, MO(1),   KC_APP,  KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    [1] = LAYOUT(
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_MUTE, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            KC_MUTE, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_MPLY, KC_MSTP, KC_VOLU, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   KC_MPLY, KC_MSTP, KC_VOLU, \
 | 
				
			||||||
        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_MPRV, KC_MNXT, KC_VOLD, \
 | 
					        _______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______,   KC_MPRV, KC_MNXT, KC_VOLD, \
 | 
				
			||||||
        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, L_T_MD,  L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                              KC_TRNS, \
 | 
					        _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS \
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    [X] = LAYOUT(
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                              KC_TRNS, \
 | 
					        _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS \
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -71,82 +59,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
    static uint32_t key_timer;
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (keycode) {
 | 
					    switch (keycode) {
 | 
				
			||||||
        case L_BRI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
					 | 
				
			||||||
                else gcr_desired += LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_BRD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
					 | 
				
			||||||
                else gcr_desired -= LED_GCR_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTN:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
					 | 
				
			||||||
                else led_animation_id++;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PTP:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
					 | 
				
			||||||
                else led_animation_id--;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSI:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_PSD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
					 | 
				
			||||||
                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_MD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_lighting_mode++;
 | 
					 | 
				
			||||||
                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_ONF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = !led_enabled;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_ON:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 1;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_OFF:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_enabled = 0;
 | 
					 | 
				
			||||||
                I2C3733_Control_Set(led_enabled);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_BR:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_breathing = !led_animation_breathing;
 | 
					 | 
				
			||||||
                if (led_animation_breathing) {
 | 
					 | 
				
			||||||
                    gcr_breathe = gcr_desired;
 | 
					 | 
				
			||||||
                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
					 | 
				
			||||||
                    breathe_dir = 1;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case L_T_PTD:
 | 
					 | 
				
			||||||
            if (record->event.pressed) {
 | 
					 | 
				
			||||||
                led_animation_direction = !led_animation_direction;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        case U_T_AUTO:
 | 
					        case U_T_AUTO:
 | 
				
			||||||
            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										196
									
								
								keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,196 @@
 | 
				
			||||||
 | 
					#include QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum ctrl_keycodes {
 | 
				
			||||||
 | 
					    L_BRI = SAFE_RANGE, //LED Brightness Increase                                   //Working
 | 
				
			||||||
 | 
					    L_BRD,              //LED Brightness Decrease                                   //Working
 | 
				
			||||||
 | 
					    L_PTN,              //LED Pattern Select Next                                   //Working
 | 
				
			||||||
 | 
					    L_PTP,              //LED Pattern Select Previous                               //Working
 | 
				
			||||||
 | 
					    L_PSI,              //LED Pattern Speed Increase                                //Working
 | 
				
			||||||
 | 
					    L_PSD,              //LED Pattern Speed Decrease                                //Working
 | 
				
			||||||
 | 
					    L_T_MD,             //LED Toggle Mode                                           //Working
 | 
				
			||||||
 | 
					    L_T_ONF,            //LED Toggle On / Off                                       //Broken
 | 
				
			||||||
 | 
					    L_ON,               //LED On                                                    //Broken
 | 
				
			||||||
 | 
					    L_OFF,              //LED Off                                                   //Broken
 | 
				
			||||||
 | 
					    L_T_BR,             //LED Toggle Breath Effect                                  //Working
 | 
				
			||||||
 | 
					    L_T_PTD,            //LED Toggle Scrolling Pattern Direction                    //Working
 | 
				
			||||||
 | 
					    U_T_AGCR,           //USB Toggle Automatic GCR control                          //Working
 | 
				
			||||||
 | 
					    DBG_TOG,            //DEBUG Toggle On / Off                                     //
 | 
				
			||||||
 | 
					    DBG_MTRX,           //DEBUG Toggle Matrix Prints                                //
 | 
				
			||||||
 | 
					    DBG_KBD,            //DEBUG Toggle Keyboard Prints                              //
 | 
				
			||||||
 | 
					    DBG_MOU,            //DEBUG Toggle Mouse Prints                                 //
 | 
				
			||||||
 | 
					    MD_BOOT             //Restart into bootloader after hold timeout                //Working
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					keymap_config_t keymap_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    [0] = LAYOUT(
 | 
				
			||||||
 | 
					        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,             KC_PSCR, KC_SLCK, KC_PAUS, \
 | 
				
			||||||
 | 
					        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,   KC_INS,  KC_HOME, KC_PGUP, \
 | 
				
			||||||
 | 
					        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,   KC_DEL,  KC_END,  KC_PGDN, \
 | 
				
			||||||
 | 
					        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT, \
 | 
				
			||||||
 | 
					        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                              KC_UP, \
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPC,                             KC_RGUI, MO(1),   KC_APP,  KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    [1] = LAYOUT(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            KC_MUTE, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   KC_MPLY, KC_MSTP, KC_VOLU, \
 | 
				
			||||||
 | 
					        L_T_BR,  L_PSD,   L_BRI,   L_PSI,   _______, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______,   KC_MPRV, KC_MNXT, KC_VOLD, \
 | 
				
			||||||
 | 
					        L_T_PTD, L_PTP,   L_BRD,   L_PTN,   _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, L_T_MD,  L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    [X] = LAYOUT(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
 | 
				
			||||||
 | 
					        _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs just one time when the keyboard initializes.
 | 
				
			||||||
 | 
					void matrix_init_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs constantly in the background, in a loop.
 | 
				
			||||||
 | 
					void matrix_scan_user(void) {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MODS_SHIFT  (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
 | 
				
			||||||
 | 
					#define MODS_CTRL  (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
 | 
				
			||||||
 | 
					#define MODS_ALT  (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					    static uint32_t key_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (keycode) {
 | 
				
			||||||
 | 
					        case L_BRI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
 | 
				
			||||||
 | 
					                else gcr_desired += LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_BRD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
 | 
				
			||||||
 | 
					                else gcr_desired -= LED_GCR_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTN:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
 | 
				
			||||||
 | 
					                else led_animation_id++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PTP:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
 | 
				
			||||||
 | 
					                else led_animation_id--;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSI:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed += ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_PSD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_speed -= ANIMATION_SPEED_STEP;
 | 
				
			||||||
 | 
					                if (led_animation_speed < 0) led_animation_speed = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_MD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_lighting_mode++;
 | 
				
			||||||
 | 
					                if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_ONF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = !led_enabled;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_ON:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 1;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_OFF:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_enabled = 0;
 | 
				
			||||||
 | 
					                I2C3733_Control_Set(led_enabled);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_BR:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_breathing = !led_animation_breathing;
 | 
				
			||||||
 | 
					                if (led_animation_breathing) {
 | 
				
			||||||
 | 
					                    gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					                    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
				
			||||||
 | 
					                    breathe_dir = 1;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case L_T_PTD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                led_animation_direction = !led_animation_direction;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case U_T_AGCR:
 | 
				
			||||||
 | 
					            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_TOG:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MTRX:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_KBD:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case DBG_MOU:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        case MD_BOOT:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                key_timer = timer_read32();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if (timer_elapsed32(key_timer) >= 500) {
 | 
				
			||||||
 | 
					                    reset_keyboard();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            return true; //Process all other keycodes normally
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					led_instruction_t led_instructions[] = {
 | 
				
			||||||
 | 
					    //Please see ../default_md/keymap.c for examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //All LEDs use the user's selected pattern (this is the factory default)
 | 
				
			||||||
 | 
					     { .flags = LED_FLAG_USE_ROTATE_PATTERN },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //end must be set to 1 to indicate end of instruction set
 | 
				
			||||||
 | 
					     { .end = 1 }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										2
									
								
								keyboards/massdrop/ctrl/keymaps/mac_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/massdrop/ctrl/keymaps/mac_md/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					# This keymap requires Massdrop Configurator support
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					# THIS KEYMAP IS BROKEN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The CTRL and ALT have both been switched to using the QMK RGB Matrix system,
 | 
				
			||||||
 | 
					rendering any custom effects that used the old, custom Massdrop lighting system,
 | 
				
			||||||
 | 
					BROKEN.
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern issi3733_led_t *lede;
 | 
					extern issi3733_led_t *lede;
 | 
				
			||||||
extern issi3733_led_t led_map[];
 | 
					extern issi3733_led_t led_map[];
 | 
				
			||||||
extern led_disp_t disp;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum ctrl_keycodes {
 | 
					enum ctrl_keycodes {
 | 
				
			||||||
    L_BRI = SAFE_RANGE, //LED Brightness Increase
 | 
					    L_BRI = SAFE_RANGE, //LED Brightness Increase
 | 
				
			||||||
| 
						 | 
					@ -238,8 +237,6 @@ void led_matrix_run(void)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        led_cur = led_map;
 | 
					        led_cur = led_map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        disp.frame += 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        breathe_mult = 1;
 | 
					        breathe_mult = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (led_animation_breathing)
 | 
					        if (led_animation_breathing)
 | 
				
			||||||
| 
						 | 
					@ -314,7 +311,7 @@ void led_matrix_run(void)
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                float pomod;
 | 
					                float pomod;
 | 
				
			||||||
                pomod = (float)(disp.frame % (uint32_t)(1000.0f / led_animation_speed)) / 10.0f * led_animation_speed;
 | 
					                pomod = (float)(g_tick % (uint32_t)(1000.0f / led_animation_speed)) / 10.0f * led_animation_speed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //Add in any moving effects
 | 
					                //Add in any moving effects
 | 
				
			||||||
                if ((!led_animation_direction && f[fcur].ef & EF_SCR_R) || (led_animation_direction && (f[fcur].ef & EF_SCR_L)))
 | 
					                if ((!led_animation_direction && f[fcur].ef & EF_SCR_R) || (led_animation_direction && (f[fcur].ef & EF_SCR_L)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					# This keymap requires Massdrop Configurator support
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
| 
						 | 
					@ -1,120 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
Copyright 2018 Massdrop Inc.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 "ctrl.h"
 | 
					 | 
				
			||||||
#include "led_matrix.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Teal <-> Salmon
 | 
					 | 
				
			||||||
led_setup_t leds_teal_salmon[] = {
 | 
					 | 
				
			||||||
    { .hs = 0,  .he = 33,  .rs = 24,  .re = 24,  .gs = 215, .ge = 215, .bs = 204, .be = 204, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .hs = 33, .he = 66,  .rs = 24,  .re = 255, .gs = 215, .ge = 114, .bs = 204, .be = 118, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .hs = 66, .he = 100, .rs = 255, .re = 255, .gs = 114, .ge = 114, .bs = 118, .be = 118, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Yellow
 | 
					 | 
				
			||||||
led_setup_t leds_yellow[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Off
 | 
					 | 
				
			||||||
led_setup_t leds_off[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Red
 | 
					 | 
				
			||||||
led_setup_t leds_red[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Green
 | 
					 | 
				
			||||||
led_setup_t leds_green[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Blue
 | 
					 | 
				
			||||||
led_setup_t leds_blue[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//White
 | 
					 | 
				
			||||||
led_setup_t leds_white[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//White with moving red stripe
 | 
					 | 
				
			||||||
led_setup_t leds_white_with_red_stripe[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 15, .rs = 0, .re = 0, .gs = 0, .ge = 255, .bs = 0, .be = 255, .ef = EF_SCR_R | EF_SUBTRACT },
 | 
					 | 
				
			||||||
    { .hs = 15, .he = 30, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 0, .ef = EF_SCR_R | EF_SUBTRACT },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Black with moving red stripe
 | 
					 | 
				
			||||||
led_setup_t leds_black_with_red_stripe[] = {
 | 
					 | 
				
			||||||
    { .hs = 0, .he = 15, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
 | 
					 | 
				
			||||||
    { .hs = 15, .he = 30, .rs = 255, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Rainbow no scrolling
 | 
					 | 
				
			||||||
led_setup_t leds_rainbow_ns[] = {
 | 
					 | 
				
			||||||
    { .hs = 0,      .he = 16.67,  .rs = 255, .re = 255, .gs = 0,   .ge = 255, .bs = 0,   .be = 0,   .ef = EF_OVER },
 | 
					 | 
				
			||||||
    { .hs = 16.67,  .he = 33.33,  .rs = 255, .re = 0,   .gs = 255, .ge = 255, .bs = 0,   .be = 0,   .ef = EF_OVER },
 | 
					 | 
				
			||||||
    { .hs = 33.33,  .he = 50,     .rs = 0,   .re = 0,   .gs = 255, .ge = 255, .bs = 0,   .be = 255, .ef = EF_OVER },
 | 
					 | 
				
			||||||
    { .hs = 50,     .he = 66.67,  .rs = 0,   .re = 0,   .gs = 255, .ge = 0,   .bs = 255, .be = 255, .ef = EF_OVER },
 | 
					 | 
				
			||||||
    { .hs = 66.67,  .he = 83.33,  .rs = 0,   .re = 255, .gs = 0,   .ge = 0,   .bs = 255, .be = 255, .ef = EF_OVER },
 | 
					 | 
				
			||||||
    { .hs = 83.33,  .he = 100,    .rs = 255, .re = 255, .gs = 0,   .ge = 0,   .bs = 255, .be = 0,   .ef = EF_OVER },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Rainbow scrolling
 | 
					 | 
				
			||||||
led_setup_t leds_rainbow_s[] = {
 | 
					 | 
				
			||||||
    { .hs = 0,      .he = 16.67,  .rs = 255, .re = 255, .gs = 0,   .ge = 255, .bs = 0,   .be = 0,   .ef = EF_OVER | EF_SCR_R },
 | 
					 | 
				
			||||||
    { .hs = 16.67,  .he = 33.33,  .rs = 255, .re = 0,   .gs = 255, .ge = 255, .bs = 0,   .be = 0,   .ef = EF_OVER | EF_SCR_R },
 | 
					 | 
				
			||||||
    { .hs = 33.33,  .he = 50,     .rs = 0,   .re = 0,   .gs = 255, .ge = 255, .bs = 0,   .be = 255, .ef = EF_OVER | EF_SCR_R },
 | 
					 | 
				
			||||||
    { .hs = 50,     .he = 66.67,  .rs = 0,   .re = 0,   .gs = 255, .ge = 0,   .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
 | 
					 | 
				
			||||||
    { .hs = 66.67,  .he = 83.33,  .rs = 0,   .re = 255, .gs = 0,   .ge = 0,   .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
 | 
					 | 
				
			||||||
    { .hs = 83.33,  .he = 100,    .rs = 255, .re = 255, .gs = 0,   .ge = 0,   .bs = 255, .be = 0,   .ef = EF_OVER | EF_SCR_R },
 | 
					 | 
				
			||||||
    { .end = 1 },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//Add new LED animations here using one from above as example
 | 
					 | 
				
			||||||
//The last entry must be { .end = 1 }
 | 
					 | 
				
			||||||
//Add the new animation name to the list below following its format
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void *led_setups[] = {
 | 
					 | 
				
			||||||
    leds_rainbow_s,
 | 
					 | 
				
			||||||
    leds_rainbow_ns,
 | 
					 | 
				
			||||||
    leds_teal_salmon,
 | 
					 | 
				
			||||||
    leds_yellow,
 | 
					 | 
				
			||||||
    leds_red,
 | 
					 | 
				
			||||||
    leds_green,
 | 
					 | 
				
			||||||
    leds_blue,
 | 
					 | 
				
			||||||
    leds_white,
 | 
					 | 
				
			||||||
    leds_white_with_red_stripe,
 | 
					 | 
				
			||||||
    leds_black_with_red_stripe,
 | 
					 | 
				
			||||||
    leds_off
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
# project specific files
 | 
					# project specific files
 | 
				
			||||||
SRC = led_programs.c
 | 
					SRC = matrix.c
 | 
				
			||||||
SRC += matrix.c
 | 
					SRC += config_led.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#For platform and packs
 | 
					#For platform and packs
 | 
				
			||||||
ARM_ATSAM = SAMD51J18A
 | 
					ARM_ATSAM = SAMD51J18A
 | 
				
			||||||
| 
						 | 
					@ -31,3 +31,6 @@ HD44780_ENABLE = no         # Enable support for HD44780 based LCDs (+400)
 | 
				
			||||||
VIRTSER_ENABLE = no         # USB Serial Driver
 | 
					VIRTSER_ENABLE = no         # USB Serial Driver
 | 
				
			||||||
RAW_ENABLE = no             # Raw device
 | 
					RAW_ENABLE = no             # Raw device
 | 
				
			||||||
AUTO_SHIFT_ENABLE = no      # Auto Shift
 | 
					AUTO_SHIFT_ENABLE = no      # Auto Shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Custom RGB matrix handling
 | 
				
			||||||
 | 
					RGB_MATRIX_ENABLE = custom
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,11 +142,28 @@ void rgb_matrix_update_pwm_buffers(void) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) {
 | 
					void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) {
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_EXTRA_TOG
 | 
				
			||||||
 | 
					  const bool is_key = g_rgb_leds[index].matrix_co.raw != 0xff;
 | 
				
			||||||
 | 
					  if (
 | 
				
			||||||
 | 
					    (rgb_matrix_config.enable == RGB_ZONE_KEYS && !is_key) ||
 | 
				
			||||||
 | 
					    (rgb_matrix_config.enable == RGB_ZONE_UNDER && is_key)
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
 | 
					    rgb_matrix_driver.set_color(index, 0, 0, 0);
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  rgb_matrix_driver.set_color(index, red, green, blue);
 | 
					  rgb_matrix_driver.set_color(index, red, green, blue);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) {
 | 
					void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) {
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_EXTRA_TOG
 | 
				
			||||||
 | 
					  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
 | 
				
			||||||
 | 
					      rgb_matrix_set_color(i, red, green, blue);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
  rgb_matrix_driver.set_color_all(red, green, blue);
 | 
					  rgb_matrix_driver.set_color_all(red, green, blue);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
 | 
					bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
| 
						 | 
					@ -494,7 +511,7 @@ void rgb_matrix_set_suspend_state(bool state) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void rgb_matrix_toggle(void) {
 | 
					void rgb_matrix_toggle(void) {
 | 
				
			||||||
  rgb_matrix_config.enable ^= 1;
 | 
					  rgb_matrix_config.enable++;
 | 
				
			||||||
  if (!rgb_matrix_config.enable) {
 | 
					  if (!rgb_matrix_config.enable) {
 | 
				
			||||||
    rgb_task_state = STARTING;
 | 
					    rgb_task_state = STARTING;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,11 +73,18 @@ typedef struct PACKED {
 | 
				
			||||||
	uint8_t modifier:1;
 | 
						uint8_t modifier:1;
 | 
				
			||||||
} rgb_led;
 | 
					} rgb_led;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef enum {
 | 
				
			||||||
 | 
					  RGB_ZONE_OFF = 0,
 | 
				
			||||||
 | 
					  RGB_ZONE_ALL,
 | 
				
			||||||
 | 
					  RGB_ZONE_KEYS,
 | 
				
			||||||
 | 
					  RGB_ZONE_UNDER,
 | 
				
			||||||
 | 
					} rgb_zone_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef union {
 | 
					typedef union {
 | 
				
			||||||
  uint32_t raw;
 | 
					  uint32_t raw;
 | 
				
			||||||
  struct PACKED {
 | 
					  struct PACKED {
 | 
				
			||||||
    bool     enable  :1;
 | 
					    uint8_t  enable  :2;
 | 
				
			||||||
    uint8_t  mode    :7;
 | 
					    uint8_t  mode    :6;
 | 
				
			||||||
    uint8_t  hue     :8;
 | 
					    uint8_t  hue     :8;
 | 
				
			||||||
    uint8_t  sat     :8;
 | 
					    uint8_t  sat     :8;
 | 
				
			||||||
    uint8_t  val     :8;
 | 
					    uint8_t  val     :8;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,9 @@ void suspend_power_down_kb(void) {
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void suspend_power_down(void)
 | 
					void suspend_power_down(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
    I2C3733_Control_Set(0); //Disable LED driver
 | 
					    I2C3733_Control_Set(0); //Disable LED driver
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    suspend_power_down_kb();
 | 
					    suspend_power_down_kb();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -75,10 +77,9 @@ void suspend_wakeup_init_kb(void) {
 | 
				
			||||||
 * FIXME: needs doc
 | 
					 * FIXME: needs doc
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void suspend_wakeup_init(void) {
 | 
					void suspend_wakeup_init(void) {
 | 
				
			||||||
    /* If LEDs are set to enabled, enable the hardware */
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
    if (led_enabled) {
 | 
					    I2C3733_Control_Set(1);
 | 
				
			||||||
        I2C3733_Control_Set(1);
 | 
					#endif
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    suspend_wakeup_init_kb();
 | 
					    suspend_wakeup_init_kb();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,10 @@ SRC += $(ARM_ATSAM_DIR)/adc.c
 | 
				
			||||||
SRC += $(ARM_ATSAM_DIR)/clks.c
 | 
					SRC += $(ARM_ATSAM_DIR)/clks.c
 | 
				
			||||||
SRC += $(ARM_ATSAM_DIR)/d51_util.c
 | 
					SRC += $(ARM_ATSAM_DIR)/d51_util.c
 | 
				
			||||||
SRC += $(ARM_ATSAM_DIR)/i2c_master.c
 | 
					SRC += $(ARM_ATSAM_DIR)/i2c_master.c
 | 
				
			||||||
SRC += $(ARM_ATSAM_DIR)/led_matrix.c
 | 
					ifeq ($(RGB_MATRIX_ENABLE),custom)
 | 
				
			||||||
 | 
					  SRC += $(ARM_ATSAM_DIR)/led_matrix_programs.c
 | 
				
			||||||
 | 
					  SRC += $(ARM_ATSAM_DIR)/led_matrix.c
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
SRC += $(ARM_ATSAM_DIR)/main_arm_atsam.c
 | 
					SRC += $(ARM_ATSAM_DIR)/main_arm_atsam.c
 | 
				
			||||||
SRC += $(ARM_ATSAM_DIR)/spi.c
 | 
					SRC += $(ARM_ATSAM_DIR)/spi.c
 | 
				
			||||||
SRC += $(ARM_ATSAM_DIR)/startup.c
 | 
					SRC += $(ARM_ATSAM_DIR)/startup.c
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#ifndef MD_BOOTLOADER
 | 
					#ifndef MD_BOOTLOADER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "main_arm_atsam.h"
 | 
					#include "main_arm_atsam.h"
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
#include "led_matrix.h"
 | 
					#include "led_matrix.h"
 | 
				
			||||||
 | 
					#include "rgb_matrix.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#include "issi3733_driver.h"
 | 
					#include "issi3733_driver.h"
 | 
				
			||||||
#include "./usb/compiler.h"
 | 
					#include "./usb/compiler.h"
 | 
				
			||||||
#include "./usb/udc.h"
 | 
					#include "./usb/udc.h"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "arm_atsam_protocol.h"
 | 
					#include "arm_atsam_protocol.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef MD_BOOTLOADER
 | 
					#if !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ static uint8_t dma_sendbuf[I2C_DMA_MAX_SEND]; //Data being written to I2C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
volatile uint8_t i2c_led_q_running;
 | 
					volatile uint8_t i2c_led_q_running;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif //MD_BOOTLOADER
 | 
					#endif // !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void i2c0_init(void)
 | 
					void i2c0_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@ void i2c0_stop(void)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef MD_BOOTLOADER
 | 
					#if !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
 | 
				
			||||||
void i2c1_init(void)
 | 
					void i2c1_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DBGC(DC_I2C1_INIT_BEGIN);
 | 
					    DBGC(DC_I2C1_INIT_BEGIN);
 | 
				
			||||||
| 
						 | 
					@ -583,4 +583,4 @@ uint8_t i2c_led_q_run(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 1;
 | 
					    return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif //MD_BOOTLOADER
 | 
					#endif // !defined(MD_BOOTLOADER) && defined(RGB_MATRIX_ENABLE)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,9 +17,19 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "arm_atsam_protocol.h"
 | 
					#include "arm_atsam_protocol.h"
 | 
				
			||||||
#include "tmk_core/common/led.h"
 | 
					#include "tmk_core/common/led.h"
 | 
				
			||||||
 | 
					#include "rgb_matrix.h"
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <math.h>
 | 
					#include <math.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					__attribute__((weak))
 | 
				
			||||||
 | 
					led_instruction_t led_instructions[] = { { .end = 1 } };
 | 
				
			||||||
 | 
					static void led_matrix_massdrop_config_override(int i);
 | 
				
			||||||
 | 
					#endif // USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern rgb_config_t rgb_matrix_config;
 | 
				
			||||||
 | 
					extern rgb_counters_t g_rgb_counters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SERCOM1_0_Handler( void )
 | 
					void SERCOM1_0_Handler( void )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (SERCOM1->I2CM.INTFLAG.bit.ERROR)
 | 
					    if (SERCOM1->I2CM.INTFLAG.bit.ERROR)
 | 
				
			||||||
| 
						 | 
					@ -51,14 +61,17 @@ void DMAC_0_Handler( void )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
issi3733_driver_t issidrv[ISSI3733_DRIVER_COUNT];
 | 
					issi3733_driver_t issidrv[ISSI3733_DRIVER_COUNT];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
issi3733_led_t led_map[ISSI3733_LED_COUNT+1] = ISSI3733_LED_MAP;
 | 
					issi3733_led_t led_map[ISSI3733_LED_COUNT] = ISSI3733_LED_MAP;
 | 
				
			||||||
issi3733_led_t *lede = led_map + ISSI3733_LED_COUNT; //End pointer of mapping
 | 
					RGB led_buffer[ISSI3733_LED_COUNT];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t gcr_desired;
 | 
					uint8_t gcr_desired;
 | 
				
			||||||
uint8_t gcr_breathe;
 | 
					 | 
				
			||||||
uint8_t gcr_use;
 | 
					 | 
				
			||||||
uint8_t gcr_actual;
 | 
					uint8_t gcr_actual;
 | 
				
			||||||
uint8_t gcr_actual_last;
 | 
					uint8_t gcr_actual_last;
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					uint8_t gcr_breathe;
 | 
				
			||||||
 | 
					float breathe_mult;
 | 
				
			||||||
 | 
					float pomod;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ACT_GCR_NONE    0
 | 
					#define ACT_GCR_NONE    0
 | 
				
			||||||
#define ACT_GCR_INC     1
 | 
					#define ACT_GCR_INC     1
 | 
				
			||||||
| 
						 | 
					@ -73,11 +86,14 @@ static uint8_t v_5v_cat_hit;
 | 
				
			||||||
void gcr_compute(void)
 | 
					void gcr_compute(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint8_t action = ACT_GCR_NONE;
 | 
					    uint8_t action = ACT_GCR_NONE;
 | 
				
			||||||
 | 
					    uint8_t gcr_use = gcr_desired;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
    if (led_animation_breathing)
 | 
					    if (led_animation_breathing)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        gcr_use = gcr_breathe;
 | 
					        gcr_use = gcr_breathe;
 | 
				
			||||||
    else
 | 
					    }
 | 
				
			||||||
        gcr_use = gcr_desired;
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //If the 5v takes a catastrophic hit, disable the LED drivers briefly, assert auto gcr mode, min gcr and let the auto take over
 | 
					    //If the 5v takes a catastrophic hit, disable the LED drivers briefly, assert auto gcr mode, min gcr and let the auto take over
 | 
				
			||||||
    if (v_5v < V5_CAT)
 | 
					    if (v_5v < V5_CAT)
 | 
				
			||||||
| 
						 | 
					@ -151,6 +167,7 @@ void gcr_compute(void)
 | 
				
			||||||
            gcr_actual -= LED_GCR_STEP_AUTO;
 | 
					            gcr_actual -= LED_GCR_STEP_AUTO;
 | 
				
			||||||
            gcr_min_counter = 0;
 | 
					            gcr_min_counter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
            //If breathe mode is active, the top end can fluctuate if the host can not supply enough current
 | 
					            //If breathe mode is active, the top end can fluctuate if the host can not supply enough current
 | 
				
			||||||
            //So set the breathe GCR to where it becomes stable
 | 
					            //So set the breathe GCR to where it becomes stable
 | 
				
			||||||
            if (led_animation_breathing == 1)
 | 
					            if (led_animation_breathing == 1)
 | 
				
			||||||
| 
						 | 
					@ -160,12 +177,11 @@ void gcr_compute(void)
 | 
				
			||||||
                //    and the same would happen maybe one or two more times. Therefore I'm favoring
 | 
					                //    and the same would happen maybe one or two more times. Therefore I'm favoring
 | 
				
			||||||
                //    powering through one full breathe and letting gcr settle completely
 | 
					                //    powering through one full breathe and letting gcr settle completely
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
led_disp_t disp;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void issi3733_prepare_arrays(void)
 | 
					void issi3733_prepare_arrays(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    memset(issidrv,0,sizeof(issi3733_driver_t) * ISSI3733_DRIVER_COUNT);
 | 
					    memset(issidrv,0,sizeof(issi3733_driver_t) * ISSI3733_DRIVER_COUNT);
 | 
				
			||||||
| 
						 | 
					@ -178,230 +194,294 @@ void issi3733_prepare_arrays(void)
 | 
				
			||||||
        issidrv[i].addr = addrs[i];
 | 
					        issidrv[i].addr = addrs[i];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    issi3733_led_t *cur = led_map;
 | 
					    for (uint8_t i = 0; i < ISSI3733_LED_COUNT; i++)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (cur < lede)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        //BYTE: 1 + (SW-1)*16 + (CS-1)
 | 
					        //BYTE: 1 + (SW-1)*16 + (CS-1)
 | 
				
			||||||
        cur->rgb.g = issidrv[cur->adr.drv-1].pwm + 1 + ((cur->adr.swg-1)*16 + (cur->adr.cs-1));
 | 
					        led_map[i].rgb.g = issidrv[led_map[i].adr.drv-1].pwm + 1 + ((led_map[i].adr.swg-1)*16 + (led_map[i].adr.cs-1));
 | 
				
			||||||
        cur->rgb.r = issidrv[cur->adr.drv-1].pwm + 1 + ((cur->adr.swr-1)*16 + (cur->adr.cs-1));
 | 
					        led_map[i].rgb.r = issidrv[led_map[i].adr.drv-1].pwm + 1 + ((led_map[i].adr.swr-1)*16 + (led_map[i].adr.cs-1));
 | 
				
			||||||
        cur->rgb.b = issidrv[cur->adr.drv-1].pwm + 1 + ((cur->adr.swb-1)*16 + (cur->adr.cs-1));
 | 
					        led_map[i].rgb.b = issidrv[led_map[i].adr.drv-1].pwm + 1 + ((led_map[i].adr.swb-1)*16 + (led_map[i].adr.cs-1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //BYTE: 1 + (SW-1)*2 + (CS-1)/8
 | 
					        //BYTE: 1 + (SW-1)*2 + (CS-1)/8
 | 
				
			||||||
        //BIT: (CS-1)%8
 | 
					        //BIT: (CS-1)%8
 | 
				
			||||||
        *(issidrv[cur->adr.drv-1].onoff + 1 + (cur->adr.swg-1)*2+(cur->adr.cs-1)/8) |= (1<<((cur->adr.cs-1)%8));
 | 
					        *(issidrv[led_map[i].adr.drv-1].onoff + 1 + (led_map[i].adr.swg-1)*2+(led_map[i].adr.cs-1)/8) |= (1<<((led_map[i].adr.cs-1)%8));
 | 
				
			||||||
        *(issidrv[cur->adr.drv-1].onoff + 1 + (cur->adr.swr-1)*2+(cur->adr.cs-1)/8) |= (1<<((cur->adr.cs-1)%8));
 | 
					        *(issidrv[led_map[i].adr.drv-1].onoff + 1 + (led_map[i].adr.swr-1)*2+(led_map[i].adr.cs-1)/8) |= (1<<((led_map[i].adr.cs-1)%8));
 | 
				
			||||||
        *(issidrv[cur->adr.drv-1].onoff + 1 + (cur->adr.swb-1)*2+(cur->adr.cs-1)/8) |= (1<<((cur->adr.cs-1)%8));
 | 
					        *(issidrv[led_map[i].adr.drv-1].onoff + 1 + (led_map[i].adr.swb-1)*2+(led_map[i].adr.cs-1)/8) |= (1<<((led_map[i].adr.cs-1)%8));
 | 
				
			||||||
 | 
					 | 
				
			||||||
        cur++;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void disp_calc_extents(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    issi3733_led_t *cur = led_map;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    disp.left = 1e10;
 | 
					 | 
				
			||||||
    disp.right = -1e10;
 | 
					 | 
				
			||||||
    disp.top = -1e10;
 | 
					 | 
				
			||||||
    disp.bottom = 1e10;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (cur < lede)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if (cur->x < disp.left) disp.left = cur->x;
 | 
					 | 
				
			||||||
        if (cur->x > disp.right) disp.right = cur->x;
 | 
					 | 
				
			||||||
        if (cur->y < disp.bottom) disp.bottom = cur->y;
 | 
					 | 
				
			||||||
        if (cur->y > disp.top) disp.top = cur->y;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        cur++;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    disp.width = disp.right - disp.left;
 | 
					 | 
				
			||||||
    disp.height = disp.top - disp.bottom;
 | 
					 | 
				
			||||||
    disp.max_distance = sqrtf(powf(disp.width, 2) + powf(disp.height, 2));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void disp_pixel_setup(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    issi3733_led_t *cur = led_map;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (cur < lede)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        cur->px = (cur->x - disp.left) / disp.width * 100;
 | 
					 | 
				
			||||||
        cur->py = (cur->y - disp.bottom) / disp.height * 100;
 | 
					 | 
				
			||||||
        *cur->rgb.r = 0;
 | 
					 | 
				
			||||||
        *cur->rgb.g = 0;
 | 
					 | 
				
			||||||
        *cur->rgb.b = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        cur++;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void led_matrix_prepare(void)
 | 
					void led_matrix_prepare(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    disp_calc_extents();
 | 
					    for (uint8_t i = 0; i < ISSI3733_LED_COUNT; i++)
 | 
				
			||||||
    disp_pixel_setup();
 | 
					    {
 | 
				
			||||||
 | 
					        *led_map[i].rgb.r = 0;
 | 
				
			||||||
 | 
					        *led_map[i].rgb.g = 0;
 | 
				
			||||||
 | 
					        *led_map[i].rgb.b = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t led_enabled;
 | 
					void led_set_one(int i, uint8_t r, uint8_t g, uint8_t b)
 | 
				
			||||||
float led_animation_speed;
 | 
					 | 
				
			||||||
uint8_t led_animation_direction;
 | 
					 | 
				
			||||||
uint8_t led_animation_orientation;
 | 
					 | 
				
			||||||
uint8_t led_animation_breathing;
 | 
					 | 
				
			||||||
uint8_t led_animation_breathe_cur;
 | 
					 | 
				
			||||||
uint8_t breathe_step;
 | 
					 | 
				
			||||||
uint8_t breathe_dir;
 | 
					 | 
				
			||||||
uint8_t led_animation_circular;
 | 
					 | 
				
			||||||
uint64_t led_next_run;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint8_t led_animation_id;
 | 
					 | 
				
			||||||
uint8_t led_lighting_mode;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
issi3733_led_t *led_cur;
 | 
					 | 
				
			||||||
uint8_t led_per_run = 15;
 | 
					 | 
				
			||||||
float breathe_mult;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void led_matrix_run(void)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    float ro;
 | 
					    if (i < ISSI3733_LED_COUNT)
 | 
				
			||||||
    float go;
 | 
					    {
 | 
				
			||||||
    float bo;
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					        led_matrix_massdrop_config_override(i);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        led_buffer[i].r = r;
 | 
				
			||||||
 | 
					        led_buffer[i].g = g;
 | 
				
			||||||
 | 
					        led_buffer[i].b = b;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void led_set_all(uint8_t r, uint8_t g, uint8_t b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  for (uint8_t i = 0; i < ISSI3733_LED_COUNT; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    led_set_one(i, r, g, b);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    DBGC(DC_LED_MATRIX_INIT_BEGIN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    issi3733_prepare_arrays();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    led_matrix_prepare();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gcr_min_counter = 0;
 | 
				
			||||||
 | 
					    v_5v_cat_hit = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    DBGC(DC_LED_MATRIX_INIT_COMPLETE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void flush(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					    if (!led_enabled) { return; } //Prevent calculations and I2C traffic if LED drivers are not enabled
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    if (!sr_exp_data.bit.SDB_N) { return; } //Prevent calculations and I2C traffic if LED drivers are not enabled
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Wait for previous transfer to complete
 | 
				
			||||||
 | 
					    while (i2c_led_q_running) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Copy buffer to live DMA region
 | 
				
			||||||
 | 
					    for (uint8_t i = 0; i < ISSI3733_LED_COUNT; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        *led_map[i].rgb.r = led_buffer[i].r;
 | 
				
			||||||
 | 
					        *led_map[i].rgb.g = led_buffer[i].g;
 | 
				
			||||||
 | 
					        *led_map[i].rgb.b = led_buffer[i].b;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					    breathe_mult = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (led_animation_breathing)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //+60us 119 LED
 | 
				
			||||||
 | 
					        led_animation_breathe_cur += BREATHE_STEP * breathe_dir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (led_animation_breathe_cur >= BREATHE_MAX_STEP)
 | 
				
			||||||
 | 
					            breathe_dir = -1;
 | 
				
			||||||
 | 
					        else if (led_animation_breathe_cur <= BREATHE_MIN_STEP)
 | 
				
			||||||
 | 
					            breathe_dir = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Brightness curve created for 256 steps, 0 - ~98%
 | 
				
			||||||
 | 
					        breathe_mult = 0.000015 * led_animation_breathe_cur * led_animation_breathe_cur;
 | 
				
			||||||
 | 
					        if (breathe_mult > 1) breathe_mult = 1;
 | 
				
			||||||
 | 
					        else if (breathe_mult < 0) breathe_mult = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //This should only be performed once per frame
 | 
				
			||||||
 | 
					    pomod = (float)((g_rgb_counters.tick / 10) % (uint32_t)(1000.0f / led_animation_speed)) / 10.0f * led_animation_speed;
 | 
				
			||||||
 | 
					    pomod *= 100.0f;
 | 
				
			||||||
 | 
					    pomod = (uint32_t)pomod % 10000;
 | 
				
			||||||
 | 
					    pomod /= 100.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint8_t drvid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //NOTE: GCR does not need to be timed with LED processing, but there is really no harm
 | 
				
			||||||
 | 
					    if (gcr_actual != gcr_actual_last)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        for (drvid=0;drvid<ISSI3733_DRIVER_COUNT;drvid++)
 | 
				
			||||||
 | 
					            I2C_LED_Q_GCR(drvid); //Queue data
 | 
				
			||||||
 | 
					        gcr_actual_last = gcr_actual;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (drvid=0;drvid<ISSI3733_DRIVER_COUNT;drvid++)
 | 
				
			||||||
 | 
					        I2C_LED_Q_PWM(drvid); //Queue data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    i2c_led_q_run();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void led_matrix_indicators(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uint8_t kbled = keyboard_leds();
 | 
				
			||||||
 | 
					    if (kbled && rgb_matrix_config.enable)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        for (uint8_t i = 0; i < ISSI3733_LED_COUNT; i++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (
 | 
				
			||||||
 | 
					            #if USB_LED_NUM_LOCK_SCANCODE != 255
 | 
				
			||||||
 | 
					                (led_map[i].scan == USB_LED_NUM_LOCK_SCANCODE && (kbled & (1<<USB_LED_NUM_LOCK))) ||
 | 
				
			||||||
 | 
					            #endif //NUM LOCK
 | 
				
			||||||
 | 
					            #if USB_LED_CAPS_LOCK_SCANCODE != 255
 | 
				
			||||||
 | 
					                (led_map[i].scan == USB_LED_CAPS_LOCK_SCANCODE && (kbled & (1<<USB_LED_CAPS_LOCK))) ||
 | 
				
			||||||
 | 
					            #endif //CAPS LOCK
 | 
				
			||||||
 | 
					            #if USB_LED_SCROLL_LOCK_SCANCODE != 255
 | 
				
			||||||
 | 
					                (led_map[i].scan == USB_LED_SCROLL_LOCK_SCANCODE && (kbled & (1<<USB_LED_SCROLL_LOCK))) ||
 | 
				
			||||||
 | 
					            #endif //SCROLL LOCK
 | 
				
			||||||
 | 
					            #if USB_LED_COMPOSE_SCANCODE != 255
 | 
				
			||||||
 | 
					                (led_map[i].scan == USB_LED_COMPOSE_SCANCODE && (kbled & (1<<USB_LED_COMPOSE))) ||
 | 
				
			||||||
 | 
					            #endif //COMPOSE
 | 
				
			||||||
 | 
					            #if USB_LED_KANA_SCANCODE != 255
 | 
				
			||||||
 | 
					                (led_map[i].scan == USB_LED_KANA_SCANCODE && (kbled & (1<<USB_LED_KANA))) ||
 | 
				
			||||||
 | 
					            #endif //KANA
 | 
				
			||||||
 | 
					            (0))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                led_buffer[i].r = 255 - led_buffer[i].r;
 | 
				
			||||||
 | 
					                led_buffer[i].g = 255 - led_buffer[i].g;
 | 
				
			||||||
 | 
					                led_buffer[i].b = 255 - led_buffer[i].b;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rgb_matrix_driver_t rgb_matrix_driver = {
 | 
				
			||||||
 | 
					  .init = init,
 | 
				
			||||||
 | 
					  .flush = flush,
 | 
				
			||||||
 | 
					  .set_color = led_set_one,
 | 
				
			||||||
 | 
					  .set_color_all = led_set_all
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*==============================================================================
 | 
				
			||||||
 | 
					=                           Legacy Lighting Support                            =
 | 
				
			||||||
 | 
					==============================================================================*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					// Ported from Massdrop QMK Github Repo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO?: wire these up to keymap.c
 | 
				
			||||||
 | 
					uint8_t led_animation_orientation = 0;
 | 
				
			||||||
 | 
					uint8_t led_animation_direction = 0;
 | 
				
			||||||
 | 
					uint8_t led_animation_breathing = 0;
 | 
				
			||||||
 | 
					uint8_t led_animation_id = 0;
 | 
				
			||||||
 | 
					float led_animation_speed = 4.0f;
 | 
				
			||||||
 | 
					uint8_t led_lighting_mode = LED_MODE_NORMAL;
 | 
				
			||||||
 | 
					uint8_t led_enabled = 1;
 | 
				
			||||||
 | 
					uint8_t led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
				
			||||||
 | 
					uint8_t breathe_dir = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void led_run_pattern(led_setup_t *f, float* ro, float* go, float* bo, float pos) {
 | 
				
			||||||
    float po;
 | 
					    float po;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint8_t led_this_run = 0;
 | 
					    while (f->end != 1)
 | 
				
			||||||
    led_setup_t *f = (led_setup_t*)led_setups[led_animation_id];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (led_cur == 0) //Denotes start of new processing cycle in the case of chunked processing
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        led_cur = led_map;
 | 
					        po = pos; //Reset po for new frame
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        disp.frame += 1;
 | 
					        //Add in any moving effects
 | 
				
			||||||
 | 
					        if ((!led_animation_direction && f->ef & EF_SCR_R) || (led_animation_direction && (f->ef & EF_SCR_L)))
 | 
				
			||||||
        breathe_mult = 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (led_animation_breathing)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            led_animation_breathe_cur += breathe_step * breathe_dir;
 | 
					            po -= pomod;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (led_animation_breathe_cur >= BREATHE_MAX_STEP)
 | 
					            if (po > 100) po -= 100;
 | 
				
			||||||
                breathe_dir = -1;
 | 
					            else if (po < 0) po += 100;
 | 
				
			||||||
            else if (led_animation_breathe_cur <= BREATHE_MIN_STEP)
 | 
					 | 
				
			||||||
                breathe_dir = 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //Brightness curve created for 256 steps, 0 - ~98%
 | 
					 | 
				
			||||||
            breathe_mult = 0.000015 * led_animation_breathe_cur * led_animation_breathe_cur;
 | 
					 | 
				
			||||||
            if (breathe_mult > 1) breathe_mult = 1;
 | 
					 | 
				
			||||||
            else if (breathe_mult < 0) breathe_mult = 0;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					        else if ((!led_animation_direction && f->ef & EF_SCR_L) || (led_animation_direction && (f->ef & EF_SCR_R)))
 | 
				
			||||||
 | 
					 | 
				
			||||||
    uint8_t fcur = 0;
 | 
					 | 
				
			||||||
    uint8_t fmax = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //Frames setup
 | 
					 | 
				
			||||||
    while (f[fcur].end != 1)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        fcur++; //Count frames
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fmax = fcur; //Store total frames count
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (led_cur < lede && led_this_run < led_per_run)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        ro = 0;
 | 
					 | 
				
			||||||
        go = 0;
 | 
					 | 
				
			||||||
        bo = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (led_lighting_mode == LED_MODE_KEYS_ONLY && led_cur->scan == 255)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //Do not act on this LED
 | 
					            po += pomod;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (po > 100) po -= 100;
 | 
				
			||||||
 | 
					            else if (po < 0) po += 100;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (led_lighting_mode == LED_MODE_NON_KEYS_ONLY && led_cur->scan != 255)
 | 
					
 | 
				
			||||||
 | 
					        //Check if LED's po is in current frame
 | 
				
			||||||
 | 
					        if (po < f->hs) { f++; continue; }
 | 
				
			||||||
 | 
					        if (po > f->he) { f++; continue; }
 | 
				
			||||||
 | 
					        //note: < 0 or > 100 continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Calculate the po within the start-stop percentage for color blending
 | 
				
			||||||
 | 
					        po = (po - f->hs) / (f->he - f->hs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Add in any color effects
 | 
				
			||||||
 | 
					        if (f->ef & EF_OVER)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //Do not act on this LED
 | 
					            *ro = (po * (f->re - f->rs)) + f->rs;// + 0.5;
 | 
				
			||||||
 | 
					            *go = (po * (f->ge - f->gs)) + f->gs;// + 0.5;
 | 
				
			||||||
 | 
					            *bo = (po * (f->be - f->bs)) + f->bs;// + 0.5;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (led_lighting_mode == LED_MODE_INDICATORS_ONLY)
 | 
					        else if (f->ef & EF_SUBTRACT)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //Do not act on this LED (Only show indicators)
 | 
					            *ro -= (po * (f->re - f->rs)) + f->rs;// + 0.5;
 | 
				
			||||||
 | 
					            *go -= (po * (f->ge - f->gs)) + f->gs;// + 0.5;
 | 
				
			||||||
 | 
					            *bo -= (po * (f->be - f->bs)) + f->bs;// + 0.5;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //Act on LED
 | 
					            *ro += (po * (f->re - f->rs)) + f->rs;// + 0.5;
 | 
				
			||||||
            for (fcur = 0; fcur < fmax; fcur++)
 | 
					            *go += (po * (f->ge - f->gs)) + f->gs;// + 0.5;
 | 
				
			||||||
            {
 | 
					            *bo += (po * (f->be - f->bs)) + f->bs;// + 0.5;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
                if (led_animation_circular) {
 | 
					
 | 
				
			||||||
                    po = sqrtf((powf(fabsf((disp.width / 2) - (led_cur->x - disp.left)), 2) + powf(fabsf((disp.height / 2) - (led_cur->y - disp.bottom)), 2))) / disp.max_distance * 100;
 | 
					        f++;
 | 
				
			||||||
                }
 | 
					    }
 | 
				
			||||||
                else {
 | 
					}
 | 
				
			||||||
                    if (led_animation_orientation)
 | 
					
 | 
				
			||||||
                    {
 | 
					static void led_matrix_massdrop_config_override(int i)
 | 
				
			||||||
                        po = led_cur->py;
 | 
					{
 | 
				
			||||||
                    }
 | 
					    float ro = 0;
 | 
				
			||||||
                    else
 | 
					    float go = 0;
 | 
				
			||||||
                    {
 | 
					    float bo = 0;
 | 
				
			||||||
                        po = led_cur->px;
 | 
					
 | 
				
			||||||
                    }
 | 
					    float po = (led_animation_orientation)
 | 
				
			||||||
                }
 | 
					        ? (float)g_rgb_leds[i].point.y / 64.f * 100
 | 
				
			||||||
 | 
					        : (float)g_rgb_leds[i].point.x / 224.f * 100;
 | 
				
			||||||
                float pomod;
 | 
					
 | 
				
			||||||
                pomod = (float)(disp.frame % (uint32_t)(1000.0f / led_animation_speed)) / 10.0f * led_animation_speed;
 | 
					    uint8_t highest_active_layer = biton32(layer_state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //Add in any moving effects
 | 
					    if (led_lighting_mode == LED_MODE_KEYS_ONLY && g_rgb_leds[i].matrix_co.raw == 0xff) {
 | 
				
			||||||
                if ((!led_animation_direction && f[fcur].ef & EF_SCR_R) || (led_animation_direction && (f[fcur].ef & EF_SCR_L)))
 | 
					        //Do not act on this LED
 | 
				
			||||||
                {
 | 
					    } else if (led_lighting_mode == LED_MODE_NON_KEYS_ONLY && g_rgb_leds[i].matrix_co.raw != 0xff) {
 | 
				
			||||||
                    pomod *= 100.0f;
 | 
					        //Do not act on this LED
 | 
				
			||||||
                    pomod = (uint32_t)pomod % 10000;
 | 
					    } else if (led_lighting_mode == LED_MODE_INDICATORS_ONLY) {
 | 
				
			||||||
                    pomod /= 100.0f;
 | 
					        //Do not act on this LED (Only show indicators)
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
                    po -= pomod;
 | 
					        led_instruction_t* led_cur_instruction = led_instructions;
 | 
				
			||||||
 | 
					        while (!led_cur_instruction->end) {
 | 
				
			||||||
                    if (po > 100) po -= 100;
 | 
					            // Check if this applies to current layer
 | 
				
			||||||
                    else if (po < 0) po += 100;
 | 
					            if ((led_cur_instruction->flags & LED_FLAG_MATCH_LAYER) &&
 | 
				
			||||||
                }
 | 
					                (led_cur_instruction->layer != highest_active_layer)) {
 | 
				
			||||||
                else if ((!led_animation_direction && f[fcur].ef & EF_SCR_L) || (led_animation_direction && (f[fcur].ef & EF_SCR_R)))
 | 
					                goto next_iter;
 | 
				
			||||||
                {
 | 
					            }
 | 
				
			||||||
                    pomod *= 100.0f;
 | 
					
 | 
				
			||||||
                    pomod = (uint32_t)pomod % 10000;
 | 
					            // Check if this applies to current index
 | 
				
			||||||
                    pomod /= 100.0f;
 | 
					            if (led_cur_instruction->flags & LED_FLAG_MATCH_ID) {
 | 
				
			||||||
                    po += pomod;
 | 
					                uint8_t modid = i / 32;                                     //Calculate which id# contains the led bit
 | 
				
			||||||
 | 
					                uint32_t modidbit = 1 << (i % 32);                          //Calculate the bit within the id#
 | 
				
			||||||
                    if (po > 100) po -= 100;
 | 
					                uint32_t *bitfield = &led_cur_instruction->id0 + modid;     //Add modid as offset to id0 address. *bitfield is now idX of the led id
 | 
				
			||||||
                    else if (po < 0) po += 100;
 | 
					                if (~(*bitfield) & modidbit) {                              //Check if led bit is not set in idX
 | 
				
			||||||
                }
 | 
					                    goto next_iter;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                //Check if LED's po is in current frame
 | 
					            }
 | 
				
			||||||
                if (po < f[fcur].hs) continue;
 | 
					
 | 
				
			||||||
                if (po > f[fcur].he) continue;
 | 
					            if (led_cur_instruction->flags & LED_FLAG_USE_RGB) {
 | 
				
			||||||
                //note: < 0 or > 100 continue
 | 
					                ro = led_cur_instruction->r;
 | 
				
			||||||
 | 
					                go = led_cur_instruction->g;
 | 
				
			||||||
                //Calculate the po within the start-stop percentage for color blending
 | 
					                bo = led_cur_instruction->b;
 | 
				
			||||||
                po = (po - f[fcur].hs) / (f[fcur].he - f[fcur].hs);
 | 
					            } else if (led_cur_instruction->flags & LED_FLAG_USE_PATTERN) {
 | 
				
			||||||
 | 
					                led_run_pattern(led_setups[led_cur_instruction->pattern_id], &ro, &go, &bo, po);
 | 
				
			||||||
                //Add in any color effects
 | 
					            } else if (led_cur_instruction->flags & LED_FLAG_USE_ROTATE_PATTERN) {
 | 
				
			||||||
                if (f[fcur].ef & EF_OVER)
 | 
					                led_run_pattern(led_setups[led_animation_id], &ro, &go, &bo, po);
 | 
				
			||||||
                {
 | 
					            }
 | 
				
			||||||
                    ro = (po * (f[fcur].re - f[fcur].rs)) + f[fcur].rs;// + 0.5;
 | 
					
 | 
				
			||||||
                    go = (po * (f[fcur].ge - f[fcur].gs)) + f[fcur].gs;// + 0.5;
 | 
					            next_iter:
 | 
				
			||||||
                    bo = (po * (f[fcur].be - f[fcur].bs)) + f[fcur].bs;// + 0.5;
 | 
					                led_cur_instruction++;
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (f[fcur].ef & EF_SUBTRACT)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    ro -= (po * (f[fcur].re - f[fcur].rs)) + f[fcur].rs;// + 0.5;
 | 
					 | 
				
			||||||
                    go -= (po * (f[fcur].ge - f[fcur].gs)) + f[fcur].gs;// + 0.5;
 | 
					 | 
				
			||||||
                    bo -= (po * (f[fcur].be - f[fcur].bs)) + f[fcur].bs;// + 0.5;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    ro += (po * (f[fcur].re - f[fcur].rs)) + f[fcur].rs;// + 0.5;
 | 
					 | 
				
			||||||
                    go += (po * (f[fcur].ge - f[fcur].gs)) + f[fcur].gs;// + 0.5;
 | 
					 | 
				
			||||||
                    bo += (po * (f[fcur].be - f[fcur].bs)) + f[fcur].bs;// + 0.5;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Clamp values 0-255
 | 
					 | 
				
			||||||
        if (ro > 255) ro = 255; else if (ro < 0) ro = 0;
 | 
					        if (ro > 255) ro = 255; else if (ro < 0) ro = 0;
 | 
				
			||||||
        if (go > 255) go = 255; else if (go < 0) go = 0;
 | 
					        if (go > 255) go = 255; else if (go < 0) go = 0;
 | 
				
			||||||
        if (bo > 255) bo = 255; else if (bo < 0) bo = 0;
 | 
					        if (bo > 255) bo = 255; else if (bo < 0) bo = 0;
 | 
				
			||||||
| 
						 | 
					@ -412,127 +492,11 @@ void led_matrix_run(void)
 | 
				
			||||||
            go *= breathe_mult;
 | 
					            go *= breathe_mult;
 | 
				
			||||||
            bo *= breathe_mult;
 | 
					            bo *= breathe_mult;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        *led_cur->rgb.r = (uint8_t)ro;
 | 
					 | 
				
			||||||
        *led_cur->rgb.g = (uint8_t)go;
 | 
					 | 
				
			||||||
        *led_cur->rgb.b = (uint8_t)bo;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef USB_LED_INDICATOR_ENABLE
 | 
					 | 
				
			||||||
        if (keyboard_leds())
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            uint8_t kbled = keyboard_leds();
 | 
					 | 
				
			||||||
            if (
 | 
					 | 
				
			||||||
                #if USB_LED_NUM_LOCK_SCANCODE != 255
 | 
					 | 
				
			||||||
                (led_cur->scan == USB_LED_NUM_LOCK_SCANCODE && kbled & (1<<USB_LED_NUM_LOCK)) ||
 | 
					 | 
				
			||||||
                #endif //NUM LOCK
 | 
					 | 
				
			||||||
                #if USB_LED_CAPS_LOCK_SCANCODE != 255
 | 
					 | 
				
			||||||
                (led_cur->scan == USB_LED_CAPS_LOCK_SCANCODE && kbled & (1<<USB_LED_CAPS_LOCK)) ||
 | 
					 | 
				
			||||||
                #endif //CAPS LOCK
 | 
					 | 
				
			||||||
                #if USB_LED_SCROLL_LOCK_SCANCODE != 255
 | 
					 | 
				
			||||||
                (led_cur->scan == USB_LED_SCROLL_LOCK_SCANCODE && kbled & (1<<USB_LED_SCROLL_LOCK)) ||
 | 
					 | 
				
			||||||
                #endif //SCROLL LOCK
 | 
					 | 
				
			||||||
                #if USB_LED_COMPOSE_SCANCODE != 255
 | 
					 | 
				
			||||||
                (led_cur->scan == USB_LED_COMPOSE_SCANCODE && kbled & (1<<USB_LED_COMPOSE)) ||
 | 
					 | 
				
			||||||
                #endif //COMPOSE
 | 
					 | 
				
			||||||
                #if USB_LED_KANA_SCANCODE != 255
 | 
					 | 
				
			||||||
                (led_cur->scan == USB_LED_KANA_SCANCODE && kbled & (1<<USB_LED_KANA)) ||
 | 
					 | 
				
			||||||
                #endif //KANA
 | 
					 | 
				
			||||||
                (0))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (*led_cur->rgb.r > 127) *led_cur->rgb.r = 0;
 | 
					 | 
				
			||||||
                else *led_cur->rgb.r = 255;
 | 
					 | 
				
			||||||
                if (*led_cur->rgb.g > 127) *led_cur->rgb.g = 0;
 | 
					 | 
				
			||||||
                else *led_cur->rgb.g = 255;
 | 
					 | 
				
			||||||
                if (*led_cur->rgb.b > 127) *led_cur->rgb.b = 0;
 | 
					 | 
				
			||||||
                else *led_cur->rgb.b = 255;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
#endif //USB_LED_INDICATOR_ENABLE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        led_cur++;
 | 
					 | 
				
			||||||
        led_this_run++;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint8_t led_matrix_init(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    DBGC(DC_LED_MATRIX_INIT_BEGIN);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    issi3733_prepare_arrays();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    led_matrix_prepare();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    disp.frame = 0;
 | 
					 | 
				
			||||||
    led_next_run = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    led_enabled = 1;
 | 
					 | 
				
			||||||
    led_animation_id = 0;
 | 
					 | 
				
			||||||
    led_lighting_mode = LED_MODE_NORMAL;
 | 
					 | 
				
			||||||
    led_animation_speed = 4.0f;
 | 
					 | 
				
			||||||
    led_animation_direction = 0;
 | 
					 | 
				
			||||||
    led_animation_orientation = 0;
 | 
					 | 
				
			||||||
    led_animation_breathing = 0;
 | 
					 | 
				
			||||||
    led_animation_breathe_cur = BREATHE_MIN_STEP;
 | 
					 | 
				
			||||||
    breathe_step = 1;
 | 
					 | 
				
			||||||
    breathe_dir = 1;
 | 
					 | 
				
			||||||
    led_animation_circular = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    gcr_min_counter = 0;
 | 
					 | 
				
			||||||
    v_5v_cat_hit = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //Run led matrix code once for initial LED coloring
 | 
					 | 
				
			||||||
    led_cur = 0;
 | 
					 | 
				
			||||||
    rgb_matrix_init_user();
 | 
					 | 
				
			||||||
    led_matrix_run();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DBGC(DC_LED_MATRIX_INIT_COMPLETE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__attribute__ ((weak))
 | 
					 | 
				
			||||||
void rgb_matrix_init_user(void) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define LED_UPDATE_RATE 10  //ms
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//led data processing can take time, so process data in chunks to free up the processor
 | 
					 | 
				
			||||||
//this is done through led_cur and lede
 | 
					 | 
				
			||||||
void led_matrix_task(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (led_enabled)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        //If an update may run and frame processing has completed
 | 
					 | 
				
			||||||
        if (timer_read64() >= led_next_run && led_cur == lede)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            uint8_t drvid;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            led_next_run = timer_read64() + LED_UPDATE_RATE;  //Set next frame update time
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //NOTE: GCR does not need to be timed with LED processing, but there is really no harm
 | 
					 | 
				
			||||||
            if (gcr_actual != gcr_actual_last)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                for (drvid=0;drvid<ISSI3733_DRIVER_COUNT;drvid++)
 | 
					 | 
				
			||||||
                    I2C_LED_Q_GCR(drvid); //Queue data
 | 
					 | 
				
			||||||
                gcr_actual_last = gcr_actual;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            for (drvid=0;drvid<ISSI3733_DRIVER_COUNT;drvid++)
 | 
					 | 
				
			||||||
                I2C_LED_Q_PWM(drvid); //Queue data
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            i2c_led_q_run();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            led_cur = 0; //Signal next frame calculations may begin
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Process more data if not finished
 | 
					    led_buffer[i].r = (uint8_t)ro;
 | 
				
			||||||
    if (led_cur != lede)
 | 
					    led_buffer[i].g = (uint8_t)go;
 | 
				
			||||||
    {
 | 
					    led_buffer[i].b = (uint8_t)bo;
 | 
				
			||||||
        //DBG_1_OFF; //debug profiling
 | 
					 | 
				
			||||||
        led_matrix_run();
 | 
					 | 
				
			||||||
        //DBG_1_ON; //debug profiling
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#ifndef _LED_MATRIX_H_
 | 
					#ifndef _LED_MATRIX_H_
 | 
				
			||||||
#define _LED_MATRIX_H_
 | 
					#define _LED_MATRIX_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//From keyboard
 | 
					//From keyboard
 | 
				
			||||||
#include "config_led.h"
 | 
					#include "config_led.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,25 +77,20 @@ typedef struct issi3733_led_s {
 | 
				
			||||||
    uint8_t scan;               //Key scan code from wiring (set 0xFF if no key)
 | 
					    uint8_t scan;               //Key scan code from wiring (set 0xFF if no key)
 | 
				
			||||||
} issi3733_led_t;
 | 
					} issi3733_led_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct led_disp_s {
 | 
					extern issi3733_driver_t issidrv[ISSI3733_DRIVER_COUNT];
 | 
				
			||||||
    uint64_t frame;
 | 
					 | 
				
			||||||
    float left;
 | 
					 | 
				
			||||||
    float right;
 | 
					 | 
				
			||||||
    float top;
 | 
					 | 
				
			||||||
    float bottom;
 | 
					 | 
				
			||||||
    float width;
 | 
					 | 
				
			||||||
    float height;
 | 
					 | 
				
			||||||
    float max_distance;
 | 
					 | 
				
			||||||
} led_disp_t;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t led_matrix_init(void);
 | 
					extern uint8_t gcr_desired;
 | 
				
			||||||
void rgb_matrix_init_user(void);
 | 
					extern uint8_t gcr_breathe;
 | 
				
			||||||
 | 
					extern uint8_t gcr_actual;
 | 
				
			||||||
 | 
					extern uint8_t gcr_actual_last;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LED_MODE_NORMAL             0   //Must be 0
 | 
					void gcr_compute(void);
 | 
				
			||||||
#define LED_MODE_KEYS_ONLY          1
 | 
					
 | 
				
			||||||
#define LED_MODE_NON_KEYS_ONLY      2
 | 
					void led_matrix_indicators(void);
 | 
				
			||||||
#define LED_MODE_INDICATORS_ONLY    3
 | 
					
 | 
				
			||||||
#define LED_MODE_MAX_INDEX          LED_MODE_INDICATORS_ONLY   //Must be highest value
 | 
					/*-------------------------  Legacy Lighting Support  ------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EF_NONE         0x00000000  //No effect
 | 
					#define EF_NONE         0x00000000  //No effect
 | 
				
			||||||
#define EF_OVER         0x00000001  //Overwrite any previous color information with new
 | 
					#define EF_OVER         0x00000001  //Overwrite any previous color information with new
 | 
				
			||||||
| 
						 | 
					@ -114,33 +111,48 @@ typedef struct led_setup_s {
 | 
				
			||||||
  uint8_t end;      //Set to signal end of the setup
 | 
					  uint8_t end;      //Set to signal end of the setup
 | 
				
			||||||
} led_setup_t;
 | 
					} led_setup_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern issi3733_driver_t issidrv[ISSI3733_DRIVER_COUNT];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern uint8_t gcr_desired;
 | 
					 | 
				
			||||||
extern uint8_t gcr_breathe;
 | 
					 | 
				
			||||||
extern uint8_t gcr_actual;
 | 
					 | 
				
			||||||
extern uint8_t gcr_actual_last;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern uint8_t led_animation_id;
 | 
					 | 
				
			||||||
extern uint8_t led_enabled;
 | 
					 | 
				
			||||||
extern float led_animation_speed;
 | 
					 | 
				
			||||||
extern uint8_t led_lighting_mode;
 | 
					 | 
				
			||||||
extern uint8_t led_animation_direction;
 | 
					 | 
				
			||||||
extern uint8_t led_animation_orientation;
 | 
					 | 
				
			||||||
extern uint8_t led_animation_breathing;
 | 
					 | 
				
			||||||
extern uint8_t led_animation_breathe_cur;
 | 
					 | 
				
			||||||
extern uint8_t breathe_dir;
 | 
					 | 
				
			||||||
extern uint8_t led_animation_circular;
 | 
					 | 
				
			||||||
extern const uint8_t led_setups_count;
 | 
					extern const uint8_t led_setups_count;
 | 
				
			||||||
 | 
					 | 
				
			||||||
extern void *led_setups[];
 | 
					extern void *led_setups[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern issi3733_led_t *led_cur;
 | 
					//LED Extra Instructions
 | 
				
			||||||
extern issi3733_led_t *lede;
 | 
					#define LED_FLAG_NULL                0x00       //Matching and coloring not used (default)
 | 
				
			||||||
 | 
					#define LED_FLAG_MATCH_ID            0x01       //Match on the ID of the LED (set id#'s to desired bit pattern, first LED is id 1)
 | 
				
			||||||
 | 
					#define LED_FLAG_MATCH_LAYER         0x02       //Match on the current active layer (set layer to desired match layer)
 | 
				
			||||||
 | 
					#define LED_FLAG_USE_RGB             0x10       //Use a specific RGB value (set r, g, b to desired output color values)
 | 
				
			||||||
 | 
					#define LED_FLAG_USE_PATTERN         0x20       //Use a specific pattern ID (set pattern_id to desired output pattern)
 | 
				
			||||||
 | 
					#define LED_FLAG_USE_ROTATE_PATTERN  0x40       //Use pattern the user has cycled to manually
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void led_matrix_run(void);
 | 
					typedef struct led_instruction_s {
 | 
				
			||||||
void led_matrix_task(void);
 | 
					    uint16_t flags; // Bitfield for LED instructions
 | 
				
			||||||
 | 
					    uint32_t id0; // Bitwise id, IDs 0-31
 | 
				
			||||||
 | 
					    uint32_t id1; // Bitwise id, IDs 32-63
 | 
				
			||||||
 | 
					    uint32_t id2; // Bitwise id, IDs 64-95
 | 
				
			||||||
 | 
					    uint32_t id3; // Bitwise id, IDs 96-127
 | 
				
			||||||
 | 
					    uint8_t layer;
 | 
				
			||||||
 | 
					    uint8_t r;
 | 
				
			||||||
 | 
					    uint8_t g;
 | 
				
			||||||
 | 
					    uint8_t b;
 | 
				
			||||||
 | 
					    uint8_t pattern_id;
 | 
				
			||||||
 | 
					    uint8_t end;
 | 
				
			||||||
 | 
					} led_instruction_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void gcr_compute(void);
 | 
					extern led_instruction_t led_instructions[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern uint8_t led_animation_breathing;
 | 
				
			||||||
 | 
					extern uint8_t led_animation_id;
 | 
				
			||||||
 | 
					extern float led_animation_speed;
 | 
				
			||||||
 | 
					extern uint8_t led_lighting_mode;
 | 
				
			||||||
 | 
					extern uint8_t led_enabled;
 | 
				
			||||||
 | 
					extern uint8_t led_animation_breathe_cur;
 | 
				
			||||||
 | 
					extern uint8_t led_animation_direction;
 | 
				
			||||||
 | 
					extern uint8_t breathe_dir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LED_MODE_NORMAL             0   //Must be 0
 | 
				
			||||||
 | 
					#define LED_MODE_KEYS_ONLY          1
 | 
				
			||||||
 | 
					#define LED_MODE_NON_KEYS_ONLY      2
 | 
				
			||||||
 | 
					#define LED_MODE_INDICATORS_ONLY    3
 | 
				
			||||||
 | 
					#define LED_MODE_MAX_INDEX          LED_MODE_INDICATORS_ONLY   //Must be highest value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif //_LED_MATRIX_H_
 | 
					#endif //_LED_MATRIX_H_
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,8 @@ You should have received a copy of the GNU General Public License
 | 
				
			||||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "alt.h"
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "led_matrix.h"
 | 
					#include "led_matrix.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Teal <-> Salmon
 | 
					//Teal <-> Salmon
 | 
				
			||||||
| 
						 | 
					@ -118,3 +119,5 @@ void *led_setups[] = {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
 | 
					const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -203,13 +203,6 @@ void main_subtask_usb_state(void)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main_subtask_led(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (g_usb_state != USB_FSMSTATUS_FSMSTATE_ON_Val) return; //Only run LED tasks if USB is operating
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    led_matrix_task();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void main_subtask_power_check(void)
 | 
					void main_subtask_power_check(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static uint64_t next_5v_checkup = 0;
 | 
					    static uint64_t next_5v_checkup = 0;
 | 
				
			||||||
| 
						 | 
					@ -221,7 +214,9 @@ void main_subtask_power_check(void)
 | 
				
			||||||
        v_5v = adc_get(ADC_5V);
 | 
					        v_5v = adc_get(ADC_5V);
 | 
				
			||||||
        v_5v_avg = 0.9 * v_5v_avg + 0.1 * v_5v;
 | 
					        v_5v_avg = 0.9 * v_5v_avg + 0.1 * v_5v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
        gcr_compute();
 | 
					        gcr_compute();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -240,7 +235,6 @@ void main_subtask_usb_extra_device(void)
 | 
				
			||||||
void main_subtasks(void)
 | 
					void main_subtasks(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    main_subtask_usb_state();
 | 
					    main_subtask_usb_state();
 | 
				
			||||||
    main_subtask_led();
 | 
					 | 
				
			||||||
    main_subtask_power_check();
 | 
					    main_subtask_power_check();
 | 
				
			||||||
    main_subtask_usb_extra_device();
 | 
					    main_subtask_usb_extra_device();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -263,7 +257,9 @@ int main(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SR_EXP_Init();
 | 
					    SR_EXP_Init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
    i2c1_init();
 | 
					    i2c1_init();
 | 
				
			||||||
 | 
					#endif // RGB_MATRIX_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    matrix_init();
 | 
					    matrix_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -281,8 +277,7 @@ int main(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DBG_LED_OFF;
 | 
					    DBG_LED_OFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    led_matrix_init();
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (I2C3733_Init_Control() != 1) {}
 | 
					    while (I2C3733_Init_Control() != 1) {}
 | 
				
			||||||
    while (I2C3733_Init_Drivers() != 1) {}
 | 
					    while (I2C3733_Init_Drivers() != 1) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -292,6 +287,7 @@ int main(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (uint8_t drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++)
 | 
					    for (uint8_t drvid = 0; drvid < ISSI3733_DRIVER_COUNT; drvid++)
 | 
				
			||||||
        I2C_LED_Q_ONOFF(drvid); //Queue data
 | 
					        I2C_LED_Q_ONOFF(drvid); //Queue data
 | 
				
			||||||
 | 
					#endif // RGB_MATRIX_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    keyboard_setup();
 | 
					    keyboard_setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -365,8 +365,10 @@ void USB_ExtraSetState(uint8_t state)
 | 
				
			||||||
    if (usb_extra_state == USB_EXTRA_STATE_ENABLED) CDC_print("USB: Extra enabled\r\n");
 | 
					    if (usb_extra_state == USB_EXTRA_STATE_ENABLED) CDC_print("USB: Extra enabled\r\n");
 | 
				
			||||||
    else if (usb_extra_state == USB_EXTRA_STATE_DISABLED)
 | 
					    else if (usb_extra_state == USB_EXTRA_STATE_DISABLED)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      CDC_print("USB: Extra disabled\r\n");
 | 
					        CDC_print("USB: Extra disabled\r\n");
 | 
				
			||||||
      if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
					#ifdef USE_MASSDROP_CONFIGURATOR
 | 
				
			||||||
 | 
					        if (led_animation_breathing) gcr_breathe = gcr_desired;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (usb_extra_state == USB_EXTRA_STATE_DISABLED_UNTIL_REPLUG) CDC_print("USB: Extra disabled until replug\r\n");
 | 
					    else if (usb_extra_state == USB_EXTRA_STATE_DISABLED_UNTIL_REPLUG) CDC_print("USB: Extra disabled until replug\r\n");
 | 
				
			||||||
    else CDC_print("USB: Extra state unknown\r\n");
 | 
					    else CDC_print("USB: Extra state unknown\r\n");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue