qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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)