You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					178 lines
				
				4.1 KiB
			
		
		
			
		
	
	
					178 lines
				
				4.1 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								#include "bocaj.h"
							 | 
						||
| 
								 | 
							
								#include "eeprom.h"
							 | 
						||
| 
								 | 
							
								#include "version.h"
							 | 
						||
| 
								 | 
							
								#include "tap_dances.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static uint16_t copy_paste_timer;
							 | 
						||
| 
								 | 
							
								userspace_config_t userspace_config;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* *** *** *** ***  *
							 | 
						||
| 
								 | 
							
								 * Helper Functions *
							 | 
						||
| 
								 | 
							
								 * *** *** *** ***  */
							 | 
						||
| 
								 | 
							
								void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Add reconfigurable functions here, for keymap customization
							 | 
						||
| 
								 | 
							
								// This allows for a global, userspace functions, and continued
							 | 
						||
| 
								 | 
							
								// customization of the keymap.  Use _keymap instead of _user
							 | 
						||
| 
								 | 
							
								// functions in the keymaps
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								void matrix_init_keymap(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								void startup_keymap(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								void suspend_power_down_keymap(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								void suspend_wakeup_init_keymap(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								void matrix_scan_keymap(void) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
							 | 
						||
| 
								 | 
							
								  return true;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
							 | 
						||
| 
								 | 
							
								  return true;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								uint32_t layer_state_set_keymap (uint32_t state) {
							 | 
						||
| 
								 | 
							
								  return state;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								uint32_t default_layer_state_set_keymap (uint32_t state) {
							 | 
						||
| 
								 | 
							
								  return state;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__attribute__ ((weak))
							 | 
						||
| 
								 | 
							
								void led_set_keymap(uint8_t usb_led) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Call user matrix init, set default RGB colors and then
							 | 
						||
| 
								 | 
							
								// call the keymap's init function
							 | 
						||
| 
								 | 
							
								void matrix_init_user(void) {
							 | 
						||
| 
								 | 
							
								  userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE);
							 | 
						||
| 
								 | 
							
								  matrix_init_keymap();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void startup_user (void) {
							 | 
						||
| 
								 | 
							
								  startup_keymap();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void suspend_power_down_user(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    suspend_power_down_keymap();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void suspend_wakeup_init_user(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  suspend_wakeup_init_keymap();
							 | 
						||
| 
								 | 
							
								  #ifdef KEYBOARD_ergodox_ez
							 | 
						||
| 
								 | 
							
								  wait_ms(10);
							 | 
						||
| 
								 | 
							
								  #endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// No global matrix scan code, so just run keymap's matrix
							 | 
						||
| 
								 | 
							
								// scan function
							 | 
						||
| 
								 | 
							
								void matrix_scan_user(void) {
							 | 
						||
| 
								 | 
							
								  static bool has_ran_yet;
							 | 
						||
| 
								 | 
							
								  if (!has_ran_yet) {
							 | 
						||
| 
								 | 
							
								    has_ran_yet = true;
							 | 
						||
| 
								 | 
							
								    startup_user();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef TAP_DANCE_ENABLE  // Run Diablo 3 macro checking code.
							 | 
						||
| 
								 | 
							
								  run_diablo_macro_check();
							 | 
						||
| 
								 | 
							
								#endif // TAP_DANCE_ENABLE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  matrix_scan_keymap();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool process_record_user(uint16_t keycode, keyrecord_t *record) {
							 | 
						||
| 
								 | 
							
								  /* uint8_t default_layer = 0;
							 | 
						||
| 
								 | 
							
								  default_layer = eeconfig_read_default_layer(); */
							 | 
						||
| 
								 | 
							
								  switch (keycode) {
							 | 
						||
| 
								 | 
							
								    case JJ_COPY:
							 | 
						||
| 
								 | 
							
								      if (!record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        SEND_STRING(SS_LGUI("c"));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case JJ_PSTE:
							 | 
						||
| 
								 | 
							
								      if (!record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        SEND_STRING(SS_LGUI("v"));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case JJ_ARRW:
							 | 
						||
| 
								 | 
							
								      if (!record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        SEND_STRING("->");
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break; /*
							 | 
						||
| 
								 | 
							
								    case KC_SWRK:
							 | 
						||
| 
								 | 
							
								      if (!record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        set_single_persistent_default_layer(_SWRKMN);
							 | 
						||
| 
								 | 
							
								        layer_move(default_layer);
							 | 
						||
| 
								 | 
							
								        //ergodox_blink_all_leds();
							 | 
						||
| 
								 | 
							
								        //ergodox_blink_all_leds();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case KC_HWRK:
							 | 
						||
| 
								 | 
							
								      if (!record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        set_single_persistent_default_layer(_HWRKMN);
							 | 
						||
| 
								 | 
							
								        layer_move(default_layer);
							 | 
						||
| 
								 | 
							
								        //ergodox_blink_all_leds();
							 | 
						||
| 
								 | 
							
								        //ergodox_blink_all_leds();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case KC_EPRM:
							 | 
						||
| 
								 | 
							
								      if (!record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        //ergodox_blink_all_leds();
							 | 
						||
| 
								 | 
							
								        eeconfig_init();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case MC_LOCK:
							 | 
						||
| 
								 | 
							
								      if (!record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        layer_move(default_layer);
							 | 
						||
| 
								 | 
							
								        SEND_STRING(SS_LCTRL(SS_LGUI("q")));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break; */
							 | 
						||
| 
								 | 
							
								    case KC_DCLR:
							 | 
						||
| 
								 | 
							
								#ifdef TAP_DANCE_ENABLE
							 | 
						||
| 
								 | 
							
								      if (record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        uint8_t dtime;
							 | 
						||
| 
								 | 
							
								        for (dtime = 0; dtime < 4; dtime++) {
							 | 
						||
| 
								 | 
							
								          diablo_key_time[dtime] = diablo_times[0];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								#endif // !TAP_DANCE_ENABLE
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case KC_CCCV:
							 | 
						||
| 
								 | 
							
								      if (record->event.pressed) {
							 | 
						||
| 
								 | 
							
								        copy_paste_timer = timer_read();
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
							 | 
						||
| 
								 | 
							
								          SEND_STRING(SS_LGUI("c"));
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          SEND_STRING(SS_LGUI("v"));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return process_record_keymap(keycode, record);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |