logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

sten.h (2278B)


  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. #pragma once
  8. #include "georgi.h"
  9. extern size_t keymapsCount; // Total keymaps
  10. extern uint32_t cChord; // Current Chord
  11. extern uint32_t stenoLayers[]; // Chords that simulate QMK layers
  12. extern size_t stenoLayerCount; // Number of simulated layers
  13. // Function defs
  14. void processChord(bool useFakeSteno);
  15. uint32_t processQwerty(bool lookup);
  16. uint32_t processFakeSteno(bool lookup);
  17. void saveState(uint32_t cChord);
  18. void restoreState(void);
  19. // Macros for use in keymap.c
  20. void SEND(uint8_t kc);
  21. void REPEAT(void);
  22. void SET_STICKY(uint32_t);
  23. void SWITCH_LAYER(int);
  24. void CLICK_MOUSE(uint8_t);
  25. // Keymap helper
  26. #define P(chord, act) if (cChord == (chord)) { if (!lookup) {act;} return chord;}
  27. #define PC(chord, act) if (cChord == (chord)) { if (!lookup) {act;} return chord;} \
  28. for(int i = 0; i < stenoLayerCount; i++) { \
  29. uint32_t refChord = stenoLayers[i] | chord; \
  30. if (cChord == (refChord)) { if (!lookup) {act;} return refChord;}; \
  31. }
  32. // Shift to internal representation
  33. // i.e) S(teno)R(ight)F
  34. #define STN(n) (1L<<n)
  35. enum ORDER {
  36. SFN = 0, SPWR, SST1, SST2, SST3, SST4, SNUML, SNUMR,
  37. SLSU, SLSD, SLT, SLK, SLP, SLW, SLH, SLR, SLA, SLO,
  38. SRE, SRU, SRF, SRR, SRP, SRB, SRL, SRG, SRT, SRS, SRD, SRZ, SRES1, SRES2
  39. };
  40. // Break it all out
  41. #define FN STN(SFN)
  42. #define PWR STN(SPWR)
  43. #define ST1 STN(SST1)
  44. #define ST2 STN(SST2)
  45. #define ST3 STN(SST3)
  46. #define ST4 STN(SST4)
  47. #define LNO STN(SNUML) // STN1-6
  48. #define RNO STN(SNUMR) // STN7-C
  49. #define RES1 STN(SRES1) // Use reserved for sticky state
  50. #define RES2 STN(SRES2)
  51. #define LSU STN(SLSU)
  52. #define LSD STN(SLSD)
  53. #define LFT STN(SLT) // (L)e(F)t (T), preprocessor conflict
  54. #define LK STN(SLK)
  55. #define LP STN(SLP)
  56. #define LW STN(SLW)
  57. #define LH STN(SLH)
  58. #define LR STN(SLR)
  59. #define LA STN(SLA)
  60. #define LO STN(SLO)
  61. #define RE STN(SRE)
  62. #define RU STN(SRU)
  63. #define RF STN(SRF)
  64. #define RR STN(SRR)
  65. #define RP STN(SRP)
  66. #define RB STN(SRB)
  67. #define RL STN(SRL)
  68. #define RG STN(SRG)
  69. #define RT STN(SRT)
  70. #define RS STN(SRS)
  71. #define RD STN(SRD)
  72. #define RZ STN(SRZ)