diff options
| author | Jack Humbert <[email protected]> | 2017-02-15 17:09:47 -0500 | 
|---|---|---|
| committer | Jack Humbert <[email protected]> | 2017-02-15 17:09:47 -0500 | 
| commit | 1bb574fe48bf73af4f3a4dadcff62599fd5dbb9a (patch) | |
| tree | d8bd0707811a100eeb4371f96ffcf4d153e76341 /quantum/process_keycode | |
| parent | 09add35e7f0b17f720862bc9b0f8478763937328 (diff) | |
| download | qmk_firmware-1bb574fe48bf73af4f3a4dadcff62599fd5dbb9a.tar.gz qmk_firmware-1bb574fe48bf73af4f3a4dadcff62599fd5dbb9a.zip | |
add unicode common file, get names right
Diffstat (limited to 'quantum/process_keycode')
| -rw-r--r-- | quantum/process_keycode/process_unicode_common.c | 86 | 
1 files changed, 86 insertions, 0 deletions
| diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c new file mode 100644 index 0000000000..1a9d470c94 --- /dev/null +++ b/quantum/process_keycode/process_unicode_common.c @@ -0,0 +1,86 @@ +#include "process_unicode_common.h" + +static uint8_t input_mode; +uint8_t mods; + +void set_unicode_input_mode(uint8_t os_target) +{ +  input_mode = os_target; +} + +uint8_t get_unicode_input_mode(void) { +  return input_mode; +} + +__attribute__((weak)) +void unicode_input_start (void) { +  // save current mods +  mods = keyboard_report->mods; + +  // unregister all mods to start from clean state +  if (mods & MOD_BIT(KC_LSFT)) unregister_code(KC_LSFT); +  if (mods & MOD_BIT(KC_RSFT)) unregister_code(KC_RSFT); +  if (mods & MOD_BIT(KC_LCTL)) unregister_code(KC_LCTL); +  if (mods & MOD_BIT(KC_RCTL)) unregister_code(KC_RCTL); +  if (mods & MOD_BIT(KC_LALT)) unregister_code(KC_LALT); +  if (mods & MOD_BIT(KC_RALT)) unregister_code(KC_RALT); +  if (mods & MOD_BIT(KC_LGUI)) unregister_code(KC_LGUI); +  if (mods & MOD_BIT(KC_RGUI)) unregister_code(KC_RGUI); + +  switch(input_mode) { +  case UC_OSX: +    register_code(KC_LALT); +    break; +  case UC_LNX: +    register_code(KC_LCTL); +    register_code(KC_LSFT); +    register_code(KC_U); +    unregister_code(KC_U); +    unregister_code(KC_LSFT); +    unregister_code(KC_LCTL); +    break; +  case UC_WIN: +    register_code(KC_LALT); +    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); +} + +__attribute__((weak)) +void unicode_input_finish (void) { +  switch(input_mode) { +    case UC_OSX: +    case UC_WIN: +      unregister_code(KC_LALT); +      break; +    case UC_LNX: +      register_code(KC_SPC); +      unregister_code(KC_SPC); +      break; +  } + +  // reregister previously set mods +  if (mods & MOD_BIT(KC_LSFT)) register_code(KC_LSFT); +  if (mods & MOD_BIT(KC_RSFT)) register_code(KC_RSFT); +  if (mods & MOD_BIT(KC_LCTL)) register_code(KC_LCTL); +  if (mods & MOD_BIT(KC_RCTL)) register_code(KC_RCTL); +  if (mods & MOD_BIT(KC_LALT)) register_code(KC_LALT); +  if (mods & MOD_BIT(KC_RALT)) register_code(KC_RALT); +  if (mods & MOD_BIT(KC_LGUI)) register_code(KC_LGUI); +  if (mods & MOD_BIT(KC_RGUI)) register_code(KC_RGUI); +} + +void register_hex(uint16_t hex) { +  for(int i = 3; i >= 0; i--) { +    uint8_t digit = ((hex >> (i*4)) & 0xF); +    register_code(hex_to_keycode(digit)); +    unregister_code(hex_to_keycode(digit)); +  } +}
\ No newline at end of file | 
