diff options
author | Jacob Jerrell <jacob.jerrell@gmail.com> | 2020-12-06 00:30:27 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-06 17:30:27 +1100 |
commit | 3076f86dc11d346d07c63e5fb11702817d7034e7 (patch) | |
tree | ebf9b4f3dd89366069f2123a0c984692c3d98e52 /layouts/community/ortho_4x12/bocaj | |
parent | 6b1f96dca8b1218c0e3de6ef23dbde107f8c4588 (diff) |
Bocaj - Third Annual Refactor (Redux) (#10295)
* Reset everything to upstream, reapply Bocaj changes
* Bocaj - address PR comments
* Just in time changes
* Bocaj - Several adjustments after using the layout for a while
Diffstat (limited to 'layouts/community/ortho_4x12/bocaj')
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/config.h | 109 | ||||
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/keymap.c | 286 | ||||
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/readme.md | 23 | ||||
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/rules.mk | 44 |
4 files changed, 462 insertions, 0 deletions
diff --git a/layouts/community/ortho_4x12/bocaj/config.h b/layouts/community/ortho_4x12/bocaj/config.h new file mode 100644 index 0000000000..2f5b731984 --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/config.h @@ -0,0 +1,109 @@ +#pragma once + +#define LEADER_TIMEOUT 250 +#define LEADER_PER_KEY_TIMING + +#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM) +# if defined(KEYBOARD_planck_light) +# define RGB_DI_PIN A0 +# define RGBLED_NUM 13 // Number of LEDs +# endif +# define RGBLIGHT_HUE_STEP 12 +# define RGBLIGHT_SAT_STEP 12 +# define RGBLIGHT_VAL_STEP 12 +# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 +# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 +# ifdef RGB_MATRIX_ENABLE +# define RGBLIGHT_DISABLE_KEYCODES +# endif +#endif // RGBLIGHT_ENABLE + +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot) +// #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS +// #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects +// #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 +# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +# undef RGB_MATRIX_LED_PROCESS_LIMIT +# undef RGB_MATRIX_LED_FLUSH_LIMIT +#endif + +#if defined(KEYBOARD_planck_ez) +# undef PRODUCT +# define PRODUCT Bocaj Hacked Planck EZ +#endif + +#define EEPROM_I2C_RM24C512C + +#define ENCODER_DIRECTION_FLIP +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +// #define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#define FB_ERM_LRA 1 /* For ERM:0 or LRA:1*/ +#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */ +#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */ + +/* default 3V ERM vibration motor voltage and library*/ +#if FB_ERM_LRA == 0 +# define RATED_VOLTAGE 3 +# define V_RMS 2.3 +# define V_PEAK 3.30 +/* Library Selection */ +# define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */ + +/* default 2V LRA voltage and library */ +#elif FB_ERM_LRA == 1 +# define RATED_VOLTAGE 2 +# define V_RMS 2.0 +# define V_PEAK 2.85 +# define F_LRA 200 +/* Library Selection */ +# define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */ + +#endif + +/* Control 1 register settings */ +#define DRIVE_TIME 25 +#define AC_COUPLE 0 +#define STARTUP_BOOST 1 + +/* Control 2 Settings */ +#define BIDIR_INPUT 1 +#define BRAKE_STAB 1 /* Loopgain is reduced when braking is almost complete to improve stability */ +#define SAMPLE_TIME 3 +#define BLANKING_TIME 1 +#define IDISS_TIME 1 + +/* Control 3 settings */ +#define NG_THRESH 2 +#define ERM_OPEN_LOOP 1 +#define SUPPLY_COMP_DIS 0 +#define DATA_FORMAT_RTO 0 +#define LRA_DRIVE_MODE 0 +#define N_PWM_ANALOG 0 +#define LRA_OPEN_LOOP 0 +/* Control 4 settings */ +#define ZC_DET_TIME 0 +#define AUTO_CAL_TIME 3 diff --git a/layouts/community/ortho_4x12/bocaj/keymap.c b/layouts/community/ortho_4x12/bocaj/keymap.c new file mode 100644 index 0000000000..0ac22b4ccf --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/keymap.c @@ -0,0 +1,286 @@ +/* +Copyright 2020 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell + +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 "bocaj.h" + +#ifdef BACKLIGHT_ENABLE +enum planck_keycodes { + BACKLIT = NEW_SAFE_RANGE, + TH_LVL, +}; + +#else +# define BACKLIT OSM(MOD_LSFT) +enum planck_keycodes { + TH_LVL = NEW_SAFE_RANGE, +}; +#endif + +/* + * Tap/Hold Wrapper + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | |Shift | Cmd | Alt | | | Alt | Cmd |Shift | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Ctrl | | | | | | | | | Ctrl | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | |Lower | |Raise | | | | | + * `-----------------------------------------------------------------------------------' + */ +#define LAYOUT_ortho_4x12_bocaj(...) WRAPPER_planck_bocaj(__VA_ARGS__) + +/* + * Base Alphanumeric Wrapper + Tap/Hold Wrapper + * ,-----------------------------------------------------------------------------------. + * | Esc | | | | | | | | | | | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | | | | | HYPR | MEH | | | | | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| | | | | | | | | | | TTMOD| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | MOMOD| Lead | Up | Left |BkSpc | Space |Enter |Right | Down | XXX | XXX | + * `-----------------------------------------------------------------------------------' + */ +#define LAYOUT_ortho_4x12_bocaj_base(...) WRAPPER_planck_bocaj_base(__VA_ARGS__) +#define LAYOUT_ortho_4x12_bocaj_base_WIN(...) WRAPPER_planck_bocaj_base_WIN(__VA_ARGS__) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_WORKMAN] = LAYOUT_ortho_4x12_bocaj_base( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ + ), + [_WWORKMAN] = LAYOUT_ortho_4x12_bocaj_base_WIN( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ + ), + + [_QWERTY] = LAYOUT_ortho_4x12_bocaj_base( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ + ), + [_WQWERTY] = LAYOUT_ortho_4x12_bocaj_base_WIN( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ + ), + + [_LOWER] = LAYOUT_ortho_4x12_bocaj( + ___________________LOWER_L1_EXT____________________, ___________________LOWER_R1_EXT____________________, + ___________________LOWER_L2_EXT____________________, ___________________LOWER_R2_EXT____________________, + ___________________LOWER_L3_EXT____________________, ___________________LOWER_R3_EXT____________________, + _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_COMM, _______, _______ + ), + + [_RAISE] = LAYOUT_ortho_4x12_bocaj( + KC_TILD, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_EQUAL, + KC_F11, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_F12, + _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = WRAPPER_ortho_4x12( + KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST, + VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST, + TH_LVL, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, RGB_IDL, + HPT_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; +// clang-format on + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { +#ifdef BACKLIGHT_ENABLE + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); +# ifdef BACKLIGHT_ENABLE + backlight_step(); +# endif + } else { + unregister_code(KC_RSFT); + } + break; +#endif +#ifdef KEYBOARD_planck_ez + case TH_LVL: + if (record->event.pressed) { + keyboard_config.led_level++; + if (keyboard_config.led_level > 4) { + keyboard_config.led_level = 0; + } + planck_ez_right_led_level((uint8_t)keyboard_config.led_level * 255 / 4); + planck_ez_left_led_level((uint8_t)keyboard_config.led_level * 255 / 4); + eeconfig_update_kb(keyboard_config.raw); + layer_state_set_kb(layer_state); + } + break; +#endif + } + return true; +} + +bool music_mask_user(uint16_t keycode) { + switch (keycode) { + default: + return true; + } +} + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off +void suspend_power_down_keymap(void) { + rgb_matrix_set_suspend_state(true); +} + +void suspend_wakeup_init_keymap(void) { + rgb_matrix_set_suspend_state(false); +} +// clang-format on + +void rgb_matrix_indicators_user(void) { + uint8_t this_mod = get_mods(); + uint8_t this_led = host_keyboard_leds(); + uint8_t this_osm = get_oneshot_mods(); + bool is_ez; +# ifdef KEYBOARD_planck_ez + is_ez = true; +# endif + + if (g_suspend_state || !rgb_matrix_config.enable) return; + +# if defined(RGBLIGHT_ENABLE) + if (!userspace_config.rgb_layer_change) +# else + if (userspace_config.rgb_layer_change) +# endif + { + switch (get_highest_layer(layer_state)) { + case _MOD: + rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _RAISE: + rgb_matrix_layer_helper(HSV_BLUE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _LOWER: + rgb_matrix_layer_helper(HSV_GREEN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _ADJUST: + rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + default: { + bool mods_enabled = false; + switch (get_highest_layer(default_layer_state)) { + case _QWERTY: + rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _WQWERTY: + rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _WORKMAN: + rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _WWORKMAN: + rgb_matrix_layer_helper(HSV_GREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + } + break; + } + } + } + + switch (get_highest_layer(default_layer_state)) { + case _QWERTY: + rgb_matrix_set_color(is_ez ? 41 : 42, 0x00, 0xFF, 0xFF); + break; + case _WORKMAN: + rgb_matrix_set_color(is_ez ? 41 : 42, 0xD9, 0xA5, 0x21); + break; + } + + if ((this_mod | this_osm) & MODS_SHIFT_MASK || this_led & (1 << USB_LED_CAPS_LOCK)) { + rgb_matrix_set_color_row(0, 0x00, 0xFF, 0x00); + } + if ((this_mod | this_osm) & MODS_CTRL_MASK && (this_mod | this_osm) & MODS_GUI_MASK) { + rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0xFF); + } else if ((this_mod | this_osm) & MODS_CTRL_MASK) { + rgb_matrix_set_color_row(1, 0xFF, 0x00, 0x00); + } else if ((this_mod | this_osm) & MODS_GUI_MASK) { + rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0x00); + } + if ((this_mod | this_osm) & MODS_ALT_MASK) { + rgb_matrix_set_color_row(2, 0x00, 0x00, 0xFF); + } +} +#endif // RGB_MATRIX_INIT + +void matrix_init_keymap(void) {} + +#ifdef ENCODER_ENABLE +void encoder_update(bool clockwise) { + switch (get_highest_layer(layer_state)) { + case _RAISE: + clockwise ? tap_code(KC_VOLD) : tap_code(KC_VOLU); + break; + case _LOWER: +# ifdef RGB_MATRIX_ENABLE + clockwise ? rgb_matrix_step() : rgb_matrix_step_reverse(); +# else + clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP); +# endif + break; + case _ADJUST: +# ifdef AUDIO_CLICKY + clockwise ? clicky_freq_up() : clicky_freq_down(); +# endif + break; + default: + clockwise ? tap_code(KC_DOWN) : tap_code(KC_UP); + } +# ifdef AUDIO_CLICKY + clicky_play(); +# endif +} +#endif // ENCODER_ENABLE + +#ifdef KEYBOARD_planck_ez +layer_state_t layer_state_set_keymap(layer_state_t state) { + planck_ez_left_led_off(); + planck_ez_right_led_off(); + switch (get_highest_layer(state)) { + case _LOWER: + planck_ez_left_led_on(); + break; + case _RAISE: + planck_ez_right_led_on(); + break; + case _ADJUST: + planck_ez_right_led_on(); + planck_ez_left_led_on(); + break; + default: + break; + } + return state; +} +#endif diff --git a/layouts/community/ortho_4x12/bocaj/readme.md b/layouts/community/ortho_4x12/bocaj/readme.md new file mode 100644 index 0000000000..a3716b8dc0 --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/readme.md @@ -0,0 +1,23 @@ +# Overview + +This is my Planck EZ layout, heavily based upon [my ergodox layout](../../ergodox/bocaj/). + +I got this keyboard for two reasons: + +1. QMK spoiled me and the Ergodox isn't incredibly portable (ok 3 reasons) +2. This can sit ontop of my janky Macbook Pro keyboard (disabled with Karabiner if the planck is connected) when I want to work from the couch. + +## How to Build + +Put simply: +`make planck/ez:bocaj` + +On that note, I use a separate workspace when making changes to my layouts or userspace. In that repo, there is a tool that does this for me. See [JacobJerrell/qmk_layouts/tools/](https://github.com/JacobJerrell/qmk_layouts/tree/master/tools) until I get documentation finished (Write code first, define requirements second... right?). + +## Layers + +* WORKMAN/QWERTY: Default is workman, can be switched via the ADJUST layer. Idk why you would though. +* LOWER: Nums across the top, switches enter key to tab and tab key to delete. Symbols in the middle, remenascent of the ergodox +* RAISE: Symbols across the top, F-Keys on the 2nd row. Switches backspace to delete +* ADJUST: Computer Audio controls, RGB controls, Sound controls, macros, etc. +* MOD: Mouse controls under the left hand. Numpad under the right hand
\ No newline at end of file diff --git a/layouts/community/ortho_4x12/bocaj/rules.mk b/layouts/community/ortho_4x12/bocaj/rules.mk new file mode 100644 index 0000000000..3383cfd35f --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/rules.mk @@ -0,0 +1,44 @@ +BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +TAP_DANCE_ENABLE = no +SPACE_CADET_ENABLE = no +NKRO_ENABLE = yes + +ifneq ($(strip $(KEYBOARD)), planck/rev6) + CONSOLE_ENABLE = no + COMMAND_ENABLE = no + ifeq ($(strip $(LAYOUT_HAS_RGB)), yes) + RGBLIGHT_ENABLE = yes + INDICATOR_LIGHTS = yes + RGBLIGHT_TWINKLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + endif +else + CONSOLE_ENABLE = yes + COMMAND_ENABLE = yes + RGBLIGHT_ENABLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + RGB_MATRIX_ENABLE = no + AUDIO_ENABLE = yes + EEPROM_DRIVER = i2c +endif +ifeq ($(strip $(KEYBOARD)), planck/light) + RGB_MATRIX_ENABLE = yes + RGBLIGHT_ENABLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + AUDIO_ENABLE = yes + # HAPTIC_ENABLE += SOLENOID +endif +ifeq ($(strip $(KEYBOARD)), planck/ez) + RGBLIGHT_ENABLE = no + # SERIAL_LINK_ENABLE = yes + ENCODER_ENABLE = yes + RGB_MATRIX_ENABLE = IS31FL3737 + INDICATOR_LIGHTS = yes + RGBLIGHT_TWINKLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + CONSOLE_ENABLE = yes + COMMAND_ENABLE = yes + AUDIO_ENABLE = yes +endif |