[Keymap] Drashna's Keymap Update - Display Edition (#9282)
OLED Display fixes Add support for RGBLIGHT Layers Add gaming layer to corn and kyria RGBLight Startup Animation fixes and improvements (uses matrix_scan now!) Pimoroni Trackball support added (IT'S RGB!!!) Fix issues due to code changes
This commit is contained in:
		@@ -121,7 +121,17 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef OLED_DRIVER_ENABLE
 | 
					#ifdef OLED_DRIVER_ENABLE
 | 
				
			||||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
 | 
					oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
				
			||||||
 | 
					#    ifndef SPLIT_KEYBOARD
 | 
				
			||||||
 | 
					    if (is_master) {
 | 
				
			||||||
 | 
					#    endif
 | 
				
			||||||
 | 
					        return OLED_ROTATION_270;
 | 
				
			||||||
 | 
					#    ifndef SPLIT_KEYBOARD
 | 
				
			||||||
 | 
					    }  else {
 | 
				
			||||||
 | 
					        return rotation;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#    endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
 | 
					uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@
 | 
				
			|||||||
#    define RGBLIGHT_SAT_STEP 8
 | 
					#    define RGBLIGHT_SAT_STEP 8
 | 
				
			||||||
#    define RGBLIGHT_VAL_STEP 8
 | 
					#    define RGBLIGHT_VAL_STEP 8
 | 
				
			||||||
#    define RGBLIGHT_SPLIT
 | 
					#    define RGBLIGHT_SPLIT
 | 
				
			||||||
 | 
					#    define RGBLIGHT_LAYERS
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
 | 
					// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ uint8_t is_master;
 | 
				
			|||||||
  LAYOUT_wrapper( \
 | 
					  LAYOUT_wrapper( \
 | 
				
			||||||
      KC_ESC,  K01,     K02,     K03,     K04,     K05,                                             K06,     K07,     K08,     K09,     K0A,     KC_MINS, \
 | 
					      KC_ESC,  K01,     K02,     K03,     K04,     K05,                                             K06,     K07,     K08,     K09,     K0A,     KC_MINS, \
 | 
				
			||||||
   LALT_T(KC_TAB), K11, K12,     K13,     K14,     K15,                                             K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \
 | 
					   LALT_T(KC_TAB), K11, K12,     K13,     K14,     K15,                                             K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \
 | 
				
			||||||
      OS_LSFT, CTL_T(K21), K22,  K23,     K24,     K25,  KC_NO, MEH(KC_MINS),  TG(_DIABLO), KC_NO,  K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \
 | 
					      OS_LSFT, CTL_T(K21), K22,  K23,     K24,     K25,  TG(_GAMEPAD), MEH(KC_MINS),  TG(_DIABLO), KC_CAPS,  K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \
 | 
				
			||||||
                                 KC_MUTE, OS_LALT, KC_GRV,  KC_SPC,  BK_LWER,     DL_RAIS, KC_ENT,  OS_RGUI, UC(0x03A8), UC(0x2E2E) \
 | 
					                                 KC_MUTE, OS_LALT, KC_GRV,  KC_SPC,  BK_LWER,     DL_RAIS, KC_ENT,  OS_RGUI, UC(0x03A8), UC(0x2E2E) \
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
/* Re-pass though to allow templates to be used */
 | 
					/* Re-pass though to allow templates to be used */
 | 
				
			||||||
@@ -85,6 +85,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
        KC_LSFT, ___________________BLANK___________________, _______, _______,   _______, _______, ___________________BLANK___________________, KC_RSFT,
 | 
					        KC_LSFT, ___________________BLANK___________________, _______, _______,   _______, _______, ___________________BLANK___________________, KC_RSFT,
 | 
				
			||||||
                                   _______, _______, KC_LALT, _______, _______,   _______, _______, KC_RGUI, _______, _______
 | 
					                                   _______, _______, KC_LALT, _______, _______,   _______, _______, KC_RGUI, _______, _______
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [_GAMEPAD] = LAYOUT_wrapper(
 | 
				
			||||||
 | 
					        KC_ESC,  KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,                                          _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,                                          _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    _______, _______,   _______, LALT(KC_PSCR), _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					                                  _______, MAGIC_TOGGLE_NKRO, KC_V,     KC_SPC,  KC_H,   _______, _______, _______, _______, _______
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [_DIABLO] = LAYOUT_wrapper(
 | 
					    [_DIABLO] = LAYOUT_wrapper(
 | 
				
			||||||
        KC_ESC,  KC_S,    KC_I,    KC_F,    KC_M,    KC_T,                                          KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,
 | 
					        KC_ESC,  KC_S,    KC_I,    KC_F,    KC_M,    KC_T,                                          KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,
 | 
				
			||||||
        KC_TAB,  KC_1,    KC_2,    KC_3,    KC_4,    KC_G,                                          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
 | 
					        KC_TAB,  KC_1,    KC_2,    KC_3,    KC_4,    KC_G,                                          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
 | 
				
			||||||
@@ -172,3 +180,41 @@ void encoder_update_user(uint8_t index, bool clockwise) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef RGBLIGHT_LAYERS
 | 
				
			||||||
 | 
					const rgblight_segment_t PROGMEM shift_layers[] = RGBLIGHT_LAYER_SEGMENTS(
 | 
				
			||||||
 | 
					    {  8, 1, 120, 255, 255},
 | 
				
			||||||
 | 
					    { 18, 1, 120, 255, 255}
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					const rgblight_segment_t PROGMEM control_layers[] = RGBLIGHT_LAYER_SEGMENTS(
 | 
				
			||||||
 | 
					    {  6, 1, 0, 255, 255},
 | 
				
			||||||
 | 
					    { 16, 1, 0, 255, 255}
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					const rgblight_segment_t PROGMEM alt_layers[] = RGBLIGHT_LAYER_SEGMENTS(
 | 
				
			||||||
 | 
					    {  2, 1, 240, 255, 255},
 | 
				
			||||||
 | 
					    { 17, 1, 250, 255, 255}
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					const rgblight_segment_t PROGMEM gui_layers[] = RGBLIGHT_LAYER_SEGMENTS(
 | 
				
			||||||
 | 
					    {  7, 1, 51, 255, 255},
 | 
				
			||||||
 | 
					    { 12, 1, 51, 255, 255}
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
 | 
				
			||||||
 | 
					    shift_layers,
 | 
				
			||||||
 | 
					    control_layers,
 | 
				
			||||||
 | 
					    alt_layers,
 | 
				
			||||||
 | 
					    gui_layers
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void keyboard_post_init_keymap(void) {
 | 
				
			||||||
 | 
					    rgblight_layers = my_rgb_layers;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_scan_keymap(void) {
 | 
				
			||||||
 | 
					        uint8_t mods = mod_config(get_mods()|get_oneshot_mods());
 | 
				
			||||||
 | 
					        rgblight_set_layer_state(0, mods & MOD_MASK_SHIFT);
 | 
				
			||||||
 | 
					        rgblight_set_layer_state(1, mods & MOD_MASK_CTRL);
 | 
				
			||||||
 | 
					        rgblight_set_layer_state(2, mods & MOD_MASK_ALT);
 | 
				
			||||||
 | 
					        rgblight_set_layer_state(3, mods & MOD_MASK_GUI);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
OLED_DRIVER_ENABLE = yes   # Enables the use of OLED displays
 | 
					OLED_DRIVER_ENABLE = yes   # Enables the use of OLED displays
 | 
				
			||||||
ENCODER_ENABLE = yes       # ENables the use of one or more encoders
 | 
					ENCODER_ENABLE = yes       # ENables the use of one or more encoders
 | 
				
			||||||
RGBLIGHT_ENABLE = yes      # Enable keyboard RGB underglow
 | 
					RGBLIGHT_ENABLE = yes      # Enable keyboard RGB underglow
 | 
				
			||||||
RGBLIGHT_STARTUP_ANIMATION = no
 | 
					RGBLIGHT_STARTUP_ANIMATION = yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration
 | 
					BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration
 | 
				
			||||||
MOUSEKEY_ENABLE = no       # Mouse keys
 | 
					MOUSEKEY_ENABLE = no       # Mouse keys
 | 
				
			||||||
@@ -11,7 +11,7 @@ COMMAND_ENABLE = no        # Commands for debug and configuration
 | 
				
			|||||||
NKRO_ENABLE = no           # USB Nkey Rollover
 | 
					NKRO_ENABLE = no           # USB Nkey Rollover
 | 
				
			||||||
BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality on B7 by default
 | 
					BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality on B7 by default
 | 
				
			||||||
MIDI_ENABLE = no           # MIDI support
 | 
					MIDI_ENABLE = no           # MIDI support
 | 
				
			||||||
UNICODE_ENABLE = yes       # Unicode
 | 
					UNICODE_ENABLE = no        # Unicode
 | 
				
			||||||
BLUETOOTH_ENABLE = no      # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
					BLUETOOTH_ENABLE = no      # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
				
			||||||
AUDIO_ENABLE = no          # Audio output on port C6
 | 
					AUDIO_ENABLE = no          # Audio output on port C6
 | 
				
			||||||
FAUXCLICKY_ENABLE = no     # Use buzzer to emulate clicky switches
 | 
					FAUXCLICKY_ENABLE = no     # Use buzzer to emulate clicky switches
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Hybrid Monstrosity
 | 
					#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Hybrid Monstrosity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef DEBOUNCE
 | 
					#undef DEBOUNCE
 | 
				
			||||||
#define DEBOUNCE 60
 | 
					#define DEBOUNCE 15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TAPPING_TERM_PER_KEY
 | 
					#define TAPPING_TERM_PER_KEY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -30,3 +30,6 @@
 | 
				
			|||||||
#        undef RGBLIGHT_SLEEP
 | 
					#        undef RGBLIGHT_SLEEP
 | 
				
			||||||
#    endif
 | 
					#    endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PIMORONI_TRACKBALL_INVERT_X
 | 
				
			||||||
 | 
					#define PIMORONI_TRACKBALL_INVERT_Y
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,11 @@
 | 
				
			|||||||
extern rgblight_config_t rgblight_config;
 | 
					extern rgblight_config_t rgblight_config;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum more_custom_keycodes { KC_SWAP_NUM = NEW_SAFE_RANGE };
 | 
					enum more_custom_keycodes {
 | 
				
			||||||
 | 
					    KC_SWAP_NUM = NEW_SAFE_RANGE,
 | 
				
			||||||
 | 
					    PM_SCROLL,
 | 
				
			||||||
 | 
					    PM_PRECISION,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// define layer change stuff for underglow indicator
 | 
					// define layer change stuff for underglow indicator
 | 
				
			||||||
bool skip_leds = false;
 | 
					bool skip_leds = false;
 | 
				
			||||||
@@ -33,7 +37,7 @@ bool skip_leds = false;
 | 
				
			|||||||
      LALT_T(KC_TAB), K01, K02, K03,      K04,     K05,     TG(_DIABLO),         TG(_DIABLO), K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \
 | 
					      LALT_T(KC_TAB), K01, K02, K03,      K04,     K05,     TG(_DIABLO),         TG(_DIABLO), K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \
 | 
				
			||||||
      KC_C1R3, K11,    K12,     K13,      K14,     K15,                                       K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \
 | 
					      KC_C1R3, K11,    K12,     K13,      K14,     K15,                                       K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \
 | 
				
			||||||
      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     TG(_GAMEPAD),       TG(_GAMEPAD), K26,     K27,     K28,     K29,  RCTL_T(K2A), KC_MRSF, \
 | 
					      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     TG(_GAMEPAD),       TG(_GAMEPAD), K26,     K27,     K28,     K29,  RCTL_T(K2A), KC_MRSF, \
 | 
				
			||||||
      KC_GRV,  OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC,                                            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, UC(0x2E2E),        \
 | 
					      KC_GRV,  OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC,                                            KC_BTN1, KC_BTN3, KC_BTN2,   PM_SCROLL, PM_PRECISION,        \
 | 
				
			||||||
                                                  OS_LALT, OS_LGUI,                 OS_RGUI, CTL_T(KC_ESCAPE),                                      \
 | 
					                                                  OS_LALT, OS_LGUI,                 OS_RGUI, CTL_T(KC_ESCAPE),                                      \
 | 
				
			||||||
                                                           KC_APP,                  KC_MENU,                                                        \
 | 
					                                                           KC_APP,                  KC_MENU,                                                        \
 | 
				
			||||||
                              KC_SPC, LT(_LOWER, KC_BSPC), OS_LWR,                  OS_RSE, LT(_RAISE, KC_DEL), KC_ENT                              \
 | 
					                              KC_SPC, LT(_LOWER, KC_BSPC), OS_LWR,                  OS_RSE, LT(_RAISE, KC_DEL), KC_ENT                              \
 | 
				
			||||||
@@ -281,7 +285,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
 | 
					  [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
 | 
				
			||||||
             KC_MAKE, _______, _______, _______, _______, _______, UC_MOD,                  KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
 | 
					             KC_MAKE, _______, _______, _______, _______, _______, UC_MOD,                  KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
 | 
				
			||||||
             VRSN,    _________________ADJUST_L1_________________, _______,                 _______, _______, _______, _______, _______, _______, EEP_RST,
 | 
					             VRSN,    _________________ADJUST_L1_________________, _______,                 _______, _________________ADJUST_R1_________________, EEP_RST,
 | 
				
			||||||
             _______, _________________ADJUST_L2_________________,                                   _________________ADJUST_R2_________________, RGB_IDL,
 | 
					             _______, _________________ADJUST_L2_________________,                                   _________________ADJUST_R2_________________, RGB_IDL,
 | 
				
			||||||
             _______, _________________ADJUST_L3_________________, _______,                 _______, _________________ADJUST_R3_________________, TG(_MODS),
 | 
					             _______, _________________ADJUST_L3_________________, _______,                 _______, _________________ADJUST_R3_________________, TG(_MODS),
 | 
				
			||||||
             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
 | 
					             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
 | 
				
			||||||
@@ -293,6 +297,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
// clang-format on
 | 
					// clang-format on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PIMORONI_TRACKBALL_ENABLE
 | 
				
			||||||
 | 
					void run_trackball_cleanup(void) {
 | 
				
			||||||
 | 
					    if (trackball_is_scrolling()) {
 | 
				
			||||||
 | 
					        trackball_set_rgbw(RGB_CYAN, 0x00);
 | 
				
			||||||
 | 
					    } else if (trackball_get_precision() != 1.0) {
 | 
				
			||||||
 | 
					        trackball_set_rgbw(RGB_GREEN, 0x00);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        trackball_set_rgbw(RGB_MAGENTA, 0x00);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void keyboard_post_init_keymap(void) {
 | 
				
			||||||
 | 
					    // trackball_set_precision(1.5);
 | 
				
			||||||
 | 
					    trackball_set_rgbw(RGB_MAGENTA, 0x00);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					void shutdown_keymap(void) {
 | 
				
			||||||
 | 
					    trackball_set_rgbw(RGB_RED, 0x00);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | 
					bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
    switch (keycode) {
 | 
					    switch (keycode) {
 | 
				
			||||||
        case KC_1:
 | 
					        case KC_1:
 | 
				
			||||||
@@ -321,6 +345,34 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | 
				
			|||||||
                eeconfig_update_user(userspace_config.raw);
 | 
					                eeconfig_update_user(userspace_config.raw);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					#ifdef PIMORONI_TRACKBALL_ENABLE
 | 
				
			||||||
 | 
					        case PM_SCROLL:
 | 
				
			||||||
 | 
					            trackball_set_scrolling(record->event.pressed);
 | 
				
			||||||
 | 
					            run_trackball_cleanup();
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case PM_PRECISION:
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                trackball_set_precision(1.5);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                trackball_set_precision(1);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            run_trackball_cleanup();
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					#if     !defined(MOUSEKEY_ENABLE) && defined(POINTING_DEVICE_ENABLE)
 | 
				
			||||||
 | 
					        case KC_BTN1 ... KC_BTN3:
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            report_mouse_t currentReport = pointing_device_get_report();
 | 
				
			||||||
 | 
					            if (record->event.pressed) {
 | 
				
			||||||
 | 
					                currentReport.buttons |= (1 << (keycode - KC_BTN1));  // this is defined in report.h
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                currentReport.buttons &= ~(1 << (keycode - KC_BTN1));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            pointing_device_set_report(currentReport);
 | 
				
			||||||
 | 
					            pointing_device_send();
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					#    endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // switch (keycode) {
 | 
					    // switch (keycode) {
 | 
				
			||||||
    //  case KC_P00:
 | 
					    //  case KC_P00:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
BOOTMAGIC_ENABLE   = lite
 | 
					BOOTMAGIC_ENABLE   = lite
 | 
				
			||||||
TAP_DANCE_ENABLE   = yes
 | 
					TAP_DANCE_ENABLE   = yes
 | 
				
			||||||
COMMAND_ENABLE     = no  # Commands for debug and configuration
 | 
					COMMAND_ENABLE     = no  # Commands for debug and configuration
 | 
				
			||||||
CONSOLE_ENABLE     =
 | 
					CONSOLE_ENABLE     = no
 | 
				
			||||||
SPACE_CADET_ENABLE = no
 | 
					SPACE_CADET_ENABLE = no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(KEYBOARD)), ergodox_ez)
 | 
					ifeq ($(strip $(KEYBOARD)), ergodox_ez)
 | 
				
			||||||
@@ -10,9 +10,11 @@ ifeq ($(strip $(KEYBOARD)), ergodox_ez)
 | 
				
			|||||||
    RGBLIGHT_TWINKLE           = no
 | 
					    RGBLIGHT_TWINKLE           = no
 | 
				
			||||||
    INDICATOR_LIGHTS           = no
 | 
					    INDICATOR_LIGHTS           = no
 | 
				
			||||||
    RGBLIGHT_STARTUP_ANIMATION = yes
 | 
					    RGBLIGHT_STARTUP_ANIMATION = yes
 | 
				
			||||||
 | 
					    PIMORONI_TRACKBALL_ENABLE  = yes
 | 
				
			||||||
 | 
					    MOUSEKEY_ENABLE            = no
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
UNICODE_ENABLE     = yes
 | 
					UNICODE_ENABLE     = no
 | 
				
			||||||
UNICDOEMAP_ENABLE  = no
 | 
					UNICDOEMAP_ENABLE  = no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,5 +11,6 @@ ifeq ($(strip $(KEYBOARD)), fractal)
 | 
				
			|||||||
    AUDIO_ENABLE                = yes
 | 
					    AUDIO_ENABLE                = yes
 | 
				
			||||||
    RGBLIGHT_ENABLE             = yes
 | 
					    RGBLIGHT_ENABLE             = yes
 | 
				
			||||||
    RGBLIGHT_TWINKLE            = yes
 | 
					    RGBLIGHT_TWINKLE            = yes
 | 
				
			||||||
 | 
					    RGBLIGHT_STARTUP_ANIMATION  = yes
 | 
				
			||||||
    BOOTLOADER                  = qmk-dfu
 | 
					    BOOTLOADER                  = qmk-dfu
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,16 +7,15 @@ QMK Firmware:
 | 
				
			|||||||
    GIT_SUBMODULE_STRATEGY: recursive
 | 
					    GIT_SUBMODULE_STRATEGY: recursive
 | 
				
			||||||
  tags:
 | 
					  tags:
 | 
				
			||||||
    - linux
 | 
					    - linux
 | 
				
			||||||
  image: ubuntu:18.10
 | 
					  image: qmkfm/base_container
 | 
				
			||||||
  before_script:
 | 
					  before_script:
 | 
				
			||||||
    - apt-get update -qy
 | 
					    - apt-get update -qy
 | 
				
			||||||
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi git libnewlib-arm-none-eabi gcc-avr python3 unzip wget zip
 | 
					    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi git libnewlib-arm-none-eabi gcc-avr python3 unzip wget zip
 | 
				
			||||||
    - avr-gcc --version
 | 
					    - avr-gcc --version
 | 
				
			||||||
    - uname -a
 | 
					    - uname -a
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - make test:all
 | 
					 | 
				
			||||||
    - make planck/rev6:default planck/rev5:default
 | 
					    - make planck/rev6:default planck/rev5:default
 | 
				
			||||||
    - make keebio/iris/rev2:drashna keebio/iris/rev2:drashna_old ergodox_ez:drashna ergodox_ez:drashna_glow keebio/viterbi/rev1:drashna orthodox/rev1:drashna orthodox/rev3:drashna crkbd:drashna planck/light:drashna planck/rev6:drashna fractal:drashna primekb/prime_m:drashna -j2 --output-sync
 | 
					    - make all:drashna -j2
 | 
				
			||||||
  artifacts:
 | 
					  artifacts:
 | 
				
			||||||
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
 | 
					    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
 | 
				
			||||||
    paths:
 | 
					    paths:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Use custom magic number so that when switching branches, EEPROM always gets reset
 | 
					// Use custom magic number so that when switching branches, EEPROM always gets reset
 | 
				
			||||||
#define EECONFIG_MAGIC_NUMBER (uint16_t)0x1338
 | 
					#define EECONFIG_MAGIC_NUMBER (uint16_t)0x1339
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Set Polling rate to 1000Hz */
 | 
					/* Set Polling rate to 1000Hz */
 | 
				
			||||||
#define USB_POLLING_INTERVAL_MS 1
 | 
					#define USB_POLLING_INTERVAL_MS 1
 | 
				
			||||||
@@ -98,8 +98,9 @@
 | 
				
			|||||||
#    define ONESHOT_TIMEOUT 3000
 | 
					#    define ONESHOT_TIMEOUT 3000
 | 
				
			||||||
#endif  // !ONESHOT_TIMEOUT
 | 
					#endif  // !ONESHOT_TIMEOUT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef QMK_KEYS_PER_SCAN
 | 
					#ifdef QMK_KEYS_PER_SCAN
 | 
				
			||||||
#    define QMK_KEYS_PER_SCAN 4
 | 
					#    undef QMK_KEYS_PER_SCAN
 | 
				
			||||||
 | 
					#    define QMK_KEYS_PER_SCAN 1
 | 
				
			||||||
#endif  // !QMK_KEYS_PER_SCAN
 | 
					#endif  // !QMK_KEYS_PER_SCAN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// this makes it possible to do rolling combos (zx) with keys that
 | 
					// this makes it possible to do rolling combos (zx) with keys that
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,13 +113,9 @@ void shutdown_user(void) {
 | 
				
			|||||||
    rgblight_setrgb_red();
 | 
					    rgblight_setrgb_red();
 | 
				
			||||||
#endif  // RGBLIGHT_ENABLE
 | 
					#endif  // RGBLIGHT_ENABLE
 | 
				
			||||||
#ifdef RGB_MATRIX_ENABLE
 | 
					#ifdef RGB_MATRIX_ENABLE
 | 
				
			||||||
#    ifdef __AVR__
 | 
					 | 
				
			||||||
    rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
 | 
					    rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
 | 
				
			||||||
    rgb_matrix_update_pwm_buffers();
 | 
					    rgb_matrix_update_pwm_buffers();
 | 
				
			||||||
#    else
 | 
					
 | 
				
			||||||
    rgb_matrix_sethsv_noeeprom(0, 255, 255);
 | 
					 | 
				
			||||||
    rgb_matrix_mode_noeeprom(1);
 | 
					 | 
				
			||||||
#    endif
 | 
					 | 
				
			||||||
#endif  // RGB_MATRIX_ENABLE
 | 
					#endif  // RGB_MATRIX_ENABLE
 | 
				
			||||||
    shutdown_keymap();
 | 
					    shutdown_keymap();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#if defined(OLED_DRIVER_ENABLE)
 | 
					#if defined(OLED_DRIVER_ENABLE)
 | 
				
			||||||
#    include "oled_stuff.h"
 | 
					#    include "oled_stuff.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(PIMORONI_TRACKBALL_ENABLE)
 | 
				
			||||||
 | 
					#    include "pimoroni_trackball.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Define layer names */
 | 
					/* Define layer names */
 | 
				
			||||||
enum userspace_layers {
 | 
					enum userspace_layers {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -170,6 +170,13 @@ void render_bootmagic_status(void) {
 | 
				
			|||||||
        {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
 | 
					        {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool is_bootmagic_on;
 | 
				
			||||||
 | 
					    #ifdef OLED_DISPLAY_128X64
 | 
				
			||||||
 | 
					    is_bootmagic_on = !keymap_config.swap_lctl_lgui;
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
 | 
					    is_bootmagic_on = keymap_config.swap_lctl_lgui;
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NAME), false);
 | 
					    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NAME), false);
 | 
				
			||||||
#ifdef OLED_DISPLAY_128X64
 | 
					#ifdef OLED_DISPLAY_128X64
 | 
				
			||||||
    if (keymap_config.swap_lctl_lgui)
 | 
					    if (keymap_config.swap_lctl_lgui)
 | 
				
			||||||
@@ -177,11 +184,11 @@ void render_bootmagic_status(void) {
 | 
				
			|||||||
    oled_write_P(PSTR(" "), false);
 | 
					    oled_write_P(PSTR(" "), false);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        oled_write_P(logo[1][0], false);
 | 
					        oled_write_P(logo[1][0], is_bootmagic_on);
 | 
				
			||||||
#ifdef OLED_DISPLAY_128X64
 | 
					#ifdef OLED_DISPLAY_128X64
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        oled_write_P(logo[0][0], false);
 | 
					        oled_write_P(logo[0][0], !is_bootmagic_on);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    oled_write_P(PSTR(" "), false);
 | 
					    oled_write_P(PSTR(" "), false);
 | 
				
			||||||
#ifdef OLED_DISPLAY_128X64
 | 
					#ifdef OLED_DISPLAY_128X64
 | 
				
			||||||
@@ -192,11 +199,11 @@ void render_bootmagic_status(void) {
 | 
				
			|||||||
    if (keymap_config.swap_lctl_lgui)
 | 
					    if (keymap_config.swap_lctl_lgui)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        oled_write_P(logo[1][1], false);
 | 
					        oled_write_P(logo[1][1], is_bootmagic_on);
 | 
				
			||||||
#ifdef OLED_DISPLAY_128X64
 | 
					#ifdef OLED_DISPLAY_128X64
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        oled_write_P(logo[0][1], false);
 | 
					        oled_write_P(logo[0][1], !is_bootmagic_on);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    oled_write_P(PSTR(" "), false);
 | 
					    oled_write_P(PSTR(" "), false);
 | 
				
			||||||
#ifdef OLED_DISPLAY_128X64
 | 
					#ifdef OLED_DISPLAY_128X64
 | 
				
			||||||
@@ -233,7 +240,7 @@ __attribute__((weak)) void oled_driver_render_logo(void) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void render_status_secondary(void) {
 | 
					void render_status_secondary(void) {
 | 
				
			||||||
#if !defined(SPLIT_TRANSPORT_MIRROR) || defined(OLED_DRIVER_128x64)
 | 
					#if !defined(SPLIT_TRANSPORT_MIRROR) || defined(OLED_DISPLAY_128X64)
 | 
				
			||||||
    oled_driver_render_logo();
 | 
					    oled_driver_render_logo();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef SPLIT_TRANSPORT_MIRROR
 | 
					#ifdef SPLIT_TRANSPORT_MIRROR
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										114
									
								
								users/drashna/pimoroni_trackball.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								users/drashna/pimoroni_trackball.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					#include "pimoroni_trackball.h"
 | 
				
			||||||
 | 
					#include "i2c_master.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t scrolling      = 0;
 | 
				
			||||||
 | 
					static int16_t x_offset       = 0;
 | 
				
			||||||
 | 
					static int16_t y_offset       = 0;
 | 
				
			||||||
 | 
					static int16_t h_offset       = 0;
 | 
				
			||||||
 | 
					static int16_t v_offset       = 0;
 | 
				
			||||||
 | 
					static float precisionSpeed = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef I2C_TIMEOUT
 | 
				
			||||||
 | 
					#    define I2C_TIMEOUT 100
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef MOUSE_DEBOUNCE
 | 
				
			||||||
 | 
					#    define MOUSE_DEBOUNCE 5
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
 | 
				
			||||||
 | 
					    uint8_t data[] = {0x00, red, green, blue, white};
 | 
				
			||||||
 | 
					    i2c_transmit(TRACKBALL_WRITE, data, sizeof(data), I2C_TIMEOUT);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int16_t mouse_offset(uint8_t positive, uint8_t negative, int16_t scale) {
 | 
				
			||||||
 | 
					    int16_t offset    = (int16_t)positive - (int16_t)negative;
 | 
				
			||||||
 | 
					    int16_t magnitude = (int16_t)(scale * offset * offset * precisionSpeed);
 | 
				
			||||||
 | 
					    return offset < 0 ? -magnitude : magnitude;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void update_member(int8_t* member, int16_t* offset) {
 | 
				
			||||||
 | 
					    if (*offset > 127) {
 | 
				
			||||||
 | 
					        *member = 127;
 | 
				
			||||||
 | 
					        *offset -= 127;
 | 
				
			||||||
 | 
					    } else if (*offset < -127) {
 | 
				
			||||||
 | 
					        *member = -127;
 | 
				
			||||||
 | 
					        *offset += 127;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        *member = *offset;
 | 
				
			||||||
 | 
					        *offset = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__((weak)) void trackball_check_click(bool pressed, report_mouse_t* mouse) {
 | 
				
			||||||
 | 
					    if (pressed) {
 | 
				
			||||||
 | 
					        mouse->buttons |= MOUSE_BTN1;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        mouse->buttons &= ~MOUSE_BTN1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float trackball_get_precision(void) { return precisionSpeed; }
 | 
				
			||||||
 | 
					void    trackball_set_precision(float precision) { precisionSpeed = precision; }
 | 
				
			||||||
 | 
					bool    trackball_is_scrolling(void) { return scrolling; }
 | 
				
			||||||
 | 
					void    trackball_set_scrolling(bool scroll) { scrolling = scroll; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__attribute__((weak)) void pointing_device_init(void) { trackball_set_rgbw(0x00,0x00,0x00,0x4F); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pointing_device_task(void) {
 | 
				
			||||||
 | 
					    static bool debounce;
 | 
				
			||||||
 | 
					    static uint16_t debounce_timer;
 | 
				
			||||||
 | 
					    uint8_t state[5] = {};
 | 
				
			||||||
 | 
					    if (i2c_readReg(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) {
 | 
				
			||||||
 | 
					        if (!state[4] && !debounce) {
 | 
				
			||||||
 | 
					            if (scrolling) {
 | 
				
			||||||
 | 
					#ifdef PIMORONI_TRACKBALL_INVERT_X
 | 
				
			||||||
 | 
					                h_offset += mouse_offset(state[2], state[3], 1);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					                h_offset -= mouse_offset(state[2], state[3], 1);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef PIMORONI_TRACKBALL_INVERT_Y
 | 
				
			||||||
 | 
					                v_offset += mouse_offset(state[1], state[0], 1);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					                v_offset -= mouse_offset(state[1], state[0], 1);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					#ifdef PIMORONI_TRACKBALL_INVERT_X
 | 
				
			||||||
 | 
					                x_offset -= mouse_offset(state[2], state[3], 5);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					                x_offset += mouse_offset(state[2], state[3], 5);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef PIMORONI_TRACKBALL_INVERT_Y
 | 
				
			||||||
 | 
					                y_offset -= mouse_offset(state[1], state[0], 5);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					                y_offset += mouse_offset(state[1], state[0], 5);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            if (state[4]) {
 | 
				
			||||||
 | 
					                debounce = true;
 | 
				
			||||||
 | 
					                debounce_timer = timer_read();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (timer_elapsed(debounce_timer) > MOUSE_DEBOUNCE) debounce = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    report_mouse_t mouse = pointing_device_get_report();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    trackball_check_click(state[4] & (1 << 7), &mouse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef PIMORONI_TRACKBALL_ROTATE
 | 
				
			||||||
 | 
					    update_member(&mouse.x, &x_offset);
 | 
				
			||||||
 | 
					    update_member(&mouse.y, &y_offset);
 | 
				
			||||||
 | 
					    update_member(&mouse.h, &h_offset);
 | 
				
			||||||
 | 
					    update_member(&mouse.v, &v_offset);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    update_member(&mouse.x, &y_offset);
 | 
				
			||||||
 | 
					    update_member(&mouse.y, &x_offset);
 | 
				
			||||||
 | 
					    update_member(&mouse.h, &v_offset);
 | 
				
			||||||
 | 
					    update_member(&mouse.v, &h_offset);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    pointing_device_set_report(mouse);
 | 
				
			||||||
 | 
					    pointing_device_send();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								users/drashna/pimoroni_trackball.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								users/drashna/pimoroni_trackball.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					#include "pointing_device.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef TRACKBALL_ADDRESS
 | 
				
			||||||
 | 
					#    define TRACKBALL_ADDRESS 0x0A
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#define TRACKBALL_WRITE ((TRACKBALL_ADDRESS << 1) | I2C_WRITE)
 | 
				
			||||||
 | 
					#define TRACKBALL_READ  ((TRACKBALL_ADDRESS << 1) | I2C_READ)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white);
 | 
				
			||||||
 | 
					void trackball_check_click(bool pressed, report_mouse_t *mouse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float trackball_get_precision(void);
 | 
				
			||||||
 | 
					void    trackball_set_precision(float precision);
 | 
				
			||||||
 | 
					bool    trackball_is_scrolling(void);
 | 
				
			||||||
 | 
					void    trackball_set_scrolling(bool scroll);
 | 
				
			||||||
@@ -51,7 +51,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			|||||||
                    clear_mods();
 | 
					                    clear_mods();
 | 
				
			||||||
                    clear_oneshot_mods();
 | 
					                    clear_oneshot_mods();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
                    send_string_with_delay_P(PSTR("bin/qmk"), TAP_CODE_DELAY);
 | 
					                    send_string_with_delay_P(PSTR("qmk"), TAP_CODE_DELAY);
 | 
				
			||||||
#ifndef MAKE_BOOTLOADER
 | 
					#ifndef MAKE_BOOTLOADER
 | 
				
			||||||
                    if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
 | 
					                    if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,14 +12,14 @@ static uint32_t hypno_timer;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) {
 | 
					void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) {
 | 
				
			||||||
    HSV hsv = {hue, sat, val};
 | 
					    HSV hsv = {hue, sat, val};
 | 
				
			||||||
    if (hsv.v > rgb_matrix_config.hsv.v) {
 | 
					    if (hsv.v > rgb_matrix_get_val()) {
 | 
				
			||||||
        hsv.v = rgb_matrix_config.hsv.v;
 | 
					        hsv.v = rgb_matrix_get_val();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (mode) {
 | 
					    switch (mode) {
 | 
				
			||||||
        case 1:  // breathing
 | 
					        case 1:  // breathing
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            uint16_t time = scale16by8(g_rgb_counters.tick, speed / 8);
 | 
					            uint16_t time = scale16by8(g_rgb_timer, speed / 8);
 | 
				
			||||||
            hsv.v         = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
 | 
					            hsv.v         = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
 | 
				
			||||||
            RGB rgb       = hsv_to_rgb(hsv);
 | 
					            RGB rgb       = hsv_to_rgb(hsv);
 | 
				
			||||||
            for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
 | 
					            for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,136 +2,13 @@
 | 
				
			|||||||
#include "rgb_stuff.h"
 | 
					#include "rgb_stuff.h"
 | 
				
			||||||
#include "eeprom.h"
 | 
					#include "eeprom.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern rgblight_config_t rgblight_config;
 | 
					 | 
				
			||||||
bool    has_initialized;
 | 
					bool    has_initialized;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, index); }
 | 
					void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val(), index); }
 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Custom indicators for modifiers.
 | 
					 | 
				
			||||||
 * This allows for certain lights to be lit up, based on what mods are active, giving some visual feedback.
 | 
					 | 
				
			||||||
 * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifdef INDICATOR_LIGHTS
 | 
					 | 
				
			||||||
void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
 | 
					 | 
				
			||||||
    if (userspace_config.rgb_layer_change && get_highest_layer(layer_state) == 0) {
 | 
					 | 
				
			||||||
        if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) {
 | 
					 | 
				
			||||||
#    ifdef SHFT_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(120, 255, 255, SHFT_LED1);
 | 
					 | 
				
			||||||
#    endif  // SHFT_LED1
 | 
					 | 
				
			||||||
#    ifdef SHFT_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(120, 255, 255, SHFT_LED2);
 | 
					 | 
				
			||||||
#    endif  // SHFT_LED2
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
#    ifdef SHFT_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(SHFT_LED1);
 | 
					 | 
				
			||||||
#    endif  // SHFT_LED1
 | 
					 | 
				
			||||||
#    ifdef SHFT_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(SHFT_LED2);
 | 
					 | 
				
			||||||
#    endif  // SHFT_LED2
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if ((this_mod | this_osm) & MOD_MASK_CTRL) {
 | 
					 | 
				
			||||||
#    ifdef CTRL_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(0, 255, 255, CTRL_LED1);
 | 
					 | 
				
			||||||
#    endif  // CTRL_LED1
 | 
					 | 
				
			||||||
#    ifdef CTRL_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(0, 255, 255, CTRL_LED2);
 | 
					 | 
				
			||||||
#    endif  // CTRL_LED2
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
#    ifdef CTRL_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(CTRL_LED1);
 | 
					 | 
				
			||||||
#    endif  // CTRL_LED1
 | 
					 | 
				
			||||||
#    ifdef CTRL_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(CTRL_LED2);
 | 
					 | 
				
			||||||
#    endif  // CTRL_LED2
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if ((this_mod | this_osm) & MOD_MASK_GUI) {
 | 
					 | 
				
			||||||
#    ifdef GUI_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(51, 255, 255, GUI_LED1);
 | 
					 | 
				
			||||||
#    endif  // GUI_LED1
 | 
					 | 
				
			||||||
#    ifdef GUI_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(51, 255, 255, GUI_LED2);
 | 
					 | 
				
			||||||
#    endif  // GUI_LED2
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
#    ifdef GUI_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(GUI_LED1);
 | 
					 | 
				
			||||||
#    endif  // GUI_LED1
 | 
					 | 
				
			||||||
#    ifdef GUI_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(GUI_LED2);
 | 
					 | 
				
			||||||
#    endif  // GUI_LED2
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if ((this_mod | this_osm) & MOD_MASK_ALT) {
 | 
					 | 
				
			||||||
#    ifdef ALT_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(240, 255, 255, ALT_LED1);
 | 
					 | 
				
			||||||
#    endif  // ALT_LED1
 | 
					 | 
				
			||||||
#    ifdef GUI_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_at(240, 255, 255, ALT_LED2);
 | 
					 | 
				
			||||||
#    endif  // GUI_LED2
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
#    ifdef GUI_LED1
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(ALT_LED1);
 | 
					 | 
				
			||||||
#    endif  // GUI_LED1
 | 
					 | 
				
			||||||
#    ifdef GUI_LED2
 | 
					 | 
				
			||||||
            rgblight_sethsv_default_helper(ALT_LED2);
 | 
					 | 
				
			||||||
#    endif  // GUI_LED2
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Function for the indicators */
 | 
					 | 
				
			||||||
void matrix_scan_indicator(void) {
 | 
					 | 
				
			||||||
    if (has_initialized) {
 | 
					 | 
				
			||||||
        set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif  // INDICATOR_LIGHTS
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef RGBLIGHT_TWINKLE
 | 
					#ifdef RGBLIGHT_TWINKLE
 | 
				
			||||||
static rgblight_fadeout lights[RGBLED_NUM];
 | 
					static rgblight_fadeout lights[RGBLED_NUM];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* This function checks for used LEDs.  This way, collisions don't occur and cause weird rendering */
 | 
					 | 
				
			||||||
bool rgblight_twinkle_is_led_used(uint8_t index) {
 | 
					 | 
				
			||||||
    switch (index) {
 | 
					 | 
				
			||||||
#    ifdef INDICATOR_LIGHTS
 | 
					 | 
				
			||||||
#        ifdef SHFT_LED1
 | 
					 | 
				
			||||||
        case SHFT_LED1:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // SHFT_LED1
 | 
					 | 
				
			||||||
#        ifdef SHFT_LED2
 | 
					 | 
				
			||||||
        case SHFT_LED2:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // SHFT_LED2
 | 
					 | 
				
			||||||
#        ifdef CTRL_LED1
 | 
					 | 
				
			||||||
        case CTRL_LED1:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // CTRL_LED1
 | 
					 | 
				
			||||||
#        ifdef CTRL_LED2
 | 
					 | 
				
			||||||
        case CTRL_LED2:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // CTRL_LED2
 | 
					 | 
				
			||||||
#        ifdef GUI_LED1
 | 
					 | 
				
			||||||
        case GUI_LED1:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // GUI_LED1
 | 
					 | 
				
			||||||
#        ifdef GUI_LED2
 | 
					 | 
				
			||||||
        case GUI_LED2:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // GUI_LED2
 | 
					 | 
				
			||||||
#        ifdef ALT_LED1
 | 
					 | 
				
			||||||
        case ALT_LED1:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // ALT_LED1
 | 
					 | 
				
			||||||
#        ifdef ALT_LED2
 | 
					 | 
				
			||||||
        case ALT_LED2:
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
#        endif  // ALT_LED2
 | 
					 | 
				
			||||||
#    endif      // INDICATOR_LIGHTS
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
            return rgblight_twinkle_is_led_used_keymap(index);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Handler for fading/twinkling effect */
 | 
					/* Handler for fading/twinkling effect */
 | 
				
			||||||
void scan_rgblight_fadeout(void) {  // Don't effing change this function .... rgblight_sethsv is supppppper intensive
 | 
					void scan_rgblight_fadeout(void) {  // Don't effing change this function .... rgblight_sethsv is supppppper intensive
 | 
				
			||||||
    bool litup = false;
 | 
					    bool litup = false;
 | 
				
			||||||
@@ -170,9 +47,6 @@ void start_rgb_light(void) {
 | 
				
			|||||||
    uint8_t min_life_index = -1;
 | 
					    uint8_t min_life_index = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (uint8_t index = 0; index < RGBLED_NUM; ++index) {
 | 
					    for (uint8_t index = 0; index < RGBLED_NUM; ++index) {
 | 
				
			||||||
        if (rgblight_twinkle_is_led_used(index)) {
 | 
					 | 
				
			||||||
            continue;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (lights[index].enabled) {
 | 
					        if (lights[index].enabled) {
 | 
				
			||||||
            if (min_life_index == -1 || lights[index].life < min_life) {
 | 
					            if (min_life_index == -1 || lights[index].life < min_life) {
 | 
				
			||||||
                min_life       = lights[index].life;
 | 
					                min_life       = lights[index].life;
 | 
				
			||||||
@@ -197,7 +71,7 @@ void start_rgb_light(void) {
 | 
				
			|||||||
    light->timer            = timer_read();
 | 
					    light->timer            = timer_read();
 | 
				
			||||||
    light->life             = 0xC0 + rand() % 0x40;
 | 
					    light->life             = 0xC0 + rand() % 0x40;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    light->hue = rgblight_config.hue + (rand() % 0xB4) - 0x54;
 | 
					    light->hue = rgblight_get_hue() + (rand() % 0xB4) - 0x54;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rgblight_sethsv_at(light->hue, 255, light->life, light_index);
 | 
					    rgblight_sethsv_at(light->hue, 255, light->life, light_index);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -227,39 +101,52 @@ bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) {
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(RGBLIGHT_STARTUP_ANIMATION)
 | 
				
			||||||
 | 
					static bool is_enabled;
 | 
				
			||||||
 | 
					static bool is_rgblight_startup;
 | 
				
			||||||
 | 
					static uint8_t old_hue;
 | 
				
			||||||
 | 
					static uint16_t rgblight_startup_loop_timer;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void keyboard_post_init_rgb_light(void) {
 | 
					void keyboard_post_init_rgb_light(void) {
 | 
				
			||||||
#if defined(RGBLIGHT_STARTUP_ANIMATION)
 | 
					#if defined(RGBLIGHT_STARTUP_ANIMATION)
 | 
				
			||||||
    bool is_enabled = rgblight_config.enable;
 | 
					    is_enabled = rgblight_is_enabled();
 | 
				
			||||||
    if (userspace_config.rgb_layer_change) {
 | 
					    if (userspace_config.rgb_layer_change) {
 | 
				
			||||||
        rgblight_enable_noeeprom();
 | 
					        rgblight_enable_noeeprom();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (rgblight_config.enable) {
 | 
					    if (rgblight_is_enabled()) {
 | 
				
			||||||
        layer_state_set_rgb_light(layer_state);
 | 
					        layer_state_set_rgb_light(layer_state);
 | 
				
			||||||
        uint16_t old_hue = rgblight_config.hue;
 | 
					        old_hue = rgblight_get_hue();
 | 
				
			||||||
        rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
					        rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
				
			||||||
        for (uint16_t i = 255; i > 0; i--) {
 | 
					        is_rgblight_startup = true;
 | 
				
			||||||
            rgblight_sethsv_noeeprom((i + old_hue) % 255, 255, 255);
 | 
					 | 
				
			||||||
            matrix_scan();
 | 
					 | 
				
			||||||
            wait_ms(10);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (!is_enabled) {
 | 
					 | 
				
			||||||
        rgblight_disable_noeeprom();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    layer_state_set_rgb_light(layer_state);
 | 
					    layer_state_set_rgb_light(layer_state);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void matrix_scan_rgb_light(void) {
 | 
					void matrix_scan_rgb_light(void) {
 | 
				
			||||||
#ifdef RGBLIGHT_ENABLE
 | 
					 | 
				
			||||||
#    ifdef RGBLIGHT_TWINKLE
 | 
					#    ifdef RGBLIGHT_TWINKLE
 | 
				
			||||||
    scan_rgblight_fadeout();
 | 
					    scan_rgblight_fadeout();
 | 
				
			||||||
#    endif  // RGBLIGHT_ENABLE
 | 
					#    endif  // RGBLIGHT_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#    ifdef INDICATOR_LIGHTS
 | 
					#if defined(RGBLIGHT_STARTUP_ANIMATION)
 | 
				
			||||||
    matrix_scan_indicator();
 | 
					    if (is_rgblight_startup && is_keyboard_master()) {
 | 
				
			||||||
#    endif
 | 
					        if (timer_elapsed(rgblight_startup_loop_timer) > 10) {
 | 
				
			||||||
 | 
					            static uint8_t counter;
 | 
				
			||||||
 | 
					            counter++;
 | 
				
			||||||
 | 
					            rgblight_sethsv_noeeprom((counter + old_hue) % 255, 255, 255);
 | 
				
			||||||
 | 
					            rgblight_startup_loop_timer = timer_read();
 | 
				
			||||||
 | 
					            if (counter == 255) {
 | 
				
			||||||
 | 
					                is_rgblight_startup = false;
 | 
				
			||||||
 | 
					                if (!is_enabled) {
 | 
				
			||||||
 | 
					                    rgblight_disable_noeeprom();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (userspace_config.rgb_layer_change) {
 | 
				
			||||||
 | 
					                    layer_state_set_rgb_light(layer_state);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,9 +22,6 @@ endif
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
					ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
				
			||||||
    SRC += rgb_stuff.c
 | 
					    SRC += rgb_stuff.c
 | 
				
			||||||
    ifeq ($(strip $(INDICATOR_LIGHTS)), yes)
 | 
					 | 
				
			||||||
        OPT_DEFS += -DINDICATOR_LIGHTS
 | 
					 | 
				
			||||||
    endif
 | 
					 | 
				
			||||||
    ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
 | 
					    ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
 | 
				
			||||||
        OPT_DEFS += -DRGBLIGHT_TWINKLE
 | 
					        OPT_DEFS += -DRGBLIGHT_TWINKLE
 | 
				
			||||||
    endif
 | 
					    endif
 | 
				
			||||||
@@ -62,3 +59,10 @@ endif
 | 
				
			|||||||
ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
 | 
					ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
 | 
				
			||||||
    SRC += oled_stuff.c
 | 
					    SRC += oled_stuff.c
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)
 | 
				
			||||||
 | 
					    POINTING_DEVICE_ENABLE := yes
 | 
				
			||||||
 | 
					    OPT_DEFS += -DPIMORONI_TRACKBALL_ENABLE
 | 
				
			||||||
 | 
					    SRC += pimoroni_trackball.c
 | 
				
			||||||
 | 
					    QUANTUM_LIB_SRC += i2c_master.c
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user