diff options
Diffstat (limited to 'quantum/process_keycode')
| -rw-r--r-- | quantum/process_keycode/process_midi.c | 4 | ||||
| -rw-r--r-- | quantum/process_keycode/process_tap_dance.c | 1 | ||||
| -rw-r--r-- | quantum/process_keycode/process_tap_dance.h | 10 | ||||
| -rw-r--r-- | quantum/process_keycode/process_unicode.c | 52 | ||||
| -rw-r--r-- | quantum/process_keycode/process_unicode.h | 13 | 
5 files changed, 71 insertions, 9 deletions
| diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 8784e64f36..577dad43ac 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -7,7 +7,9 @@ int midi_offset = 7;  bool process_midi(uint16_t keycode, keyrecord_t *record) {      if (keycode == MI_ON && record->event.pressed) {        midi_activated = true; +#ifdef AUDIO_ENABLE        music_scale_user(); +#endif        return false;      } @@ -63,4 +65,4 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) {          return false;      }    return true; -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 79ade4d000..6ae362c4c2 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -70,6 +70,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {        action->state.keycode = keycode;        action->state.count++;        action->state.timer = timer_read(); +      process_tap_dance_action_on_each_tap (action);        if (last_td && last_td != keycode) {          qk_tap_dance_action_t *paction = &tap_dance_actions[last_td - QK_TAP_DANCE]; diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index d7b857bdc6..f753cbba66 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -39,15 +39,17 @@ typedef struct  #define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \      .fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \ -    .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 })  \ +    .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }),  \    }  #define ACTION_TAP_DANCE_FN(user_fn) {  \ -    .fn = { NULL, user_fn, NULL } \ +    .fn = { NULL, user_fn, NULL }, \ +    .user_data = NULL, \    } -#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset) { \ -    .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \ +#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \ +    .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \ +    .user_data = NULL, \    }  extern qk_tap_dance_action_t tap_dance_actions[]; diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index a5d7dca21e..cd3a610b4d 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -2,6 +2,7 @@  static uint8_t input_mode; +__attribute__((weak))  uint16_t hex_to_keycode(uint8_t hex)  {    if (hex == 0x0) { @@ -41,6 +42,11 @@ void unicode_input_start (void) {      register_code(KC_PPLS);      unregister_code(KC_PPLS);      break; +  case UC_WINC: +    register_code(KC_RALT); +    unregister_code(KC_RALT); +    register_code(KC_U); +    unregister_code(KC_U);    }    wait_ms(UNICODE_TYPE_DELAY);  } @@ -77,6 +83,52 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record) {    return true;  } +#ifdef UNICODEMAP_ENABLE +__attribute__((weak)) +const uint32_t PROGMEM unicode_map[] = { +}; + +void register_hex32(uint32_t hex) { +  uint8_t onzerostart = 1; +  for(int i = 7; i >= 0; i--) { +    if (i <= 3) { +      onzerostart = 0; +    } +    uint8_t digit = ((hex >> (i*4)) & 0xF); +    if (digit == 0) { +      if (onzerostart == 0) { +        register_code(hex_to_keycode(digit)); +        unregister_code(hex_to_keycode(digit)); +      } +    } else { +      register_code(hex_to_keycode(digit)); +      unregister_code(hex_to_keycode(digit)); +      onzerostart = 0; +    } +  } +} + +__attribute__((weak)) +void unicode_map_input_error() {} + +bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { +  if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { +    const uint32_t* map = unicode_map; +    uint16_t index = keycode & 0x7FF; +    uint32_t code = pgm_read_dword_far(&map[index]); +    if ((code > 0xFFFF && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) { +      // when character is out of range supported by the OS +      unicode_map_input_error(); +    } else { +      unicode_input_start(); +      register_hex32(code); +      unicode_input_finish(); +    } +  } +  return true; +} +#endif +  #ifdef UCIS_ENABLE  qk_ucis_state_t qk_ucis_state; diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 27f8072ee6..065eeb5f6a 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -3,10 +3,11 @@  #include "quantum.h" -#define UC_OSX 0 -#define UC_LNX 1 -#define UC_WIN 2 -#define UC_BSD 3 +#define UC_OSX 0  // Mac OS X +#define UC_LNX 1  // Linux +#define UC_WIN 2  // Windows 'HexNumpad' +#define UC_BSD 3  // BSD (not implemented) +#define UC_WINC 4 // WinCompose https://github.com/samhocevar/wincompose  #ifndef UNICODE_TYPE_DELAY  #define UNICODE_TYPE_DELAY 10 @@ -20,6 +21,10 @@ void register_hex(uint16_t hex);  bool process_unicode(uint16_t keycode, keyrecord_t *record); +#ifdef UNICODEMAP_ENABLE +bool process_unicode_map(uint16_t keycode, keyrecord_t *record); +#endif +  #ifdef UCIS_ENABLE  #ifndef UCIS_MAX_SYMBOL_LENGTH  #define UCIS_MAX_SYMBOL_LENGTH 32 | 
