diff options
Diffstat (limited to 'qmk')
11 files changed, 89 insertions, 97 deletions
diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/callbacks.c b/qmk/keyboards/sofle_choc/keymaps/custom/callbacks.c new file mode 100644 index 0000000..305bacc --- /dev/null +++ b/qmk/keyboards/sofle_choc/keymaps/custom/callbacks.c @@ -0,0 +1,30 @@ +#include QMK_KEYBOARD_H +#include "star_key.h" +#include "lighting.h" +#include "enter_dance.h" +#include "shift_dance.h" +#include "keycodes.h" + +void keyboard_post_init_user(void) { +    lighting_init(); +    star_key_init(); +} + +void housekeeping_task_user(void) { +    if (is_keyboard_master()) { +        sync_star_key(); +    } +    housekeeping_task_lighting(); +} + +void oneshot_mods_changed_user(uint8_t mods) { +    oneshot_mods_changed_lighting(mods); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { +    star_key_process_record(keycode, record); +    shift_dance_process_record(keycode, record); +    enter_dance_process_record(keycode, record); + +    return keycodes_process_record(keycode, record); +} diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.c b/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.c index 8819917..e82eed5 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.c +++ b/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.c @@ -1,26 +1,6 @@  #include QMK_KEYBOARD_H  #include "keymap_bepo.h"  #include "keycodes.h" -#include "star_key.h" -#include "lighting.h" -#include "enter_dance.h" -#include "shift_dance.h" - -void keyboard_post_init_user(void) { -    lighting_init(); -    star_key_init(); -} - -void housekeeping_task_user(void) { -    if (is_keyboard_master()) { -        sync_star_key(); -    } -    housekeeping_task_lighting(); -} - -void oneshot_mods_changed_user(uint8_t mods) { -    oneshot_mods_changed_lighting(mods); -}  /*   * Rules and modifier to apply over the keycodes. This includes the keys @@ -82,7 +62,7 @@ static uint32_t key_timer;           // timer for last keyboard activity, use                                       // idle time possible  static uint16_t latest_key = 0L; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool keycodes_process_record(uint16_t keycode, keyrecord_t *record) {    if (!record->event.pressed) { @@ -92,17 +72,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {        latest_key = keycode;      } -  // Call the callback handlers -  star_key_process_record(keycode, record); -  shift_dance_process_record(keycode, record); -  enter_dance_process_record(keycode, record); -    switch (keycode) { -    case KC_LEFT_SHIFT: -      if (host_keyboard_led_state().caps_lock) { -        tap_code16(KC_CAPS_LOCK); -      } -      return true;      case KC_ESC:      case AL_ENT:        if (layer_state_is(LAYER_SYMBOLS) && !record->event.pressed) { diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.h b/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.h index d75d5d9..1f86bb6 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.h +++ b/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.h @@ -1,4 +1,6 @@  #pragma once +#include QMK_KEYBOARD_H +#include "action.h"  enum {    // Transform the key W into SHIFT or CAPSLOCK @@ -26,3 +28,5 @@ enum {  #define KEY_T   MT(MOD_RCTL, BP_T)  #define KEY_INS MT(MOD_RGUI, KC_INS)  #define TD_ENTR TD(TD_ENTER) + +bool keycodes_process_record(uint16_t keycode, keyrecord_t *record); diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/keymap.c b/qmk/keyboards/sofle_choc/keymaps/custom/keymap.c index fcea429..2b2b41f 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/keymap.c +++ b/qmk/keyboards/sofle_choc/keymaps/custom/keymap.c @@ -30,7 +30,7 @@  // The functions for ACTION_TAP_DANCE_FN_ADVANCED or defined in "quand_dance"  tap_dance_action_t tap_dance_actions[] = {    [TD_PRC]              = ACTION_TAP_DANCE_DOUBLE(BP_EQL, BP_PERC), -  [TD_W_CAPSLOCK]       = ACTION_TAP_DANCE_FN_ADVANCED_WITH_RELEASE(NULL, w_released, w_finished, w_reset), +  [TD_W_CAPSLOCK]       = ACTION_TAP_DANCE_FN_ADVANCED_WITH_RELEASE(NULL, right_shift_released, right_shift_finished, right_shift_reset),    [TD_LAYER_SYMB]       = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ql_finished, ql_reset),    [TD_EE]               = ACTION_TAP_DANCE_DOUBLE(BP_COMM, BP_EGRV),    [TD_ENTER]            = ACTION_TAP_DANCE_FN_ADVANCED_WITH_RELEASE(NULL, enter_released, enter_finished, enter_reset), @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  // In the number layout, I keep the mod-tap modifiers applies to the middle letters :  // -#define KEY_5      MT(MOD_LCTL, KC_P5) +#define KEY_6      MT(MOD_LCTL, KC_P6)  #define KEY_DOWN   MT(MOD_RCTL, KC_DOWN)  #define KEY_PGDN   MT(MOD_RSFT, KC_PGDN) @@ -78,13 +78,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  [LAYER_SYMBOLS] = LAYOUT(      KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                      KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,      KC_TRNS, KC_NO,   KC_P7,   KC_P8,   KC_P9,   KC_BSPC,                    KC_HOME, KC_UP,   KC_END,  KC_TRNS, KC_TRNS, S(BP_EQL), -    KC_TRNS, KC_NO,   KC_P4,   KEY_5,   KC_P6,   KC_NO,                      KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_PGUP, +    KC_TRNS, KC_NO,   KC_P4,   KC_P5,   KEY_6,   KC_NO,                      KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_PGUP,      KC_LSFT, KC_NO,   KC_P1,   KC_P2,   KC_P3,   KC_NO,   KC_MUTE,  KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KEY_PGDN,                        KC_P0,   KC_PDOT, KC_TRNS, KC_TRNS, AL_SPC,   AL_ENT,  KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS  ),  [LAYER_DIACRITIC] = LAYOUT( -    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BP_PERC,      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC,                    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                    BP_CCED, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/lighting.c b/qmk/keyboards/sofle_choc/keymaps/custom/lighting.c index 9e4001d..67ccf2c 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/lighting.c +++ b/qmk/keyboards/sofle_choc/keymaps/custom/lighting.c @@ -2,6 +2,7 @@      uint8_t flags = 0;  #include "keycodes.h"  #include "lighting.h" +#include "keymap_bepo.h"  // The variable is defined in star_key.h  // The LED is on when the key is pressed. @@ -60,26 +61,31 @@ void housekeeping_task_lighting(void) {          counter += 1;      } +    uint8_t matrix_mode = rgb_matrix_get_mode(); +    if (matrix_mode != RGB_MATRIX_BREATHING && host_keyboard_led_state().caps_lock) { +        rgb_matrix_mode_noeeprom(RGB_MATRIX_BREATHING); +    } +      if (flags == last_flags) {          return;      }      last_flags = flags; -    if (get_mods()) { -        if (rgb_matrix_get_mode() != RGB_MATRIX_SOLID_COLOR) { +    if (flags) { +        if (matrix_mode != RGB_MATRIX_SOLID_COLOR) {              rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);          }          uint8_t v = colors[flags].v;          if (counter >= 2)              v *= 2;          rgb_matrix_sethsv_noeeprom(colors[flags].h, colors[flags].s, v); -    } else if (rgb_matrix_get_mode() != RGB_MATRIX_SOLID_REACTIVE_SIMPLE) { +    } else if (matrix_mode != RGB_MATRIX_SOLID_REACTIVE_SIMPLE) {          rgb_matrix_sethsv_noeeprom(HSV_WHITE);          rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_REACTIVE_SIMPLE);      }  } -#define KEY_5      MT(MOD_LCTL, KC_P5) +#define KEY_6      MT(MOD_LCTL, KC_P6)  #define KEY_DOWN   MT(MOD_RCTL, KC_DOWN)  bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {      // Activate effects depending of mods @@ -115,9 +121,11 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {                      rgb_matrix_set_color(index, 128, 128, 128);                      break;                  case KC_P1 ... KC_P0: -                case KEY_5: +                case KEY_6:                      rgb_matrix_set_color(index, 100, 100, 0);                      break; +                case BP_CCED: +                case BP_PERC:                  case KC_PDOT:                      // Add a bit of red for the punction symbol                      rgb_matrix_set_color(index, 150, 50, 0); diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/overrides.h b/qmk/keyboards/sofle_choc/keymaps/custom/overrides.h index 45c723c..79836d4 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/overrides.h +++ b/qmk/keyboards/sofle_choc/keymaps/custom/overrides.h @@ -21,8 +21,6 @@ const key_override_t e_key_override ;  const key_override_t *key_overrides[]= (const key_override_t *[]){      &perc_key_override,      &e_key_override, -    &shift_space_override, -    //&shift_o_override,      // Override the key GUI + MENU and to map the key desktop from the      // typematrix      &(ko_make_basic(MOD_MASK_GUI, KEY_APP, MENU)), diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/quad_tapdance.c b/qmk/keyboards/sofle_choc/keymaps/custom/quad_tapdance.c index 65e4e01..2b01fe9 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/quad_tapdance.c +++ b/qmk/keyboards/sofle_choc/keymaps/custom/quad_tapdance.c @@ -85,7 +85,7 @@ void ql_finished(tap_dance_state_t *state, void *user_data) {  void ql_reset(tap_dance_state_t *state, void *user_data) {      // If the key was held down and now is released then switch off the layer      if (ql_tap_state.state == TD_SINGLE_HOLD) { -        layer_off(LAYER_SYMBOLS); +        layer_clear();      }      ql_tap_state.state = TD_NONE;  } diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/rules.mk b/qmk/keyboards/sofle_choc/keymaps/custom/rules.mk index 5cda5bd..90eda0e 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/rules.mk +++ b/qmk/keyboards/sofle_choc/keymaps/custom/rules.mk @@ -17,4 +17,5 @@ SRC +=  star_key.c \  		shift_dance.c \  		keycodes.c \  		overrides.c \ -		lighting.c +		lighting.c \ +		callbacks.c diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.c b/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.c index 82448a4..403c3df 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.c +++ b/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.c @@ -8,47 +8,54 @@  // The main usage is to send the letter W when pressed, but the key is also  // used to activate the SHIFT mode when pressed.  // -static td_tap_t w_tap_state = { +static td_tap_t right_shift_tap_state = {      .state = TD_NONE  };  // Do not switch the supended mode when the key is released.  // This allow to remove the mod earler without reactivating automatically.  static bool inhibit_mod = 0; - -// Flag telling if the suspended mode is active or not. -static bool activated = 0; +static bool lshift_interrupted = 0;  // If there is any other keypress before releasing the key, do not keep the  // layer once the key is release.  //  // This function is a callbackk called from process_record_user  void shift_dance_process_record(uint16_t keycode, keyrecord_t *record) { -    if (w_tap_state.state == TD_SINGLE_HOLD && record->event.pressed) { +    if (right_shift_tap_state.state == TD_SINGLE_HOLD && record->event.pressed) { +        // If there is any key pressed while holding the key, do not switch +        // in caps lock mod on release.          inhibit_mod = 1;      }      switch (keycode) { +        // If the key is pressed without any other combination, remove the +        // caps lock if activated. +        // Otherwise, act just as a modifier key.          case KC_LSFT: -            activated = 0; -            break; -        // Leave the suspended mode on ESC +            if (record->event.pressed) { +                lshift_interrupted = 0; +                break; +            } +            if (lshift_interrupted) { +                break; +            } +            // Continue on the next block          case KC_ESC: -            if (activated) { -                set_mods(get_mods() & (!MOD_MASK_SHIFT)); -                activated = 0; +            if (host_keyboard_led_state().caps_lock) { +                tap_code16(KC_CAPS_LOCK);              }              break;          default: +            lshift_interrupted = 1;              break;      }      return;  } -void w_finished(tap_dance_state_t *state, void *user_data) { -    w_tap_state.state = cur_dance(state); -    switch (w_tap_state.state) { +void right_shift_finished(tap_dance_state_t *state, void *user_data) { +    right_shift_tap_state.state = cur_dance(state); +    switch (right_shift_tap_state.state) {          case TD_SINGLE_HOLD: -            caps_word_off();              if (get_mods() & MOD_MASK_SHIFT) {                  del_mods(MOD_MASK_SHIFT);                  inhibit_mod = 1; @@ -59,7 +66,7 @@ void w_finished(tap_dance_state_t *state, void *user_data) {      }  } -void w_released(tap_dance_state_t *state, void *user_data) { +void right_shift_released(tap_dance_state_t *state, void *user_data) {      if (state->finished && state->count > 1)          // Exit prevently, we are sure in the next conditions we don’t fall in          // this case. @@ -68,47 +75,19 @@ void w_released(tap_dance_state_t *state, void *user_data) {          tap_code16(BP_W);      else if (!state->interrupted && !inhibit_mod) {          // Final case, the key was keeped pressed without any other action -        // in this case, inverse the Shift mode, and update the activation flag -        set_mods(get_mods() ^ MOD_MASK_SHIFT); -        activated = get_mods() & MOD_MASK_SHIFT; +        // in this case, switch into CAPS LOCK +        del_mods(MOD_MASK_SHIFT); +        tap_code16(KC_CAPS_LOCK);      }      inhibit_mod = 0;  } -void w_reset(tap_dance_state_t *state, void *user_data) { -    switch (w_tap_state.state) { +void right_shift_reset(tap_dance_state_t *state, void *user_data) { +    switch (right_shift_tap_state.state) {          case TD_SINGLE_HOLD:              unregister_code(KC_RIGHT_SHIFT);              break;          default: break;      } -    w_tap_state.state = TD_NONE; +    right_shift_tap_state.state = TD_NONE;  } - - -// Deactivate the shift mode for the space key when the suspended mode is -// active. This allow to insert a normal space character instead of a -// unbreakable space. -const key_override_t shift_space_override = -    {.trigger_mods          = MOD_MASK_SHIFT, -    .layers                 = ~0, -    .suppressed_mods        = MOD_MASK_SHIFT, -    .options                = ko_options_default, -    .negative_mod_mask      = (uint8_t)0, -    .custom_action          = NULL, -    .context                = NULL, -    .trigger                = AL_SPC, -    .replacement            = AL_SPC, -    .enabled                = &activated}; - -const key_override_t shift_o_override = -    {.trigger_mods          = MOD_MASK_SHIFT, -    .layers                 = ~0, -    .suppressed_mods        = MOD_MASK_SHIFT, -    .options                = ko_options_default, -    .negative_mod_mask      = (uint8_t)0, -    .custom_action          = NULL, -    .context                = NULL, -    .trigger                = KC_O, -    .replacement            = KC_O, -    .enabled                = &activated}; diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.h b/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.h index 8cff3fe..4eb7799 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.h +++ b/qmk/keyboards/sofle_choc/keymaps/custom/shift_dance.h @@ -3,9 +3,9 @@  // For the x tap dance. Put it here so it can be used in any keymap -void w_released(tap_dance_state_t *state, void *user_data); -void w_finished(tap_dance_state_t *state, void *user_data); -void w_reset(tap_dance_state_t *state, void *user_data); +void right_shift_released(tap_dance_state_t *state, void *user_data); +void right_shift_finished(tap_dance_state_t *state, void *user_data); +void right_shift_reset(tap_dance_state_t *state, void *user_data);  void shift_dance_process_record(uint16_t keycode, keyrecord_t *record); diff --git a/qmk/keyboards/sofle_choc/keymaps/custom/star_key.h b/qmk/keyboards/sofle_choc/keymaps/custom/star_key.h index d67228f..a91d0a3 100644 --- a/qmk/keyboards/sofle_choc/keymaps/custom/star_key.h +++ b/qmk/keyboards/sofle_choc/keymaps/custom/star_key.h @@ -1,4 +1,6 @@  #pragma once +#include QMK_KEYBOARD_H +#include "action.h"  // Initialize the state.  void star_key_init(void);  | 
