process_plover_hid.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /* Copyright 2021 dnaq
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include "process_plover_hid.h"
  17. #include "plover_hid.h"
  18. #include "progmem.h"
  19. #include "util.h"
  20. #include "compiler_support.h"
  21. #define PLV_INVALID 0xFF
  22. // clang-format off
  23. static const uint8_t key_to_plover_hid[] PROGMEM = {
  24. PLV_INVALID, // QK_STENO_FUNCTION - Ignore
  25. PLV_BTN_N1, // QK_STENO_N1
  26. PLV_BTN_N2, // QK_STENO_N2
  27. PLV_BTN_N3, // QK_STENO_N3
  28. PLV_BTN_N4, // QK_STENO_N4
  29. PLV_BTN_N5, // QK_STENO_N5
  30. PLV_BTN_N6, // QK_STENO_N6
  31. PLV_BTN_S1, // QK_STENO_S1
  32. PLV_BTN_S2, // QK_STENO_S2
  33. PLV_BTN_TL, // QK_STENO_TL
  34. PLV_BTN_KL, // QK_STENO_KL
  35. PLV_BTN_PL, // QK_STENO_PL
  36. PLV_BTN_WL, // QK_STENO_WL
  37. PLV_BTN_HL, // QK_STENO_HL
  38. PLV_BTN_RL, // QK_STENO_RL
  39. PLV_BTN_A, // QK_STENO_A
  40. PLV_BTN_O, // QK_STENO_O
  41. PLV_BTN_ST1, // QK_STENO_ST1
  42. PLV_BTN_ST2, // QK_STENO_ST2
  43. PLV_INVALID, // QK_STENO_RESET1 - Ignore
  44. PLV_INVALID, // QK_STENO_RESET2 - Ignore
  45. PLV_INVALID, // QK_STENO_POWER - Ignore
  46. PLV_BTN_ST3, // QK_STENO_ST3
  47. PLV_BTN_ST4, // QK_STENO_ST4
  48. PLV_BTN_E, // QK_STENO_E
  49. PLV_BTN_U, // QK_STENO_U
  50. PLV_BTN_FR, // QK_STENO_FR
  51. PLV_BTN_RR, // QK_STENO_RR
  52. PLV_BTN_PR, // QK_STENO_PR
  53. PLV_BTN_BR, // QK_STENO_BR
  54. PLV_BTN_LR, // QK_STENO_LR
  55. PLV_BTN_GR, // QK_STENO_GR
  56. PLV_BTN_TR, // QK_STENO_TR
  57. PLV_BTN_SR, // QK_STENO_SR
  58. PLV_BTN_DR, // QK_STENO_DR
  59. PLV_BTN_N7, // QK_STENO_N7
  60. PLV_BTN_N8, // QK_STENO_N8
  61. PLV_BTN_N9, // QK_STENO_N9
  62. PLV_BTN_NA, // QK_STENO_NA
  63. PLV_BTN_NB, // QK_STENO_NB
  64. PLV_BTN_NC, // QK_STENO_NC
  65. PLV_BTN_ZR, // QK_STENO_ZR
  66. PLV_BTN_X1, // QK_STENO_X1
  67. PLV_BTN_X2, // QK_STENO_X2
  68. PLV_BTN_X3, // QK_STENO_X3
  69. PLV_BTN_X4, // QK_STENO_X4
  70. PLV_BTN_X5, // QK_STENO_X5
  71. PLV_BTN_X6, // QK_STENO_X6
  72. PLV_BTN_X7, // QK_STENO_X7
  73. PLV_BTN_X8, // QK_STENO_X8
  74. PLV_BTN_X9, // QK_STENO_X9
  75. PLV_BTN_X10, // QK_STENO_X10
  76. PLV_BTN_X11, // QK_STENO_X11
  77. PLV_BTN_X12, // QK_STENO_X12
  78. PLV_BTN_X13, // QK_STENO_X13
  79. PLV_BTN_X14, // QK_STENO_X14
  80. PLV_BTN_X15, // QK_STENO_X15
  81. PLV_BTN_X16, // QK_STENO_X16
  82. PLV_BTN_X17, // QK_STENO_X17
  83. PLV_BTN_X18, // QK_STENO_X18
  84. PLV_BTN_X19, // QK_STENO_X19
  85. PLV_BTN_X20, // QK_STENO_X20
  86. PLV_BTN_X21, // QK_STENO_X21
  87. PLV_BTN_X22, // QK_STENO_X22
  88. PLV_BTN_X23, // QK_STENO_X23
  89. PLV_BTN_X24, // QK_STENO_X24
  90. PLV_BTN_X25, // QK_STENO_X25
  91. PLV_BTN_X26, // QK_STENO_X26
  92. };
  93. // clang-format on
  94. STATIC_ASSERT(ARRAY_SIZE(key_to_plover_hid) == (QK_STENO_X26 - QK_STENO + 1), "key_to_plover_hid array size must match number of steno keys");
  95. bool process_plover_hid(uint16_t keycode, keyrecord_t *record) {
  96. if (keycode < QK_STENO_FUNCTION || keycode > QK_STENO_X26) {
  97. return true;
  98. }
  99. uint8_t button = pgm_read_byte(&key_to_plover_hid[keycode - QK_STENO]);
  100. if (button == PLV_INVALID) {
  101. return true;
  102. }
  103. plover_hid_update(button, record->event.pressed);
  104. return false;
  105. }