summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfauxpark <fauxpark@gmail.com>2023-07-08 01:01:36 +1000
committerfauxpark <fauxpark@gmail.com>2023-07-08 01:01:36 +1000
commitea1a9c37ed76aac93205b1aec38b11a310a50591 (patch)
treea9b8c1255aded2d43bc90dc1fdadc739411d8cfb
parentb32392f7b20e98f9776ef3f7dd79b1c43bd41c9d (diff)
parent71f0fc59bef7a37b55c7e1c10b1b21b8a86475b7 (diff)
Merge remote-tracking branch 'upstream/master' into develop
-rw-r--r--keyboards/amjkeyboard/amj84/info.json362
-rw-r--r--keyboards/amjkeyboard/amj84/keymaps/default/keymap.c4
-rw-r--r--keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c57
-rw-r--r--keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c57
-rw-r--r--keyboards/amjkeyboard/amj84/matrix_diagram.md24
-rw-r--r--keyboards/bpiphany/pegasushoof/2013/info.json2
-rw-r--r--keyboards/bpiphany/pegasushoof/2015/info.json2
-rw-r--r--keyboards/cipulot/rf_r1_8_9xu/info.json1
-rw-r--r--keyboards/converter/usb_usb/info.json2
-rw-r--r--keyboards/custommk/evo70_r2/config.h90
-rw-r--r--keyboards/custommk/evo70_r2/halconf.h36
-rw-r--r--keyboards/custommk/evo70_r2/info.json152
-rw-r--r--keyboards/custommk/evo70_r2/keymaps/default/keymap.c33
-rw-r--r--keyboards/custommk/evo70_r2/keymaps/via/config.h13
-rw-r--r--keyboards/custommk/evo70_r2/keymaps/via/keymap.c33
-rw-r--r--keyboards/custommk/evo70_r2/keymaps/via/rules.mk2
-rw-r--r--keyboards/custommk/evo70_r2/matrix.c117
-rw-r--r--keyboards/custommk/evo70_r2/mcuconf.h58
-rw-r--r--keyboards/custommk/evo70_r2/readme.md21
-rw-r--r--keyboards/custommk/evo70_r2/rules.mk11
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/info.json76
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h23
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c45
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h23
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c174
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk1
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/readme.md27
-rw-r--r--keyboards/handwired/scottokeebs/scottoalp/rules.mk1
-rw-r--r--keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c72
-rw-r--r--keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h99
-rw-r--r--keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c11
-rw-r--r--keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md2
-rw-r--r--keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk1
-rw-r--r--keyboards/jkeys_design/gentleman65/rules.mk2
-rw-r--r--keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h44
-rw-r--r--keyboards/keyboardio/atreus/keymaps/slotthe/config.h19
-rw-r--r--keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c328
-rw-r--r--keyboards/keyboardio/atreus/keymaps/slotthe/readme.md251
-rw-r--r--keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk9
-rw-r--r--keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h3
-rw-r--r--keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c135
-rw-r--r--keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md14
-rw-r--r--keyboards/lily58/keymaps/pomodoro/config.h56
-rw-r--r--keyboards/lily58/keymaps/pomodoro/keymap.c154
-rw-r--r--keyboards/lily58/keymaps/pomodoro/pomodoro.c249
-rw-r--r--keyboards/lily58/keymaps/pomodoro/rules.mk23
-rw-r--r--keyboards/monsgeek/m6/config.h51
-rw-r--r--keyboards/monsgeek/m6/halconf.h23
-rw-r--r--keyboards/monsgeek/m6/info.json232
-rw-r--r--keyboards/monsgeek/m6/keymaps/default/keymap.c76
-rw-r--r--keyboards/monsgeek/m6/keymaps/via/keymap.c76
-rw-r--r--keyboards/monsgeek/m6/keymaps/via/rules.mk1
-rw-r--r--keyboards/monsgeek/m6/m6.c197
-rw-r--r--keyboards/monsgeek/m6/mcuconf.h24
-rw-r--r--keyboards/monsgeek/m6/readme.md19
-rw-r--r--keyboards/monsgeek/m6/rules.mk2
-rw-r--r--keyboards/stront/config.h95
-rw-r--r--keyboards/stront/display.c125
-rw-r--r--keyboards/stront/display.h20
-rw-r--r--keyboards/stront/halconf.h9
-rw-r--r--keyboards/stront/info.json147
-rw-r--r--keyboards/stront/keymaps/default/keymap.c107
-rw-r--r--keyboards/stront/keymaps/hid/config.h7
-rw-r--r--keyboards/stront/keymaps/hid/hid_display.c240
-rw-r--r--keyboards/stront/keymaps/hid/hid_display.h29
-rw-r--r--keyboards/stront/keymaps/hid/keymap.c187
-rw-r--r--keyboards/stront/keymaps/hid/lv_conf.h15
-rw-r--r--keyboards/stront/keymaps/hid/rules.mk5
-rw-r--r--keyboards/stront/keymaps/i2c/config.h8
-rw-r--r--keyboards/stront/keymaps/i2c/halconf.h8
-rw-r--r--keyboards/stront/keymaps/i2c/keymap.c107
-rw-r--r--keyboards/stront/keymaps/i2c/mcuconf.h9
-rw-r--r--keyboards/stront/keymaps/i2c/rules.mk1
-rw-r--r--keyboards/stront/keymaps/zzeneg/config.h30
-rw-r--r--keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c782
-rw-r--r--keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c189
-rw-r--r--keyboards/stront/keymaps/zzeneg/halconf.h8
-rw-r--r--keyboards/stront/keymaps/zzeneg/icons/flag_pl.c42
-rw-r--r--keyboards/stront/keymaps/zzeneg/icons/flag_ru.c42
-rw-r--r--keyboards/stront/keymaps/zzeneg/icons/flag_uk.c46
-rw-r--r--keyboards/stront/keymaps/zzeneg/keymap.c305
-rw-r--r--keyboards/stront/keymaps/zzeneg/lv_conf.h148
-rw-r--r--keyboards/stront/keymaps/zzeneg/mcuconf.h9
-rw-r--r--keyboards/stront/keymaps/zzeneg/rules.mk17
-rw-r--r--keyboards/stront/keymaps/zzeneg/zzeneg_display.c242
-rw-r--r--keyboards/stront/keymaps/zzeneg/zzeneg_display.h27
-rw-r--r--keyboards/stront/lv_conf.h18
-rw-r--r--keyboards/stront/lvgl_helpers.c113
-rw-r--r--keyboards/stront/lvgl_helpers.h13
-rw-r--r--keyboards/stront/mcuconf.h12
-rw-r--r--keyboards/stront/readme.md45
-rw-r--r--keyboards/stront/rules.mk12
-rw-r--r--keyboards/stront/stront.c61
-rw-r--r--keyboards/stront/stront.h6
-rw-r--r--keyboards/viktus/styrka_topre/ec.c191
-rw-r--r--keyboards/viktus/styrka_topre/ec.h31
-rw-r--r--keyboards/viktus/styrka_topre/info.json438
-rw-r--r--keyboards/viktus/styrka_topre/keymaps/default/keymap.c27
-rw-r--r--keyboards/viktus/styrka_topre/keymaps/via/keymap.c27
-rw-r--r--keyboards/viktus/styrka_topre/keymaps/via/rules.mk1
-rw-r--r--keyboards/viktus/styrka_topre/readme.md27
-rw-r--r--keyboards/viktus/styrka_topre/rules.mk3
-rw-r--r--keyboards/viktus/styrka_topre/styrka_topre.c49
-rw-r--r--keyboards/winry/winry25tc/info.json5
-rw-r--r--keyboards/winry/winry25tc/keymaps/lightsout/keymap.c136
-rw-r--r--keyboards/winry/winry25tc/keymaps/lightsout/readme.md3
-rw-r--r--layouts/community/ortho_4x10/scotto/keymap.c74
-rw-r--r--layouts/community/split_3x5_2/scotto/keymap.c78
-rw-r--r--layouts/community/split_3x5_3/scotto/keymap.c75
-rw-r--r--layouts/default/60_jis/default_60_jis/keymap.c27
-rw-r--r--layouts/default/60_jis/info.json80
-rw-r--r--layouts/default/60_jis/layout.json5
-rw-r--r--layouts/default/60_jis/readme.md3
-rw-r--r--layouts/default/64_ansi/default_64_ansi/keymap.c41
-rw-r--r--layouts/default/64_iso/default_64_iso/keymap.c41
-rw-r--r--layouts/default/fullsize_jis/default_fullsize_jis/keymap.c32
-rw-r--r--layouts/default/fullsize_jis/info.json125
-rw-r--r--layouts/default/fullsize_jis/layout.json6
-rw-r--r--layouts/default/fullsize_jis/readme.md3
-rw-r--r--layouts/default/readme.md69
-rw-r--r--layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymaps.c32
-rw-r--r--layouts/default/tkl_f13_jis/info.json108
-rw-r--r--layouts/default/tkl_f13_jis/layout.json6
-rw-r--r--layouts/default/tkl_f13_jis/readme.md3
-rw-r--r--layouts/default/tkl_jis/default_tkl_jis/keymap.c32
-rw-r--r--layouts/default/tkl_jis/info.json107
-rw-r--r--layouts/default/tkl_jis/layout.json6
-rw-r--r--layouts/default/tkl_jis/readme.md5
-rw-r--r--users/scotto/config.h25
-rw-r--r--users/scotto/readme.md17
-rw-r--r--users/scotto/rules.mk11
-rw-r--r--users/scotto/scotto.c15
-rw-r--r--users/scotto/scotto.h69
-rw-r--r--users/scotto/tap_dance.c154
-rw-r--r--users/scotto/tap_dance.h39
135 files changed, 9026 insertions, 106 deletions
diff --git a/keyboards/amjkeyboard/amj84/info.json b/keyboards/amjkeyboard/amj84/info.json
index 98c4a7e447..0b4d614c6e 100644
--- a/keyboards/amjkeyboard/amj84/info.json
+++ b/keyboards/amjkeyboard/amj84/info.json
@@ -20,100 +20,288 @@
20 }, 20 },
21 "processor": "atmega32u4", 21 "processor": "atmega32u4",
22 "bootloader": "atmel-dfu", 22 "bootloader": "atmel-dfu",
23 "layout_aliases": {
24 "LAYOUT": "LAYOUT_all"
25 },
23 "layouts": { 26 "layouts": {
24 "LAYOUT": { 27 "LAYOUT_all": {
28 "layout": [
29 {"matrix": [0, 0], "x": 0, "y": 0},
30 {"matrix": [0, 1], "x": 1, "y": 0},
31 {"matrix": [0, 2], "x": 2, "y": 0},
32 {"matrix": [0, 3], "x": 3, "y": 0},
33 {"matrix": [0, 4], "x": 4, "y": 0},
34 {"matrix": [0, 5], "x": 5, "y": 0},
35 {"matrix": [0, 6], "x": 6, "y": 0},
36 {"matrix": [0, 7], "x": 7, "y": 0},
37 {"matrix": [0, 8], "x": 8, "y": 0},
38 {"matrix": [0, 9], "x": 9, "y": 0},
39 {"matrix": [0, 10], "x": 10, "y": 0},
40 {"matrix": [0, 11], "x": 11, "y": 0},
41 {"matrix": [0, 12], "x": 12, "y": 0},
42 {"matrix": [0, 13], "x": 13, "y": 0},
43 {"matrix": [0, 14], "x": 15, "y": 0},
44
45 {"matrix": [1, 0], "x": 0, "y": 1},
46 {"matrix": [1, 1], "x": 1, "y": 1},
47 {"matrix": [1, 2], "x": 2, "y": 1},
48 {"matrix": [1, 3], "x": 3, "y": 1},
49 {"matrix": [1, 4], "x": 4, "y": 1},
50 {"matrix": [1, 5], "x": 5, "y": 1},
51 {"matrix": [1, 6], "x": 6, "y": 1},
52 {"matrix": [1, 7], "x": 7, "y": 1},
53 {"matrix": [1, 8], "x": 8, "y": 1},
54 {"matrix": [1, 9], "x": 9, "y": 1},
55 {"matrix": [1, 10], "x": 10, "y": 1},
56 {"matrix": [1, 11], "x": 11, "y": 1},
57 {"matrix": [1, 12], "x": 12, "y": 1},
58 {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
59 {"matrix": [1, 14], "x": 15, "y": 1},
60
61 {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
62 {"matrix": [2, 1], "x": 1.5, "y": 2},
63 {"matrix": [2, 2], "x": 2.5, "y": 2},
64 {"matrix": [2, 3], "x": 3.5, "y": 2},
65 {"matrix": [2, 4], "x": 4.5, "y": 2},
66 {"matrix": [2, 5], "x": 5.5, "y": 2},
67 {"matrix": [2, 6], "x": 6.5, "y": 2},
68 {"matrix": [2, 7], "x": 7.5, "y": 2},
69 {"matrix": [2, 8], "x": 8.5, "y": 2},
70 {"matrix": [2, 9], "x": 9.5, "y": 2},
71 {"matrix": [2, 10], "x": 10.5, "y": 2},
72 {"matrix": [2, 11], "x": 11.5, "y": 2},
73 {"matrix": [2, 12], "x": 12.5, "y": 2},
74 {"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
75 {"matrix": [2, 14], "x": 15, "y": 2},
76
77 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
78 {"matrix": [3, 1], "x": 1.75, "y": 3},
79 {"matrix": [3, 2], "x": 2.75, "y": 3},
80 {"matrix": [3, 3], "x": 3.75, "y": 3},
81 {"matrix": [3, 4], "x": 4.75, "y": 3},
82 {"matrix": [3, 5], "x": 5.75, "y": 3},
83 {"matrix": [3, 6], "x": 6.75, "y": 3},
84 {"matrix": [3, 7], "x": 7.75, "y": 3},
85 {"matrix": [3, 8], "x": 8.75, "y": 3},
86 {"matrix": [3, 9], "x": 9.75, "y": 3},
87 {"matrix": [3, 10], "x": 10.75, "y": 3},
88 {"matrix": [3, 11], "x": 11.75, "y": 3},
89 {"matrix": [3, 12], "x": 12.75, "y": 3},
90 {"matrix": [3, 13], "x": 13.75, "y": 3, "w": 1.25},
91 {"matrix": [3, 14], "x": 15, "y": 3},
92
93 {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
94 {"matrix": [4, 1], "x": 1.25, "y": 4},
95 {"matrix": [4, 2], "x": 2.25, "y": 4},
96 {"matrix": [4, 3], "x": 3.25, "y": 4},
97 {"matrix": [4, 4], "x": 4.25, "y": 4},
98 {"matrix": [4, 5], "x": 5.25, "y": 4},
99 {"matrix": [4, 6], "x": 6.25, "y": 4},
100 {"matrix": [4, 7], "x": 7.25, "y": 4},
101 {"matrix": [4, 8], "x": 8.25, "y": 4},
102 {"matrix": [4, 9], "x": 9.25, "y": 4},
103 {"matrix": [4, 10], "x": 10.25, "y": 4},
104 {"matrix": [4, 11], "x": 11.25, "y": 4},
105 {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
106 {"matrix": [4, 13], "x": 14, "y": 4},
107 {"matrix": [4, 14], "x": 15, "y": 4},
108
109 {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
110 {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
111 {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
112 {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
113 {"matrix": [5, 8], "x": 14, "y": 0},
114 {"matrix": [5, 9], "x": 10, "y": 5},
115 {"matrix": [5, 10], "x": 11, "y": 5},
116 {"matrix": [5, 11], "x": 12, "y": 5},
117 {"matrix": [5, 12], "x": 13, "y": 5},
118 {"matrix": [5, 13], "x": 14, "y": 5},
119 {"matrix": [5, 14], "x": 15, "y": 5}
120 ]
121 },
122 "LAYOUT_75_ansi_rwkl": {
123 "layout": [
124 {"matrix": [0, 0], "x": 0, "y": 0},
125 {"matrix": [0, 1], "x": 1, "y": 0},
126 {"matrix": [0, 2], "x": 2, "y": 0},
127 {"matrix": [0, 3], "x": 3, "y": 0},
128 {"matrix": [0, 4], "x": 4, "y": 0},
129 {"matrix": [0, 5], "x": 5, "y": 0},
130 {"matrix": [0, 6], "x": 6, "y": 0},
131 {"matrix": [0, 7], "x": 7, "y": 0},
132 {"matrix": [0, 8], "x": 8, "y": 0},
133 {"matrix": [0, 9], "x": 9, "y": 0},
134 {"matrix": [0, 10], "x": 10, "y": 0},
135 {"matrix": [0, 11], "x": 11, "y": 0},
136 {"matrix": [0, 12], "x": 12, "y": 0},
137 {"matrix": [0, 13], "x": 13, "y": 0},
138 {"matrix": [5, 8], "x": 14, "y": 0},
139 {"matrix": [0, 14], "x": 15, "y": 0},
140
141 {"matrix": [1, 0], "x": 0, "y": 1},
142 {"matrix": [1, 1], "x": 1, "y": 1},
143 {"matrix": [1, 2], "x": 2, "y": 1},
144 {"matrix": [1, 3], "x": 3, "y": 1},
145 {"matrix": [1, 4], "x": 4, "y": 1},
146 {"matrix": [1, 5], "x": 5, "y": 1},
147 {"matrix": [1, 6], "x": 6, "y": 1},
148 {"matrix": [1, 7], "x": 7, "y": 1},
149 {"matrix": [1, 8], "x": 8, "y": 1},
150 {"matrix": [1, 9], "x": 9, "y": 1},
151 {"matrix": [1, 10], "x": 10, "y": 1},
152 {"matrix": [1, 11], "x": 11, "y": 1},
153 {"matrix": [1, 12], "x": 12, "y": 1},
154 {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
155 {"matrix": [1, 14], "x": 15, "y": 1},
156
157 {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
158 {"matrix": [2, 1], "x": 1.5, "y": 2},
159 {"matrix": [2, 2], "x": 2.5, "y": 2},
160 {"matrix": [2, 3], "x": 3.5, "y": 2},
161 {"matrix": [2, 4], "x": 4.5, "y": 2},
162 {"matrix": [2, 5], "x": 5.5, "y": 2},
163 {"matrix": [2, 6], "x": 6.5, "y": 2},
164 {"matrix": [2, 7], "x": 7.5, "y": 2},
165 {"matrix": [2, 8], "x": 8.5, "y": 2},
166 {"matrix": [2, 9], "x": 9.5, "y": 2},
167 {"matrix": [2, 10], "x": 10.5, "y": 2},
168 {"matrix": [2, 11], "x": 11.5, "y": 2},
169 {"matrix": [2, 12], "x": 12.5, "y": 2},
170 {"matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
171 {"matrix": [2, 14], "x": 15, "y": 2},
172
173 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
174 {"matrix": [3, 1], "x": 1.75, "y": 3},
175 {"matrix": [3, 2], "x": 2.75, "y": 3},
176 {"matrix": [3, 3], "x": 3.75, "y": 3},
177 {"matrix": [3, 4], "x": 4.75, "y": 3},
178 {"matrix": [3, 5], "x": 5.75, "y": 3},
179 {"matrix": [3, 6], "x": 6.75, "y": 3},
180 {"matrix": [3, 7], "x": 7.75, "y": 3},
181 {"matrix": [3, 8], "x": 8.75, "y": 3},
182 {"matrix": [3, 9], "x": 9.75, "y": 3},
183 {"matrix": [3, 10], "x": 10.75, "y": 3},
184 {"matrix": [3, 11], "x": 11.75, "y": 3},
185 {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
186 {"matrix": [3, 14], "x": 15, "y": 3},
187
188 {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
189 {"matrix": [4, 2], "x": 2.25, "y": 4},
190 {"matrix": [4, 3], "x": 3.25, "y": 4},
191 {"matrix": [4, 4], "x": 4.25, "y": 4},
192 {"matrix": [4, 5], "x": 5.25, "y": 4},
193 {"matrix": [4, 6], "x": 6.25, "y": 4},
194 {"matrix": [4, 7], "x": 7.25, "y": 4},
195 {"matrix": [4, 8], "x": 8.25, "y": 4},
196 {"matrix": [4, 9], "x": 9.25, "y": 4},
197 {"matrix": [4, 10], "x": 10.25, "y": 4},
198 {"matrix": [4, 11], "x": 11.25, "y": 4},
199 {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
200 {"matrix": [4, 13], "x": 14, "y": 4},
201 {"matrix": [4, 14], "x": 15, "y": 4},
202
203 {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
204 {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
205 {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
206 {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
207 {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
208 {"matrix": [5, 11], "x": 11.5, "y": 5, "w": 1.5},
209 {"matrix": [5, 12], "x": 13, "y": 5},
210 {"matrix": [5, 13], "x": 14, "y": 5},
211 {"matrix": [5, 14], "x": 15, "y": 5}
212 ]
213 },
214 "LAYOUT_75_iso_rwkl": {
25 "layout": [ 215 "layout": [
26 {"label": "K00", "matrix": [0, 0], "x": 0, "y": 0}, 216 {"matrix": [0, 0], "x": 0, "y": 0},
27 {"label": "K01", "matrix": [0, 1], "x": 1, "y": 0}, 217 {"matrix": [0, 1], "x": 1, "y": 0},
28 {"label": "K02", "matrix": [0, 2], "x": 2, "y": 0}, 218 {"matrix": [0, 2], "x": 2, "y": 0},
29 {"label": "K03", "matrix": [0, 3], "x": 3, "y": 0}, 219 {"matrix": [0, 3], "x": 3, "y": 0},
30 {"label": "K04", "matrix": [0, 4], "x": 4, "y": 0}, 220 {"matrix": [0, 4], "x": 4, "y": 0},
31 {"label": "K05", "matrix": [0, 5], "x": 5, "y": 0}, 221 {"matrix": [0, 5], "x": 5, "y": 0},
32 {"label": "K06", "matrix": [0, 6], "x": 6, "y": 0}, 222 {"matrix": [0, 6], "x": 6, "y": 0},
33 {"label": "K07", "matrix": [0, 7], "x": 7, "y": 0}, 223 {"matrix": [0, 7], "x": 7, "y": 0},
34 {"label": "K08", "matrix": [0, 8], "x": 8, "y": 0}, 224 {"matrix": [0, 8], "x": 8, "y": 0},
35 {"label": "K09", "matrix": [0, 9], "x": 9, "y": 0}, 225 {"matrix": [0, 9], "x": 9, "y": 0},
36 {"label": "K0A", "matrix": [0, 10], "x": 10, "y": 0}, 226 {"matrix": [0, 10], "x": 10, "y": 0},
37 {"label": "K0B", "matrix": [0, 11], "x": 11, "y": 0}, 227 {"matrix": [0, 11], "x": 11, "y": 0},
38 {"label": "K0C", "matrix": [0, 12], "x": 12, "y": 0}, 228 {"matrix": [0, 12], "x": 12, "y": 0},
39 {"label": "K0D", "matrix": [0, 13], "x": 13, "y": 0}, 229 {"matrix": [0, 13], "x": 13, "y": 0},
40 {"label": "K0E", "matrix": [0, 14], "x": 14, "y": 0}, 230 {"matrix": [5, 8], "x": 14, "y": 0},
41 {"label": "K10", "matrix": [1, 0], "x": 15, "y": 0}, 231 {"matrix": [0, 14], "x": 15, "y": 0},
42 232
43 {"label": "K11", "matrix": [1, 1], "x": 0, "y": 1}, 233 {"matrix": [1, 0], "x": 0, "y": 1},
44 {"label": "K12", "matrix": [1, 2], "x": 1, "y": 1}, 234 {"matrix": [1, 1], "x": 1, "y": 1},
45 {"label": "K13", "matrix": [1, 3], "x": 2, "y": 1}, 235 {"matrix": [1, 2], "x": 2, "y": 1},
46 {"label": "K14", "matrix": [1, 4], "x": 3, "y": 1}, 236 {"matrix": [1, 3], "x": 3, "y": 1},
47 {"label": "K15", "matrix": [1, 5], "x": 4, "y": 1}, 237 {"matrix": [1, 4], "x": 4, "y": 1},
48 {"label": "K16", "matrix": [1, 6], "x": 5, "y": 1}, 238 {"matrix": [1, 5], "x": 5, "y": 1},
49 {"label": "K17", "matrix": [1, 7], "x": 6, "y": 1}, 239 {"matrix": [1, 6], "x": 6, "y": 1},
50 {"label": "K18", "matrix": [1, 8], "x": 7, "y": 1}, 240 {"matrix": [1, 7], "x": 7, "y": 1},
51 {"label": "K19", "matrix": [1, 9], "x": 8, "y": 1}, 241 {"matrix": [1, 8], "x": 8, "y": 1},
52 {"label": "K1A", "matrix": [1, 10], "x": 9, "y": 1}, 242 {"matrix": [1, 9], "x": 9, "y": 1},
53 {"label": "K1B", "matrix": [1, 11], "x": 10, "y": 1}, 243 {"matrix": [1, 10], "x": 10, "y": 1},
54 {"label": "K1C", "matrix": [1, 12], "x": 11, "y": 1}, 244 {"matrix": [1, 11], "x": 11, "y": 1},
55 {"label": "K1D", "matrix": [1, 13], "x": 12, "y": 1}, 245 {"matrix": [1, 12], "x": 12, "y": 1},
56 {"label": "K1E", "matrix": [1, 14], "x": 13, "y": 1, "w": 2}, 246 {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
57 {"label": "K20", "matrix": [2, 0], "x": 15, "y": 1}, 247 {"matrix": [1, 14], "x": 15, "y": 1},
58 248
59 {"label": "K21", "matrix": [2, 1], "x": 0, "y": 2, "w": 1.5}, 249 {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
60 {"label": "K22", "matrix": [2, 2], "x": 1.5, "y": 2}, 250 {"matrix": [2, 1], "x": 1.5, "y": 2},
61 {"label": "K23", "matrix": [2, 3], "x": 2.5, "y": 2}, 251 {"matrix": [2, 2], "x": 2.5, "y": 2},
62 {"label": "K24", "matrix": [2, 4], "x": 3.5, "y": 2}, 252 {"matrix": [2, 3], "x": 3.5, "y": 2},
63 {"label": "K25", "matrix": [2, 5], "x": 4.5, "y": 2}, 253 {"matrix": [2, 4], "x": 4.5, "y": 2},
64 {"label": "K26", "matrix": [2, 6], "x": 5.5, "y": 2}, 254 {"matrix": [2, 5], "x": 5.5, "y": 2},
65 {"label": "K27", "matrix": [2, 7], "x": 6.5, "y": 2}, 255 {"matrix": [2, 6], "x": 6.5, "y": 2},
66 {"label": "K28", "matrix": [2, 8], "x": 7.5, "y": 2}, 256 {"matrix": [2, 7], "x": 7.5, "y": 2},
67 {"label": "K29", "matrix": [2, 9], "x": 8.5, "y": 2}, 257 {"matrix": [2, 8], "x": 8.5, "y": 2},
68 {"label": "K2A", "matrix": [2, 10], "x": 9.5, "y": 2}, 258 {"matrix": [2, 9], "x": 9.5, "y": 2},
69 {"label": "K2B", "matrix": [2, 11], "x": 10.5, "y": 2}, 259 {"matrix": [2, 10], "x": 10.5, "y": 2},
70 {"label": "K2C", "matrix": [2, 12], "x": 11.5, "y": 2}, 260 {"matrix": [2, 11], "x": 11.5, "y": 2},
71 {"label": "K2D", "matrix": [2, 13], "x": 12.5, "y": 2}, 261 {"matrix": [2, 12], "x": 12.5, "y": 2},
72 {"label": "K2E", "matrix": [2, 14], "x": 13.5, "y": 2, "w": 1.5}, 262 {"matrix": [2, 14], "x": 15, "y": 2},
73 {"label": "K30", "matrix": [3, 0], "x": 15, "y": 2},
74 263
75 {"label": "K31", "matrix": [3, 1], "x": 0, "y": 3, "w": 1.75}, 264 {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
76 {"label": "K32", "matrix": [3, 2], "x": 1.75, "y": 3}, 265 {"matrix": [3, 1], "x": 1.75, "y": 3},
77 {"label": "K33", "matrix": [3, 3], "x": 2.75, "y": 3}, 266 {"matrix": [3, 2], "x": 2.75, "y": 3},
78 {"label": "K34", "matrix": [3, 4], "x": 3.75, "y": 3}, 267 {"matrix": [3, 3], "x": 3.75, "y": 3},
79 {"label": "K35", "matrix": [3, 5], "x": 4.75, "y": 3}, 268 {"matrix": [3, 4], "x": 4.75, "y": 3},
80 {"label": "K36", "matrix": [3, 6], "x": 5.75, "y": 3}, 269 {"matrix": [3, 5], "x": 5.75, "y": 3},
81 {"label": "K37", "matrix": [3, 7], "x": 6.75, "y": 3}, 270 {"matrix": [3, 6], "x": 6.75, "y": 3},
82 {"label": "K38", "matrix": [3, 8], "x": 7.75, "y": 3}, 271 {"matrix": [3, 7], "x": 7.75, "y": 3},
83 {"label": "K39", "matrix": [3, 9], "x": 8.75, "y": 3}, 272 {"matrix": [3, 8], "x": 8.75, "y": 3},
84 {"label": "K3A", "matrix": [3, 10], "x": 9.75, "y": 3}, 273 {"matrix": [3, 9], "x": 9.75, "y": 3},
85 {"label": "K3B", "matrix": [3, 11], "x": 10.75, "y": 3}, 274 {"matrix": [3, 10], "x": 10.75, "y": 3},
86 {"label": "K3C", "matrix": [3, 12], "x": 11.75, "y": 3}, 275 {"matrix": [3, 11], "x": 11.75, "y": 3},
87 {"label": "K3D", "matrix": [3, 13], "x": 12.75, "y": 3}, 276 {"matrix": [3, 12], "x": 12.75, "y": 3},
88 {"label": "K3E", "matrix": [3, 14], "x": 13.75, "y": 3, "w": 1.25}, 277 {"matrix": [3, 13], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
89 {"label": "K40", "matrix": [4, 0], "x": 15, "y": 3}, 278 {"matrix": [3, 14], "x": 15, "y": 3},
90 279
91 {"label": "K41", "matrix": [4, 1], "x": 0, "y": 4, "w": 2.25}, 280 {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
92 {"label": "K42", "matrix": [4, 2], "x": 2.25, "y": 4}, 281 {"matrix": [4, 1], "x": 1.25, "y": 4},
93 {"label": "K43", "matrix": [4, 3], "x": 3.25, "y": 4}, 282 {"matrix": [4, 2], "x": 2.25, "y": 4},
94 {"label": "K44", "matrix": [4, 4], "x": 4.25, "y": 4}, 283 {"matrix": [4, 3], "x": 3.25, "y": 4},
95 {"label": "K45", "matrix": [4, 5], "x": 5.25, "y": 4}, 284 {"matrix": [4, 4], "x": 4.25, "y": 4},
96 {"label": "K46", "matrix": [4, 6], "x": 6.25, "y": 4}, 285 {"matrix": [4, 5], "x": 5.25, "y": 4},
97 {"label": "K47", "matrix": [4, 7], "x": 7.25, "y": 4}, 286 {"matrix": [4, 6], "x": 6.25, "y": 4},
98 {"label": "K48", "matrix": [4, 8], "x": 8.25, "y": 4}, 287 {"matrix": [4, 7], "x": 7.25, "y": 4},
99 {"label": "K49", "matrix": [4, 9], "x": 9.25, "y": 4}, 288 {"matrix": [4, 8], "x": 8.25, "y": 4},
100 {"label": "K4A", "matrix": [4, 10], "x": 10.25, "y": 4}, 289 {"matrix": [4, 9], "x": 9.25, "y": 4},
101 {"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4}, 290 {"matrix": [4, 10], "x": 10.25, "y": 4},
102 {"label": "K4C", "matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75}, 291 {"matrix": [4, 11], "x": 11.25, "y": 4},
103 {"label": "K4D", "matrix": [4, 13], "x": 14, "y": 4}, 292 {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
104 {"label": "K4E", "matrix": [4, 14], "x": 15, "y": 4}, 293 {"matrix": [4, 13], "x": 14, "y": 4},
294 {"matrix": [4, 14], "x": 15, "y": 4},
105 295
106 {"label": "K50", "matrix": [5, 0], "x": 0, "y": 5, "w": 1.25}, 296 {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
107 {"label": "K51", "matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25}, 297 {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
108 {"label": "K52", "matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25}, 298 {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
109 {"label": "K55", "matrix": [5, 5], "x": 3.75, "y": 5, "w": 5.25}, 299 {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25},
110 {"label": "K58", "matrix": [5, 8], "x": 9, "y": 5}, 300 {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
111 {"label": "K59", "matrix": [5, 9], "x": 10, "y": 5}, 301 {"matrix": [5, 11], "x": 11.5, "y": 5, "w": 1.5},
112 {"label": "K5A", "matrix": [5, 10], "x": 11, "y": 5}, 302 {"matrix": [5, 12], "x": 13, "y": 5},
113 {"label": "K5B", "matrix": [5, 11], "x": 12, "y": 5}, 303 {"matrix": [5, 13], "x": 14, "y": 5},
114 {"label": "K5C", "matrix": [5, 12], "x": 13, "y": 5}, 304 {"matrix": [5, 14], "x": 15, "y": 5}
115 {"label": "K5D", "matrix": [5, 13], "x": 14, "y": 5},
116 {"label": "K5E", "matrix": [5, 14], "x": 15, "y": 5}
117 ] 305 ]
118 } 306 }
119 } 307 }
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
index bf5a8deb05..c6a4747a83 100644
--- a/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
+++ b/keyboards/amjkeyboard/amj84/keymaps/default/keymap.c
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22 * |Ctrl|Win |Alt | Space |END|Alt |Ctrl|Left |Down|Rig| 22 * |Ctrl|Win |Alt | Space |END|Alt |Ctrl|Left |Down|Rig|
23 * `----------------------------------------------------------------' 23 * `----------------------------------------------------------------'
24 */ 24 */
25 [0] = LAYOUT( 25 [0] = LAYOUT_all(
26 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME,KC_DEL, 26 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME,KC_DEL,
27 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC,KC_PGUP, 27 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC,KC_PGUP,
28 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,KC_PGDN, 28 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,KC_PGDN,
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42 * | | | | | | | | | 42 * | | | | | | | | |
43 * `-----------------------------------------------------------' 43 * `-----------------------------------------------------------'
44 */ 44 */
45 [1] = LAYOUT( 45 [1] = LAYOUT_all(
46 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, 46 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
47 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, 47 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
48 KC_TRNS,KC_TRNS,KC_UP, KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_INS, KC_TRNS,KC_PSCR,KC_SCRL,KC_PAUS,KC_TRNS,KC_TRNS, 48 KC_TRNS,KC_TRNS,KC_UP, KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_INS, KC_TRNS,KC_PSCR,KC_SCRL,KC_PAUS,KC_TRNS,KC_TRNS,
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c
new file mode 100644
index 0000000000..973679d6f5
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/keymaps/default_ansi_rwkl/keymap.c
@@ -0,0 +1,57 @@
1// Copyright 2022 peepeetee (@peepeetee)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7
8 /* Base */
9 /* Keymap 0: Default Layer
10 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
11 * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Hm │End│Del│
12 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
13 * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bkspc │PgU│
14 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
15 * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgD│
16 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
17 * │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │Enter │Ins│
18 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
19 * │Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Up │Fn │
20 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
21 * │Ctrl│GUI │Alt │Space │Alt │Ctrl │Lft│Dwn│Rig│
22 * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
23 */
24 [0] = LAYOUT_75_ansi_rwkl(
25 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_DEL,
26 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
27 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN,
28 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_INS,
29 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
30 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
31 ),
32
33 /* Keymap 1: Fn Layer
34 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
35 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
36 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
37 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
38 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
39 * │ │ │Up │ │ │ │Cal│ │Ins│ │PSc│SLk│Pau│ │ │
40 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
41 * │BL Brt│Lft│Dwn│Rgt│ │ │ │ │ │ │Hm │PUp│ │ │
42 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
43 * │BL Step │ │App│ │ │ │Vl-│Vl+│Mut│End│PDn│ │ │ │
44 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
45 * │Slp │ │ │ │ │ │ │ │ │
46 * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
47 */
48 [1] = LAYOUT_75_ansi_rwkl(
49 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______,
52 BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______,
53 BL_STEP, _______, KC_APP, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, _______, _______, _______,
54 KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______
55 )
56
57};
diff --git a/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c b/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c
new file mode 100644
index 0000000000..d64dfffea0
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/keymaps/default_iso_rwkl/keymap.c
@@ -0,0 +1,57 @@
1// Copyright 2022 peepeetee (@peepeetee)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7
8 /* Base */
9 /* Keymap 0: Default Layer
10 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
11 * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Hm │End│Del│
12 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
13 * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bkspc │PgU│
14 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
15 * │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │PgD│
16 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent ├───┤
17 * │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │Ins│
18 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
19 * │Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Up │Fn │
20 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
21 * │Ctrl│GUI │Alt │Space │Alt │Ctrl │Lft│Dwn│Rig│
22 * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
23 */
24 [0] = LAYOUT_75_iso_rwkl(
25 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_DEL,
26 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
27 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
28 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_INS,
29 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
30 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
31 ),
32
33 /* Keymap 1: Fn Layer
34 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
35 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
36 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
37 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
38 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
39 * │ │ │Up │ │ │ │Cal│ │Ins│ │PSc│SLk│Pau│ │ │
40 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
41 * │BL Brt│Lft│Dwn│Rgt│ │ │ │ │ │ │Hm │PUp│ │ │ │
42 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
43 * │BL Step │ │App│ │ │ │Vl-│Vl+│Mut│End│PDn│ │ │ │
44 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
45 * │Slp │ │ │ │ │ │ │ │ │
46 * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
47 */
48 [1] = LAYOUT_75_iso_rwkl(
49 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 _______, _______, KC_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______,
52 BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______, _______,
53 BL_STEP, _______, _______, KC_APP, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, _______, _______, _______,
54 KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______
55 )
56
57};
diff --git a/keyboards/amjkeyboard/amj84/matrix_diagram.md b/keyboards/amjkeyboard/amj84/matrix_diagram.md
new file mode 100644
index 0000000000..c09506c3a5
--- /dev/null
+++ b/keyboards/amjkeyboard/amj84/matrix_diagram.md
@@ -0,0 +1,24 @@
1# Matrix Diagram for AMJKeyboard AMJ84
2
3```
4┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
5│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │58 │0E │
6├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
7│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │
8├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ ┌─────┐
9│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2E │ │ │
10├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐3D │ ISO Enter
11│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │ │3C │ │
12├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
13│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4E │
14├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
15│50 │51 │52 │55 │59 │5A │5B │5C │5D │5E │
16└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
17┌────────┐ └─────┬─────┘
18│40 │ 2.25u LShift │
19└────────┘ ┌─────┴─────┐
20┌─────┬───┬─────┬───────────────────────┬─────┬─────┐
21│50 │51 │52 │55 │5A │5B │ RWKL
22└─────┴───┴─────┴───────────────────────┴─────┴─────┘
23 1.5u 1u 1.5u 6u
24```
diff --git a/keyboards/bpiphany/pegasushoof/2013/info.json b/keyboards/bpiphany/pegasushoof/2013/info.json
index 585d417688..abbeeb0f36 100644
--- a/keyboards/bpiphany/pegasushoof/2013/info.json
+++ b/keyboards/bpiphany/pegasushoof/2013/info.json
@@ -6,7 +6,7 @@
6 "scroll_lock": "C5", 6 "scroll_lock": "C5",
7 "on_state": 0 7 "on_state": 0
8 }, 8 },
9 "community_layouts": ["tkl_ansi"], 9 "community_layouts": ["tkl_ansi", "tkl_jis"],
10 "layouts": { 10 "layouts": {
11 "LAYOUT": { 11 "LAYOUT": {
12 "layout": [ 12 "layout": [
diff --git a/keyboards/bpiphany/pegasushoof/2015/info.json b/keyboards/bpiphany/pegasushoof/2015/info.json
index bed39668e8..a3b5f66784 100644
--- a/keyboards/bpiphany/pegasushoof/2015/info.json
+++ b/keyboards/bpiphany/pegasushoof/2015/info.json
@@ -6,7 +6,7 @@
6 "scroll_lock": "C5", 6 "scroll_lock": "C5",
7 "on_state": 0 7 "on_state": 0
8 }, 8 },
9 "community_layouts": ["tkl_ansi"], 9 "community_layouts": ["tkl_ansi", "tkl_jis"],
10 "layouts": { 10 "layouts": {
11 "LAYOUT": { 11 "LAYOUT": {
12 "layout": [ 12 "layout": [
diff --git a/keyboards/cipulot/rf_r1_8_9xu/info.json b/keyboards/cipulot/rf_r1_8_9xu/info.json
index badf092c87..eb0220f677 100644
--- a/keyboards/cipulot/rf_r1_8_9xu/info.json
+++ b/keyboards/cipulot/rf_r1_8_9xu/info.json
@@ -53,6 +53,7 @@
53 }, 53 },
54 "vid": "0x6369" 54 "vid": "0x6369"
55 }, 55 },
56 "community_layouts": ["tkl_jis", "tkl_iso_tsangan", "tkl_ansi_tsangan"],
56 "layouts": { 57 "layouts": {
57 "LAYOUT_all": { 58 "LAYOUT_all": {
58 "layout": [ 59 "layout": [
diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json
index 2f3e8913c5..63c02322a2 100644
--- a/keyboards/converter/usb_usb/info.json
+++ b/keyboards/converter/usb_usb/info.json
@@ -9,7 +9,7 @@
9 "device_version": "0.0.1" 9 "device_version": "0.0.1"
10 }, 10 },
11 "processor": "atmega32u4", 11 "processor": "atmega32u4",
12 "community_layouts": ["fullsize_ansi", "fullsize_iso"], 12 "community_layouts": ["fullsize_ansi", "fullsize_iso", "fullsize_jis"],
13 "layouts": { 13 "layouts": {
14 "LAYOUT_all": { 14 "LAYOUT_all": {
15 "layout": [ 15 "layout": [
diff --git a/keyboards/custommk/evo70_r2/config.h b/keyboards/custommk/evo70_r2/config.h
new file mode 100644
index 0000000000..25ab789d75
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/config.h
@@ -0,0 +1,90 @@
1/* Copyright 2023 David Hoelscher (@customMK)
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// No VBUS sense needed
20#define BOARD_OTG_NOVBUSSENS 1
21
22#define STM32_LSECLK 32768
23
24#define MATRIX_ROWS 5
25#define MATRIX_COLS 16
26#define MATRIX_ROW_PINS { A8, A1, A2, B1, A7 }
27
28// FRAM configuration
29#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A0
30#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 4 // 48MHz / 4 = 12MHz; max supported by MB85R64 is 20MHz
31
32// External flash configuration
33#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B12
34#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 1 // 48MHz; max supported by W25Q128JV is 133MHz
35#define EXTERNAL_FLASH_SIZE (16 * 1024 * 1024) //128Mbit or 16MByte
36#define EXTERNAL_FLASH_SPI_TIMEOUT 200000 //datasheet max is 200seconds for flash chip erase
37
38// SPI Configuration
39#define SPI_DRIVER SPID1
40#define SPI_SCK_PIN B3
41#define SPI_SCK_PAL_MODE 5
42#define SPI_MOSI_PIN B5
43#define SPI_MOSI_PAL_MODE 5
44#define SPI_MISO_PIN B4
45#define SPI_MISO_PAL_MODE 5
46
47
48// SPI LCD Configuration
49#define LCD_RST_PIN B2
50#define LCD_CS_PIN A9
51#define LCD_DC_PIN B0
52#ifndef LCD_ACTIVITY_TIMEOUT
53 #define LCD_ACTIVITY_TIMEOUT 30000
54#endif
55
56// I2C OLED Configuration
57#define I2C1_SCL_PIN B6
58#define I2C1_SDA_PIN B9
59
60#define I2C1_CLOCK_SPEED 400000
61#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
62
63#define OLED_DISABLE_TIMEOUT
64
65#define COL_SHIFT_IN_PIN B14
66#define COL_SHIFT_CLK_PIN B15
67
68#define QUANTUM_PAINTER_SUPPORTS_256_PALETTE TRUE
69#define QUANTUM_PAINTER_SUPPORTS_NATIVE_COLORS TRUE
70
71#define OLED_UPDATE_INTERVAL 66
72
73#define BACKLIGHT_PWM_DRIVER PWMD3
74#define BACKLIGHT_PWM_CHANNEL 1
75#define BACKLIGHT_PAL_MODE 2
76
77#define WS2812_PWM_DRIVER PWMD1
78#define WS2812_PWM_CHANNEL 3
79#define WS2812_PWM_PAL_MODE 1
80#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
81#define WS2812_DMA_CHANNEL 6
82
83#define TAP_CODE_DELAY 10
84
85#define AUDIO_PIN B8
86#define AUDIO_PWM_DRIVER PWMD4
87#define AUDIO_PWM_CHANNEL 3
88#define AUDIO_PWM_PAL_MODE 2
89#define AUDIO_STATE_TIMER GPTD5
90#define AUDIO_INIT_DELAY
diff --git a/keyboards/custommk/evo70_r2/halconf.h b/keyboards/custommk/evo70_r2/halconf.h
new file mode 100644
index 0000000000..5268fe5de6
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/halconf.h
@@ -0,0 +1,36 @@
1/* Copyright 2023 David Hoelscher (@customMK)
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#define HAL_USE_I2C TRUE
20
21#define HAL_USE_PWM TRUE
22
23#define HAL_USE_RTC TRUE
24
25#define HAL_USE_SPI TRUE
26
27#define HAL_USE_GPT TRUE
28
29#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
30
31#define SERIAL_BUFFERS_SIZE 256
32
33// This enables interrupt-driven mode
34#define SPI_USE_WAIT TRUE
35
36#include_next <halconf.h>
diff --git a/keyboards/custommk/evo70_r2/info.json b/keyboards/custommk/evo70_r2/info.json
new file mode 100644
index 0000000000..772325e7f8
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/info.json
@@ -0,0 +1,152 @@
1{
2 "keyboard_name": "EVO70 R2",
3 "url": "https://shop.custommk.com/collections/evo70/products/evo70",
4 "maintainer": "customMK",
5 "manufacturer": "customMK",
6 "tags": ["70%", "encoder", "underglow", "backlight"],
7 "features": {
8 "bootmagic": true,
9 "command": false,
10 "console": false,
11 "extrakey": true,
12 "mousekey": true,
13 "nkro": true,
14 "encoder": true,
15 "quantum_painter": true,
16 "oled": true,
17 "rgblight": true,
18 "backlight": true,
19 "audio": true
20 },
21 "usb": {
22 "vid": "0xF35B",
23 "pid": "0xFAB6",
24 "device_version": "1.0.0"
25 },
26 "diode_direction": "ROW2COL",
27 "processor": "STM32F411",
28 "bootloader": "stm32-dfu",
29 "rgblight": {
30 "led_count": 48,
31 "hue_steps": 4,
32 "saturation_steps": 8,
33 "brightness_steps": 4,
34 "max_brightness": 128,
35 "layers": {
36 "enabled": true
37 },
38 "animations": {
39 "alternating": true,
40 "breathing": true,
41 "christmas": true,
42 "knight": true,
43 "rainbo_mood": true,
44 "rainbow_swirl": true,
45 "rgb_test": true,
46 "snake": true,
47 "static_gradient": true,
48 "twinkle": true
49 }
50 },
51 "ws2812": {
52 "driver": "pwm",
53 "pin": "A10"
54 },
55 "backlight": {
56 "driver": "pwm",
57 "breathing": true,
58 "breathing_period": 6,
59 "levels": 17,
60 "pin": "A6"
61 },
62 "layouts": {
63 "LAYOUT": {
64 "layout": [
65 {"label":"Encoder", "matrix": [1, 0], "x":0.5, "y":0},
66 {"label":"Esc", "matrix": [0, 0], "x":2.5, "y":0},
67 {"label":"1", "matrix": [0, 2], "x":3.5, "y":0},
68 {"label":"2", "matrix": [0, 3], "x":4.5, "y":0},
69 {"label":"3", "matrix": [0, 4], "x":5.5, "y":0},
70 {"label":"4", "matrix": [0, 5], "x":6.5, "y":0},
71 {"label":"5", "matrix": [0, 6], "x":7.5, "y":0},
72 {"label":"6", "matrix": [0, 7], "x":8.5, "y":0},
73 {"label":"7", "matrix": [0, 8], "x":9.5, "y":0},
74 {"label":"8", "matrix": [0, 9], "x":10.5, "y":0},
75 {"label":"9", "matrix": [0, 10], "x":11.5, "y":0},
76 {"label":"0", "matrix": [0, 11], "x":12.5, "y":0},
77 {"label":"-", "matrix": [0, 12], "x":13.5, "y":0},
78 {"label":"=", "matrix": [0, 13], "x":14.5, "y":0},
79 {"label":"Backspace", "matrix": [0, 14], "x":15.5, "y":0, "w":2},
80 {"label":"Delete", "matrix": [0, 15], "x":17.5, "y":0},
81
82 {"label":"Tab", "matrix": [1, 1], "x":2.5, "y":1, "w":1.5},
83 {"label":"Q", "matrix": [1, 2], "x":4, "y":1},
84 {"label":"W", "matrix": [1, 3], "x":5, "y":1},
85 {"label":"E", "matrix": [1, 4], "x":6, "y":1},
86 {"label":"R", "matrix": [1, 5], "x":7, "y":1},
87 {"label":"T", "matrix": [1, 6], "x":8, "y":1},
88 {"label":"Y", "matrix": [1, 7], "x":9, "y":1},
89 {"label":"U", "matrix": [1, 8], "x":10, "y":1},
90 {"label":"I", "matrix": [1, 9], "x":11, "y":1},
91 {"label":"O", "matrix": [1, 10], "x":12, "y":1},
92 {"label":"P", "matrix": [1, 11], "x":13, "y":1},
93 {"label":"[", "matrix": [1, 12], "x":14, "y":1},
94 {"label":"]", "matrix": [1, 13], "x":15, "y":1},
95 {"label":"\\", "matrix": [1, 14], "x":16, "y":1, "w":1.5},
96 {"label":"PgUp", "matrix": [1, 15], "x":17.5, "y":1},
97
98 {"label":"F1", "matrix": [2, 2], "x":0, "y":2},
99 {"label":"F2", "matrix": [2, 0], "x":1, "y":2},
100 {"label":"Caps Lock", "matrix": [2, 1], "x":2.5, "y":2, "w":1.75},
101 {"label":"A", "matrix": [2, 3], "x":4.25, "y":2},
102 {"label":"S", "matrix": [2, 4], "x":5.25, "y":2},
103 {"label":"D", "matrix": [2, 5], "x":6.25, "y":2},
104 {"label":"F", "matrix": [2, 6], "x":7.25, "y":2},
105 {"label":"G", "matrix": [2, 7], "x":8.25, "y":2},
106 {"label":"H", "matrix": [2, 8], "x":9.25, "y":2},
107 {"label":"J", "matrix": [2, 9], "x":10.25, "y":2},
108 {"label":"K", "matrix": [2, 10], "x":11.25, "y":2},
109 {"label":"L", "matrix": [2, 11], "x":12.25, "y":2},
110 {"label":";", "matrix": [2, 12], "x":13.25, "y":2},
111 {"label":"'", "matrix": [2, 13], "x":14.25, "y":2},
112 {"label":"Enter", "matrix": [2, 14], "x":15.25, "y":2, "w":2.25},
113 {"label":"PgDn", "matrix": [2, 15], "x":17.5, "y":2},
114
115 {"label":"F3", "matrix": [3, 1], "x":0, "y":3},
116 {"label":"F4", "matrix": [3, 0], "x":1, "y":3},
117 {"label":"Shift", "matrix": [3, 2], "x":2.5, "y":3, "w":1.25},
118 {"label":"\u2298", "matrix": [0, 1], "x":3.75, "y":3, "w":1},
119 {"label":"Z", "matrix": [3, 3], "x":4.75, "y":3},
120 {"label":"X", "matrix": [3, 4], "x":5.75, "y":3},
121 {"label":"C", "matrix": [3, 5], "x":6.75, "y":3},
122 {"label":"V", "matrix": [3, 6], "x":7.75, "y":3},
123 {"label":"B", "matrix": [3, 7], "x":8.75, "y":3},
124 {"label":"N", "matrix": [3, 8], "x":9.75, "y":3},
125 {"label":"M", "matrix": [3, 9], "x":10.75, "y":3},
126 {"label":",", "matrix": [3, 10], "x":11.75, "y":3},
127 {"label":".", "matrix": [3, 11], "x":12.75, "y":3},
128 {"label":"/", "matrix": [3, 12], "x":13.75, "y":3},
129 {"label":"Shift", "matrix": [3, 13], "x":14.75, "y":3, "w":1.75},
130 {"label":"Up", "matrix": [3, 14], "x":16.5, "y":3},
131 {"label":"End", "matrix": [3, 15], "x":17.5, "y":3},
132
133 {"label":"F5", "matrix": [4, 3], "x":0, "y":4},
134 {"label":"F6", "matrix": [4, 0], "x":1, "y":4},
135 {"label":"Ctrl", "matrix": [4, 1], "x":2.5, "y":4, "w":1.25},
136 {"label":"GUI", "matrix": [4, 2], "x":3.75, "y":4, "w":1.25},
137 {"label":"Alt", "matrix": [4, 4], "x":5, "y":4, "w":1.25},
138 {"label":"Space", "matrix": [4, 7], "x":6.25, "y":4, "w":6.25},
139 {"label":"Alt", "matrix": [4, 10], "x":12.5, "y":4, "w":1.25},
140 {"label":"Ctrl", "matrix": [4, 11], "x":13.75, "y":4, "w":1.25},
141 {"label":"Left", "matrix": [4, 13], "x":15.5, "y":4},
142 {"label":"Down", "matrix": [4, 14], "x":16.5, "y":4},
143 {"label":"Right", "matrix": [4, 15], "x":17.5, "y":4}
144 ]
145 }
146 },
147 "encoder": {
148 "rotary": [
149 { "pin_a": "B7", "pin_b": "A4", "resolution": 2}
150 ]
151 }
152} \ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/default/keymap.c b/keyboards/custommk/evo70_r2/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9dc7beabdd
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
1/* Copyright 2023 David Hoelscher (@customMK)
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#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20
21 [0] = LAYOUT(
22 KC_ESC, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
23 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
24 KC_F1, KC_F2, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
25 KC_F3, KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
26 KC_F5, KC_F6, KC_LCTL, KC_LWIN, KC_LALT, KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
27};
28
29#if defined(ENCODER_MAP_ENABLE)
30const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
31 [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU),
32};
33#endif \ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/config.h b/keyboards/custommk/evo70_r2/keymaps/via/config.h
new file mode 100644
index 0000000000..52e3afa69f
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/config.h
@@ -0,0 +1,13 @@
1// Copyright 2023 David Hoelscher (@customMK)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6// With 8k FRAM, max out dynamic keymap layers and macros
7// 5x16 matrix (160 bytes) and one encoder (4 bytes) consume 164 bytes per layer
8// 32 layers consumes 5248 bytes
9#define DYNAMIC_KEYMAP_LAYER_COUNT 32
10
11// Most of the remaining space can be used for macros
12// QMK Macro keycode range allows up to 128 macros
13#define DYNAMIC_KEYMAP_MACRO_COUNT 128
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/keymap.c b/keyboards/custommk/evo70_r2/keymaps/via/keymap.c
new file mode 100644
index 0000000000..a971aa4e28
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/keymap.c
@@ -0,0 +1,33 @@
1/* Copyright 2023 David Hoelscher (@customMK)
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#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20
21 [0] = LAYOUT(
22 KC_ESC, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
23 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
24 KC_F1, KC_F2, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
25 KC_F3, KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
26 KC_F5, KC_F6, KC_LCTL, KC_LWIN, KC_LALT, KC_SPACE, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
27};
28
29#if defined(ENCODER_MAP_ENABLE)
30const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
31 [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }
32};
33#endif \ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/keymaps/via/rules.mk b/keyboards/custommk/evo70_r2/keymaps/via/rules.mk
new file mode 100644
index 0000000000..4253f570f0
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2ENCODER_MAP_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/custommk/evo70_r2/matrix.c b/keyboards/custommk/evo70_r2/matrix.c
new file mode 100644
index 0000000000..99a23a4542
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/matrix.c
@@ -0,0 +1,117 @@
1// Copyright 2023 David Hoelscher (@customMK)
2// SPDX-License-Identifier: GPL-2.0-or-later
3#include "quantum.h"
4
5// Pin definitions
6static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
7
8void matrix_wait_for_pin(pin_t pin, uint8_t target_state) {
9 rtcnt_t start = chSysGetRealtimeCounterX();
10 rtcnt_t end = start + 5000;
11 while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
12 if (readPin(pin) == target_state) {
13 break;
14 }
15 }
16}
17
18void matrix_wait_for_port(stm32_gpio_t *port, uint32_t target_bitmask) {
19 rtcnt_t start = chSysGetRealtimeCounterX();
20 rtcnt_t end = start + 5000;
21 while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
22 if ((palReadPort(port) & target_bitmask) == target_bitmask) {
23 break;
24 }
25 }
26}
27
28void shift_pulse_clock(void) {
29 writePinHigh(COL_SHIFT_CLK_PIN);
30 matrix_wait_for_pin(COL_SHIFT_CLK_PIN, 1);
31 writePinLow(COL_SHIFT_CLK_PIN);
32}
33
34void matrix_init_custom(void) {
35 //set all row pins as input with pullups
36 for (int i = 0; i < MATRIX_ROWS; ++i) {
37 writePinHigh(row_pins[i]);
38 setPinInputHigh(row_pins[i]);
39 }
40
41 //set all column pins high in ROW2COL matrix
42 setPinOutput(COL_SHIFT_IN_PIN);
43 setPinOutput(COL_SHIFT_CLK_PIN);
44 writePinHigh(COL_SHIFT_IN_PIN);
45 matrix_wait_for_pin(COL_SHIFT_IN_PIN, 1);
46
47 for (int i = 0; i < MATRIX_COLS; ++i) {
48 shift_pulse_clock();
49 }
50
51}
52
53bool matrix_scan_custom(matrix_row_t current_matrix[]) {
54 static matrix_row_t temp_matrix[MATRIX_ROWS] = {0};
55
56 writePinLow(COL_SHIFT_IN_PIN);
57 matrix_wait_for_pin(COL_SHIFT_IN_PIN, 0);
58
59 // Setup the output column pin
60 shift_pulse_clock();
61
62 writePinHigh(COL_SHIFT_IN_PIN);
63 for (int current_col = 0; current_col < MATRIX_COLS; ++current_col) {
64
65 // Read the column ports
66 uint32_t gpio_a = palReadPort(GPIOA);
67 uint32_t gpio_b = palReadPort(GPIOB);
68
69 // row 0, pin A8
70 int current_row = 0;
71 if ((gpio_a & (1 << 8)) >> 8) {
72 temp_matrix[current_row] &= ~(1ul << current_col);
73 } else {
74 temp_matrix[current_row] |= (1ul << current_col);
75 }
76 // row 1, pin A1
77 current_row = 1;
78 if ((gpio_a & (1 << 1)) >> 1) {
79 temp_matrix[current_row] &= ~(1ul << current_col);
80 } else {
81 temp_matrix[current_row] |= (1ul << current_col);
82 }
83 // row 2, pin A2
84 current_row = 2;
85 if ((gpio_a & (1 << 2)) >> 2) {
86 temp_matrix[current_row] &= ~(1ul << current_col);
87 } else {
88 temp_matrix[current_row] |= (1ul << current_col);
89 }
90 // row 3, pin B3
91 current_row = 3;
92 if ((gpio_b & (1 << 1)) >> 1) {
93 temp_matrix[current_row] &= ~(1ul << current_col);
94 } else {
95 temp_matrix[current_row] |= (1ul << current_col);
96 }
97 // row 4, pin A7
98 current_row = 4;
99 if ((gpio_a & (1 << 7)) >> 7) {
100 temp_matrix[current_row] &= ~(1ul << current_col);
101 } else {
102 temp_matrix[current_row] |= (1ul << current_col);
103 }
104
105 // Setup the output column pin
106 shift_pulse_clock();
107
108 }
109
110 // Check if matrix has changed, return the last-read data
111 bool changed = memcmp(current_matrix, temp_matrix, sizeof(temp_matrix)) != 0;
112 if (changed) {
113 memcpy(current_matrix, temp_matrix, sizeof(temp_matrix));
114 }
115 shift_pulse_clock();
116 return changed;
117}
diff --git a/keyboards/custommk/evo70_r2/mcuconf.h b/keyboards/custommk/evo70_r2/mcuconf.h
new file mode 100644
index 0000000000..afaa692ab8
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/mcuconf.h
@@ -0,0 +1,58 @@
1/* Copyright 2023 David Hoelscher (@customMK)
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_next <mcuconf.h>
20
21#undef STM32_LSE_ENABLED
22#define STM32_LSE_ENABLED TRUE
23
24#undef STM32_RTCSEL
25#define STM32_RTCSEL STM32_RTCSEL_LSE
26
27// Used for underglow
28#undef STM32_PWM_USE_TIM1 //timer 1 channel 3
29#define STM32_PWM_USE_TIM1 TRUE
30
31// Used for backlight
32//#undef STM32_PWM_USE_TIM2 //timer 2 channel ?
33//#define STM32_PWM_USE_TIM2 TRUE
34
35// Used for backlight
36#undef STM32_PWM_USE_TIM3 //timer 3 channel 1
37#define STM32_PWM_USE_TIM3 TRUE
38
39// Used for backlight
40//#undef STM32_GPT_USE_TIM3 //timer 3 channel 1
41//#define STM32_GPT_USE_TIM3 TRUE
42
43// Used for backlight
44#undef STM32_PWM_USE_TIM4 //timer 4 channel ?
45#define STM32_PWM_USE_TIM4 TRUE
46
47// Used for backlight
48#undef STM32_GPT_USE_TIM5 //timer 5 channel ?
49#define STM32_GPT_USE_TIM5 TRUE
50
51// Used for FRAM and flash in example code
52#undef STM32_SPI_USE_SPI1
53#define STM32_SPI_USE_SPI1 TRUE
54
55// Used for OLED
56#undef STM32_I2C_USE_I2C1
57#define STM32_I2C_USE_I2C1 TRUE
58
diff --git a/keyboards/custommk/evo70_r2/readme.md b/keyboards/custommk/evo70_r2/readme.md
new file mode 100644
index 0000000000..ac2f638cb2
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/readme.md
@@ -0,0 +1,21 @@
1# EVO70 R2
2
3EVO70 R2 is a 70% keyboard (65% w/left side function cluster) designed and produced by customMK.
4
5![EVO70 R2](https://i.imgur.com/B1QMuIxh.jpeg)
6
7* Keyboard Maintainer: [customMK](https://github.com/customMK)
8* Hardware Supported: EVO70 R2
9* Hardware Availability: [customMK](https://shop.custommk.com/collections/evo70/products/evo70)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make custommk/evo70_r2:default
14
15Flashing example for this keyboard:
16
17 make custommk/evo70_r2:default:flash
18
19To enter the bootloader, run the flashing command above, and then either plug in the USB connection while holding the top-left key, or alternatively, plug in the USB connection and then press the reset button on the PCB located under the space bar.
20
21See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/custommk/evo70_r2/rules.mk b/keyboards/custommk/evo70_r2/rules.mk
new file mode 100644
index 0000000000..b79d08c6b7
--- /dev/null
+++ b/keyboards/custommk/evo70_r2/rules.mk
@@ -0,0 +1,11 @@
1AUDIO_DRIVER = pwm_hardware
2
3# project specific files
4SRC += matrix.c
5
6EEPROM_DRIVER = spi
7
8QUANTUM_PAINTER_DRIVERS = st7735_spi
9
10CUSTOM_MATRIX = lite
11CIE1931_CURVE = yes \ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/info.json b/keyboards/handwired/scottokeebs/scottoalp/info.json
new file mode 100644
index 0000000000..d6262e11e6
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/info.json
@@ -0,0 +1,76 @@
1{
2 "manufacturer": "ScottoKeebs",
3 "keyboard_name": "ScottoAlp",
4 "maintainer": "joe-scotto",
5 "development_board": "promicro",
6 "diode_direction": "COL2ROW",
7 "features": {
8 "bootmagic": true,
9 "command": false,
10 "console": false,
11 "extrakey": true,
12 "mousekey": true,
13 "nkro": true
14 },
15 "matrix_pins": {
16 // 4, 5, 6, 7, 8, 9, A3, A2, A1, A0
17 "cols": ["D4", "C6", "D7", "E6", "B4", "B5", "F4", "F5", "F6", "F7"],
18
19 // 15, 14, 16, 10
20 "rows": ["B1", "B3", "B2", "B6"]
21 },
22 "url": "https://scottokeebs.com",
23 "usb": {
24 "device_version": "1.0.0",
25 "pid": "0x0007",
26 "vid": "0x534B"
27 },
28 "layouts": {
29 "LAYOUT_ortho_3x10_5": {
30 "layout": [
31 // Row 1
32 { "matrix": [0, 0], "x": 0, "y": 0 },
33 { "matrix": [0, 1], "x": 1, "y": 0 },
34 { "matrix": [0, 2], "x": 2, "y": 0 },
35 { "matrix": [0, 3], "x": 3, "y": 0 },
36 { "matrix": [0, 4], "x": 4, "y": 0 },
37 { "matrix": [0, 5], "x": 5, "y": 0 },
38 { "matrix": [0, 6], "x": 6, "y": 0 },
39 { "matrix": [0, 7], "x": 7, "y": 0 },
40 { "matrix": [0, 8], "x": 8, "y": 0 },
41 { "matrix": [0, 9], "x": 9, "y": 0 },
42
43 // Row 2
44 { "matrix": [1, 0], "x": 0, "y": 1 },
45 { "matrix": [1, 1], "x": 1, "y": 1 },
46 { "matrix": [1, 2], "x": 2, "y": 1 },
47 { "matrix": [1, 3], "x": 3, "y": 1 },
48 { "matrix": [1, 4], "x": 4, "y": 1 },
49 { "matrix": [1, 5], "x": 5, "y": 1 },
50 { "matrix": [1, 6], "x": 6, "y": 1 },
51 { "matrix": [1, 7], "x": 7, "y": 1 },
52 { "matrix": [1, 8], "x": 8, "y": 1 },
53 { "matrix": [1, 9], "x": 9, "y": 1 },
54
55 // Row 3
56 { "matrix": [2, 0], "x": 0, "y": 2 },
57 { "matrix": [2, 1], "x": 1, "y": 2 },
58 { "matrix": [2, 2], "x": 2, "y": 2 },
59 { "matrix": [2, 3], "x": 3, "y": 2 },
60 { "matrix": [2, 4], "x": 4, "y": 2 },
61 { "matrix": [2, 5], "x": 5, "y": 2 },
62 { "matrix": [2, 6], "x": 6, "y": 2 },
63 { "matrix": [2, 7], "x": 7, "y": 2 },
64 { "matrix": [2, 8], "x": 8, "y": 2 },
65 { "matrix": [2, 9], "x": 9, "y": 2 },
66
67 // Row 4
68 { "matrix": [3, 1], "x": 1, "y": 3 },
69 { "matrix": [3, 2], "x": 2, "y": 3 },
70 { "matrix": [3, 4], "x": 4, "y": 3 },
71 { "matrix": [3, 6], "x": 6, "y": 3 },
72 { "matrix": [3, 7], "x": 7, "y": 3 }
73 ]
74 }
75 }
76}
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h
new file mode 100644
index 0000000000..1a6512052c
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/config.h
@@ -0,0 +1,23 @@
1/*
2Copyright 2022 Joe Scotto
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20// Define options
21#define TAPPING_TERM 135
22#define PERMISSIVE_HOLD
23#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c
new file mode 100644
index 0000000000..88b4a4b0b4
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
1/*
2Copyright 2022 Joe Scotto
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include QMK_KEYBOARD_H
19
20const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
21 [0] = LAYOUT_ortho_3x10_5(
22 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
23 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
24 LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
25 KC_LGUI, KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
26 ),
27 [1] = LAYOUT_ortho_3x10_5(
28 KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
29 KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
30 LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
31 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
32 ),
33 [2] = LAYOUT_ortho_3x10_5(
34 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
35 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
36 KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
37 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
38 ),
39 [3] = LAYOUT_ortho_3x10_5(
40 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
41 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
42 KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
43 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
44 )
45}; \ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h
new file mode 100644
index 0000000000..1a6512052c
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/config.h
@@ -0,0 +1,23 @@
1/*
2Copyright 2022 Joe Scotto
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20// Define options
21#define TAPPING_TERM 135
22#define PERMISSIVE_HOLD
23#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c
new file mode 100644
index 0000000000..dfe688267e
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/keymap.c
@@ -0,0 +1,174 @@
1/*
2Copyright 2022 Joe Scotto
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include QMK_KEYBOARD_H
19
20// Tap dance declarations
21enum {
22 TD_LCTL_ESC_SPOTLIGHT_EMOJI,
23 TD_LALT_ESC_WINDOWS_EMOJI
24};
25
26uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
27 switch (keycode) {
28 case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
29 case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
30 case LGUI_T(KC_SPC) :
31 case LT(1, KC_TAB) :
32 case LT(2, KC_ENT) :
33 return 200;
34 default:
35 return TAPPING_TERM;
36 }
37};
38
39// Begin quad TD
40typedef enum {
41 TD_NONE,
42 TD_UNKNOWN,
43 TD_SINGLE_HOLD,
44 TD_SINGLE_TAP,
45 TD_DOUBLE_TAP,
46 TD_TRIPLE_TAP
47} td_state_t;
48
49typedef struct {
50 bool is_press_action;
51 td_state_t state;
52} td_tap_t;
53
54// Create an instance of 'td_tap_t' for the 'x' tap dance.
55static td_tap_t xtap_state = {
56 .is_press_action = true,
57 .state = TD_NONE
58};
59
60td_state_t cur_dance(tap_dance_state_t *state) {
61 if (state->count == 1) {
62 if (state->interrupted || !state->pressed) {
63 return TD_SINGLE_TAP;
64 } else {
65 return TD_SINGLE_HOLD;
66 }
67 } else if (state->count == 2) {
68 return TD_DOUBLE_TAP;
69 } else if (state->count == 3) {
70 return TD_TRIPLE_TAP;
71 }
72
73 return TD_UNKNOWN;
74}
75
76void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
77 xtap_state.state = cur_dance(state);
78 switch (xtap_state.state) {
79 case TD_SINGLE_TAP: register_code(KC_ESC); break;
80 case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
81 case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
82 case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
83 default: break;
84 }
85}
86
87void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
88 switch (xtap_state.state) {
89 case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
90 case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
91 default: break;
92 }
93 xtap_state.state = TD_NONE;
94}
95
96void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
97 xtap_state.state = cur_dance(state);
98 switch (xtap_state.state) {
99 case TD_SINGLE_TAP: register_code(KC_ESC); break;
100 case TD_SINGLE_HOLD: register_code(KC_LALT); break;
101 case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
102 case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
103 default: break;
104 }
105}
106
107void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
108 switch (xtap_state.state) {
109 case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
110 case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
111 default: break;
112 }
113 xtap_state.state = TD_NONE;
114}
115
116 // Tap Dance definitions
117tap_dance_action_t tap_dance_actions[] = {
118 [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
119 [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
120};
121// For the x tap dance. Put it here so it can be used in any keymap
122void x_finished(tap_dance_state_t *state, void *user_data);
123void x_reset(tap_dance_state_t *state, void *user_data);
124
125const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
126 [0] = LAYOUT_ortho_3x10_5(
127 KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
128 KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
129 LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
130 TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
131 ),
132 [1] = LAYOUT_ortho_3x10_5(
133 KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
134 KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
135 LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
136 TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
137 ),
138 [2] = LAYOUT_ortho_3x10_5(
139 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
140 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
141 KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
142 TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
143 ),
144 [3] = LAYOUT_ortho_3x10_5(
145 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4),
146 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
147 KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
148 TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), KC_TRNS, KC_TRNS
149 ),
150 [4] = LAYOUT_ortho_3x10_5(
151 KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC,
152 KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,
153 LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
154 TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
155 ),
156 [5] = LAYOUT_ortho_3x10_5(
157 KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
158 KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
159 LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
160 TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
161 ),
162 [6] = LAYOUT_ortho_3x10_5(
163 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
164 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
165 KC_LSFT, KC_NO, KC_NO, KC_NO, MO(7), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
166 TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
167 ),
168 [7] = LAYOUT_ortho_3x10_5(
169 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(0),
170 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
171 KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
172 TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(5, KC_TAB), LT(6, KC_ENT)
173 )
174}; \ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/keymaps/scotto/rules.mk
@@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/scottokeebs/scottoalp/readme.md b/keyboards/handwired/scottokeebs/scottoalp/readme.md
new file mode 100644
index 0000000000..07c7d889de
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/readme.md
@@ -0,0 +1,27 @@
1# ScottoAlp
2
3![ScottoAlp](https://i.imgur.com/XKpYcMgh.jpeg)
4
5A 35-key ortholinear keyboard with a 3u spacebar and is compatible with both MX or Alps. Case files available [here](https://github.com/joe-scotto/scottokeebs).
6
7* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
8* Hardware Supported: ATmega32U4
9* Hardware Availability: [Amazon](https://amazon.com)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make handwired/jscotto/scottoalp:default
14
15Flashing example for this keyboard:
16
17 make handwired/jscotto/scottoalp:default:flash
18
19See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
20
21## Bootloader
22
23Enter the bootloader in 3 ways:
24
25* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
26* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
27* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file
diff --git a/keyboards/handwired/scottokeebs/scottoalp/rules.mk b/keyboards/handwired/scottokeebs/scottoalp/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/handwired/scottokeebs/scottoalp/rules.mk
@@ -0,0 +1 @@
# This file intentionally left blank
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c
new file mode 100644
index 0000000000..e217adcf09
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.c
@@ -0,0 +1,72 @@
1// Copyright 2021-2023 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15/**
16 * @file custom_shift_keys.c
17 * @brief Custom Shift Keys implementation
18 *
19 * For full documentation, see
20 * <https://getreuer.info/posts/keyboards/custom-shift-keys>
21 */
22
23#include "custom_shift_keys.h"
24
25bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record) {
26 static uint16_t registered_keycode = KC_NO;
27
28 // If a custom shift key is registered, then this event is either releasing
29 // it or manipulating another key at the same time. Either way, we release
30 // the currently registered key.
31 if (registered_keycode != KC_NO) {
32 unregister_code16(registered_keycode);
33 registered_keycode = KC_NO;
34 }
35
36 if (record->event.pressed) { // Press event.
37 const uint8_t mods = get_mods();
38#ifndef NO_ACTION_ONESHOT
39 if ((mods | get_weak_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) {
40#else
41 if ((mods | get_weak_mods()) & MOD_MASK_SHIFT) { // Shift is held.
42#endif // NO_ACTION_ONESHOT
43 // Continue default handling if this is a tap-hold key being held.
44 if ((IS_QK_MOD_TAP(keycode) || IS_QK_LAYER_TAP(keycode)) && record->tap.count == 0) {
45 return true;
46 }
47
48 // Search for a custom shift key whose keycode is `keycode`.
49 for (int i = 0; i < NUM_CUSTOM_SHIFT_KEYS; ++i) {
50 if (keycode == custom_shift_keys[i].keycode) {
51 registered_keycode = custom_shift_keys[i].shifted_keycode;
52 if (IS_QK_MODS(registered_keycode) && // Should keycode be shifted?
53 (QK_MODS_GET_MODS(registered_keycode) & MOD_LSFT) != 0) {
54 register_code16(registered_keycode); // If so, press it directly.
55 } else {
56 // Otherwise cancel shift mods, press the key, and restore mods.
57 del_weak_mods(MOD_MASK_SHIFT);
58#ifndef NO_ACTION_ONESHOT
59 del_oneshot_mods(MOD_MASK_SHIFT);
60#endif // NO_ACTION_ONESHOT
61 unregister_mods(MOD_MASK_SHIFT);
62 register_code16(registered_keycode);
63 set_mods(mods);
64 }
65 return false;
66 }
67 }
68 }
69 }
70
71 return true; // Continue with default handling.
72} \ No newline at end of file
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h
new file mode 100644
index 0000000000..7d1ee13a45
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/features/custom_shift_keys.h
@@ -0,0 +1,99 @@
1// Copyright 2021-2022 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15/**
16 * @file custom_shift_keys.h
17 * @brief Custom shift keys: customize what keycode is produced when shifted.
18 *
19 * Overview
20 * --------
21 *
22 * This library implements custom shift keys, keys where you can customize
23 * what keycode is produced when shifted.
24 *
25 * Step 1: In your keymap.c, define a table of custom shift keys like
26 *
27 * #include "features/custom_shift_keys.h"
28 *
29 * const custom_shift_key_t custom_shift_keys[] = {
30 * {KC_DOT , KC_QUES}, // Shift . is ?
31 * {KC_COMM, KC_EXLM}, // Shift , is !
32 * {KC_MINS, KC_EQL }, // Shift - is =
33 * {KC_COLN, KC_SCLN}, // Shift : is ;
34 * };
35 *
36 * Each row defines one key. The first field is the keycode as it appears in
37 * your layout and determines what is typed normally. The second entry is what
38 * you want the key to type when shifted.
39 *
40 * Step 2: Handle custom shift keys from your `process_record_user` function as
41 *
42 * bool process_record_user(uint16_t keycode, keyrecord_t* record) {
43 * if (!process_custom_shift_keys(keycode, record)) { return false; }
44 * // Your macros ...
45 *
46 * return true;
47 * }
48 *
49 * Step 3: add `features/custom_shift_keys.c` to your rules.mk as
50 *
51 * SRC += features/custom_shift_keys.c
52 *
53 *
54 * For full documentation, see
55 * <https://getreuer.info/posts/keyboards/custom-shift-keys>
56 */
57
58#pragma once
59
60#include "quantum.h"
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66/**
67 * Custom shift key entry. The `keycode` field is the keycode as it appears in
68 * your layout and determines what is typed normally. The `shifted_keycode` is
69 * what you want the key to type when shifted.
70 */
71typedef struct {
72 uint16_t keycode;
73 uint16_t shifted_keycode;
74} custom_shift_key_t;
75
76/** Table of custom shift keys. */
77extern const custom_shift_key_t custom_shift_keys[];
78/** Number of entries in the `custom_shift_keys` table. */
79extern uint8_t NUM_CUSTOM_SHIFT_KEYS;
80
81/**
82 * Handler function for custom shift keys.
83 *
84 * In keymap.c, call this function from your `process_record_user` function as
85 *
86 * #include "features/custom_shift_keys.h"
87 *
88 * bool process_record_user(uint16_t keycode, keyrecord_t* record) {
89 * if (!process_custom_shift_keys(keycode, record)) { return false; }
90 * // Your macros ...
91 *
92 * return true;
93 * }
94 */
95bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record);
96
97#ifdef __cplusplus
98}
99#endif \ No newline at end of file
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
index 619231a6ab..cb6fff1a0f 100644
--- a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
@@ -14,6 +14,7 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16#include QMK_KEYBOARD_H 16#include QMK_KEYBOARD_H
17#include "features/custom_shift_keys.h"
17 18
18#define FN_ESC LT(_FUNC, KC_ESC) 19#define FN_ESC LT(_FUNC, KC_ESC)
19 20
@@ -29,6 +30,10 @@ enum gentleman_keycodes {
29 FUNC, 30 FUNC,
30}; 31};
31 32
33const custom_shift_key_t custom_shift_keys[] = {{KC_ESC, KC_TILD}};
34
35uint8_t NUM_CUSTOM_SHIFT_KEYS = sizeof(custom_shift_keys) / sizeof(custom_shift_key_t);
36
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33 [_QWERTY] = LAYOUT_65_ansi_rwkl_split_bs( 38 [_QWERTY] = LAYOUT_65_ansi_rwkl_split_bs(
34 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_TRNS, 39 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_TRNS,
@@ -78,6 +83,9 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
78} 83}
79 84
80bool process_record_user(uint16_t keycode, keyrecord_t *record) { 85bool process_record_user(uint16_t keycode, keyrecord_t *record) {
86 if (!process_custom_shift_keys(keycode, record)) {
87 return false;
88 }
81 switch (keycode) { 89 switch (keycode) {
82 case QWERTY: 90 case QWERTY:
83 if (record->event.pressed) { 91 if (record->event.pressed) {
@@ -90,7 +98,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
90 } 98 }
91 return false; 99 return false;
92 } 100 }
93 101
94 return true; 102 return true;
95} 103}
96
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
index b7c0fb5c5d..feebedc544 100644
--- a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
@@ -10,5 +10,5 @@
10## Building and flashing 10## Building and flashing
11 11
12``` 12```
13make gentleman65:briianpowell:flash 13make jkeys_design/gentleman65:briianpowell:flash
14``` 14```
diff --git a/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk
new file mode 100644
index 0000000000..ac89d13902
--- /dev/null
+++ b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/rules.mk
@@ -0,0 +1 @@
SRC += features/custom_shift_keys.c
diff --git a/keyboards/jkeys_design/gentleman65/rules.mk b/keyboards/jkeys_design/gentleman65/rules.mk
index f81996d702..bb89340fbf 100644
--- a/keyboards/jkeys_design/gentleman65/rules.mk
+++ b/keyboards/jkeys_design/gentleman65/rules.mk
@@ -11,4 +11,4 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
11RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow 11RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
12AUDIO_ENABLE = no # Audio output 12AUDIO_ENABLE = no # Audio output
13RGB_MATRIX_ENABLE = no 13RGB_MATRIX_ENABLE = no
14ENCODER_ENABLE = yes \ No newline at end of file 14ENCODER_ENABLE = yes
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h b/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h
new file mode 100644
index 0000000000..155b1fbc54
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/autocorrect_data.h
@@ -0,0 +1,44 @@
1// Copyright 2023 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4/*******************************************************************************
5 88888888888 888 d8b .d888 d8b 888 d8b
6 888 888 Y8P d88P" Y8P 888 Y8P
7 888 888 888 888
8 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
9 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
10 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
11 888 888 888 888 X88 888 888 888 Y8b. 888 X88
12 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
13 888 888
14 888 888
15 888 888
16 .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
17 d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
18 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
19 Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
20 "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
21 888
22 Y8b d88P
23 "Y88P"
24*******************************************************************************/
25
26#pragma once
27
28// Autocorrection dictionary (4 entries):
29// :alot -> a lot
30// accesories -> accessories
31// accomodate -> accommodate
32// alledge -> allege
33
34#define AUTOCORRECT_MIN_LENGTH 5 // ":alot"
35#define AUTOCORRECT_MAX_LENGTH 10 // "accesories"
36#define DICTIONARY_SIZE 73
37
38static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
39 0x48, 0x0A, 0x00, 0x16, 0x2C, 0x00, 0x17, 0x3E, 0x00, 0x00, 0x4A, 0x11, 0x00, 0x17, 0x1B, 0x00,
40 0x00, 0x07, 0x08, 0x0F, 0x0F, 0x04, 0x00, 0x82, 0x67, 0x65, 0x00, 0x04, 0x07, 0x12, 0x10, 0x12,
41 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65, 0x00, 0x08, 0x0C, 0x15, 0x12,
42 0x16, 0x08, 0x06, 0x06, 0x04, 0x00, 0x84, 0x73, 0x6F, 0x72, 0x69, 0x65, 0x73, 0x00, 0x12, 0x0F,
43 0x04, 0x2C, 0x00, 0x82, 0x20, 0x6C, 0x6F, 0x74, 0x00
44};
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/config.h b/keyboards/keyboardio/atreus/keymaps/slotthe/config.h
new file mode 100644
index 0000000000..26235c9d91
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/config.h
@@ -0,0 +1,19 @@
1/* © 2023 Tony Zorman <soliditsallgood@mailbox.org> (@slotThe)
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 3 of the License, or (at
6 * your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * 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#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
18#define TAPPING_TERM 175
19#define HOLD_ON_OTHER_KEY_PRESS
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c b/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c
new file mode 100644
index 0000000000..6188f14ab9
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/keymap.c
@@ -0,0 +1,328 @@
1/* © 2023 Tony Zorman <soliditsallgood@mailbox.org> (@slotThe)
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 3 of the License, or (at
6 * your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * 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#include QMK_KEYBOARD_H
17
18// NOTE: `M-x occur RET /// RET' gives a good overview.
19
20/// General macros
21
22#define LSPR_SC LGUI_T(KC_SCLN)
23#define LALT_BR LALT_T(KC_LBRC)
24#define LSFT_INS LSFT(KC_INS)
25#define OSMSFT OSM(MOD_LSFT)
26#define Z_SFT LSFT_T(KC_Z)
27#define ZE_SFT LSFT_T(KC_0)
28#define SL_SFT RSFT_T(KC_SLSH)
29#define RETSPR LGUI_T(KC_ENT)
30
31/// Tap dance declarations
32
33// So far, tap dances do different things on
34//
35// - a single press,
36// - a double press,
37// - when held,
38//
39// so expect this many keys as comments.
40enum tap_dances {
41 ALT_BR, // [ ] lalt (also works shifted, which gets us { and } for free)
42 CTL_PR, // ( ) lctl
43 SFT_CI, // ^ ^ lsft (working around LSFT_T not being able to output shifted keys)
44 SFT_EX, // ! ! lsft (ditto)
45};
46
47#define CTLPAR TD(CTL_PR)
48#define ALTBRC TD(ALT_BR)
49#define SFTCRC TD(SFT_CI)
50#define SFTEXL TD(SFT_EX)
51
52/// Macro declarations
53
54enum custom_keycodes {
55 // -> <- =<< >>= <*> <* *> <$> <&> <|> => ::
56 RARR = SAFE_RANGE, LARR, LBND, RBND, APP, RAPP, LAPP, FMAP, PAMF, AALT, IMPLS, DCOL,
57};
58
59/// Key overrides
60
61const key_override_t **key_overrides = (const key_override_t *[]){
62 &ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, KC_DEL), // S-BSP ≡ DEL
63 // Emacs got me used to these, so let's convince other programs that
64 // we are in fact sending the correct keys.
65 &ko_make_basic(MOD_MASK_CTRL, KC_I, KC_TAB), // C-i ≡ Tab
66 &ko_make_basic(MOD_MASK_CTRL, KC_M, KC_ENT), // C-m ≡ Return
67 NULL // Null terminate the array of overrides
68};
69
70/// Layers
71
72enum layer_names { _COLEMAK_DH, _LOWER, _RAISE, _ADJUST };
73
74#define LOWER MO(_LOWER)
75#define RAISE MO(_RAISE)
76#define ADJUST MO(_ADJUST)
77#define D_RAISE LT(_RAISE, KC_DOT)
78
79const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
80 /* Colemak base layer
81 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
82 | Q | W | F | P | B | | J | L | U | Y | ;+S |
83 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
84 | A | R | S | T | G | | M | N | E | I | O |
85 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
86 | S+Z | X | C | D | V | ARP | REP | K | H | , | . | S+/ |
87 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
88 | ESC | TAB | SPR | L1 | SPC | A[] | BSC | C() | L2 | - | ' | RET |
89 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
90 */
91 [_COLEMAK_DH] = LAYOUT(
92 KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, LSPR_SC,
93 KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
94 Z_SFT, KC_X, KC_C, KC_D, KC_V, QK_AREP, QK_REP, KC_K, KC_H, KC_COMM, D_RAISE, SL_SFT,
95 KC_ESC, KC_TAB, KC_LGUI, LOWER, KC_SPC, ALTBRC, KC_BSPC, CTLPAR, RAISE, KC_MINS, KC_QUOT, KC_ENT),
96
97 /* Layer 1 (LOWER)
98 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
99 | & | *> | >>= | <&> | | | = | + | * | - | RET+M |
100 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
101 | :: | => | =<< | <|> | @ | | LFT | UP | DWN | RGT | \ |
102 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
103 | !+S | <* | <*> | <$> | <- | | MEN | -> | $ | # | % | ^+S |
104 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
105 | | | | | | | | | L3 | ALT | | S-I |
106 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
107 */
108 [_LOWER] = LAYOUT(
109 KC_AMPR, RAPP, RBND, PAMF, _______, KC_EQL, KC_PLUS, KC_ASTR, KC_MINS, RETSPR,
110 DCOL, IMPLS, LBND, AALT, KC_AT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSLS,
111 SFTEXL, LAPP, APP, FMAP, LARR, _______, KC_APP, RARR, KC_DLR, KC_HASH, KC_PERC, SFTCRC,
112 _______, _______, _______, _______, _______, _______, _______, _______, ADJUST, KC_LALT, _______, LSFT_INS),
113
114 /* Layer 2 (RAISE)
115 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
116 | | 7 | 8 | 9 | | | | + | * | - | |
117 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
118 | : | 4 | 5 | 6 | = | | & | ` | _ | ' | " |
119 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
120 | 0+S | 1 | 2 | 3 | | | | | ! | # | % | ^+S |
121 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
122 | | | | L3 | | | | | | | | |
123 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
124 */
125 [_RAISE] = LAYOUT(
126 KC_DOT, KC_7, KC_8, KC_9, _______, _______, KC_PLUS, KC_ASTR, KC_MINS, _______,
127 KC_COLN, KC_4, KC_5, KC_6, KC_EQL, KC_AMPR, KC_GRV, KC_UNDS, KC_QUOT, KC_DQT,
128 ZE_SFT, KC_1, KC_2, KC_3, _______, _______, _______, _______, KC_EXLM, KC_HASH, KC_PERC, SFTCRC,
129 _______, _______, _______, ADJUST, _______, _______, _______, _______, _______, _______, _______, _______),
130
131 /* Layer 3 (ADJUST)
132 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
133 | | | | | | | | F7 | F8 | F9 | F10 |
134 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
135 | | | | | | | | F4 | F5 | F6 | F11 |
136 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
137 | | | | | | | | | F1 | F2 | F3 | F12 |
138 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
139 | | | | | | | | | | | | |
140 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
141 */
142 [_ADJUST] = LAYOUT(
143 _______, _______, _______, _______, AC_TOGG, _______, KC_F7, KC_F8, KC_F9, KC_F10,
144 _______, _______, _______, _______, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11,
145 _______, _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12,
146 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
147};
148
149/// Macro definitions
150
151bool process_record_user(uint16_t keycode, keyrecord_t *record) {
152 switch (keycode) {
153 case RARR:
154 if (record->event.pressed) SEND_STRING("->"); break;
155 case LARR:
156 if (record->event.pressed) SEND_STRING("<-"); break;
157 case LBND:
158 if (record->event.pressed) SEND_STRING("=<<"); break;
159 case RBND:
160 if (record->event.pressed) SEND_STRING(">>="); break;
161 case APP:
162 if (record->event.pressed) SEND_STRING("<*>"); break;
163 case RAPP:
164 if (record->event.pressed) SEND_STRING("*>"); break;
165 case LAPP:
166 if (record->event.pressed) SEND_STRING("<*"); break;
167 case FMAP:
168 if (record->event.pressed) SEND_STRING("<$>"); break;
169 case PAMF:
170 if (record->event.pressed) SEND_STRING("<&>"); break;
171 case AALT:
172 if (record->event.pressed) SEND_STRING("<|>"); break;
173 case IMPLS:
174 if (record->event.pressed) SEND_STRING("=>"); break;
175 case DCOL:
176 if (record->event.pressed) SEND_STRING("::"); break;
177 }
178 return true;
179};
180
181//// Tap dance definitions
182
183// Heavily inspired by:
184//
185// https://docs.qmk.fm/?ref=blog.splitkb.com#/feature_tap_dance?id=example-4
186
187typedef enum {
188 TD_NONE,
189 TD_UNKNOWN,
190 TD_SINGLE_TAP,
191 TD_SINGLE_HOLD,
192 TD_DOUBLE_TAP,
193} td_state_t;
194
195typedef struct {
196 bool is_press_action;
197 td_state_t state;
198} td_tap_t;
199
200// Return an integer that corresponds to what kind of tap dance should
201// be executed.
202//
203// Interrupted: If the state of a dance is "interrupted", that means
204// that another key has been hit under the tapping term.
205//
206// Pressed: Whether or not the key is still being pressed. If this value
207// is true, that means the tapping term has ended, but the key is still
208// being pressed down. This generally means the key is being "held".
209td_state_t cur_dance(tap_dance_state_t *state) {
210 if (state->count == 1) {
211 if (state->pressed) return TD_SINGLE_HOLD;
212 else return TD_SINGLE_TAP;
213 } else if (state->count == 2) return TD_DOUBLE_TAP;
214 else return TD_UNKNOWN;
215}
216
217//// ALT_BR
218
219static td_tap_t alt_br_state = {
220 .is_press_action = true,
221 .state = TD_NONE
222};
223
224void lalt_br_finished(tap_dance_state_t *state, void *user_data) {
225 alt_br_state.state = cur_dance(state);
226 switch (alt_br_state.state) {
227 case TD_SINGLE_TAP: register_code(KC_LBRC); break;
228 case TD_SINGLE_HOLD: register_code(KC_LALT); break;
229 case TD_DOUBLE_TAP: register_code(KC_RBRC); break;
230 default: break;
231 }
232}
233
234void lalt_br_reset(tap_dance_state_t *state, void *user_data) {
235 switch (alt_br_state.state) {
236 case TD_SINGLE_TAP: unregister_code(KC_LBRC); break;
237 case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
238 case TD_DOUBLE_TAP: unregister_code(KC_RBRC); break;
239 default: break;
240 }
241 alt_br_state.state = TD_NONE;
242}
243
244//// LCTL_PR
245
246static td_tap_t lctl_pr_state = {
247 .is_press_action = true,
248 .state = TD_NONE
249};
250
251void lctl_pr_finished(tap_dance_state_t *state, void *user_data) {
252 lctl_pr_state.state = cur_dance(state);
253 switch (lctl_pr_state.state) {
254 case TD_SINGLE_TAP: register_code16(KC_LPRN); break;
255 case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
256 case TD_DOUBLE_TAP: register_code16(KC_RPRN); break;
257 default: break;
258 }
259}
260
261void lctl_pr_reset(tap_dance_state_t *state, void *user_data) {
262 switch (lctl_pr_state.state) {
263 case TD_SINGLE_TAP: unregister_code16(KC_LPRN); break;
264 case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
265 case TD_DOUBLE_TAP: unregister_code16(KC_RPRN); break;
266 default: break;
267 }
268 lctl_pr_state.state = TD_NONE;
269}
270
271//// SFT_CI
272
273static td_tap_t lsft_ci_state = {
274 .is_press_action = true,
275 .state = TD_NONE
276};
277
278void lsft_ci_finished(tap_dance_state_t *state, void *user_data) {
279 lsft_ci_state.state = cur_dance(state);
280 switch (lsft_ci_state.state) {
281 case TD_SINGLE_TAP: register_code16(KC_CIRC); break;
282 case TD_SINGLE_HOLD: register_code(KC_LSFT); break;
283 default: break;
284 }
285}
286
287void lsft_ci_reset(tap_dance_state_t *state, void *user_data) {
288 switch (lsft_ci_state.state) {
289 case TD_SINGLE_TAP: unregister_code16(KC_CIRC); break;
290 case TD_SINGLE_HOLD: unregister_code(KC_LSFT); break;
291 default: break;
292 }
293 lsft_ci_state.state = TD_NONE;
294}
295
296//// SFT_EX
297
298static td_tap_t lsft_ex_state = {
299 .is_press_action = true,
300 .state = TD_NONE
301};
302
303void lsft_ex_finished(tap_dance_state_t *state, void *user_data) {
304 lsft_ex_state.state = cur_dance(state);
305 switch (lsft_ex_state.state) {
306 case TD_SINGLE_TAP: register_code16(KC_EXLM); break;
307 case TD_SINGLE_HOLD: register_code(KC_LSFT); break;
308 default: break;
309 }
310}
311
312void lsft_ex_reset(tap_dance_state_t *state, void *user_data) {
313 switch (lsft_ex_state.state) {
314 case TD_SINGLE_TAP: unregister_code16(KC_EXLM); break;
315 case TD_SINGLE_HOLD: unregister_code(KC_LSFT); break;
316 default: break;
317 }
318 lsft_ex_state.state = TD_NONE;
319}
320
321//// Actually define the tap-dance actions
322
323tap_dance_action_t tap_dance_actions[] = {
324 [ALT_BR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lalt_br_finished, lalt_br_reset),
325 [CTL_PR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lctl_pr_finished, lctl_pr_reset),
326 [SFT_CI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lsft_ci_finished, lsft_ci_reset),
327 [SFT_EX] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lsft_ex_finished, lsft_ex_reset),
328};
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md b/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md
new file mode 100644
index 0000000000..d83bce1d2f
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/readme.md
@@ -0,0 +1,251 @@
1# SlotThe's Keyboardio Atreus Keymap
2
3Note: the following is (a relevant and shortened) excerpt from [this
4rewiev](https://tony-zorman.com/posts/atreus-review.html) of the
5keyboard itself. See there for, e.g., some thoughts about modifier
6placement.
7
8## Base layer
9
10 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.------.
11 | Q | W | F | P | B | | J | L | U | Y | M4+; |
12 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.------.
13 | A | R | S | T | G | | M | N | E | I | O |
14 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
15 | S+Z | X | C | D | V | ARP | REP | K | H | , | . | S+/ |
16 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
17 | ESC | TAB | M4 | L1 | SPC | A[] | BSC | C() | L2 | - | ' | RET |
18 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.------.
19
20I use [Colemak Mod-DH][colemak-dh] as my layout, so this takes up most of the base of the keyboard.
21
22Perhaps strikingly, I opted for not putting Shift on the thumb,
23but recreating the "ordinary" one-on-each-side setup from the good old typewriter days.
24While I already have a key to access the `LOWER` (L1) layer with my left thumb,
25I had to sacrifice Shift so I could fit a key to the `RAISE` (L2) layer on the right thumb.
26This also jumps to the `ADJUST` (L3) layer when both `LOWER` and `RAISE` are held at the same time.
27I will gladly trade two layers for one Shift key.
28
29One of the most basic things—besides having layers—that one can do with QMK is [mod-taps][qmk:mod-tap].
30These are keys that act as modifiers when held, and as "ordinary" keys when pressed.
31For example, all of the `S+«key»` keys emit Shift when held and `«key»` when pressed.
32There is a slight delay between pressing the key and the press registering,
33since we have to wait for a possible tap,
34which keeps me from using modifiers on the home-row, as some people like to do.
35Likewise, the `M4+;` key acts as Super when held and as `;` when pressed.
36At this point, it is actually my main way to press the Super key,
37even though I don't find the real `M4` key particularly hard to hit with my thumb.
38Sometimes these things just happen,
39I suppose,
40though it may help that I press both outer keys of the top row (that is, `q` and `;`) with my ring finger
41instead of my pinky.
42
43The `A[]` and `C()` keys are utilising [tap dances][qmk:tap-dance],
44in order to do even more.
45Tap dances are very similar to mod-taps,
46only in addition to just differentiating between a "pressed" and a "held" state,
47QMK now also keeps track of *how often* a key has been tapped.
48So far, [my setup][qmk:slotthe:tapdances] here is quite basic;
49I only check whether a key was pressed once, twice, or is being held.
50This allows me to not need extra keys for parentheses,
51as they can fit on the modifier keys:
52
53 - `A[]`: Alt when held, `[` when pressed once, and `]` when pressed twice.
54 This one is especially neat, since tap dances play well with other modifiers,
55 so pressing `S-M1` once will result in `{` and pressing it twice gives `}`.
56
57 - `C()`: Control when held, `(` when pressed once, and `)` when pressed twice.
58
59I don't mind having the extra indirection for the respective closed delimiter,
60as [paredit][emacs:paredit],
61[puni][emacs:puni],
62`electric-pair-mode`,
63or a different package of choice usually takes care of inserting it.
64
65The `REP` and `AREP` keys make use of the [Repeat Key][qmk:repeat-key] functionality;
66basically, `REP` executes the key chord that was last pressed.
67On the other hand,
68`AREP` is an alternative, configurable, of "repeating" things;
69by default, it turns some directional movements
70around—e.g., `M-f` becomes `M-b`—but
71it can be made to pretty much input anything one wants.
72
73## Layer 1
74
75 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
76 | & | *> | >>= | <&> | | | = | + | * | - | M4+RT |
77 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-------.
78 | :: | => | =<< | <|> | @ | | LFT | UP | DWN | RGT | \ |
79 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
80 | S+! | <* | <*> | <$> | <- | | MEN | -> | $ | # | % | S+^ |
81 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
82 | | | | | | | | | L3 | ALT | | S-Ins |
83 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-------.
84
85Guess which programming language I like based on this layer's [macros][qmk:macros] :).
86
87Crucially, keys that were "Shift when held,
88*something* when pressed" on the base layer retain the Shift part of that functionality.
89This is used for the commutativity of the modifier
90keys—i.e., it does not matter whether I press `S-L1-«key»` or `L1-S-«key»`—which
91would otherwise drive me insane.
92The same goes for all fall-through keys:
93keys that appear blank in the above layout.
94These aren't blocked or anything,
95just no new functionality is added
96so the key falls back to what's on the next lowest layer.
97In plain terms,
98the key to the left of `L3` will still be Control,
99as I can comfortably press that while holding down something with my left hand.
100The same can't be said for the Alt key,
101which is on the left hand by default,
102so a separate binding for it has to be created on the right hand.
103Thus,
104as the two don't commute,
105key chords involving the LOWER layer and Alt are to be avoided if possible.
106
107The `S-Ins` key is not some sort of tap,
108but actually just emits a Shift-Insert,
109which can be used to paste stuff from the [X11 primary selection][x11:clipboard].
110
111## Layer 2
112
113 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
114 | | 7 | 8 | 9 | | | | + | * | - | |
115 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
116 | : | 4 | 5 | 6 | = | | | ` | _ | ' | " |
117 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
118 | S+0 | 1 | 2 | 3 | | | | | | # | % | S+^ |
119 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
120 | | | | L3 | | | | | | | | |
121 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
122
123A relatively unspectacular layer,
124RAISE is mainly used for numbers,
125and number adjacent things.
126Some symbols related to this,
127like `=`, `+`, `*`, and `-`,
128are replicated from the LOWER layer.
129This is due to the above mentioned issues of inserting arithmetic.
130This layer also features \` and `'` quite prominently,
131as these are important for [CDLaTeX].
132Plus, putting `'` and `"` on this layer circumvents the difficult to hit key on the base layer.
133
134## Layer 3
135
136 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
137 | | | | | | | | F7 | F8 | F9 | F10 |
138 .-----.-----.-----.-----.-----. .-----.-----.-----.-----.-----.
139 | | | | | | | | F4 | F5 | F6 | F11 |
140 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
141 | | | | | | | | | F1 | F2 | F3 | F12 |
142 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
143 | | | | | | | | | | | | |
144 .-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.-----.
145
146So far, only the seldom used F-keys are present here.
147As should be obvious, this is the least developed layer,
148and also the one that'll probably change the most in the future.
149Currently, I'm thinking of putting some XMonad specific bindings on here,
150which could even to free up the Super key to be used inside of Emacs
151for certain things—that would certainly be a worthwhile experiment.
152Other thoughts include things like volume and brightness controls,
153although this is less critical since my laptop keyboard is never far away.
154
155## Other features
156
157There are some features that aren't necessarily reflected in the keys themselves,
158yet are quite essential for day-to-day use.
159The TL;DR can be found in [rules.mk][./rules.mk].
160
161### [Key overrides][qmk:key-overrides]
162
163Quoting from the documentation
164
165> Key overrides allow you to override modifier-key combinations to send a different modifier-key combination
166> or perform completely custom actions.
167
168Some keys on the keyboard are quite hard to hit.
169On the default layout,
170one of these turns out to be the Tab key,
171which is nonetheless important in a lot of situations.
172Conveniently, Emacs interprets `C-i` as Tab, so there is less need to actually hit the "real" key.
173However, not all programs are quite so understanding—or old, I guess.
174With key overrides, one can send a real `TAB` whenever `C-i` is pressed;
175no special convention on how to interpret certain key chords required!
176I also rebound `C-m` to `RET` (with the same justification), and `S-BSP` to `DEL`.
177
178This is one of those features that I didn't know I needed,
179yet now couldn't live without anymore.
180I'm definitely looking forward to discovering new and interesting ways of using this!
181
182### [Autocorrect][qmk:autocorrect]
183
184This is a quaint little feature: auto-correct inside of your keyboard's firmware!
185I promise that it's not as bad as it sounds.
186It does not work automatically, thankfully, but is based off a given list of replacements.
187For example,
188
189 widht -> width
190
191would fire anytime one writes `widht`, which then gets replaced by `width`.
192This is based on (a trie of) the most recently pressed keys,
193so whenever one actually wants to write `widht`
194all that's needed is pressing, for example, any modifier during the insertion.
195
196As I've really just been trying this out for a laugh, my current word list is quite short:
197
198 :alot -> a lot
199 accesories -> accessories
200 accomodate -> accommodate
201 alledge -> allege
202
203In general,
204I think the solution to stop misspelling a word is not to remap key sequences on the firmware level,
205but to—you know—learn how to spell that word.
206Still,
207I can imagine at least one or two use-cases where something like this could be useful,
208so I figured it might be nice to make people aware of this features' existence.
209
210In addition—as I've found out on three separate occasions so far—using the words "auto-correct, but in firmware"
211makes people stare in utter disbelief and/or disgust at your keyboard.
212That alone makes this feature worth it.
213
214### [Caps Word][qmk:caps-word]
215
216Caps Word is a clever alternative to Caps Lock,
217which I enable by pressing both Shift keys together.
218After that,
219all of the letter keys are shifted,
220and `-` becomes `_`
221until a different key (excluding common sense ones like backspace) is pressed.
222This is very useful for, e.g.,
223writing long constants,
224as these tend to have capital names separated with underscores:
225writing `BOTH_SHIFTS_TURNS_ON_CAPS_WORD` has never been easier!
226
227One thing to note is that,
228while layer switching works just fine in "Caps Word mode",
229the [Tri Layer][qmk:tri-layer] feature does not seem to play nicely with it;
230i.e., the mode gets disabled when switching to these layers.
231This is also the reason why I have an explicit LOWER, RAISE, and ADJUST setup,
232instead of just using Tri Layer.
233One could fiddle with the `caps_word_press_user` callback,
234but it seemed much easier to just create one additional layer toggle instead.
235I haven't looked at how hard it would be to hack this into Caps Word,
236so maybe this is a future pull request.
237
238[CDLaTeX]: https://github.com/cdominik/cdlatex
239[colemak-dh]: https://colemakmods.github.io/mod-dh/
240[emacs:paredit]: https://paredit.org/
241[emacs:puni]: https://github.com/AmaiKinono/puni
242[qmk:autocorrect]: https://docs.qmk.fm/#/feature_autocorrect
243[qmk:caps-word]: https://docs.qmk.fm/#/feature_caps_word
244[qmk:key-overrides]: https://docs.qmk.fm/#/feature_key_overrides
245[qmk:macros]: https://docs.qmk.fm/#/feature_macros
246[qmk:mod-tap]: https://docs.qmk.fm/#/mod_tap
247[qmk:repeat-key]: https://docs.qmk.fm/#/feature_repeat_key
248[qmk:slotthe:tapdances]: https://github.com/slotThe/qmk_firmware/blob/keyboardio/atreus/slotThe/keyboards/keyboardio/atreus/keymaps/slotThe/keymap.c#L187
249[qmk:tap-dance]: https://docs.qmk.fm/#/feature_tap_dance
250[qmk:tri-layer]: https://docs.qmk.fm/#/feature_tri_layer
251[x11:clipboard]: https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html
diff --git a/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk b/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk
new file mode 100644
index 0000000000..b603193f85
--- /dev/null
+++ b/keyboards/keyboardio/atreus/keymaps/slotthe/rules.mk
@@ -0,0 +1,9 @@
1TAP_DANCE_ENABLE = yes
2KEY_OVERRIDE_ENABLE = yes
3AUTOCORRECT_ENABLE = yes
4CAPS_WORD_ENABLE = yes
5REPEAT_KEY_ENABLE = yes
6
7LTO_ENABLE = yes
8COMMAND_ENABLE = no
9MOUSEKEY_ENABLE = no
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
index e8f6fac120..ca8a4c6ab4 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/config.h
@@ -5,6 +5,9 @@
5 5
6#define LAYER_STATE_8BIT 6#define LAYER_STATE_8BIT
7 7
8#define TURBO_ENABLE
9#define HOLD_ON_OTHER_KEY_PRESS
10
8// RGB Matrix effects disable 11// RGB Matrix effects disable
9#ifdef RGB_MATRIX_ENABLE 12#ifdef RGB_MATRIX_ENABLE
10# define UNDERGLOW_DISABLE 13# define UNDERGLOW_DISABLE
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
index ef7cfab5fe..3d5bcade20 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/keymap.c
@@ -50,6 +50,26 @@ void dynamic_macro_record_end_user(int8_t direction) {
50#define MCR_SWT KC_NO 50#define MCR_SWT KC_NO
51#endif // DYNAMIC_MACRO_ENABLE 51#endif // DYNAMIC_MACRO_ENABLE
52 52
53#ifdef TURBO_ENABLE
54static bool turbo_active = false; // Only changed by TRBO_ST
55static uint16_t turbo_keycode = KC_NO; // turbo_active can't be true if this is KC_NO
56static bool turbo_key_pressed = false;
57static bool turbo_keycode_selecting = false; // Determine new keycode or delay mode switch
58static bool turbo_ms_delay_direction = true; // True is raise the delay, false is lower it
59static uint16_t turbo_ms_delay_direction_indicator = 0;
60static uint16_t turbo_ms_delay = 100; // Start at sending keycodes 10 times a second
61static uint16_t turbo_timer; // Changed semi automatically
62/*
63 * Because the KC's are wrapped in `LT()` they won't be interpreted as KC_NO or KC_TRNS
64 * Instead they'll just be like any other custom KC which will let me use them how I want
65*/
66#define TRBO_ST LT(_CTR, KC_NO )
67#define TRBO_TI LT(_CTR, KC_TRNS)
68#else
69#define TRBO_ST KC_NO
70#define TRBO_TI KC_NO
71#endif
72
53const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = { 73const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
54 [_MAIN] = LAYOUT_planck_mit( 74 [_MAIN] = LAYOUT_planck_mit(
55 KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC, 75 KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
@@ -67,7 +87,7 @@ const uint16_t PROGMEM keymaps[_END][MATRIX_ROWS][MATRIX_COLS] = {
67 XXXXXXX, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, XXXXXXX, MCR_REC, 87 XXXXXXX, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, XXXXXXX, MCR_REC,
68 XXXXXXX, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, MCR_PLY, 88 XXXXXXX, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, MCR_PLY,
69 XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX, XXXXXXX, MCR_SWT, 89 XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX, XXXXXXX, MCR_SWT,
70 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TOG_MSE, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX 90 XXXXXXX, XXXXXXX, XXXXXXX, TRBO_TI, TRBO_ST, TOG_MSE, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
71 ) 91 )
72 #ifdef MOUSEKEY_ENABLE 92 #ifdef MOUSEKEY_ENABLE
73 ,[_MSE] = LAYOUT_planck_mit( 93 ,[_MSE] = LAYOUT_planck_mit(
@@ -117,12 +137,68 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
117 if (RECORDING) { RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0); } 137 if (RECORDING) { RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0); }
118 break; 138 break;
119 #endif // DYNAMIC_MACRO_ENABLE 139 #endif // DYNAMIC_MACRO_ENABLE
140
141 #ifdef TURBO_ENABLE
142 case TRBO_ST:
143 if (turbo_keycode_selecting) {
144 RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
145 } else {
146 if (turbo_active) {
147 if (turbo_key_pressed) {
148 RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
149 } else {
150 RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0);
151 }
152 }
153 }
154 break;
155
156 case TRBO_TI:
157 if (turbo_ms_delay_direction_indicator != 0) {
158 uint8_t time = timer_elapsed(turbo_ms_delay_direction_indicator) / 200;
159 if (time > 0) {
160 if ((time % 2) == 1) {
161 if (turbo_ms_delay_direction) {
162 RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, BRIGHTNESS, 0);
163 } else {
164 RGB_MATRIX_INDICATOR_SET_COLOR(pos, BRIGHTNESS, 0, 0);
165 }
166 } else {
167 RGB_MATRIX_INDICATOR_SET_COLOR(pos, 0, 0, 0);
168 }
169 if (time >= 6) {
170 turbo_ms_delay_direction_indicator = 0;
171 }
172 }
173 }
174 break;
175 #endif
176
120 } 177 }
121 } 178 }
122 return false; 179 return false;
123} 180}
124#endif 181#endif
125 182
183#ifdef TURBO_ENABLE
184void housekeeping_task_user(void) {
185 if (turbo_active) {
186 if (turbo_key_pressed) {
187 if (timer_elapsed(turbo_timer) > turbo_ms_delay) {
188 unregister_code(turbo_keycode);
189 turbo_key_pressed = false;
190 turbo_timer = timer_read();
191 }
192 } else {
193 if (timer_elapsed(turbo_timer) > (turbo_ms_delay / 2)) {
194 register_code(turbo_keycode);
195 turbo_key_pressed = true;
196 }
197 }
198 }
199}
200#endif
201
126bool process_record_user(uint16_t keycode, keyrecord_t *record) { 202bool process_record_user(uint16_t keycode, keyrecord_t *record) {
127 #ifdef DYNAMIC_MACRO_ENABLE 203 #ifdef DYNAMIC_MACRO_ENABLE
128 if (keycode == MCR_REC) {keycode = REC;} 204 if (keycode == MCR_REC) {keycode = REC;}
@@ -145,6 +221,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
145 } 221 }
146 #endif // MOUSEKEY_ENABLE 222 #endif // MOUSEKEY_ENABLE
147 223
224 #ifdef TURBO_ENABLE
225 if (record->event.pressed) {
226 if (turbo_keycode_selecting) {
227 if (IS_BASIC_KEYCODE(keycode) ||
228 IS_MODIFIER_KEYCODE(keycode) ||
229 IS_JOYSTICK_KEYCODE(keycode) ||
230 IS_MOUSE_KEYCODE(keycode))
231 {
232 unregister_code(turbo_keycode);
233 turbo_key_pressed = false;
234 turbo_keycode = keycode;
235 turbo_keycode_selecting = false;
236 }
237 }
238 }
239 #endif
240
148 switch (keycode) { 241 switch (keycode) {
149 #ifdef DYNAMIC_MACRO_ENABLE 242 #ifdef DYNAMIC_MACRO_ENABLE
150 case MCR_SWT: 243 case MCR_SWT:
@@ -162,6 +255,46 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
162 return false; 255 return false;
163 #endif // DYNAMIC_MACRO_ENABLE 256 #endif // DYNAMIC_MACRO_ENABLE
164 257
258 #ifdef TURBO_ENABLE
259 case TRBO_ST:
260 if (record->event.pressed) {
261 if (!record->tap.count) {
262 turbo_keycode_selecting = !turbo_keycode_selecting;
263 } else {
264 if (turbo_keycode != KC_NO) {
265 if (!turbo_active) {
266 turbo_keycode_selecting = false;
267 turbo_active = true;
268 } else {
269 unregister_code(turbo_keycode);
270 turbo_key_pressed = false;
271 turbo_active = false;
272 }
273 }
274 }
275 }
276 return false;
277
278 case TRBO_TI:
279 if (record->event.pressed) {
280 if (!record->tap.count) {
281 turbo_ms_delay_direction = !turbo_ms_delay_direction;
282 turbo_ms_delay_direction_indicator = timer_read();
283 } else {
284 if (turbo_ms_delay_direction)
285 turbo_ms_delay += 20;
286 else
287 turbo_ms_delay -= 20;
288
289 if (turbo_ms_delay > 500) // half a second
290 turbo_ms_delay = 500;
291 if (turbo_ms_delay < 60) // Around 16 times a second
292 turbo_ms_delay = 60;
293 }
294 }
295 return false;
296 #endif
297
165 default: 298 default:
166 return true; //Process all other keycodes normally 299 return true; //Process all other keycodes normally
167 } 300 }
diff --git a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
index 2798567b5e..980f559d71 100644
--- a/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
+++ b/keyboards/kprepublic/bm40hsrgb/keymaps/coffee/readme.md
@@ -21,12 +21,12 @@ The secondary layer ( `_SUB` ) is for syntax, F keys, and number keys
21| 4 | _ | _ | | _ | _ | _ | <- | _ | | | | | 21| 4 | _ | _ | | _ | _ | _ | <- | _ | | | | |
22 22
23The control layer ( `_CTR` ) is for lighting, media, and macros 23The control layer ( `_CTR` ) is for lighting, media, and macros
24| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 24| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
25|-----|---|-------|------|-------|------|---------|-----|------|------|------|----|---------| 25|-----|---|-------|------|---------|---------|---------|-----|------|------|------|----|---------|
26| 1 | | SPD- | BRI+ | SPD+ | HUE+ | SAT+ | | | VOL+ | | | MCR_REC | 26| 1 | | SPD- | BRI+ | SPD+ | HUE+ | SAT+ | | | VOL+ | | | MCR_REC |
27| 2 | | EFCT- | BRI- | EFCT+ | HUE- | SAT- | | PREV | PLAY | NEXT | | MCR_PLY | 27| 2 | | EFCT- | BRI- | EFCT+ | HUE- | SAT- | | PREV | PLAY | NEXT | | MCR_PLY |
28| 3 | | | TOG | | | | | | VOL- | | | MCR_SWT | 28| 3 | | | TOG | | | | | | VOL- | | | MCR_SWT |
29| 4 | | | | | | MSE_TOG | <- | | | | | | 29| 4 | | | | TRBO_TI | TRBO_ST | MSE_TOG | <- | | | | | |
30 30
31The mouse layer ( `_MSE` ) is for making the keyboard function as a mouse as well 31The mouse layer ( `_MSE` ) is for making the keyboard function as a mouse as well
32| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 32| row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
@@ -67,6 +67,8 @@ The mouse layer ( `_MSE` ) is for making the keyboard function as a mouse as wel
67| SCR_D | Mouse scroll down | 67| SCR_D | Mouse scroll down |
68| ACL_U | Raise mouse/scroll speed | 68| ACL_U | Raise mouse/scroll speed |
69| ACL_D | Lower mouse/scroll speed | 69| ACL_D | Lower mouse/scroll speed |
70| TRBO_ST | Set turbo key (Hold), start/stop turbo (Tap) |
71| TRBO_TI | Turbo speed +/- (Hold to switch direction) |
70 72
71## Compiling 73## Compiling
72 74
diff --git a/keyboards/lily58/keymaps/pomodoro/config.h b/keyboards/lily58/keymaps/pomodoro/config.h
new file mode 100644
index 0000000000..ce2b0e4bcd
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/config.h
@@ -0,0 +1,56 @@
1/*
2This is the c configuration file for the keymap
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6
7This program is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#pragma once
22
23/* Select hand configuration */
24
25#define MASTER_LEFT
26// #define MASTER_RIGHT
27// #define EE_HANDS
28
29#define QUICK_TAP_TERM 0
30#define TAPPING_TERM 100
31
32#undef RGBLED_NUM
33#define RGBLIGHT_EFFECT_BREATHING
34#define RGBLIGHT_EFFECT_RAINBOW_MOOD
35#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
36#define RGBLIGHT_EFFECT_SNAKE
37#define RGBLIGHT_EFFECT_KNIGHT
38#define RGBLIGHT_EFFECT_CHRISTMAS
39#define RGBLIGHT_EFFECT_STATIC_GRADIENT
40#define RGBLIGHT_EFFECT_RGB_TEST
41#define RGBLIGHT_EFFECT_ALTERNATING
42#define RGBLIGHT_EFFECT_TWINKLE
43#define RGBLED_NUM 27
44#define RGBLIGHT_LIMIT_VAL 120
45#define RGBLIGHT_HUE_STEP 10
46#define RGBLIGHT_SAT_STEP 17
47#define RGBLIGHT_VAL_STEP 17
48
49#define SPLIT_TRANSACTION_IDS_USER SYNC_POMODORO_RUNNING
50
51// Underglow
52/*
53#undef RGBLED_NUM
54#define RGBLED_NUM 14 // Number of LEDs
55#define RGBLIGHT_SLEEP
56*/
diff --git a/keyboards/lily58/keymaps/pomodoro/keymap.c b/keyboards/lily58/keymaps/pomodoro/keymap.c
new file mode 100644
index 0000000000..7689a391f2
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/keymap.c
@@ -0,0 +1,154 @@
1/*
2Copyright 2023 Casey Borders
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17#include QMK_KEYBOARD_H
18
19enum layer_number {
20 _QWERTY = 0,
21 _LOWER,
22 _RAISE,
23 _ADJUST,
24};
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27 /* QWERTY
28 * ,-----------------------------------------. ,-----------------------------------------.
29 * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Backsp|
30 * |------+------+------+------+------+------| |------+------+------+------+------+------|
31 * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
32 * |------+------+------+------+------+------| |------+------+------+------+------+------|
33 * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
34 * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
35 * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
36 * `-----------------------------------------/ / \ \-----------------------------------------'
37 * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
38 * | | | |/ / \ \ | | | |
39 * `----------------------------' '------''--------------------'
40 */
41 [_QWERTY] = LAYOUT(
42 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
43 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
44 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
45 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
46 KC_MPLY, MO(_LOWER), KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, MO(_RAISE), KC_MUTE
47 ),
48 /* LOWER
49 * ,-----------------------------------------. ,-----------------------------------------.
50 * | | | | | | | | | | | | | |
51 * |------+------+------+------+------+------| |------+------+------+------+------+------|
52 * | | | | | | | | | | Up | | \ | |
53 * |------+------+------+------+------+------| |------+------+------+------+------+------|
54 * | | | | | | |-------. ,-------| | Left | Down |Right | = | |
55 * |------+------+------+------+------+------| < | | > |------+------+------+------+------+------|
56 * | | | | | | |-------| |-------| | | | | | |
57 * `-----------------------------------------/ / \ \-----------------------------------------'
58 * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
59 * | | | |/ / \ \ | | | |
60 * `----------------------------' '------''--------------------'
61 */
62 [_LOWER] = LAYOUT(
63 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
64 _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
65 _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
66 _______, _______, _______, _______, _______, _______, KC_LT, KC_GT, _______, _______, _______, _______, _______, _______,
67 _______, _______, _______, _______, _______, _______, _______, _______
68
69 ),
70 /* RAISE
71 * ,-----------------------------------------. ,-----------------------------------------.
72 * | ` | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
73 * |------+------+------+------+------+------| |------+------+------+------+------+------|
74 * | | | Vol+ | | | | | | | | | | |
75 * |------+------+------+------+------+------| |------+------+------+------+------+------|
76 * | | Prev | Vol- | Next | | |-------. ,-------| | | | | | |
77 * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
78 * | | | | | | |-------| |-------| | | | | | |
79 * `-----------------------------------------/ / \ \-----------------------------------------'
80 * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
81 * | | | |/ / \ \ | | | |
82 * `----------------------------' '------''--------------------'
83 */
84 [_RAISE] = LAYOUT(
85 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
86 _______, _______, KC_VOLU, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
87 _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______,
88 _______, _______, _______, _______, _______, _______, KC_LT, KC_GT, _______, _______, _______, _______, _______, _______,
89 _______, _______, _______, _______, _______, _______, _______, _______
90
91 ),
92 /* ADJUST
93 * ,-----------------------------------------. ,-----------------------------------------.
94 * | | | | | | | | | | | | | |
95 * |------+------+------+------+------+------| |------+------+------+------+------+------|
96 * | | | | | | | | | | | | Oper | Out |
97 * |------+------+------+------+------+------| |------+------+------+------+------+------|
98 * | | | | | | |-------. ,-------| | | | | | |
99 * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
100 * | | | | | | |-------| |-------| | | | | | |
101 * `-----------------------------------------/ / \ \-----------------------------------------'
102 * | Play |LOWER | LGUI | / Enter / \Space \ | RGUI |RAISE | Mute |
103 * | | | |/ / \ \ | | | |
104 * `----------------------------' '------''--------------------'
105 */
106 [_ADJUST] = LAYOUT(
107 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
108 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_OPER, KC_OUT,
109 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
110 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
111 _______, _______, _______, _______, _______, _______, _______, _______
112 )
113};
114
115layer_state_t layer_state_set_user(layer_state_t state) {
116 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
117}
118
119// SSD1306 OLED update loop, make sure to enable OLED_ENABLE=yes in rules.mk
120#ifdef OLED_ENABLE
121
122// When you add source files to SRC in rules.mk, you can use functions.
123const char *read_layer_state(void);
124const char *read_logo(void);
125const char *read_timelog(void);
126
127void toggle_pomodoro(void);
128const char* read_pomodoro_running(void);
129void update_pomodoro_display(void);
130
131oled_rotation_t oled_init_user(oled_rotation_t rotation) {
132 if (!is_keyboard_master())
133 return OLED_ROTATION_90;
134 return rotation;
135}
136
137bool oled_task_user(void) {
138 if (is_keyboard_master()) {
139 oled_write_ln(read_layer_state(), false);
140 oled_write_ln(read_pomodoro_running(), false);
141 } else {
142 update_pomodoro_display();
143 }
144 return false;
145}
146
147bool process_record_user(uint16_t keycode, keyrecord_t *record) {
148 if (record->event.pressed && keycode == KC_OPER) {
149 toggle_pomodoro();
150 }
151 return true;
152}
153
154#endif // OLED_ENABLE
diff --git a/keyboards/lily58/keymaps/pomodoro/pomodoro.c b/keyboards/lily58/keymaps/pomodoro/pomodoro.c
new file mode 100644
index 0000000000..1c0641978d
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/pomodoro.c
@@ -0,0 +1,249 @@
1/*
2Copyright 2023 Casey Borders
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17#include QMK_KEYBOARD_H
18
19#include <string.h>
20
21#include "transactions.h"
22
23#ifdef OLED_ENABLE
24
25#define HEADER_SIZE 32
26const char headerBase[] PROGMEM = {
27 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
28 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
29 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
30 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF
31};
32char header[HEADER_SIZE];
33
34#define STATUS_WIDTH 15
35#define STATUS_HEIGHT 32
36#define STATUS_PIXELS (STATUS_WIDTH * 8)
37#define STATUS_SIZE (STATUS_WIDTH * STATUS_HEIGHT)
38const char logoBase[] PROGMEM = {
39 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x80, 0x80, 0x00, 0x00, 0x00,
40 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x00, 0x00, 0x00,
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x61, 0x61, 0x81, 0x81, 0x01, 0x01, 0xC1, 0xC1, 0x30, 0x30, 0x00, 0x00, 0x00,
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xFF, 0xFF, 0xC3, 0xC3, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
43 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF0, 0xF0, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x0F, 0x00, 0x00, 0x00,
45 0x00, 0x00, 0x00, 0x06, 0x06, 0x9E, 0x9E, 0x66, 0x66, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0xF8, 0xF8, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0xF8, 0x00, 0x00, 0x00,
46 0x00, 0x00, 0x00, 0x86, 0x86, 0x67, 0x67, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x86, 0x86, 0x00, 0x00, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x00, 0x00, 0x00,
47 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x31, 0x31, 0xC1, 0xC1, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x30, 0x30, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xF3, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0x3B, 0xF1, 0xF7, 0xFF, 0x3F, 0x39, 0x30, 0x00, 0x01, 0x01, 0x01, 0x83, 0x86, 0x0C, 0xF8, 0xF0, 0x80, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xCF, 0x07, 0x1F, 0x3F, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0xFC, 0x7F, 0x07, 0x00, 0x00,
53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0E, 0x1C, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00
54};
55
56const char workBase[] PROGMEM = {
57 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3E, 0x3E, 0x3E, 0x3E, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x3E, 0x3E, 0x3E, 0x3E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
59 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
60 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x00, 0x00, 0x00,
61 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
62 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00,
66 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
67 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00,
68 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
69 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0x7F, 0x7F, 0x7F, 0x7F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
71 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00
72};
73
74const char restBase[] PROGMEM = {
75 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00,
78 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
80 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
81 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00,
83 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
84 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
85 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x00, 0x00, 0x00,
86 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7C, 0x7C, 0x7C, 0x7C, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
87 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
89 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00
90};
91char displayBuffer[STATUS_SIZE];
92
93#define WORK_TIME ((uint32_t)25 * 60 * 1000)
94#define REST_TIME ((uint32_t)5 * 60 * 1000)
95
96typedef enum pomo_state {
97 _STOPPED,
98 _WORK,
99 _REST,
100} pomo_state;
101
102/* The master only needs to know if the timer is running or not */
103bool isRunning = false;
104
105/* The slave needs more info about the state and what's going on */
106pomo_state state = _STOPPED;
107uint8_t pomoCount = 0;
108uint32_t pomoTimer;
109uint32_t totalTime = 0;
110uint32_t currTime = 0;
111uint32_t lastTime = 0;
112uint16_t lastProgress = 0;
113
114const char* read_pomodoro_state(void) {
115 switch (state) {
116 case _STOPPED: return "STOPPED";
117 case _REST: return "REST";
118 case _WORK: return "WORK";
119 default: return "UNKNOWN";
120 }
121}
122
123const char* read_pomodoro_running(void) {
124 if (isRunning) { return "RUNNING"; }
125 else { return "STOPPED"; }
126}
127
128void update_display_base(void) {
129 switch (state) {
130 case _STOPPED: {
131 memcpy_P(displayBuffer, logoBase, STATUS_SIZE);
132 memset(header, 0, HEADER_SIZE);
133 } break;
134 case _WORK: {
135 memcpy_P(displayBuffer, workBase, STATUS_SIZE);
136 memcpy_P(header, headerBase, HEADER_SIZE);
137 } break;
138 case _REST: {
139 memcpy_P(displayBuffer, restBase, STATUS_SIZE);
140 memcpy_P(header, headerBase, HEADER_SIZE);
141 } break;
142 }
143}
144
145void update_cycle_display(void) {
146 if (state == _STOPPED) { return; }
147 uint8_t start = (HEADER_SIZE / 4) * (4 - pomoCount);
148 for (uint8_t i = start; i < HEADER_SIZE; i++) {
149 header[i] = ~header[i];
150 }
151}
152
153bool syncRunning = false;
154void toggle_pomodoro(void) {
155 isRunning = !isRunning;
156 syncRunning = true;
157}
158
159void set_slave_pomodoro_running(uint8_t in_buflen, const void *in_data, uint8_t out_buflen, void *out_data) {
160 isRunning = *(bool*)in_data;
161 if (isRunning) {
162 /* Reset stuff and start the timer */
163 pomoTimer = timer_read32();
164 state = _WORK;
165 totalTime = WORK_TIME;
166 lastTime = 0;
167 lastProgress = 0;
168 currTime = 0;
169 pomoCount = 1;
170 update_display_base();
171 update_cycle_display();
172 } else {
173 state = _STOPPED;
174 update_display_base();
175 }
176}
177
178void keyboard_post_init_user(void) {
179 memcpy_P(displayBuffer, logoBase, STATUS_SIZE);
180 memset(header, 0, HEADER_SIZE);
181 transaction_register_rpc(SYNC_POMODORO_RUNNING, set_slave_pomodoro_running);
182}
183
184void update_pomodoro_display(void) {
185 oled_set_cursor(0, 0);
186 oled_write_raw(displayBuffer, STATUS_SIZE);
187 oled_set_cursor(0, STATUS_WIDTH);
188 oled_write_raw(header, HEADER_SIZE);
189}
190
191void update_time_display(void) {
192 if (currTime > lastTime) {
193 float ratio = (float)currTime / totalTime;
194 uint16_t progress = (uint16_t)(ratio * STATUS_PIXELS);
195
196 for (int i = lastProgress + 1; i <= progress; i++) {
197 uint16_t row = i / 8;
198 uint16_t bit = i % 8;
199 char mask = 1 << bit;
200 for (int j = 0; j < STATUS_HEIGHT; j++) {
201 uint16_t index = row * STATUS_HEIGHT + j;
202 if (index > STATUS_SIZE) break;
203 displayBuffer[index] = displayBuffer[index] ^ mask;
204 }
205 }
206
207 lastTime = currTime;
208 lastProgress = progress;
209 }
210}
211
212void housekeeping_task_user(void) {
213 if (is_keyboard_master()) {
214 if (syncRunning && transaction_rpc_send(SYNC_POMODORO_RUNNING, sizeof(bool), &isRunning)) {
215 syncRunning = false;
216 }
217 } else {
218 /* This is where the time will be updated */
219 if (isRunning) {
220 currTime = timer_elapsed32(pomoTimer);
221 if (currTime >= totalTime) {
222 if (state == _WORK) {
223 state = _REST;
224 totalTime = REST_TIME;
225 } else if (state == _REST) {
226 state = _WORK;
227 totalTime = WORK_TIME;
228 pomoCount++;
229 }
230
231 if (pomoCount > 4) {
232 isRunning = false;
233 state = _STOPPED;
234 }
235
236 pomoTimer = timer_read32();
237 currTime = 0;
238 lastTime = 0;
239 lastProgress = 0;
240 update_display_base();
241 update_cycle_display();
242 } else {
243 update_time_display();
244 }
245 }
246 }
247}
248
249#endif // OLED_ENABLE
diff --git a/keyboards/lily58/keymaps/pomodoro/rules.mk b/keyboards/lily58/keymaps/pomodoro/rules.mk
new file mode 100644
index 0000000000..a6666f7fc1
--- /dev/null
+++ b/keyboards/lily58/keymaps/pomodoro/rules.mk
@@ -0,0 +1,23 @@
1BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
2MOUSEKEY_ENABLE = no # Mouse keys
3CONSOLE_ENABLE = no # Console for debug
4COMMAND_ENABLE = no # Commands for debug and configuration
5NKRO_ENABLE = no
6BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
7AUDIO_ENABLE = no # Audio output
8RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
9SWAP_HANDS_ENABLE = no # Enable one-hand typing
10OLED_ENABLE = yes # OLED display
11LTO_ENABLE = yes # Link time optimisations
12EXTRAKEY_ENABLE = yes # Audio control and System control
13
14# If you want to change the display of OLED, you need to change here
15SRC += ./lib/rgb_state_reader.c \
16 ./lib/layer_state_reader.c \
17 ./lib/logo_reader.c \
18 ./lib/keylogger.c \
19 ./lib/mode_icon_reader.c \
20 ./lib/host_led_state_reader.c \
21 ./lib/timelogger.c \
22 ./lib/keylogger.c \
23 pomodoro.c \
diff --git a/keyboards/monsgeek/m6/config.h b/keyboards/monsgeek/m6/config.h
new file mode 100644
index 0000000000..5fcd897429
--- /dev/null
+++ b/keyboards/monsgeek/m6/config.h
@@ -0,0 +1,51 @@
1/* Copyright (C) 2023 jonylee@hfd
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/* Use 6 dynamic keymap layers */
20#define DYNAMIC_KEYMAP_LAYER_COUNT 6
21
22/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
23#define LOCKING_SUPPORT_ENABLE
24/* Locking resynchronize hack */
25#define LOCKING_RESYNC_ENABLE
26
27/* SPI Config for spi flash*/
28#define SPI_DRIVER SPIDQ
29#define SPI_SCK_PIN B3
30#define SPI_MOSI_PIN B5
31#define SPI_MISO_PIN B4
32#define SPI_MOSI_PAL_MODE 5
33
34#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
35#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
36
37/* I2C Config for LED Driver */
38#define DRIVER_COUNT 2
39#define DRIVER_ADDR_1 0b1110100
40#define DRIVER_ADDR_2 0b1110111
41#define I2C1_SCL_PAL_MODE 4
42#define I2C1_OPMODE OPMODE_I2C
43#define I2C1_CLOCK_SPEED 400000 /* 400000 */
44
45#define RGB_MATRIX_LED_COUNT 92
46
47#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
48#define RGB_TRIGGER_ON_KEYDOWN
49#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
50#define RGB_MATRIX_KEYPRESSES
51#define RGB_MATRIX_KEYRELEASES
diff --git a/keyboards/monsgeek/m6/halconf.h b/keyboards/monsgeek/m6/halconf.h
new file mode 100644
index 0000000000..2f64e65393
--- /dev/null
+++ b/keyboards/monsgeek/m6/halconf.h
@@ -0,0 +1,23 @@
1/* Copyright (C) 2022 jonylee@hfd
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#pragma once
17
18#define HAL_USE_I2C TRUE
19#define HAL_USE_SPI TRUE
20#define SPI_USE_WAIT TRUE
21#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
22
23#include_next <halconf.h>
diff --git a/keyboards/monsgeek/m6/info.json b/keyboards/monsgeek/m6/info.json
new file mode 100644
index 0000000000..78d6c1bf94
--- /dev/null
+++ b/keyboards/monsgeek/m6/info.json
@@ -0,0 +1,232 @@
1{
2 "keyboard_name": "M6",
3 "manufacturer": "MonsGeek",
4 "maintainer": "jonylee@hfd",
5 "usb": {
6 "force_nkro": true,
7 "vid": "0xFFFE",
8 "pid": "0x0011",
9 "device_version": "1.0.0",
10 "suspend_wakeup_delay": 400
11 },
12 "processor": "WB32FQ95",
13 "bootloader": "wb32-dfu",
14 "features": {
15 "bootmagic": true,
16 "mousekey": true,
17 "extrakey": true,
18 "console": false,
19 "command": false,
20 "nkro": true,
21 "rgb_matrix": true
22 },
23 "matrix_pins": {
24 "cols": ["C1", "C2", "C3", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C4", "C5", "B0", "B1", "B2"],
25 "rows": ["C6", "C7", "C8", "C9", "A8"]
26 },
27 "diode_direction": "ROW2COL",
28 "rgb_matrix": {
29 "driver": "IS31FL3733",
30 "max_brightness": 200,
31 "val_steps": 20,
32 "animations": {
33 "breathing": true,
34 "cycle_all": true,
35 "cycle_left_right": true,
36 "cycle_up_down": true,
37 "rainbow_moving_chevron": true,
38 "cycle_out_in": true,
39 "cycle_out_in_dual": true,
40 "cycle_pinwheel": true,
41 "cycle_spiral": true,
42 "dual_beacon": true,
43 "rainbow_beacon": true,
44 "raindrops": true,
45 "typing_heatmap": true,
46 "solid_reactive_simple": true,
47 "solid_reactive": true,
48 "solid_reactive_cross": true,
49 "multisplash": true
50 },
51 "layout":[
52 { "flags": 4, "matrix": [0, 0], "x": 0, "y": 0},
53 { "flags": 4, "matrix": [0, 1], "x": 13, "y": 0},
54 { "flags": 4, "matrix": [0, 2], "x": 26, "y": 0},
55 { "flags": 4, "matrix": [0, 3], "x": 39, "y": 0},
56 { "flags": 4, "matrix": [0, 4], "x": 52, "y": 0},
57 { "flags": 4, "matrix": [0, 5], "x": 65, "y": 0},
58 { "flags": 4, "matrix": [0, 6], "x": 78, "y": 0},
59 { "flags": 4, "matrix": [0, 7], "x":115, "y": 0},
60 { "flags": 4, "matrix": [0, 8], "x":128, "y": 0},
61 { "flags": 4, "matrix": [0, 9], "x":141, "y": 0},
62 { "flags": 4, "matrix": [0, 10], "x":154, "y": 0},
63 { "flags": 4, "matrix": [0, 11], "x":167, "y": 0},
64 { "flags": 4, "matrix": [0, 12], "x":180, "y": 0},
65 { "flags": 4, "matrix": [0, 13], "x":193, "y": 0},
66 { "flags": 4, "matrix": [0, 15], "x":224, "y": 0},
67
68 { "flags": 4, "matrix": [1, 0], "x": 0, "y": 16},
69 { "flags": 4, "matrix": [1, 1], "x": 19, "y": 16},
70 { "flags": 4, "matrix": [1, 2], "x": 33, "y": 16},
71 { "flags": 4, "matrix": [1, 3], "x": 46, "y": 16},
72 { "flags": 4, "matrix": [1, 4], "x": 59, "y": 16},
73 { "flags": 4, "matrix": [1, 5], "x": 72, "y": 16},
74 { "flags": 4, "matrix": [1, 6], "x":108, "y": 16},
75 { "flags": 4, "matrix": [1, 7], "x":122, "y": 16},
76 { "flags": 4, "matrix": [1, 8], "x":135, "y": 16},
77 { "flags": 4, "matrix": [1, 9], "x":148, "y": 16},
78 { "flags": 4, "matrix": [1, 10], "x":161, "y": 16},
79 { "flags": 4, "matrix": [1, 11], "x":174, "y": 16},
80 { "flags": 4, "matrix": [1, 12], "x":187, "y": 16},
81 { "flags": 4, "matrix": [1, 13], "x":200, "y": 16},
82 { "flags": 4, "matrix": [1, 15], "x":224, "y": 16},
83
84 { "flags": 4, "matrix": [2, 0], "x": 0, "y": 32},
85 { "flags": 4, "matrix": [2, 1], "x": 23, "y": 32},
86 { "flags": 4, "matrix": [2, 2], "x": 36, "y": 32},
87 { "flags": 4, "matrix": [2, 3], "x": 49, "y": 32},
88 { "flags": 4, "matrix": [2, 4], "x": 62, "y": 32},
89 { "flags": 4, "matrix": [2, 5], "x": 75, "y": 32},
90 { "flags": 4, "matrix": [2, 6], "x":112, "y": 32},
91 { "flags": 4, "matrix": [2, 7], "x":125, "y": 32},
92 { "flags": 4, "matrix": [2, 8], "x":138, "y": 32},
93 { "flags": 4, "matrix": [2, 9], "x":151, "y": 32},
94 { "flags": 4, "matrix": [2, 10], "x":164, "y": 32},
95 { "flags": 4, "matrix": [2, 11], "x":177, "y": 32},
96 { "flags": 4, "matrix": [2, 12], "x":190, "y": 32},
97 { "flags": 4, "matrix": [2, 13], "x":203, "y": 32},
98 { "flags": 4, "matrix": [2, 15], "x":224, "y": 32},
99
100 { "flags": 4, "matrix": [3, 0], "x": 0, "y": 48},
101 { "flags": 4, "matrix": [3, 11], "x": 16, "y": 48},
102 { "flags": 4, "matrix": [3, 1], "x": 29, "y": 48},
103 { "flags": 4, "matrix": [3, 2], "x": 42, "y": 48},
104 { "flags": 4, "matrix": [3, 3], "x": 65, "y": 48},
105 { "flags": 4, "matrix": [3, 4], "x": 78, "y": 48},
106 { "flags": 4, "matrix": [3, 5], "x": 91, "y": 48},
107 { "flags": 4, "matrix": [3, 6], "x":105, "y": 48},
108 { "flags": 4, "matrix": [3, 7], "x":118, "y": 48},
109 { "flags": 4, "matrix": [3, 8], "x":131, "y": 48},
110 { "flags": 4, "matrix": [3, 9], "x":144, "y": 48},
111 { "flags": 4, "matrix": [3, 10], "x":158, "y": 48},
112 { "flags": 4, "matrix": [3, 13], "x":171, "y": 48},
113 { "flags": 4, "matrix": [3, 14], "x":184, "y": 48},
114 { "flags": 4, "matrix": [3, 15], "x":210, "y": 48},
115
116 { "flags": 4, "matrix": [4, 0], "x": 0, "y": 64},
117 { "flags": 4, "matrix": [4, 1], "x": 37, "y": 64},
118 { "flags": 4, "matrix": [4, 2], "x": 59, "y": 64},
119 { "flags": 4, "matrix": [4, 5], "x": 85, "y": 64},
120 { "flags": 4, "matrix": [4, 9], "x":105, "y": 64},
121 { "flags": 4, "matrix": [4, 10], "x":138, "y": 64},
122 { "flags": 4, "matrix": [4, 11], "x":158, "y": 64},
123 { "flags": 4, "matrix": [4, 13], "x":196, "y": 64},
124 { "flags": 4, "matrix": [4, 14], "x":210, "y": 64},
125 { "flags": 4, "matrix": [4, 15], "x":224, "y": 64},
126
127 { "flags": 2, "x":0, "y":0},
128 { "flags": 2, "x":0, "y":6},
129 { "flags": 2, "x":0, "y":13},
130 { "flags": 2, "x":0, "y":19},
131 { "flags": 2, "x":0, "y":25},
132 { "flags": 2, "x":0, "y":32},
133 { "flags": 2, "x":0, "y":38},
134 { "flags": 2, "x":0, "y":45},
135 { "flags": 2, "x":0, "y":51},
136 { "flags": 2, "x":0, "y":57},
137 { "flags": 2, "x":0, "y":64},
138
139 { "flags": 2, "x":224, "y":0},
140 { "flags": 2, "x":224, "y":6},
141 { "flags": 2, "x":224, "y":13},
142 { "flags": 2, "x":224, "y":19},
143 { "flags": 2, "x":224, "y":25},
144 { "flags": 2, "x":224, "y":32},
145 { "flags": 2, "x":224, "y":38},
146 { "flags": 2, "x":224, "y":45},
147 { "flags": 2, "x":224, "y":51},
148 { "flags": 2, "x":224, "y":57},
149 { "flags": 2, "x":224, "y":64}
150 ]
151 },
152 "layouts": {
153 "LAYOUT": {
154 "layout": [
155 { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
156 { "label": "!", "matrix": [0, 1], "x": 1, "y":0 },
157 { "label": "@", "matrix": [0, 2], "x": 2, "y": 0 },
158 { "label": "#", "matrix": [0, 3], "x": 3, "y": 0 },
159 { "label": "$", "matrix": [0, 4], "x": 4, "y": 0 },
160 { "label": "%", "matrix": [0, 5], "x": 5, "y": 0 },
161 { "label": "^", "matrix": [0, 6], "x": 6, "y": 0 },
162 { "label": "&", "matrix": [0, 7], "x": 8.75, "y": 0 },
163 { "label": "*", "matrix": [0, 8], "x": 9.75, "y": 0 },
164 { "label": "(", "matrix": [0, 9], "x": 10.75, "y": 0 },
165 { "label": ")", "matrix": [0, 10], "x": 11.75, "y": 0 },
166 { "label": "_", "matrix": [0, 11], "x": 12.75, "y": 0 },
167 { "label": "+", "matrix": [0, 12], "x": 13.75, "y": 0 },
168 { "label": "Bksp", "matrix": [0, 13], "w": 2, "x": 14.75, "y": 0 },
169 { "label": "Del", "matrix": [0, 15], "x": 17, "y": 0 },
170
171 { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1.25 },
172 { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1.25 },
173 { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1.25 },
174 { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1.25 },
175 { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1.25 },
176 { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1.25 },
177 { "label": "Y", "matrix": [1, 6], "x": 8.25, "y": 1.25 },
178 { "label": "U", "matrix": [1, 7], "x": 9.25, "y": 1.25 },
179 { "label": "I", "matrix": [1, 8], "x": 10.25, "y": 1.25 },
180 { "label": "O", "matrix": [1, 9], "x": 11.25, "y": 1.25 },
181 { "label": "P", "matrix": [1, 10], "x": 12.25, "y": 1.25 },
182 { "label": "{", "matrix": [1, 11], "x": 13.25, "y": 1.25 },
183 { "label": "}", "matrix": [1, 12], "x": 14.25, "y": 1.25 },
184 { "label": "|", "matrix": [1, 13], "w": 1.5, "x": 15.25, "y": 1.25 },
185 { "label": "PageUp", "matrix": [1, 15], "x": 17, "y": 1.25 },
186
187 { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2.25 },
188 { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2.25 },
189 { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2.25 },
190 { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2.25 },
191 { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2.25 },
192 { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2.25 },
193 { "label": "H", "matrix": [2, 6], "x": 8.5, "y": 2.25 },
194 { "label": "J", "matrix": [2, 7], "x": 9.5, "y": 2.25 },
195 { "label": "K", "matrix": [2, 8], "x": 10.5, "y": 2.25 },
196 { "label": "L", "matrix": [2, 9], "x": 11.5, "y": 2.25 },
197 { "label": ":", "matrix": [2, 10], "x": 12.5, "y": 2.25 },
198 { "label": "'", "matrix": [2, 11], "x": 13.5, "y": 2.25 },
199 { "label": ":", "matrix": [2, 12], "x": 14.5, "y": 2.25 },
200 { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 14.5, "y": 2.25 },
201 { "label": "PageDn", "matrix": [2, 15], "x": 17, "y": 2.25 },
202
203 { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3.25 },
204 { "label": ":", "matrix": [3, 11], "x": 1.25, "y": 3.25 },
205 { "label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3.25 },
206 { "label": "X", "matrix": [3, 2], "x": 3.25, "y": 3.25 },
207 { "label": "C", "matrix": [3, 3], "x": 4.25, "y": 3.25 },
208 { "label": "V", "matrix": [3, 4], "x": 5.25, "y": 3.25 },
209 { "label": "B", "matrix": [3, 5], "x": 6.25, "y": 3.25 },
210 { "label": "B", "matrix": [3, 6], "x": 8, "y": 3.25 },
211 { "label": "N", "matrix": [3, 7], "x": 9, "y": 3.25 },
212 { "label": "M", "matrix": [3, 8], "x": 10, "y": 3.25 },
213 { "label": "<", "matrix": [3, 9], "x": 11, "y": 3.25 },
214 { "label": ">", "matrix": [3, 10], "x": 12, "y": 3.25 },
215 { "label": "?", "matrix": [3, 13], "x": 13, "y": 3.25 },
216 { "label": "Shift", "matrix": [3, 14], "w": 1.75, "x": 14, "y": 3.25 },
217 { "label": "Up", "matrix": [3, 15], "x": 16, "y": 3.25 },
218
219 { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4.25 },
220 { "label": "Alt", "matrix": [4, 1], "w": 1.5, "x": 3, "y": 4.25 },
221 { "label": "Space", "matrix": [4, 2], "w": 2, "x": 4.5, "y": 4.25 },
222 { "label": "Win", "matrix": [4, 5], "w": 1.25, "x": 6.5, "y": 4.25 },
223 { "label": "Space", "matrix": [4, 9], "w": 2.5, "x": 8, "y": 4.25 },
224 { "label": "Alt", "matrix": [4, 10], "w":1.5, "x": 10.5, "y": 4.25 },
225 { "label": "Fn", "matrix": [4, 11], "w":1.5, "x": 12, "y": 4.25 },
226 { "label": "Left", "matrix": [4, 13], "x": 15, "y": 4.25 },
227 { "label": "Down", "matrix": [4, 14], "x": 16, "y": 4.25 },
228 { "label": "Right", "matrix": [4, 15], "x": 17, "y": 4.25 }
229 ]
230 }
231 }
232}
diff --git a/keyboards/monsgeek/m6/keymaps/default/keymap.c b/keyboards/monsgeek/m6/keymaps/default/keymap.c
new file mode 100644
index 0000000000..8a03db1790
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/default/keymap.c
@@ -0,0 +1,76 @@
1/* Copyright (C) 2023 jonylee@hfd
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#include QMK_KEYBOARD_H
18
19enum __layers {
20 WIN_B,
21 WIN_W,
22 WIN_FN,
23 MAC_B,
24 MAC_W,
25 MAC_FN
26};
27
28#define KC_TASK LGUI(KC_TAB)
29#define KC_FLXP LGUI(KC_E)
30
31// clang-format off
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33
34 [WIN_B] = LAYOUT( /* Base */
35 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
36 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
37 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
38 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
39 KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
40
41 [WIN_W] = LAYOUT( /* Base */
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
46 _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
47
48 [WIN_FN] = LAYOUT(
49 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_MOD,
50 _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, _______, KC_HOME,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
52 _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
53 _______, _______, _______, GU_TOGG, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
54
55 [MAC_B] = LAYOUT( /* Base */
56 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_HOME,
57 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
58 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
59 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
60 KC_LCTL, KC_LGUI, KC_SPC, KC_LALT, KC_SPC, KC_RGUI, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
61
62 [MAC_W] = LAYOUT(
63 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
64 _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
65 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
66 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
67 _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
68
69 [MAC_FN] = LAYOUT( /* FN */
70 KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, _______, RGB_MOD,
71 _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, _______, KC_HOME,
72 _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
73 _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
74 _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
75};
76
diff --git a/keyboards/monsgeek/m6/keymaps/via/keymap.c b/keyboards/monsgeek/m6/keymaps/via/keymap.c
new file mode 100644
index 0000000000..b7e8cecd71
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/via/keymap.c
@@ -0,0 +1,76 @@
1/* Copyright (C) 2023 jonylee@hfd
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#include QMK_KEYBOARD_H
18
19enum __layers {
20 WIN_B,
21 WIN_W,
22 WIN_FN,
23 MAC_B,
24 MAC_W,
25 MAC_FN
26};
27
28#define KC_TASK LGUI(KC_TAB)
29#define KC_FLXP LGUI(KC_E)
30#define KC_SIRI LCMD(KC_SPC)
31// clang-format off
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33
34 [WIN_B] = LAYOUT( /* Base */
35 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
36 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
37 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
38 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
39 KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, MO(WIN_FN), KC_LEFT, KC_DOWN, KC_RGHT),
40
41 [WIN_W] = LAYOUT( /* Base */
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
46 _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
47
48 [WIN_FN] = LAYOUT(
49 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_MOD,
50 _______, _______,TG(WIN_W),_______, _______, _______, _______, _______, KC_INS, DF(MAC_B),KC_PSCR,_______, _______, _______, KC_HOME,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
52 _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
53 _______, _______, _______, GU_TOGG, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
54
55 [MAC_B] = LAYOUT( /* Base */
56 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_DEL,
57 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_PGUP,
58 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS, KC_ENT, KC_PGDN,
59 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
60 KC_LCTL, KC_LGUI, KC_SPC, KC_LALT, KC_SPC, KC_RGUI, MO(MAC_FN), KC_LEFT, KC_DOWN, KC_RGHT),
61
62 [MAC_W] = LAYOUT(
63 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
64 _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
65 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
66 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_W,
67 _______, _______, _______, _______, _______, _______, _______, KC_A, KC_S, KC_D),
68
69 [MAC_FN] = LAYOUT( /* FN */
70 KC_GRV, KC_BRID, KC_BRIU, KC_MCTL, KC_SIRI, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,KC_VOLU, _______, RGB_MOD,
71 _______, _______,TG(MAC_W),_______, _______, _______, _______, _______, KC_INS, DF(WIN_B),KC_PSCR,_______, _______, _______, KC_HOME,
72 _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SPD, RGB_SPI, _______, RGB_HUI, KC_END,
73 _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_VAI,
74 _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_VAD, RGB_SAI),
75};
76
diff --git a/keyboards/monsgeek/m6/keymaps/via/rules.mk b/keyboards/monsgeek/m6/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/monsgeek/m6/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/monsgeek/m6/m6.c b/keyboards/monsgeek/m6/m6.c
new file mode 100644
index 0000000000..1823d865cc
--- /dev/null
+++ b/keyboards/monsgeek/m6/m6.c
@@ -0,0 +1,197 @@
1/* Copyright (C) 2023 jonylee@hfd
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#include "quantum.h"
18// clang-format off
19#ifdef RGB_MATRIX_ENABLE
20const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
21/* Refer to IS31 manual for these locations
22 * driver
23 * | R location
24 * | | G location
25 * | | | B location
26 * | | | | */
27 {0, A_1, B_1, C_1},
28 {0, A_2, B_2, C_2},
29 {0, A_3, B_3, C_3},
30 {0, A_4, B_4, C_4},
31 {0, A_5, B_5, C_5},
32 {0, A_6, B_6, C_6},
33 {0, A_7, B_7, C_7},
34 {0, A_8, B_8, C_8},
35 {0, A_9, B_9, C_9},
36 {0, A_10, B_10, C_10},
37 {0, A_11, B_11, C_11},
38 {0, A_12, B_12, C_12},
39 {0, A_13, B_13, C_13},
40 {0, A_14, B_14, C_14},
41 {1, D_1, E_1, F_1},
42
43 {0, D_1, E_1, F_1},
44 {0, D_2, E_2, F_2},
45 {0, D_3, E_3, F_3},
46 {0, D_4, E_4, F_4},
47 {0, D_5, E_5, F_5},
48 {0, D_6, E_6, F_6},
49 {0, D_7, E_7, F_7},
50 {0, D_8, E_8, F_8},
51 {0, D_9, E_9, F_9},
52 {0, D_10, E_10, F_10},
53 {0, D_11, E_11, F_11},
54 {0, D_12, E_12, F_12},
55 {0, D_13, E_13, F_13},
56 {0, D_14, E_14, F_14},
57 {1, D_2, E_2, F_2},
58
59 {0, G_1, H_1, I_1},
60 {0, G_2, H_2, I_2},
61 {0, G_3, H_3, I_3},
62 {0, G_4, H_4, I_4},
63 {0, G_5, H_5, I_5},
64 {0, G_6, H_6, I_6},
65 {0, G_7, H_7, I_7},
66 {0, G_8, H_8, I_8},
67 {0, G_9, H_9, I_9},
68 {0, G_10, H_10, I_10},
69 {0, G_11, H_11, I_11},
70 {0, G_12, H_12, I_12},
71 {0, A_15, B_15, C_15},
72 {0, G_13, H_13, I_13},
73 {1, D_3, E_3, F_3},
74
75 {0, J_1, K_1, L_1},
76 {0, A_16, B_16, C_16},
77 {0, J_2, K_2, L_2},
78 {0, J_3, K_3, L_3},
79 {0, J_4, K_4, L_4},
80 {0, J_5, K_5, L_5},
81 {0, J_6, K_6, L_6},
82 {0, J_7, K_7, L_7},
83 {0, J_8, K_8, L_8},
84 {0, J_9, K_9, L_9},
85 {0, J_10, K_10, L_10},
86 {0, J_11, K_11, L_11},
87 {0, J_12, K_12, L_12},
88 {1, D_7, E_7, F_7},
89 {1, D_4, E_4, F_4},
90
91 {0, J_13, K_13, L_13},
92 {0, J_14, K_14, L_14},
93 {0, J_15, K_15, L_15},
94 {0, J_16, K_16, L_16},
95 {0, G_14, H_14, I_14},
96 {0, G_15, H_15, I_15},
97 {0, G_16, H_16, I_16},
98 {0, D_15, E_15, F_15},
99 {1, D_6, E_6, F_6},
100 {1, D_5, E_5, F_5},
101
102
103 {1, G_1, H_1, I_1},
104 {1, G_2, H_2, I_2},
105 {1, G_3, H_3, I_3},
106 {1, G_4, H_4, I_4},
107 {1, G_5, H_5, I_5},
108 {1, G_6, H_6, I_6},
109 {1, G_7, H_7, I_7},
110 {1, G_8, H_8, I_8},
111 {1, G_9, H_9, I_9},
112 {1, G_10, H_10, I_10},
113 {1, G_11, H_11, I_11},
114
115 {1, J_1, K_1, L_1},
116 {1, J_2, K_2, L_2},
117 {1, J_3, K_3, L_3},
118 {1, J_4, K_4, L_4},
119 {1, J_5, K_5, L_5},
120 {1, J_6, K_6, L_6},
121 {1, J_7, K_7, L_7},
122 {1, J_8, K_8, L_8},
123 {1, J_9, K_9, L_9},
124 {1, J_10, K_10, L_10},
125 {1, J_11, K_11, L_11},
126};
127
128// clang-format on
129bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max)
130{
131 if (!rgb_matrix_indicators_advanced_user(led_min, led_max))
132 {
133 return false;
134 }
135
136 if (host_keyboard_led_state().caps_lock)
137 {
138 RGB_MATRIX_INDICATOR_SET_COLOR(30, 255, 255, 255);
139 }
140 else
141 {
142 if (!rgb_matrix_get_flags())
143 {
144 RGB_MATRIX_INDICATOR_SET_COLOR(30, 0, 0, 0);
145 }
146 }
147 if (keymap_config.no_gui)
148 {
149 RGB_MATRIX_INDICATOR_SET_COLOR(63, 255, 255, 255);
150 }
151 else
152 {
153 if (!rgb_matrix_get_flags())
154 {
155 RGB_MATRIX_INDICATOR_SET_COLOR(63, 0, 0, 0);
156 }
157 }
158 return true;
159}
160
161#endif
162bool process_record_kb(uint16_t keycode, keyrecord_t *record)
163{
164 if (!process_record_user(keycode, record))
165 {
166 return false;
167 }
168 switch (keycode)
169 {
170 case RGB_TOG:
171 if (record->event.pressed)
172 {
173 switch (rgb_matrix_get_flags())
174 {
175 case LED_FLAG_ALL:
176 {
177 rgb_matrix_set_flags(LED_FLAG_NONE);
178 rgb_matrix_set_color_all(0, 0, 0);
179 }
180 break;
181 default:
182 {
183 rgb_matrix_set_flags(LED_FLAG_ALL);
184 }
185 break;
186 }
187 }
188 if (!rgb_matrix_is_enabled())
189 {
190 rgb_matrix_set_flags(LED_FLAG_ALL);
191 rgb_matrix_enable();
192 }
193 return false;
194 default:
195 return true;
196 }
197} \ No newline at end of file
diff --git a/keyboards/monsgeek/m6/mcuconf.h b/keyboards/monsgeek/m6/mcuconf.h
new file mode 100644
index 0000000000..e2884f3828
--- /dev/null
+++ b/keyboards/monsgeek/m6/mcuconf.h
@@ -0,0 +1,24 @@
1/* Copyright (C) 2023 jonylee@hfd
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#pragma once
17
18#include_next <mcuconf.h>
19
20#undef WB32_SPI_USE_QSPI
21#define WB32_SPI_USE_QSPI TRUE
22
23#undef WB32_I2C_USE_I2C1
24#define WB32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/monsgeek/m6/readme.md b/keyboards/monsgeek/m6/readme.md
new file mode 100644
index 0000000000..ca30e5da20
--- /dev/null
+++ b/keyboards/monsgeek/m6/readme.md
@@ -0,0 +1,19 @@
1# monsgeek m6 keyboard
2
3A customizable 60% keyboard.
4
5* Keyboard Maintainer: [jonylee@hfd](https://github.com/jonylee1986)
6* Hardware Supported: m6
7* Hardware Availability: [monsgeek](https://www.monsgeek.com/)
8
9Make example for this keyboard (after setting up your build environment):
10
11 make monsgeek/m6:default
12
13Flashing example for this keyboard:
14
15 make monsgeek/m6:default:flash
16
17**Reset Key**: Hold down the key located at *K00*, which programmed as *Esc* while plugging in the keyboard.
18
19See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/monsgeek/m6/rules.mk b/keyboards/monsgeek/m6/rules.mk
new file mode 100644
index 0000000000..24d5f6f52e
--- /dev/null
+++ b/keyboards/monsgeek/m6/rules.mk
@@ -0,0 +1,2 @@
1EEPROM_DRIVER = wear_leveling
2WEAR_LEVELING_DRIVER = spi_flash
diff --git a/keyboards/stront/config.h b/keyboards/stront/config.h
new file mode 100644
index 0000000000..4c88e411ac
--- /dev/null
+++ b/keyboards/stront/config.h
@@ -0,0 +1,95 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#define SERIAL_USART_FULL_DUPLEX
7#define SERIAL_USART_PIN_SWAP
8#define SERIAL_USART_TX_PIN GP0
9#define SERIAL_USART_RX_PIN GP1
10
11#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
12#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
13
14/* any side can be master by default, enable split sync to support it */
15#define EE_HANDS
16#define SPLIT_LED_STATE_ENABLE
17#define SPLIT_MODS_ENABLE
18#define SPLIT_POINTING_ENABLE
19
20/* SPI config for display/touchpad */
21#define SPI_DRIVER SPID1
22#define SPI_SCK_PIN GP10
23#define SPI_MOSI_PIN GP11
24#define SPI_MISO_PIN GP12
25
26/* touchpad config */
27#define POINTING_DEVICE_RIGHT
28#define POINTING_DEVICE_CS_PIN GP9
29#define POINTING_DEVICE_ROTATION_180
30#define CIRQUE_PINNACLE_DIAMETER_MM 40
31
32/* LCD config */
33#define LCD_DC_PIN GP12
34#define LCD_CS_PIN GP9
35#define LCD_RST_PIN GP13
36#define BACKLIGHT_PWM_DRIVER PWMD7
37#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A
38#define QUANTUM_PAINTER_LVGL_USE_CUSTOM_CONF
39
40/* RGB config */
41#ifdef RGB_MATRIX_ENABLE
42# define SPLIT_TRANSPORT_MIRROR
43# define RGB_MATRIX_LED_COUNT RGBLED_NUM
44# define RGB_DISABLE_WHEN_USB_SUSPENDED
45# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
46# define RGB_MATRIX_KEYPRESSES
47
48# define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue
49# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes
50# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static gradient left to right, speed controls how much gradient changes
51# define ENABLE_RGB_MATRIX_BREATHING // Single hue brightness cycling animation
52# define ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right
53# define ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right
54# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation
55# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness
56# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades saturation
57# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness
58# define ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard solid hue cycling through full gradient
59# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient scrolling left to right
60# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
61# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Full gradient scrolling out to in
62# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Full dual gradients scrolling out to in
63# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient Chevron shaped scrolling left to right
64# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Full gradient spinning pinwheel around center of keyboard
65# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
66# define ENABLE_RGB_MATRIX_DUAL_BEACON // Full gradient spinning around center of keyboard
67# define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard
68# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Full dual gradients spinning two halfs of keyboard
69# define ENABLE_RGB_MATRIX_RAINDROPS // Randomly changes a single key's hue
70# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation
71# define ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount at the same time, then shifts back
72# define ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left
73# define ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right
74# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Single hue fractal filled keys pulsing horizontally out to edges
75# define ENABLE_RGB_MATRIX_PIXEL_FLOW // Pulsing RGB flow along LED wiring with random hues
76# define ENABLE_RGB_MATRIX_PIXEL_RAIN // Randomly light keys with random hues
77# if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
78# define ENABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM!
79# define ENABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation
80# endif
81# if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES)
82# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Pulses keys hit to hue & value then fades value out
83# define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Static single hue, pulses keys hit to shifted hue then fades to current hue
84# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
85# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
86# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
87# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
88# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
89# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
90# define ENABLE_RGB_MATRIX_SPLASH // Full gradient & value pulse away from a single key hit then fades value out
91# define ENABLE_RGB_MATRIX_MULTISPLASH // Full gradient & value pulse away from multiple key hits then fades value out
92# define ENABLE_RGB_MATRIX_SOLID_SPLASH // Hue & value pulse away from a single key hit then fades value out
93# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Hue & value pulse away from multiple key hits then fades value out
94# endif
95#endif
diff --git a/keyboards/stront/display.c b/keyboards/stront/display.c
new file mode 100644
index 0000000000..f7b071d1a9
--- /dev/null
+++ b/keyboards/stront/display.c
@@ -0,0 +1,125 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "display.h"
5#include "qp.h"
6#include "lvgl_helpers.h"
7
8/* shared styles */
9lv_style_t style_screen;
10lv_style_t style_container;
11lv_style_t style_button;
12lv_style_t style_button_active;
13
14/* screens */
15static lv_obj_t *screen_home;
16
17/* home screen content */
18static lv_obj_t *label_shift;
19static lv_obj_t *label_ctrl;
20static lv_obj_t *label_alt;
21static lv_obj_t *label_gui;
22static lv_obj_t *label_caps;
23
24void init_styles(void) {
25 lv_style_init(&style_screen);
26 lv_style_set_bg_color(&style_screen, lv_color_black());
27
28 lv_style_init(&style_container);
29 lv_style_set_pad_top(&style_container, 0);
30 lv_style_set_pad_bottom(&style_container, 0);
31 lv_style_set_pad_left(&style_container, 0);
32 lv_style_set_pad_right(&style_container, 0);
33 lv_style_set_bg_opa(&style_container, 0);
34 lv_style_set_border_width(&style_container, 0);
35 lv_style_set_width(&style_container, lv_pct(100));
36 lv_style_set_height(&style_container, LV_SIZE_CONTENT);
37
38 lv_style_init(&style_button);
39 lv_style_set_pad_top(&style_button, 4);
40 lv_style_set_pad_bottom(&style_button, 4);
41 lv_style_set_pad_left(&style_button, 4);
42 lv_style_set_pad_right(&style_button, 4);
43 lv_style_set_radius(&style_button, 6);
44 lv_style_set_text_color(&style_button, lv_palette_main(LV_PALETTE_AMBER));
45
46 lv_style_init(&style_button_active);
47 lv_style_set_bg_color(&style_button_active, lv_palette_main(LV_PALETTE_AMBER));
48 lv_style_set_bg_opa(&style_button_active, LV_OPA_100);
49 lv_style_set_text_color(&style_button_active, lv_color_black());
50}
51
52void init_screen_home(void) {
53 screen_home = lv_scr_act();
54
55 lv_obj_add_style(screen_home, &style_screen, 0);
56 use_flex_column(screen_home);
57
58 lv_obj_t *mods = lv_obj_create(screen_home);
59 lv_obj_add_style(mods, &style_container, 0);
60 use_flex_column(mods);
61
62 lv_obj_t *mods_row1 = lv_obj_create(mods);
63 lv_obj_add_style(mods_row1, &style_container, 0);
64 use_flex_row(mods_row1);
65 label_gui = create_button(mods_row1, "GUI", &style_button, &style_button_active);
66 label_alt = create_button(mods_row1, "ALT", &style_button, &style_button_active);
67
68 lv_obj_t *mods_row2 = lv_obj_create(mods);
69 lv_obj_add_style(mods_row2, &style_container, 0);
70 use_flex_row(mods_row2);
71 label_ctrl = create_button(mods_row2, "CTL", &style_button, &style_button_active);
72 label_shift = create_button(mods_row2, "SFT", &style_button, &style_button_active);
73
74 lv_obj_t *label_stront = lv_label_create(screen_home);
75 lv_label_set_text(label_stront, "stront");
76#if LV_FONT_MONTSERRAT_48
77 lv_obj_set_style_text_font(label_stront, &lv_font_montserrat_48, LV_PART_MAIN);
78#endif
79
80 label_caps = create_button(screen_home, "CAPS", &style_button, &style_button_active);
81}
82
83bool display_init_kb(void) {
84 dprint("display_init_kb - start\n");
85
86 backlight_enable();
87
88 painter_device_t display = qp_st7789_make_spi_device(240, 300, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, 16, 3);
89 qp_set_viewport_offsets(display, 0, 20);
90
91 if (!qp_init(display, QP_ROTATION_180) || !qp_power(display, true) || !qp_lvgl_attach(display)) return false;
92
93 dprint("display_init_kb - initialised\n");
94
95 lv_disp_t *lv_display = lv_disp_get_default();
96 lv_theme_t *lv_theme = lv_theme_default_init(lv_display, lv_palette_main(LV_PALETTE_AMBER), lv_palette_main(LV_PALETTE_BLUE), true, LV_FONT_DEFAULT);
97 lv_disp_set_theme(lv_display, lv_theme);
98 init_styles();
99
100 bool res = display_init_user();
101 if (res) {
102 dprint("display_init_kb - adding default home screen\n");
103 init_screen_home();
104 }
105
106 return true;
107}
108
109__attribute__((weak)) bool display_init_user(void) {
110 return true;
111}
112
113__attribute__((weak)) void display_housekeeping_task(void) {
114 dprint("display_housekeeping_task_kb\n");
115
116 toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
117 toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
118 toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
119 toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
120}
121
122__attribute__((weak)) void display_process_caps(bool active) {
123 dprint("display_process_caps\n");
124 toggle_state(label_caps, LV_STATE_PRESSED, active);
125}
diff --git a/keyboards/stront/display.h b/keyboards/stront/display.h
new file mode 100644
index 0000000000..4249ff468e
--- /dev/null
+++ b/keyboards/stront/display.h
@@ -0,0 +1,20 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "qp_lvgl.h"
5
6#define MODS_SHIFT ((get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT)
7#define MODS_CTRL ((get_mods() | get_oneshot_mods()) & MOD_MASK_CTRL)
8#define MODS_ALT ((get_mods() | get_oneshot_mods()) & MOD_MASK_ALT)
9#define MODS_GUI ((get_mods() | get_oneshot_mods()) & MOD_MASK_GUI)
10
11/* shared styles */
12extern lv_style_t style_screen;
13extern lv_style_t style_container;
14extern lv_style_t style_button;
15extern lv_style_t style_button_active;
16
17bool display_init_kb(void);
18bool display_init_user(void);
19void display_housekeeping_task(void);
20void display_process_caps(bool active);
diff --git a/keyboards/stront/halconf.h b/keyboards/stront/halconf.h
new file mode 100644
index 0000000000..0aa1ff58d8
--- /dev/null
+++ b/keyboards/stront/halconf.h
@@ -0,0 +1,9 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#define HAL_USE_SPI TRUE
7#define HAL_USE_PWM TRUE
8
9#include_next <halconf.h>
diff --git a/keyboards/stront/info.json b/keyboards/stront/info.json
new file mode 100644
index 0000000000..97df3477af
--- /dev/null
+++ b/keyboards/stront/info.json
@@ -0,0 +1,147 @@
1{
2 "keyboard_name": "stront",
3 "manufacturer": "zzeneg",
4 "url": "https://github.com/zzeneg/stront",
5 "maintainer": "zzeneg",
6 "layouts": {
7 "LAYOUT": {
8 "layout": [
9 { "matrix": [0, 1], "x": 2, "y": 0 },
10 { "matrix": [0, 2], "x": 3, "y": 0 },
11 { "matrix": [0, 3], "x": 4, "y": 0 },
12 { "matrix": [0, 4], "x": 5, "y": 0 },
13
14 { "matrix": [4, 4], "x": 8, "y": 0 },
15 { "matrix": [4, 3], "x": 9, "y": 0 },
16 { "matrix": [4, 2], "x": 10, "y": 0 },
17 { "matrix": [4, 1], "x": 11, "y": 0 },
18
19 { "matrix": [0, 0], "x": 0, "y": 1 },
20 { "matrix": [1, 0], "x": 1, "y": 1 },
21 { "matrix": [1, 1], "x": 2, "y": 1 },
22 { "matrix": [1, 2], "x": 3, "y": 1 },
23 { "matrix": [1, 3], "x": 4, "y": 1 },
24 { "matrix": [1, 4], "x": 5, "y": 1 },
25
26 { "matrix": [5, 4], "x": 8, "y": 1 },
27 { "matrix": [5, 3], "x": 9, "y": 1 },
28 { "matrix": [5, 2], "x": 10, "y": 1 },
29 { "matrix": [5, 1], "x": 11, "y": 1 },
30 { "matrix": [5, 0], "x": 12, "y": 1 },
31 { "matrix": [4, 0], "x": 13, "y": 1 },
32
33 { "matrix": [3, 0], "x": 0, "y": 2 },
34 { "matrix": [2, 0], "x": 1, "y": 2 },
35 { "matrix": [2, 1], "x": 2, "y": 2 },
36 { "matrix": [2, 2], "x": 3, "y": 2 },
37 { "matrix": [2, 3], "x": 4, "y": 2 },
38 { "matrix": [2, 4], "x": 5, "y": 2 },
39
40 { "matrix": [6, 4], "x": 8, "y": 2 },
41 { "matrix": [6, 3], "x": 9, "y": 2 },
42 { "matrix": [6, 2], "x": 10, "y": 2 },
43 { "matrix": [6, 1], "x": 11, "y": 2 },
44 { "matrix": [6, 0], "x": 12, "y": 2 },
45 { "matrix": [7, 0], "x": 13, "y": 2 },
46
47 { "matrix": [3, 2], "x": 4, "y": 3 },
48 { "matrix": [3, 3], "x": 5, "y": 3 },
49 { "matrix": [3, 4], "x": 6, "y": 3 },
50 { "matrix": [7, 4], "x": 7, "y": 3 },
51 { "matrix": [7, 3], "x": 8, "y": 3 },
52 { "matrix": [7, 2], "x": 9, "y": 3 }
53 ]
54 }
55 },
56 "processor": "RP2040",
57 "bootloader": "rp2040",
58 "diode_direction": "COL2ROW",
59 "matrix_pins": {
60 "cols": ["GP2", "GP3", "GP4", "GP5", "GP6"],
61 "rows": ["GP28", "GP27", "GP26", "GP15"]
62 },
63 "split": {
64 "enabled": true
65 },
66 "encoder": {
67 "rotary": [
68 {
69 "pin_a": "GP7",
70 "pin_b": "GP8",
71 "resolution": 4
72 }
73 ]
74 },
75 "features": {
76 "bootmagic": true,
77 "console": false,
78 "encoder": true,
79 "backlight": true,
80 "extrakey": true,
81 "rgblight": false,
82 "rgb_matrix": true,
83 "nkro": false
84 },
85 "backlight": {
86 "pin": "GP14"
87 },
88 "ws2812": {
89 "pin": "GP29"
90 },
91 "rgblight": {
92 "led_count": 38,
93 "split": true,
94 "split_count": [19, 19]
95 },
96 "rgb_matrix": {
97 "driver": "WS2812",
98 "led_count": 38,
99 "split_count": [19, 19],
100 "layout": [
101 { "flags": 4, "matrix": [0, 4], "x": 71, "y": 7 },
102 { "flags": 4, "matrix": [0, 3], "x": 57, "y": 5 },
103 { "flags": 4, "matrix": [0, 2], "x": 44, "y": 0 },
104 { "flags": 4, "matrix": [0, 1], "x": 27, "y": 5 },
105 { "flags": 4, "matrix": [1, 1], "x": 29, "y": 22 },
106 { "flags": 4, "matrix": [1, 0], "x": 14, "y": 26 },
107 { "flags": 4, "matrix": [0, 0], "x": 0, "y": 26 },
108 { "flags": 4, "matrix": [3, 0], "x": 2, "y": 43 },
109 { "flags": 4, "matrix": [2, 0], "x": 16, "y": 43 },
110 { "flags": 4, "matrix": [2, 1], "x": 30, "y": 38 },
111 { "flags": 4, "matrix": [2, 2], "x": 44, "y": 33 },
112 { "flags": 4, "matrix": [1, 2], "x": 44, "y": 17 },
113 { "flags": 4, "matrix": [1, 3], "x": 57, "y": 22 },
114 { "flags": 4, "matrix": [1, 4], "x": 71, "y": 24 },
115 { "flags": 4, "matrix": [2, 4], "x": 71, "y": 40 },
116 { "flags": 4, "matrix": [2, 3], "x": 57, "y": 38 },
117 { "flags": 4, "matrix": [3, 2], "x": 56, "y": 57 },
118 { "flags": 4, "matrix": [3, 3], "x": 71, "y": 59 },
119 { "flags": 4, "matrix": [3, 4], "x": 85, "y": 64 },
120
121 { "flags": 4, "matrix": [7, 4], "x": 139, "y": 64 },
122 { "flags": 4, "matrix": [7, 3], "x": 153, "y": 59 },
123 { "flags": 4, "matrix": [7, 2], "x": 168, "y": 57 },
124 { "flags": 4, "matrix": [6, 3], "x": 167, "y": 38 },
125 { "flags": 4, "matrix": [6, 4], "x": 153, "y": 40 },
126 { "flags": 4, "matrix": [5, 4], "x": 153, "y": 24 },
127 { "flags": 4, "matrix": [5, 3], "x": 167, "y": 22 },
128 { "flags": 4, "matrix": [5, 2], "x": 180, "y": 17 },
129 { "flags": 4, "matrix": [6, 2], "x": 180, "y": 33 },
130 { "flags": 4, "matrix": [6, 1], "x": 194, "y": 38 },
131 { "flags": 4, "matrix": [6, 0], "x": 208, "y": 43 },
132 { "flags": 4, "matrix": [7, 0], "x": 222, "y": 43 },
133 { "flags": 4, "matrix": [4, 0], "x": 224, "y": 26 },
134 { "flags": 4, "matrix": [5, 0], "x": 210, "y": 26 },
135 { "flags": 4, "matrix": [5, 1], "x": 195, "y": 22 },
136 { "flags": 4, "matrix": [4, 1], "x": 197, "y": 5 },
137 { "flags": 4, "matrix": [4, 2], "x": 180, "y": 0 },
138 { "flags": 4, "matrix": [4, 3], "x": 167, "y": 5 },
139 { "flags": 4, "matrix": [4, 4], "x": 153, "y": 7 }
140 ]
141 },
142 "usb": {
143 "device_version": "1.0.0",
144 "pid": "0x0844",
145 "vid": "0xFEED"
146 }
147}
diff --git a/keyboards/stront/keymaps/default/keymap.c b/keyboards/stront/keymaps/default/keymap.c
new file mode 100644
index 0000000000..793a2495c7
--- /dev/null
+++ b/keyboards/stront/keymaps/default/keymap.c
@@ -0,0 +1,107 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6enum layer_number {
7 // clang-format off
8 _QWERTY = 0,
9 _GAME,
10 _NAV,
11 _NUMBER,
12 _SYMBOL,
13 _FUNC,
14 _SYS
15 // clang-format on
16};
17
18// Left-hand home row mods
19#define HOME_A LGUI_T(KC_A)
20#define HOME_S LALT_T(KC_S)
21#define HOME_D LCTL_T(KC_D)
22#define HOME_F LSFT_T(KC_F)
23
24// Right-hand home row mods
25#define HOME_J RSFT_T(KC_J)
26#define HOME_K RCTL_T(KC_K)
27#define HOME_L LALT_T(KC_L)
28#define HOME_SCLN RGUI_T(KC_SCLN)
29
30// bottom mods
31#define SYM_SPC LT(_SYMBOL, KC_SPC)
32#define NUM_TAB LT(_NUMBER, KC_TAB)
33#define FUNC_ESC LT(_FUNC, KC_ESC)
34#define FUNC_ENT LT(_FUNC, KC_ENT)
35#define NAV_BSPC LT(_NAV, KC_BSPC)
36#define RALT_DEL LALT_T(KC_DEL)
37
38// game layer mods
39#define LALT_Q LALT_T(KC_Q)
40#define LSFT_MINS LSFT_T(KC_MINS)
41#define LCTL_ESC LCTL_T(KC_ESC)
42#define LGUI_QUOT LGUI_T(KC_QUOT)
43
44const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
45 /* QWERTY
46 * .---------------------------. .---------------------------.
47 * | W | E | R | T | | Y | U | I | O |
48 * .------+------+------+------+------+------| |------+------+------+------+------+------.
49 * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
50 * |------+------+------+------+------+------| |------+------+------+------+------+------|
51 * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
52 * '-----------------------------------------/ / \ \-----------------------------------------'
53 * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
54 * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
55 * `-------------''-------' '-------''-------------'
56 */
57 // clang-format off
58 [_QWERTY] = LAYOUT(
59 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
60 KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
61 KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
62 FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
63 ),
64
65 [_GAME] = LAYOUT(
66 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
67 LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
68 LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
69 LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
70 ),
71
72 [_NAV] = LAYOUT(
73 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
74 XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
75 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
76 FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
77 ),
78
79 [_NUMBER] = LAYOUT(
80 KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
81 KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
82 KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
83 KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
84 ),
85
86 [_SYMBOL] = LAYOUT(
87 LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
88 LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
89 LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
90 MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
91 ),
92
93 [_FUNC] = LAYOUT(
94 KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
95 KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
96 XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
97 _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
98 ),
99
100 [_SYS] = LAYOUT(
101 BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
102 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
103 EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
104 _______, QK_BOOT, _______, _______, QK_BOOT, _______
105 )
106 // clang-format on
107};
diff --git a/keyboards/stront/keymaps/hid/config.h b/keyboards/stront/keymaps/hid/config.h
new file mode 100644
index 0000000000..e96512f93f
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/config.h
@@ -0,0 +1,7 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_HID_SYNC, RPC_ID_USER_CAPS_WORD_SYNC, RPC_ID_USER_LAYER_SYNC
7#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0
diff --git a/keyboards/stront/keymaps/hid/hid_display.c b/keyboards/stront/keymaps/hid/hid_display.c
new file mode 100644
index 0000000000..a1e1311713
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/hid_display.c
@@ -0,0 +1,240 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "hid_display.h"
5#include "display.h"
6#include "raw_hid.h"
7#include "lvgl_helpers.h"
8
9uint16_t home_screen_timer = 0;
10
11/* screens */
12static lv_obj_t *screen_home;
13static lv_obj_t *screen_volume;
14static lv_obj_t *screen_media;
15
16/* home screen content */
17static lv_obj_t *label_time;
18static lv_obj_t *label_volume_home;
19static lv_obj_t *label_shift;
20static lv_obj_t *label_ctrl;
21static lv_obj_t *label_alt;
22static lv_obj_t *label_gui;
23static lv_obj_t *label_layer;
24static lv_obj_t *label_caps;
25#ifdef CAPS_WORD_ENABLE
26static lv_obj_t *label_caps_word;
27#endif
28static lv_obj_t *label_layout;
29
30/* volume screen content */
31static lv_obj_t *arc_volume;
32static lv_obj_t *label_volume_arc;
33
34/* media screen content */
35static lv_obj_t *label_media_artist;
36static lv_obj_t *label_media_title;
37
38enum layout { _EN = 0, _RU };
39void set_layout_label(uint8_t layout) {
40 switch (layout) {
41 case _EN:
42 lv_label_set_text(label_layout, "EN");
43 break;
44
45 case _RU:
46 lv_label_set_text(label_layout, "RU");
47 break;
48 }
49}
50
51void read_string(uint8_t *data, char *string_data) {
52 uint8_t data_length = data[1];
53 memcpy(string_data, data + 2, data_length);
54 string_data[data_length] = '\0';
55}
56
57void start_home_screen_timer(void) {
58 dprint("start_home_screen_timer\n");
59 home_screen_timer = timer_read();
60}
61
62void init_screen_home_custom(void) {
63 screen_home = lv_scr_act();
64 lv_obj_add_style(screen_home, &style_screen, 0);
65 use_flex_column(screen_home);
66
67 label_volume_home = lv_label_create(screen_home);
68 lv_label_set_text(label_volume_home, "");
69
70 lv_obj_t *mods = lv_obj_create(screen_home);
71 lv_obj_add_style(mods, &style_container, 0);
72 use_flex_row(mods);
73
74 label_gui = create_button(mods, "GUI", &style_button, &style_button_active);
75 label_alt = create_button(mods, "ALT", &style_button, &style_button_active);
76 label_ctrl = create_button(mods, "CTL", &style_button, &style_button_active);
77 label_shift = create_button(mods, "SFT", &style_button, &style_button_active);
78
79 label_time = lv_label_create(screen_home);
80 lv_label_set_text(label_time, "00:00");
81 lv_obj_set_style_text_font(label_time, &lv_font_montserrat_48, LV_PART_MAIN);
82
83 lv_obj_t *caps = lv_obj_create(screen_home);
84 lv_obj_add_style(caps, &style_container, 0);
85 use_flex_row(caps);
86
87 label_caps = create_button(caps, "CAPS", &style_button, &style_button_active);
88#ifdef CAPS_WORD_ENABLE
89 label_caps_word = create_button(caps, "CAPS WORD", &style_button, &style_button_active);
90#endif
91
92 lv_obj_t *bottom_row = lv_obj_create(screen_home);
93 lv_obj_add_style(bottom_row, &style_container, 0);
94
95 label_layer = lv_label_create(bottom_row);
96 lv_label_set_text(label_layer, "");
97 lv_obj_align(label_layer, LV_ALIGN_LEFT_MID, 10, 0);
98 display_process_layer_state(0);
99
100 label_layout = lv_label_create(bottom_row);
101 lv_label_set_text(label_layout, "");
102 lv_obj_align(label_layout, LV_ALIGN_RIGHT_MID, -10, 0);
103 set_layout_label(0);
104}
105
106void init_screen_volume(void) {
107 screen_volume = lv_obj_create(NULL);
108 lv_obj_add_style(screen_volume, &style_screen, 0);
109
110 arc_volume = lv_arc_create(screen_volume);
111 lv_obj_set_size(arc_volume, 200, 200);
112 lv_obj_center(arc_volume);
113
114 label_volume_arc = lv_label_create(screen_volume);
115 lv_label_set_text(label_volume_arc, "00");
116 lv_obj_set_style_text_font(label_volume_arc, &lv_font_montserrat_48, LV_PART_MAIN);
117 lv_obj_center(label_volume_arc);
118
119 lv_obj_t *volume_text_label = lv_label_create(screen_volume);
120 lv_label_set_text(volume_text_label, "Volume");
121 lv_obj_align(volume_text_label, LV_ALIGN_BOTTOM_MID, 0, -10);
122}
123
124void init_screen_media(void) {
125 screen_media = lv_obj_create(NULL);
126 lv_obj_add_style(screen_media, &style_screen, 0);
127 use_flex_column(screen_media);
128 lv_obj_set_flex_align(screen_media, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
129
130 label_media_artist = lv_label_create(screen_media);
131 lv_label_set_text(label_media_artist, "N/A");
132 lv_label_set_long_mode(label_media_artist, LV_LABEL_LONG_WRAP);
133 lv_obj_set_width(label_media_artist, lv_pct(90));
134 lv_obj_set_style_text_align(label_media_artist, LV_TEXT_ALIGN_CENTER, 0);
135
136 label_media_title = lv_label_create(screen_media);
137 lv_label_set_text(label_media_title, "N/A");
138 lv_label_set_long_mode(label_media_title, LV_LABEL_LONG_WRAP);
139 lv_obj_set_width(label_media_title, lv_pct(90));
140 lv_obj_set_style_text_align(label_media_title, LV_TEXT_ALIGN_CENTER, 0);
141}
142
143bool display_init_user(void) {
144 init_screen_home_custom();
145 init_screen_volume();
146 init_screen_media();
147
148 return false;
149}
150
151void display_process_raw_hid_data(uint8_t *data, uint8_t length) {
152 uint8_t data_type = data[0];
153 char string_data[length - 2];
154 dprintf("display_process_raw_hid_data - received data_type %u \n", data_type);
155 switch (data_type) {
156 case _TIME:
157 dprintf("time %02d:%02d\n", data[1], data[2]);
158 lv_label_set_text_fmt(label_time, "%02d:%02d", data[1], data[2]);
159 break;
160
161 case _VOLUME:
162 dprintf("volume %d\n", data[1]);
163 lv_label_set_text_fmt(label_volume_home, "Volume: %02d%%", data[1]);
164 lv_label_set_text_fmt(label_volume_arc, "%02d", data[1]);
165 lv_arc_set_value(arc_volume, data[1]);
166 lv_scr_load(screen_volume);
167 start_home_screen_timer();
168 break;
169
170 case _LAYOUT:
171 dprintf("layout %d\n", data[1]);
172 set_layout_label(data[1]);
173 break;
174
175 case _MEDIA_ARTIST:
176 read_string(data, string_data);
177 dprintf("media artist %s\n", string_data);
178 lv_label_set_text(label_media_artist, string_data);
179 lv_scr_load(screen_media);
180 start_home_screen_timer();
181 break;
182
183 case _MEDIA_TITLE:
184 read_string(data, string_data);
185 dprintf("media title %s\n", string_data);
186 lv_label_set_text(label_media_title, string_data);
187 lv_scr_load(screen_media);
188 start_home_screen_timer();
189 break;
190 }
191}
192
193void display_process_layer_state(uint8_t layer) {
194 switch (layer) {
195 case _QWERTY:
196 lv_label_set_text(label_layer, "QWERTY");
197 break;
198 case _GAME:
199 lv_label_set_text(label_layer, "GAME");
200 break;
201 case _NAV:
202 lv_label_set_text(label_layer, "NAV");
203 break;
204 case _NUMBER:
205 lv_label_set_text(label_layer, "NUMBER");
206 break;
207 case _SYMBOL:
208 lv_label_set_text(label_layer, "SYMBOL");
209 break;
210 case _FUNC:
211 lv_label_set_text(label_layer, "FUNC");
212 break;
213 case _SYS:
214 lv_label_set_text(label_layer, "SYSTEM");
215 break;
216 }
217}
218
219void display_housekeeping_task(void) {
220 if (home_screen_timer && timer_elapsed(home_screen_timer) > 5000) {
221 home_screen_timer = 0;
222 lv_scr_load(screen_home);
223 }
224
225 toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
226 toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
227 toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
228 toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
229}
230
231void display_process_caps(bool active) {
232 toggle_state(label_caps, LV_STATE_PRESSED, active);
233}
234
235#ifdef CAPS_WORD_ENABLE
236void display_process_caps_word(bool active) {
237 dprint("display_process_caps_word\n");
238 toggle_state(label_caps_word, LV_STATE_PRESSED, active);
239}
240#endif
diff --git a/keyboards/stront/keymaps/hid/hid_display.h b/keyboards/stront/keymaps/hid/hid_display.h
new file mode 100644
index 0000000000..b93bf64716
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/hid_display.h
@@ -0,0 +1,29 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "quantum.h"
5
6typedef enum {
7 _QWERTY = 0,
8 _GAME,
9 _EU,
10 _NAV,
11 _NUMBER,
12 _SYMBOL,
13 _FUNC,
14 _SYS,
15} layer_number;
16
17typedef enum {
18 _TIME = 0,
19 _VOLUME,
20 _LAYOUT,
21 _MEDIA_ARTIST,
22 _MEDIA_TITLE,
23} hid_data_type;
24
25void display_process_raw_hid_data(uint8_t *data, uint8_t length);
26void display_process_layer_state(uint8_t layer);
27#ifdef CAPS_WORD_ENABLE
28void display_process_caps_word(bool active);
29#endif
diff --git a/keyboards/stront/keymaps/hid/keymap.c b/keyboards/stront/keymaps/hid/keymap.c
new file mode 100644
index 0000000000..11cb89c48e
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/keymap.c
@@ -0,0 +1,187 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6#include "hid_display.h"
7#include "raw_hid.h"
8#include "transactions.h"
9
10// Left-hand home row mods
11#define HOME_A LGUI_T(KC_A)
12#define HOME_S LALT_T(KC_S)
13#define HOME_D LCTL_T(KC_D)
14#define HOME_F LSFT_T(KC_F)
15
16// Right-hand home row mods
17#define HOME_J RSFT_T(KC_J)
18#define HOME_K RCTL_T(KC_K)
19#define HOME_L LALT_T(KC_L)
20#define HOME_SCLN RGUI_T(KC_SCLN)
21
22// bottom mods
23#define SYM_SPC LT(_SYMBOL, KC_SPC)
24#define NUM_TAB LT(_NUMBER, KC_TAB)
25#define FUNC_ESC LT(_FUNC, KC_ESC)
26#define FUNC_ENT LT(_FUNC, KC_ENT)
27#define NAV_BSPC LT(_NAV, KC_BSPC)
28#define RALT_DEL LALT_T(KC_DEL)
29
30// game layer mods
31#define LALT_Q LALT_T(KC_Q)
32#define LSFT_MINS LSFT_T(KC_MINS)
33#define LCTL_ESC LCTL_T(KC_ESC)
34#define LGUI_QUOT LGUI_T(KC_QUOT)
35
36const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
37 /* QWERTY
38 * .---------------------------. .---------------------------.
39 * | W | E | R | T | | Y | U | I | O |
40 * .------+------+------+------+------+------| |------+------+------+------+------+------.
41 * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
42 * |------+------+------+------+------+------| |------+------+------+------+------+------|
43 * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
44 * '-----------------------------------------/ / \ \-----------------------------------------'
45 * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
46 * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
47 * `-------------''-------' '-------''-------------'
48 */
49 // clang-format off
50 [_QWERTY] = LAYOUT(
51 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
52 KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
53 KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
54 FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
55 ),
56
57 [_GAME] = LAYOUT(
58 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
59 LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
60 LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
61 LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
62 ),
63
64 [_NAV] = LAYOUT(
65 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
66 XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
67 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
68 FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
69 ),
70
71 [_NUMBER] = LAYOUT(
72 KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
73 KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
74 KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
75 KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
76 ),
77
78 [_SYMBOL] = LAYOUT(
79 LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
80 LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
81 LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
82 MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
83 ),
84
85 [_FUNC] = LAYOUT(
86 KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
87 KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
88 XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
89 _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
90 ),
91
92 [_SYS] = LAYOUT(
93 BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
94 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
95 EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
96 _______, QK_BOOT, _______, _______, QK_BOOT, _______
97 )
98 // clang-format on
99};
100
101bool process_record_user(uint16_t keycode, keyrecord_t *record) {
102 dprintf("process_record_user %u %s %s %d\n", keycode, record->event.pressed ? "pressed" : "depressed", record->tap.interrupted ? "interrupted" : "not interrupted", record->tap.count);
103
104 if (record->event.pressed) {
105 uint8_t data[32];
106 data[0] = 0;
107
108 switch (keycode) {
109 // send hid commands
110 case KC_VOLU:
111 case KC_VOLD:
112 data[0] = _VOLUME;
113 break;
114 }
115
116 if (data[0]) {
117 dprintf("raw_hid_send %u\n", data[0]);
118 raw_hid_send(data, sizeof(data));
119 }
120 }
121
122 return true;
123}
124
125/* Caps Word processing */
126#ifdef CAPS_WORD_ENABLE
127void caps_word_set_user(bool active) {
128 if (is_display_enabled()) {
129 display_process_caps_word(active);
130 } else if (is_keyboard_master() && !is_keyboard_left()) {
131 dprintf("RPC_ID_USER_CAPS_WORD_SYNC: %s\n", active ? "active" : "inactive");
132 transaction_rpc_send(RPC_ID_USER_CAPS_WORD_SYNC, 1, &active);
133 }
134}
135#endif
136
137/* Active Layer processing */
138layer_state_t layer_state_set_user(layer_state_t state) {
139 if (is_display_enabled()) {
140 display_process_layer_state(get_highest_layer(state));
141 } else if (is_keyboard_master() && !is_keyboard_left()) {
142 uint8_t layer = get_highest_layer(state);
143 dprintf("RPC_ID_USER_LAYER_SYNC: %u\n", layer);
144 transaction_rpc_send(RPC_ID_USER_LAYER_SYNC, 1, &layer);
145 }
146
147 return state;
148}
149
150/* Raw HID processing*/
151void raw_hid_receive(uint8_t *data, uint8_t length) {
152 dprintf("raw_hid_receive - received %u bytes \n", length);
153
154 if (is_display_enabled()) {
155 display_process_raw_hid_data(data, length);
156 } else if (is_keyboard_master() && !is_keyboard_left()) {
157 dprint("RPC_ID_USER_HID_SYNC \n");
158 transaction_rpc_send(RPC_ID_USER_HID_SYNC, length, data);
159 }
160}
161
162void hid_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
163 if (is_display_enabled()) {
164 display_process_raw_hid_data((uint8_t *)initiator2target_buffer, initiator2target_buffer_size);
165 }
166}
167
168void layer_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
169 if (is_display_enabled()) {
170 display_process_layer_state(*(uint8_t *)initiator2target_buffer);
171 }
172}
173
174void caps_word_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
175 if (is_display_enabled()) {
176 display_process_caps_word(*(bool *)initiator2target_buffer);
177 }
178}
179
180void keyboard_post_init_user() {
181 // sync received hid data
182 transaction_register_rpc(RPC_ID_USER_HID_SYNC, hid_sync);
183 // sync highest layer (a bit more performant than standard SPLIT_LAYER_STATE_ENABLE)
184 transaction_register_rpc(RPC_ID_USER_LAYER_SYNC, layer_sync);
185 // sync caps word state
186 transaction_register_rpc(RPC_ID_USER_CAPS_WORD_SYNC, caps_word_sync);
187}
diff --git a/keyboards/stront/keymaps/hid/lv_conf.h b/keyboards/stront/keymaps/hid/lv_conf.h
new file mode 100644
index 0000000000..f8f93b7c9e
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/lv_conf.h
@@ -0,0 +1,15 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include_next <lv_conf.h>
7
8#undef LV_FONT_DEFAULT
9#define LV_FONT_DEFAULT &lv_font_montserrat_20
10
11#undef LV_FONT_MONTSERRAT_20
12#define LV_FONT_MONTSERRAT_20 1
13
14#undef LV_FONT_MONTSERRAT_28
15#define LV_FONT_MONTSERRAT_28 0
diff --git a/keyboards/stront/keymaps/hid/rules.mk b/keyboards/stront/keymaps/hid/rules.mk
new file mode 100644
index 0000000000..beaf344b66
--- /dev/null
+++ b/keyboards/stront/keymaps/hid/rules.mk
@@ -0,0 +1,5 @@
1CAPS_WORD_ENABLE = yes
2
3RAW_ENABLE = yes
4
5SRC += hid_display.c
diff --git a/keyboards/stront/keymaps/i2c/config.h b/keyboards/stront/keymaps/i2c/config.h
new file mode 100644
index 0000000000..8c71dad835
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/config.h
@@ -0,0 +1,8 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#define I2C_DRIVER I2CD1
7#define I2C1_SDA_PIN GP10
8#define I2C1_SCL_PIN GP11
diff --git a/keyboards/stront/keymaps/i2c/halconf.h b/keyboards/stront/keymaps/i2c/halconf.h
new file mode 100644
index 0000000000..46c5a48c9a
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/halconf.h
@@ -0,0 +1,8 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#define HAL_USE_I2C TRUE
7
8#include_next <halconf.h>
diff --git a/keyboards/stront/keymaps/i2c/keymap.c b/keyboards/stront/keymaps/i2c/keymap.c
new file mode 100644
index 0000000000..793a2495c7
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/keymap.c
@@ -0,0 +1,107 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6enum layer_number {
7 // clang-format off
8 _QWERTY = 0,
9 _GAME,
10 _NAV,
11 _NUMBER,
12 _SYMBOL,
13 _FUNC,
14 _SYS
15 // clang-format on
16};
17
18// Left-hand home row mods
19#define HOME_A LGUI_T(KC_A)
20#define HOME_S LALT_T(KC_S)
21#define HOME_D LCTL_T(KC_D)
22#define HOME_F LSFT_T(KC_F)
23
24// Right-hand home row mods
25#define HOME_J RSFT_T(KC_J)
26#define HOME_K RCTL_T(KC_K)
27#define HOME_L LALT_T(KC_L)
28#define HOME_SCLN RGUI_T(KC_SCLN)
29
30// bottom mods
31#define SYM_SPC LT(_SYMBOL, KC_SPC)
32#define NUM_TAB LT(_NUMBER, KC_TAB)
33#define FUNC_ESC LT(_FUNC, KC_ESC)
34#define FUNC_ENT LT(_FUNC, KC_ENT)
35#define NAV_BSPC LT(_NAV, KC_BSPC)
36#define RALT_DEL LALT_T(KC_DEL)
37
38// game layer mods
39#define LALT_Q LALT_T(KC_Q)
40#define LSFT_MINS LSFT_T(KC_MINS)
41#define LCTL_ESC LCTL_T(KC_ESC)
42#define LGUI_QUOT LGUI_T(KC_QUOT)
43
44const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
45 /* QWERTY
46 * .---------------------------. .---------------------------.
47 * | W | E | R | T | | Y | U | I | O |
48 * .------+------+------+------+------+------| |------+------+------+------+------+------.
49 * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
50 * |------+------+------+------+------+------| |------+------+------+------+------+------|
51 * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
52 * '-----------------------------------------/ / \ \-----------------------------------------'
53 * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
54 * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt |
55 * `-------------''-------' '-------''-------------'
56 */
57 // clang-format off
58 [_QWERTY] = LAYOUT(
59 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
60 KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_P,
61 KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
62 FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
63 ),
64
65 [_GAME] = LAYOUT(
66 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
67 LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_P,
68 LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
69 LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL
70 ),
71
72 [_NAV] = LAYOUT(
73 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
74 XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
75 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
76 FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, RALT_DEL
77 ),
78
79 [_NUMBER] = LAYOUT(
80 KC_7, KC_8, KC_9, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
81 KC_EQL, KC_0, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
82 KC_MINS, KC_BSLS, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
83 KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, RALT_DEL
84 ),
85
86 [_SYMBOL] = LAYOUT(
87 LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_GRV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
88 LSFT(KC_EQL), LSFT(KC_0), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
89 LSFT(KC_MINS), LSFT(KC_BSLS), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
90 MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, RALT_DEL
91 ),
92
93 [_FUNC] = LAYOUT(
94 KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
95 KC_F12, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
96 XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
97 _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
98 ),
99
100 [_SYS] = LAYOUT(
101 BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
102 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
103 EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
104 _______, QK_BOOT, _______, _______, QK_BOOT, _______
105 )
106 // clang-format on
107};
diff --git a/keyboards/stront/keymaps/i2c/mcuconf.h b/keyboards/stront/keymaps/i2c/mcuconf.h
new file mode 100644
index 0000000000..47ee67119d
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/mcuconf.h
@@ -0,0 +1,9 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include_next <mcuconf.h>
7
8#undef RP_I2C_USE_I2C1
9#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/stront/keymaps/i2c/rules.mk b/keyboards/stront/keymaps/i2c/rules.mk
new file mode 100644
index 0000000000..fedac72e2e
--- /dev/null
+++ b/keyboards/stront/keymaps/i2c/rules.mk
@@ -0,0 +1 @@
POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
diff --git a/keyboards/stront/keymaps/zzeneg/config.h b/keyboards/stront/keymaps/zzeneg/config.h
new file mode 100644
index 0000000000..38fad1c0fd
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/config.h
@@ -0,0 +1,30 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6// #define DEBUG_MATRIX_SCAN_RATE
7
8#define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_HID_SYNC, RPC_ID_USER_CAPS_WORD_SYNC, RPC_ID_USER_LAYER_SYNC
9#define QUANTUM_PAINTER_DISPLAY_TIMEOUT 0
10
11#define I2C_DRIVER I2CD1
12#define I2C1_SDA_PIN GP10
13#define I2C1_SCL_PIN GP11
14
15#define CIRQUE_PINNACLE_TAP_ENABLE
16#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
17#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
18#define MOUSE_EXTENDED_REPORT
19
20#define TAPPING_TERM 150
21#define TAPPING_TERM_PER_KEY
22#define QUICK_TAP_TERM 0
23
24#define CAPS_WORD_IDLE_TIMEOUT 2500
25#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
26
27#ifdef RGB_MATRIX_ENABLE
28# define RGB_MATRIX_TIMEOUT 300000
29# define RGB_TRIGGER_ON_KEYDOWN
30#endif
diff --git a/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c
new file mode 100644
index 0000000000..f03a7835a6
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_20_en_ru.c
@@ -0,0 +1,782 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4/*******************************************************************************
5 * Size: 20 px
6 * Bpp: 4
7 * Opts:
8 ******************************************************************************/
9
10#ifdef __has_include
11# if __has_include("lvgl.h")
12# ifndef LV_LVGL_H_INCLUDE_SIMPLE
13# define LV_LVGL_H_INCLUDE_SIMPLE
14# endif
15# endif
16#endif
17
18#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
19# include "lvgl.h"
20#else
21# include "lvgl/lvgl.h"
22#endif
23
24#ifndef MONTSERRAT_20_EN_RU
25# define MONTSERRAT_20_EN_RU 1
26#endif
27
28#if MONTSERRAT_20_EN_RU
29
30/*-----------------
31 * BITMAPS
32 *----------------*/
33
34/*Store the image of the glyphs*/
35static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
36 /* U+0020 " " */
37
38 /* U+0021 "!" */
39 0x3f, 0x63, 0xf6, 0x2f, 0x52, 0xf5, 0x1f, 0x41, 0xf4, 0xf, 0x40, 0xf3, 0xf, 0x30, 0xf2, 0x2, 0x0, 0x0, 0x1, 0x5, 0xf8, 0x3f, 0x60,
40
41 /* U+0022 "\"" */
42 0x9a, 0x3, 0xf0, 0x99, 0x2, 0xf0, 0x99, 0x2, 0xf0, 0x89, 0x2, 0xf0, 0x89, 0x1, 0xf0, 0x44, 0x0, 0x70,
43
44 /* U+0023 "#" */
45 0x0, 0x0, 0x6b, 0x0, 0x2, 0xe0, 0x0, 0x0, 0x0, 0x79, 0x0, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x97, 0x0, 0x6, 0xa0, 0x0, 0x0, 0x0, 0xb6, 0x0, 0x8, 0x80, 0x0, 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x1, 0x22, 0xf4, 0x22, 0x2c, 0x62, 0x20, 0x0, 0x1, 0xf0, 0x0, 0xd, 0x30, 0x0, 0x0, 0x2, 0xe0, 0x0, 0xf, 0x10, 0x0, 0x0, 0x4, 0xc0, 0x0, 0x1f, 0x0, 0x0, 0x0, 0x6, 0xa0, 0x0, 0x3d, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x12, 0x2b, 0x82, 0x22, 0x8b, 0x22, 0x10, 0x0, 0xc, 0x50, 0x0, 0x88, 0x0, 0x0, 0x0, 0xe, 0x30, 0x0, 0xa6, 0x0, 0x0, 0x0, 0xf, 0x10, 0x0, 0xc4, 0x0, 0x0,
46
47 /* U+0024 "$" */
48 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0xb6, 0x0, 0x0, 0xbf, 0x98, 0xd6, 0xaf, 0x90, 0x6, 0xf4, 0x4, 0xb0, 0x1, 0x20, 0xa, 0xc0, 0x4, 0xb0, 0x0, 0x0, 0xb, 0xc0, 0x4, 0xb0, 0x0, 0x0, 0x7, 0xf6, 0x4, 0xb0, 0x0, 0x0, 0x0, 0xcf, 0xca, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x5, 0xda, 0xff, 0x60, 0x0, 0x0, 0x4, 0xb0, 0x1b, 0xf1, 0x0, 0x0, 0x4, 0xb0, 0x3, 0xf5, 0x0, 0x0, 0x4, 0xb0, 0x2, 0xf4, 0xb, 0x50, 0x4, 0xb0, 0x9, 0xf1, 0x9, 0xfd, 0x88, 0xd7, 0xcf, 0x50, 0x0, 0x29, 0xdf, 0xfe, 0xa3, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x50, 0x0, 0x0,
49
50 /* U+0025 "%" */
51 0x0, 0x9d, 0xd9, 0x0, 0x0, 0x0, 0xd5, 0x0, 0x8, 0x90, 0x9, 0x80, 0x0, 0x7, 0xb0, 0x0, 0xe, 0x10, 0x1, 0xe0, 0x0, 0x2e, 0x10, 0x0, 0x2d, 0x0, 0x0, 0xd2, 0x0, 0xb6, 0x0, 0x0, 0x2e, 0x0, 0x0, 0xe2, 0x6, 0xc0, 0x0, 0x0, 0xe, 0x10, 0x1, 0xe0, 0x1e, 0x20, 0x0, 0x0, 0x8, 0xb1, 0x1b, 0x80, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x8e, 0xe8, 0x4, 0xd0, 0x2b, 0xfd, 0x40, 0x0, 0x0, 0x0, 0xe, 0x30, 0xe5, 0x3, 0xe2, 0x0, 0x0, 0x0, 0x99, 0x6, 0xa0, 0x0, 0x88, 0x0, 0x0, 0x3, 0xe1, 0x8, 0x70, 0x0, 0x4b, 0x0, 0x0, 0xd, 0x50, 0x8, 0x70, 0x0, 0x4b, 0x0, 0x0, 0x7b, 0x0, 0x6, 0xa0, 0x0, 0x78, 0x0, 0x2, 0xe1, 0x0, 0x0, 0xe3, 0x2, 0xe2, 0x0, 0xc, 0x60, 0x0, 0x0, 0x2c, 0xdd, 0x40,
52
53 /* U+0026 "&" */
54 0x0, 0x1, 0xae, 0xfd, 0x50, 0x0, 0x0, 0x0, 0xd, 0xc3, 0x16, 0xf3, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0xc8, 0x0, 0x0, 0x0, 0x3f, 0x10, 0x0, 0xc7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x6, 0xf2, 0x0, 0x0, 0x0, 0x6, 0xf4, 0x9f, 0x50, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xfc, 0xe2, 0x0, 0x0, 0x0, 0x1, 0xdc, 0x10, 0xcd, 0x10, 0xa, 0x20, 0x9, 0xd0, 0x0, 0xd, 0xd1, 0x1f, 0x10, 0xf, 0x70, 0x0, 0x1, 0xdc, 0x8c, 0x0, 0xf, 0x60, 0x0, 0x0, 0x2e, 0xf6, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x1c, 0xfa, 0x0, 0x3, 0xfd, 0x63, 0x48, 0xec, 0x4f, 0x90, 0x0, 0x29, 0xef, 0xfc, 0x60, 0x4, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
55
56 /* U+0027 "'" */
57 0x9a, 0x99, 0x99, 0x89, 0x89, 0x44,
58
59 /* U+0028 "(" */
60 0x0, 0xd8, 0x5, 0xf1, 0xc, 0x90, 0x1f, 0x40, 0x5f, 0x0, 0x9d, 0x0, 0xba, 0x0, 0xd9, 0x0, 0xe8, 0x0, 0xe7, 0x0, 0xe8, 0x0, 0xd9, 0x0, 0xba, 0x0, 0x9d, 0x0, 0x5f, 0x0, 0x1f, 0x40, 0xc, 0x90, 0x5, 0xf1, 0x0, 0xd8,
61
62 /* U+0029 ")" */
63 0xe, 0x70, 0x0, 0x7e, 0x0, 0x1, 0xf5, 0x0, 0xb, 0xb0, 0x0, 0x7f, 0x0, 0x3, 0xf2, 0x0, 0x1f, 0x40, 0x0, 0xf6, 0x0, 0xe, 0x70, 0x0, 0xe7, 0x0, 0xe, 0x70, 0x0, 0xf6, 0x0, 0x1f, 0x40, 0x3, 0xf2, 0x0, 0x7f, 0x0, 0xb, 0xa0, 0x1, 0xf5, 0x0, 0x7e, 0x0, 0xe, 0x60, 0x0,
64
65 /* U+002A "*" */
66 0x0, 0x9, 0x50, 0x0, 0x23, 0x9, 0x50, 0x50, 0x3e, 0x9a, 0x7c, 0xc1, 0x0, 0x9f, 0xf5, 0x0, 0x6, 0xed, 0xdd, 0x30, 0x5b, 0x29, 0x54, 0xd1, 0x0, 0x9, 0x50, 0x0, 0x0, 0x4, 0x20, 0x0,
67
68 /* U+002B "+" */
69 0x0, 0x0, 0xb4, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0xe8, 0x33, 0x30, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0,
70
71 /* U+002C "," */
72 0x12, 0xd, 0xf1, 0xaf, 0x15, 0xc0, 0x88, 0xc, 0x30,
73
74 /* U+002D "-" */
75 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf7, 0x33, 0x33, 0x31,
76
77 /* U+002E "." */
78 0x12, 0xd, 0xf1, 0xad, 0x0,
79
80 /* U+002F "/" */
81 0x0, 0x0, 0x0, 0x7, 0x20, 0x0, 0x0, 0x3, 0xf1, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x4, 0xf1, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0,
82
83 /* U+0030 "0" */
84 0x0, 0x8, 0xdf, 0xea, 0x20, 0x0, 0x1, 0xdf, 0x86, 0x7d, 0xf3, 0x0, 0xb, 0xe2, 0x0, 0x0, 0xce, 0x10, 0x3f, 0x50, 0x0, 0x0, 0x1f, 0x70, 0x9e, 0x0, 0x0, 0x0, 0xa, 0xd0, 0xca, 0x0, 0x0, 0x0, 0x7, 0xf0, 0xe8, 0x0, 0x0, 0x0, 0x4, 0xf2, 0xf8, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xe8, 0x0, 0x0, 0x0, 0x4, 0xf2, 0xca, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x9e, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x3f, 0x50, 0x0, 0x0, 0x1f, 0x70, 0xb, 0xe2, 0x0, 0x0, 0xce, 0x10, 0x1, 0xdf, 0x96, 0x7e, 0xf3, 0x0, 0x0, 0x8, 0xdf, 0xea, 0x20, 0x0,
85
86 /* U+0031 "1" */
87 0xdf, 0xff, 0xe4, 0x55, 0xae, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0, 0x0, 0x8e, 0x0, 0x8, 0xe0,
88
89 /* U+0032 "2" */
90 0x0, 0x7c, 0xff, 0xea, 0x20, 0x2, 0xdf, 0x96, 0x68, 0xef, 0x20, 0x4c, 0x10, 0x0, 0x1, 0xea, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x0, 0x0, 0xc, 0xb0, 0x0, 0x0, 0x0, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x2, 0xea, 0x0, 0x0, 0x0, 0x2, 0xec, 0x0, 0x0, 0x0, 0x1, 0xdc, 0x0, 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x1, 0xdd, 0x10, 0x0, 0x0, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0xcf, 0x75, 0x55, 0x55, 0x53, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x90,
91
92 /* U+0033 "3" */
93 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x1, 0x55, 0x55, 0x55, 0x8f, 0x70, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x3, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x0, 0x0, 0x0, 0xf, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x33, 0x5b, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x67, 0x0, 0x0, 0x0, 0xbf, 0x6, 0xfe, 0x96, 0x68, 0xdf, 0x50, 0x2, 0x8d, 0xff, 0xea, 0x30, 0x0,
94
95 /* U+0034 "4" */
96 0x0, 0x0, 0x0, 0x2, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9e, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x2e, 0x90, 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x2a, 0x10, 0x0, 0x4, 0xf6, 0x0, 0x4, 0xf2, 0x0, 0x1, 0xea, 0x0, 0x0, 0x4f, 0x20, 0x0, 0xbe, 0x21, 0x11, 0x15, 0xf3, 0x10, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x44, 0x44, 0x44, 0x47, 0xf5, 0x43, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x20, 0x0,
97
98 /* U+0035 "5" */
99 0x0, 0xef, 0xff, 0xff, 0xfc, 0x0, 0xf, 0x95, 0x55, 0x55, 0x40, 0x1, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x0, 0x4, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x11, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xeb, 0x40, 0x0, 0x24, 0x44, 0x47, 0xcf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x3c, 0x20, 0x0, 0x0, 0xaf, 0x13, 0xef, 0xb7, 0x67, 0xdf, 0x60, 0x0, 0x7c, 0xef, 0xeb, 0x40, 0x0,
100
101 /* U+0036 "6" */
102 0x0, 0x5, 0xbe, 0xfe, 0xb4, 0x0, 0xa, 0xfa, 0x64, 0x6a, 0x60, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x7, 0xdf, 0xfc, 0x50, 0xf, 0x8c, 0xc5, 0x35, 0xaf, 0x80, 0xee, 0xb0, 0x0, 0x0, 0x8f, 0x2d, 0xf2, 0x0, 0x0, 0x0, 0xf7, 0xaf, 0x0, 0x0, 0x0, 0xe, 0x85, 0xf3, 0x0, 0x0, 0x0, 0xf7, 0xd, 0xb0, 0x0, 0x0, 0x8f, 0x20, 0x2e, 0xd6, 0x45, 0xbf, 0x60, 0x0, 0x19, 0xdf, 0xfb, 0x40, 0x0,
103
104 /* U+0037 "7" */
105 0x5f, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xf6, 0x55, 0x55, 0x55, 0xeb, 0x5f, 0x10, 0x0, 0x0, 0x3f, 0x55, 0xf1, 0x0, 0x0, 0xa, 0xe0, 0x2, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x60, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x0, 0x0, 0xd, 0xb0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x0,
106
107 /* U+0038 "8" */
108 0x0, 0x5, 0xcf, 0xfe, 0xa3, 0x0, 0x0, 0x9f, 0xa5, 0x46, 0xcf, 0x50, 0x3, 0xf7, 0x0, 0x0, 0xb, 0xe0, 0x7, 0xf0, 0x0, 0x0, 0x4, 0xf3, 0x8, 0xf0, 0x0, 0x0, 0x3, 0xf4, 0x5, 0xf3, 0x0, 0x0, 0x7, 0xf1, 0x0, 0xce, 0x40, 0x0, 0x7f, 0x80, 0x0, 0x1e, 0xff, 0xff, 0xfb, 0x0, 0x2, 0xed, 0x63, 0x33, 0x7e, 0xc0, 0xc, 0xd0, 0x0, 0x0, 0x2, 0xf7, 0xf, 0x70, 0x0, 0x0, 0x0, 0xbc, 0xf, 0x80, 0x0, 0x0, 0x0, 0xcb, 0xb, 0xe1, 0x0, 0x0, 0x4, 0xf7, 0x2, 0xee, 0x85, 0x45, 0xaf, 0xc0, 0x0, 0x18, 0xdf, 0xfe, 0xb6, 0x0,
109
110 /* U+0039 "9" */
111 0x0, 0x2a, 0xef, 0xea, 0x20, 0x0, 0x4, 0xfc, 0x64, 0x6c, 0xf4, 0x0, 0xe, 0xb0, 0x0, 0x0, 0x9e, 0x10, 0x3f, 0x30, 0x0, 0x0, 0x1f, 0x80, 0x5f, 0x10, 0x0, 0x0, 0xd, 0xd0, 0x4f, 0x20, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0x90, 0x0, 0x0, 0x7f, 0xf1, 0x7, 0xf9, 0x21, 0x28, 0xf7, 0xf2, 0x0, 0x6e, 0xff, 0xfc, 0x35, 0xf1, 0x0, 0x0, 0x23, 0x10, 0x7, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x2, 0xdc, 0x0, 0x3, 0xb6, 0x55, 0x9f, 0xc1, 0x0, 0x3, 0xae, 0xff, 0xc6, 0x0, 0x0,
112
113 /* U+003A ":" */
114 0xbe, 0x1d, 0xf1, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xf1, 0xad, 0x0,
115
116 /* U+003B ";" */
117 0xbe, 0x1d, 0xf1, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xf1, 0xaf, 0x15, 0xc0, 0x88, 0xc, 0x30,
118
119 /* U+003C "<" */
120 0x0, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x1, 0x7e, 0xe1, 0x0, 0x3, 0xaf, 0xc5, 0x0, 0x6, 0xdf, 0x93, 0x0, 0x0, 0x9f, 0x70, 0x0, 0x0, 0x0, 0x5d, 0xe8, 0x20, 0x0, 0x0, 0x0, 0x4b, 0xfb, 0x40, 0x0, 0x0, 0x0, 0x28, 0xee, 0x70, 0x0, 0x0, 0x0, 0x5, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0,
121
122 /* U+003D "=" */
123 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0x33, 0x33, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xf1, 0x13, 0x33, 0x33, 0x33, 0x30,
124
125 /* U+003E ">" */
126 0x41, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xb4, 0x0, 0x0, 0x0, 0x2, 0x9f, 0xd7, 0x10, 0x0, 0x0, 0x0, 0x6c, 0xf9, 0x30, 0x0, 0x0, 0x0, 0x3c, 0xf1, 0x0, 0x0, 0x5, 0xbf, 0xa0, 0x0, 0x18, 0xee, 0x81, 0x0, 0x3b, 0xfb, 0x50, 0x0, 0x0, 0x89, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
127
128 /* U+003F "?" */
129 0x1, 0x7c, 0xff, 0xe9, 0x20, 0x2e, 0xe8, 0x55, 0x8e, 0xe2, 0x5b, 0x10, 0x0, 0x2, 0xfa, 0x0, 0x0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2, 0xf6, 0x0, 0x0, 0x0, 0x2e, 0xc0, 0x0, 0x0, 0x2, 0xec, 0x0, 0x0, 0x0, 0xc, 0xd0, 0x0, 0x0, 0x0, 0x3f, 0x50, 0x0, 0x0, 0x0, 0x27, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x50, 0x0, 0x0, 0x0, 0x5f, 0x40, 0x0,
130
131 /* U+0040 "@" */
132 0x0, 0x0, 0x4, 0x9d, 0xff, 0xec, 0x82, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xe8, 0x31, 0x1, 0x49, 0xe9, 0x0, 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x1, 0xad, 0x10, 0x0, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0xb, 0x80, 0x0, 0x4b, 0xff, 0xc5, 0xf, 0x50, 0xc7, 0x3, 0xf0, 0x0, 0x6f, 0x83, 0x25, 0xd7, 0xf5, 0x3, 0xe0, 0x89, 0x0, 0x2f, 0x50, 0x0, 0x0, 0xdf, 0x50, 0xd, 0x4c, 0x50, 0x9, 0xc0, 0x0, 0x0, 0x4, 0xf5, 0x0, 0x97, 0xe3, 0x0, 0xd8, 0x0, 0x0, 0x0, 0xf, 0x50, 0x7, 0x9f, 0x20, 0xe, 0x60, 0x0, 0x0, 0x0, 0xf5, 0x0, 0x69, 0xe3, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x1f, 0x50, 0x7, 0x9c, 0x50, 0x9, 0xd0, 0x0, 0x0, 0x5, 0xf5, 0x0, 0x96, 0x89, 0x0, 0x2f, 0x70, 0x0, 0x1, 0xdf, 0x50, 0xe, 0x23, 0xf0, 0x0, 0x6f, 0xa4, 0x36, 0xe7, 0xcc, 0x39, 0xb0, 0xb, 0x80, 0x0, 0x4b, 0xff, 0xc5, 0x3, 0xdf, 0xb1, 0x0, 0x2e, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xe8, 0x31, 0x12, 0x5a, 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9d, 0xff, 0xeb, 0x71, 0x0, 0x0, 0x0,
133
134 /* U+0041 "A" */
135 0x0, 0x0, 0x0, 0xcf, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xc7, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x1f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe, 0x80, 0x3, 0xf4, 0x0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x0, 0x7f, 0x33, 0x33, 0x33, 0x33, 0xcc, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xe, 0xa0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x10,
136
137 /* U+0042 "B" */
138 0xbf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0xbd, 0x44, 0x44, 0x46, 0xcf, 0x60, 0xbc, 0x0, 0x0, 0x0, 0xb, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xbc, 0x0, 0x0, 0x2, 0x8f, 0x50, 0xbf, 0xff, 0xff, 0xff, 0xf9, 0x0, 0xbd, 0x33, 0x33, 0x34, 0x7d, 0xe2, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xda, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x8e, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xbc, 0x0, 0x0, 0x0, 0x1, 0xeb, 0xbd, 0x44, 0x44, 0x45, 0x7e, 0xf3, 0xbf, 0xff, 0xff, 0xff, 0xd9, 0x20,
139
140 /* U+0043 "C" */
141 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x3, 0xef, 0xa7, 0x57, 0xbf, 0xc1, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3d, 0x20, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x4e, 0x30, 0x4, 0xef, 0xa7, 0x67, 0xbf, 0xb0, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0,
142
143 /* U+0044 "D" */
144 0xbf, 0xff, 0xff, 0xfd, 0xa3, 0x0, 0x0, 0xbd, 0x55, 0x55, 0x58, 0xdf, 0xa0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf4, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x5, 0xfb, 0x0, 0xbd, 0x55, 0x55, 0x58, 0xdf, 0xa0, 0x0, 0xbf, 0xff, 0xff, 0xfd, 0xa3, 0x0, 0x0,
145
146 /* U+0045 "E" */
147 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xb, 0xd5, 0x55, 0x55, 0x55, 0x40, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0x0, 0xbd, 0x33, 0x33, 0x33, 0x30, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xb, 0xd5, 0x55, 0x55, 0x55, 0x51, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x30,
148
149 /* U+0046 "F" */
150 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xbd, 0x55, 0x55, 0x55, 0x54, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x11, 0x11, 0x11, 0x10, 0xbf, 0xff, 0xff, 0xff, 0xf0, 0xbd, 0x44, 0x44, 0x44, 0x40, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0,
151
152 /* U+0047 "G" */
153 0x0, 0x0, 0x6c, 0xef, 0xec, 0x60, 0x0, 0x3, 0xef, 0xa7, 0x57, 0xaf, 0xd2, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x2c, 0x40, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x64, 0xe9, 0x0, 0x0, 0x0, 0x0, 0xd, 0x9b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x6f, 0x30, 0x0, 0x0, 0x0, 0xd, 0x90, 0xdd, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x2f, 0x90, 0x3, 0xef, 0xb7, 0x67, 0xbf, 0xe3, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x60, 0x0,
154
155 /* U+0048 "H" */
156 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x11, 0x11, 0x11, 0x11, 0x8f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0x44, 0x44, 0x44, 0x44, 0xaf, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x7f,
157
158 /* U+0049 "I" */
159 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
160
161 /* U+004A "J" */
162 0x0, 0xbf, 0xff, 0xff, 0xd0, 0x3, 0x55, 0x55, 0xbd, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0xbc, 0xb, 0x50, 0x0, 0x1f, 0x80, 0x9f, 0xa5, 0x6d, 0xf1, 0x0, 0x6d, 0xff, 0xb2, 0x0,
163
164 /* U+004B "K" */
165 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf4, 0xb, 0xc0, 0x0, 0x0, 0x6, 0xf5, 0x0, 0xbc, 0x0, 0x0, 0x4, 0xf7, 0x0, 0xb, 0xc0, 0x0, 0x3, 0xf9, 0x0, 0x0, 0xbc, 0x0, 0x2, 0xea, 0x0, 0x0, 0xb, 0xc0, 0x1, 0xec, 0x0, 0x0, 0x0, 0xbc, 0x1, 0xde, 0x10, 0x0, 0x0, 0xb, 0xc0, 0xcf, 0xf3, 0x0, 0x0, 0x0, 0xbc, 0xbe, 0x3d, 0xe1, 0x0, 0x0, 0xb, 0xff, 0x30, 0x2f, 0xb0, 0x0, 0x0, 0xbf, 0x40, 0x0, 0x5f, 0x80, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x7f, 0x50, 0x0, 0xbc, 0x0, 0x0, 0x0, 0xaf, 0x20, 0xb, 0xc0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2, 0xeb, 0x0,
166
167 /* U+004C "L" */
168 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0xbd, 0x55, 0x55, 0x55, 0x53, 0xbf, 0xff, 0xff, 0xff, 0xf9,
169
170 /* U+004D "M" */
171 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xdb, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfd, 0xbf, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xdb, 0xef, 0x60, 0x0, 0x0, 0x0, 0x4f, 0xed, 0xbb, 0xbe, 0x0, 0x0, 0x0, 0xd, 0xc9, 0xdb, 0xb2, 0xf7, 0x0, 0x0, 0x5, 0xf3, 0x9d, 0xbb, 0x9, 0xf1, 0x0, 0x0, 0xda, 0x9, 0xdb, 0xb0, 0x1e, 0x90, 0x0, 0x6f, 0x10, 0x9d, 0xbb, 0x0, 0x6f, 0x20, 0xe, 0x80, 0x9, 0xdb, 0xb0, 0x0, 0xda, 0x8, 0xe0, 0x0, 0x9d, 0xbb, 0x0, 0x4, 0xf4, 0xf6, 0x0, 0x9, 0xdb, 0xb0, 0x0, 0xb, 0xfd, 0x0, 0x0, 0x9d, 0xbb, 0x0, 0x0, 0x2f, 0x40, 0x0, 0x9, 0xdb, 0xb0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x9d, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xd0,
172
173 /* U+004E "N" */
174 0xbd, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xbf, 0xa0, 0x0, 0x0, 0x0, 0x7f, 0xbf, 0xf6, 0x0, 0x0, 0x0, 0x7f, 0xbd, 0xef, 0x30, 0x0, 0x0, 0x7f, 0xbc, 0x4f, 0xd1, 0x0, 0x0, 0x7f, 0xbc, 0x7, 0xfb, 0x0, 0x0, 0x7f, 0xbc, 0x0, 0xbf, 0x70, 0x0, 0x7f, 0xbc, 0x0, 0x1e, 0xf3, 0x0, 0x7f, 0xbc, 0x0, 0x3, 0xfe, 0x10, 0x7f, 0xbc, 0x0, 0x0, 0x7f, 0xc0, 0x7f, 0xbc, 0x0, 0x0, 0xa, 0xf8, 0x7f, 0xbc, 0x0, 0x0, 0x0, 0xdf, 0xcf, 0xbc, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x6, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x9f,
175
176 /* U+004F "O" */
177 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0, 0x3, 0xef, 0xa6, 0x57, 0xbf, 0xc1, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x2b, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xaf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xab, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0x3, 0xef, 0xa7, 0x67, 0xcf, 0xc1, 0x0, 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0,
178
179 /* U+0050 "P" */
180 0xbf, 0xff, 0xff, 0xec, 0x60, 0x0, 0xbd, 0x55, 0x55, 0x6a, 0xfc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x3f, 0x90, 0xbc, 0x0, 0x0, 0x0, 0x8, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xbc, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xbc, 0x11, 0x11, 0x26, 0xee, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xa1, 0x0, 0xbd, 0x44, 0x44, 0x30, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0,
181
182 /* U+0051 "Q" */
183 0x0, 0x0, 0x7c, 0xff, 0xeb, 0x50, 0x0, 0x0, 0x0, 0x3e, 0xfa, 0x65, 0x7b, 0xfc, 0x10, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x2, 0xfa, 0x0, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xbd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x70, 0x6f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0xd, 0xd0, 0x0, 0x0, 0x0, 0x2, 0xfa, 0x0, 0x3, 0xfc, 0x20, 0x0, 0x0, 0x3e, 0xe1, 0x0, 0x0, 0x3e, 0xfa, 0x76, 0x7c, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x7c, 0xff, 0xfb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf7, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x81, 0x18, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x20, 0x0,
184
185 /* U+0052 "R" */
186 0xbf, 0xff, 0xff, 0xec, 0x60, 0x0, 0xbd, 0x55, 0x55, 0x6a, 0xfc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x3f, 0x90, 0xbc, 0x0, 0x0, 0x0, 0x8, 0xf0, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xbc, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xbc, 0x11, 0x11, 0x26, 0xee, 0x20, 0xbf, 0xff, 0xff, 0xff, 0xa1, 0x0, 0xbd, 0x44, 0x43, 0x4f, 0x70, 0x0, 0xbc, 0x0, 0x0, 0x7, 0xf2, 0x0, 0xbc, 0x0, 0x0, 0x0, 0xcc, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x2f, 0x70, 0xbc, 0x0, 0x0, 0x0, 0x7, 0xf2,
187
188 /* U+0053 "S" */
189 0x0, 0x6, 0xcf, 0xfe, 0xb6, 0x0, 0x0, 0xbf, 0x95, 0x46, 0xaf, 0x90, 0x6, 0xf4, 0x0, 0x0, 0x1, 0x20, 0xa, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc7, 0x20, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x1, 0x5a, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xb, 0x50, 0x0, 0x0, 0x9, 0xf1, 0x9, 0xfd, 0x85, 0x57, 0xcf, 0x50, 0x0, 0x29, 0xdf, 0xfe, 0xa3, 0x0,
190
191 /* U+0054 "T" */
192 0xef, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x45, 0x55, 0x5f, 0xa5, 0x55, 0x52, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0,
193
194 /* U+0055 "U" */
195 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xda, 0x0, 0x0, 0x0, 0x0, 0xca, 0xcb, 0x0, 0x0, 0x0, 0x0, 0xd9, 0xad, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x6f, 0x30, 0x0, 0x0, 0x5, 0xf3, 0xe, 0xd1, 0x0, 0x0, 0x2e, 0xb0, 0x3, 0xee, 0x96, 0x69, 0xfd, 0x10, 0x0, 0x19, 0xdf, 0xfd, 0x80, 0x0,
196
197 /* U+0056 "V" */
198 0xbd, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x5f, 0x40, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x7, 0xf1, 0x0, 0x0, 0x0, 0x1f, 0x70, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x10, 0x0, 0xae, 0x0, 0x0, 0x0, 0xda, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x4, 0xf3, 0x0, 0x0, 0xd, 0xb0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x6, 0xf2, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x8f, 0x0, 0x0, 0x0, 0x0, 0x9e, 0x0, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x65, 0xf2, 0x0, 0x0, 0x0, 0x0, 0xc, 0xcc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xee, 0x0, 0x0, 0x0,
199
200 /* U+0057 "W" */
201 0x1f, 0x60, 0x0, 0x0, 0x0, 0xaf, 0x0, 0x0, 0x0, 0x1, 0xf5, 0xc, 0xb0, 0x0, 0x0, 0x0, 0xff, 0x50, 0x0, 0x0, 0x6, 0xf0, 0x7, 0xf1, 0x0, 0x0, 0x5, 0xfd, 0xa0, 0x0, 0x0, 0xb, 0xb0, 0x2, 0xf5, 0x0, 0x0, 0xa, 0xb7, 0xf0, 0x0, 0x0, 0xf, 0x60, 0x0, 0xda, 0x0, 0x0, 0xf, 0x62, 0xf4, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x8f, 0x0, 0x0, 0x4f, 0x10, 0xd9, 0x0, 0x0, 0xac, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x9b, 0x0, 0x8e, 0x0, 0x0, 0xf7, 0x0, 0x0, 0xe, 0x90, 0x0, 0xe6, 0x0, 0x2f, 0x30, 0x4, 0xf2, 0x0, 0x0, 0x9, 0xe0, 0x4, 0xf1, 0x0, 0xd, 0x80, 0x9, 0xd0, 0x0, 0x0, 0x4, 0xf3, 0x9, 0xc0, 0x0, 0x8, 0xd0, 0xe, 0x80, 0x0, 0x0, 0x0, 0xf8, 0xe, 0x70, 0x0, 0x3, 0xf3, 0x3f, 0x30, 0x0, 0x0, 0x0, 0xad, 0x3f, 0x20, 0x0, 0x0, 0xe8, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xbc, 0x0, 0x0, 0x0, 0x9d, 0xd9, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, 0x0, 0x4f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf2, 0x0, 0x0, 0x0, 0xe, 0xe0, 0x0, 0x0,
202
203 /* U+0058 "X" */
204 0x1e, 0xb0, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x4f, 0x60, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x9f, 0x20, 0x0, 0xd, 0xb0, 0x0, 0x0, 0xec, 0x0, 0x9, 0xe1, 0x0, 0x0, 0x4, 0xf7, 0x4, 0xf5, 0x0, 0x0, 0x0, 0x9, 0xf4, 0xea, 0x0, 0x0, 0x0, 0x0, 0xd, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xcf, 0x50, 0x0, 0x0, 0x0, 0xd, 0xc0, 0xbe, 0x10, 0x0, 0x0, 0x8, 0xf2, 0x1, 0xeb, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x5, 0xf6, 0x0, 0x0, 0xeb, 0x0, 0x0, 0xa, 0xf2, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x1e, 0xb0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x4f, 0x60,
205
206 /* U+0059 "Y" */
207 0xbd, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x62, 0xf7, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x8, 0xf1, 0x0, 0x0, 0x3, 0xf4, 0x0, 0x1e, 0x90, 0x0, 0x0, 0xca, 0x0, 0x0, 0x6f, 0x20, 0x0, 0x5f, 0x20, 0x0, 0x0, 0xdb, 0x0, 0xe, 0x80, 0x0, 0x0, 0x4, 0xf4, 0x8, 0xe0, 0x0, 0x0, 0x0, 0xb, 0xd2, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xed, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x0,
208
209 /* U+005A "Z" */
210 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x55, 0x55, 0x55, 0x55, 0x6f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x1, 0xeb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x65, 0x55, 0x55, 0x55, 0x52, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60,
211
212 /* U+005B "[" */
213 0xbf, 0xff, 0xbc, 0x33, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbb, 0x0, 0xbc, 0x33, 0xbf, 0xff,
214
215 /* U+005C "\\" */
216 0x45, 0x0, 0x0, 0x0, 0x5, 0xe0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xa9, 0x0, 0x0, 0x0, 0x5, 0xe0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x9a, 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, 0x4, 0xf0,
217
218 /* U+005D "]" */
219 0x9f, 0xff, 0x12, 0x37, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x10, 0x5, 0xf1, 0x0, 0x5f, 0x12, 0x37, 0xf1, 0x9f, 0xff, 0x10,
220
221 /* U+005E "^" */
222 0x0, 0x0, 0x73, 0x0, 0x0, 0x0, 0x4f, 0xc0, 0x0, 0x0, 0xa, 0x7e, 0x30, 0x0, 0x1, 0xf1, 0x89, 0x0, 0x0, 0x7a, 0x2, 0xf0, 0x0, 0xe, 0x40, 0xb, 0x60, 0x5, 0xd0, 0x0, 0x5d, 0x0, 0xb7, 0x0, 0x0, 0xe3, 0x2f, 0x10, 0x0, 0x8, 0xa0,
223
224 /* U+005F "_" */
225 0xff, 0xff, 0xff, 0xff, 0xff,
226
227 /* U+0060 "`" */
228 0x7, 0x60, 0x0, 0x2, 0xda, 0x0, 0x0, 0xb, 0xb0,
229
230 /* U+0061 "a" */
231 0x4, 0xae, 0xff, 0xb3, 0x6, 0xfb, 0x64, 0x6d, 0xf3, 0x14, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x8, 0xe0, 0x6c, 0xef, 0xff, 0xfe, 0x7f, 0x73, 0x22, 0x29, 0xed, 0x90, 0x0, 0x0, 0x8e, 0xd9, 0x0, 0x0, 0xd, 0xe7, 0xf7, 0x11, 0x4c, 0xde, 0x6, 0xdf, 0xfc, 0x57, 0xe0,
232
233 /* U+0062 "b" */
234 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x61, 0x9e, 0xfe, 0x91, 0x0, 0xf, 0x9e, 0xb6, 0x47, 0xee, 0x30, 0xf, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x60, 0x0, 0x0, 0x0, 0xca, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0xf8, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0x8e, 0xb6, 0x58, 0xee, 0x20, 0xf, 0x52, 0x9e, 0xfe, 0x91, 0x0,
235
236 /* U+0063 "c" */
237 0x0, 0x4, 0xbe, 0xfe, 0x91, 0x0, 0x7, 0xfb, 0x64, 0x7e, 0xe1, 0x4, 0xf7, 0x0, 0x0, 0x1a, 0x20, 0xcc, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf8, 0x0, 0x0, 0x1a, 0x20, 0x7, 0xfb, 0x65, 0x8e, 0xd1, 0x0, 0x3, 0xbe, 0xfe, 0x91, 0x0,
238
239 /* U+0064 "d" */
240 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xd9, 0x0, 0x8f, 0xb5, 0x47, 0xea, 0xd9, 0x5, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0xc, 0xc0, 0x0, 0x0, 0x4, 0xf9, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0x0, 0x8f, 0xb6, 0x58, 0xea, 0xc9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xc9,
241
242 /* U+0065 "e" */
243 0x0, 0x5, 0xcf, 0xfc, 0x50, 0x0, 0x0, 0x8f, 0x95, 0x49, 0xf9, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x4f, 0x50, 0xc, 0xa0, 0x0, 0x0, 0x9, 0xc0, 0xf, 0x60, 0x0, 0x0, 0x4, 0xf0, 0x1f, 0xfe, 0xee, 0xee, 0xef, 0xf2, 0xf, 0x71, 0x11, 0x11, 0x11, 0x10, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf7, 0x0, 0x0, 0x5, 0x0, 0x0, 0x7f, 0xc6, 0x56, 0xcf, 0x30, 0x0, 0x3, 0xbe, 0xfe, 0xa2, 0x0,
244
245 /* U+0066 "f" */
246 0x0, 0x7, 0xef, 0xd3, 0x0, 0x6f, 0x74, 0x72, 0x0, 0xbb, 0x0, 0x0, 0x0, 0xc9, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xd0, 0x23, 0xdb, 0x33, 0x30, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0,
247
248 /* U+0067 "g" */
249 0x0, 0x4, 0xbf, 0xfd, 0x70, 0xab, 0x0, 0x8f, 0xa4, 0x35, 0xcc, 0xab, 0x4, 0xf6, 0x0, 0x0, 0xb, 0xfb, 0xc, 0xc0, 0x0, 0x0, 0x1, 0xfb, 0xf, 0x70, 0x0, 0x0, 0x0, 0xcb, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xbb, 0xf, 0x70, 0x0, 0x0, 0x0, 0xcb, 0xc, 0xc0, 0x0, 0x0, 0x2, 0xfb, 0x4, 0xf7, 0x0, 0x0, 0xc, 0xfb, 0x0, 0x8f, 0xb6, 0x57, 0xeb, 0xbb, 0x0, 0x4, 0xbf, 0xfd, 0x70, 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x50, 0x0, 0x0, 0x6, 0xf2, 0x3, 0xfd, 0x85, 0x46, 0xaf, 0x80, 0x0, 0x18, 0xcf, 0xfe, 0xb5, 0x0,
250
251 /* U+0068 "h" */
252 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x63, 0xbe, 0xfd, 0x80, 0x0, 0xfa, 0xfa, 0x65, 0x9f, 0xb0, 0xf, 0xf4, 0x0, 0x0, 0x6f, 0x40, 0xfb, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x70, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0,
253
254 /* U+0069 "i" */
255 0x2f, 0x83, 0xf9, 0x0, 0x0, 0x0, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60,
256
257 /* U+006A "j" */
258 0x0, 0x1, 0xe9, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe8, 0x0, 0x0, 0xe7, 0x0, 0x0, 0xf6, 0x56, 0x4b, 0xf1, 0x6e, 0xfd, 0x40,
259
260 /* U+006B "k" */
261 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xcd, 0x10, 0xf6, 0x0, 0x1, 0xcd, 0x10, 0xf, 0x60, 0x1, 0xdd, 0x10, 0x0, 0xf6, 0x1, 0xdd, 0x10, 0x0, 0xf, 0x62, 0xef, 0x20, 0x0, 0x0, 0xf9, 0xec, 0xfb, 0x0, 0x0, 0xf, 0xfc, 0x5, 0xf7, 0x0, 0x0, 0xfc, 0x0, 0x8, 0xf3, 0x0, 0xf, 0x60, 0x0, 0xc, 0xe1, 0x0, 0xf6, 0x0, 0x0, 0x1e, 0xb0, 0xf, 0x60, 0x0, 0x0, 0x4f, 0x70,
262
263 /* U+006C "l" */
264 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60, 0xf6, 0xf, 0x60,
265
266 /* U+006D "m" */
267 0xf, 0x53, 0xbf, 0xfd, 0x60, 0x4, 0xcf, 0xfc, 0x50, 0x0, 0xf9, 0xf9, 0x56, 0xbf, 0x77, 0xf9, 0x56, 0xbf, 0x70, 0xf, 0xf4, 0x0, 0x0, 0xaf, 0xf4, 0x0, 0x0, 0xbf, 0x0, 0xfb, 0x0, 0x0, 0x3, 0xfa, 0x0, 0x0, 0x3, 0xf3, 0xf, 0x70, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50, 0xf6, 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x1, 0xf5, 0xf, 0x60, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x1f, 0x50,
268
269 /* U+006E "n" */
270 0xf, 0x53, 0xbe, 0xfd, 0x80, 0x0, 0xf9, 0xfa, 0x65, 0x9f, 0xb0, 0xf, 0xf4, 0x0, 0x0, 0x6f, 0x40, 0xfb, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x70, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0, 0xf6, 0x0, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0x0, 0xc, 0xa0,
271
272 /* U+006F "o" */
273 0x0, 0x4, 0xbf, 0xfd, 0x81, 0x0, 0x0, 0x8f, 0xb5, 0x47, 0xee, 0x20, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xb, 0xc0, 0x0, 0x0, 0x4, 0xf4, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xc0, 0x0, 0x7f, 0xb6, 0x58, 0xee, 0x20, 0x0, 0x4, 0xbf, 0xfd, 0x81, 0x0,
274
275 /* U+0070 "p" */
276 0xf, 0x52, 0xae, 0xfe, 0x91, 0x0, 0xf, 0x8e, 0xb6, 0x47, 0xee, 0x30, 0xf, 0xf7, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0x60, 0x0, 0x0, 0x0, 0xca, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe8, 0xf, 0xc0, 0x0, 0x0, 0x3, 0xf5, 0xf, 0xf8, 0x0, 0x0, 0x1d, 0xd0, 0xf, 0x8e, 0xb6, 0x58, 0xee, 0x20, 0xf, 0x61, 0x9e, 0xfe, 0x91, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0,
277
278 /* U+0071 "q" */
279 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xc9, 0x0, 0x8f, 0xb5, 0x47, 0xea, 0xc9, 0x5, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0xc, 0xc0, 0x0, 0x0, 0x3, 0xf9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0x1f, 0x50, 0x0, 0x0, 0x0, 0xd9, 0xf, 0x70, 0x0, 0x0, 0x0, 0xe9, 0xc, 0xc0, 0x0, 0x0, 0x4, 0xf9, 0x4, 0xf7, 0x0, 0x0, 0x1d, 0xf9, 0x0, 0x8f, 0xb6, 0x58, 0xea, 0xd9, 0x0, 0x4, 0xbf, 0xfd, 0x60, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd9,
280
281 /* U+0072 "r" */
282 0xf, 0x53, 0xbf, 0x40, 0xf9, 0xf9, 0x51, 0xf, 0xf4, 0x0, 0x0, 0xfb, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xf6, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0,
283
284 /* U+0073 "s" */
285 0x0, 0x7d, 0xff, 0xd9, 0x20, 0x9, 0xf8, 0x44, 0x7d, 0x80, 0xf, 0x60, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0xb, 0xf8, 0x30, 0x0, 0x0, 0x0, 0x8e, 0xff, 0xc7, 0x0, 0x0, 0x0, 0x14, 0x8f, 0xb0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x3, 0x0, 0x0, 0x6, 0xf1, 0x4f, 0xc7, 0x55, 0x8f, 0xa0, 0x4, 0xae, 0xff, 0xc7, 0x0,
286
287 /* U+0074 "t" */
288 0x0, 0x65, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xd0, 0x23, 0xdb, 0x33, 0x30, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x6f, 0x84, 0x82, 0x0, 0x8, 0xef, 0xc3,
289
290 /* U+0075 "u" */
291 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x2f, 0x40, 0x0, 0x0, 0xf, 0x72, 0xf4, 0x0, 0x0, 0x0, 0xf7, 0x1f, 0x50, 0x0, 0x0, 0xf, 0x70, 0xf7, 0x0, 0x0, 0x4, 0xf7, 0xb, 0xe1, 0x0, 0x0, 0xcf, 0x70, 0x3f, 0xd7, 0x57, 0xda, 0xe7, 0x0, 0x2b, 0xef, 0xd7, 0xe, 0x70,
292
293 /* U+0076 "v" */
294 0xcb, 0x0, 0x0, 0x0, 0xc, 0x95, 0xf2, 0x0, 0x0, 0x3, 0xf2, 0xe, 0x80, 0x0, 0x0, 0xac, 0x0, 0x8e, 0x0, 0x0, 0x1f, 0x50, 0x1, 0xf6, 0x0, 0x7, 0xe0, 0x0, 0xa, 0xc0, 0x0, 0xe7, 0x0, 0x0, 0x3f, 0x30, 0x5f, 0x10, 0x0, 0x0, 0xca, 0xc, 0xa0, 0x0, 0x0, 0x6, 0xf4, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x0,
295
296 /* U+0077 "w" */
297 0xab, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0, 0x1, 0xf3, 0x4f, 0x10, 0x0, 0x5, 0xfe, 0x0, 0x0, 0x6, 0xd0, 0xe, 0x60, 0x0, 0xb, 0xaf, 0x50, 0x0, 0xc, 0x80, 0x9, 0xc0, 0x0, 0x1f, 0x3a, 0xa0, 0x0, 0x2f, 0x20, 0x3, 0xf1, 0x0, 0x6d, 0x4, 0xf1, 0x0, 0x7c, 0x0, 0x0, 0xd7, 0x0, 0xc7, 0x0, 0xe6, 0x0, 0xd6, 0x0, 0x0, 0x8d, 0x2, 0xf1, 0x0, 0x8c, 0x3, 0xf1, 0x0, 0x0, 0x2f, 0x28, 0xc0, 0x0, 0x3f, 0x19, 0xb0, 0x0, 0x0, 0xc, 0x8e, 0x60, 0x0, 0xd, 0x7e, 0x50, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x1, 0xf9, 0x0, 0x0,
298
299 /* U+0078 "x" */
300 0x1e, 0x80, 0x0, 0x0, 0xdb, 0x0, 0x5f, 0x40, 0x0, 0x9e, 0x10, 0x0, 0x9e, 0x10, 0x5f, 0x30, 0x0, 0x0, 0xcb, 0x2e, 0x70, 0x0, 0x0, 0x2, 0xfe, 0xb0, 0x0, 0x0, 0x0, 0xa, 0xf5, 0x0, 0x0, 0x0, 0x5, 0xfc, 0xe1, 0x0, 0x0, 0x1, 0xe8, 0xd, 0xb0, 0x0, 0x0, 0xcc, 0x0, 0x2f, 0x70, 0x0, 0x8f, 0x20, 0x0, 0x6f, 0x30, 0x4f, 0x50, 0x0, 0x0, 0xad, 0x0,
301
302 /* U+0079 "y" */
303 0xc, 0xb0, 0x0, 0x0, 0x0, 0xc9, 0x5, 0xf2, 0x0, 0x0, 0x3, 0xf2, 0x0, 0xe9, 0x0, 0x0, 0xa, 0xb0, 0x0, 0x7f, 0x0, 0x0, 0x1f, 0x40, 0x0, 0x1f, 0x60, 0x0, 0x8d, 0x0, 0x0, 0x9, 0xd0, 0x0, 0xe7, 0x0, 0x0, 0x2, 0xf4, 0x5, 0xf0, 0x0, 0x0, 0x0, 0xbb, 0xc, 0x90, 0x0, 0x0, 0x0, 0x5f, 0x5f, 0x20, 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x3c, 0x55, 0xdd, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xb1, 0x0, 0x0, 0x0,
304
305 /* U+007A "z" */
306 0xf, 0xff, 0xff, 0xff, 0xf4, 0x3, 0x33, 0x33, 0x3d, 0xd0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x1e, 0x90, 0x0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x1, 0xe9, 0x0, 0x0, 0x0, 0xb, 0xe4, 0x33, 0x33, 0x31, 0x2f, 0xff, 0xff, 0xff, 0xf6,
307
308 /* U+007B "{" */
309 0x0, 0x5d, 0xf4, 0x0, 0xfb, 0x40, 0x3, 0xf4, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x6, 0xf2, 0x0, 0xcf, 0xb0, 0x0, 0x28, 0xf1, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x3, 0xf3, 0x0, 0x0, 0xfb, 0x41, 0x0, 0x5d, 0xf4,
310
311 /* U+007C "|" */
312 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
313
314 /* U+007D "}" */
315 0x9f, 0xb2, 0x0, 0x25, 0xeb, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x1e, 0xf7, 0x0, 0x6f, 0x51, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x0, 0x8e, 0x0, 0x25, 0xeb, 0x0, 0x9f, 0xb2, 0x0,
316
317 /* U+007E "~" */
318 0x9, 0xfd, 0x50, 0x0, 0xc3, 0x6c, 0x36, 0xe8, 0x4, 0xe0, 0xb4, 0x0, 0x2c, 0xff, 0x50, 0x10, 0x0, 0x0, 0x20, 0x0,
319
320 /* U+0401 "Ё" */
321 0x0, 0x4e, 0x20, 0xba, 0x0, 0x0, 0x3, 0xb1, 0x8, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xae, 0x55, 0x55, 0x55, 0x55, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xf1, 0xa, 0xe3, 0x33, 0x33, 0x33, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xae, 0x55, 0x55, 0x55, 0x55, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xf4,
322
323 /* U+0410 "А" */
324 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf5, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xca, 0xc, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x6f, 0x10, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x8, 0xe0, 0x0, 0x0, 0x0, 0x8f, 0x0, 0x0, 0x2f, 0x50, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x5, 0xf3, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x3f, 0x63, 0x33, 0x33, 0x33, 0x8f, 0x10, 0xa, 0xe0, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x1, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x50,
325
326 /* U+0411 "Б" */
327 0xaf, 0xff, 0xff, 0xff, 0xff, 0x90, 0xad, 0x44, 0x44, 0x44, 0x44, 0x20, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xc6, 0x0, 0xad, 0x33, 0x33, 0x35, 0xaf, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x7, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0x0, 0x0, 0x8, 0xf2, 0xad, 0x33, 0x33, 0x35, 0xaf, 0x80, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0,
328
329 /* U+0412 "В" */
330 0xaf, 0xff, 0xff, 0xfe, 0xa2, 0x0, 0xad, 0x33, 0x33, 0x36, 0xdf, 0x30, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xb0, 0xad, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xad, 0x0, 0x0, 0x0, 0x9, 0xe0, 0xad, 0x0, 0x0, 0x0, 0xd, 0xa0, 0xad, 0x0, 0x0, 0x3, 0xbd, 0x10, 0xaf, 0xff, 0xff, 0xff, 0xf5, 0x0, 0xad, 0x33, 0x33, 0x34, 0x7e, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf5, 0xad, 0x0, 0x0, 0x0, 0x0, 0xd9, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe9, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf6, 0xad, 0x33, 0x33, 0x34, 0x8f, 0xc0, 0xaf, 0xff, 0xff, 0xff, 0xc7, 0x0,
331
332 /* U+0413 "Г" */
333 0xaf, 0xff, 0xff, 0xff, 0xf4, 0xad, 0x55, 0x55, 0x55, 0x51, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0,
334
335 /* U+0414 "Д" */
336 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x5, 0xf5, 0x55, 0x55, 0x58, 0xf2, 0x0, 0x0, 0x6, 0xe0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x7, 0xd0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x8, 0xc0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xb, 0xa0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x0, 0xac, 0x0, 0x0, 0x0, 0x5, 0xf2, 0x0, 0x49, 0xf8, 0x55, 0x55, 0x55, 0x58, 0xf6, 0x51, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf3, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
337
338 /* U+0415 "Е" */
339 0xaf, 0xff, 0xff, 0xff, 0xff, 0xa, 0xe5, 0x55, 0x55, 0x55, 0x50, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0x10, 0xae, 0x33, 0x33, 0x33, 0x30, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe5, 0x55, 0x55, 0x55, 0x51, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x40,
340
341 /* U+0416 "Ж" */
342 0xd, 0xb0, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x8, 0xf1, 0x4, 0xf5, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x2f, 0x70, 0x0, 0xad, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0xbd, 0x0, 0x0, 0x1f, 0x70, 0x0, 0x9, 0xd0, 0x0, 0x4, 0xf4, 0x0, 0x0, 0x7, 0xf1, 0x0, 0x9, 0xd0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0xda, 0x0, 0x9, 0xd0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x0, 0x3f, 0x41, 0x1a, 0xd1, 0x12, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x74, 0x4b, 0xe4, 0x45, 0xf9, 0x0, 0x0, 0x0, 0x1, 0xfb, 0x0, 0x9, 0xd0, 0x0, 0x7f, 0x40, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x9, 0xd0, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x4f, 0x60, 0x0, 0x9, 0xd0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0xec, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x9f, 0x20, 0x9, 0xf2, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0xe, 0xc0, 0x3f, 0x80, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x4, 0xf6,
343
344 /* U+0417 "З" */
345 0x0, 0x15, 0x9a, 0x96, 0x10, 0x0, 0x7, 0xff, 0xdb, 0xcf, 0xf6, 0x0, 0x7, 0x71, 0x0, 0x1, 0xaf, 0x40, 0x0, 0x0, 0x0, 0x0, 0xe, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x90, 0x0, 0x0, 0x0, 0x3, 0xbe, 0x10, 0x0, 0xb, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x2, 0x33, 0x35, 0xaf, 0x50, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf5, 0x9, 0x10, 0x0, 0x0, 0x1c, 0xf1, 0x1c, 0xfa, 0x64, 0x59, 0xef, 0x40, 0x0, 0x5b, 0xff, 0xfe, 0x92, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
346
347 /* U+0418 "И" */
348 0xad, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x4f, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xff, 0x2a, 0xd0, 0x0, 0x0, 0xb, 0xe6, 0xf2, 0xad, 0x0, 0x0, 0x7, 0xf4, 0x5f, 0x2a, 0xd0, 0x0, 0x3, 0xf9, 0x5, 0xf2, 0xad, 0x0, 0x0, 0xdc, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0xaf, 0x20, 0x5, 0xf2, 0xad, 0x0, 0x5f, 0x60, 0x0, 0x5f, 0x2a, 0xd0, 0x2f, 0xa0, 0x0, 0x5, 0xf2, 0xad, 0xc, 0xe1, 0x0, 0x0, 0x5f, 0x2a, 0xd8, 0xf3, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0xf8, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0x20, 0x0, 0x0, 0x0, 0x5f, 0x20,
349
350 /* U+0419 "Й" */
351 0x0, 0x8, 0x0, 0x0, 0x53, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x3e, 0x30, 0x0, 0x0, 0x1, 0xad, 0xec, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x9f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x4f, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x1e, 0xff, 0x2a, 0xd0, 0x0, 0x0, 0xb, 0xe6, 0xf2, 0xad, 0x0, 0x0, 0x7, 0xf4, 0x5f, 0x2a, 0xd0, 0x0, 0x3, 0xf9, 0x5, 0xf2, 0xad, 0x0, 0x0, 0xdc, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0xaf, 0x20, 0x5, 0xf2, 0xad, 0x0, 0x5f, 0x60, 0x0, 0x5f, 0x2a, 0xd0, 0x2f, 0xa0, 0x0, 0x5, 0xf2, 0xad, 0xc, 0xe1, 0x0, 0x0, 0x5f, 0x2a, 0xd8, 0xf3, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0xf8, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xaf, 0x20, 0x0, 0x0, 0x0, 0x5f, 0x20,
352
353 /* U+041A "К" */
354 0xac, 0x0, 0x0, 0x0, 0x9, 0xe1, 0xac, 0x0, 0x0, 0x0, 0x4f, 0x40, 0xac, 0x0, 0x0, 0x1, 0xe9, 0x0, 0xac, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xac, 0x0, 0x0, 0x5f, 0x30, 0x0, 0xac, 0x0, 0x1, 0xf7, 0x0, 0x0, 0xad, 0x11, 0x1b, 0xc0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0x50, 0x0, 0x0, 0xad, 0x44, 0x4d, 0xd0, 0x0, 0x0, 0xac, 0x0, 0x2, 0xfa, 0x0, 0x0, 0xac, 0x0, 0x0, 0x5f, 0x50, 0x0, 0xac, 0x0, 0x0, 0xa, 0xf2, 0x0, 0xac, 0x0, 0x0, 0x0, 0xdc, 0x0, 0xac, 0x0, 0x0, 0x0, 0x3f, 0x80, 0xac, 0x0, 0x0, 0x0, 0x6, 0xf4,
355
356 /* U+041B "Л" */
357 0x0, 0x2, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x3, 0xf6, 0x55, 0x55, 0x56, 0xf5, 0x0, 0x3, 0xf1, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x6, 0xe0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x7, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x2, 0xf5, 0x0, 0xb, 0x90, 0x0, 0x0, 0x2, 0xf5, 0x0, 0xf, 0x60, 0x0, 0x0, 0x2, 0xf5, 0x0, 0x6f, 0x20, 0x0, 0x0, 0x2, 0xf5, 0x58, 0xfb, 0x0, 0x0, 0x0, 0x2, 0xf5, 0xbf, 0xb1, 0x0, 0x0, 0x0, 0x2, 0xf5,
358
359 /* U+041C "М" */
360 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xea, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x2, 0xfe, 0xaf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xea, 0xef, 0x70, 0x0, 0x0, 0x0, 0x3f, 0xee, 0xac, 0x9f, 0x10, 0x0, 0x0, 0xb, 0xd8, 0xea, 0xc1, 0xf9, 0x0, 0x0, 0x4, 0xf4, 0x8e, 0xac, 0x7, 0xf2, 0x0, 0x0, 0xcb, 0x8, 0xea, 0xc0, 0xe, 0xa0, 0x0, 0x5f, 0x20, 0x8e, 0xac, 0x0, 0x5f, 0x30, 0xd, 0x90, 0x8, 0xea, 0xc0, 0x0, 0xcb, 0x6, 0xf1, 0x0, 0x8e, 0xac, 0x0, 0x3, 0xf5, 0xe7, 0x0, 0x8, 0xea, 0xc0, 0x0, 0xa, 0xfe, 0x0, 0x0, 0x8e, 0xac, 0x0, 0x0, 0x1f, 0x50, 0x0, 0x8, 0xea, 0xc0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x8e, 0xac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xe0,
361
362 /* U+041D "Н" */
363 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xae, 0x44, 0x44, 0x44, 0x44, 0x9f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x1a, 0xd0, 0x0, 0x0, 0x0, 0x6, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10,
364
365 /* U+041E "О" */
366 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x0, 0x2, 0xdf, 0xb7, 0x57, 0xbf, 0xd2, 0x0, 0x2, 0xed, 0x20, 0x0, 0x0, 0x3d, 0xe2, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0x1e, 0xc0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x49, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xcd, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xc9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x40, 0xce, 0x10, 0x0, 0x0, 0x0, 0x1e, 0xc0, 0x2, 0xed, 0x20, 0x0, 0x0, 0x3d, 0xe2, 0x0, 0x2, 0xdf, 0xb7, 0x67, 0xbf, 0xd2, 0x0, 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x0,
367
368 /* U+041F "П" */
369 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xe5, 0x55, 0x55, 0x55, 0x58, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x2a, 0xd0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x20,
370
371 /* U+0420 "Р" */
372 0xaf, 0xff, 0xff, 0xfc, 0x70, 0x0, 0xae, 0x55, 0x55, 0x6a, 0xfd, 0x10, 0xad, 0x0, 0x0, 0x0, 0x3e, 0xa0, 0xad, 0x0, 0x0, 0x0, 0x7, 0xf1, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x5, 0xf2, 0xad, 0x0, 0x0, 0x0, 0xd, 0xc0, 0xad, 0x11, 0x11, 0x26, 0xdf, 0x30, 0xaf, 0xff, 0xff, 0xff, 0xb2, 0x0, 0xae, 0x44, 0x44, 0x30, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0,
373
374 /* U+0421 "С" */
375 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0, 0x2, 0xdf, 0xb7, 0x57, 0xaf, 0xd2, 0x2, 0xed, 0x30, 0x0, 0x0, 0x2d, 0x40, 0xce, 0x10, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x10, 0x0, 0x0, 0x0, 0x0, 0x2, 0xed, 0x30, 0x0, 0x0, 0x3d, 0x40, 0x2, 0xdf, 0xb7, 0x67, 0xbf, 0xd1, 0x0, 0x0, 0x6b, 0xef, 0xeb, 0x60, 0x0,
376
377 /* U+0422 "Т" */
378 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x45, 0x55, 0x5e, 0xb5, 0x55, 0x52, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x0, 0x0,
379
380 /* U+0423 "У" */
381 0x5f, 0x40, 0x0, 0x0, 0x0, 0x6, 0xf2, 0xc, 0xc0, 0x0, 0x0, 0x0, 0xd, 0x90, 0x4, 0xf3, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x4f, 0x30, 0x0, 0x6, 0xf1, 0x0, 0x0, 0xc, 0xb0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x4, 0xf3, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0xcb, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x36, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xc, 0xbd, 0x70, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x86, 0xaf, 0x50, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xd5, 0x0, 0x0, 0x0, 0x0,
382
383 /* U+0424 "Ф" */
384 0x0, 0x0, 0x0, 0x6, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x8c, 0xef, 0xff, 0xda, 0x50, 0x0, 0x0, 0xa, 0xfc, 0x75, 0xae, 0x46, 0xaf, 0xd3, 0x0, 0xc, 0xe4, 0x0, 0x8, 0xd0, 0x0, 0x1b, 0xf2, 0x6, 0xf3, 0x0, 0x0, 0x8d, 0x0, 0x0, 0xd, 0xc0, 0xca, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x5f, 0x2f, 0x70, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x2, 0xf4, 0xf7, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x1f, 0x5d, 0xa0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x4, 0xf2, 0x8f, 0x10, 0x0, 0x8, 0xd0, 0x0, 0x0, 0xbd, 0x0, 0xdd, 0x20, 0x0, 0x8d, 0x0, 0x0, 0x9f, 0x40, 0x2, 0xdf, 0x94, 0x28, 0xd1, 0x37, 0xdf, 0x50, 0x0, 0x0, 0x6b, 0xff, 0xff, 0xff, 0xd8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x59, 0x0, 0x0, 0x0, 0x0,
385
386 /* U+0425 "Х" */
387 0xd, 0xd0, 0x0, 0x0, 0x0, 0xdd, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x9f, 0x30, 0x0, 0x9f, 0x30, 0x0, 0x3f, 0x80, 0x0, 0x0, 0xdd, 0x0, 0xd, 0xd0, 0x0, 0x0, 0x3, 0xf8, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x9, 0xf7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xdf, 0x40, 0x0, 0x0, 0x0, 0xd, 0xd0, 0xde, 0x0, 0x0, 0x0, 0x9, 0xf3, 0x3, 0xf9, 0x0, 0x0, 0x3, 0xf7, 0x0, 0x8, 0xf4, 0x0, 0x0, 0xdc, 0x0, 0x0, 0xd, 0xd0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x3f, 0x90, 0x3f, 0x70, 0x0, 0x0, 0x0, 0x8f, 0x30,
388
389 /* U+0426 "Ц" */
390 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0xae, 0x55, 0x55, 0x55, 0x55, 0xdd, 0x55, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37,
391
392 /* U+0427 "Ч" */
393 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xda, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xca, 0x0, 0x0, 0x0, 0x3, 0xf3, 0xbd, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x6f, 0x50, 0x0, 0x0, 0x4, 0xf3, 0xc, 0xf8, 0x21, 0x25, 0xaf, 0xf3, 0x1, 0x9f, 0xff, 0xff, 0xb8, 0xf3, 0x0, 0x0, 0x34, 0x20, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3,
394
395 /* U+0428 "Ш" */
396 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0xae, 0x55, 0x55, 0x55, 0xdc, 0x55, 0x55, 0x55, 0xf8, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
397
398 /* U+0429 "Щ" */
399 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xad, 0x0, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x0, 0xf8, 0x0, 0xae, 0x55, 0x55, 0x55, 0xdc, 0x55, 0x55, 0x55, 0xfa, 0x53, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
400 0x0, 0x0, 0x55,
401
402 /* U+042A "Ъ" */
403 0xcf, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x55, 0x9f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xc6, 0x0, 0x0, 0x0, 0x6f, 0x43, 0x33, 0x35, 0xbf, 0x90, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x8, 0xf3, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x9, 0xf1, 0x0, 0x0, 0x6f, 0x43, 0x33, 0x35, 0xbf, 0x60, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xfe, 0xa3, 0x0,
404
405 /* U+042B "Ы" */
406 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0x4, 0xf3, 0xad, 0x33, 0x33, 0x46, 0xcf, 0x60, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xb, 0xf0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x4, 0xf3, 0xad, 0x33, 0x33, 0x46, 0xdf, 0x40, 0x4, 0xf3, 0xaf, 0xff, 0xff, 0xfd, 0x92, 0x0, 0x4, 0xf3,
407
408 /* U+042C "Ь" */
409 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xfe, 0xb4, 0x0, 0xad, 0x33, 0x33, 0x46, 0xcf, 0x60, 0xad, 0x0, 0x0, 0x0, 0xb, 0xf0, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0x2, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x4, 0xf3, 0xad, 0x0, 0x0, 0x0, 0xc, 0xe0, 0xad, 0x33, 0x33, 0x46, 0xdf, 0x40, 0xaf, 0xff, 0xff, 0xfd, 0x92, 0x0,
410
411 /* U+042D "Э" */
412 0x0, 0x39, 0xdf, 0xfd, 0x81, 0x0, 0x0, 0x8f, 0xd8, 0x66, 0x9f, 0xf4, 0x0, 0x1e, 0x70, 0x0, 0x0, 0x1b, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xd0, 0x0, 0xc, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x23, 0x33, 0x33, 0x3b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe0, 0x1c, 0x50, 0x0, 0x0, 0x1b, 0xf4, 0x0, 0x9f, 0xd8, 0x66, 0xaf, 0xf5, 0x0, 0x0, 0x3a, 0xdf, 0xfd, 0x81, 0x0, 0x0,
413
414 /* U+042E "Ю" */
415 0xad, 0x0, 0x0, 0x0, 0x3a, 0xef, 0xfc, 0x60, 0x0, 0xa, 0xd0, 0x0, 0x0, 0x9f, 0xb6, 0x45, 0x9f, 0xd2, 0x0, 0xad, 0x0, 0x0, 0xaf, 0x50, 0x0, 0x0, 0x2d, 0xe1, 0xa, 0xd0, 0x0, 0x5f, 0x50, 0x0, 0x0, 0x0, 0x1e, 0xa0, 0xad, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1a, 0xd0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x11, 0x5f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xe, 0x9a, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0xad, 0x44, 0x7f, 0x30, 0x0, 0x0, 0x0, 0x0, 0xe, 0x9a, 0xd0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf6, 0xad, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1a, 0xd0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x1e, 0xa0, 0xad, 0x0, 0x0, 0xaf, 0x50, 0x0, 0x0, 0x2d, 0xe1, 0xa, 0xd0, 0x0, 0x0, 0x9f, 0xb6, 0x45, 0x9f, 0xd2, 0x0, 0xad, 0x0, 0x0, 0x0, 0x3a, 0xef, 0xfc, 0x60, 0x0, 0x0,
416
417 /* U+042F "Я" */
418 0x0, 0x29, 0xef, 0xff, 0xff, 0xf4, 0x5, 0xfd, 0x85, 0x55, 0x57, 0xf4, 0x1f, 0xb0, 0x0, 0x0, 0x3, 0xf4, 0x7f, 0x10, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0xad, 0x0, 0x0, 0x0, 0x3, 0xf4, 0x8f, 0x0, 0x0, 0x0, 0x3, 0xf4, 0x3f, 0x70, 0x0, 0x0, 0x3, 0xf4, 0x9, 0xf8, 0x31, 0x0, 0x3, 0xf4, 0x0, 0x7e, 0xff, 0xff, 0xff, 0xf4, 0x0, 0xd, 0xb3, 0x33, 0x36, 0xf4, 0x0, 0x7f, 0x10, 0x0, 0x3, 0xf4, 0x2, 0xf7, 0x0, 0x0, 0x3, 0xf4, 0xb, 0xd0, 0x0, 0x0, 0x3, 0xf4, 0x6f, 0x30, 0x0, 0x0, 0x3, 0xf4,
419
420 /* U+0430 "а" */
421 0x4, 0xae, 0xff, 0xb3, 0x6, 0xfb, 0x64, 0x6d, 0xf3, 0x14, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x8, 0xe0, 0x6c, 0xef, 0xff, 0xfe, 0x7f, 0x73, 0x22, 0x29, 0xed, 0x90, 0x0, 0x0, 0x8e, 0xd9, 0x0, 0x0, 0xd, 0xe7, 0xf6, 0x11, 0x4c, 0xce, 0x6, 0xdf, 0xfc, 0x57, 0xe0,
422
423 /* U+0431 "б" */
424 0x0, 0x0, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0, 0x5, 0x9d, 0xff, 0x80, 0x0, 0x8, 0xff, 0xd9, 0x52, 0x0, 0x0, 0xcf, 0x71, 0x0, 0x0, 0x0, 0x8, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x60, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x5, 0xcf, 0xfe, 0x80, 0x0, 0x8d, 0x8e, 0x74, 0x49, 0xfd, 0x0, 0xae, 0xd1, 0x0, 0x0, 0x3f, 0x90, 0xaf, 0x50, 0x0, 0x0, 0x9, 0xf0, 0x9f, 0x10, 0x0, 0x0, 0x5, 0xf2, 0x6f, 0x10, 0x0, 0x0, 0x5, 0xf1, 0x2f, 0x60, 0x0, 0x0, 0x9, 0xe0, 0xb, 0xe2, 0x0, 0x0, 0x4f, 0x70, 0x1, 0xee, 0x74, 0x48, 0xfb, 0x0, 0x0, 0x19, 0xef, 0xfc, 0x60, 0x0,
425
426 /* U+0432 "в" */
427 0xff, 0xff, 0xff, 0xb3, 0xf, 0x72, 0x22, 0x4b, 0xf2, 0xf6, 0x0, 0x0, 0xf, 0x7f, 0x60, 0x0, 0x0, 0xf6, 0xf6, 0x0, 0x1, 0x9e, 0x1f, 0xff, 0xff, 0xff, 0x50, 0xf7, 0x22, 0x22, 0x6f, 0x6f, 0x60, 0x0, 0x0, 0xac, 0xf6, 0x0, 0x0, 0xa, 0xdf, 0x82, 0x22, 0x37, 0xf7, 0xff, 0xff, 0xff, 0xd7, 0x0,
428
429 /* U+0433 "г" */
430 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x44, 0x44, 0x42, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0,
431
432 /* U+0434 "д" */
433 0x0, 0x2f, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x2, 0xf6, 0x44, 0x44, 0xda, 0x0, 0x0, 0x3f, 0x10, 0x0, 0xc, 0xa0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x5f, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x6, 0xe0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x7d, 0x0, 0x0, 0xc, 0xa0, 0x0, 0xa, 0xa0, 0x0, 0x0, 0xca, 0x0, 0x0, 0xe6, 0x0, 0x0, 0xc, 0xa0, 0x3, 0xaf, 0x44, 0x44, 0x44, 0xdb, 0x41, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x80, 0x0, 0x0, 0x0, 0x1, 0xf4, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x46, 0x40, 0x0, 0x0, 0x0, 0x0, 0x82,
434
435 /* U+0435 "е" */
436 0x0, 0x4b, 0xff, 0xc6, 0x0, 0x0, 0x7f, 0xa5, 0x48, 0xfa, 0x0, 0x3f, 0x50, 0x0, 0x3, 0xf6, 0xa, 0xb0, 0x0, 0x0, 0x8, 0xe0, 0xe7, 0x0, 0x0, 0x0, 0x3f, 0x2f, 0xfe, 0xee, 0xee, 0xef, 0xf3, 0xe8, 0x11, 0x11, 0x11, 0x11, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x51, 0x0, 0x6f, 0xc7, 0x56, 0xbf, 0x40, 0x0, 0x3a, 0xef, 0xea, 0x30, 0x0,
437
438 /* U+0436 "ж" */
439 0x1f, 0x80, 0x0, 0x7, 0xf0, 0x0, 0x1, 0xe8, 0x0, 0x6f, 0x20, 0x0, 0x7f, 0x0, 0x0, 0x9e, 0x0, 0x0, 0xcb, 0x0, 0x7, 0xf0, 0x0, 0x3f, 0x40, 0x0, 0x2, 0xf5, 0x0, 0x7f, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x7, 0xe1, 0x7, 0xf0, 0x7, 0xe1, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x9, 0xf4, 0x39, 0xf3, 0x39, 0xf2, 0x0, 0x0, 0x4, 0xf6, 0x0, 0x7f, 0x0, 0xd, 0xc0, 0x0, 0x1, 0xeb, 0x0, 0x7, 0xf0, 0x0, 0x3f, 0x70, 0x0, 0xaf, 0x10, 0x0, 0x7f, 0x0, 0x0, 0x8f, 0x30, 0x5f, 0x60, 0x0, 0x7, 0xf0, 0x0, 0x0, 0xdd, 0x0,
440
441 /* U+0437 "з" */
442 0x2, 0x9e, 0xff, 0xc6, 0x0, 0xc, 0xc7, 0x56, 0xaf, 0xa0, 0x1, 0x0, 0x0, 0x8, 0xf1, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, 0x3d, 0x90, 0x0, 0x9, 0xff, 0xfb, 0x0, 0x0, 0x1, 0x22, 0x4c, 0xe1, 0x0, 0x0, 0x0, 0x1, 0xf7, 0x1, 0x0, 0x0, 0x3, 0xf6, 0x3f, 0xa6, 0x45, 0x8f, 0xc0, 0x3, 0xae, 0xff, 0xc7, 0x0,
443
444 /* U+0438 "и" */
445 0xf7, 0x0, 0x0, 0x1, 0xdb, 0xf7, 0x0, 0x0, 0xb, 0xfb, 0xf7, 0x0, 0x0, 0x8f, 0xdb, 0xf7, 0x0, 0x5, 0xf4, 0xbb, 0xf7, 0x0, 0x3f, 0x70, 0xbb, 0xf7, 0x1, 0xea, 0x0, 0xbb, 0xf7, 0xc, 0xd0, 0x0, 0xbb, 0xf7, 0x9f, 0x20, 0x0, 0xbb, 0xfc, 0xf4, 0x0, 0x0, 0xbb, 0xff, 0x70, 0x0, 0x0, 0xbb, 0xfb, 0x0, 0x0, 0x0, 0xbb,
446
447 /* U+0439 "й" */
448 0x2, 0xe0, 0x0, 0x5b, 0x0, 0x0, 0xd7, 0x1, 0xc6, 0x0, 0x0, 0x2b, 0xed, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x1, 0xdb, 0xf7, 0x0, 0x0, 0xb, 0xfb, 0xf7, 0x0, 0x0, 0x8f, 0xdb, 0xf7, 0x0, 0x5, 0xf4, 0xbb, 0xf7, 0x0, 0x3f, 0x70, 0xbb, 0xf7, 0x1, 0xea, 0x0, 0xbb, 0xf7, 0xc, 0xd0, 0x0, 0xbb, 0xf7, 0x9f, 0x20, 0x0, 0xbb, 0xfc, 0xf4, 0x0, 0x0, 0xbb, 0xff, 0x70, 0x0, 0x0, 0xbb, 0xfb, 0x0, 0x0, 0x0, 0xbb,
449
450 /* U+043A "к" */
451 0xf7, 0x0, 0x0, 0xc, 0xb0, 0xf7, 0x0, 0x0, 0x9e, 0x10, 0xf7, 0x0, 0x5, 0xf3, 0x0, 0xf7, 0x0, 0x2e, 0x70, 0x0, 0xf7, 0x0, 0xca, 0x0, 0x0, 0xff, 0xff, 0xf2, 0x0, 0x0, 0xf9, 0x33, 0xdc, 0x0, 0x0, 0xf7, 0x0, 0x2f, 0x90, 0x0, 0xf7, 0x0, 0x5, 0xf6, 0x0, 0xf7, 0x0, 0x0, 0x7f, 0x30, 0xf7, 0x0, 0x0, 0xa, 0xe1,
452
453 /* U+043B "л" */
454 0x0, 0x1f, 0xff, 0xff, 0xff, 0xa0, 0x2, 0xf6, 0x44, 0x44, 0xda, 0x0, 0x3f, 0x10, 0x0, 0xc, 0xa0, 0x3, 0xf0, 0x0, 0x0, 0xca, 0x0, 0x4f, 0x0, 0x0, 0xc, 0xa0, 0x5, 0xe0, 0x0, 0x0, 0xca, 0x0, 0x7d, 0x0, 0x0, 0xc, 0xa0, 0x9, 0xb0, 0x0, 0x0, 0xca, 0x0, 0xd7, 0x0, 0x0, 0xc, 0xa3, 0x8f, 0x20, 0x0, 0x0, 0xca, 0xdf, 0x60, 0x0, 0x0, 0xc, 0xa0,
455
456 /* U+043C "м" */
457 0xfb, 0x0, 0x0, 0x0, 0x0, 0xdc, 0xff, 0x40, 0x0, 0x0, 0x6, 0xfc, 0xfd, 0xd0, 0x0, 0x0, 0xe, 0xdc, 0xf5, 0xe6, 0x0, 0x0, 0x8c, 0x8c, 0xf5, 0x6e, 0x10, 0x2, 0xf3, 0x8c, 0xf5, 0xc, 0x80, 0xb, 0x90, 0x8c, 0xf5, 0x3, 0xf2, 0x4f, 0x10, 0x8c, 0xf5, 0x0, 0xab, 0xd7, 0x0, 0x8c, 0xf5, 0x0, 0x2f, 0xd0, 0x0, 0x8c, 0xf5, 0x0, 0x6, 0x40, 0x0, 0x8c, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x8c,
458
459 /* U+043D "н" */
460 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x33, 0x33, 0x33, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7,
461
462 /* U+043E "о" */
463 0x0, 0x3b, 0xef, 0xe9, 0x10, 0x0, 0x6f, 0xb6, 0x47, 0xde, 0x30, 0x3f, 0x80, 0x0, 0x0, 0xce, 0xa, 0xd0, 0x0, 0x0, 0x2, 0xf6, 0xe8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0x70, 0x0, 0x0, 0x0, 0xbb, 0xe8, 0x0, 0x0, 0x0, 0xd, 0x9a, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0x3f, 0x90, 0x0, 0x1, 0xcd, 0x0, 0x6f, 0xc6, 0x57, 0xee, 0x20, 0x0, 0x3b, 0xef, 0xe9, 0x10, 0x0,
464
465 /* U+043F "п" */
466 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf9, 0x44, 0x44, 0x44, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7, 0xf7, 0x0, 0x0, 0x0, 0xf7,
467
468 /* U+0440 "р" */
469 0xf6, 0x19, 0xef, 0xe9, 0x10, 0xf, 0x8e, 0xb6, 0x47, 0xee, 0x30, 0xff, 0x80, 0x0, 0x1, 0xce, 0xf, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0xf8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0x70, 0x0, 0x0, 0x0, 0xba, 0xf8, 0x0, 0x0, 0x0, 0xd, 0x9f, 0xd0, 0x0, 0x0, 0x2, 0xf5, 0xff, 0x80, 0x0, 0x1, 0xcd, 0xf, 0x9e, 0xc6, 0x57, 0xee, 0x30, 0xf7, 0x19, 0xef, 0xe9, 0x10, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
470
471 /* U+0441 "с" */
472 0x0, 0x3a, 0xef, 0xe9, 0x10, 0x6, 0xfc, 0x64, 0x7d, 0xe2, 0x3f, 0x80, 0x0, 0x0, 0xa2, 0xad, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x90, 0x0, 0x0, 0xa2, 0x6, 0xfc, 0x65, 0x7e, 0xe2, 0x0, 0x3a, 0xef, 0xe9, 0x10,
473
474 /* U+0442 "т" */
475 0xff, 0xff, 0xff, 0xff, 0xf6, 0x44, 0x44, 0xf9, 0x44, 0x42, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0,
476
477 /* U+0443 "у" */
478 0xa, 0xd0, 0x0, 0x0, 0x0, 0xab, 0x3, 0xf4, 0x0, 0x0, 0x1, 0xf4, 0x0, 0xcb, 0x0, 0x0, 0x8, 0xd0, 0x0, 0x5f, 0x20, 0x0, 0xe, 0x70, 0x0, 0xe, 0x90, 0x0, 0x5f, 0x0, 0x0, 0x7, 0xf0, 0x0, 0xc9, 0x0, 0x0, 0x1, 0xf6, 0x3, 0xf2, 0x0, 0x0, 0x0, 0x9d, 0xa, 0xb0, 0x0, 0x0, 0x0, 0x2f, 0x6f, 0x40, 0x0, 0x0, 0x0, 0xb, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0x1c, 0x65, 0xbe, 0x10, 0x0, 0x0, 0x9, 0xef, 0xc2, 0x0, 0x0, 0x0,
479
480 /* U+0444 "ф" */
481 0x0, 0x0, 0x0, 0x6, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x18, 0xcf, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x5f, 0xe8, 0x5e, 0xa6, 0xaf, 0xd2, 0x0, 0x3f, 0x90, 0x0, 0xd8, 0x0, 0x2d, 0xd0, 0xb, 0xd0, 0x0, 0xd, 0x80, 0x0, 0x2f, 0x60, 0xe7, 0x0, 0x0, 0xd8, 0x0, 0x0, 0xca, 0xf, 0x60, 0x0, 0xd, 0x80, 0x0, 0xb, 0xb0, 0xe7, 0x0, 0x0, 0xd8, 0x0, 0x0, 0xca, 0xb, 0xd0, 0x0, 0xd, 0x80, 0x0, 0x2f, 0x60, 0x3f, 0xa0, 0x0, 0xd8, 0x0, 0x2d, 0xd0, 0x0, 0x5f, 0xe8, 0x5e, 0xa6, 0xaf, 0xd2, 0x0, 0x0, 0x18, 0xcf, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0, 0x0,
482
483 /* U+0445 "х" */
484 0x2f, 0x70, 0x0, 0x1, 0xe9, 0x0, 0x6f, 0x30, 0x0, 0xad, 0x0, 0x0, 0xad, 0x0, 0x6f, 0x20, 0x0, 0x0, 0xda, 0x2f, 0x60, 0x0, 0x0, 0x3, 0xfe, 0xa0, 0x0, 0x0, 0x0, 0xb, 0xf3, 0x0, 0x0, 0x0, 0x6, 0xfc, 0xd0, 0x0, 0x0, 0x2, 0xf7, 0x1e, 0x90, 0x0, 0x0, 0xdb, 0x0, 0x3f, 0x50, 0x0, 0x9e, 0x10, 0x0, 0x8f, 0x20, 0x5f, 0x40, 0x0, 0x0, 0xcd, 0x0,
485
486 /* U+0446 "ц" */
487 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x70, 0x0, 0x0, 0x2f, 0x40, 0xf7, 0x0, 0x0, 0x2, 0xf4, 0xf, 0x94, 0x44, 0x44, 0x6f, 0x74, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x27,
488
489 /* U+0447 "ч" */
490 0x1f, 0x50, 0x0, 0x0, 0x7f, 0x1f, 0x50, 0x0, 0x0, 0x7f, 0x1f, 0x50, 0x0, 0x0, 0x7f, 0xf, 0x50, 0x0, 0x0, 0x7f, 0xf, 0x80, 0x0, 0x0, 0x7f, 0x9, 0xf6, 0x10, 0x26, 0xdf, 0x0, 0x9f, 0xff, 0xfc, 0xbf, 0x0, 0x0, 0x22, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x7f,
491
492 /* U+0448 "ш" */
493 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x8f, 0x94, 0x44, 0x49, 0xf4, 0x44, 0x44, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
494
495 /* U+0449 "щ" */
496 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x70, 0x0, 0x6, 0xf0, 0x0, 0x0, 0xe8, 0x0, 0xf7, 0x0, 0x0, 0x6f, 0x0, 0x0, 0xe, 0x80, 0xf, 0x94, 0x44, 0x49, 0xf4, 0x44, 0x44, 0xea, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x81,
497
498 /* U+044A "ъ" */
499 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x44, 0x4c, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xeb, 0x30, 0x0, 0xb, 0xc2, 0x22, 0x4b, 0xf3, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xe9, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xbb, 0x0, 0xb, 0xb0, 0x0, 0x0, 0xe9, 0x0, 0xb, 0xc2, 0x22, 0x4b, 0xf3, 0x0, 0xb, 0xff, 0xff, 0xeb, 0x30,
500
501 /* U+044B "ы" */
502 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xbb, 0xff, 0xff, 0xfd, 0x91, 0x0, 0xbb, 0xf8, 0x22, 0x25, 0xde, 0x0, 0xbb, 0xf7, 0x0, 0x0, 0x2f, 0x60, 0xbb, 0xf7, 0x0, 0x0, 0xf, 0x70, 0xbb, 0xf7, 0x0, 0x0, 0x2f, 0x50, 0xbb, 0xf7, 0x11, 0x15, 0xdd, 0x0, 0xbb, 0xff, 0xff, 0xfd, 0x91, 0x0, 0xbb,
503
504 /* U+044C "ь" */
505 0xf7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, 0xff, 0xff, 0xfe, 0xa2, 0xf, 0x82, 0x22, 0x4c, 0xe1, 0xf7, 0x0, 0x0, 0x1f, 0x7f, 0x70, 0x0, 0x0, 0xe9, 0xf7, 0x0, 0x0, 0x1f, 0x7f, 0x81, 0x12, 0x4c, 0xe1, 0xff, 0xff, 0xfe, 0x91, 0x0,
506
507 /* U+044D "э" */
508 0x1, 0x9d, 0xff, 0xc6, 0x0, 0x2, 0xfc, 0x63, 0x48, 0xfb, 0x0, 0x5, 0x0, 0x0, 0x2, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xf, 0x50, 0x0, 0x8f, 0xff, 0xff, 0xf7, 0x0, 0x1, 0x22, 0x22, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x3, 0x0, 0x0, 0x2, 0xe9, 0x2, 0xfb, 0x63, 0x48, 0xfb, 0x0, 0x2, 0x9d, 0xff, 0xc6, 0x0, 0x0,
509
510 /* U+044E "ю" */
511 0xf7, 0x0, 0x0, 0x5c, 0xff, 0xc6, 0x0, 0xf, 0x70, 0x0, 0x9f, 0x84, 0x37, 0xfb, 0x0, 0xf7, 0x0, 0x6f, 0x40, 0x0, 0x2, 0xf8, 0xf, 0x70, 0xd, 0xa0, 0x0, 0x0, 0x8, 0xf0, 0xf7, 0x12, 0xf5, 0x0, 0x0, 0x0, 0x3f, 0x3f, 0xff, 0xff, 0x30, 0x0, 0x0, 0x2, 0xf4, 0xf9, 0x45, 0xf5, 0x0, 0x0, 0x0, 0x3f, 0x3f, 0x70, 0xd, 0xa0, 0x0, 0x0, 0x8, 0xe0, 0xf7, 0x0, 0x6f, 0x40, 0x0, 0x3, 0xf7, 0xf, 0x70, 0x0, 0x9f, 0x84, 0x37, 0xfb, 0x0, 0xf7, 0x0, 0x0, 0x5c, 0xff, 0xc6, 0x0, 0x0,
512
513 /* U+044F "я" */
514 0x2, 0xae, 0xff, 0xff, 0xf1, 0x3f, 0xd7, 0x44, 0x47, 0xf1, 0xae, 0x0, 0x0, 0x3, 0xf1, 0xca, 0x0, 0x0, 0x3, 0xf1, 0xbc, 0x0, 0x0, 0x3, 0xf1, 0x4f, 0x81, 0x0, 0x3, 0xf1, 0x5, 0xdf, 0xff, 0xff, 0xf1, 0x0, 0x9d, 0x22, 0x25, 0xf1, 0x4, 0xf4, 0x0, 0x3, 0xf1, 0xd, 0x90, 0x0, 0x3, 0xf1, 0x8e, 0x10, 0x0, 0x3, 0xf1,
515
516 /* U+0451 "ё" */
517 0x0, 0x5e, 0x10, 0xc9, 0x0, 0x0, 0x3, 0xb1, 0x9, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4b, 0xff, 0xc6, 0x0, 0x0, 0x7f, 0xa5, 0x48, 0xfa, 0x0, 0x3f, 0x50, 0x0, 0x3, 0xf6, 0xa, 0xb0, 0x0, 0x0, 0x8, 0xe0, 0xe7, 0x0, 0x0, 0x0, 0x3f, 0x2f, 0xfe, 0xee, 0xee, 0xef, 0xf3, 0xe8, 0x11, 0x11, 0x11, 0x11, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x51, 0x0, 0x6f, 0xc7, 0x56, 0xbf, 0x40, 0x0, 0x3a, 0xef, 0xea, 0x30, 0x0};
518
519/*---------------------
520 * GLYPH DESCRIPTION
521 *--------------------*/
522
523static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
524 {.bitmap_index = 0, .adv_w = 84, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
525 {.bitmap_index = 0, .adv_w = 83, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
526 {.bitmap_index = 23, .adv_w = 119, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 9},
527 {.bitmap_index = 41, .adv_w = 223, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
528 {.bitmap_index = 146, .adv_w = 197, .box_w = 12, .box_h = 20, .ofs_x = 0, .ofs_y = -3},
529 {.bitmap_index = 266, .adv_w = 265, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
530 {.bitmap_index = 386, .adv_w = 214, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -1},
531 {.bitmap_index = 498, .adv_w = 65, .box_w = 2, .box_h = 6, .ofs_x = 1, .ofs_y = 9},
532 {.bitmap_index = 504, .adv_w = 105, .box_w = 4, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
533 {.bitmap_index = 542, .adv_w = 105, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
534 {.bitmap_index = 590, .adv_w = 124, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 7},
535 {.bitmap_index = 622, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
536 {.bitmap_index = 672, .adv_w = 68, .box_w = 3, .box_h = 6, .ofs_x = 1, .ofs_y = -3},
537 {.bitmap_index = 681, .adv_w = 122, .box_w = 6, .box_h = 3, .ofs_x = 1, .ofs_y = 4},
538 {.bitmap_index = 690, .adv_w = 68, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
539 {.bitmap_index = 695, .adv_w = 107, .box_w = 9, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
540 {.bitmap_index = 785, .adv_w = 212, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
541 {.bitmap_index = 875, .adv_w = 116, .box_w = 5, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
542 {.bitmap_index = 913, .adv_w = 182, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
543 {.bitmap_index = 996, .adv_w = 180, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
544 {.bitmap_index = 1079, .adv_w = 212, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
545 {.bitmap_index = 1177, .adv_w = 181, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
546 {.bitmap_index = 1260, .adv_w = 195, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
547 {.bitmap_index = 1343, .adv_w = 188, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
548 {.bitmap_index = 1426, .adv_w = 204, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
549 {.bitmap_index = 1516, .adv_w = 195, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
550 {.bitmap_index = 1606, .adv_w = 68, .box_w = 3, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
551 {.bitmap_index = 1623, .adv_w = 68, .box_w = 3, .box_h = 14, .ofs_x = 1, .ofs_y = -3},
552 {.bitmap_index = 1644, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
553 {.bitmap_index = 1694, .adv_w = 184, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 3},
554 {.bitmap_index = 1734, .adv_w = 184, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 2},
555 {.bitmap_index = 1784, .adv_w = 181, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
556 {.bitmap_index = 1859, .adv_w = 331, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
557 {.bitmap_index = 2040, .adv_w = 229, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
558 {.bitmap_index = 2153, .adv_w = 241, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
559 {.bitmap_index = 2243, .adv_w = 230, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
560 {.bitmap_index = 2341, .adv_w = 264, .box_w = 14, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
561 {.bitmap_index = 2446, .adv_w = 214, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
562 {.bitmap_index = 2529, .adv_w = 203, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
563 {.bitmap_index = 2604, .adv_w = 247, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
564 {.bitmap_index = 2702, .adv_w = 260, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
565 {.bitmap_index = 2792, .adv_w = 97, .box_w = 2, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
566 {.bitmap_index = 2807, .adv_w = 160, .box_w = 9, .box_h = 15, .ofs_x = -1, .ofs_y = 0},
567 {.bitmap_index = 2875, .adv_w = 228, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
568 {.bitmap_index = 2973, .adv_w = 188, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
569 {.bitmap_index = 3048, .adv_w = 306, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
570 {.bitmap_index = 3161, .adv_w = 260, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
571 {.bitmap_index = 3251, .adv_w = 268, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
572 {.bitmap_index = 3364, .adv_w = 230, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
573 {.bitmap_index = 3454, .adv_w = 268, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
574 {.bitmap_index = 3606, .adv_w = 231, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
575 {.bitmap_index = 3696, .adv_w = 197, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
576 {.bitmap_index = 3786, .adv_w = 184, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
577 {.bitmap_index = 3876, .adv_w = 253, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
578 {.bitmap_index = 3966, .adv_w = 223, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
579 {.bitmap_index = 4071, .adv_w = 356, .box_w = 22, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
580 {.bitmap_index = 4236, .adv_w = 210, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
581 {.bitmap_index = 4334, .adv_w = 203, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
582 {.bitmap_index = 4432, .adv_w = 208, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
583 {.bitmap_index = 4530, .adv_w = 102, .box_w = 4, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
584 {.bitmap_index = 4568, .adv_w = 107, .box_w = 9, .box_h = 20, .ofs_x = -1, .ofs_y = -2},
585 {.bitmap_index = 4658, .adv_w = 102, .box_w = 5, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
586 {.bitmap_index = 4706, .adv_w = 184, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 3},
587 {.bitmap_index = 4747, .adv_w = 160, .box_w = 10, .box_h = 1, .ofs_x = 0, .ofs_y = -1},
588 {.bitmap_index = 4752, .adv_w = 192, .box_w = 6, .box_h = 3, .ofs_x = 2, .ofs_y = 13},
589 {.bitmap_index = 4761, .adv_w = 189, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
590 {.bitmap_index = 4811, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
591 {.bitmap_index = 4901, .adv_w = 180, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
592 {.bitmap_index = 4962, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
593 {.bitmap_index = 5052, .adv_w = 193, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
594 {.bitmap_index = 5118, .adv_w = 108, .box_w = 8, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
595 {.bitmap_index = 5178, .adv_w = 219, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4},
596 {.bitmap_index = 5268, .adv_w = 216, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
597 {.bitmap_index = 5351, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
598 {.bitmap_index = 5374, .adv_w = 88, .box_w = 6, .box_h = 19, .ofs_x = -2, .ofs_y = -4},
599 {.bitmap_index = 5431, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
600 {.bitmap_index = 5514, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
601 {.bitmap_index = 5537, .adv_w = 340, .box_w = 19, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
602 {.bitmap_index = 5642, .adv_w = 216, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
603 {.bitmap_index = 5703, .adv_w = 201, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
604 {.bitmap_index = 5769, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -4},
605 {.bitmap_index = 5859, .adv_w = 217, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4},
606 {.bitmap_index = 5949, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
607 {.bitmap_index = 5988, .adv_w = 156, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
608 {.bitmap_index = 6043, .adv_w = 130, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = 0},
609 {.bitmap_index = 6099, .adv_w = 215, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
610 {.bitmap_index = 6160, .adv_w = 173, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
611 {.bitmap_index = 6221, .adv_w = 281, .box_w = 18, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
612 {.bitmap_index = 6320, .adv_w = 171, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
613 {.bitmap_index = 6381, .adv_w = 173, .box_w = 12, .box_h = 15, .ofs_x = -1, .ofs_y = -4},
614 {.bitmap_index = 6471, .adv_w = 164, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
615 {.bitmap_index = 6526, .adv_w = 107, .box_w = 6, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
616 {.bitmap_index = 6583, .adv_w = 94, .box_w = 2, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
617 {.bitmap_index = 6602, .adv_w = 107, .box_w = 6, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
618 {.bitmap_index = 6659, .adv_w = 184, .box_w = 10, .box_h = 4, .ofs_x = 1, .ofs_y = 5},
619 {.bitmap_index = 6679, .adv_w = 211, .box_w = 11, .box_h = 18, .ofs_x = 2, .ofs_y = 0},
620 {.bitmap_index = 6778, .adv_w = 238, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
621 {.bitmap_index = 6891, .adv_w = 232, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
622 {.bitmap_index = 6981, .adv_w = 240, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
623 {.bitmap_index = 7071, .adv_w = 183, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
624 {.bitmap_index = 7146, .adv_w = 254, .box_w = 16, .box_h = 19, .ofs_x = 0, .ofs_y = -4},
625 {.bitmap_index = 7298, .adv_w = 211, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
626 {.bitmap_index = 7381, .adv_w = 324, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
627 {.bitmap_index = 7531, .adv_w = 204, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -1},
628 {.bitmap_index = 7627, .adv_w = 264, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
629 {.bitmap_index = 7725, .adv_w = 264, .box_w = 13, .box_h = 19, .ofs_x = 2, .ofs_y = 0},
630 {.bitmap_index = 7849, .adv_w = 225, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
631 {.bitmap_index = 7939, .adv_w = 251, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
632 {.bitmap_index = 8044, .adv_w = 308, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
633 {.bitmap_index = 8157, .adv_w = 263, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
634 {.bitmap_index = 8255, .adv_w = 272, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
635 {.bitmap_index = 8368, .adv_w = 264, .box_w = 13, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
636 {.bitmap_index = 8466, .adv_w = 227, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
637 {.bitmap_index = 8556, .adv_w = 229, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
638 {.bitmap_index = 8654, .adv_w = 188, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
639 {.bitmap_index = 8744, .adv_w = 218, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
640 {.bitmap_index = 8849, .adv_w = 293, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -1},
641 {.bitmap_index = 8985, .adv_w = 208, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
642 {.bitmap_index = 9083, .adv_w = 265, .box_w = 14, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
643 {.bitmap_index = 9216, .adv_w = 234, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
644 {.bitmap_index = 9306, .adv_w = 350, .box_w = 18, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
645 {.bitmap_index = 9441, .adv_w = 357, .box_w = 20, .box_h = 19, .ofs_x = 2, .ofs_y = -4},
646 {.bitmap_index = 9631, .adv_w = 262, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
647 {.bitmap_index = 9751, .adv_w = 313, .box_w = 16, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
648 {.bitmap_index = 9871, .adv_w = 227, .box_w = 12, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
649 {.bitmap_index = 9961, .adv_w = 226, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
650 {.bitmap_index = 10059, .adv_w = 349, .box_w = 19, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
651 {.bitmap_index = 10202, .adv_w = 234, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
652 {.bitmap_index = 10292, .adv_w = 187, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
653 {.bitmap_index = 10342, .adv_w = 211, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
654 {.bitmap_index = 10438, .adv_w = 195, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
655 {.bitmap_index = 10488, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
656 {.bitmap_index = 10532, .adv_w = 208, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -3},
657 {.bitmap_index = 10623, .adv_w = 198, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
658 {.bitmap_index = 10684, .adv_w = 264, .box_w = 17, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
659 {.bitmap_index = 10778, .adv_w = 171, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
660 {.bitmap_index = 10833, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
661 {.bitmap_index = 10888, .adv_w = 220, .box_w = 10, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
662 {.bitmap_index = 10963, .adv_w = 186, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
663 {.bitmap_index = 11018, .adv_w = 202, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
664 {.bitmap_index = 11079, .adv_w = 253, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
665 {.bitmap_index = 11145, .adv_w = 216, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
666 {.bitmap_index = 11200, .adv_w = 204, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
667 {.bitmap_index = 11261, .adv_w = 216, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
668 {.bitmap_index = 11316, .adv_w = 220, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = -4},
669 {.bitmap_index = 11399, .adv_w = 180, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
670 {.bitmap_index = 11454, .adv_w = 151, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
671 {.bitmap_index = 11509, .adv_w = 179, .box_w = 12, .box_h = 15, .ofs_x = -1, .ofs_y = -4},
672 {.bitmap_index = 11599, .adv_w = 251, .box_w = 15, .box_h = 20, .ofs_x = 0, .ofs_y = -4},
673 {.bitmap_index = 11749, .adv_w = 168, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
674 {.bitmap_index = 11810, .adv_w = 219, .box_w = 11, .box_h = 14, .ofs_x = 2, .ofs_y = -3},
675 {.bitmap_index = 11887, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
676 {.bitmap_index = 11942, .adv_w = 297, .box_w = 15, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
677 {.bitmap_index = 12025, .adv_w = 297, .box_w = 17, .box_h = 14, .ofs_x = 2, .ofs_y = -3},
678 {.bitmap_index = 12144, .adv_w = 199, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
679 {.bitmap_index = 12210, .adv_w = 251, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
680 {.bitmap_index = 12276, .adv_w = 180, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
681 {.bitmap_index = 12326, .adv_w = 183, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
682 {.bitmap_index = 12387, .adv_w = 277, .box_w = 15, .box_h = 11, .ofs_x = 2, .ofs_y = 0},
683 {.bitmap_index = 12470, .adv_w = 194, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
684 {.bitmap_index = 12525, .adv_w = 198, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}};
685
686/*---------------------
687 * CHARACTER MAPPING
688 *--------------------*/
689
690/*Collect the unicode lists and glyph_id offsets*/
691static const lv_font_fmt_txt_cmap_t cmaps[] = {{.range_start = 32, .range_length = 95, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1025, .range_length = 1, .glyph_id_start = 96, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1040, .range_length = 64, .glyph_id_start = 97, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}, {.range_start = 1105, .range_length = 1, .glyph_id_start = 161, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY}};
692
693/*-----------------
694 * KERNING
695 *----------------*/
696
697/*Map glyph_ids to kern left classes*/
698static const uint8_t kern_left_class_mapping[] = {0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 0, 13, 14, 15, 16, 17, 18, 19, 12, 20, 20, 0, 0, 0, 21, 22, 23, 24, 25, 22, 26, 27, 28, 29, 29, 30, 31, 32, 29, 29, 22, 33, 34, 35, 3, 36, 30, 37, 37, 38, 39, 40, 41, 42, 43, 0, 44, 0, 45, 46, 47, 48, 49, 50, 51, 45, 52, 52, 53, 48, 45, 45, 46, 46, 54, 55, 56, 57, 51, 58, 58, 59, 58, 60, 41, 0, 0, 9, 26, 23, 61, 24, 62, 63, 26, 38, 24, 29, 29, 38, 29, 29, 29, 22, 29, 33, 25, 36, 37, 22, 38, 63, 29, 29, 63, 64, 29, 64, 22, 22, 29, 51, 46, 0, 65, 51, 49, 59, 0, 51, 51, 59, 51, 51, 51, 46, 51, 46, 47, 65, 58, 46, 59, 51, 51, 51, 51, 66, 51, 66, 46, 46, 51, 49};
699
700/*Map glyph_ids to kern right classes*/
701static const uint8_t kern_right_class_mapping[] = {0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, 18, 19, 20, 21, 21, 0, 0, 0, 22, 23, 24, 25, 23, 25, 25, 25, 23, 25, 25, 26, 25, 25, 25, 25, 23, 25, 23, 25, 3, 27, 28, 29, 29, 30, 31, 32, 33, 34, 35, 0, 36, 0, 37, 38, 39, 39, 39, 40, 39, 38, 41, 42, 38, 38, 43, 43, 39, 43, 39, 43, 44, 45, 46, 47, 47, 48, 49, 50, 0, 0, 35, 9, 25, 24, 25, 25, 25, 51, 25, 30, 52, 25, 25, 25, 53, 25, 25, 23, 25, 25, 23, 27, 30, 23, 30, 25, 54, 25, 25, 27, 25, 25, 52, 25, 30, 37, 23, 43, 43, 55, 39, 48, 56, 43, 43, 43, 55, 43, 43, 39, 43, 43, 39, 57, 47, 39, 48, 43, 46, 43, 43, 57, 43, 43, 56, 43, 48, 39};
702
703/*Kern values between classes*/
704static const int8_t kern_class_values[] = {0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 8, 6, 0, 3, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 9, -8, 0, 0, 6, 0, -18, -19, 3, 15, 8, 6, -13, 3, 17, 1, 14, 3, 11, 0, -14, 0, 0, 2, 0, 0, 0, 0, 0, 0, 19, 2, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, -13, 0, 0, 0, 0, 0, -10, 0, 0, 0, 0, 0, -6, 6, 6, 0, 0, -3, 0, -3, 3, 0, -3, 0, -3, -2, -6, 0, 0, 0, 0, -3, 0, 0, -4, -5, 0, 0, -3, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, -6, 0, -6, -7, 0, -1, -4, 0, -9, 0, -38, 0, 0, -6, -16, 6, 10, 0, 0, -6, 3, 3, 11, 6, -6, 6, 0, 0, -19, 0, 0, 0, 0, 0,
705 0, 0, 0, 0, 0, 0, -12, 0, 0, 5, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -17, 0, -13, -3, 0, 0, -10, 0, 1, 14, 0, -10, -2, 0, 0, 0, -6, 0, 0, -2, -25, 0, 5, 0, 11, -9, 0, -6, 0, -13, 5, 0, -26, -2, 14, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, -4, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 11, 2, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, -4, -4, -7, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11,
706 0, 0, 0, 2, 6, 3, 10, -3, 0, 0, 6, -3, -10, -45, 3, 9, 6, 1, -4, 0, 13, 0, 11, 0, 11, 0, -29, 0, -4, 10, 0, 11, -3, 6, 3, 0, 0, 0, -3, 0, 0, -6, 0, 0, 0, 26, 0, 10, 0, 14, 4, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, -12, 0, 0, 0, -3, 0, -2, 0, 3, -5, -4, -6, 3, 0, -3, 0, 0, 0, -13, 3, -5, 0, -6, -10, 0, -7, -5, -10, 0, 0, -21, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, -4, -7, -4, -4, -2, -5, -6, -8, -4, -6, -7, 0, -18, 3, -20, 0, 0, 0, -10, -2, 0, 33, -4, -4, 3, 3, -4, 0, -4, 3, 0, 0, -17, -6, 11, 0, 19, -10, -3, -12, 0, -12, 6, 0, -31, 0, 3, 3, 0, -5, 0, 0, 3, 0, 0, -3, -5, -11, 0, -11, 0, 8, 0, 8, -16, 6, 0, -12, 0, 19, -6, 0, -12, 0, 10, 0, -21, -31, -21, -6, 10, 0, 0, -22, 0, 5, -7, 0, -5, 0, -6, -13,
707 0, -3, 10, 0, 10, 0, 10, 0, 0, 10, 10, -40, -22, 0, -22, 0, 2, 0, -22, -22, -9, -22, -10, -20, -10, -22, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 3, -4, -6, 0, 0, 0, -3, 0, 0, -3, 0, 0, 0, -6, 0, -2, 0, -7, -6, 0, -8, -10, -10, -7, 0, -6, 0, -6, 0, 0, 0, 0, 0, -3, 0, 0, 3, 0, 3, -3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -3, 0, 0, 0, -3, 3, 3, -1, 0, 0, 0, -7, 0, -1, 0, 0, 0, 0, 0, 0, 0, 4, -3, 0, -4, 0, -5, 0, 0, -3, 0, 10, 0, 0, -3, 0, 0, 0, 0, 0, 0, -1, 1, -3, 1, -3, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, 0, -3, -4, 0, 0, 0, 0, 0, 1, 0, 0, -2, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -2, -4, -2, 0, 0,
708 0, 0, 0, 0, 0, 0, 0, -10, -3, -10, 6, 0, 0, -6, 3, 6, 9, 0, -8, -1, -5, 0, -1, -16, 3, -3, 2, -17, 3, 0, 0, 0, -16, 0, -17, -2, -28, -3, 0, -16, 0, 6, 9, 0, 4, 0, 0, 0, 0, 0, 0, 0, -5, -4, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, -3, 0, 0, 0, 0, 0, -2, -2, 0, -2, -4, 0, 0, 0, 0, 0, 0, 0, -3, -3, 0, -2, -4, -3, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -6, 3, 0, 0, -5, 2, 3, 3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 3, 0, 0, -3, 0, -3, -3, -5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, -3, 0, 0, 0, 0, -3, -5, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, -3, 0, -11, 0, 0, 9, -16, -17, -14, -6, 3, 0, -3, -21, -6, 0, -6, 0, -6,
709 5, -6, -21, 0, -9, 0, 0, 2, -1, 2, -3, 0, 3, -1, -10, -12, 0, -16, 0, 0, -7, -8, -10, -5, -9, -1, -7, -1, -10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -2, 0, -1, -3, 0, -5, -7, -7, -1, 0, -10, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, -3, 0, 3, 0, 12, -3, 0, -7, -2, -12, 0, 0, -5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, -3, 3, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, -7, 0, 0, 5, 0, -16, -10, 0, 0, 0, -5, -16, 0, 0, -3, 3, 0, -10, 0, -13, 0, -9, 0, 0, -4, -5, -4, -3, -6, 0, 0, -7, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 3, 0,
710 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 5, 0, 3, -6, -6, 0, -3, -3, -4, 0, 0, 0, 0, 0, 0, -10, 0, -3, 0, -5, -3, 0, -7, -8, -10, -3, 0, -6, 0, -10, 0, 0, 0, 0, 0, 26, 0, 0, 2, 0, 0, -4, 0, 0, -6, -6, -6, -5, -5, -6, -5, 0, -14, 0, 0, 0, 0, 0, -29, -5, 11, 10, -2, -13, 0, 3, -5, 0, -16, -2, -4, 3, -22, -3, 3, 0, 5, -11, -5, -12, -10, -13, 0, 0, -19, 0, 19, 0, 0, -2, 0, 0, 0, 0, -2, -2, -3, -8, -10, -8, 0, 0, 0, 0, -14, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -2, -3, -5, 0, 0, -6, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -6, 0, 0, 6, 0, 4, 0, -7, 3, -3, -1, -10, -3, 0,
711 -4, -3, -1, 0, -5, -6, 0, 0, -3, 0, -3, -6, -5, 0, 0, -3, 0, 3, -3, 0, -7, 0, 0, 0, 0, -6, 0, -6, 0, -6, 0, -6, -6, 0, -6, -4, -8, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, -6, 3, 0, -5, 0, -3, -5, -12, -3, -3, -3, -1, -3, -5, -1, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 5, -3, 0, -3, 0, 0, 0, 0, -3, -5, -3, -4, -5, -4, -4, 0, 0, 0, 0, 0, 0, 0, 2, 13, -1, 0, -10, 0, -3, 6, 0, -3, -14, -4, 5, -1, 0, -16, -6, 3, -6, 2, 0, -4, -3, -11, 0, -5, 2, 0, 0, -6, 0, 0, 0, 3, 3, -6, -7, 0, -6, 0, 0, -5, -3, -3, 0, -6, 2, -7, 2, -6, -13, -5, -13, -5, -13, -8, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
712 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -4, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 0, 0, -4, 0, 0, -3, -3, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, -3, 0, 0, -7, 0, -7, -8, -5, -5, -5, 0, 0, -5, 0, -6, 0, 0, 0, -10, 0, 3, -7, 6, 0, -3, -15, 0, 0, -7, -3, 0, -13, -8, -9, 0, 0, -13, -3, -13, -12, -15, 0, -10, 0, 2, 22, -4, 0, -8, 0, 0, -1, -3, -6, -9, -6, -12, -12, -12, -7, -1, -8, -1, -11, 0, -8, -13, 0, 0, -3, 0, 0, 0, 0, -22, -4, 10, 8, -8, -12, 0, 0,
713 -12, 0, -16, -3, -3, 6, -30, -4, 0, 0, 0, -21, -4, -17, -3, -24, 0, 0, -22, 0, 20, 0, 0, -3, 0, 0, 0, 0, 0, -2, -3, -12, -3, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11, 0, -4, 0, 0, -9, -15, 0, 0, -2, -5, -10, -3, 0, -2, 0, 0, 0, 0, -14, -3, -11, -11, -2, -5, -8, -3, -6, 0, -6, -4, -10, -5, 0, -4, 0, 0, -3, -7, 0, 2, 0, -3, -11, -3, 0, -11, -6, -11, -6, -14, -6, -4, 0, -6, 0, 0, 0, 0, 5, 0, 3, -6, 12, 0, -3, -3, -4, 0, 0, 0, 0, 0, 0, -10, 0, -3, 0, -5, -3, 0, -7, -8, -10, -3, 0, -6, 2, 13, 0, 0, 0, 0, 0, 26, 0, 0, 2, 0, 0, -4, 0, 0, -6, -6, -6, -5, -5, -6, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -6, 0, 0, 0, 0, 0, -2, 0, 0, 0, -3, -3, 0, 0, -6, -3, 0, 0, -6, 0, 6, -2, 0, 0, 0, 0, 0,
714 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, -4, 0, -11, -6, 0, 10, -10, -10, -6, -6, 13, 5, 3, -28, -2, 6, -3, 0, -3, 2, -3, -11, 0, -3, 3, -4, -2, -10, -2, 0, 0, 10, 6, 0, -9, 0, -18, 0, 0, 7, -4, -12, 0, -4, -11, -11, -11, -3, -12, 0, -12, -5, -22, -15, -7, 3, 0, -5, 0, -9, 0, 2, 11, -7, -12, -13, -8, 10, 0, 0, -23, -2, 3, -5, -2, -7, 0, -7, -12, -5, -5, -2, 0, 0, -7, -6, -3, 0, 10, 7, -3, -18, 0, -18, 0, -6, -6, -11, -18, 0, -10, -5, -11, -5, -9, -7, -1, -7, 0, -11, -15, -6, 0, 0, -4, 0, -6, -4, 0, -3, -5, 0, 6, -10, 3, 0, 0, -17, 0, -3, -7, -5, -2, -10, -8, -10, -8, 0, -10, -3, -7, -7, -10, -3, 0, 0, 0, 15, -5, 0, -10, 0, 0, 0, -3, -6, -7, -8, -8, -11, -8, -4, -4, -17, -4, -12, -5, -12, -16, 6, 0, -5, 0, -16, -5, 1, 6, -10, -12, -6, -10,
715 10, -3, 2, -29, -5, 6, -7, -5, -12, 0, -10, -13, -5, -3, -2, -3, -6, -10, 0, 0, 0, 10, 8, -3, -21, 0, -19, 0, -4, 6, -12, -21, -6, -11, -13, -16, -13, -10, -9, 0, -9, -5, -18, -18, -7, 0, 0, 0, 0, -5, 0, 0, 3, -5, 6, 3, -7, 6, 0, 0, -12, -1, 0, -1, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 2, 10, 0, 0, -5, 0, 0, 0, 0, 0, -3, -3, -5, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, -3, 0, 11, 0, 5, 0, 0, -4, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 6, 0, 7, 0, 8, 0, 0, 10, 0, 8, -4, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 3, -4, -4, -4, -6, -5, -3, 0, -19, 0, -3, 6, 0, 10, -45, 0, 33, 5, -6, -6, 3, 3, -3, 0, -16, 0, 0, 14, -19, -6, 10, 0, 10, -6, -3, -13, 6, -6, 0, 0, -21, 11, 45, 0, 0, 0,
716 0, 0, 38, 0, 0, 0, 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, -7, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4, -5, -4, -5, -4, -4, 0, 0, -3, 6, -9, 0, 0, 0, -3, 0, 3, 43, -6, -3, 11, 9, -9, 3, 0, 0, 3, 3, -3, -10, 19, 10, 27, 0, -3, -3, 15, -3, 6, 0, -42, 8, 0, -3, 0, -9, 0, 0, 34, 0, 3, -6, -9, -4, 12, 6, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, 0, 0, -9, 0, 0, 0, 0, -7, -2, 0, 0, 0, -7, 0, -5, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -3, 0, 0, 0, 0, -18, 0, 0, -3, 0, -5, 0, -9, 0, 0, 0, -6, 3,
717 -5, 0, 0, -9, -3, -8, 0, 0, -9, 0, -3, 0, -15, 0, -2, 0, 0, -27, -7, -13, -2, -11, 0, 0, -22, 0, -9, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -6, -5, -3, -3, -8, -3, -8, -1, -1, -6, 0, 0, 0, 0, -8, 0, -7, 4, -2, 6, 0, -3, -8, -3, -6, -7, 0, -5, -2, -3, 2, -9, 0, 0, 0, 0, -30, -2, -3, 0, -5, 0, -3, -15, -4, 0, 0, -3, -3, 0, -3, 0, 0, 0, 2, 0, -3, -6, -3, -3, 0, 0, 0, 0, -6, -6, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, -3, 0, 0, 0, -6, 3, 0, 0, 0, -9, -3, -6, 0, 0, -9, 0, -3, 0, -15, 0, 0, 0, 0, -31, 0, -6, -12, -16, 0, 0, -22, 0, -2,
718 -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -5, -3, -2, -6, 0, -6, -7, -4, -5, -7, 0, 0, 0, 6, -4, 0, 9, 17, -3, -3, -10, 5, 17, 6, 8, -9, 5, 14, 5, 10, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 15, -5, -3, 0, -3, 1, 0, 13, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, 0, 0, -2, 0,
719 0, 0, -7, 3, 0, -3, 2, 5, 3, -10, 0, -1, -2, 3, 0, 2, 0, 0, 0, 0, -10, 0, -4, -3, -6, 0, -4, -13, 0, 21, -3, 0, -7, 0, 0, 0, -3, -5, 0, -3, -9, -6, -9, -4, 0, 0, 0, -6, 2, -7, 0, 0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -29, -5, -2, -14, -17, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, -14, 0, -4, 0, 0, 0, -6, 0, -11, -5, -4, 10, -4, -3, -13, 0, -3, 0, -3, -10, 0, 7, 0, 2, 0, 2, -8, -12, -5, 0, -14, -7, -9, -14, -13, 0, -6, -6, -5, -4, -15, -3, -4, 0, -3, 0, -3, -1, 5, 0, 5, -3, 5, 0, -13, -7, -13, -6, -12, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, -9, 0, -2, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
720 -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, -6, -3, 3, 0, -6, -7, -3, 0, -11, -3, -8, -2, -5, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 11, 0, 0, -6, 0, 0, 0, 0, 0, -4, 0, -3, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, -7, 0, 0, 14, -4, -11, -9, 3, 2, 2, -1, -8, 3, 5, 3, 10, 3, 10, -3, -8, 0, 0, -16, 0, 0, -10, -9, 0, 0, -6, 0, -4, -5, 0, -5, 0, 0, -5, 0, -2, 5, 0, -2, -10, -2, -3, -8, 0, -8, -5, -7, -4, 0, 0, 0, -4, 0, -6, 0, 0, 4, -7, 0, 3, -3, 2, -1, 0, -10, 0, -3, 0, 0, -3, 2, -2, 0, 0, 0, -16, -5, -7, 0, -10, 0, 0, -15, 0, 12, -3, 0, -6, 0, 0, -1, 0, -3, 0, -3, -10, 0, -10, -3, 0, -2, 0, -8, 0, -10, -4, 0, 0, 0,
721 0, -3, 0, 0, 3, -4, 0, 0, 0, -5, -3, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 8, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3, 0, 0, 0, 0, 0, 0, 0, 0, -3, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, 0, -13, -5, -11, -7, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, -6, -5, 0, -6, 0, -6, -11, -4, -5, -9, 0, 0, 0, 0, 0, 0, 0, 0, -65, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -49, 0, -3, 0, -38, 0, 0, 0, -38, -38, -38, 0, -28, 0, -28, -6, -50, -45, -36, 0, -6, 0, 0, 0, 0, 0, 0, -8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, -8, 0, -8, 0,
722 -9, 0, 0, 0, 1, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, -11, -7, -11, 0, 0, 0, 0, -7, 0, -6, -10, 0, -9, -6, 0, 0, 0, -5, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, -2, 0, 0, -21, 0, -10, -14, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6, -5, -6, 0, -8, -6, -8, -2, -5, -5, -8, 0, 0, 0, 0, 0, 0, -2, 0, -7, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, 0, 0, 0, -2, -11, -7, 0, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, 0, -13, 0, -13, -3, -10, -5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, 0, 0, 0, -35, 0, -12, -10, -10, 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, -12, -10, 0, -5, 0, -5, -24, -6, -2, -17};
723
724/*Collect the kern class' data in one place*/
725static const lv_font_fmt_txt_kern_classes_t kern_classes = {
726 .class_pair_values = kern_class_values,
727 .left_class_mapping = kern_left_class_mapping,
728 .right_class_mapping = kern_right_class_mapping,
729 .left_class_cnt = 66,
730 .right_class_cnt = 57,
731};
732
733/*--------------------
734 * ALL CUSTOM DATA
735 *--------------------*/
736
737# if LV_VERSION_CHECK(8, 0, 0)
738/*Store all the custom data of the font*/
739static lv_font_fmt_txt_glyph_cache_t cache;
740static const lv_font_fmt_txt_dsc_t font_dsc = {
741# else
742static lv_font_fmt_txt_dsc_t font_dsc = {
743# endif
744 .glyph_bitmap = glyph_bitmap,
745 .glyph_dsc = glyph_dsc,
746 .cmaps = cmaps,
747 .kern_dsc = &kern_classes,
748 .kern_scale = 16,
749 .cmap_num = 4,
750 .bpp = 4,
751 .kern_classes = 1,
752 .bitmap_format = 0,
753# if LV_VERSION_CHECK(8, 0, 0)
754 .cache = &cache
755# endif
756};
757
758/*-----------------
759 * PUBLIC FONT
760 *----------------*/
761
762/*Initialize a public general font descriptor*/
763# if LV_VERSION_CHECK(8, 0, 0)
764const lv_font_t montserrat_20_en_ru = {
765# else
766lv_font_t montserrat_20_en_ru = {
767# endif
768 .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
769 .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
770 .line_height = 23, /*The maximum line height required by the font*/
771 .base_line = 4, /*Baseline measured from the bottom of the line*/
772# if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
773 .subpx = LV_FONT_SUBPX_NONE,
774# endif
775# if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
776 .underline_position = -2,
777 .underline_thickness = 1,
778# endif
779 .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
780};
781
782#endif /*#if MONTSERRAT_20_EN_RU*/
diff --git a/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c
new file mode 100644
index 0000000000..ed0c74797d
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/fonts/montserrat_48_digits.c
@@ -0,0 +1,189 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4/*******************************************************************************
5 * Size: 48 px
6 * Bpp: 4
7 * Opts:
8 ******************************************************************************/
9
10#ifdef __has_include
11# if __has_include("lvgl.h")
12# ifndef LV_LVGL_H_INCLUDE_SIMPLE
13# define LV_LVGL_H_INCLUDE_SIMPLE
14# endif
15# endif
16#endif
17
18#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
19# include "lvgl.h"
20#else
21# include "lvgl/lvgl.h"
22#endif
23
24#ifndef MONTSERRAT_48_DIGITS
25# define MONTSERRAT_48_DIGITS 1
26#endif
27
28#if MONTSERRAT_48_DIGITS
29
30/*-----------------
31 * BITMAPS
32 *----------------*/
33
34/*Store the image of the glyphs*/
35static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
36 /* U+002E "." */
37 0x0, 0x44, 0x0, 0xc, 0xff, 0xd1, 0x5f, 0xff, 0xf8, 0x6f, 0xff, 0xf9, 0x2f, 0xff, 0xf5, 0x6, 0xef, 0x80,
38
39 /* U+0030 "0" */
40 0x0, 0x0, 0x0, 0x0, 0x3, 0x9c, 0xef, 0xfe, 0xb8, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xe8, 0x54, 0x45, 0x9e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x7, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0x40, 0x0, 0x0, 0x1f, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xd0, 0x0, 0x0, 0x9f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6, 0x0, 0x1, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x30, 0xb, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0xf, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xc0, 0x2f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf0, 0x4f, 0xff,
41 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf1, 0x6f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf3, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x6f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf3, 0x4f, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf1, 0x2f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf0, 0xf, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xc0, 0xb, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x30, 0x1, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x0, 0x9f, 0xff, 0x40, 0x0, 0x0, 0x0,
42 0x0, 0x0, 0x0, 0x7, 0xff, 0xf6, 0x0, 0x0, 0x1f, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xd0, 0x0, 0x0, 0x7, 0xff, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0x40, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xd8, 0x54, 0x45, 0x9e, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x9c, 0xef, 0xfe, 0xb8, 0x20, 0x0, 0x0, 0x0, 0x0,
43
44 /* U+0031 "1" */
45 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x12, 0x22, 0x22, 0x22, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0,
46 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfd,
47
48 /* U+0032 "2" */
49 0x0, 0x0, 0x0, 0x4, 0x8b, 0xef, 0xff, 0xec, 0x95, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xb8, 0x54, 0x34, 0x69, 0xdf, 0xff, 0xfe, 0x10, 0x0, 0xc, 0xff, 0xff, 0x71, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef, 0xff, 0xb0, 0x0, 0x6, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0x0, 0x0, 0x4a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
50 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
51 0x2, 0xef, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf7, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
52
53 /* U+0033 "3" */
54 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x28, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xec, 0xa6,
55 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x59, 0xef, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x60, 0x5c, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf1, 0xe, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xfa, 0x5, 0xff, 0xff, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0xff,
56 0xff, 0x10, 0x8, 0xff, 0xff, 0xff, 0xb8, 0x54, 0x34, 0x58, 0xcf, 0xff, 0xff, 0x40, 0x0, 0x3, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x10, 0x0, 0x0, 0x0, 0x0, 0x1, 0x69, 0xce, 0xff, 0xfe, 0xc9, 0x50, 0x0, 0x0, 0x0,
57
58 /* U+0034 "4" */
59 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
60 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xc2, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xff, 0x72, 0x22, 0x22, 0x20, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x1f, 0xff,
61 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x50, 0x0, 0x0, 0x0,
62
63 /* U+0035 "5" */
64 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x0, 0x0, 0x5, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf2, 0x22, 0x22, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x83, 0x0,
65 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x60, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x36, 0xae, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xef, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x0, 0x96, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xa0, 0x4f, 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0xb, 0xff, 0xff, 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
66 0xff, 0xf9, 0x0, 0x2d, 0xff, 0xff, 0xfd, 0x96, 0x44, 0x34, 0x6a, 0xef, 0xff, 0xfc, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x1, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x7a, 0xdf, 0xff, 0xfd, 0xb8, 0x30, 0x0, 0x0, 0x0,
67
68 /* U+0036 "6" */
69 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xbd, 0xff, 0xfe, 0xda, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xfc, 0x74, 0x21, 0x12, 0x47, 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xfa, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, 0x2, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x30, 0x0, 0x1, 0x7b, 0xdf, 0xff, 0xdb, 0x61, 0x0, 0x0, 0x0, 0x5f, 0xff, 0x10, 0x1,
70 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x7f, 0xff, 0x4, 0xff, 0xfe, 0x84, 0x10, 0x1, 0x49, 0xef, 0xff, 0xf4, 0x0, 0x7f, 0xff, 0x2f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xfe, 0x10, 0x7f, 0xff, 0xbf, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xa0, 0x6f, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf1, 0x5f, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf6, 0x3f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0xf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb, 0xd, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xfb, 0x8, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xfb, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf9, 0x0, 0xdf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf5, 0x0, 0x5f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xf0, 0x0, 0xb, 0xff, 0xf5,
71 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x80, 0x0, 0x1, 0xef, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xfe, 0x84, 0x10, 0x1, 0x48, 0xef, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x20, 0x0, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x9c, 0xef, 0xff, 0xda, 0x50, 0x0, 0x0, 0x0,
72
73 /* U+0037 "7" */
74 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x7f, 0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x2f, 0xff, 0xc0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x40, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf6, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x37, 0x77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0,
75 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x0,
76 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
77
78 /* U+0038 "8" */
79 0x0, 0x0, 0x0, 0x2, 0x6a, 0xde, 0xff, 0xfe, 0xb8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xfd, 0x73, 0x10, 0x0, 0x25, 0x9f, 0xff, 0xff, 0x40, 0x0, 0x0, 0x6f, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0xff, 0xfe, 0x10, 0x0, 0xe, 0xff, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xf8, 0x0, 0x4, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xe0, 0x0, 0x7f, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x10, 0x7, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf1, 0x0, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x3, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xd0, 0x0, 0xe, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf8, 0x0, 0x0, 0x5f, 0xff, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfe, 0x10, 0x0, 0x0, 0x8f, 0xff, 0xf9, 0x40, 0x0, 0x0,
80 0x1, 0x6c, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x5e, 0xff, 0xff, 0xfe, 0xdc, 0xdf, 0xff, 0xff, 0xfb, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x30, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xfb, 0x63, 0x10, 0x0, 0x24, 0x8e, 0xff, 0xff, 0x60, 0x0, 0x0, 0xcf, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0x60, 0x0, 0x8f, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xff, 0x20, 0x1f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfa, 0x6, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xf0, 0x9f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0x3a, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xf4, 0xbf, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0x49, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf3, 0x6f, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0x1,
81 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xb0, 0xa, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf3, 0x0, 0x1e, 0xff, 0xfc, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf9, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xb6, 0x31, 0x0, 0x2, 0x48, 0xef, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x6, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0xbd, 0xef, 0xff, 0xec, 0x95, 0x10, 0x0, 0x0, 0x0,
82
83 /* U+0039 "9" */
84 0x0, 0x0, 0x0, 0x5, 0x9c, 0xef, 0xfe, 0xda, 0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff, 0x94, 0x10, 0x1, 0x37, 0xcf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x40, 0x0, 0x7, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xe1, 0x0, 0xe, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf9, 0x0, 0x3f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x10, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0x70, 0x7f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xc0, 0x8f, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xf1, 0x6f, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xf4, 0x4f, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf7, 0xf, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xf9, 0x8,
85 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xfa, 0x1, 0xef, 0xff, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x4, 0xdf, 0xf7, 0xdf, 0xfb, 0x0, 0x3f, 0xff, 0xff, 0x95, 0x20, 0x0, 0x36, 0xcf, 0xff, 0xa0, 0xcf, 0xfb, 0x0, 0x3, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0xcf, 0xfb, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x40, 0x0, 0xcf, 0xfa, 0x0, 0x0, 0x0, 0x16, 0xad, 0xff, 0xfe, 0xc8, 0x30, 0x0, 0x0, 0xef, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
86 0x0, 0x0, 0x0, 0x0, 0x4, 0xef, 0xff, 0x60, 0x0, 0x0, 0x4, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xc, 0xfd, 0x85, 0x31, 0x12, 0x47, 0xbf, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xac, 0xef, 0xff, 0xeb, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0,
87
88 /* U+003A ":" */
89 0x6, 0xef, 0x80, 0x3f, 0xff, 0xf5, 0x6f, 0xff, 0xf9, 0x4f, 0xff, 0xf7, 0xb, 0xff, 0xd1, 0x0, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0xc, 0xff, 0xd1, 0x5f, 0xff, 0xf8, 0x6f, 0xff, 0xf9, 0x2f, 0xff, 0xf5, 0x6, 0xef, 0x80};
90
91/*---------------------
92 * GLYPH DESCRIPTION
93 *--------------------*/
94
95static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
96 {.bitmap_index = 0, .adv_w = 163, .box_w = 6, .box_h = 6, .ofs_x = 2, .ofs_y = 0},
97 {.bitmap_index = 18, .adv_w = 508, .box_w = 28, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
98 {.bitmap_index = 494, .adv_w = 277, .box_w = 12, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
99 {.bitmap_index = 698, .adv_w = 436, .box_w = 26, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
100 {.bitmap_index = 1140, .adv_w = 433, .box_w = 25, .box_h = 34, .ofs_x = 0, .ofs_y = 0},
101 {.bitmap_index = 1565, .adv_w = 508, .box_w = 31, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
102 {.bitmap_index = 2092, .adv_w = 435, .box_w = 25, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
103 {.bitmap_index = 2517, .adv_w = 468, .box_w = 26, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
104 {.bitmap_index = 2959, .adv_w = 452, .box_w = 26, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
105 {.bitmap_index = 3401, .adv_w = 490, .box_w = 27, .box_h = 34, .ofs_x = 2, .ofs_y = 0},
106 {.bitmap_index = 3860, .adv_w = 468, .box_w = 26, .box_h = 34, .ofs_x = 1, .ofs_y = 0},
107 {.bitmap_index = 4302, .adv_w = 163, .box_w = 6, .box_h = 26, .ofs_x = 2, .ofs_y = 0}};
108
109/*---------------------
110 * CHARACTER MAPPING
111 *--------------------*/
112
113static const uint8_t glyph_id_ofs_list_0[] = {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
114
115/*Collect the unicode lists and glyph_id offsets*/
116static const lv_font_fmt_txt_cmap_t cmaps[] = {{.range_start = 46, .range_length = 13, .glyph_id_start = 1, .unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 13, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL}};
117
118/*-----------------
119 * KERNING
120 *----------------*/
121
122/*Map glyph_ids to kern left classes*/
123static const uint8_t kern_left_class_mapping[] = {0, 1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 2, 10};
124
125/*Map glyph_ids to kern right classes*/
126static const uint8_t kern_right_class_mapping[] = {0, 1, 2, 3, 4, 5, 6, 7, 2, 8, 9, 10, 11};
127
128/*Kern values between classes*/
129static const int8_t kern_class_values[] = {0, -8, -9, 8, 8, -10, 0, -9, 8, 0, 0, -8, 0, 0, 0, -8, 0, 0, -6, 0, 0, 0, 8, -2, 0, 0, 0, -18, 0, -2, 0, 0, 0, 0, 0, 0, -4, -4, 0, -8, -10, 0, 0, 0, 15, 0, -19, -2, -12, 0, -2, -38, 8, -6, 5, 0, 0, 0, -4, -4, 0, -4, -11, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, -6, 0, 0, 0, -41, -15, 8, 0, -7, -50, -15, 0, -15, 0, -15, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0};
130
131/*Collect the kern class' data in one place*/
132static const lv_font_fmt_txt_kern_classes_t kern_classes = {
133 .class_pair_values = kern_class_values,
134 .left_class_mapping = kern_left_class_mapping,
135 .right_class_mapping = kern_right_class_mapping,
136 .left_class_cnt = 10,
137 .right_class_cnt = 11,
138};
139
140/*--------------------
141 * ALL CUSTOM DATA
142 *--------------------*/
143
144# if LV_VERSION_CHECK(8, 0, 0)
145/*Store all the custom data of the font*/
146static lv_font_fmt_txt_glyph_cache_t cache;
147static const lv_font_fmt_txt_dsc_t font_dsc = {
148# else
149static lv_font_fmt_txt_dsc_t font_dsc = {
150# endif
151 .glyph_bitmap = glyph_bitmap,
152 .glyph_dsc = glyph_dsc,
153 .cmaps = cmaps,
154 .kern_dsc = &kern_classes,
155 .kern_scale = 16,
156 .cmap_num = 1,
157 .bpp = 4,
158 .kern_classes = 1,
159 .bitmap_format = 0,
160# if LV_VERSION_CHECK(8, 0, 0)
161 .cache = &cache
162# endif
163};
164
165/*-----------------
166 * PUBLIC FONT
167 *----------------*/
168
169/*Initialize a public general font descriptor*/
170# if LV_VERSION_CHECK(8, 0, 0)
171const lv_font_t montserrat_48_digits = {
172# else
173lv_font_t montserrat_48_digits = {
174# endif
175 .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
176 .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
177 .line_height = 34, /*The maximum line height required by the font*/
178 .base_line = 0, /*Baseline measured from the bottom of the line*/
179# if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
180 .subpx = LV_FONT_SUBPX_NONE,
181# endif
182# if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
183 .underline_position = -5,
184 .underline_thickness = 2,
185# endif
186 .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
187};
188
189#endif /*#if MONTSERRAT_48_DIGITS*/
diff --git a/keyboards/stront/keymaps/zzeneg/halconf.h b/keyboards/stront/keymaps/zzeneg/halconf.h
new file mode 100644
index 0000000000..46c5a48c9a
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/halconf.h
@@ -0,0 +1,8 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#define HAL_USE_I2C TRUE
7
8#include_next <halconf.h>
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c b/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c
new file mode 100644
index 0000000000..cac55d0eea
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_pl.c
@@ -0,0 +1,42 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifdef __has_include
5# if __has_include("lvgl.h")
6# ifndef LV_LVGL_H_INCLUDE_SIMPLE
7# define LV_LVGL_H_INCLUDE_SIMPLE
8# endif
9# endif
10#endif
11
12#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
13# include "lvgl.h"
14#else
15# include "lvgl/lvgl.h"
16#endif
17
18#ifndef LV_ATTRIBUTE_MEM_ALIGN
19# define LV_ATTRIBUTE_MEM_ALIGN
20#endif
21
22#ifndef LV_ATTRIBUTE_IMG_FLAG_PL
23# define LV_ATTRIBUTE_IMG_FLAG_PL
24#endif
25
26const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_PL uint8_t flag_pl_map[] = {
27 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/
28 0x3c, 0x14, 0xdc, 0xff, /*Color of index 1*/
29
30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
31 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
32};
33
34const lv_img_dsc_t flag_pl = {
35 .header.cf = LV_IMG_CF_INDEXED_1BIT,
36 .header.always_zero = 0,
37 .header.reserved = 0,
38 .header.w = 60,
39 .header.h = 40,
40 .data_size = 328,
41 .data = flag_pl_map,
42};
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c b/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c
new file mode 100644
index 0000000000..8019b0b418
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_ru.c
@@ -0,0 +1,42 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifdef __has_include
5# if __has_include("lvgl.h")
6# ifndef LV_LVGL_H_INCLUDE_SIMPLE
7# define LV_LVGL_H_INCLUDE_SIMPLE
8# endif
9# endif
10#endif
11
12#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
13# include "lvgl.h"
14#else
15# include "lvgl/lvgl.h"
16#endif
17
18#ifndef LV_ATTRIBUTE_MEM_ALIGN
19# define LV_ATTRIBUTE_MEM_ALIGN
20#endif
21
22#ifndef LV_ATTRIBUTE_IMG_FLAG_RU
23# define LV_ATTRIBUTE_IMG_FLAG_RU
24#endif
25
26const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_RU uint8_t flag_ru_map[] = {
27 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/
28 0xd8, 0x88, 0x0c, 0xff, /*Color of index 1*/
29
30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
31 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
32};
33
34const lv_img_dsc_t flag_ru = {
35 .header.cf = LV_IMG_CF_INDEXED_1BIT,
36 .header.always_zero = 0,
37 .header.reserved = 0,
38 .header.w = 60,
39 .header.h = 40,
40 .data_size = 328,
41 .data = flag_ru_map,
42};
diff --git a/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c b/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c
new file mode 100644
index 0000000000..8bf8234829
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/icons/flag_uk.c
@@ -0,0 +1,46 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifdef __has_include
5# if __has_include("lvgl.h")
6# ifndef LV_LVGL_H_INCLUDE_SIMPLE
7# define LV_LVGL_H_INCLUDE_SIMPLE
8# endif
9# endif
10#endif
11
12#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
13# include "lvgl.h"
14#else
15# include "lvgl/lvgl.h"
16#endif
17
18#ifndef LV_ATTRIBUTE_MEM_ALIGN
19# define LV_ATTRIBUTE_MEM_ALIGN
20#endif
21
22#ifndef LV_ATTRIBUTE_IMG_FLAG_UK
23# define LV_ATTRIBUTE_IMG_FLAG_UK
24#endif
25
26const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_FLAG_UK uint8_t flag_uk_map[] = {
27 0xfe, 0xfe, 0xfe, 0xff, /*Color of index 0*/
28 0x32, 0x15, 0xc9, 0xff, /*Color of index 1*/
29 0x6c, 0x25, 0x06, 0xff, /*Color of index 2*/
30 0xcd, 0xbd, 0xca, 0xff, /*Color of index 3*/
31
32 0x40, 0x02, 0xaa, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xaa, 0xcd, 0x57, 0x50, 0x00, 0xea, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xab, 0xd5, 0x50, 0x55, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xb3, 0x55, 0xc0, 0xd5, 0x40, 0x03, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xf5, 0x54, 0x00, 0xc5, 0x54, 0x00, 0x2a, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xac, 0xd5, 0x70, 0x03, 0xb3, 0x55, 0x00, 0x0e, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xbd, 0x55, 0x00, 0x0a, 0xab, 0x15, 0x50, 0x00, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xab, 0x35, 0x5c, 0x00, 0xea, 0xaa, 0xcd, 0x54, 0x00, 0x3a, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaf, 0x55, 0x40, 0x02, 0xaa, 0xaa, 0xac, 0x55, 0x40, 0x02, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xcd, 0x57, 0x00, 0x3a, 0xaa, 0xaa, 0xab, 0x35, 0x50, 0x00, 0xea, 0x81, 0x55, 0x4e, 0xab, 0xd5, 0x50, 0x00, 0xaa, 0xaa,
33 0xaa, 0xaa, 0xb1, 0x55, 0x00, 0x0a, 0x81, 0x55, 0x4e, 0xb3, 0x55, 0xc0, 0x0e, 0xaa, 0xaa, 0xaa, 0xaa, 0xac, 0xd5, 0x40, 0x03, 0x81, 0x55, 0x4e, 0xf5, 0x54, 0x00, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xc5, 0x54, 0x00, 0x01, 0x55, 0x40, 0xd5, 0x70, 0x03, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xc3, 0xfc, 0x00, 0x01, 0x55, 0x40, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
34 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0x01, 0x55, 0x40, 0x00, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d, 0x54, 0x01, 0x55, 0x40, 0x00, 0xd5, 0x53, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0x15, 0x53, 0x81, 0x55, 0x4e, 0xc0, 0x0d, 0x57, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0x0a, 0x81, 0x55, 0x4e, 0xb0, 0x03, 0x55, 0x4e, 0xaa, 0xaa,
35 0xaa, 0xab, 0x00, 0x05, 0x54, 0xea, 0x81, 0x55, 0x4e, 0xab, 0x00, 0x35, 0x5c, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0xd5, 0x42, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xc0, 0x0d, 0x55, 0x3a, 0xaa, 0xaa, 0xc0, 0x01, 0x55, 0x3a, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xac, 0x00, 0xd5, 0x72, 0xaa, 0xab, 0x00, 0x35, 0x50, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xab, 0x00, 0x35, 0x54, 0xea, 0xb0, 0x00, 0x55, 0x4e, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0xca, 0xc0, 0x0d, 0x54, 0x2a, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xac, 0x00, 0xd5, 0x53, 0x00, 0x15, 0x53, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d, 0x57, 0x03, 0x55, 0x0a, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xb0, 0x03, 0x55, 0x05, 0x54, 0xea, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xab, 0x00, 0x35, 0xd5, 0x42, 0xaa, 0xaa, 0xaa, 0xaa, 0x81, 0x55, 0x4e, 0xaa, 0xaa, 0xaa, 0xaa, 0xc0, 0x0d,
36};
37
38const lv_img_dsc_t flag_uk = {
39 .header.cf = LV_IMG_CF_INDEXED_2BIT,
40 .header.always_zero = 0,
41 .header.reserved = 0,
42 .header.w = 60,
43 .header.h = 40,
44 .data_size = 616,
45 .data = flag_uk_map,
46};
diff --git a/keyboards/stront/keymaps/zzeneg/keymap.c b/keyboards/stront/keymaps/zzeneg/keymap.c
new file mode 100644
index 0000000000..67cc52e142
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/keymap.c
@@ -0,0 +1,305 @@
1// Copyright 2022 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6#include "zzeneg_display.h"
7#include "raw_hid.h"
8#include "transactions.h"
9
10// Left-hand home row mods
11#define HOME_A LGUI_T(KC_A)
12#define HOME_S LALT_T(KC_S)
13#define HOME_D LCTL_T(KC_D)
14#define HOME_F LSFT_T(KC_F)
15
16// Right-hand home row mods
17#define HOME_J RSFT_T(KC_J)
18#define HOME_K RCTL_T(KC_K)
19#define HOME_L LALT_T(KC_L)
20#define HOME_P RGUI_T(KC_P)
21
22// bottom mods
23#define SYM_SPC LT(_SYMBOL, KC_SPC)
24#define NUM_TAB LT(_NUMBER, KC_TAB)
25#define FUNC_ESC LT(_FUNC, KC_ESC)
26#define FUNC_ENT LT(_FUNC, KC_ENT)
27#define NAV_BSPC LT(_NAV, KC_BSPC)
28#define EU_DEL LT(_EU, KC_DEL)
29
30// game layer mods
31#define LALT_Q LALT_T(KC_Q)
32#define LSFT_MINS LSFT_T(KC_MINS)
33#define LCTL_ESC LCTL_T(KC_ESC)
34#define LGUI_QUOT LGUI_T(KC_QUOT)
35
36enum custom_keycodes {
37 M_EMAIL = SAFE_RANGE,
38 M_CBR,
39 M_PRN,
40 M_BRC,
41 M_ARROW,
42};
43
44const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
45 /* QWERTY
46 * .---------------------------. .---------------------------.
47 * | W | E | R | T | | Y | U | I | O |
48 * .------+------+------+------+------+------| |------+------+------+------+------+------.
49 * | Q | A | S | D | F | G | | H | J | K | L | P | ; |
50 * |------+------+------+------+------+------| |------+------+------+------+------+------|
51 * | - | Z | X | C | V | B |--------. .--------| N | M | , | . | / | ' |
52 * '-----------------------------------------/ / \ \-----------------------------------------'
53 * | Esc | Tab | / Space / \ Enter \ | Bsps | Del |
54 * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | _EU |
55 * `-------------''-------' '-------''-------------'
56 */
57 // clang-format off
58 [_QWERTY] = LAYOUT(
59 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
60 KC_Q, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_P, KC_SCLN,
61 KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
62 FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, EU_DEL
63 ),
64
65 [_GAME] = LAYOUT(
66 KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
67 LALT_Q, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_SCLN,
68 LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LGUI_QUOT,
69 LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, EU_DEL
70 ),
71
72 [_EU] = LAYOUT(
73 XXXXXXX, RALT(KC_E), XXXXXXX, M_CBR, KC_MUTE, RALT(KC_U), XXXXXXX, RALT(KC_O),
74 XXXXXXX, RALT(KC_A), RALT(KC_S), LCTL(KC_C), KC_LSFT, M_PRN, M_EMAIL, KC_RSFT, M_ARROW, RALT(KC_L), XXXXXXX, XXXXXXX,
75 XXXXXXX, RALT(KC_Z), RALT(KC_X), RALT(KC_C), LCTL(KC_V), M_BRC, RALT(KC_N), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
76 FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, XXXXXXX, _______
77 ),
78
79 [_NAV] = LAYOUT(
80 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP,
81 XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, LALT(KC_UP), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PAUS,
82 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LALT(KC_DOWN), KC_HOME, KC_END, KC_INS, KC_APP, XXXXXXX,
83 FUNC_ESC, NUM_TAB, SYM_SPC, XXXXXXX, _______, EU_DEL
84 ),
85
86 [_NUMBER] = LAYOUT(
87 KC_7, KC_8, KC_9, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
88 KC_GRV, KC_0, KC_4, KC_5, KC_6, KC_DOT, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
89 KC_BSPC, KC_AT, KC_1, KC_2, KC_3, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
90 KC_ENT, _______, TG(_GAME), FUNC_ENT, NAV_BSPC, EU_DEL
91 ),
92
93 [_SYMBOL] = LAYOUT(
94 KC_PERC, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
95 KC_DLR, KC_AMPR, KC_EXLM, KC_EQL, KC_LPRN, KC_RPRN, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
96 KC_BSLS, KC_PIPE, KC_HASH, KC_ASTR, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
97 MO(_SYS), KC_BSPC, _______, FUNC_ENT, NAV_BSPC, EU_DEL
98 ),
99
100 [_FUNC] = LAYOUT(
101 KC_F7, KC_F8, KC_F9, KC_CAPS, XXXXXXX, KC_PSCR, KC_SCRL, KC_NUM,
102 KC_LCTL, KC_F11, KC_F4, KC_F5, KC_F6, KC_F12, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX,
103 KC_CIRC, KC_F10, KC_F1, KC_F2, KC_F3, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
104 _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, MO(_SYS)
105 ),
106
107 [_SYS] = LAYOUT(
108 BL_DOWN, BL_UP, BL_TOGG, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,
109 XXXXXXX, XXXXXXX, DT_UP, DT_DOWN, DT_PRNT, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P,
110 EH_LEFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EH_RGHT, EH_RGHT, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, EH_LEFT,
111 _______, QK_BOOT, _______, _______, QK_BOOT, _______
112 )
113 // clang-format on
114};
115
116#ifdef ENCODER_MAP_ENABLE
117const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
118 // clang-format off
119 [_QWERTY] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
120 [_GAME] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
121 [_EU] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
122 [_NAV] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
123 [_NUMBER] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
124 [_SYMBOL] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
125 [_FUNC] = { ENCODER_CCW_CW(KC_LEFT, KC_RGHT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
126 [_SYS] = { ENCODER_CCW_CW(BL_DOWN, BL_UP), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }
127 // clang-format on
128};
129#endif // ENCODER_MAP_ENABLE
130
131/* different tapping term for different fingers */
132uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
133 switch (keycode) {
134 // pinkies
135 case HOME_A:
136 case HOME_P:
137 return 250;
138 // ring
139 case HOME_S:
140 case HOME_L:
141 return 200;
142 // middle
143 case HOME_D:
144 case HOME_K:
145 return 160;
146 // index
147 case HOME_F:
148 case HOME_J:
149 return 140;
150 // thumb and game
151 default:
152 return TAPPING_TERM;
153 }
154}
155
156/* helper function for custom increased tapping term for home row CTRL + other keys */
157uint16_t HOME_CTRL_pressed_time = 0;
158void custom_home_row_ctrl(keyrecord_t *record, uint16_t time) {
159 if (record->tap.count && get_mods() & MOD_MASK_CTRL) {
160 if (TIMER_DIFF_16(record->event.time, HOME_CTRL_pressed_time) < time) {
161 del_mods(MOD_MASK_CTRL);
162 tap_code(KC_D);
163 }
164 }
165}
166
167bool process_record_user(uint16_t keycode, keyrecord_t *record) {
168 dprintf("process_record_user %u %s %s %d\n", keycode, record->event.pressed ? "pressed" : "depressed", record->tap.interrupted ? "interrupted" : "not interrupted", record->tap.count);
169
170 if (record->event.pressed) {
171 uint8_t data[32];
172 data[0] = 0;
173
174 switch (keycode) {
175 // send hid commands
176 case KC_VOLU:
177 case KC_VOLD:
178 data[0] = _VOLUME;
179 break;
180
181 // handle macros
182 case M_EMAIL:
183 SEND_STRING("zzeneg@gmail.com");
184 break;
185 case M_CBR:
186 SEND_STRING("{}" SS_TAP(X_LEFT));
187 break;
188 case M_PRN:
189 SEND_STRING("()" SS_TAP(X_LEFT));
190 break;
191 case M_BRC:
192 SEND_STRING("[]" SS_TAP(X_LEFT));
193 break;
194 case M_ARROW:
195 SEND_STRING("=>");
196 break;
197
198 // custom increased tapping term for home row CTRL + other keys
199 case HOME_D:
200 // save time when CTRL from D key is pressed
201 if (!record->tap.count) {
202 HOME_CTRL_pressed_time = record->event.time;
203 }
204 break;
205 case HOME_S:
206 // if S is pressed and CTRL is active, and < 150 passed since CTRL was pressed, cancel CTRL and send D instead
207 custom_home_row_ctrl(record, 150);
208 break;
209 case HOME_A:
210 // if A is pressed and CTRL is active, and < 180 passed since CTRL was pressed, cancel CTRL and send D instead
211 custom_home_row_ctrl(record, 180);
212 break;
213 }
214
215 if (data[0]) {
216 dprintf("raw_hid_send %u\n", data[0]);
217 raw_hid_send(data, sizeof(data));
218 }
219 }
220
221 return true;
222}
223
224/* Active Layer processing */
225layer_state_t layer_state_set_user(layer_state_t state) {
226 if (is_display_enabled()) {
227 display_process_layer_state(get_highest_layer(state));
228 } else if (is_keyboard_master() && !is_keyboard_left()) {
229 uint8_t layer = get_highest_layer(state);
230 dprintf("RPC_ID_USER_LAYER_SYNC: %u\n", layer);
231 transaction_rpc_send(RPC_ID_USER_LAYER_SYNC, 1, &layer);
232 }
233
234 return state;
235}
236
237/* Caps Word processing */
238void caps_word_set_user(bool active) {
239 if (is_display_enabled()) {
240 display_process_caps_word(active);
241 } else if (is_keyboard_master() && !is_keyboard_left()) {
242 dprintf("RPC_ID_USER_CAPS_WORD_SYNC: %s\n", active ? "active" : "inactive");
243 transaction_rpc_send(RPC_ID_USER_CAPS_WORD_SYNC, 1, &active);
244 }
245}
246
247/* default caps word logic that allows KC_MINS. Underscore can be typed with KC_RSFT + KC_MINS */
248bool caps_word_press_user(uint16_t keycode) {
249 switch (keycode) {
250 // Keycodes that continue Caps Word, with shift applied.
251 case KC_A ... KC_Z:
252 add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
253 return true;
254
255 // Keycodes that continue Caps Word, without shifting.
256 case KC_1 ... KC_0:
257 case KC_BSPC:
258 case KC_DEL:
259 case KC_MINS:
260 case KC_RSFT:
261 return true;
262
263 default:
264 return false; // Deactivate Caps Word.
265 }
266}
267
268/* Raw HID processing*/
269void raw_hid_receive(uint8_t *data, uint8_t length) {
270 dprintf("raw_hid_receive - received %u bytes \n", length);
271
272 if (is_display_enabled()) {
273 display_process_raw_hid_data(data, length);
274 } else if (is_keyboard_master() && !is_keyboard_left()) {
275 dprint("RPC_ID_USER_HID_SYNC \n");
276 transaction_rpc_send(RPC_ID_USER_HID_SYNC, length, data);
277 }
278}
279
280void hid_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
281 if (is_display_enabled()) {
282 display_process_raw_hid_data((uint8_t *)initiator2target_buffer, initiator2target_buffer_size);
283 }
284}
285
286void layer_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
287 if (is_display_enabled()) {
288 display_process_layer_state(*(uint8_t *)initiator2target_buffer);
289 }
290}
291
292void caps_word_sync(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) {
293 if (is_display_enabled()) {
294 display_process_caps_word(*(bool *)initiator2target_buffer);
295 }
296}
297
298void keyboard_post_init_user() {
299 // sync received hid data
300 transaction_register_rpc(RPC_ID_USER_HID_SYNC, hid_sync);
301 // sync highest layer (a bit more performant than standard SPLIT_LAYER_STATE_ENABLE)
302 transaction_register_rpc(RPC_ID_USER_LAYER_SYNC, layer_sync);
303 // sync caps word state
304 transaction_register_rpc(RPC_ID_USER_CAPS_WORD_SYNC, caps_word_sync);
305}
diff --git a/keyboards/stront/keymaps/zzeneg/lv_conf.h b/keyboards/stront/keymaps/zzeneg/lv_conf.h
new file mode 100644
index 0000000000..8b0c1f3f83
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/lv_conf.h
@@ -0,0 +1,148 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6/* disable some things before lv_conf include */
7#define LV_USE_CALENDAR 0
8#define LV_USE_SPAN 0
9#define LV_USE_ROLLER 0
10#define LV_USE_TEXTAREA 0
11
12#include_next <lv_conf.h>
13
14/* Custom fonts:
15 - montserrat_20_en_ru - english/cyrillic symbols, range 0x20-0x7F,0x0410-0x044F,0x0401,0x0451
16 - montserrat_48_digits - digits, dot and colon only, range 0x2E,0x30-0x3A
17 */
18
19#undef LV_FONT_CUSTOM_DECLARE
20#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(montserrat_20_en_ru) LV_FONT_DECLARE(montserrat_48_digits)
21
22#undef LV_FONT_DEFAULT
23#define LV_FONT_DEFAULT &montserrat_20_en_ru
24
25#undef LV_FONT_MONTSERRAT_20
26#define LV_FONT_MONTSERRAT_20 0
27
28#undef LV_FONT_MONTSERRAT_48
29#define LV_FONT_MONTSERRAT_48 0
30
31// #undef LV_FONT_MONTSERRAT_16
32// #define LV_FONT_MONTSERRAT_16 1
33
34// #undef LV_FONT_MONTSERRAT_18
35// #define LV_FONT_MONTSERRAT_18 1
36
37// #undef LV_FONT_MONTSERRAT_20
38// #define LV_FONT_MONTSERRAT_20 1
39
40// #undef LV_FONT_MONTSERRAT_22
41// #define LV_FONT_MONTSERRAT_22 1
42
43// #undef LV_FONT_MONTSERRAT_24
44// #define LV_FONT_MONTSERRAT_24 1
45
46// #undef LV_FONT_MONTSERRAT_26
47// #define LV_FONT_MONTSERRAT_26 1
48
49// #undef LV_FONT_MONTSERRAT_28
50// #define LV_FONT_MONTSERRAT_28 1
51
52// #undef LV_FONT_MONTSERRAT_30
53// #define LV_FONT_MONTSERRAT_30 1
54
55// #undef LV_FONT_MONTSERRAT_32
56// #define LV_FONT_MONTSERRAT_32 1
57
58// #undef LV_FONT_MONTSERRAT_34
59// #define LV_FONT_MONTSERRAT_34 1
60
61// #undef LV_FONT_MONTSERRAT_36
62// #define LV_FONT_MONTSERRAT_36 1
63
64// #undef LV_FONT_MONTSERRAT_38
65// #define LV_FONT_MONTSERRAT_38 1
66
67// #undef LV_FONT_MONTSERRAT_40
68// #define LV_FONT_MONTSERRAT_40 1
69
70// #undef LV_FONT_MONTSERRAT_42
71// #define LV_FONT_MONTSERRAT_42 1
72
73// #undef LV_FONT_MONTSERRAT_44
74// #define LV_FONT_MONTSERRAT_44 1
75
76// #undef LV_FONT_MONTSERRAT_46
77// #define LV_FONT_MONTSERRAT_46 1
78
79// #undef LV_FONT_MONTSERRAT_48
80// #define LV_FONT_MONTSERRAT_48 1
81
82/* disable widgets*/
83#undef LV_USE_ANIMIMG
84#define LV_USE_ANIMIMG 0
85#undef LV_USE_BAR
86#define LV_USE_BAR 0
87#undef LV_USE_BTN
88#define LV_USE_BTN 0
89#undef LV_USE_BTNMATRIX
90#define LV_USE_BTNMATRIX 0
91#undef LV_USE_CANVAS
92#define LV_USE_CANVAS 0
93#undef LV_USE_CHECKBOX
94#define LV_USE_CHECKBOX 0
95#undef LV_USE_DROPDOWN
96#define LV_USE_DROPDOWN 0
97#undef LV_USE_LINE
98#define LV_USE_LINE 0
99#undef LV_USE_SLIDER
100#define LV_USE_SLIDER 0
101#undef LV_USE_SWITCH
102#define LV_USE_SWITCH 0
103#undef LV_USE_TABLE
104#define LV_USE_TABLE 0
105
106/* disable extra components */
107#undef LV_USE_CHART
108#define LV_USE_CHART 0
109#undef LV_USE_COLORWHEEL
110#define LV_USE_COLORWHEEL 0
111#undef LV_USE_IMGBTN
112#define LV_USE_IMGBTN 0
113#undef LV_USE_KEYBOARD
114#define LV_USE_KEYBOARD 0
115#undef LV_USE_LED
116#define LV_USE_LED 0
117#undef LV_USE_LIST
118#define LV_USE_LIST 0
119#undef LV_USE_MENU
120#define LV_USE_MENU 0
121#undef LV_USE_METER
122#define LV_USE_METER 0
123#undef LV_USE_MSGBOX
124#define LV_USE_MSGBOX 0
125#undef LV_USE_SPINBOX
126#define LV_USE_SPINBOX 0
127#undef LV_USE_SPINNER
128#define LV_USE_SPINNER 0
129#undef LV_USE_TABVIEW
130#define LV_USE_TABVIEW 0
131#undef LV_USE_TILEVIEW
132#define LV_USE_TILEVIEW 0
133#undef LV_USE_WIN
134#define LV_USE_WIN 0
135
136/* disable themes */
137#undef LV_USE_THEME_BASIC
138#define LV_USE_THEME_BASIC 0
139#undef LV_USE_THEME_MONO
140#define LV_USE_THEME_MONO 0
141
142/* disable layouts */
143#undef LV_USE_GRID
144#define LV_USE_GRID 0
145
146/* disable build examples */
147#undef LV_BUILD_EXAMPLES
148#define LV_BUILD_EXAMPLES 0
diff --git a/keyboards/stront/keymaps/zzeneg/mcuconf.h b/keyboards/stront/keymaps/zzeneg/mcuconf.h
new file mode 100644
index 0000000000..47ee67119d
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/mcuconf.h
@@ -0,0 +1,9 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include_next <mcuconf.h>
7
8#undef RP_I2C_USE_I2C1
9#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/stront/keymaps/zzeneg/rules.mk b/keyboards/stront/keymaps/zzeneg/rules.mk
new file mode 100644
index 0000000000..26ddf77803
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/rules.mk
@@ -0,0 +1,17 @@
1# CONSOLE_ENABLE = yes
2
3EXTRAKEY_ENABLE = yes
4MOUSEKEY_ENABLE = yes
5CAPS_WORD_ENABLE = yes
6ENCODER_MAP_ENABLE = yes
7DYNAMIC_TAPPING_TERM_ENABLE = yes
8
9POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
10
11RAW_ENABLE = yes
12
13SRC += zzeneg_display.c \
14 fonts/montserrat_20_en_ru.c \
15 fonts/montserrat_48_digits.c \
16 icons/flag_uk.c \
17 icons/flag_ru.c
diff --git a/keyboards/stront/keymaps/zzeneg/zzeneg_display.c b/keyboards/stront/keymaps/zzeneg/zzeneg_display.c
new file mode 100644
index 0000000000..d8d6f4d70b
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/zzeneg_display.c
@@ -0,0 +1,242 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "zzeneg_display.h"
5#include "display.h"
6#include "raw_hid.h"
7#include "lvgl_helpers.h"
8
9uint16_t home_screen_timer = 0;
10
11/* screens */
12static lv_obj_t *screen_home;
13static lv_obj_t *screen_volume;
14static lv_obj_t *screen_media;
15
16/* home screen content */
17static lv_obj_t *label_time;
18static lv_obj_t *label_volume_home;
19static lv_obj_t *label_shift;
20static lv_obj_t *label_ctrl;
21static lv_obj_t *label_alt;
22static lv_obj_t *label_gui;
23static lv_obj_t *label_layer;
24static lv_obj_t *label_caps;
25static lv_obj_t *label_caps_word;
26static lv_obj_t *icon_layout;
27
28/* volume screen content */
29static lv_obj_t *arc_volume;
30static lv_obj_t *label_volume_arc;
31
32/* media screen content */
33static lv_obj_t *label_media_artist;
34static lv_obj_t *label_media_title;
35
36LV_IMG_DECLARE(flag_ru);
37LV_IMG_DECLARE(flag_uk);
38/* can be replaced with PL flag (update rules.mk as well) */
39// LV_IMG_DECLARE(flag_pl);
40
41enum layout { _EN = 0, _RU };
42void set_layout_icon(uint8_t layout) {
43 switch (layout) {
44 case _EN:
45 lv_img_set_src(icon_layout, &flag_uk);
46 break;
47
48 case _RU:
49 lv_img_set_src(icon_layout, &flag_ru);
50 break;
51 }
52}
53
54void read_string(uint8_t *data, char *string_data) {
55 uint8_t data_length = data[1];
56 memcpy(string_data, data + 2, data_length);
57 string_data[data_length] = '\0';
58}
59
60void start_home_screen_timer(void) {
61 dprint("reset home screen\n");
62 home_screen_timer = timer_read();
63}
64
65void init_screen_home_custom(void) {
66 screen_home = lv_scr_act();
67 lv_obj_add_style(screen_home, &style_screen, 0);
68 use_flex_column(screen_home);
69
70 label_volume_home = lv_label_create(screen_home);
71 lv_label_set_text(label_volume_home, "");
72
73 lv_obj_t *mods = lv_obj_create(screen_home);
74 lv_obj_add_style(mods, &style_container, 0);
75 use_flex_row(mods);
76
77 label_gui = create_button(mods, "GUI", &style_button, &style_button_active);
78 label_alt = create_button(mods, "ALT", &style_button, &style_button_active);
79 label_ctrl = create_button(mods, "CTL", &style_button, &style_button_active);
80 label_shift = create_button(mods, "SFT", &style_button, &style_button_active);
81
82 label_time = lv_label_create(screen_home);
83 lv_label_set_text(label_time, "00:00");
84 lv_obj_set_style_text_font(label_time, &montserrat_48_digits, LV_PART_MAIN);
85
86 lv_obj_t *caps = lv_obj_create(screen_home);
87 lv_obj_add_style(caps, &style_container, 0);
88 use_flex_row(caps);
89
90 label_caps = create_button(caps, "CAPS", &style_button, &style_button_active);
91 label_caps_word = create_button(caps, "CAPS WORD", &style_button, &style_button_active);
92
93 lv_obj_t *bottom_row = lv_obj_create(screen_home);
94 lv_obj_add_style(bottom_row, &style_container, 0);
95
96 label_layer = lv_label_create(bottom_row);
97 lv_label_set_text(label_layer, "");
98 lv_obj_align(label_layer, LV_ALIGN_LEFT_MID, 10, 0);
99 display_process_layer_state(0);
100
101 icon_layout = lv_img_create(bottom_row);
102 lv_obj_set_style_radius(icon_layout, 4, 0);
103 lv_obj_set_style_clip_corner(icon_layout, true, 0);
104 lv_obj_align(icon_layout, LV_ALIGN_RIGHT_MID, -10, 0);
105}
106
107void init_screen_volume(void) {
108 screen_volume = lv_obj_create(NULL);
109 lv_obj_add_style(screen_volume, &style_screen, 0);
110
111 arc_volume = lv_arc_create(screen_volume);
112 lv_obj_set_size(arc_volume, 200, 200);
113 lv_obj_center(arc_volume);
114
115 label_volume_arc = lv_label_create(screen_volume);
116 lv_label_set_text(label_volume_arc, "00");
117 lv_obj_set_style_text_font(label_volume_arc, &montserrat_48_digits, LV_PART_MAIN);
118 lv_obj_center(label_volume_arc);
119
120 lv_obj_t *volume_text_label = lv_label_create(screen_volume);
121 lv_label_set_text(volume_text_label, "Volume");
122 lv_obj_align(volume_text_label, LV_ALIGN_BOTTOM_MID, 0, -10);
123}
124
125void init_screen_media(void) {
126 screen_media = lv_obj_create(NULL);
127 lv_obj_add_style(screen_media, &style_screen, 0);
128 use_flex_column(screen_media);
129 lv_obj_set_flex_align(screen_media, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
130
131 label_media_artist = lv_label_create(screen_media);
132 lv_label_set_text(label_media_artist, "N/A");
133 lv_label_set_long_mode(label_media_artist, LV_LABEL_LONG_WRAP);
134 lv_obj_set_width(label_media_artist, lv_pct(90));
135 lv_obj_set_style_text_align(label_media_artist, LV_TEXT_ALIGN_CENTER, 0);
136
137 label_media_title = lv_label_create(screen_media);
138 lv_label_set_text(label_media_title, "N/A");
139 lv_label_set_long_mode(label_media_title, LV_LABEL_LONG_WRAP);
140 lv_obj_set_width(label_media_title, lv_pct(90));
141 lv_obj_set_style_text_align(label_media_title, LV_TEXT_ALIGN_CENTER, 0);
142}
143
144bool display_init_user(void) {
145 init_screen_home_custom();
146 init_screen_volume();
147 init_screen_media();
148
149 return false;
150}
151
152void display_process_raw_hid_data(uint8_t *data, uint8_t length) {
153 uint8_t data_type = data[0];
154 char string_data[length - 2];
155 dprintf("display_process_raw_hid_data - received data_type %u \n", data_type);
156 switch (data_type) {
157 case _TIME:
158 dprintf("time %02d:%02d\n", data[1], data[2]);
159 lv_label_set_text_fmt(label_time, "%02d:%02d", data[1], data[2]);
160 break;
161
162 case _VOLUME:
163 dprintf("volume %d\n", data[1]);
164 lv_label_set_text_fmt(label_volume_home, "Volume: %02d%%", data[1]);
165 lv_label_set_text_fmt(label_volume_arc, "%02d", data[1]);
166 lv_arc_set_value(arc_volume, data[1]);
167 lv_scr_load(screen_volume);
168 start_home_screen_timer();
169 break;
170
171 case _LAYOUT:
172 dprintf("layout %d\n", data[1]);
173 set_layout_icon(data[1]);
174 break;
175
176 case _MEDIA_ARTIST:
177 read_string(data, string_data);
178 dprintf("media artist %s\n", string_data);
179 lv_label_set_text(label_media_artist, string_data);
180 lv_scr_load(screen_media);
181 start_home_screen_timer();
182 break;
183
184 case _MEDIA_TITLE:
185 read_string(data, string_data);
186 dprintf("media title %s\n", string_data);
187 lv_label_set_text(label_media_title, string_data);
188 lv_scr_load(screen_media);
189 start_home_screen_timer();
190 break;
191 }
192}
193
194void display_process_layer_state(uint8_t layer) {
195 switch (layer) {
196 case _QWERTY:
197 lv_label_set_text(label_layer, "QWERTY");
198 break;
199 case _GAME:
200 lv_label_set_text(label_layer, "GAME");
201 break;
202 case _EU:
203 lv_label_set_text(label_layer, "EU");
204 break;
205 case _NAV:
206 lv_label_set_text(label_layer, "NAV");
207 break;
208 case _NUMBER:
209 lv_label_set_text(label_layer, "NUMBER");
210 break;
211 case _SYMBOL:
212 lv_label_set_text(label_layer, "SYMBOL");
213 break;
214 case _FUNC:
215 lv_label_set_text(label_layer, "FUNC");
216 break;
217 case _SYS:
218 lv_label_set_text(label_layer, "SYSTEM");
219 break;
220 }
221}
222
223void display_housekeeping_task(void) {
224 if (home_screen_timer && timer_elapsed(home_screen_timer) > 5000) {
225 home_screen_timer = 0;
226 lv_scr_load(screen_home);
227 }
228
229 toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT);
230 toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL);
231 toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT);
232 toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI);
233}
234
235void display_process_caps(bool active) {
236 toggle_state(label_caps, LV_STATE_PRESSED, active);
237}
238
239void display_process_caps_word(bool active) {
240 dprint("display_process_caps_word\n");
241 toggle_state(label_caps_word, LV_STATE_PRESSED, active);
242}
diff --git a/keyboards/stront/keymaps/zzeneg/zzeneg_display.h b/keyboards/stront/keymaps/zzeneg/zzeneg_display.h
new file mode 100644
index 0000000000..22b36793f4
--- /dev/null
+++ b/keyboards/stront/keymaps/zzeneg/zzeneg_display.h
@@ -0,0 +1,27 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "quantum.h"
5
6typedef enum {
7 _QWERTY = 0,
8 _GAME,
9 _EU,
10 _NAV,
11 _NUMBER,
12 _SYMBOL,
13 _FUNC,
14 _SYS,
15} layer_number;
16
17typedef enum {
18 _TIME = 0,
19 _VOLUME,
20 _LAYOUT,
21 _MEDIA_ARTIST,
22 _MEDIA_TITLE,
23} hid_data_type;
24
25void display_process_raw_hid_data(uint8_t *data, uint8_t length);
26void display_process_layer_state(uint8_t layer);
27void display_process_caps_word(bool active);
diff --git a/keyboards/stront/lv_conf.h b/keyboards/stront/lv_conf.h
new file mode 100644
index 0000000000..57b093d500
--- /dev/null
+++ b/keyboards/stront/lv_conf.h
@@ -0,0 +1,18 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include_next <lv_conf.h>
7
8#undef LV_FONT_DEFAULT
9#define LV_FONT_DEFAULT &lv_font_montserrat_28
10
11#undef LV_FONT_MONTSERRAT_14
12#define LV_FONT_MONTSERRAT_14 0
13
14#undef LV_FONT_MONTSERRAT_28
15#define LV_FONT_MONTSERRAT_28 1
16
17#undef LV_FONT_MONTSERRAT_48
18#define LV_FONT_MONTSERRAT_48 1
diff --git a/keyboards/stront/lvgl_helpers.c b/keyboards/stront/lvgl_helpers.c
new file mode 100644
index 0000000000..f4f0698321
--- /dev/null
+++ b/keyboards/stront/lvgl_helpers.c
@@ -0,0 +1,113 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "lvgl_helpers.h"
5
6lv_obj_t *create_button(lv_obj_t *parent, const char *text, lv_style_t *style, lv_style_t *style_pressed) {
7 lv_obj_t *label = lv_label_create(parent);
8 lv_label_set_text(label, text);
9 lv_obj_add_style(label, style, 0);
10 lv_obj_add_style(label, style_pressed, LV_STATE_PRESSED);
11 return label;
12}
13
14void use_flex_row(void *obj) {
15 lv_obj_set_layout(obj, LV_LAYOUT_FLEX);
16 lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_ROW);
17 lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
18}
19
20void use_flex_column(void *obj) {
21 lv_obj_set_layout(obj, LV_LAYOUT_FLEX);
22 lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
23 lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_SPACE_AROUND, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
24}
25
26void toggle_state(void *obj, lv_state_t state, bool enabled) {
27 if (enabled) {
28 lv_obj_add_state(obj, state);
29 } else {
30 lv_obj_clear_state(obj, state);
31 }
32}
33
34void toggle_hidden(void *obj, bool visible) {
35 if (visible) {
36 lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN);
37 } else {
38 lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
39 }
40}
41
42void resize_font(void *label, int32_t font_size) {
43 dprintf("font size %ld\n", font_size);
44#if LV_FONT_MONTSERRAT_8
45 if (font_size == 8) return lv_obj_set_style_text_font(label, &lv_font_montserrat_8, LV_PART_MAIN);
46#endif
47#if LV_FONT_MONTSERRAT_10
48 if (font_size <= 10) return lv_obj_set_style_text_font(label, &lv_font_montserrat_8, LV_PART_MAIN);
49#endif
50#if LV_FONT_MONTSERRAT_12
51 if (font_size <= 12) return lv_obj_set_style_text_font(label, &lv_font_montserrat_12, LV_PART_MAIN);
52#endif
53#if LV_FONT_MONTSERRAT_14
54 if (font_size <= 14) return lv_obj_set_style_text_font(label, &lv_font_montserrat_14, LV_PART_MAIN);
55#endif
56#if LV_FONT_MONTSERRAT_16
57 if (font_size <= 16) return lv_obj_set_style_text_font(label, &lv_font_montserrat_16, LV_PART_MAIN);
58#endif
59#if LV_FONT_MONTSERRAT_18
60 if (font_size <= 18) return lv_obj_set_style_text_font(label, &lv_font_montserrat_18, LV_PART_MAIN);
61#endif
62#if LV_FONT_MONTSERRAT_20
63 if (font_size <= 20) return lv_obj_set_style_text_font(label, &lv_font_montserrat_20, LV_PART_MAIN);
64#endif
65#if LV_FONT_MONTSERRAT_22
66 if (font_size <= 22) return lv_obj_set_style_text_font(label, &lv_font_montserrat_22, LV_PART_MAIN);
67#endif
68#if LV_FONT_MONTSERRAT_24
69 if (font_size <= 24) return lv_obj_set_style_text_font(label, &lv_font_montserrat_24, LV_PART_MAIN);
70#endif
71#if LV_FONT_MONTSERRAT_26
72 if (font_size <= 26) return lv_obj_set_style_text_font(label, &lv_font_montserrat_26, LV_PART_MAIN);
73#endif
74#if LV_FONT_MONTSERRAT_28
75 if (font_size <= 28) return lv_obj_set_style_text_font(label, &lv_font_montserrat_28, LV_PART_MAIN);
76#endif
77#if LV_FONT_MONTSERRAT_30
78 if (font_size <= 30) return lv_obj_set_style_text_font(label, &lv_font_montserrat_30, LV_PART_MAIN);
79#endif
80#if LV_FONT_MONTSERRAT_32
81 if (font_size <= 32) return lv_obj_set_style_text_font(label, &lv_font_montserrat_32, LV_PART_MAIN);
82#endif
83#if LV_FONT_MONTSERRAT_34
84 if (font_size <= 34) return lv_obj_set_style_text_font(label, &lv_font_montserrat_34, LV_PART_MAIN);
85#endif
86#if LV_FONT_MONTSERRAT_36
87 if (font_size <= 36) return lv_obj_set_style_text_font(label, &lv_font_montserrat_36, LV_PART_MAIN);
88#endif
89#if LV_FONT_MONTSERRAT_38
90 if (font_size <= 38) return lv_obj_set_style_text_font(label, &lv_font_montserrat_38, LV_PART_MAIN);
91#endif
92#if LV_FONT_MONTSERRAT_40
93 if (font_size <= 40) return lv_obj_set_style_text_font(label, &lv_font_montserrat_40, LV_PART_MAIN);
94#endif
95#if LV_FONT_MONTSERRAT_42
96 if (font_size <= 42) return lv_obj_set_style_text_font(label, &lv_font_montserrat_42, LV_PART_MAIN);
97#endif
98#if LV_FONT_MONTSERRAT_44
99 if (font_size <= 44) return lv_obj_set_style_text_font(label, &lv_font_montserrat_44, LV_PART_MAIN);
100#endif
101#if LV_FONT_MONTSERRAT_46
102 if (font_size <= 46) return lv_obj_set_style_text_font(label, &lv_font_montserrat_46, LV_PART_MAIN);
103#endif
104#if LV_FONT_MONTSERRAT_48
105 if (font_size <= 48) return lv_obj_set_style_text_font(label, &lv_font_montserrat_48, LV_PART_MAIN);
106#endif
107}
108
109void debug_set_obj_border(lv_obj_t *obj) {
110 lv_color_t red = lv_color_hex(0xFF0000);
111 lv_obj_set_style_border_color(obj, red, 0);
112 lv_obj_set_style_border_width(obj, 1, 0);
113}
diff --git a/keyboards/stront/lvgl_helpers.h b/keyboards/stront/lvgl_helpers.h
new file mode 100644
index 0000000000..671f6cccd2
--- /dev/null
+++ b/keyboards/stront/lvgl_helpers.h
@@ -0,0 +1,13 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "qp_lvgl.h"
5
6lv_obj_t *create_button(lv_obj_t *parent, const char *text, lv_style_t *style, lv_style_t *style_pressed);
7
8void use_flex_row(void *obj);
9void use_flex_column(void *obj);
10void toggle_state(void *obj, lv_state_t state, bool enabled);
11void toggle_hidden(void *obj, bool visible);
12void resize_font(void *label, int32_t v);
13void debug_set_obj_border(lv_obj_t *obj);
diff --git a/keyboards/stront/mcuconf.h b/keyboards/stront/mcuconf.h
new file mode 100644
index 0000000000..f35384aa28
--- /dev/null
+++ b/keyboards/stront/mcuconf.h
@@ -0,0 +1,12 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include_next <mcuconf.h>
7
8#undef RP_SPI_USE_SPI1
9#define RP_SPI_USE_SPI1 TRUE
10
11#undef RP_PWM_USE_PWM7
12#define RP_PWM_USE_PWM7 TRUE
diff --git a/keyboards/stront/readme.md b/keyboards/stront/readme.md
new file mode 100644
index 0000000000..1da6f0bdd1
--- /dev/null
+++ b/keyboards/stront/readme.md
@@ -0,0 +1,45 @@
1# stront
2
3![stront](https://i.imgur.com/FOPnWhch.jpg)
4
5Split keyboard with 38 keys, LCD display and Cirque trackpad.
6
7- Keyboard Maintainer: [zzeneg](https://github.com/zzeneg)
8- Hardware Supported: Stront PCBs, Waveshare RP2040 Zero
9- Hardware Availability: [GitHub](https://github.com/zzeneg/stront)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make stront:default
14
15Flashing example for this keyboard:
16
17 make stront:default:flash
18
19See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
20
21## Keymaps
22
23- `default` - sample keymap with home row mods. Not recommended for longer use - create your own.
24- `hid` - default keymap with HID support. Requires additional software running on computer, see https://github.com/zzeneg/qmk-hid-host.
25- `i2c` - default keymap with I2C Cirque instead of default SPI
26- `zzeneg` - my highly customized layout, you can use as a reference
27
28Keymaps have [EE_HANDS](https://docs.qmk.fm/#/feature_split_keyboard?id=handedness-by-eeprom) enabled, so any side can be master (though using side with touchpad as master is recommended). You have to specify left/right side by flashing with different commands:
29
30`qmk flash -kb stront -km default -bl uf2-split-left`
31
32or
33
34`qmk flash -kb stront -km default -bl uf2-split-right`
35
36If your keyboard is flashed already, you can do it by pressing key combinations - hold inner thumb key, then hold outer thumb key to activate SYSTEM layer. Now press outer bottom pinky key for left side or inner bottom index key for right side. See [keymap](./keymaps/default/keymap.c) for better understanding. Reconnect the keyboard to apply changes.
37
38## Bootloader
39
40Enter the bootloader in 2 ways:
41
42- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (outer top pinky key) and plug in the keyboard
43- **Keycode in layout**: Press the key mapped to `QK_BOOT` - by default you need to hold inner thumb key, then hold outer thumb key and press middle thumb key (see [keymap.c](./keymaps/default/keymap.c) for details). It's a complicated combination to avoid accidental activations.
44
45RP2040 Zero has physical boot/reset buttons but they are unaccessible after the keyboards is assembled, so always keep a `QK_BOOT` key and/or bootmagic feature in your keymaps.
diff --git a/keyboards/stront/rules.mk b/keyboards/stront/rules.mk
new file mode 100644
index 0000000000..940a592d11
--- /dev/null
+++ b/keyboards/stront/rules.mk
@@ -0,0 +1,12 @@
1SERIAL_DRIVER = vendor
2WS2812_DRIVER = vendor
3
4POINTING_DEVICE_ENABLE = yes
5POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
6
7QUANTUM_PAINTER_ENABLE = yes
8QUANTUM_PAINTER_DRIVERS += st7789_spi
9QUANTUM_PAINTER_LVGL_INTEGRATION = yes
10
11SRC += lvgl_helpers.c \
12 display.c
diff --git a/keyboards/stront/stront.c b/keyboards/stront/stront.c
new file mode 100644
index 0000000000..dc1f588c9b
--- /dev/null
+++ b/keyboards/stront/stront.c
@@ -0,0 +1,61 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "stront.h"
5#include "display.h"
6
7static bool display_enabled;
8
9/* public function to be used in keymaps */
10bool is_display_enabled(void) {
11 return display_enabled;
12}
13
14/* default encoder keys */
15bool encoder_update_kb(uint8_t index, bool clockwise) {
16 if (!encoder_update_user(index, clockwise)) {
17 return false;
18 }
19 if (index == 0) {
20 if (clockwise) {
21 tap_code_delay(KC_VOLU, 10);
22 } else {
23 tap_code_delay(KC_VOLD, 10);
24 }
25 } else if (index == 1) {
26 if (clockwise) {
27 tap_code_delay(KC_RIGHT, 10);
28 } else {
29 tap_code_delay(KC_LEFT, 10);
30 }
31 }
32 return true;
33}
34
35/* Caps Lock processing */
36bool led_update_kb(led_t led_state) {
37 bool res = led_update_user(led_state);
38 if (res && display_enabled) {
39 display_process_caps(led_state.caps_lock);
40 }
41
42 return res;
43}
44
45void housekeeping_task_kb(void) {
46 if (display_enabled) {
47 display_housekeeping_task();
48 }
49
50 housekeeping_task_user();
51}
52
53void keyboard_post_init_kb(void) {
54 display_enabled = false;
55
56 if (is_keyboard_left()) {
57 display_enabled = display_init_kb();
58 }
59
60 keyboard_post_init_user();
61}
diff --git a/keyboards/stront/stront.h b/keyboards/stront/stront.h
new file mode 100644
index 0000000000..9ca618a6fb
--- /dev/null
+++ b/keyboards/stront/stront.h
@@ -0,0 +1,6 @@
1// Copyright 2023 zzeneg (@zzeneg)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6bool is_display_enabled(void);
diff --git a/keyboards/viktus/styrka_topre/ec.c b/keyboards/viktus/styrka_topre/ec.c
new file mode 100644
index 0000000000..c9980461af
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/ec.c
@@ -0,0 +1,191 @@
1/* Copyright 2023 Viktus Design LLC
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#include "ec.h"
18
19#include "quantum.h"
20#include "analog.h"
21//#include "debug.h"
22
23// sensing channel definitions
24#define A0 0
25#define A1 1
26#define A2 2
27#define A3 3
28#define A4 4
29#define A5 5
30#define A6 6
31#define A7 7
32
33// analog connection settings
34#define DISCHARGE_PIN D3
35#define ANALOG_PORT D4
36
37#ifndef MUX_SEL_PIN
38# define MUX_SEL_PINS \
39 { D0, D1, D2 }
40#endif
41
42// pin connections
43const uint8_t row_channels[] = MATRIX_ROW_PINS;
44const uint8_t col_pins[] = MATRIX_COL_PINS;
45const uint8_t mux_sel_pins[] = MUX_SEL_PINS;
46
47_Static_assert(sizeof(mux_sel_pins) == 3, "invalid MUX_SEL_PINS");
48
49static ec_config_t config;
50static uint16_t ec_sw_value[MATRIX_COLS][MATRIX_ROWS];
51
52static inline void discharge_capacitor(void) { setPinOutput(DISCHARGE_PIN); }
53static inline void charge_capacitor(uint8_t col) {
54 setPinInput(DISCHARGE_PIN);
55 writePinHigh(col_pins[col]);
56}
57
58static inline void clear_all_col_pins(void) {
59 for (int col = 0; col < sizeof(col_pins); col++) {
60 writePinLow(col_pins[col]);
61 }
62}
63
64void init_mux_sel(void) {
65 for (int idx = 0; idx < sizeof(mux_sel_pins); idx++) {
66 setPinOutput(mux_sel_pins[idx]);
67 }
68}
69
70void select_mux(uint8_t row) {
71 uint8_t ch = row_channels[row];
72 writePin(mux_sel_pins[0], ch & 1);
73 writePin(mux_sel_pins[1], ch & 2);
74 writePin(mux_sel_pins[2], ch & 4);
75}
76
77void init_col(void) {
78 for (int idx = 0; idx < sizeof(col_pins); idx++) {
79 setPinOutput(col_pins[idx]);
80 writePinLow(col_pins[idx]);
81 }
82}
83
84void ec_init(ec_config_t const* const ec_config) {
85 // save config
86 config = *ec_config;
87
88 // initialize discharge pin as discharge mode
89 writePinLow(DISCHARGE_PIN);
90 setPinOutput(DISCHARGE_PIN);
91
92 // set analog reference
93 analogReference(ADC_REF_POWER);
94
95 // initialize drive lines
96 init_col();
97
98 // initialize multiplexer select pin
99 init_mux_sel();
100
101 // set discharge pin to charge mode
102 setPinInput(DISCHARGE_PIN);
103}
104
105uint16_t ec_readkey_raw(uint8_t col, uint8_t row) {
106 uint16_t sw_value = 0;
107
108 discharge_capacitor();
109
110 select_mux(row);
111
112 clear_all_col_pins();
113
114 cli();
115
116 charge_capacitor(col);
117
118 sw_value = analogReadPin(ANALOG_PORT);
119
120 sei();
121
122 return sw_value;
123}
124
125bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt) {
126 bool current_state = (*current_row >> col) & 1;
127
128 // press to release
129 if (current_state && sw_value < reset_pt) {
130 *current_row &= ~(MATRIX_ROW_SHIFTER << col);
131 return true;
132 }
133
134 // release to press
135 if ((!current_state) && sw_value > actuation_pt) {
136 *current_row |= (MATRIX_ROW_SHIFTER << col);
137 return true;
138 }
139
140 return false;
141}
142
143bool ec_matrix_scan(matrix_row_t current_matrix[]) {
144 bool updated = false;
145
146 for (int row = 0; row < sizeof(row_channels); row++) {
147 for (int col = 0; col < sizeof(col_pins); col++) {
148 uint16_t reset_pt = config.reset_pt;
149 uint16_t actuation_pt = config.actuation_pt;
150
151 switch(row) {
152 case 0:
153 switch(col) {
154 case 15: // lower threshold for split backspace:
155 case 16: // lower threshold for 2U backspace: 2U(37 rest, 62 btm)
156 reset_pt = 45;
157 actuation_pt = 50;
158 break;
159 }
160 break;
161 case 4:
162 switch(col) {
163 case 8: // Lower threshold for spacebar: 7U(37 rest, 63 btm)
164 reset_pt = 55;
165 actuation_pt = 60;
166 break;
167 case 13: // Lower threshold for right bottom mods: 1.5U(40 rest, 65 btm)
168 reset_pt = 47;
169 actuation_pt = 53;
170 break;
171 }
172 break;
173 }
174
175 ec_sw_value[col][row] = ec_readkey_raw(col, row);
176 updated |= ec_update_key(&current_matrix[row], col, ec_sw_value[col][row], reset_pt, actuation_pt);
177 }
178 }
179
180 return updated;
181}
182
183// console debugging for pad values
184/*void ec_dprint_matrix(void) {
185 for (int row = 0; row < sizeof(row_channels); row++) {
186 for (int col = 0; col < sizeof(col_pins); col++) {
187 dprintf("%5d", ec_sw_value[col][row]);
188 }
189 dprintf("\n");
190 }
191}*/
diff --git a/keyboards/viktus/styrka_topre/ec.h b/keyboards/viktus/styrka_topre/ec.h
new file mode 100644
index 0000000000..ace8d092b5
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/ec.h
@@ -0,0 +1,31 @@
1/* Copyright 2023 Viktus Design LLC
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#include <stdint.h>
18#include <stdbool.h>
19
20#include "matrix.h"
21
22typedef struct {
23 uint16_t reset_pt;
24 uint16_t actuation_pt;
25} ec_config_t;
26
27void ec_init(ec_config_t const* const ec_config);
28bool ec_matrix_scan(matrix_row_t current_matrix[]);
29//void ec_dprint_matrix(void);
30uint16_t ec_readkey_raw(uint8_t col, uint8_t row);
31bool ec_update_key(matrix_row_t* current_row, matrix_row_t col, uint16_t sw_value, uint16_t reset_pt, uint16_t actuation_pt);
diff --git a/keyboards/viktus/styrka_topre/info.json b/keyboards/viktus/styrka_topre/info.json
new file mode 100644
index 0000000000..f6d3560985
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/info.json
@@ -0,0 +1,438 @@
1{
2 "manufacturer": "Viktus Design LLC",
3 "keyboard_name": "Viktus Styrka - Topre",
4 "maintainer": "BlindAssassin111",
5 "url": "https://viktus.design",
6 "usb": {
7 "device_version": "1.3.0",
8 "vid": "0x5644",
9 "pid": "0x5354"
10 },
11 "bootloader": "atmel-dfu",
12 "processor": "atmega32u4",
13 "features": {
14 "bootmagic": true,
15 "command": false,
16 "console": false,
17 "extrakey": true,
18 "mousekey": true,
19 "nkro": true
20 },
21 "build": {
22 "lto": true
23 },
24 "diode_direction": "COL2ROW",
25 "matrix_pins": {
26 "cols": ["B5", "B4", "D7", "D6", "F6", "F5", "F4", "C7", "C6", "B6", "F7", "B1", "B2", "B3", "B7", "F1", "F0", "E6"],
27 "rows": ["A7", "A6", "A4", "A5", "A3"]
28 },
29 "layouts": {
30 "LAYOUT_all": {
31 "layout": [
32 {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
33 {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
34 {"label": "K002", "matrix": [0, 2], "x": 2, "y": 0},
35 {"label": "K003", "matrix": [0, 3], "x": 3, "y": 0},
36 {"label": "K004", "matrix": [0, 4], "x": 4, "y": 0},
37 {"label": "K005", "matrix": [0, 5], "x": 5, "y": 0},
38 {"label": "K006", "matrix": [0, 6], "x": 6, "y": 0},
39 {"label": "K007", "matrix": [0, 7], "x": 7, "y": 0},
40 {"label": "K008", "matrix": [0, 8], "x": 8, "y": 0},
41 {"label": "K009", "matrix": [0, 9], "x": 9, "y": 0},
42 {"label": "K00A", "matrix": [0, 10], "x": 10, "y": 0},
43 {"label": "K00B", "matrix": [0, 11], "x": 11, "y": 0},
44 {"label": "K00C", "matrix": [0, 12], "x": 12, "y": 0},
45 {"label": "K00D", "matrix": [0, 13], "x": 13, "y": 0},
46 {"label": "K00E", "matrix": [0, 14], "x": 14, "y": 0},
47 {"label": "K00F", "matrix": [0, 15], "x": 15, "y": 0},
48 {"label": "K010", "matrix": [0, 16], "x": 16, "y": 0},
49 {"label": "K011", "matrix": [0, 17], "x": 17, "y": 0},
50 {"label": "K100", "matrix": [1, 0], "x": 18, "y": 0},
51 {"label": "K101", "matrix": [1, 1], "x": 19, "y": 0},
52 {"label": "K102", "matrix": [1, 2], "x": 20, "y": 0},
53 {"label": "K103", "matrix": [1, 3], "x": 21, "y": 0},
54 {"label": "K104", "matrix": [1, 4], "x": 22, "y": 0},
55 {"label": "K105", "matrix": [1, 5], "x": 23, "y": 0},
56 {"label": "K106", "matrix": [1, 6], "x": 24, "y": 0},
57 {"label": "K107", "matrix": [1, 7], "x": 25, "y": 0},
58 {"label": "K108", "matrix": [1, 8], "x": 26, "y": 0},
59 {"label": "K109", "matrix": [1, 9], "x": 27, "y": 0},
60 {"label": "K10A", "matrix": [1, 10], "x": 28, "y": 0},
61 {"label": "K10B", "matrix": [1, 11], "x": 29, "y": 0},
62 {"label": "K10C", "matrix": [1, 12], "x": 30, "y": 0},
63 {"label": "K10D", "matrix": [1, 13], "x": 31, "y": 0},
64 {"label": "K10E", "matrix": [1, 14], "x": 32, "y": 0},
65 {"label": "K110", "matrix": [1, 16], "x": 33, "y": 0},
66 {"label": "K111", "matrix": [1, 17], "x": 34, "y": 0},
67 {"label": "K200", "matrix": [2, 0], "x": 35, "y": 0},
68 {"label": "K201", "matrix": [2, 1], "x": 36, "y": 0},
69 {"label": "K202", "matrix": [2, 2], "x": 37, "y": 0},
70 {"label": "K203", "matrix": [2, 3], "x": 38, "y": 0},
71 {"label": "K204", "matrix": [2, 4], "x": 39, "y": 0},
72 {"label": "K205", "matrix": [2, 5], "x": 40, "y": 0},
73 {"label": "K206", "matrix": [2, 6], "x": 41, "y": 0},
74 {"label": "K207", "matrix": [2, 7], "x": 42, "y": 0},
75 {"label": "K208", "matrix": [2, 8], "x": 43, "y": 0},
76 {"label": "K209", "matrix": [2, 9], "x": 44, "y": 0},
77 {"label": "K20A", "matrix": [2, 10], "x": 45, "y": 0},
78 {"label": "K20B", "matrix": [2, 11], "x": 46, "y": 0},
79 {"label": "K20C", "matrix": [2, 12], "x": 47, "y": 0},
80 {"label": "K20D", "matrix": [2, 13], "x": 48, "y": 0},
81 {"label": "K20F", "matrix": [2, 15], "x": 49, "y": 0},
82 {"label": "K211", "matrix": [2, 17], "x": 50, "y": 0},
83 {"label": "K300", "matrix": [3, 0], "x": 51, "y": 0},
84 {"label": "K301", "matrix": [3, 1], "x": 52, "y": 0},
85 {"label": "K302", "matrix": [3, 2], "x": 53, "y": 0},
86 {"label": "K304", "matrix": [3, 4], "x": 54, "y": 0},
87 {"label": "K305", "matrix": [3, 5], "x": 55, "y": 0},
88 {"label": "K306", "matrix": [3, 6], "x": 56, "y": 0},
89 {"label": "K307", "matrix": [3, 7], "x": 57, "y": 0},
90 {"label": "K308", "matrix": [3, 8], "x": 58, "y": 0},
91 {"label": "K309", "matrix": [3, 9], "x": 59, "y": 0},
92 {"label": "K30A", "matrix": [3, 10], "x": 60, "y": 0},
93 {"label": "K30B", "matrix": [3, 11], "x": 61, "y": 0},
94 {"label": "K30C", "matrix": [3, 12], "x": 62, "y": 0},
95 {"label": "K30D", "matrix": [3, 13], "x": 63, "y": 0},
96 {"label": "K30E", "matrix": [3, 14], "x": 64, "y": 0},
97 {"label": "K310", "matrix": [3, 16], "x": 65, "y": 0},
98 {"label": "K311", "matrix": [3, 17], "x": 66, "y": 0},
99 {"label": "K400", "matrix": [4, 0], "x": 67, "y": 0},
100 {"label": "K401", "matrix": [4, 1], "x": 68, "y": 0},
101 {"label": "K402", "matrix": [4, 2], "x": 69, "y": 0},
102 {"label": "K403", "matrix": [4, 3], "x": 70, "y": 0},
103 {"label": "K404", "matrix": [4, 4], "x": 71, "y": 0},
104 {"label": "K408", "matrix": [4, 8], "x": 72, "y": 0},
105 {"label": "K40C", "matrix": [4, 12], "x": 73, "y": 0},
106 {"label": "K40D", "matrix": [4, 13], "x": 74, "y": 0},
107 {"label": "K40E", "matrix": [4, 14], "x": 75, "y": 0},
108 {"label": "K410", "matrix": [4, 16], "x": 76, "y": 0},
109 {"label": "K411", "matrix": [4, 17], "x": 77, "y": 0}
110 ]
111 },
112 "LAYOUT_2u_6u": {
113 "layout": [
114 {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
115 {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
116 {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
117 {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
118 {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
119 {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
120 {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
121 {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
122 {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
123 {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
124 {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
125 {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
126 {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
127 {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
128 {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
129 {"label": "K010", "matrix": [0, 16], "x": 15.25, "y": 0, "w": 2},
130 {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
131 {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
132 {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
133 {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
134 {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
135 {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
136 {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
137 {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
138 {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
139 {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
140 {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
141 {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
142 {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
143 {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
144 {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
145 {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
146 {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
147 {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
148 {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
149 {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
150 {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
151 {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
152 {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
153 {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
154 {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
155 {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
156 {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
157 {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
158 {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
159 {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
160 {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
161 {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
162 {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
163 {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
164 {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
165 {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
166 {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
167 {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
168 {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
169 {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
170 {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
171 {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
172 {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
173 {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
174 {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
175 {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
176 {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
177 {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
178 {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
179 {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
180 {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
181 {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
182 {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
183 {"label": "K403", "matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
184 {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
185 {"label": "K408", "matrix": [4, 8], "x": 6, "y": 4, "w": 6.25},
186 {"label": "K40C", "matrix": [4, 12], "x": 12.25, "y": 4},
187 {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
188 {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
189 {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
190 {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
191 ]
192 },
193 "LAYOUT_2u_7u": {
194 "layout": [
195 {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
196 {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
197 {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
198 {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
199 {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
200 {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
201 {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
202 {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
203 {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
204 {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
205 {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
206 {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
207 {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
208 {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
209 {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
210 {"label": "K010", "matrix": [0, 16], "x": 15.25, "y": 0, "w": 2},
211 {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
212 {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
213 {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
214 {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
215 {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
216 {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
217 {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
218 {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
219 {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
220 {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
221 {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
222 {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
223 {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
224 {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
225 {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
226 {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
227 {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
228 {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
229 {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
230 {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
231 {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
232 {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
233 {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
234 {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
235 {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
236 {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
237 {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
238 {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
239 {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
240 {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
241 {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
242 {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
243 {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
244 {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
245 {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
246 {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
247 {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
248 {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
249 {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
250 {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
251 {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
252 {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
253 {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
254 {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
255 {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
256 {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
257 {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
258 {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
259 {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
260 {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
261 {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
262 {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
263 {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
264 {"label": "K403", "matrix": [4, 3], "x": 3.75, "y": 4},
265 {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
266 {"label": "K408", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
267 {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
268 {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
269 {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
270 {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
271 ]
272 },
273
274 "LAYOUT_split_6u": {
275 "layout": [
276 {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
277 {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
278 {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
279 {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
280 {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
281 {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
282 {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
283 {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
284 {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
285 {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
286 {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
287 {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
288 {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
289 {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
290 {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
291 {"label": "K00F", "matrix": [0, 15], "x": 15.25, "y": 0},
292 {"label": "K010", "matrix": [0, 16], "x": 16.25, "y": 0},
293 {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
294 {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
295 {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
296 {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
297 {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
298 {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
299 {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
300 {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
301 {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
302 {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
303 {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
304 {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
305 {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
306 {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
307 {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
308 {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
309 {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
310 {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
311 {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
312 {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
313 {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
314 {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
315 {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
316 {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
317 {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
318 {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
319 {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
320 {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
321 {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
322 {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
323 {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
324 {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
325 {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
326 {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
327 {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
328 {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
329 {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
330 {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
331 {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
332 {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
333 {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
334 {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
335 {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
336 {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
337 {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
338 {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
339 {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
340 {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
341 {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
342 {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
343 {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
344 {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
345 {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
346 {"label": "K403", "matrix": [4, 3], "x": 3.5, "y": 4, "w": 1.25},
347 {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.25},
348 {"label": "K408", "matrix": [4, 8], "x": 6, "y": 4, "w": 6.25},
349 {"label": "K40C", "matrix": [4, 12], "x": 12.25, "y": 4},
350 {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
351 {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
352 {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
353 {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
354 ]
355 },
356 "LAYOUT_split_7u": {
357 "layout": [
358 {"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
359 {"label": "K001", "matrix": [0, 1], "x": 1, "y": 0},
360 {"label": "K002", "matrix": [0, 2], "x": 2.25, "y": 0},
361 {"label": "K003", "matrix": [0, 3], "x": 3.25, "y": 0},
362 {"label": "K004", "matrix": [0, 4], "x": 4.25, "y": 0},
363 {"label": "K005", "matrix": [0, 5], "x": 5.25, "y": 0},
364 {"label": "K006", "matrix": [0, 6], "x": 6.25, "y": 0},
365 {"label": "K007", "matrix": [0, 7], "x": 7.25, "y": 0},
366 {"label": "K008", "matrix": [0, 8], "x": 8.25, "y": 0},
367 {"label": "K009", "matrix": [0, 9], "x": 9.25, "y": 0},
368 {"label": "K00A", "matrix": [0, 10], "x": 10.25, "y": 0},
369 {"label": "K00B", "matrix": [0, 11], "x": 11.25, "y": 0},
370 {"label": "K00C", "matrix": [0, 12], "x": 12.25, "y": 0},
371 {"label": "K00D", "matrix": [0, 13], "x": 13.25, "y": 0},
372 {"label": "K00E", "matrix": [0, 14], "x": 14.25, "y": 0},
373 {"label": "K00F", "matrix": [0, 15], "x": 15.25, "y": 0},
374 {"label": "K010", "matrix": [0, 16], "x": 16.25, "y": 0},
375 {"label": "K011", "matrix": [0, 17], "x": 17.25, "y": 0},
376 {"label": "K100", "matrix": [1, 0], "x": 0, "y": 1},
377 {"label": "K101", "matrix": [1, 1], "x": 1, "y": 1},
378 {"label": "K102", "matrix": [1, 2], "x": 2.25, "y": 1, "w": 1.5},
379 {"label": "K103", "matrix": [1, 3], "x": 3.75, "y": 1},
380 {"label": "K104", "matrix": [1, 4], "x": 4.75, "y": 1},
381 {"label": "K105", "matrix": [1, 5], "x": 5.75, "y": 1},
382 {"label": "K106", "matrix": [1, 6], "x": 6.75, "y": 1},
383 {"label": "K107", "matrix": [1, 7], "x": 7.75, "y": 1},
384 {"label": "K108", "matrix": [1, 8], "x": 8.75, "y": 1},
385 {"label": "K109", "matrix": [1, 9], "x": 9.75, "y": 1},
386 {"label": "K10A", "matrix": [1, 10], "x": 10.75, "y": 1},
387 {"label": "K10B", "matrix": [1, 11], "x": 11.75, "y": 1},
388 {"label": "K10C", "matrix": [1, 12], "x": 12.75, "y": 1},
389 {"label": "K10D", "matrix": [1, 13], "x": 13.75, "y": 1},
390 {"label": "K10E", "matrix": [1, 14], "x": 14.75, "y": 1},
391 {"label": "K110", "matrix": [1, 16], "x": 15.75, "y": 1, "w": 1.5},
392 {"label": "K111", "matrix": [1, 17], "x": 17.25, "y": 1},
393 {"label": "K200", "matrix": [2, 0], "x": 0, "y": 2},
394 {"label": "K201", "matrix": [2, 1], "x": 1, "y": 2},
395 {"label": "K202", "matrix": [2, 2], "x": 2.25, "y": 2, "w": 1.75},
396 {"label": "K203", "matrix": [2, 3], "x": 4, "y": 2},
397 {"label": "K204", "matrix": [2, 4], "x": 5, "y": 2},
398 {"label": "K205", "matrix": [2, 5], "x": 6, "y": 2},
399 {"label": "K206", "matrix": [2, 6], "x": 7, "y": 2},
400 {"label": "K207", "matrix": [2, 7], "x": 8, "y": 2},
401 {"label": "K208", "matrix": [2, 8], "x": 9, "y": 2},
402 {"label": "K209", "matrix": [2, 9], "x": 10, "y": 2},
403 {"label": "K20A", "matrix": [2, 10], "x": 11, "y": 2},
404 {"label": "K20B", "matrix": [2, 11], "x": 12, "y": 2},
405 {"label": "K20C", "matrix": [2, 12], "x": 13, "y": 2},
406 {"label": "K20D", "matrix": [2, 13], "x": 14, "y": 2},
407 {"label": "K20F", "matrix": [2, 15], "x": 15, "y": 2, "w": 2.25},
408 {"label": "K211", "matrix": [2, 17], "x": 17.25, "y": 2},
409 {"label": "K300", "matrix": [3, 0], "x": 0, "y": 3},
410 {"label": "K301", "matrix": [3, 1], "x": 1, "y": 3},
411 {"label": "K302", "matrix": [3, 2], "x": 2.25, "y": 3, "w": 2.25},
412 {"label": "K304", "matrix": [3, 4], "x": 4.5, "y": 3},
413 {"label": "K305", "matrix": [3, 5], "x": 5.5, "y": 3},
414 {"label": "K306", "matrix": [3, 6], "x": 6.5, "y": 3},
415 {"label": "K307", "matrix": [3, 7], "x": 7.5, "y": 3},
416 {"label": "K308", "matrix": [3, 8], "x": 8.5, "y": 3},
417 {"label": "K309", "matrix": [3, 9], "x": 9.5, "y": 3},
418 {"label": "K30A", "matrix": [3, 10], "x": 10.5, "y": 3},
419 {"label": "K30B", "matrix": [3, 11], "x": 11.5, "y": 3},
420 {"label": "K30C", "matrix": [3, 12], "x": 12.5, "y": 3},
421 {"label": "K30D", "matrix": [3, 13], "x": 13.5, "y": 3},
422 {"label": "K30E", "matrix": [3, 14], "x": 14.5, "y": 3, "w": 1.75},
423 {"label": "K310", "matrix": [3, 16], "x": 16.25, "y": 3},
424 {"label": "K311", "matrix": [3, 17], "x": 17.25, "y": 3},
425 {"label": "K400", "matrix": [4, 0], "x": 0, "y": 4},
426 {"label": "K401", "matrix": [4, 1], "x": 1, "y": 4},
427 {"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.5},
428 {"label": "K403", "matrix": [4, 3], "x": 3.75, "y": 4},
429 {"label": "K404", "matrix": [4, 4], "x": 4.75, "y": 4, "w": 1.5},
430 {"label": "K408", "matrix": [4, 8], "x": 6.25, "y": 4, "w": 7},
431 {"label": "K40D", "matrix": [4, 13], "x": 13.25, "y": 4, "w": 1.5},
432 {"label": "K40E", "matrix": [4, 14], "x": 15.25, "y": 4},
433 {"label": "K410", "matrix": [4, 16], "x": 16.25, "y": 4},
434 {"label": "K411", "matrix": [4, 17], "x": 17.25, "y": 4}
435 ]
436 }
437 }
438}
diff --git a/keyboards/viktus/styrka_topre/keymaps/default/keymap.c b/keyboards/viktus/styrka_topre/keymaps/default/keymap.c
new file mode 100644
index 0000000000..5c3f8fa031
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
1/* Copyright 2023 Viktus Design LLC
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#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT_2u_7u(
21 KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
22 KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
23 KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
24 KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
25 KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
26 )
27};
diff --git a/keyboards/viktus/styrka_topre/keymaps/via/keymap.c b/keyboards/viktus/styrka_topre/keymaps/via/keymap.c
new file mode 100644
index 0000000000..5c3f8fa031
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
1/* Copyright 2023 Viktus Design LLC
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#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT_2u_7u(
21 KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
22 KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
23 KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
24 KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
25 KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
26 )
27};
diff --git a/keyboards/viktus/styrka_topre/keymaps/via/rules.mk b/keyboards/viktus/styrka_topre/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/viktus/styrka_topre/readme.md b/keyboards/viktus/styrka_topre/readme.md
new file mode 100644
index 0000000000..20c9aedb5c
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/readme.md
@@ -0,0 +1,27 @@
1# Styrka - Topre
2
3![Styrka - Topre](https://i.imgur.com/ZQzkL4hh.png)
4
5A topre PCB for the Viktus Styrka
6
7- Keyboard Maintainer: BlindAssassin111
8- Hardware Supported: Styrka Topre PCB
9- Hardware Availability: Viktus Design LLC
10
11Make example for this keyboard (after setting up your build environment):
12
13 make viktus/styrka_topre:default
14
15Flashing example for this keyboard:
16
17 make viktus/styrka_topre:default:flash
18
19See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
20
21## Bootloader
22
23Enter the bootloader in 3 ways:
24
25* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
26* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
27* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/viktus/styrka_topre/rules.mk b/keyboards/viktus/styrka_topre/rules.mk
new file mode 100644
index 0000000000..037e26c530
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/rules.mk
@@ -0,0 +1,3 @@
1CUSTOM_MATRIX = lite
2QUANTUM_LIB_SRC += analog.c
3SRC += ec.c
diff --git a/keyboards/viktus/styrka_topre/styrka_topre.c b/keyboards/viktus/styrka_topre/styrka_topre.c
new file mode 100644
index 0000000000..96b04090cf
--- /dev/null
+++ b/keyboards/viktus/styrka_topre/styrka_topre.c
@@ -0,0 +1,49 @@
1/* Copyright 2023 Viktus Design LLC
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#include "quantum.h"
18#include "ec.h"
19#include "matrix.h"
20//#include "debug.h" // needed for debugging
21
22#define RESET_PT 55
23#define ACTUATION_PT 65
24
25// console debugging for pad values
26/*void keyboard_post_init_kb() {
27 debug_enable = true;
28 debug_matrix = true;
29}*/
30
31void matrix_init_custom(void) {
32 ec_config_t ec_config = {.reset_pt = RESET_PT, .actuation_pt = ACTUATION_PT};
33
34 ec_init(&ec_config);
35}
36
37bool matrix_scan_custom(matrix_row_t current_matrix[]) {
38 bool updated = ec_matrix_scan(current_matrix);
39
40 // console debugging for pad values
41 /*static int cnt = 0;
42 if (cnt++ == 300) {
43 cnt = 0;
44 ec_dprint_matrix();
45 dprintf("\n");
46 }*/
47
48 return updated;
49}
diff --git a/keyboards/winry/winry25tc/info.json b/keyboards/winry/winry25tc/info.json
index 26329497fb..a5d3b71a26 100644
--- a/keyboards/winry/winry25tc/info.json
+++ b/keyboards/winry/winry25tc/info.json
@@ -15,7 +15,10 @@
15 "saturation_steps": 8, 15 "saturation_steps": 8,
16 "brightness_steps": 8, 16 "brightness_steps": 8,
17 "led_count": 40, 17 "led_count": 40,
18 "max_brightness": 150 18 "max_brightness": 150,
19 "animations": {
20 "rainbow_swirl": true
21 }
19 }, 22 },
20 "matrix_pins": { 23 "matrix_pins": {
21 "cols": ["F5", "C7", "B7", "B2", "B4"], 24 "cols": ["F5", "C7", "B7", "B2", "B4"],
diff --git a/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c b/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c
new file mode 100644
index 0000000000..f175f36b91
--- /dev/null
+++ b/keyboards/winry/winry25tc/keymaps/lightsout/keymap.c
@@ -0,0 +1,136 @@
1/* Copyright 2023 Tom Parker-Shemilt <palfrey@tevp.net>
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, version 3 of the License.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 */
15
16#include <stdlib.h>
17
18#include QMK_KEYBOARD_H
19
20// clang-format off
21
22// Exact keymap is irrelevant as we're using rows/cols
23// but we need _something_ set so we're using no-ops
24const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25 [0] = LAYOUT(
26 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
27 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
28 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
29 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
30 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
31 )};
32
33bool tiles[5][5] = {
34 {false, false, false, false, false},
35 {false, false, false, false, false},
36 {false, false, false, false, false},
37 {false, false, false, false, false},
38 {false, false, false, false, false},
39};
40
41/* Because snake pattern of leds */
42const uint8_t remap[25] = {
43 20,21,22,23,24,
44 19,6,7,8,9,
45 18,5,0,1,10,
46 17,4,3,2,11,
47 16,15,14,13,12,
48};
49
50// clang-format on
51
52bool is_blank(void) {
53 for (uint8_t y = 0; y < 5; y++) {
54 for (uint8_t x = 0; x < 5; x++) {
55 if (tiles[x][y]) {
56 return false;
57 }
58 }
59 }
60 return true;
61}
62
63void do_move(uint8_t x, uint8_t y) {
64 tiles[x][y] ^= true;
65 if (x > 0) {
66 tiles[x - 1][y] ^= true;
67 }
68 if (y > 0) {
69 tiles[x][y - 1] ^= true;
70 }
71 if (x < 4) {
72 tiles[x + 1][y] ^= true;
73 }
74 if (y < 4) {
75 tiles[x][y + 1] ^= true;
76 }
77}
78
79void refresh_leds(void) {
80 for (uint8_t y = 0; y < 5; y++) {
81 for (uint8_t x = 0; x < 5; x++) {
82 uint8_t tile = tiles[x][y];
83 uint8_t index = (y * 5) + x;
84 if (tile) {
85 setrgb(RGB_RED, &led[remap[index]]);
86 } else {
87 setrgb(RGB_WHITE, &led[remap[index]]);
88 }
89 }
90 }
91 rgblight_set();
92}
93
94uint8_t initial_moves = 1;
95
96void start_game(void) {
97 rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
98 srand(timer_read32());
99 while (true) {
100 for (uint8_t i = 0; i < initial_moves; i++) {
101 do_move(rand() % 5, rand() % 5);
102 }
103 if (!is_blank()) {
104 // Catch the "we picked the same location 2*N times" case
105 break;
106 }
107 }
108 refresh_leds();
109}
110
111void keyboard_post_init_user(void) {
112 rgblight_enable_noeeprom();
113 start_game();
114}
115
116bool won = false;
117
118bool process_record_user(uint16_t keycode, keyrecord_t *record) {
119 if (record->event.pressed) {
120 if (won) {
121 initial_moves++;
122 won = false;
123 start_game();
124 } else {
125 uint8_t x = record->event.key.col;
126 uint8_t y = record->event.key.row;
127 do_move(x, y);
128 if (is_blank()) {
129 rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
130 won = true;
131 }
132 }
133 }
134 refresh_leds();
135 return true;
136}
diff --git a/keyboards/winry/winry25tc/keymaps/lightsout/readme.md b/keyboards/winry/winry25tc/keymaps/lightsout/readme.md
new file mode 100644
index 0000000000..4271bff43f
--- /dev/null
+++ b/keyboards/winry/winry25tc/keymaps/lightsout/readme.md
@@ -0,0 +1,3 @@
1# Lights Out game
2
3Implements a "lights out" mode as per https://en.m.wikipedia.org/wiki/Lights_Out_(game) with a single move having been played on start. On completion of the game, the Rainbow Swirl pattern is displayed. If another key is then pressed, the game resets, with the initial number of moves incremented by one.
diff --git a/layouts/community/ortho_4x10/scotto/keymap.c b/layouts/community/ortho_4x10/scotto/keymap.c
new file mode 100644
index 0000000000..919764324b
--- /dev/null
+++ b/layouts/community/ortho_4x10/scotto/keymap.c
@@ -0,0 +1,74 @@
1/*
2Copyright 2023 Joe Scotto
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#include "scotto.h"
16
17#define LAYOUT_ortho_4x10_wrapper(...) LAYOUT_ortho_4x10(__VA_ARGS__)
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT_ortho_4x10_wrapper(
21 _________________KEYMAP1__________________,
22 _________________KEYMAP2__________________,
23 _________________KEYMAP3a_________________,
24 KC_NO, KC_NO, _______THUMB6_1_______, KC_NO, KC_NO
25 ),
26 [1] = LAYOUT_ortho_4x10_wrapper(
27 ______________SYM_MEDIA_NAV1______________,
28 ______________SYM_MEDIA_NAV2______________,
29 ______________SYM_MEDIA_NAV3______________,
30 KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
31 ),
32 [2] = LAYOUT_ortho_4x10_wrapper(
33 _________________NUM_SYM1_________________,
34 _________________NUM_SYM2_________________,
35 _________________NUM_SYM3a________________,
36 KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
37 ),
38 [3] = LAYOUT_ortho_4x10_wrapper(
39 ________________FUNC_SYS1a________________,
40 ________________FUNC_SYS2_________________,
41 ________________FUNC_SYS3_________________,
42 KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
43 ),
44 [4] = LAYOUT_ortho_4x10_wrapper(
45 _________________KEYMAP1__________________,
46 _________________KEYMAP2__________________,
47 _________________KEYMAP3a_________________,
48 KC_NO, KC_NO, _______THUMB6_4_______, KC_NO, KC_NO
49 ),
50 [5] = LAYOUT_ortho_4x10_wrapper(
51 _________________KEYMAP1__________________,
52 _________________KEYMAP2__________________,
53 _________________KEYMAP3b_________________,
54 KC_NO, KC_NO, _______THUMB6_5_______, KC_NO, KC_NO
55 ),
56 [6] = LAYOUT_ortho_4x10_wrapper(
57 ______________SYM_MEDIA_NAV1______________,
58 ______________SYM_MEDIA_NAV2______________,
59 ______________SYM_MEDIA_NAV3______________,
60 KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
61 ),
62 [7] = LAYOUT_ortho_4x10_wrapper(
63 _________________NUM_SYM1_________________,
64 _________________NUM_SYM2_________________,
65 _________________NUM_SYM3b________________,
66 KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
67 ),
68 [8] = LAYOUT_ortho_4x10_wrapper(
69 ________________FUNC_SYS1b________________,
70 ________________FUNC_SYS2_________________,
71 ________________FUNC_SYS3_________________,
72 KC_NO, KC_NO, _____THUMB6_TRNS______, KC_NO, KC_NO
73 )
74};
diff --git a/layouts/community/split_3x5_2/scotto/keymap.c b/layouts/community/split_3x5_2/scotto/keymap.c
new file mode 100644
index 0000000000..fcba0f483b
--- /dev/null
+++ b/layouts/community/split_3x5_2/scotto/keymap.c
@@ -0,0 +1,78 @@
1/*
2Copyright 2023 Joe Scotto
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include QMK_KEYBOARD_H
19#include "scotto.h"
20
21#define LAYOUT_split_3x5_2_wrapper(...) LAYOUT_split_3x5_2(__VA_ARGS__)
22
23const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
24 [0] = LAYOUT_split_3x5_2_wrapper(
25 _________________KEYMAP1__________________,
26 _________________KEYMAP2__________________,
27 _________________KEYMAP3a_________________,
28 _______THUMB4_1_______
29 ),
30 [1] = LAYOUT_split_3x5_2_wrapper(
31 ______________SYM_MEDIA_NAV1______________,
32 ______________SYM_MEDIA_NAV2______________,
33 ______________SYM_MEDIA_NAV3______________,
34 _____THUMB4_TRNS______
35 ),
36 [2] = LAYOUT_split_3x5_2_wrapper(
37 _________________NUM_SYM1_________________,
38 _________________NUM_SYM2_________________,
39 _________________NUM_SYM3a________________,
40 _____THUMB4_TRNS______
41 ),
42 [3] = LAYOUT_split_3x5_2_wrapper(
43 ________________FUNC_SYS1a________________,
44 ________________FUNC_SYS2_________________,
45 ________________FUNC_SYS3_________________,
46 _____THUMB4_TRNS______
47 ),
48 [4] = LAYOUT_split_3x5_2_wrapper(
49 _________________KEYMAP1__________________,
50 _________________KEYMAP2__________________,
51 _________________KEYMAP3a_________________,
52 _______THUMB4_4_______
53 ),
54 [5] = LAYOUT_split_3x5_2_wrapper(
55 _________________KEYMAP1__________________,
56 _________________KEYMAP2__________________,
57 _________________KEYMAP3b_________________,
58 _______THUMB4_5_______
59 ),
60 [6] = LAYOUT_split_3x5_2_wrapper(
61 ______________SYM_MEDIA_NAV1______________,
62 ______________SYM_MEDIA_NAV2______________,
63 ______________SYM_MEDIA_NAV3______________,
64 _____THUMB4_TRNS______
65 ),
66 [7] = LAYOUT_split_3x5_2_wrapper(
67 _________________NUM_SYM1_________________,
68 _________________NUM_SYM2_________________,
69 _________________NUM_SYM3b________________,
70 _____THUMB4_TRNS______
71 ),
72 [8] = LAYOUT_split_3x5_2_wrapper(
73 ________________FUNC_SYS1b________________,
74 ________________FUNC_SYS2_________________,
75 ________________FUNC_SYS3_________________,
76 _____THUMB4_TRNS______
77 )
78};
diff --git a/layouts/community/split_3x5_3/scotto/keymap.c b/layouts/community/split_3x5_3/scotto/keymap.c
new file mode 100644
index 0000000000..b0d4d9a038
--- /dev/null
+++ b/layouts/community/split_3x5_3/scotto/keymap.c
@@ -0,0 +1,75 @@
1/*
2Copyright 2023 Joe Scotto
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#include QMK_KEYBOARD_H
16#include "scotto.h"
17
18#define LAYOUT_split_3x5_3_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__)
19
20const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
21 [0] = LAYOUT_split_3x5_3_wrapper(
22 _________________KEYMAP1__________________,
23 _________________KEYMAP2__________________,
24 _________________KEYMAP3a_________________,
25 _______THUMB6_1_______
26 ),
27 [1] = LAYOUT_split_3x5_3_wrapper(
28 ______________SYM_MEDIA_NAV1______________,
29 ______________SYM_MEDIA_NAV2______________,
30 ______________SYM_MEDIA_NAV3______________,
31 _____THUMB6_TRNS______
32 ),
33 [2] = LAYOUT_split_3x5_3_wrapper(
34 _________________NUM_SYM1_________________,
35 _________________NUM_SYM2_________________,
36 _________________NUM_SYM3a________________,
37 _____THUMB6_TRNS______
38 ),
39 [3] = LAYOUT_split_3x5_3_wrapper(
40 ________________FUNC_SYS1a________________,
41 ________________FUNC_SYS2_________________,
42 ________________FUNC_SYS3_________________,
43 _____THUMB6_TRNS______
44 ),
45 [4] = LAYOUT_split_3x5_3_wrapper(
46 _________________KEYMAP1__________________,
47 _________________KEYMAP2__________________,
48 _________________KEYMAP3a_________________,
49 _______THUMB6_4_______
50 ),
51 [5] = LAYOUT_split_3x5_3_wrapper(
52 _________________KEYMAP1__________________,
53 _________________KEYMAP2__________________,
54 _________________KEYMAP3b_________________,
55 _______THUMB6_5_______
56 ),
57 [6] = LAYOUT_split_3x5_3_wrapper(
58 ______________SYM_MEDIA_NAV1______________,
59 ______________SYM_MEDIA_NAV2______________,
60 ______________SYM_MEDIA_NAV3______________,
61 _____THUMB6_TRNS______
62 ),
63 [7] = LAYOUT_split_3x5_3_wrapper(
64 _________________NUM_SYM1_________________,
65 _________________NUM_SYM2_________________,
66 _________________NUM_SYM3b________________,
67 _____THUMB6_TRNS______
68 ),
69 [8] = LAYOUT_split_3x5_3_wrapper(
70 ________________FUNC_SYS1b________________,
71 ________________FUNC_SYS2_________________,
72 ________________FUNC_SYS3_________________,
73 _____THUMB6_TRNS______
74 )
75};
diff --git a/layouts/default/60_jis/default_60_jis/keymap.c b/layouts/default/60_jis/default_60_jis/keymap.c
new file mode 100644
index 0000000000..a35e3f0f79
--- /dev/null
+++ b/layouts/default/60_jis/default_60_jis/keymap.c
@@ -0,0 +1,27 @@
1// Copyright 2023 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /*
8 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
9 * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│
10 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
11 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │
12 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
13 * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ] │ │
14 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
15 * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │
16 * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤
17 * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl│
18 * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘
19 */
20 [0] = LAYOUT_60_jis(
21 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC,
22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
23 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
24 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT,
25 KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL
26 )
27};
diff --git a/layouts/default/60_jis/info.json b/layouts/default/60_jis/info.json
new file mode 100644
index 0000000000..56972148bd
--- /dev/null
+++ b/layouts/default/60_jis/info.json
@@ -0,0 +1,80 @@
1{
2 "keyboard_name": "60% JIS layout",
3 "url": "",
4 "maintainer": "qmk",
5 "layouts": {
6 "LAYOUT_60_jis": {
7 "layout": [
8 {"x": 0, "y": 0},
9 {"x": 1, "y": 0},
10 {"x": 2, "y": 0},
11 {"x": 3, "y": 0},
12 {"x": 4, "y": 0},
13 {"x": 5, "y": 0},
14 {"x": 6, "y": 0},
15 {"x": 7, "y": 0},
16 {"x": 8, "y": 0},
17 {"x": 9, "y": 0},
18 {"x": 10, "y": 0},
19 {"x": 11, "y": 0},
20 {"x": 12, "y": 0},
21 {"x": 13, "y": 0},
22 {"x": 14, "y": 0},
23
24 {"x": 0, "y": 1, "w": 1.5},
25 {"x": 1.5, "y": 1},
26 {"x": 2.5, "y": 1},
27 {"x": 3.5, "y": 1},
28 {"x": 4.5, "y": 1},
29 {"x": 5.5, "y": 1},
30 {"x": 6.5, "y": 1},
31 {"x": 7.5, "y": 1},
32 {"x": 8.5, "y": 1},
33 {"x": 9.5, "y": 1},
34 {"x": 10.5, "y": 1},
35 {"x": 11.5, "y": 1},
36 {"x": 12.5, "y": 1},
37 {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
38
39 {"x": 0, "y": 2, "w": 1.75},
40 {"x": 1.75, "y": 2},
41 {"x": 2.75, "y": 2},
42 {"x": 3.75, "y": 2},
43 {"x": 4.75, "y": 2},
44 {"x": 5.75, "y": 2},
45 {"x": 6.75, "y": 2},
46 {"x": 7.75, "y": 2},
47 {"x": 8.75, "y": 2},
48 {"x": 9.75, "y": 2},
49 {"x": 10.75, "y": 2},
50 {"x": 11.75, "y": 2},
51 {"x": 12.75, "y": 2},
52
53 {"x": 0, "y": 3, "w": 2.25},
54 {"x": 2.25, "y": 3},
55 {"x": 3.25, "y": 3},
56 {"x": 4.25, "y": 3},
57 {"x": 5.25, "y": 3},
58 {"x": 6.25, "y": 3},
59 {"x": 7.25, "y": 3},
60 {"x": 8.25, "y": 3},
61 {"x": 9.25, "y": 3},
62 {"x": 10.25, "y": 3},
63 {"x": 11.25, "y": 3},
64 {"x": 12.25, "y": 3},
65 {"x": 13.25, "y": 3, "w": 1.75},
66
67 {"x": 0, "y": 4, "w": 1.25},
68 {"x": 1.25, "y": 4, "w": 1.25},
69 {"x": 2.5, "y": 4, "w": 1.25},
70 {"x": 3.75, "y": 4, "w": 1.25},
71 {"x": 5, "y": 4, "w": 3.75},
72 {"x": 8.75, "y": 4, "w": 1.25},
73 {"x": 10, "y": 4, "w": 1.25},
74 {"x": 11.25, "y": 4, "w": 1.25},
75 {"x": 12.5, "y": 4, "w": 1.25},
76 {"x": 13.75, "y": 4, "w": 1.25}
77 ]
78 }
79 }
80}
diff --git a/layouts/default/60_jis/layout.json b/layouts/default/60_jis/layout.json
new file mode 100644
index 0000000000..a93cc2bbfd
--- /dev/null
+++ b/layouts/default/60_jis/layout.json
@@ -0,0 +1,5 @@
1[{a:7},"","","","","","","","","","","","","","",""],
2[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},""],
3[{w:1.75},"","","","","","","","","","","","",""],
4[{w:2.25},"","","","","","","","","","","","",{w:1.75},""],
5[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},""]
diff --git a/layouts/default/60_jis/readme.md b/layouts/default/60_jis/readme.md
new file mode 100644
index 0000000000..236abdfa07
--- /dev/null
+++ b/layouts/default/60_jis/readme.md
@@ -0,0 +1,3 @@
1# 60_jis
2
3 LAYOUT_60_jis
diff --git a/layouts/default/64_ansi/default_64_ansi/keymap.c b/layouts/default/64_ansi/default_64_ansi/keymap.c
index fdbb44117f..ede754b2ca 100644
--- a/layouts/default/64_ansi/default_64_ansi/keymap.c
+++ b/layouts/default/64_ansi/default_64_ansi/keymap.c
@@ -4,6 +4,19 @@
4#include QMK_KEYBOARD_H 4#include QMK_KEYBOARD_H
5 5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /*
8 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
9 * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
10 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
11 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
12 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
13 * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
14 * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
15 * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │mo1│
16 * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
17 * │Ctrl│GUI │Alt │ │Alt│Ctl│ ← │ ↓ │ → │
18 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
19 */
7 [0] = LAYOUT_64_ansi( 20 [0] = LAYOUT_64_ansi(
8 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 21 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
9 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, 22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
@@ -11,6 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), 24 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
12 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT 25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
13 ), 26 ),
27 /*
28 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
29 * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
30 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
31 * │ │ │ │ │ │ │ │ │ │ │ │PSn│SLk│Pause│
32 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
33 * │ │ │ │ │ │ │ │ │ │ │ │ │ │
34 * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
35 * │ │ │ │ │ │ │ │ │ │ │ │ │PgU│ │
36 * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
37 * │ │ │ │ │ │mo2│Hom│PgD│End│
38 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
39 */
14 [1] = LAYOUT_64_ansi( 40 [1] = LAYOUT_64_ansi(
15 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, 41 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
16 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, 42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS,
@@ -18,9 +44,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, 44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
19 _______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END 45 _______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END
20 ), 46 ),
47 /*
48 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
49 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
50 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
51 * │ │ │ │ │QBt│ │ │ │ │ │ │ │ │ │
52 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
53 * │ │ │ │ │ │ │ │ │ │ │ │ │ │
54 * ├──────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┬───┤
55 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
56 * ├────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
57 * │ │ │ │ │ │ │ │ │ │
58 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
59 */
21 [2] = LAYOUT_64_ansi( 60 [2] = LAYOUT_64_ansi(
22 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 61 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
23 _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, 62 _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
24 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 63 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
25 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 64 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
26 _______, _______, _______, _______, _______, _______, _______, _______, _______ 65 _______, _______, _______, _______, _______, _______, _______, _______, _______
diff --git a/layouts/default/64_iso/default_64_iso/keymap.c b/layouts/default/64_iso/default_64_iso/keymap.c
index 1dfcdd3eb7..a28e652024 100644
--- a/layouts/default/64_iso/default_64_iso/keymap.c
+++ b/layouts/default/64_iso/default_64_iso/keymap.c
@@ -4,6 +4,19 @@
4#include QMK_KEYBOARD_H 4#include QMK_KEYBOARD_H
5 5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /*
8 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
9 * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
10 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
11 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
12 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
13 * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
14 * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
15 * │Sft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │mo1│
16 * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
17 * │Ctrl│GUI │Alt │ │Alt│Ctl│ ← │ ↓ │ → │
18 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
19 */
7 [0] = LAYOUT_64_iso( 20 [0] = LAYOUT_64_iso(
8 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 21 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
9 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, 22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
@@ -11,6 +24,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), 24 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
12 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT 25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
13 ), 26 ),
27 /*
28 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
29 * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
30 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
31 * │ │ │ │ │ │ │ │ │ │ │ │PSn│SLk│ │
32 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
33 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
34 * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
35 * │ │ │ │ │ │ │ │ │ │ │ │ │ │PgU│ │
36 * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
37 * │ │ │ │ │ │mo2│Hom│PgD│End│
38 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
39 */
14 [1] = LAYOUT_64_iso( 40 [1] = LAYOUT_64_iso(
15 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, 41 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
16 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, 42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL,
@@ -18,9 +44,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, 44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
19 _______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END 45 _______, _______, _______, _______, _______, MO(2), KC_HOME, KC_PGDN, KC_END
20 ), 46 ),
47 /*
48 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
49 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
50 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
51 * │ │ │ │ │QBt│ │ │ │ │ │ │ │ │ │
52 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
53 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
54 * ├───┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
55 * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
56 * ├───┴┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┤
57 * │ │ │ │ │ │ │ │ │ │
58 * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
59 */
21 [2] = LAYOUT_64_iso( 60 [2] = LAYOUT_64_iso(
22 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 61 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
23 _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, 62 _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______,
24 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 63 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
25 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 64 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
26 _______, _______, _______, _______, _______, _______, _______, _______, _______ 65 _______, _______, _______, _______, _______, _______, _______, _______, _______
diff --git a/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c b/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c
new file mode 100644
index 0000000000..068bd5024b
--- /dev/null
+++ b/layouts/default/fullsize_jis/default_fullsize_jis/keymap.c
@@ -0,0 +1,32 @@
1// Copyright 2023 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /*
8 * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
9 * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
10 * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
11 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
12 * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
13 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
14 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │ │Del│End│PgD│ │ 7 │ 8 │ 9 │ │
15 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘ ├───┼───┼───┤ + │
16 * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │ │ 4 │ 5 │ 6 │ │
17 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐ ├───┼───┼───┼───┤
18 * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │ │ 1 │ 2 │ 3 │ │
19 * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┼───┴┬──┴─┬─┴─┬─┴─┬─┴─┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤Ent│
20 * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt│GUI│App│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │ │
21 * └────┴────┴────┴────┴────────────┴────┴────┴───┴───┴───┴────┘ └───┴───┴───┘ └───────┴───┴───┘
22 */
23 [0] = LAYOUT_fullsize_jis(
24 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
25
26 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
27 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
28 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
29 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
30 KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
31 )
32};
diff --git a/layouts/default/fullsize_jis/info.json b/layouts/default/fullsize_jis/info.json
new file mode 100644
index 0000000000..8acd5f2fe3
--- /dev/null
+++ b/layouts/default/fullsize_jis/info.json
@@ -0,0 +1,125 @@
1{
2 "keyboard_name": "Fullsize JIS layout",
3 "url": "",
4 "maintainer": "qmk",
5 "layouts": {
6 "LAYOUT_fullsize_jis": {
7 "layout": [
8 {"x": 0, "y": 0},
9 {"x": 2, "y": 0},
10 {"x": 3, "y": 0},
11 {"x": 4, "y": 0},
12 {"x": 5, "y": 0},
13 {"x": 6.5, "y": 0},
14 {"x": 7.5, "y": 0},
15 {"x": 8.5, "y": 0},
16 {"x": 9.5, "y": 0},
17 {"x": 11, "y": 0},
18 {"x": 12, "y": 0},
19 {"x": 13, "y": 0},
20 {"x": 14, "y": 0},
21 {"x": 15.25, "y": 0},
22 {"x": 16.25, "y": 0},
23 {"x": 17.25, "y": 0},
24
25 {"x": 0, "y": 1.25},
26 {"x": 1, "y": 1.25},
27 {"x": 2, "y": 1.25},
28 {"x": 3, "y": 1.25},
29 {"x": 4, "y": 1.25},
30 {"x": 5, "y": 1.25},
31 {"x": 6, "y": 1.25},
32 {"x": 7, "y": 1.25},
33 {"x": 8, "y": 1.25},
34 {"x": 9, "y": 1.25},
35 {"x": 10, "y": 1.25},
36 {"x": 11, "y": 1.25},
37 {"x": 12, "y": 1.25},
38 {"x": 13, "y": 1.25},
39 {"x": 14, "y": 1.25},
40 {"x": 15.25, "y": 1.25},
41 {"x": 16.25, "y": 1.25},
42 {"x": 17.25, "y": 1.25},
43 {"x": 18.5, "y": 1.25},
44 {"x": 19.5, "y": 1.25},
45 {"x": 20.5, "y": 1.25},
46 {"x": 21.5, "y": 1.25},
47 {"x": 0, "y": 2.25, "w": 1.5},
48
49 {"x": 1.5, "y": 2.25},
50 {"x": 2.5, "y": 2.25},
51 {"x": 3.5, "y": 2.25},
52 {"x": 4.5, "y": 2.25},
53 {"x": 5.5, "y": 2.25},
54 {"x": 6.5, "y": 2.25},
55 {"x": 7.5, "y": 2.25},
56 {"x": 8.5, "y": 2.25},
57 {"x": 9.5, "y": 2.25},
58 {"x": 10.5, "y": 2.25},
59 {"x": 11.5, "y": 2.25},
60 {"x": 12.5, "y": 2.25},
61 {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
62 {"x": 15.25, "y": 2.25},
63 {"x": 16.25, "y": 2.25},
64 {"x": 17.25, "y": 2.25},
65 {"x": 18.5, "y": 2.25},
66 {"x": 19.5, "y": 2.25},
67 {"x": 20.5, "y": 2.25},
68 {"x": 21.5, "y": 2.25, "h": 2},
69
70 {"x": 0, "y": 3.25, "w": 1.75},
71 {"x": 1.75, "y": 3.25},
72 {"x": 2.75, "y": 3.25},
73 {"x": 3.75, "y": 3.25},
74 {"x": 4.75, "y": 3.25},
75 {"x": 5.75, "y": 3.25},
76 {"x": 6.75, "y": 3.25},
77 {"x": 7.75, "y": 3.25},
78 {"x": 8.75, "y": 3.25},
79 {"x": 9.75, "y": 3.25},
80 {"x": 10.75, "y": 3.25},
81 {"x": 11.75, "y": 3.25},
82 {"x": 12.75, "y": 3.25},
83 {"x": 18.5, "y": 3.25},
84 {"x": 19.5, "y": 3.25},
85 {"x": 20.5, "y": 3.25},
86
87 {"x": 0, "y": 4.25, "w": 2.25},
88 {"x": 2.25, "y": 4.25},
89 {"x": 3.25, "y": 4.25},
90 {"x": 4.25, "y": 4.25},
91 {"x": 5.25, "y": 4.25},
92 {"x": 6.25, "y": 4.25},
93 {"x": 7.25, "y": 4.25},
94 {"x": 8.25, "y": 4.25},
95 {"x": 9.25, "y": 4.25},
96 {"x": 10.25, "y": 4.25},
97 {"x": 11.25, "y": 4.25},
98 {"x": 12.25, "y": 4.25},
99 {"x": 13.25, "y": 4.25, "w": 1.75},
100 {"x": 16.25, "y": 4.25},
101 {"x": 18.5, "y": 4.25},
102 {"x": 19.5, "y": 4.25},
103 {"x": 20.5, "y": 4.25},
104 {"x": 21.5, "y": 4.25, "h": 2},
105
106 {"x": 0, "y": 5.25, "w": 1.25},
107 {"x": 1.25, "y": 5.25, "w": 1.25},
108 {"x": 2.5, "y": 5.25, "w": 1.25},
109 {"x": 3.75, "y": 5.25, "w": 1.25},
110 {"x": 5, "y": 5.25, "w": 3.25},
111 {"x": 8.25, "y": 5.25, "w": 1.25},
112 {"x": 9.5, "y": 5.25, "w": 1.25},
113 {"x": 10.75, "y": 5.25},
114 {"x": 11.75, "y": 5.25},
115 {"x": 12.75, "y": 5.25},
116 {"x": 13.75, "y": 5.25, "w": 1.25},
117 {"x": 15.25, "y": 5.25},
118 {"x": 16.25, "y": 5.25},
119 {"x": 17.25, "y": 5.25},
120 {"x": 18.5, "y": 5.25, "w": 2},
121 {"x": 20.5, "y": 5.25}
122 ]
123 }
124 }
125}
diff --git a/layouts/default/fullsize_jis/layout.json b/layouts/default/fullsize_jis/layout.json
new file mode 100644
index 0000000000..e8caad8878
--- /dev/null
+++ b/layouts/default/fullsize_jis/layout.json
@@ -0,0 +1,6 @@
1[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
2[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","","",{x:0.25},"","","",""],
3[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","","",{x:0.25},"","","",{h:2},""],
4[{w:1.75},"","","","","","","","","","","","","",{x:4.75},"","",""],
5[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},"",{x:1.25},"","","",{h:2},""],
6[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.25},"",{w:1.25},"",{w:1.25},"","","","",{w:1.25},"",{x:0.25},"","","",{x:0.25,w:2},"",""]
diff --git a/layouts/default/fullsize_jis/readme.md b/layouts/default/fullsize_jis/readme.md
new file mode 100644
index 0000000000..9385325157
--- /dev/null
+++ b/layouts/default/fullsize_jis/readme.md
@@ -0,0 +1,3 @@
1# fullsize_jis
2
3 LAYOUT_fullsize_jis
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index a728d93d1a..439613911a 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -155,6 +155,21 @@ LAYOUT_60_iso_tsangan
155``` 155```
156 156
157``` 157```
158LAYOUT_60_jis
159┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
160│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
161├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
162│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
163├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
164│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
165├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
166│ │ │ │ │ │ │ │ │ │ │ │ │ │
167├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤
168│ │ │ │ │ │ │ │ │ │ │
169└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘
170```
171
172```
158LAYOUT_60_tsangan_hhkb 173LAYOUT_60_tsangan_hhkb
159┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ 174┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
160│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 175│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
@@ -624,6 +639,24 @@ LAYOUT_tkl_iso_tsangan_split_bs_rshift
624``` 639```
625 640
626``` 641```
642LAYOUT_tkl_jis
643┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
644│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
645└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
646┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
647│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
648├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
649│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
650├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
651│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
652├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
653│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
654├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤ ┌───┼───┼───┐
655│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
656└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘ └───┴───┴───┘
657```
658
659```
627LAYOUT_tkl_f13_ansi 660LAYOUT_tkl_f13_ansi
628┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ 661┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
629│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │ 662│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
@@ -768,6 +801,25 @@ LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift
768``` 801```
769 802
770``` 803```
804LAYOUT_tkl_f13_jis
805┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
806│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ ││ │ │ │
807└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
808┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
809│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
810├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
811│ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
812├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │└───┴───┴───┘
813│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
814├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
815│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
816├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤┌───┼───┼───┐
817│ │ │ │ │ │ │ │ │ │ ││ │ │ │
818└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘└───┴───┴───┘
819
820```
821
822```
771LAYOUT_tkl_nofrow_ansi 823LAYOUT_tkl_nofrow_ansi
772┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ 824┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
773│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 825│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
@@ -872,6 +924,23 @@ LAYOUT_fullsize_iso
872└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘ 924└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
873``` 925```
874 926
927```
928LAYOUT_fullsize_jis
929┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
930│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
931└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
932┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
933│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
934├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
935│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
936├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘ ├───┼───┼───┤ │
937│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
938├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐ ├───┼───┼───┼───┤
939│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
940├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┼───┴┬──┴─┬─┴─┬─┴─┬─┴─┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ │
941│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
942└────┴────┴────┴────┴────────────┴────┴────┴───┴───┴───┴────┘ └───┴───┴───┘ └───────┴───┴───┘
943```
875 944
876### Split Layouts 945### Split Layouts
877 946
diff --git a/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymaps.c b/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymaps.c
new file mode 100644
index 0000000000..ec5c35cb54
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/default_tkl_f13_jis/keymaps.c
@@ -0,0 +1,32 @@
1// Copyright 2023 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /*
8 * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
9 * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13││PSc│Scr│Pse│
10 * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
11 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
12 * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp││Ins│Hom│PgU│
13 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
14 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ ││Del│End│PgD│
15 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│└───┴───┴───┘
16 * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │
17 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
18 * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │
19 * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤┌───┼───┼───┐
20 * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl││ ← │ ↓ │ → │
21 * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘└───┴───┴───┘
22 */
23 [0] = LAYOUT_tkl_f13_jis(
24 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
25
26 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
27 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
28 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
29 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
30 KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
31 )
32};
diff --git a/layouts/default/tkl_f13_jis/info.json b/layouts/default/tkl_f13_jis/info.json
new file mode 100644
index 0000000000..97f5bd3880
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/info.json
@@ -0,0 +1,108 @@
1{
2 "keyboard_name": "Tenkeyless JIS layout with F13 key",
3 "url": "",
4 "maintainer": "qmk",
5 "layouts": {
6 "LAYOUT_tkl_f13_jis": {
7 "layout": [
8 {"x": 0, "y": 0},
9 {"x": 1.25, "y": 0},
10 {"x": 2.25, "y": 0},
11 {"x": 3.25, "y": 0},
12 {"x": 4.25, "y": 0},
13 {"x": 5.5, "y": 0},
14 {"x": 6.5, "y": 0},
15 {"x": 7.5, "y": 0},
16 {"x": 8.5, "y": 0},
17 {"x": 9.75, "y": 0},
18 {"x": 10.75, "y": 0},
19 {"x": 11.75, "y": 0},
20 {"x": 12.75, "y": 0},
21 {"x": 14, "y": 0},
22 {"x": 15.25, "y": 0},
23 {"x": 16.25, "y": 0},
24 {"x": 17.25, "y": 0},
25
26 {"x": 0, "y": 1.25},
27 {"x": 1, "y": 1.25},
28 {"x": 2, "y": 1.25},
29 {"x": 3, "y": 1.25},
30 {"x": 4, "y": 1.25},
31 {"x": 5, "y": 1.25},
32 {"x": 6, "y": 1.25},
33 {"x": 7, "y": 1.25},
34 {"x": 8, "y": 1.25},
35 {"x": 9, "y": 1.25},
36 {"x": 10, "y": 1.25},
37 {"x": 11, "y": 1.25},
38 {"x": 12, "y": 1.25},
39 {"x": 13, "y": 1.25},
40 {"x": 14, "y": 1.25},
41 {"x": 15.25, "y": 1.25},
42 {"x": 16.25, "y": 1.25},
43 {"x": 17.25, "y": 1.25},
44 {"x": 0, "y": 2.25, "w": 1.5},
45
46 {"x": 1.5, "y": 2.25},
47 {"x": 2.5, "y": 2.25},
48 {"x": 3.5, "y": 2.25},
49 {"x": 4.5, "y": 2.25},
50 {"x": 5.5, "y": 2.25},
51 {"x": 6.5, "y": 2.25},
52 {"x": 7.5, "y": 2.25},
53 {"x": 8.5, "y": 2.25},
54 {"x": 9.5, "y": 2.25},
55 {"x": 10.5, "y": 2.25},
56 {"x": 11.5, "y": 2.25},
57 {"x": 12.5, "y": 2.25},
58 {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
59 {"x": 15.25, "y": 2.25},
60 {"x": 16.25, "y": 2.25},
61 {"x": 17.25, "y": 2.25},
62
63 {"x": 0, "y": 3.25, "w": 1.75},
64 {"x": 1.75, "y": 3.25},
65 {"x": 2.75, "y": 3.25},
66 {"x": 3.75, "y": 3.25},
67 {"x": 4.75, "y": 3.25},
68 {"x": 5.75, "y": 3.25},
69 {"x": 6.75, "y": 3.25},
70 {"x": 7.75, "y": 3.25},
71 {"x": 8.75, "y": 3.25},
72 {"x": 9.75, "y": 3.25},
73 {"x": 10.75, "y": 3.25},
74 {"x": 11.75, "y": 3.25},
75 {"x": 12.75, "y": 3.25},
76
77 {"x": 0, "y": 4.25, "w": 2.25},
78 {"x": 2.25, "y": 4.25},
79 {"x": 3.25, "y": 4.25},
80 {"x": 4.25, "y": 4.25},
81 {"x": 5.25, "y": 4.25},
82 {"x": 6.25, "y": 4.25},
83 {"x": 7.25, "y": 4.25},
84 {"x": 8.25, "y": 4.25},
85 {"x": 9.25, "y": 4.25},
86 {"x": 10.25, "y": 4.25},
87 {"x": 11.25, "y": 4.25},
88 {"x": 12.25, "y": 4.25},
89 {"x": 13.25, "y": 4.25, "w": 1.75},
90 {"x": 16.25, "y": 4.25},
91
92 {"x": 0, "y": 5.25, "w": 1.25},
93 {"x": 1.25, "y": 5.25, "w": 1.25},
94 {"x": 2.5, "y": 5.25, "w": 1.25},
95 {"x": 3.75, "y": 5.25, "w": 1.25},
96 {"x": 5, "y": 5.25, "w": 3.75},
97 {"x": 8.75, "y": 5.25, "w": 1.25},
98 {"x": 10, "y": 5.25, "w": 1.25},
99 {"x": 11.25, "y": 5.25, "w": 1.25},
100 {"x": 12.5, "y": 5.25, "w": 1.25},
101 {"x": 13.75, "y": 5.25, "w": 1.25},
102 {"x": 15.25, "y": 5.25},
103 {"x": 16.25, "y": 5.25},
104 {"x": 17.25, "y": 5.25}
105 ]
106 }
107 }
108}
diff --git a/layouts/default/tkl_f13_jis/layout.json b/layouts/default/tkl_f13_jis/layout.json
new file mode 100644
index 0000000000..8b20546b74
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/layout.json
@@ -0,0 +1,6 @@
1[{a:7},"",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"",{x:0.25},"","",""],
2[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
3[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
4[{w:1.75},"","","","","","","","","","","","",""],
5[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},""],
6[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_f13_jis/readme.md b/layouts/default/tkl_f13_jis/readme.md
new file mode 100644
index 0000000000..cc49ffd830
--- /dev/null
+++ b/layouts/default/tkl_f13_jis/readme.md
@@ -0,0 +1,3 @@
1# tkl_f13_jis
2
3 LAYOUT_tkl_f13_jis
diff --git a/layouts/default/tkl_jis/default_tkl_jis/keymap.c b/layouts/default/tkl_jis/default_tkl_jis/keymap.c
new file mode 100644
index 0000000000..c60165afcb
--- /dev/null
+++ b/layouts/default/tkl_jis/default_tkl_jis/keymap.c
@@ -0,0 +1,32 @@
1// Copyright 2023 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 /*
8 * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
9 * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
10 * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
11 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
12 * │ZHK│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ^ │ ¥ │Bsp│ │Ins│Hom│PgU│
13 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
14 * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ @ │ [ │ │ │Del│End│PgD│
15 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘
16 * │ Eisu │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ : │ ] │ │
17 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
18 * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ \ │ Shft │ │ ↑ │
19 * ├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤ ┌───┼───┼───┐
20 * │Ctrl│GUI │Alt │Mhen│ Space │Henk│Kana│Alt │GUI │Ctrl│ │ ← │ ↓ │ → │
21 * └────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘ └───┴───┴───┘
22 */
23 [0] = LAYOUT_tkl_jis(
24 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
25
26 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INT3, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
27 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
28 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
29 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_RSFT, KC_UP,
30 KC_LCTL, KC_LGUI, KC_LALT, KC_INT5, KC_SPC, KC_INT4, KC_INT2, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
31 )
32};
diff --git a/layouts/default/tkl_jis/info.json b/layouts/default/tkl_jis/info.json
new file mode 100644
index 0000000000..513852193a
--- /dev/null
+++ b/layouts/default/tkl_jis/info.json
@@ -0,0 +1,107 @@
1{
2 "keyboard_name": "Tenkeyless JIS layout",
3 "url": "",
4 "maintainer": "qmk",
5 "layouts": {
6 "LAYOUT_tkl_jis": {
7 "layout": [
8 {"x": 0, "y": 0},
9 {"x": 2, "y": 0},
10 {"x": 3, "y": 0},
11 {"x": 4, "y": 0},
12 {"x": 5, "y": 0},
13 {"x": 6.5, "y": 0},
14 {"x": 7.5, "y": 0},
15 {"x": 8.5, "y": 0},
16 {"x": 9.5, "y": 0},
17 {"x": 11, "y": 0},
18 {"x": 12, "y": 0},
19 {"x": 13, "y": 0},
20 {"x": 14, "y": 0},
21 {"x": 15.25, "y": 0},
22 {"x": 16.25, "y": 0},
23 {"x": 17.25, "y": 0},
24
25 {"x": 0, "y": 1.25},
26 {"x": 1, "y": 1.25},
27 {"x": 2, "y": 1.25},
28 {"x": 3, "y": 1.25},
29 {"x": 4, "y": 1.25},
30 {"x": 5, "y": 1.25},
31 {"x": 6, "y": 1.25},
32 {"x": 7, "y": 1.25},
33 {"x": 8, "y": 1.25},
34 {"x": 9, "y": 1.25},
35 {"x": 10, "y": 1.25},
36 {"x": 11, "y": 1.25},
37 {"x": 12, "y": 1.25},
38 {"x": 13, "y": 1.25},
39 {"x": 14, "y": 1.25},
40 {"x": 15.25, "y": 1.25},
41 {"x": 16.25, "y": 1.25},
42 {"x": 17.25, "y": 1.25},
43 {"x": 0, "y": 2.25, "w": 1.5},
44
45 {"x": 1.5, "y": 2.25},
46 {"x": 2.5, "y": 2.25},
47 {"x": 3.5, "y": 2.25},
48 {"x": 4.5, "y": 2.25},
49 {"x": 5.5, "y": 2.25},
50 {"x": 6.5, "y": 2.25},
51 {"x": 7.5, "y": 2.25},
52 {"x": 8.5, "y": 2.25},
53 {"x": 9.5, "y": 2.25},
54 {"x": 10.5, "y": 2.25},
55 {"x": 11.5, "y": 2.25},
56 {"x": 12.5, "y": 2.25},
57 {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
58 {"x": 15.25, "y": 2.25},
59 {"x": 16.25, "y": 2.25},
60 {"x": 17.25, "y": 2.25},
61
62 {"x": 0, "y": 3.25, "w": 1.75},
63 {"x": 1.75, "y": 3.25},
64 {"x": 2.75, "y": 3.25},
65 {"x": 3.75, "y": 3.25},
66 {"x": 4.75, "y": 3.25},
67 {"x": 5.75, "y": 3.25},
68 {"x": 6.75, "y": 3.25},
69 {"x": 7.75, "y": 3.25},
70 {"x": 8.75, "y": 3.25},
71 {"x": 9.75, "y": 3.25},
72 {"x": 10.75, "y": 3.25},
73 {"x": 11.75, "y": 3.25},
74 {"x": 12.75, "y": 3.25},
75
76 {"x": 0, "y": 4.25, "w": 2.25},
77 {"x": 2.25, "y": 4.25},
78 {"x": 3.25, "y": 4.25},
79 {"x": 4.25, "y": 4.25},
80 {"x": 5.25, "y": 4.25},
81 {"x": 6.25, "y": 4.25},
82 {"x": 7.25, "y": 4.25},
83 {"x": 8.25, "y": 4.25},
84 {"x": 9.25, "y": 4.25},
85 {"x": 10.25, "y": 4.25},
86 {"x": 11.25, "y": 4.25},
87 {"x": 12.25, "y": 4.25},
88 {"x": 13.25, "y": 4.25, "w": 1.75},
89 {"x": 16.25, "y": 4.25},
90
91 {"x": 0, "y": 5.25, "w": 1.25},
92 {"x": 1.25, "y": 5.25, "w": 1.25},
93 {"x": 2.5, "y": 5.25, "w": 1.25},
94 {"x": 3.75, "y": 5.25, "w": 1.25},
95 {"x": 5, "y": 5.25, "w": 3.75},
96 {"x": 8.75, "y": 5.25, "w": 1.25},
97 {"x": 10, "y": 5.25, "w": 1.25},
98 {"x": 11.25, "y": 5.25, "w": 1.25},
99 {"x": 12.5, "y": 5.25, "w": 1.25},
100 {"x": 13.75, "y": 5.25, "w": 1.25},
101 {"x": 15.25, "y": 5.25},
102 {"x": 16.25, "y": 5.25},
103 {"x": 17.25, "y": 5.25}
104 ]
105 }
106 }
107}
diff --git a/layouts/default/tkl_jis/layout.json b/layouts/default/tkl_jis/layout.json
new file mode 100644
index 0000000000..c7a6833b75
--- /dev/null
+++ b/layouts/default/tkl_jis/layout.json
@@ -0,0 +1,6 @@
1[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
2[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
3[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
4[{w:1.75},"","","","","","","","","","","","",""],
5[{w:2.25},"","","","","","","","","","","","",{w:1.75},"",{x:1.25},""],
6[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:3.75},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_jis/readme.md b/layouts/default/tkl_jis/readme.md
new file mode 100644
index 0000000000..59505a1966
--- /dev/null
+++ b/layouts/default/tkl_jis/readme.md
@@ -0,0 +1,5 @@
1# tkl_jis
2
3 LAYOUT_tkl_jis
4
5A standard JIS TKL layout.
diff --git a/users/scotto/config.h b/users/scotto/config.h
new file mode 100644
index 0000000000..34fe069d6e
--- /dev/null
+++ b/users/scotto/config.h
@@ -0,0 +1,25 @@
1/*
2Copyright 2023 Joe Scotto
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#pragma once
16
17// config added when Tap Dance is enabled
18#ifdef TAP_DANCE_ENABLE
19# ifdef TAPPING_TERM
20# undef TAPPING_TERM
21# define TAPPING_TERM 135
22# endif
23# define TAPPING_TERM_PER_KEY
24# define PERMISSIVE_HOLD
25#endif
diff --git a/users/scotto/readme.md b/users/scotto/readme.md
new file mode 100644
index 0000000000..f7fdeb24c4
--- /dev/null
+++ b/users/scotto/readme.md
@@ -0,0 +1,17 @@
1# Scotto
2
3Applies to layouts:
4- LAYOUT_ortho_4x10
5- LAYOUT_split_3x5_2
6- LAYOUT_split_3x5_3
7
8### QWERTY
9
10Scotto's default functional layout is Colemak. To compile this layout in QWERTY (US English), append compile command with `KEYMAP=QWERTY` environment variable.
11```
12qmk compile -kb <keyboardName> -km scotto -e KEYMAP=QWERTY
13```
14Example for [Scotto34](/keyboards/scottokeebs/scotto34):
15```
16qmk compile -kb scottokeebs/scotto34 -km scotto -e KEYMAP=QWERTY
17```
diff --git a/users/scotto/rules.mk b/users/scotto/rules.mk
new file mode 100644
index 0000000000..50a0196675
--- /dev/null
+++ b/users/scotto/rules.mk
@@ -0,0 +1,11 @@
1SRC += scotto.c
2
3TAP_DANCE_ENABLE = yes
4
5ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
6 SRC += tap_dance.c
7endif
8
9ifneq ($(strip $(KEYMAP)),)
10 OPT_DEFS += -DKEYMAP_$(KEYMAP)
11endif
diff --git a/users/scotto/scotto.c b/users/scotto/scotto.c
new file mode 100644
index 0000000000..41520973c6
--- /dev/null
+++ b/users/scotto/scotto.c
@@ -0,0 +1,15 @@
1/*
2Copyright 2023 Joe Scotto
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#include "scotto.h"
diff --git a/users/scotto/scotto.h b/users/scotto/scotto.h
new file mode 100644
index 0000000000..023906852e
--- /dev/null
+++ b/users/scotto/scotto.h
@@ -0,0 +1,69 @@
1/*
2Copyright 2023 Joe Scotto
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#pragma once
16
17#include QMK_KEYBOARD_H
18
19#ifdef TAP_DANCE_ENABLE
20 #include "tap_dance.h"
21#endif
22
23// Assign rows of keycodes to a single def each
24#define __QWERTY1__ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P
25#define __QWERTY2__ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC
26#define __QWERTY3a_ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
27#define __QWERTY3b_ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
28
29#define __COLEMAK1__ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_BSPC
30#define __COLEMAK2__ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O
31#define __COLEMAK3a_ LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
32#define __COLEMAK3b_ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
33
34#define ______________SYM_MEDIA_NAV1______________ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL
35#define ______________SYM_MEDIA_NAV2______________ KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
36#define ______________SYM_MEDIA_NAV3______________ LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILD, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS)
37
38#define _________________NUM_SYM1_________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC
39#define _________________NUM_SYM2_________________ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0
40#define _________________NUM_SYM3a________________ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
41#define _________________NUM_SYM3b________________ KC_LSFT, KC_NO, KC_NO, KC_NO, MO(8), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH)
42
43#define ________________FUNC_SYS1a________________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(5), TO(4)
44#define ________________FUNC_SYS1b________________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(4), TO(5), TO(0)
45#define ________________FUNC_SYS2_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
46#define ________________FUNC_SYS3_________________ KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12
47
48#define _______THUMB6_1_______ TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI), KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT), TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI)
49#define _______THUMB6_4_______ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LALT, LCTL_T(KC_SPC), LT(6, KC_TAB), LT(7, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
50#define _______THUMB6_5_______ TD(TD_LALT_ESC_WINDOWS_EMOJI), KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT), TD(TD_LALT_ESC_WINDOWS_EMOJI)
51#define _____THUMB6_TRNS______ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
52
53#define _______THUMB4_1_______ TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI), LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
54#define _______THUMB4_4_______ TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI), LCTL_T(KC_SPC), LT(6, KC_TAB), LT(7, KC_ENT)
55#define _______THUMB4_5_______ KC_LCTL, KC_SPC, LT(6, KC_TAB), LT(7, KC_ENT)
56#define _____THUMB4_TRNS______ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
57
58// set functional layout
59#if defined (KEYMAP_QWERTY)
60 #define _________________KEYMAP1__________________ __QWERTY1__
61 #define _________________KEYMAP2__________________ __QWERTY2__
62 #define _________________KEYMAP3a_________________ __QWERTY3a_
63 #define _________________KEYMAP3b_________________ __QWERTY3b_
64#else
65 #define _________________KEYMAP1__________________ __COLEMAK1__
66 #define _________________KEYMAP2__________________ __COLEMAK2__
67 #define _________________KEYMAP3a_________________ __COLEMAK3a_
68 #define _________________KEYMAP3b_________________ __COLEMAK3b_
69#endif
diff --git a/users/scotto/tap_dance.c b/users/scotto/tap_dance.c
new file mode 100644
index 0000000000..e618384334
--- /dev/null
+++ b/users/scotto/tap_dance.c
@@ -0,0 +1,154 @@
1/*
2Copyright 2023 Joe Scotto
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#include "tap_dance.h"
16#include "scotto.h"
17
18// Create an instance of 'td_tap_t' for the 'x' tap dance.
19static td_tap_t xtap_state = {
20 .is_press_action = true,
21 .state = TD_NONE
22};
23
24td_state_t cur_dance(tap_dance_state_t *state) {
25 if (state->count == 1) {
26 if (state->interrupted || !state->pressed) {
27 return TD_SINGLE_TAP;
28 } else {
29 return TD_SINGLE_HOLD;
30 }
31 } else if (state->count == 2) {
32 if (state->interrupted || !state->pressed) {
33 return TD_DOUBLE_TAP;
34 } else {
35 return TD_DOUBLE_HOLD;
36 }
37 } else if (state->count == 3) {
38 if (state->interrupted || !state->pressed) {
39 return TD_TRIPLE_TAP;
40 } else {
41 return TD_TRIPLE_HOLD;
42 }
43 }
44
45 return TD_UNKNOWN;
46}
47
48void td_esc_lalt_lctl_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
49 xtap_state.state = cur_dance(state);
50 switch (xtap_state.state) {
51 case TD_SINGLE_TAP: tap_code(KC_ESC); break;
52 case TD_SINGLE_HOLD: register_code(KC_LALT); break;
53 case TD_DOUBLE_HOLD: register_code(KC_LCTL); break;
54 case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
55 case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
56 default: break;
57 }
58}
59
60void td_esc_lalt_lctl_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
61 switch (xtap_state.state) {
62 case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
63 case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
64 case TD_DOUBLE_HOLD: unregister_code(KC_LCTL); break;
65 default: break;
66 }
67 xtap_state.state = TD_NONE;
68}
69
70void td_esc_lctl_lalt_windows_emoji_finished(tap_dance_state_t *state, void *user_data) {
71 xtap_state.state = cur_dance(state);
72 switch (xtap_state.state) {
73 case TD_SINGLE_TAP: tap_code16(KC_ESC); break;
74 case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
75 case TD_DOUBLE_HOLD: register_code(KC_LALT); break;
76 case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
77 case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
78 default: break;
79 }
80}
81
82void td_esc_lctl_lalt_windows_emoji_reset(tap_dance_state_t *state, void *user_data) {
83 switch (xtap_state.state) {
84 case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
85 case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
86 case TD_DOUBLE_HOLD: unregister_code(KC_LALT); break;
87 default: break;
88 }
89 xtap_state.state = TD_NONE;
90}
91
92void td_lalt_esc_windowr_emoji_finished(tap_dance_state_t *state, void *user_data) {
93 xtap_state.state = cur_dance(state);
94 switch (xtap_state.state) {
95 case TD_SINGLE_TAP: register_code(KC_ESC); break;
96 case TD_SINGLE_HOLD: register_code(KC_LALT); break;
97 case TD_DOUBLE_TAP: tap_code(KC_LGUI); break;
98 case TD_TRIPLE_TAP: tap_code16(G(KC_DOT)); break;
99 default: break;
100 }
101}
102
103void td_lalt_esc_windowr_emoji_reset(tap_dance_state_t *state, void *user_data) {
104 switch (xtap_state.state) {
105 case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
106 case TD_SINGLE_HOLD: unregister_code(KC_LALT); break;
107 default: break;
108 }
109 xtap_state.state = TD_NONE;
110}
111
112void td_lctl_esc_spotlight_emoji_finished(tap_dance_state_t *state, void *user_data) {
113 xtap_state.state = cur_dance(state);
114 switch (xtap_state.state) {
115 case TD_SINGLE_TAP: register_code(KC_ESC); break;
116 case TD_SINGLE_HOLD: register_code(KC_LCTL); break;
117 case TD_DOUBLE_TAP: tap_code16(G(KC_SPC)); break;
118 case TD_TRIPLE_TAP: tap_code16(C(G(KC_SPC))); break;
119 default: break;
120 }
121}
122
123void td_lctl_esc_spotlight_emoji_reset(tap_dance_state_t *state, void *user_data) {
124 switch (xtap_state.state) {
125 case TD_SINGLE_TAP: unregister_code(KC_ESC); break;
126 case TD_SINGLE_HOLD: unregister_code(KC_LCTL); break;
127 default: break;
128 }
129 xtap_state.state = TD_NONE;
130}
131
132 // Tap Dance definitions
133tap_dance_action_t tap_dance_actions[] = {
134 [TD_LCTL_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lctl_esc_spotlight_emoji_finished, td_lctl_esc_spotlight_emoji_reset),
135 [TD_LALT_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_lalt_esc_windowr_emoji_finished, td_lalt_esc_windowr_emoji_reset),
136 [TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lalt_lctl_spotlight_emoji_finished, td_esc_lalt_lctl_spotlight_emoji_reset),
137 [TD_ESC_LCTL_LALT_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_esc_lctl_lalt_windows_emoji_finished, td_esc_lctl_lalt_windows_emoji_reset),
138};
139
140uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
141 switch (keycode) {
142 case TD(TD_LCTL_ESC_SPOTLIGHT_EMOJI) :
143 case TD(TD_LALT_ESC_WINDOWS_EMOJI) :
144 case TD(TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI) :
145 case TD(TD_ESC_LCTL_LALT_WINDOWS_EMOJI) :
146 case LGUI_T(KC_SPC) :
147 case LT(1, KC_SPC) :
148 case LT(1, KC_TAB) :
149 case LT(2, KC_ENT) :
150 return 200;
151 default:
152 return TAPPING_TERM;
153 }
154};
diff --git a/users/scotto/tap_dance.h b/users/scotto/tap_dance.h
new file mode 100644
index 0000000000..4082d2b9fb
--- /dev/null
+++ b/users/scotto/tap_dance.h
@@ -0,0 +1,39 @@
1/*
2Copyright 2023 Joe Scotto
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#pragma once
16#include "scotto.h"
17
18typedef enum {
19 TD_NONE = 0,
20 TD_UNKNOWN,
21 TD_SINGLE_HOLD,
22 TD_DOUBLE_HOLD,
23 TD_TRIPLE_HOLD,
24 TD_SINGLE_TAP,
25 TD_DOUBLE_TAP,
26 TD_TRIPLE_TAP
27} td_state_t;
28
29typedef struct {
30 bool is_press_action;
31 td_state_t state;
32} td_tap_t;
33
34enum {
35 TD_LCTL_ESC_SPOTLIGHT_EMOJI = 0,
36 TD_LALT_ESC_WINDOWS_EMOJI,
37 TD_ESC_LALT_LCTL_SPOTLIGHT_EMOJI,
38 TD_ESC_LCTL_LALT_WINDOWS_EMOJI
39};