/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) * * 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 . */ #pragma once #include QMK_KEYBOARD_H #include "eeprom.h" #include "keyrecords/wrappers.h" #include "keyrecords/process_records.h" #ifdef TAP_DANCE_ENABLE # include "keyrecords/tap_dances.h" #endif // TAP_DANCE_ENABLE #if defined(RGBLIGHT_ENABLE) # include "rgb/rgb_stuff.h" #endif #if defined(RGB_MATRIX_ENABLE) # include "rgb/rgb_matrix_stuff.h" #endif #if defined(OLED_ENABLE) # include "oled/oled_stuff.h" #endif #ifdef SPLIT_KEYBOARD # include "split/transport_sync.h" #endif #ifdef POINTING_DEVICE_ENABLE # include "pointing/pointing.h" #endif /* Define layer names */ enum userspace_layers { _QWERTY = 0, _NUMLOCK = 0, FIRST_DEFAULT_LAYER = 0, _COLEMAK_DH, _COLEMAK, _DVORAK, LAST_DEFAULT_LAYER = _DVORAK, _GAMEPAD, _DIABLO, _DIABLOII, _MOUSE, _MEDIA, _LOWER, _RAISE, _ADJUST, }; #define _MACROS _MOUSE #define _DEFAULT_LAYER_1 FIRST_DEFAULT_LAYER #define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 1) #define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 2) #define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 3) #if LAST_DEFAULT_LAYER > (FIRST_DEFAULT_LAYER + 3) # define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 4) # define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 5) # define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 6) # define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 7) # if LAST_DEFAULT_LAYER > (FIRST_DEFAULT_LAYER + 7) # define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 8) # define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 9) # define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 10) # define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 11) # endif #endif #define DEFAULT_LAYER_1_HSV HSV_CYAN #define DEFAULT_LAYER_2_HSV HSV_CHARTREUSE #define DEFAULT_LAYER_3_HSV HSV_MAGENTA #define DEFAULT_LAYER_4_HSV HSV_GOLDENROD #define DEFAULT_LAYER_1_RGB RGB_CYAN #define DEFAULT_LAYER_2_RGB RGB_CHARTREUSE #define DEFAULT_LAYER_3_RGB RGB_MAGENTA #define DEFAULT_LAYER_4_RGB RGB_GOLDENROD bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed); bool mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); void matrix_init_keymap(void); void matrix_init_secret(void); void shutdown_keymap(void); void suspend_power_down_keymap(void); void suspend_wakeup_init_keymap(void); void matrix_scan_keymap(void); void matrix_scan_secret(void); layer_state_t layer_state_set_keymap(layer_state_t state); layer_state_t default_layer_state_set_keymap(layer_state_t state); void led_set_keymap(uint8_t usb_led); void eeconfig_init_keymap(void); bool hasAllBitsInMask(uint8_t value, uint8_t mask); #ifdef SPLIT_KEYBOARD void matrix_slave_scan_keymap(void); #endif // clang-format off typedef union { uint32_t raw; struct { bool rgb_layer_change :1; bool is_overwatch :1; bool nuke_switch :1; bool swapped_numbers :1; bool rgb_matrix_idle_anim :1; bool autocorrection :1; }; } userspace_config_t; // clang-format on extern userspace_config_t userspace_config; /* Custom Keycodes for Diablo 3 layer But since TD() doesn't work when tap dance is disabled We use custom codes here, so we can substitute the right stuff */ #ifdef TAP_DANCE_ENABLE # define KC_D3_1 TD(TD_D3_1) # define KC_D3_2 TD(TD_D3_2) # define KC_D3_3 TD(TD_D3_3) # define KC_D3_4 TD(TD_D3_4) #else // TAP_DANCE_ENABLE # define KC_D3_1 KC_1 # define KC_D3_2 KC_2 # define KC_D3_3 KC_3 # define KC_D3_4 KC_4 #endif // TAP_DANCE_ENABLE