diff options
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/keymap_extras/keymap_us_extended.h | 227 | ||||
-rw-r--r-- | quantum/keymap_extras/keymap_us_international.h | 20 | ||||
-rw-r--r-- | quantum/keymap_extras/keymap_us_international_linux.h | 224 | ||||
-rw-r--r-- | quantum/keymap_extras/sendstring_us_international.h | 100 | ||||
-rw-r--r-- | quantum/quantum.c | 33 | ||||
-rw-r--r-- | quantum/quantum.h | 2 | ||||
-rw-r--r-- | quantum/rgb_matrix.c | 6 | ||||
-rw-r--r-- | quantum/rgblight.c | 21 | ||||
-rw-r--r-- | quantum/split_common/transport.c | 95 |
9 files changed, 699 insertions, 29 deletions
diff --git a/quantum/keymap_extras/keymap_us_extended.h b/quantum/keymap_extras/keymap_us_extended.h new file mode 100644 index 000000000..b2b3a734c --- /dev/null +++ b/quantum/keymap_extras/keymap_us_extended.h | |||
@@ -0,0 +1,227 @@ | |||
1 | /* Copyright 2020 | ||
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 | |||
17 | #pragma once | ||
18 | |||
19 | #include "keymap.h" | ||
20 | |||
21 | // clang-format off | ||
22 | |||
23 | /* | ||
24 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
25 | * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │ | ||
26 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
27 | * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ | ||
28 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
29 | * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │ | ||
30 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
31 | * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │ | ||
32 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
33 | * │ │ │ │ │ │ │ │ │ | ||
34 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
35 | */ | ||
36 | // Row 1 | ||
37 | #define US_GRV KC_GRV // ` | ||
38 | #define US_1 KC_1 // 1 | ||
39 | #define US_2 KC_2 // 2 | ||
40 | #define US_3 KC_3 // 3 | ||
41 | #define US_4 KC_4 // 4 | ||
42 | #define US_5 KC_5 // 5 | ||
43 | #define US_6 KC_6 // 6 | ||
44 | #define US_7 KC_7 // 7 | ||
45 | #define US_8 KC_8 // 8 | ||
46 | #define US_9 KC_9 // 9 | ||
47 | #define US_0 KC_0 // 0 | ||
48 | #define US_MINS KC_MINS // - | ||
49 | #define US_EQL KC_EQL // = | ||
50 | // Row 2 | ||
51 | #define US_Q KC_Q // Q | ||
52 | #define US_W KC_W // W | ||
53 | #define US_E KC_E // E | ||
54 | #define US_R KC_R // R | ||
55 | #define US_T KC_T // T | ||
56 | #define US_Y KC_Y // Y | ||
57 | #define US_U KC_U // U | ||
58 | #define US_I KC_I // I | ||
59 | #define US_O KC_O // O | ||
60 | #define US_P KC_P // P | ||
61 | #define US_LBRC KC_LBRC // [ | ||
62 | #define US_RBRC KC_RBRC // ] | ||
63 | #define US_BSLS KC_BSLS // (backslash) | ||
64 | // Row 3 | ||
65 | #define US_A KC_A // A | ||
66 | #define US_S KC_S // S | ||
67 | #define US_D KC_D // D | ||
68 | #define US_F KC_F // F | ||
69 | #define US_G KC_G // G | ||
70 | #define US_H KC_H // H | ||
71 | #define US_J KC_J // J | ||
72 | #define US_K KC_K // K | ||
73 | #define US_L KC_L // L | ||
74 | #define US_SCLN KC_SCLN // ; | ||
75 | #define US_QUOT KC_QUOT // ' | ||
76 | // Row 4 | ||
77 | #define US_Z KC_Z // Z | ||
78 | #define US_X KC_X // X | ||
79 | #define US_C KC_C // C | ||
80 | #define US_V KC_V // V | ||
81 | #define US_B KC_B // B | ||
82 | #define US_N KC_N // N | ||
83 | #define US_M KC_M // M | ||
84 | #define US_COMM KC_COMM // , | ||
85 | #define US_DOT KC_DOT // . | ||
86 | #define US_SLSH KC_SLSH // / | ||
87 | |||
88 | /* Shifted symbols | ||
89 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
90 | * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │ | ||
91 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
92 | * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │ | ||
93 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
94 | * │ │ │ │ │ │ │ │ │ │ │ : │ " │ │ | ||
95 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
96 | * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │ | ||
97 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
98 | * │ │ │ │ │ │ │ │ │ | ||
99 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
100 | */ | ||
101 | // Row 1 | ||
102 | #define US_TILD S(US_GRV) // ~ | ||
103 | #define US_EXLM S(US_1) // ! | ||
104 | #define US_AT S(US_2) // @ | ||
105 | #define US_HASH S(US_3) // # | ||
106 | #define US_DLR S(US_4) // $ | ||
107 | #define US_PERC S(US_5) // % | ||
108 | #define US_CIRC S(US_6) // ^ | ||
109 | #define US_AMPR S(US_7) // & | ||
110 | #define US_ASTR S(US_8) // * | ||
111 | #define US_LPRN S(US_9) // ( | ||
112 | #define US_RPRN S(US_0) // ) | ||
113 | #define US_UNDS S(US_MINS) // _ | ||
114 | #define US_PLUS S(US_EQL) // + | ||
115 | // Row 2 | ||
116 | #define US_LCBR S(US_LBRC) // { | ||
117 | #define US_RCBR S(US_RBRC) // } | ||
118 | #define US_PIPE S(US_BSLS) // | | ||
119 | // Row 3 | ||
120 | #define US_COLN S(US_SCLN) // : | ||
121 | #define US_DQUO S(US_QUOT) // " | ||
122 | // Row 4 | ||
123 | #define US_LABK S(US_COMM) // < | ||
124 | #define US_RABK S(US_DOT) // > | ||
125 | #define US_QUES S(US_SLSH) // ? | ||
126 | |||
127 | /* AltGr symbols | ||
128 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
129 | * │ ` │ ¹ │ ² │ ³ │ ¤ │ € │ ^ │ ̛ │ ¾ │ ‘ │ ’ │ ¥ │ × │ │ | ||
130 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
131 | * │ │ Ä │ Å │ É │ ® │ Þ │ Ü │ Ú │ Í │ Ó │ Ö │ « │ » │ ¬ │ | ||
132 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
133 | * │ │ Á │ ß │ Ð │ │ │ │ Ï │ Œ │ Ø │ ¶ │ ' │ │ | ||
134 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
135 | * │ │ Æ │ │ © │ │ │ Ñ │ µ │ Ç │ ˙ │ ¿ │ │ | ||
136 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
137 | * │ │ │ │ │ │ │ │ │ | ||
138 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
139 | */ | ||
140 | // Row 1 | ||
141 | #define US_DGRV ALGR(US_GRV) // ` (dead) | ||
142 | #define US_SUP1 ALGR(US_1) // ¹ | ||
143 | #define US_SUP2 ALGR(US_2) // ² | ||
144 | #define US_SUP3 ALGR(US_3) // ³ | ||
145 | #define US_CURR ALGR(US_4) // ¤ | ||
146 | #define US_EURO ALGR(US_5) // € | ||
147 | #define US_DCIR ALGR(US_6) // ^ (dead) | ||
148 | #define US_HORN ALGR(US_7) // ̛̛ (dead) | ||
149 | #define US_OGON ALGR(US_8) // ˛ (dead) | ||
150 | #define US_LSQU ALGR(US_9) // ‘ | ||
151 | #define US_RSQU ALGR(US_0) // ’ | ||
152 | #define US_YEN ALGR(US_MINS) // ¥ | ||
153 | #define US_MUL ALGR(US_EQL) // × | ||
154 | // Row 2 | ||
155 | #define US_ADIA ALGR(US_Q) // Ä | ||
156 | #define US_ARNG ALGR(US_W) // Å | ||
157 | #define US_EACU ALGR(US_E) // É | ||
158 | #define US_EDIA ALGR(US_R) // Ë | ||
159 | #define US_THRN ALGR(US_T) // Þ | ||
160 | #define US_UDIA ALGR(US_Y) // Ü | ||
161 | #define US_UACU ALGR(US_U) // Ú | ||
162 | #define US_IACU ALGR(US_I) // Í | ||
163 | #define US_OACU ALGR(US_O) // Ó | ||
164 | #define US_ODIA ALGR(US_P) // Ö | ||
165 | #define US_LDAQ ALGR(US_LBRC) // « | ||
166 | #define US_RDAQ ALGR(US_RBRC) // » | ||
167 | #define US_NOT ALGR(US_BSLS) // ¬ | ||
168 | // Row 3 | ||
169 | #define US_AACU ALGR(US_A) // Á | ||
170 | #define US_SS ALGR(US_S) // ß | ||
171 | #define US_ETH ALGR(US_D) // Ð | ||
172 | #define US_IDIA ALGR(US_J) // Ï | ||
173 | #define US_OE ALGR(US_K) // Œ | ||
174 | #define US_OSTR ALGR(US_L) // Ø | ||
175 | #define US_PILC ALGR(US_SCLN) // ¶ | ||
176 | #define US_ACUT ALGR(US_QUOT) // ´ (dead) | ||
177 | // Row 4 | ||
178 | #define US_AE ALGR(US_Z) // Æ | ||
179 | #define US_OE_2 ALGR(US_X) // Œ | ||
180 | #define US_COPY ALGR(US_C) // © | ||
181 | #define US_REGD ALGR(US_V) // ® | ||
182 | #define US_NTIL ALGR(US_N) // Ñ | ||
183 | #define US_MICR ALGR(US_M) // µ | ||
184 | #define US_CCED ALGR(US_COMM) // Ç | ||
185 | #define US_DOTA ALGR(US_DOT) // ˙ (dead) | ||
186 | #define US_IQUE ALGR(US_SLSH) // ¿ | ||
187 | |||
188 | /* Shift+AltGr symbols | ||
189 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
190 | * │ ~ │ ¡ │ ˝ │ ¯ │ £ │ ¸ │ ¼ │ ½ │ ¾ │ ˘ │ ° │ ̣ │ ÷ │ │ | ||
191 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
192 | * │ │ │ │ │ │ │ │ │ │ │ │ “ │ ” │ ¦ │ | ||
193 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
194 | * │ │ │ § │ │ │ │ │ │ │ │ ° │ " │ │ | ||
195 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
196 | * │ │ │ │ ¢ │ │ │ │ │ │ ˇ │ ̉ │ │ | ||
197 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
198 | * │ │ │ │ │ │ │ │ │ | ||
199 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
200 | */ | ||
201 | // Row 1 | ||
202 | #define US_DTIL S(ALGR(US_GRV)) // ~ (dead) | ||
203 | #define US_IEXL S(ALGR(US_1)) // ¡ | ||
204 | #define US_DACU S(ALGR(US_2)) // ˝ (dead) | ||
205 | #define US_MACR S(ALGR(US_3)) // ¯ (dead) | ||
206 | #define US_PND S(ALGR(US_4)) // £ | ||
207 | #define US_CEDL S(ALGR(US_5)) // ¸ (dead) | ||
208 | #define US_QRTR S(ALGR(US_6)) // ¼ | ||
209 | #define US_HALF S(ALGR(US_7)) // ½ | ||
210 | #define US_TQTR S(ALGR(US_8)) // ¾ | ||
211 | #define US_BREV S(ALGR(US_9)) // ˘ (dead) | ||
212 | #define US_RNGA S(ALGR(US_0)) // ° (dead) | ||
213 | #define US_DOTB S(ALGR(US_MINS)) // ̣ (dead) | ||
214 | #define US_DIV S(ALGR(US_EQL)) // ÷ | ||
215 | // Row 2 | ||
216 | #define US_LDQU S(ALGR(US_LBRC)) // “ | ||
217 | #define US_RDQU S(ALGR(US_LBRC)) // ” | ||
218 | #define US_BRKP S(ALGR(US_BSLS)) // ¦ | ||
219 | // Row 3 | ||
220 | #define US_SECT S(ALGR(US_S)) // § | ||
221 | #define US_DEG S(ALGR(US_SCLN)) // ° | ||
222 | #define US_DIAE S(ALGR(US_QUOT)) // ¨ (dead) | ||
223 | // Row 4 | ||
224 | #define US_CENT S(ALGR(US_C)) // ¢ | ||
225 | #define US_CARN S(ALGR(US_DOT)) // ˇ (dead) | ||
226 | #define US_HOKA S(ALGR(US_SLSH)) // ̉ (dead) | ||
227 | |||
diff --git a/quantum/keymap_extras/keymap_us_international.h b/quantum/keymap_extras/keymap_us_international.h index a3bc46597..49afcc4fb 100644 --- a/quantum/keymap_extras/keymap_us_international.h +++ b/quantum/keymap_extras/keymap_us_international.h | |||
@@ -26,7 +26,7 @@ | |||
26 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | 26 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ |
27 | * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ | 27 | * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ |
28 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | 28 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ |
29 | * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │ | 29 | * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ´ │ │ |
30 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | 30 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ |
31 | * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │ | 31 | * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │ |
32 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | 32 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ |
@@ -34,7 +34,7 @@ | |||
34 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | 34 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ |
35 | */ | 35 | */ |
36 | // Row 1 | 36 | // Row 1 |
37 | #define US_GRV KC_GRV // ` (dead) | 37 | #define US_DGRV KC_GRV // ` (dead) |
38 | #define US_1 KC_1 // 1 | 38 | #define US_1 KC_1 // 1 |
39 | #define US_2 KC_2 // 2 | 39 | #define US_2 KC_2 // 2 |
40 | #define US_3 KC_3 // 3 | 40 | #define US_3 KC_3 // 3 |
@@ -72,7 +72,7 @@ | |||
72 | #define US_K KC_K // K | 72 | #define US_K KC_K // K |
73 | #define US_L KC_L // L | 73 | #define US_L KC_L // L |
74 | #define US_SCLN KC_SCLN // ; | 74 | #define US_SCLN KC_SCLN // ; |
75 | #define US_QUOT KC_QUOT // ' (dead) | 75 | #define US_ACUT KC_QUOT // ´ (dead) |
76 | // Row 4 | 76 | // Row 4 |
77 | #define US_Z KC_Z // Z | 77 | #define US_Z KC_Z // Z |
78 | #define US_X KC_X // X | 78 | #define US_X KC_X // X |
@@ -91,7 +91,7 @@ | |||
91 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | 91 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ |
92 | * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │ | 92 | * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │ |
93 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | 93 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ |
94 | * │ │ │ │ │ │ │ │ │ │ │ : │ " │ │ | 94 | * │ │ │ │ │ │ │ │ │ │ │ : │ ¨ │ │ |
95 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | 95 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ |
96 | * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │ | 96 | * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │ |
97 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | 97 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ |
@@ -99,13 +99,13 @@ | |||
99 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | 99 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ |
100 | */ | 100 | */ |
101 | // Row 1 | 101 | // Row 1 |
102 | #define US_TILD S(US_GRV) // ~ (dead) | 102 | #define US_DTIL S(US_DGRV) // ~ (dead) |
103 | #define US_EXLM S(US_1) // ! | 103 | #define US_EXLM S(US_1) // ! |
104 | #define US_AT S(US_2) // " | 104 | #define US_AT S(US_2) // @ |
105 | #define US_HASH S(US_3) // # | 105 | #define US_HASH S(US_3) // # |
106 | #define US_DLR S(US_4) // $ | 106 | #define US_DLR S(US_4) // $ |
107 | #define US_PERC S(US_5) // % | 107 | #define US_PERC S(US_5) // % |
108 | #define US_CIRC S(US_6) // ^ | 108 | #define US_DCIR S(US_6) // ^ (dead) |
109 | #define US_AMPR S(US_7) // & | 109 | #define US_AMPR S(US_7) // & |
110 | #define US_ASTR S(US_8) // * | 110 | #define US_ASTR S(US_8) // * |
111 | #define US_LPRN S(US_9) // ( | 111 | #define US_LPRN S(US_9) // ( |
@@ -118,7 +118,7 @@ | |||
118 | #define US_PIPE S(US_BSLS) // | | 118 | #define US_PIPE S(US_BSLS) // | |
119 | // Row 3 | 119 | // Row 3 |
120 | #define US_COLN S(US_SCLN) // : | 120 | #define US_COLN S(US_SCLN) // : |
121 | #define US_DQUO S(US_QUOT) // " (dead) | 121 | #define US_DIAE S(US_ACUT) // ¨ (dead) |
122 | // Row 4 | 122 | // Row 4 |
123 | #define US_LABK S(US_COMM) // < | 123 | #define US_LABK S(US_COMM) // < |
124 | #define US_RABK S(US_DOT) // > | 124 | #define US_RABK S(US_DOT) // > |
@@ -170,7 +170,7 @@ | |||
170 | #define US_ETH ALGR(US_D) // Ð | 170 | #define US_ETH ALGR(US_D) // Ð |
171 | #define US_OSTR ALGR(US_L) // Ø | 171 | #define US_OSTR ALGR(US_L) // Ø |
172 | #define US_PILC ALGR(US_SCLN) // ¶ | 172 | #define US_PILC ALGR(US_SCLN) // ¶ |
173 | #define US_ACUT ALGR(US_QUOT) // ´ | 173 | #define US_NDAC ALGR(US_ACUT) // ´ |
174 | // Row 4 | 174 | // Row 4 |
175 | #define US_AE ALGR(US_Z) // Æ | 175 | #define US_AE ALGR(US_Z) // Æ |
176 | #define US_COPY ALGR(US_C) // © | 176 | #define US_COPY ALGR(US_C) // © |
@@ -201,6 +201,6 @@ | |||
201 | // Row 3 | 201 | // Row 3 |
202 | #define US_SECT S(ALGR(US_S)) // § | 202 | #define US_SECT S(ALGR(US_S)) // § |
203 | #define US_DEG S(ALGR(US_SCLN)) // ° | 203 | #define US_DEG S(ALGR(US_SCLN)) // ° |
204 | #define US_DIAE S(ALGR(US_QUOT)) // ¨ | 204 | #define US_NDDR S(ALGR(US_ACUT)) // ¨ |
205 | // Row 4 | 205 | // Row 4 |
206 | #define US_CENT S(ALGR(US_C)) // ¢ | 206 | #define US_CENT S(ALGR(US_C)) // ¢ |
diff --git a/quantum/keymap_extras/keymap_us_international_linux.h b/quantum/keymap_extras/keymap_us_international_linux.h new file mode 100644 index 000000000..2c3e23039 --- /dev/null +++ b/quantum/keymap_extras/keymap_us_international_linux.h | |||
@@ -0,0 +1,224 @@ | |||
1 | /* Copyright 2020 | ||
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 | |||
17 | #pragma once | ||
18 | |||
19 | #include "keymap.h" | ||
20 | |||
21 | // clang-format off | ||
22 | |||
23 | /* | ||
24 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
25 | * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │ | ||
26 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
27 | * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ | ||
28 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
29 | * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ´ │ │ | ||
30 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
31 | * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │ | ||
32 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
33 | * │ │ │ │ │ │ │ │ │ | ||
34 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
35 | */ | ||
36 | // Row 1 | ||
37 | #define US_DGRV KC_GRV // ` (dead) | ||
38 | #define US_1 KC_1 // 1 | ||
39 | #define US_2 KC_2 // 2 | ||
40 | #define US_3 KC_3 // 3 | ||
41 | #define US_4 KC_4 // 4 | ||
42 | #define US_5 KC_5 // 5 | ||
43 | #define US_6 KC_6 // 6 | ||
44 | #define US_7 KC_7 // 7 | ||
45 | #define US_8 KC_8 // 8 | ||
46 | #define US_9 KC_9 // 9 | ||
47 | #define US_0 KC_0 // 0 | ||
48 | #define US_MINS KC_MINS // - | ||
49 | #define US_EQL KC_EQL // = | ||
50 | // Row 2 | ||
51 | #define US_Q KC_Q // Q | ||
52 | #define US_W KC_W // W | ||
53 | #define US_E KC_E // E | ||
54 | #define US_R KC_R // R | ||
55 | #define US_T KC_T // T | ||
56 | #define US_Y KC_Y // Y | ||
57 | #define US_U KC_U // U | ||
58 | #define US_I KC_I // I | ||
59 | #define US_O KC_O // O | ||
60 | #define US_P KC_P // P | ||
61 | #define US_LBRC KC_LBRC // [ | ||
62 | #define US_RBRC KC_RBRC // ] | ||
63 | #define US_BSLS KC_BSLS // (backslash) | ||
64 | // Row 3 | ||
65 | #define US_A KC_A // A | ||
66 | #define US_S KC_S // S | ||
67 | #define US_D KC_D // D | ||
68 | #define US_F KC_F // F | ||
69 | #define US_G KC_G // G | ||
70 | #define US_H KC_H // H | ||
71 | #define US_J KC_J // J | ||
72 | #define US_K KC_K // K | ||
73 | #define US_L KC_L // L | ||
74 | #define US_SCLN KC_SCLN // ; | ||
75 | #define US_ACUT KC_QUOT // ´ (dead) | ||
76 | // Row 4 | ||
77 | #define US_Z KC_Z // Z | ||
78 | #define US_X KC_X // X | ||
79 | #define US_C KC_C // C | ||
80 | #define US_V KC_V // V | ||
81 | #define US_B KC_B // B | ||
82 | #define US_N KC_N // N | ||
83 | #define US_M KC_M // M | ||
84 | #define US_COMM KC_COMM // , | ||
85 | #define US_DOT KC_DOT // . | ||
86 | #define US_SLSH KC_SLSH // / | ||
87 | |||
88 | /* Shifted symbols | ||
89 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
90 | * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │ | ||
91 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
92 | * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │ | ||
93 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
94 | * │ │ │ │ │ │ │ │ │ │ │ : │ ¨ │ │ | ||
95 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
96 | * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │ | ||
97 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
98 | * │ │ │ │ │ │ │ │ │ | ||
99 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
100 | */ | ||
101 | // Row 1 | ||
102 | #define US_DTIL S(US_DGRV) // ~ (dead) | ||
103 | #define US_EXLM S(US_1) // ! | ||
104 | #define US_AT S(US_2) // @ | ||
105 | #define US_HASH S(US_3) // # | ||
106 | #define US_DLR S(US_4) // $ | ||
107 | #define US_PERC S(US_5) // % | ||
108 | #define US_DCIR S(US_6) // ^ (dead) | ||
109 | #define US_AMPR S(US_7) // & | ||
110 | #define US_ASTR S(US_8) // * | ||
111 | #define US_LPRN S(US_9) // ( | ||
112 | #define US_RPRN S(US_0) // ) | ||
113 | #define US_UNDS S(US_MINS) // _ | ||
114 | #define US_PLUS S(US_EQL) // + | ||
115 | // Row 2 | ||
116 | #define US_LCBR S(US_LBRC) // { | ||
117 | #define US_RCBR S(US_RBRC) // } | ||
118 | #define US_PIPE S(US_BSLS) // | | ||
119 | // Row 3 | ||
120 | #define US_COLN S(US_SCLN) // : | ||
121 | #define US_DIAE S(US_ACUT) // ¨ (dead) | ||
122 | // Row 4 | ||
123 | #define US_LABK S(US_COMM) // < | ||
124 | #define US_RABK S(US_DOT) // > | ||
125 | #define US_QUES S(US_SLSH) // ? | ||
126 | |||
127 | /* AltGr symbols | ||
128 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
129 | * │ ` │ ¡ │ ² │ ³ │ ¤ │ € │ ¼ │ ½ │ ¾ │ ‘ │ ’ │ ¥ │ × │ │ | ||
130 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
131 | * │ │ Ä │ Å │ É │ ® │ Þ │ Ü │ Ú │ Í │ Ó │ Ö │ « │ » │ ¬ │ | ||
132 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
133 | * │ │ Á │ ß │ Ð │ │ │ │ │ Œ │ Ø │ ¶ │ ' │ │ | ||
134 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
135 | * │ │ Æ │ │ © │ │ │ Ñ │ µ │ Ç │ ˙ │ ¿ │ │ | ||
136 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
137 | * │ │ │ │ │ │ │ │ │ | ||
138 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
139 | */ | ||
140 | |||
141 | // Row 1 | ||
142 | #define US_GRV ALGR(US_DGRV) // ` | ||
143 | #define US_IEXL ALGR(US_1) // ¡ | ||
144 | #define US_SUP2 ALGR(US_2) // ² | ||
145 | #define US_SUP3 ALGR(US_3) // ³ | ||
146 | #define US_CURR ALGR(US_4) // ¤ | ||
147 | #define US_EURO ALGR(US_5) // € | ||
148 | #define US_QRTR ALGR(US_6) // ¼ | ||
149 | #define US_HALF ALGR(US_7) // ½ | ||
150 | #define US_TQTR ALGR(US_8) // ¾ | ||
151 | #define US_LSQU ALGR(US_9) // ‘ | ||
152 | #define US_RSQU ALGR(US_0) // ’ | ||
153 | #define US_YEN ALGR(US_MINS) // ¥ | ||
154 | #define US_MUL ALGR(US_EQL) // × | ||
155 | // Row 2 | ||
156 | #define US_ADIA ALGR(US_Q) // Ä | ||
157 | #define US_ARNG ALGR(US_W) // Å | ||
158 | #define US_EACU ALGR(US_E) // É | ||
159 | #define US_REGD ALGR(US_R) // ® | ||
160 | #define US_THRN ALGR(US_T) // Þ | ||
161 | #define US_UDIA ALGR(US_Y) // Ü | ||
162 | #define US_UACU ALGR(US_U) // Ú | ||
163 | #define US_IACU ALGR(US_I) // Í | ||
164 | #define US_OACU ALGR(US_O) // Ó | ||
165 | #define US_ODIA ALGR(US_P) // Ö | ||
166 | #define US_LDAQ ALGR(US_LBRC) // « | ||
167 | #define US_RDAQ ALGR(US_RBRC) // » | ||
168 | #define US_NOT ALGR(US_BSLS) // ¬ | ||
169 | // Row 3 | ||
170 | #define US_AACU ALGR(US_A) // Á | ||
171 | #define US_SS ALGR(US_S) // ß | ||
172 | #define US_ETH ALGR(US_D) // Ð | ||
173 | #define US_OE ALGR(US_K) // Œ | ||
174 | #define US_OSTR ALGR(US_L) // Ø | ||
175 | #define US_PILC ALGR(US_SCLN) // ¶ | ||
176 | #define US_QUOT ALGR(US_ACUT) // ' | ||
177 | // Row 4 | ||
178 | #define US_AE ALGR(US_Z) // Æ | ||
179 | #define US_COPY ALGR(US_C) // © | ||
180 | #define US_NTIL ALGR(US_N) // Ñ | ||
181 | #define US_MICR ALGR(US_M) // µ | ||
182 | #define US_CCED ALGR(US_COMM) // Ç | ||
183 | #define US_DOTA ALGR(US_DOT) // ˙ (dead) | ||
184 | #define US_IQUE ALGR(US_SLSH) // ¿ | ||
185 | |||
186 | /* Shift+AltGr symbols | ||
187 | * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ | ||
188 | * │ ~ │ ¹ │ ˝ │ ¯ │ £ │ ¸ │ ^ │ ̛ │ ˛ │ ˘ │ ° │ ̣ │ ÷ │ │ | ||
189 | * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ | ||
190 | * │ │ │ │ │ │ │ │ │ │ │ │ “ │ ” │ ¦ │ | ||
191 | * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ | ||
192 | * │ │ │ § │ │ │ │ │ │ │ │ ° │ " │ │ | ||
193 | * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ | ||
194 | * │ │ │ │ ¢ │ │ │ │ │ │ ˇ │ ̉ │ │ | ||
195 | * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ | ||
196 | * │ │ │ │ │ │ │ │ │ | ||
197 | * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ | ||
198 | */ | ||
199 | // Row 1 | ||
200 | #define US_TILD S(ALGR(US_DGRV)) // ~ | ||
201 | #define US_SUP1 S(ALGR(US_1)) // ¹ | ||
202 | #define US_DACU S(ALGR(US_2)) // ˝ (dead) | ||
203 | #define US_MACR S(ALGR(US_3)) // ¯ (dead) | ||
204 | #define US_PND S(ALGR(US_4)) // £ | ||
205 | #define US_CEDL S(ALGR(US_5)) // ¸ (dead) | ||
206 | #define US_CIRC S(ALGR(US_6)) // ^ | ||
207 | #define US_HORN S(ALGR(US_7)) // ̛ (dead) | ||
208 | #define US_OGON S(ALGR(US_8)) // ˛ (dead) | ||
209 | #define US_BREV S(ALGR(US_9)) // ˘ (dead) | ||
210 | #define US_RNGA S(ALGR(US_0)) // ° (dead) | ||
211 | #define US_DOTB S(ALGR(US_MINS)) // ̣ (dead) | ||
212 | #define US_DIV S(ALGR(US_EQL)) // ÷ | ||
213 | // Row 2 | ||
214 | #define US_LDQU S(ALGR(US_LBRC)) // “ | ||
215 | #define US_RDQU S(ALGR(US_LBRC)) // ” | ||
216 | #define US_BRKP S(ALGR(US_BSLS)) // ¦ | ||
217 | // Row 3 | ||
218 | #define US_SECT S(ALGR(US_S)) // § | ||
219 | #define US_DEG S(ALGR(US_SCLN)) // ° | ||
220 | #define US_DQUO S(ALGR(US_ACUT)) // " | ||
221 | // Row 4 | ||
222 | #define US_CENT S(ALGR(US_C)) // ¢ | ||
223 | #define US_CARN S(ALGR(US_DOT)) // ˇ (dead) | ||
224 | #define US_HOKA S(ALGR(US_SLSH)) // ̉ (dead) | ||
diff --git a/quantum/keymap_extras/sendstring_us_international.h b/quantum/keymap_extras/sendstring_us_international.h new file mode 100644 index 000000000..53a5891fb --- /dev/null +++ b/quantum/keymap_extras/sendstring_us_international.h | |||
@@ -0,0 +1,100 @@ | |||
1 | /* Copyright 2019 Rys Sommefeldt | ||
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 | |||
17 | // Sendstring lookup tables for UK layouts | ||
18 | |||
19 | #pragma once | ||
20 | |||
21 | #include "keymap_us_international.h" | ||
22 | #include "quantum.h" | ||
23 | |||
24 | // clang-format off | ||
25 | |||
26 | const uint8_t ascii_to_shift_lut[16] PROGMEM = { | ||
27 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
28 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
29 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
30 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
31 | |||
32 | KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 0), | ||
33 | KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0), | ||
34 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
35 | KCLUT_ENTRY(0, 0, 1, 0, 1, 0, 1, 1), | ||
36 | KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), | ||
37 | KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), | ||
38 | KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), | ||
39 | KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1), | ||
40 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
41 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
42 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
43 | KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0), | ||
44 | }; | ||
45 | |||
46 | __attribute__((weak)) const uint8_t ascii_to_dead_lut[16] PROGMEM = { | ||
47 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
48 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
49 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
50 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
51 | |||
52 | KCLUT_ENTRY(0, 0, 1, 0, 0, 0, 0, 1), | ||
53 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
54 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
55 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
56 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
57 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
58 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
59 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0), | ||
60 | KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), | ||
61 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
62 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
63 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0), | ||
64 | }; | ||
65 | |||
66 | const uint8_t ascii_to_keycode_lut[128] PROGMEM = { | ||
67 | // NUL SOH STX ETX EOT ENQ ACK BEL | ||
68 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
69 | // BS TAB LF VT FF CR SO SI | ||
70 | KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
71 | // DLE DC1 DC2 DC3 DC4 NAK SYN ETB | ||
72 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
73 | // CAN EM SUB ESC FS GS RS US | ||
74 | XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
75 | |||
76 | // ! " # $ % & ' | ||
77 | KC_SPC, US_1, US_ACUT, US_3, US_4, US_5, US_7, US_ACUT, | ||
78 | // ( ) * + , - . / | ||
79 | US_9, US_0, US_8, US_EQL, US_COMM, US_MINS, US_DOT, US_SLSH, | ||
80 | // 0 1 2 3 4 5 6 7 | ||
81 | US_0, US_1, US_2, US_3, US_4, US_5, US_6, US_7, | ||
82 | // 8 9 : ; < = > ? | ||
83 | US_8, US_9, US_SCLN, US_SCLN, US_COMM, US_EQL, US_DOT, US_SLSH, | ||
84 | // @ A B C D E F G | ||
85 | US_2, US_A, US_B, US_C, US_D, US_E, US_F, US_G, | ||
86 | // H I J K L M N O | ||
87 | US_H, US_I, US_J, US_K, US_L, US_M, US_N, US_O, | ||
88 | // P Q R S T U V W | ||
89 | US_P, US_Q, US_R, US_S, US_T, US_U, US_V, US_W, | ||
90 | // X Y Z [ \ ] ^ _ | ||
91 | US_X, US_Y, US_Z, US_LBRC, US_BSLS, US_RBRC, US_6, US_MINS, | ||
92 | // ` a b c d e f g | ||
93 | US_DGRV, US_A, US_B, US_C, US_D, US_E, US_F, US_G, | ||
94 | // h i j k l m n o | ||
95 | US_H, US_I, US_J, US_K, US_L, US_M, US_N, US_O, | ||
96 | // p q r s t u v w | ||
97 | US_P, US_Q, US_R, US_S, US_T, US_U, US_V, US_W, | ||
98 | // x y z { | } ~ DEL | ||
99 | US_X, US_Y, US_Z, US_LBRC, US_BSLS, US_RBRC, US_DGRV, KC_DEL | ||
100 | }; | ||
diff --git a/quantum/quantum.c b/quantum/quantum.c index 3ac0ed871..ece0388d3 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
@@ -391,6 +391,29 @@ __attribute__((weak)) const uint8_t ascii_to_altgr_lut[16] PROGMEM = { | |||
391 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | 391 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), |
392 | }; | 392 | }; |
393 | 393 | ||
394 | /* Bit-Packed look-up table to convert an ASCII character to whether | ||
395 | * [Space] needs to be sent after the keycode | ||
396 | */ | ||
397 | __attribute__((weak)) const uint8_t ascii_to_dead_lut[16] PROGMEM = { | ||
398 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
399 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
400 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
401 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
402 | |||
403 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
404 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
405 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
406 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
407 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
408 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
409 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
410 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
411 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
412 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
413 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
414 | KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), | ||
415 | }; | ||
416 | |||
394 | /* Look-up table to convert an ASCII character to a keycode. | 417 | /* Look-up table to convert an ASCII character to a keycode. |
395 | */ | 418 | */ |
396 | __attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = { | 419 | __attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = { |
@@ -528,9 +551,10 @@ void send_char(char ascii_code) { | |||
528 | } | 551 | } |
529 | #endif | 552 | #endif |
530 | 553 | ||
531 | uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); | 554 | uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); |
532 | bool is_shifted = PGM_LOADBIT(ascii_to_shift_lut, (uint8_t)ascii_code); | 555 | bool is_shifted = PGM_LOADBIT(ascii_to_shift_lut, (uint8_t)ascii_code); |
533 | bool is_altgred = PGM_LOADBIT(ascii_to_altgr_lut, (uint8_t)ascii_code); | 556 | bool is_altgred = PGM_LOADBIT(ascii_to_altgr_lut, (uint8_t)ascii_code); |
557 | bool is_dead = PGM_LOADBIT(ascii_to_dead_lut, (uint8_t)ascii_code); | ||
534 | 558 | ||
535 | if (is_shifted) { | 559 | if (is_shifted) { |
536 | register_code(KC_LSFT); | 560 | register_code(KC_LSFT); |
@@ -545,6 +569,9 @@ void send_char(char ascii_code) { | |||
545 | if (is_shifted) { | 569 | if (is_shifted) { |
546 | unregister_code(KC_LSFT); | 570 | unregister_code(KC_LSFT); |
547 | } | 571 | } |
572 | if (is_dead) { | ||
573 | tap_code(KC_SPACE); | ||
574 | } | ||
548 | } | 575 | } |
549 | 576 | ||
550 | void set_single_persistent_default_layer(uint8_t default_layer) { | 577 | void set_single_persistent_default_layer(uint8_t default_layer) { |
diff --git a/quantum/quantum.h b/quantum/quantum.h index f4df5bf15..83694c832 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h | |||
@@ -53,6 +53,7 @@ | |||
53 | #include "eeconfig.h" | 53 | #include "eeconfig.h" |
54 | #include "bootloader.h" | 54 | #include "bootloader.h" |
55 | #include "timer.h" | 55 | #include "timer.h" |
56 | #include "sync_timer.h" | ||
56 | #include "config_common.h" | 57 | #include "config_common.h" |
57 | #include "led.h" | 58 | #include "led.h" |
58 | #include "action_util.h" | 59 | #include "action_util.h" |
@@ -288,6 +289,7 @@ static __inline__ void __interrupt_enable__(const uint8_t *__s) { | |||
288 | extern const uint8_t ascii_to_keycode_lut[128]; | 289 | extern const uint8_t ascii_to_keycode_lut[128]; |
289 | extern const uint8_t ascii_to_shift_lut[16]; | 290 | extern const uint8_t ascii_to_shift_lut[16]; |
290 | extern const uint8_t ascii_to_altgr_lut[16]; | 291 | extern const uint8_t ascii_to_altgr_lut[16]; |
292 | extern const uint8_t ascii_to_dead_lut[16]; | ||
291 | // clang-format off | 293 | // clang-format off |
292 | #define KCLUT_ENTRY(a, b, c, d, e, f, g, h) \ | 294 | #define KCLUT_ENTRY(a, b, c, d, e, f, g, h) \ |
293 | ( ((a) ? 1 : 0) << 0 \ | 295 | ( ((a) ? 1 : 0) << 0 \ |
diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 04af3ae9e..a945df68e 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c | |||
@@ -266,9 +266,9 @@ static bool rgb_matrix_none(effect_params_t *params) { | |||
266 | 266 | ||
267 | static void rgb_task_timers(void) { | 267 | static void rgb_task_timers(void) { |
268 | #if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_DISABLE_TIMEOUT > 0 | 268 | #if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_DISABLE_TIMEOUT > 0 |
269 | uint32_t deltaTime = timer_elapsed32(rgb_timer_buffer); | 269 | uint32_t deltaTime = sync_timer_elapsed32(rgb_timer_buffer); |
270 | #endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_DISABLE_TIMEOUT > 0 | 270 | #endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_DISABLE_TIMEOUT > 0 |
271 | rgb_timer_buffer = timer_read32(); | 271 | rgb_timer_buffer = sync_timer_read32(); |
272 | 272 | ||
273 | // Update double buffer timers | 273 | // Update double buffer timers |
274 | #if RGB_DISABLE_TIMEOUT > 0 | 274 | #if RGB_DISABLE_TIMEOUT > 0 |
@@ -296,7 +296,7 @@ static void rgb_task_timers(void) { | |||
296 | 296 | ||
297 | static void rgb_task_sync(void) { | 297 | static void rgb_task_sync(void) { |
298 | // next task | 298 | // next task |
299 | if (timer_elapsed32(g_rgb_timer) >= RGB_MATRIX_LED_FLUSH_LIMIT) rgb_task_state = STARTING; | 299 | if (sync_timer_elapsed32(g_rgb_timer) >= RGB_MATRIX_LED_FLUSH_LIMIT) rgb_task_state = STARTING; |
300 | } | 300 | } |
301 | 301 | ||
302 | static void rgb_task_start(void) { | 302 | static void rgb_task_start(void) { |
diff --git a/quantum/rgblight.c b/quantum/rgblight.c index beeef6568..d277029e4 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #endif | 29 | #endif |
30 | #include "wait.h" | 30 | #include "wait.h" |
31 | #include "progmem.h" | 31 | #include "progmem.h" |
32 | #include "timer.h" | 32 | #include "sync_timer.h" |
33 | #include "rgblight.h" | 33 | #include "rgblight.h" |
34 | #include "color.h" | 34 | #include "color.h" |
35 | #include "debug.h" | 35 | #include "debug.h" |
@@ -684,18 +684,16 @@ static void rgblight_layers_write(void) { | |||
684 | 684 | ||
685 | # ifdef RGBLIGHT_LAYER_BLINK | 685 | # ifdef RGBLIGHT_LAYER_BLINK |
686 | rgblight_layer_mask_t _blinked_layer_mask = 0; | 686 | rgblight_layer_mask_t _blinked_layer_mask = 0; |
687 | uint16_t _blink_duration = 0; | ||
688 | static uint16_t _blink_timer; | 687 | static uint16_t _blink_timer; |
689 | 688 | ||
690 | void rgblight_blink_layer(uint8_t layer, uint16_t duration_ms) { | 689 | void rgblight_blink_layer(uint8_t layer, uint16_t duration_ms) { |
691 | rgblight_set_layer_state(layer, true); | 690 | rgblight_set_layer_state(layer, true); |
692 | _blinked_layer_mask |= (rgblight_layer_mask_t)1 << layer; | 691 | _blinked_layer_mask |= (rgblight_layer_mask_t)1 << layer; |
693 | _blink_timer = timer_read(); | 692 | _blink_timer = sync_timer_read() + duration_ms; |
694 | _blink_duration = duration_ms; | ||
695 | } | 693 | } |
696 | 694 | ||
697 | void rgblight_unblink_layers(void) { | 695 | void rgblight_unblink_layers(void) { |
698 | if (_blinked_layer_mask != 0 && timer_elapsed(_blink_timer) > _blink_duration) { | 696 | if (_blinked_layer_mask != 0 && timer_expired(sync_timer_read(), _blink_timer)) { |
699 | for (uint8_t layer = 0; layer < RGBLIGHT_MAX_LAYERS; layer++) { | 697 | for (uint8_t layer = 0; layer < RGBLIGHT_MAX_LAYERS; layer++) { |
700 | if ((_blinked_layer_mask & (rgblight_layer_mask_t)1 << layer) != 0) { | 698 | if ((_blinked_layer_mask & (rgblight_layer_mask_t)1 << layer) != 0) { |
701 | rgblight_set_layer_state(layer, false); | 699 | rgblight_set_layer_state(layer, false); |
@@ -799,7 +797,7 @@ void rgblight_update_sync(rgblight_syncinfo_t *syncinfo, bool write_to_eeprom) { | |||
799 | animation_status.restart = true; | 797 | animation_status.restart = true; |
800 | } | 798 | } |
801 | # endif /* RGBLIGHT_SPLIT_NO_ANIMATION_SYNC */ | 799 | # endif /* RGBLIGHT_SPLIT_NO_ANIMATION_SYNC */ |
802 | # endif /* RGBLIGHT_USE_TIMER */ | 800 | # endif /* RGBLIGHT_USE_TIMER */ |
803 | } | 801 | } |
804 | #endif /* RGBLIGHT_SPLIT */ | 802 | #endif /* RGBLIGHT_SPLIT */ |
805 | 803 | ||
@@ -832,7 +830,7 @@ void rgblight_timer_enable(void) { | |||
832 | if (!is_static_effect(rgblight_config.mode)) { | 830 | if (!is_static_effect(rgblight_config.mode)) { |
833 | rgblight_status.timer_enabled = true; | 831 | rgblight_status.timer_enabled = true; |
834 | } | 832 | } |
835 | animation_status.last_timer = timer_read(); | 833 | animation_status.last_timer = sync_timer_read(); |
836 | RGBLIGHT_SPLIT_SET_CHANGE_TIMER_ENABLE; | 834 | RGBLIGHT_SPLIT_SET_CHANGE_TIMER_ENABLE; |
837 | dprintf("rgblight timer enabled.\n"); | 835 | dprintf("rgblight timer enabled.\n"); |
838 | } | 836 | } |
@@ -941,18 +939,19 @@ void rgblight_task(void) { | |||
941 | # endif | 939 | # endif |
942 | if (animation_status.restart) { | 940 | if (animation_status.restart) { |
943 | animation_status.restart = false; | 941 | animation_status.restart = false; |
944 | animation_status.last_timer = timer_read() - interval_time - 1; | 942 | animation_status.last_timer = sync_timer_read(); |
945 | animation_status.pos16 = 0; // restart signal to local each effect | 943 | animation_status.pos16 = 0; // restart signal to local each effect |
946 | } | 944 | } |
947 | if (timer_elapsed(animation_status.last_timer) >= interval_time) { | 945 | uint16_t now = sync_timer_read(); |
946 | if (timer_expired(now, animation_status.last_timer)) { | ||
948 | # if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC) | 947 | # if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC) |
949 | static uint16_t report_last_timer = 0; | 948 | static uint16_t report_last_timer = 0; |
950 | static bool tick_flag = false; | 949 | static bool tick_flag = false; |
951 | uint16_t oldpos16; | 950 | uint16_t oldpos16; |
952 | if (tick_flag) { | 951 | if (tick_flag) { |
953 | tick_flag = false; | 952 | tick_flag = false; |
954 | if (timer_elapsed(report_last_timer) >= 30000) { | 953 | if (timer_expired(now, report_last_timer)) { |
955 | report_last_timer = timer_read(); | 954 | report_last_timer += 30000; |
956 | dprintf("rgblight animation tick report to slave\n"); | 955 | dprintf("rgblight animation tick report to slave\n"); |
957 | RGBLIGHT_SPLIT_ANIMATION_TICK; | 956 | RGBLIGHT_SPLIT_ANIMATION_TICK; |
958 | } | 957 | } |
diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c index 467ff81a9..e601fb4df 100644 --- a/quantum/split_common/transport.c +++ b/quantum/split_common/transport.c | |||
@@ -6,6 +6,7 @@ | |||
6 | #include "quantum.h" | 6 | #include "quantum.h" |
7 | 7 | ||
8 | #define ROWS_PER_HAND (MATRIX_ROWS / 2) | 8 | #define ROWS_PER_HAND (MATRIX_ROWS / 2) |
9 | #define SYNC_TIMER_OFFSET 2 | ||
9 | 10 | ||
10 | #ifdef RGBLIGHT_ENABLE | 11 | #ifdef RGBLIGHT_ENABLE |
11 | # include "rgblight.h" | 12 | # include "rgblight.h" |
@@ -27,8 +28,20 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A; | |||
27 | # include "i2c_slave.h" | 28 | # include "i2c_slave.h" |
28 | 29 | ||
29 | typedef struct _I2C_slave_buffer_t { | 30 | typedef struct _I2C_slave_buffer_t { |
31 | # ifndef DISABLE_SYNC_TIMER | ||
32 | uint32_t sync_timer; | ||
33 | # endif | ||
30 | matrix_row_t smatrix[ROWS_PER_HAND]; | 34 | matrix_row_t smatrix[ROWS_PER_HAND]; |
35 | # ifdef SPLIT_MODS_ENABLE | ||
36 | uint8_t real_mods; | ||
37 | uint8_t weak_mods; | ||
38 | # ifndef NO_ACTION_ONESHOT | ||
39 | uint8_t oneshot_mods; | ||
40 | # endif | ||
41 | # endif | ||
42 | # ifdef BACKLIGHT_ENABLE | ||
31 | uint8_t backlight_level; | 43 | uint8_t backlight_level; |
44 | # endif | ||
32 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | 45 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) |
33 | rgblight_syncinfo_t rgblight_sync; | 46 | rgblight_syncinfo_t rgblight_sync; |
34 | # endif | 47 | # endif |
@@ -42,9 +55,13 @@ typedef struct _I2C_slave_buffer_t { | |||
42 | 55 | ||
43 | static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; | 56 | static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; |
44 | 57 | ||
58 | # define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer) | ||
59 | # define I2C_KEYMAP_START offsetof(I2C_slave_buffer_t, smatrix) | ||
60 | # define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods) | ||
61 | # define I2C_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_mods) | ||
62 | # define I2C_ONESHOT_MODS_START offsetof(I2C_slave_buffer_t, oneshot_mods) | ||
45 | # define I2C_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level) | 63 | # define I2C_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level) |
46 | # define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) | 64 | # define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) |
47 | # define I2C_KEYMAP_START offsetof(I2C_slave_buffer_t, smatrix) | ||
48 | # define I2C_ENCODER_START offsetof(I2C_slave_buffer_t, encoder_state) | 65 | # define I2C_ENCODER_START offsetof(I2C_slave_buffer_t, encoder_state) |
49 | # define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm) | 66 | # define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm) |
50 | 67 | ||
@@ -91,10 +108,43 @@ bool transport_master(matrix_row_t matrix[]) { | |||
91 | } | 108 | } |
92 | } | 109 | } |
93 | # endif | 110 | # endif |
111 | |||
112 | # ifdef SPLIT_MODS_ENABLE | ||
113 | uint8_t real_mods = get_mods(); | ||
114 | if (real_mods != i2c_buffer->real_mods) { | ||
115 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_REAL_MODS_START, (void *)&real_mods, sizeof(real_mods), TIMEOUT) >= 0) { | ||
116 | i2c_buffer->real_mods = real_mods; | ||
117 | } | ||
118 | } | ||
119 | |||
120 | uint8_t weak_mods = get_weak_mods(); | ||
121 | if (weak_mods != i2c_buffer->weak_mods) { | ||
122 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_WEAK_MODS_START, (void *)&weak_mods, sizeof(weak_mods), TIMEOUT) >= 0) { | ||
123 | i2c_buffer->weak_mods = weak_mods; | ||
124 | } | ||
125 | } | ||
126 | |||
127 | # ifndef NO_ACTION_ONESHOT | ||
128 | uint8_t oneshot_mods = get_oneshot_mods(); | ||
129 | if (oneshot_mods != i2c_buffer->oneshot_mods) { | ||
130 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_ONESHOT_MODS_START, (void *)&oneshot_mods, sizeof(oneshot_mods), TIMEOUT) >= 0) { | ||
131 | i2c_buffer->oneshot_mods = oneshot_mods; | ||
132 | } | ||
133 | } | ||
134 | # endif | ||
135 | # endif | ||
136 | |||
137 | # ifndef DISABLE_SYNC_TIMER | ||
138 | i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; | ||
139 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT); | ||
140 | # endif | ||
94 | return true; | 141 | return true; |
95 | } | 142 | } |
96 | 143 | ||
97 | void transport_slave(matrix_row_t matrix[]) { | 144 | void transport_slave(matrix_row_t matrix[]) { |
145 | # ifndef DISABLE_SYNC_TIMER | ||
146 | sync_timer_update(i2c_buffer->sync_timer); | ||
147 | # endif | ||
98 | // Copy matrix to I2C buffer | 148 | // Copy matrix to I2C buffer |
99 | memcpy((void *)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix)); | 149 | memcpy((void *)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix)); |
100 | 150 | ||
@@ -118,6 +168,14 @@ void transport_slave(matrix_row_t matrix[]) { | |||
118 | # ifdef WPM_ENABLE | 168 | # ifdef WPM_ENABLE |
119 | set_current_wpm(i2c_buffer->current_wpm); | 169 | set_current_wpm(i2c_buffer->current_wpm); |
120 | # endif | 170 | # endif |
171 | |||
172 | # ifdef SPLIT_MODS_ENABLE | ||
173 | set_mods(i2c_buffer->real_mods); | ||
174 | set_weak_mods(i2c_buffer->weak_mods); | ||
175 | # ifndef NO_ACTION_ONESHOT | ||
176 | set_oneshot_mods(i2c_buffer->oneshot_mods); | ||
177 | # endif | ||
178 | # endif | ||
121 | } | 179 | } |
122 | 180 | ||
123 | void transport_master_init(void) { i2c_init(); } | 181 | void transport_master_init(void) { i2c_init(); } |
@@ -133,12 +191,22 @@ typedef struct _Serial_s2m_buffer_t { | |||
133 | matrix_row_t smatrix[ROWS_PER_HAND]; | 191 | matrix_row_t smatrix[ROWS_PER_HAND]; |
134 | 192 | ||
135 | # ifdef ENCODER_ENABLE | 193 | # ifdef ENCODER_ENABLE |
136 | uint8_t encoder_state[NUMBER_OF_ENCODERS]; | 194 | uint8_t encoder_state[NUMBER_OF_ENCODERS]; |
137 | # endif | 195 | # endif |
138 | 196 | ||
139 | } Serial_s2m_buffer_t; | 197 | } Serial_s2m_buffer_t; |
140 | 198 | ||
141 | typedef struct _Serial_m2s_buffer_t { | 199 | typedef struct _Serial_m2s_buffer_t { |
200 | # ifdef SPLIT_MODS_ENABLE | ||
201 | uint8_t real_mods; | ||
202 | uint8_t weak_mods; | ||
203 | # ifndef NO_ACTION_ONESHOT | ||
204 | uint8_t oneshot_mods; | ||
205 | # endif | ||
206 | # endif | ||
207 | # ifndef DISABLE_SYNC_TIMER | ||
208 | uint32_t sync_timer; | ||
209 | # endif | ||
142 | # ifdef BACKLIGHT_ENABLE | 210 | # ifdef BACKLIGHT_ENABLE |
143 | uint8_t backlight_level; | 211 | uint8_t backlight_level; |
144 | # endif | 212 | # endif |
@@ -251,11 +319,26 @@ bool transport_master(matrix_row_t matrix[]) { | |||
251 | // Write wpm to slave | 319 | // Write wpm to slave |
252 | serial_m2s_buffer.current_wpm = get_current_wpm(); | 320 | serial_m2s_buffer.current_wpm = get_current_wpm(); |
253 | # endif | 321 | # endif |
322 | |||
323 | # ifdef SPLIT_MODS_ENABLE | ||
324 | serial_m2s_buffer.real_mods = get_mods(); | ||
325 | serial_m2s_buffer.weak_mods = get_weak_mods(); | ||
326 | # ifndef NO_ACTION_ONESHOT | ||
327 | serial_m2s_buffer.oneshot_mods = get_oneshot_mods(); | ||
328 | # endif | ||
329 | # endif | ||
330 | # ifndef DISABLE_SYNC_TIMER | ||
331 | serial_m2s_buffer.sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; | ||
332 | # endif | ||
254 | return true; | 333 | return true; |
255 | } | 334 | } |
256 | 335 | ||
257 | void transport_slave(matrix_row_t matrix[]) { | 336 | void transport_slave(matrix_row_t matrix[]) { |
258 | transport_rgblight_slave(); | 337 | transport_rgblight_slave(); |
338 | # ifndef DISABLE_SYNC_TIMER | ||
339 | sync_timer_update(serial_m2s_buffer.sync_timer); | ||
340 | # endif | ||
341 | |||
259 | // TODO: if MATRIX_COLS > 8 change to pack() | 342 | // TODO: if MATRIX_COLS > 8 change to pack() |
260 | for (int i = 0; i < ROWS_PER_HAND; ++i) { | 343 | for (int i = 0; i < ROWS_PER_HAND; ++i) { |
261 | serial_s2m_buffer.smatrix[i] = matrix[i]; | 344 | serial_s2m_buffer.smatrix[i] = matrix[i]; |
@@ -271,6 +354,14 @@ void transport_slave(matrix_row_t matrix[]) { | |||
271 | # ifdef WPM_ENABLE | 354 | # ifdef WPM_ENABLE |
272 | set_current_wpm(serial_m2s_buffer.current_wpm); | 355 | set_current_wpm(serial_m2s_buffer.current_wpm); |
273 | # endif | 356 | # endif |
357 | |||
358 | # ifdef SPLIT_MODS_ENABLE | ||
359 | set_mods(serial_m2s_buffer.real_mods); | ||
360 | set_weak_mods(serial_m2s_buffer.weak_mods); | ||
361 | # ifndef NO_ACTION_ONESHOT | ||
362 | set_oneshot_mods(serial_m2s_buffer.oneshot_mods); | ||
363 | # endif | ||
364 | # endif | ||
274 | } | 365 | } |
275 | 366 | ||
276 | #endif | 367 | #endif |