|
@@ -17,256 +17,36 @@ along with this program. If not, see <http:
|
|
|
|
|
|
#include QMK_KEYBOARD_H
|
|
#include QMK_KEYBOARD_H
|
|
|
|
|
|
-#define MEDIA_KEY_DELAY 10
|
|
|
|
-#define ALT_TAB_DELAY 1000
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-#define PERSISTENT_ENCODER_MODES
|
|
|
|
-
|
|
|
|
-#define ENCODER_MODE_CHANGE_DELAY 30000
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-enum keyboard_keycodes {
|
|
|
|
- ECLICK = SAFE_RANGE,
|
|
|
|
- ALTTABF ,
|
|
|
|
- ALTTABB ,
|
|
|
|
- ALTTABC ,
|
|
|
|
- ENCMUP ,
|
|
|
|
- ENCMDN ,
|
|
|
|
- NEW_SAFE_RANGE
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-const keyevent_t sample_pressed_keyevent = {
|
|
|
|
- .key = (keypos_t){.row = 5, .col = 13},
|
|
|
|
- .pressed = true,
|
|
|
|
- .time = 0
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-keyrecord_t sample_pressed_keyrecord = {
|
|
|
|
- .event = sample_pressed_keyevent
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-const keyevent_t sample_released_keyevent = {
|
|
|
|
- .key = (keypos_t){.row = 5, .col = 13},
|
|
|
|
- .pressed = false,
|
|
|
|
- .time = 0
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-keyrecord_t sample_released_keyrecord = {
|
|
|
|
- .event = sample_released_keyevent
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-uint16_t temp_timer = 0;
|
|
|
|
-void tap_process_record_user(uint16_t keycode)
|
|
|
|
-{
|
|
|
|
- temp_timer = timer_read();
|
|
|
|
- sample_pressed_keyrecord.event.time = timer_read();
|
|
|
|
- process_record_user( keycode, &sample_pressed_keyrecord );
|
|
|
|
- while (timer_elapsed(temp_timer) < MEDIA_KEY_DELAY);
|
|
|
|
- sample_released_keyrecord.event.time = timer_read();
|
|
|
|
- process_record_user( keycode, &sample_released_keyrecord );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-void process_special_keycode(uint16_t keycode) {
|
|
|
|
- if (SAFE_RANGE <= keycode && keycode < NEW_SAFE_RANGE) tap_process_record_user(keycode);
|
|
|
|
- else tap_code(keycode);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-uint16_t encoder_click_delay = ENCODER_MODE_CHANGE_DELAY;
|
|
|
|
-
|
|
|
|
-uint8_t startup_color[3] = {0xFF,0xFF,0xFF};
|
|
|
|
-
|
|
|
|
-typedef struct _encoder_mode_t {
|
|
|
|
- uint8_t indicator_color[3];
|
|
|
|
- uint16_t clockwise_key[4];
|
|
|
|
- uint16_t counterclockwise_key[4];
|
|
|
|
- uint16_t clicked_key[4] ;
|
|
|
|
- uint16_t hold_key;
|
|
|
|
-} encoder_mode_t;
|
|
|
|
-
|
|
|
|
-encoder_mode_t encoder_modes[] = {
|
|
|
|
- { .indicator_color = {0xFF,0x00,0x00} , .clockwise_key = {KC_VOLU, KC_VOLU, KC_VOLU, ENCMUP}, .counterclockwise_key = {KC_VOLD, KC_VOLD, KC_VOLD , ENCMDN}, .clicked_key = {ENCMUP , ENCMUP , ENCMUP , ENCMUP }, .hold_key = KC_NO },
|
|
|
|
- { .indicator_color = {0x00,0xFF,0x00} , .clockwise_key = {KC_WH_U, KC_VOLU, KC_WH_U, ENCMUP}, .counterclockwise_key = {KC_WH_D, KC_WH_D, KC_WH_D , ENCMDN}, .clicked_key = {ENCMUP , ENCMUP , ENCMUP , ENCMUP }, .hold_key = KC_NO },
|
|
|
|
- { .indicator_color = {0x00,0x00,0xFF} , .clockwise_key = {ALTTABF, KC_VOLU, ALTTABF, ENCMUP}, .counterclockwise_key = {ALTTABB, ALTTABB, ALTTABB , ENCMDN}, .clicked_key = {ENCMUP , ENCMUP , ENCMUP , ENCMUP }, .hold_key = KC_NO }
|
|
|
|
-
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0]))
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-int encoder_mode_count = 0;
|
|
|
|
-
|
|
|
|
-#ifdef PERSISTENT_ENCODER_MODES
|
|
|
|
-typedef union {
|
|
|
|
- uint32_t raw;
|
|
|
|
- struct {
|
|
|
|
- int user_encoder_mode_count;
|
|
|
|
-};
|
|
|
|
-} user_config_t;
|
|
|
|
-
|
|
|
|
-user_config_t user_config;
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-void set_indicator_colors(uint8_t color[3]){
|
|
|
|
- rgblight_setrgb_at(color[0], color[1], color[2],0);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-void keyboard_pre_init_user(void){
|
|
|
|
- set_indicator_colors(startup_color);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-void keyboard_post_init_user(void){
|
|
|
|
-#ifdef PERSISTENT_ENCODER_MODES
|
|
|
|
- user_config.raw = eeconfig_read_user();
|
|
|
|
- encoder_mode_count = user_config.user_encoder_mode_count ;
|
|
|
|
-#else
|
|
|
|
- encoder_mode_count = 0;
|
|
|
|
-#endif
|
|
|
|
- set_indicator_colors(encoder_modes[ encoder_mode_count ].indicator_color);
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
#define LTCAPS LT(2, KC_CAPS)
|
|
#define LTCAPS LT(2, KC_CAPS)
|
|
#define MTRSFT RSFT_T(KC_UP)
|
|
#define MTRSFT RSFT_T(KC_UP)
|
|
|
|
|
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
- [0] = LAYOUT_all(
|
|
+ [0] = LAYOUT_all(
|
|
- ECLICK , KC_PSLS, KC_PAST, KC_BSPC, KC_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC,
|
|
+ KC_MUTE, KC_PSLS, KC_PAST, KC_BSPC, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
|
- KC_PMNS, KC_P7 , KC_P8 , KC_P9 , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
|
|
+ KC_PMNS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
|
- KC_PPLS, KC_P4 , KC_P5 , KC_P6 , LTCAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_BSPC,
|
|
+ KC_PPLS, KC_P4, KC_P5, KC_P6, LTCAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_BSPC,
|
|
- KC_PENT, KC_P1 , KC_P2 , KC_P3 , KC_LSFT, KC_BSLS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, MTRSFT , KC_NUHS,
|
|
+ KC_PENT, KC_P1, KC_P2, KC_P3, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MTRSFT, KC_NUHS,
|
|
- KC_PENT, KC_P0 , KC_P0 , KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , TG(1) , MO(2) , KC_LEFT, KC_DOWN, KC_RGHT, MO(2)
|
|
+ KC_PENT, KC_P0, KC_P0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, TG(1), MO(2), KC_LEFT, KC_DOWN, KC_RGHT, MO(2)
|
|
- ),
|
|
+ ),
|
|
- [1] = LAYOUT_all(
|
|
+ [1] = LAYOUT_all(
|
|
- ECLICK , KC_PSLS, KC_PAST, KC_BSPC, KC_GESC, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_BSPC,
|
|
+ KC_MUTE, KC_PSLS, KC_PAST, KC_BSPC, KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC,
|
|
- KC_PMNS, KC_P7 , KC_P8 , KC_P9 , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
|
|
+ KC_PMNS, KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
|
- KC_PPLS, KC_P4 , KC_P5 , KC_P6 , LTCAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_BSPC,
|
|
+ KC_PPLS, KC_P4, KC_P5, KC_P6, LTCAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_BSPC,
|
|
- KC_PENT, KC_P1 , KC_P2 , KC_P3 , KC_LSFT, KC_BSLS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, MTRSFT , KC_NUHS,
|
|
+ KC_PENT, KC_P1, KC_P2, KC_P3, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MTRSFT, KC_NUHS,
|
|
- KC_PENT, KC_P0 , KC_P0 , KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , TG(1) , MO(2) , KC_LEFT, KC_DOWN, KC_RGHT, MO(2)
|
|
+ KC_PENT, KC_P0, KC_P0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, TG(1), MO(2), KC_LEFT, KC_DOWN, KC_RGHT, MO(2)
|
|
- ),
|
|
+ ),
|
|
- [2] = LAYOUT_all(
|
|
+ [2] = LAYOUT_all(
|
|
- ECLICK , KC_F10 , KC_F11 , KC_NUM , KC_GRV , KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_NO ,
|
|
+ KC_MUTE, KC_F10, KC_F11, KC_NUM, KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, XXXXXXX,
|
|
- KC_MINS, KC_F7 , KC_F8 , KC_F9 , KC_TAB , KC_NO , KC_PGUP, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_INS , KC_NO , KC_PSCR, KC_NO , KC_NO , KC_DEL ,
|
|
+ KC_MINS, KC_F7, KC_F8, KC_F9, KC_TAB, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, XXXXXXX, KC_PSCR, XXXXXXX, XXXXXXX, KC_DEL,
|
|
- KC_EQL , KC_F4 , KC_F5 , KC_F6 , KC_TRNS, KC_HOME, KC_PGDN, KC_END , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
|
|
+ KC_EQL, KC_F4, KC_F5, KC_F6, _______, KC_HOME, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
- KC_NO , KC_F1 , KC_F2 , KC_F3 , KC_NO , KC_NO , KC_LPRN, KC_RPRN, KC_NO , KC_NO , KC_NO , KC_NO , KC_MUTE, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
|
|
+ XXXXXXX, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, KC_LPRN, KC_RPRN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
- KC_NO , KC_CALC, KC_CALC, KC_DEL , KC_NO , GUI_TOG, KC_SLEP, KC_NO , KC_NO , KC_TRNS, KC_NO , KC_NO , KC_NO , KC_TRNS
|
|
+ XXXXXXX, KC_CALC, KC_CALC, KC_DEL, XXXXXXX, GUI_TOG, KC_SLEP, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______
|
|
- ),
|
|
+ ),
|
|
- [3] = LAYOUT_all(
|
|
+ [3] = LAYOUT_all(
|
|
- ECLICK , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
|
|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
- KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
|
|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
- KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
|
|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
- KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
|
|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
|
- KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO
|
|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
|
|
- )
|
|
+ )
|
|
};
|
|
};
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-bool is_alt_tab_active = false;
|
|
|
|
-uint32_t alt_tab_timer = 0;
|
|
|
|
-uint16_t mapped_code = 0;
|
|
|
|
-uint32_t held_keycode_timer = 0;
|
|
|
|
-
|
|
|
|
-int current_layer = 0 ;
|
|
|
|
-
|
|
|
|
-void cycle_encoder_mode(bool forward){
|
|
|
|
- if (forward) encoder_mode_count++ ;
|
|
|
|
- else encoder_mode_count-- ;
|
|
|
|
- if (encoder_mode_count == -1) encoder_mode_count = NUM_ENCODER_MODES - 1;
|
|
|
|
-
|
|
|
|
- encoder_mode_count = encoder_mode_count % NUM_ENCODER_MODES ;
|
|
|
|
-#ifdef PERSISTENT_ENCODER_MODES
|
|
|
|
- user_config.user_encoder_mode_count = encoder_mode_count ;
|
|
|
|
- eeconfig_update_user(user_config.raw);
|
|
|
|
-#endif
|
|
|
|
- set_indicator_colors( encoder_modes[ encoder_mode_count ].indicator_color );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool encoder_update_user(uint8_t index, bool clockwise) {
|
|
|
|
- process_special_keycode(clockwise ? encoder_modes[ encoder_mode_count ].clockwise_key[ current_layer ] : encoder_modes[ encoder_mode_count ].counterclockwise_key[ current_layer ]);
|
|
|
|
- return false;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-uint32_t held_click_timer = 0;
|
|
|
|
-bool is_click_held = false;
|
|
|
|
-bool is_shift_held = false;
|
|
|
|
-bool automatic_hold_cycle = false;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-bool is_lalt_pressed = false;
|
|
|
|
-
|
|
|
|
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
|
|
- switch (keycode) {
|
|
|
|
- case KC_LSFT:
|
|
|
|
- case KC_RSFT:
|
|
|
|
- if (record->event.pressed) is_shift_held = true;
|
|
|
|
- else is_shift_held = false;
|
|
|
|
- return true;
|
|
|
|
- case ECLICK:
|
|
|
|
-
|
|
|
|
- if (record->event.pressed) {
|
|
|
|
- is_click_held = true;
|
|
|
|
- held_click_timer = timer_read32();
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- is_click_held = false;
|
|
|
|
- if (timer_elapsed32(held_click_timer) < encoder_click_delay && !automatic_hold_cycle ) process_special_keycode( encoder_modes[ encoder_mode_count ].clicked_key[ current_layer ] ) ;
|
|
|
|
- automatic_hold_cycle = false;
|
|
|
|
- }
|
|
|
|
- return true;
|
|
|
|
- case KC_LALT:
|
|
|
|
- if (record->event.pressed) is_lalt_pressed = true;
|
|
|
|
- else is_lalt_pressed = false;
|
|
|
|
- return true;
|
|
|
|
- case ENCMUP:
|
|
|
|
- case ENCMDN:
|
|
|
|
- if (record->event.pressed) cycle_encoder_mode(keycode == ENCMUP);
|
|
|
|
- return false;
|
|
|
|
- case ALTTABF:
|
|
|
|
- case ALTTABB:
|
|
|
|
- if (record->event.pressed) {
|
|
|
|
- if (!is_alt_tab_active) {
|
|
|
|
- is_alt_tab_active = true;
|
|
|
|
- register_code(KC_LALT);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- tap_code16(keycode == ALTTABF ? KC_TAB : S(KC_TAB));
|
|
|
|
- alt_tab_timer = timer_read32();
|
|
|
|
- }
|
|
|
|
- return true;
|
|
|
|
- case ALTTABC:
|
|
|
|
- if (record->event.pressed) {
|
|
|
|
- if (is_alt_tab_active) {
|
|
|
|
- if (!is_lalt_pressed) unregister_code(KC_LALT);
|
|
|
|
- is_alt_tab_active = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return false;
|
|
|
|
- default:
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void housekeeping_task_user(void) {
|
|
|
|
- current_layer = get_highest_layer(layer_state);
|
|
|
|
- if (is_alt_tab_active) {
|
|
|
|
- if (is_lalt_pressed) alt_tab_timer = timer_read32();
|
|
|
|
- else if (timer_elapsed32(alt_tab_timer) > ALT_TAB_DELAY) {
|
|
|
|
- unregister_code(KC_LALT);
|
|
|
|
- is_alt_tab_active = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-- (1) Sets the automatic_hold_cycle flag which prevents process_record_user from triggering the click key when the push is released
|
|
|
|
-- (2) Processes the current mode's hold key in process_record_user
|
|
|
|
-- (3) Resets the click timer
|
|
|
|
-*/
|
|
|
|
- if (is_click_held && timer_elapsed32(held_click_timer) > encoder_click_delay ){
|
|
|
|
- automatic_hold_cycle = true;
|
|
|
|
- process_special_keycode( encoder_modes[ encoder_mode_count ].hold_key );
|
|
|
|
- held_click_timer = timer_read32();
|
|
|
|
- }
|
|
|
|
-}
|
|
|