process_unicode_common.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "process_unicode_common.h"
  2. void set_unicode_input_mode(uint8_t os_target)
  3. {
  4. input_mode = os_target;
  5. }
  6. uint8_t get_unicode_input_mode(void) {
  7. return input_mode;
  8. }
  9. __attribute__((weak))
  10. void unicode_input_start (void) {
  11. // save current mods
  12. mods = keyboard_report->mods;
  13. // unregister all mods to start from clean state
  14. if (mods & MOD_BIT(KC_LSFT)) unregister_code(KC_LSFT);
  15. if (mods & MOD_BIT(KC_RSFT)) unregister_code(KC_RSFT);
  16. if (mods & MOD_BIT(KC_LCTL)) unregister_code(KC_LCTL);
  17. if (mods & MOD_BIT(KC_RCTL)) unregister_code(KC_RCTL);
  18. if (mods & MOD_BIT(KC_LALT)) unregister_code(KC_LALT);
  19. if (mods & MOD_BIT(KC_RALT)) unregister_code(KC_RALT);
  20. if (mods & MOD_BIT(KC_LGUI)) unregister_code(KC_LGUI);
  21. if (mods & MOD_BIT(KC_RGUI)) unregister_code(KC_RGUI);
  22. switch(input_mode) {
  23. case UC_OSX:
  24. register_code(KC_LALT);
  25. break;
  26. case UC_LNX:
  27. register_code(KC_LCTL);
  28. register_code(KC_LSFT);
  29. register_code(KC_U);
  30. unregister_code(KC_U);
  31. unregister_code(KC_LSFT);
  32. unregister_code(KC_LCTL);
  33. break;
  34. case UC_WIN:
  35. register_code(KC_LALT);
  36. register_code(KC_PPLS);
  37. unregister_code(KC_PPLS);
  38. break;
  39. case UC_WINC:
  40. register_code(KC_RALT);
  41. unregister_code(KC_RALT);
  42. register_code(KC_U);
  43. unregister_code(KC_U);
  44. }
  45. wait_ms(UNICODE_TYPE_DELAY);
  46. }
  47. __attribute__((weak))
  48. void unicode_input_finish (void) {
  49. switch(input_mode) {
  50. case UC_OSX:
  51. case UC_WIN:
  52. unregister_code(KC_LALT);
  53. break;
  54. case UC_LNX:
  55. register_code(KC_SPC);
  56. unregister_code(KC_SPC);
  57. break;
  58. }
  59. // reregister previously set mods
  60. if (mods & MOD_BIT(KC_LSFT)) register_code(KC_LSFT);
  61. if (mods & MOD_BIT(KC_RSFT)) register_code(KC_RSFT);
  62. if (mods & MOD_BIT(KC_LCTL)) register_code(KC_LCTL);
  63. if (mods & MOD_BIT(KC_RCTL)) register_code(KC_RCTL);
  64. if (mods & MOD_BIT(KC_LALT)) register_code(KC_LALT);
  65. if (mods & MOD_BIT(KC_RALT)) register_code(KC_RALT);
  66. if (mods & MOD_BIT(KC_LGUI)) register_code(KC_LGUI);
  67. if (mods & MOD_BIT(KC_RGUI)) register_code(KC_RGUI);
  68. }
  69. void register_hex(uint16_t hex) {
  70. for(int i = 3; i >= 0; i--) {
  71. uint8_t digit = ((hex >> (i*4)) & 0xF);
  72. register_code(hex_to_keycode(digit));
  73. unregister_code(hex_to_keycode(digit));
  74. }
  75. }