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