process_unicode_common.c 2.2 KB

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