sten.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // 2019, g Heavy Industries
  2. // Blessed mother of Christ, please keep this readable
  3. // and protect us from segfaults. For thine is the clock,
  4. // the slave and the master. Until we return from main.
  5. //
  6. // Amen.
  7. #include QMK_KEYBOARD_H
  8. #include "mousekey.h"
  9. #include "keymap.h"
  10. #include "keymap_steno.h"
  11. #include "wait.h"
  12. extern size_t keymapsCount; // Total keymaps
  13. extern uint32_t cChord; // Current Chord
  14. // Function defs
  15. void processChord(bool useFakeSteno);
  16. uint32_t processQwerty(bool lookup);
  17. uint32_t processFakeSteno(bool lookup);
  18. void saveState(uint32_t cChord);
  19. void restoreState(void);
  20. // Macros for use in keymap.c
  21. void SEND(uint8_t kc);
  22. void REPEAT(void);
  23. void SET_STICKY(uint32_t);
  24. void SWITCH_LAYER(int);
  25. void CLICK_MOUSE(uint8_t);
  26. // Keymap helper
  27. #define P(chord, act) if (cChord == (chord)) { if (!lookup) {act;} return chord;}
  28. // Shift to internal representation
  29. // i.e) S(teno)R(ight)F
  30. #define STN(n) (1L<<n)
  31. enum ORDER {
  32. SFN = 0, SPWR, SST1, SST2, SST3, SST4, SNUML, SNUMR,
  33. SLSU, SLSD, SLT, SLK, SLP, SLW, SLH, SLR, SLA, SLO,
  34. SRE, SRU, SRF, SRR, SRP, SRB, SRL, SRG, SRT, SRS, SRD, SRZ, SRES1, SRES2
  35. };
  36. // Break it all out
  37. #define FN STN(SFN)
  38. #define PWR STN(SPWR)
  39. #define ST1 STN(SST1)
  40. #define ST2 STN(SST2)
  41. #define ST3 STN(SST3)
  42. #define ST4 STN(SST4)
  43. #define LNO STN(SNUML) // STN1-6
  44. #define RNO STN(SNUMR) // STN7-C
  45. #define RES1 STN(SRES1) // Use reserved for sticky state
  46. #define RES2 STN(SRES2)
  47. #define LSU STN(SLSU)
  48. #define LSD STN(SLSD)
  49. #define LFT STN(SLT) // (L)e(F)t (T), preprocessor conflict
  50. #define LK STN(SLK)
  51. #define LP STN(SLP)
  52. #define LW STN(SLW)
  53. #define LH STN(SLH)
  54. #define LR STN(SLR)
  55. #define LA STN(SLA)
  56. #define LO STN(SLO)
  57. #define RE STN(SRE)
  58. #define RU STN(SRU)
  59. #define RF STN(SRF)
  60. #define RR STN(SRR)
  61. #define RP STN(SRP)
  62. #define RB STN(SRB)
  63. #define RL STN(SRL)
  64. #define RG STN(SRG)
  65. #define RT STN(SRT)
  66. #define RS STN(SRS)
  67. #define RD STN(SRD)
  68. #define RZ STN(SRZ)