aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed M Lin <tedmlin@gmail.com>2020-03-02 18:43:18 -0500
committerGitHub <noreply@github.com>2020-03-03 10:43:18 +1100
commit552f8d81b9bff8010b328ee944d50830cfcaea5c (patch)
tree645321809be268907d4676759bb10c7eff4e4400
parentabd36de5adbb484695d3500ad790df557d4f5419 (diff)
downloadqmk_firmware-552f8d81b9bff8010b328ee944d50830cfcaea5c.tar.gz
qmk_firmware-552f8d81b9bff8010b328ee944d50830cfcaea5c.zip
Reduce PROGMEM usage for sendstring LUT (#8109)
* Reduce PROGMEM usage for keycode map Bit-pack the keycode bool array to gain back a small amount of flash space. The trade-off is an increase in runtime instructions when running macros. It does make the code a bit harder to read, as well as maintain. For configs that use send_string() et al, it saves ~100 bytes. * Switch to macro and common definition Rewrite the array declarations so both the unpacked (original) and packed LUT arrays can use the same value definitions. This is done by defining a macro that "knows what to do". This makes the code much easier to read and maintain. * Fix macro typos and improve perf Pack the bits in a more efficient order for extraction. And also fix the copy/paste error in the macro... * Switch fully to packed LUT Some minor reformatting. Compile tested all sendstring_xyz.h to make sure they were converted properly. Also checked that an unconverted version would generate a compile error. * Apply whitespace suggestions from code review Co-Authored-By: Ryan <fauxpark@gmail.com> Co-authored-by: Ryan <fauxpark@gmail.com>
-rw-r--r--quantum/keymap_extras/sendstring_belgian.h69
-rw-r--r--quantum/keymap_extras/sendstring_bepo.h69
-rw-r--r--quantum/keymap_extras/sendstring_danish.h69
-rw-r--r--quantum/keymap_extras/sendstring_french.h69
-rw-r--r--quantum/keymap_extras/sendstring_german.h69
-rw-r--r--quantum/keymap_extras/sendstring_jis.h35
-rw-r--r--quantum/keymap_extras/sendstring_spanish.h69
-rw-r--r--quantum/keymap_extras/sendstring_turkish_f.h69
-rw-r--r--quantum/keymap_extras/sendstring_turkish_q.h69
-rw-r--r--quantum/keymap_extras/sendstring_uk.h35
-rw-r--r--quantum/quantum.c131
-rw-r--r--quantum/quantum.h16
12 files changed, 419 insertions, 350 deletions
diff --git a/quantum/keymap_extras/sendstring_belgian.h b/quantum/keymap_extras/sendstring_belgian.h
index ca0edfb68..ef5a2f049 100644
--- a/quantum/keymap_extras/sendstring_belgian.h
+++ b/quantum/keymap_extras/sendstring_belgian.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_belgian.h" 21#include "keymap_belgian.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 0, 0, 0, 0, 1, 0, 0, 32 KCLUT_ENTRY(0, 0, 0, 0, 0, 1, 0, 0),
32 0, 0, 1, 1, 0, 0, 1, 1, 33 KCLUT_ENTRY(0, 0, 1, 1, 0, 0, 1, 1),
33 1, 1, 1, 1, 1, 1, 1, 1, 34 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
34 1, 1, 0, 0, 0, 0, 1, 1, 35 KCLUT_ENTRY(1, 1, 0, 0, 0, 0, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 0, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
39 0, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 1, 0, 0, 0, 0, 52 KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 0, 0, 0, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 1, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 1, 0, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
59 1, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_bepo.h b/quantum/keymap_extras/sendstring_bepo.h
index ca5f73d7e..f0cc88bd2 100644
--- a/quantum/keymap_extras/sendstring_bepo.h
+++ b/quantum/keymap_extras/sendstring_bepo.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_bepo.h" 21#include "keymap_bepo.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 0, 1, 0, 0, 0, 0, 32 KCLUT_ENTRY(0, 1, 0, 1, 0, 0, 0, 0),
32 0, 0, 0, 0, 0, 0, 0, 0, 33 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
33 1, 1, 1, 1, 1, 1, 1, 1, 34 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
34 1, 1, 1, 1, 0, 0, 0, 1, 35 KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 0, 0, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 0),
39 1, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 0, 0, 0, 1, 0, 52 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 1, 0, 1, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 1, 0),
55 0, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 1, 1, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 1),
59 0, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_danish.h b/quantum/keymap_extras/sendstring_danish.h
index 3505a076b..43b6a56cf 100644
--- a/quantum/keymap_extras/sendstring_danish.h
+++ b/quantum/keymap_extras/sendstring_danish.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_danish.h" 21#include "keymap_danish.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 1, 1, 0, 1, 1, 0, 32 KCLUT_ENTRY(0, 1, 1, 1, 0, 1, 1, 0),
32 1, 1, 1, 0, 0, 0, 0, 1, 33 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
33 0, 0, 0, 0, 0, 0, 0, 0, 34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
34 0, 0, 1, 1, 0, 1, 1, 1, 35 KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 1, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
39 1, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 0, 1, 0, 0, 0, 52 KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 0, 0, 0, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 1, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 0, 0, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
59 0, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_french.h b/quantum/keymap_extras/sendstring_french.h
index 966685ccc..04b65ee91 100644
--- a/quantum/keymap_extras/sendstring_french.h
+++ b/quantum/keymap_extras/sendstring_french.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_french.h" 21#include "keymap_french.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 0, 0, 0, 0, 1, 0, 0, 32 KCLUT_ENTRY(0, 0, 0, 0, 0, 1, 0, 0),
32 0, 0, 0, 1, 0, 0, 1, 1, 33 KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 1, 1),
33 1, 1, 1, 1, 1, 1, 1, 1, 34 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
34 1, 1, 0, 0, 0, 0, 1, 1, 35 KCLUT_ENTRY(1, 1, 0, 0, 0, 0, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 0, 0, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 0),
39 0, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 1, 0, 0, 0, 0, 52 KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 0, 0, 0, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 1, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 1, 0, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
59 1, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_german.h b/quantum/keymap_extras/sendstring_german.h
index 3f27a9b2c..1bbdcce2c 100644
--- a/quantum/keymap_extras/sendstring_german.h
+++ b/quantum/keymap_extras/sendstring_german.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_german.h" 21#include "keymap_german.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 1, 0, 1, 1, 1, 1, 32 KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 1),
32 1, 1, 1, 0, 0, 0, 0, 1, 33 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
33 0, 0, 0, 0, 0, 0, 0, 0, 34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
34 0, 0, 1, 1, 0, 1, 1, 1, 35 KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 0, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
39 1, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 0, 0, 0, 0, 0, 52 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 0, 0, 0, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 1, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 0, 0, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
59 0, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_jis.h b/quantum/keymap_extras/sendstring_jis.h
index 421ceb043..8b0dc9956 100644
--- a/quantum/keymap_extras/sendstring_jis.h
+++ b/quantum/keymap_extras/sendstring_jis.h
@@ -19,27 +19,28 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_jp.h" 21#include "keymap_jp.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 1, 1, 1, 1, 1, 1, 32 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
32 1, 1, 1, 1, 0, 0, 0, 0, 33 KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
33 0, 0, 0, 0, 0, 0, 0, 0, 34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
34 0, 0, 0, 0, 1, 1, 1, 1, 35 KCLUT_ENTRY(0, 0, 0, 0, 1, 1, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 0, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
39 1, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 1, 1, 1, 1, 0 43 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
43}; 44};
44 45
45const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 46const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_spanish.h b/quantum/keymap_extras/sendstring_spanish.h
index 92bada269..70e671653 100644
--- a/quantum/keymap_extras/sendstring_spanish.h
+++ b/quantum/keymap_extras/sendstring_spanish.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_spanish.h" 21#include "keymap_spanish.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 1, 0, 1, 1, 1, 0, 32 KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
32 1, 1, 1, 0, 0, 0, 0, 1, 33 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
33 0, 0, 0, 0, 0, 0, 0, 0, 34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
34 0, 0, 1, 1, 0, 1, 1, 1, 35 KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 1, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
39 0, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 1, 0, 0, 0, 0, 52 KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 0, 0, 0, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 1, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 0, 0, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
59 0, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_turkish_f.h b/quantum/keymap_extras/sendstring_turkish_f.h
index 82dbbdbcb..5eec73bde 100644
--- a/quantum/keymap_extras/sendstring_turkish_f.h
+++ b/quantum/keymap_extras/sendstring_turkish_f.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_turkish_f.h" 21#include "keymap_turkish_f.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 1, 0, 1, 1, 1, 1, 32 KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 1),
32 1, 1, 1, 0, 0, 0, 0, 0, 33 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 0),
33 0, 0, 0, 0, 0, 0, 0, 0, 34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
34 0, 0, 1, 1, 0, 1, 1, 1, 35 KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 1, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
39 0, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 1, 0, 0, 0, 0, 52 KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 0, 0, 0, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 1, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 0, 0, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
59 1, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_turkish_q.h b/quantum/keymap_extras/sendstring_turkish_q.h
index 58505b849..97c990c12 100644
--- a/quantum/keymap_extras/sendstring_turkish_q.h
+++ b/quantum/keymap_extras/sendstring_turkish_q.h
@@ -19,47 +19,48 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_turkish_q.h" 21#include "keymap_turkish_q.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 0, 0, 0, 1, 1, 1, 32 KCLUT_ENTRY(0, 1, 0, 0, 0, 1, 1, 1),
32 1, 1, 0, 1, 0, 0, 0, 1, 33 KCLUT_ENTRY(1, 1, 0, 1, 0, 0, 0, 1),
33 0, 0, 0, 0, 0, 0, 0, 0, 34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
34 0, 0, 1, 1, 0, 1, 1, 1, 35 KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
35 0, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 1, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
39 0, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 0, 0, 0, 0, 0 43 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
43}; 44};
44 45
45const bool ascii_to_altgr_lut[128] PROGMEM = { 46const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
46 0, 0, 0, 0, 0, 0, 0, 0, 47 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
47 0, 0, 0, 0, 0, 0, 0, 0, 48 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
48 0, 0, 0, 0, 0, 0, 0, 0, 49 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
49 0, 0, 0, 0, 0, 0, 0, 0, 50 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
50 51
51 0, 0, 0, 1, 1, 0, 0, 0, 52 KCLUT_ENTRY(0, 0, 0, 1, 1, 0, 0, 0),
52 0, 0, 0, 0, 0, 0, 0, 0, 53 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
53 0, 0, 0, 0, 0, 0, 0, 0, 54 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
54 0, 0, 0, 0, 0, 0, 0, 0, 55 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
55 1, 0, 0, 0, 0, 0, 0, 0, 56 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
56 0, 0, 0, 0, 0, 0, 0, 0, 57 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
57 0, 0, 0, 0, 0, 0, 0, 0, 58 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
58 0, 0, 0, 1, 1, 1, 0, 0, 59 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
59 1, 0, 0, 0, 0, 0, 0, 0, 60 KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
60 0, 0, 0, 0, 0, 0, 0, 0, 61 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
61 0, 0, 0, 0, 0, 0, 0, 0, 62 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
62 0, 0, 0, 1, 1, 1, 1, 0 63 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
63}; 64};
64 65
65const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 66const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/keymap_extras/sendstring_uk.h b/quantum/keymap_extras/sendstring_uk.h
index 982456e40..733c5f860 100644
--- a/quantum/keymap_extras/sendstring_uk.h
+++ b/quantum/keymap_extras/sendstring_uk.h
@@ -19,27 +19,28 @@
19#pragma once 19#pragma once
20 20
21#include "keymap_uk.h" 21#include "keymap_uk.h"
22#include "quantum.h"
22 23
23// clang-format off 24// clang-format off
24 25
25const bool ascii_to_shift_lut[128] PROGMEM = { 26const uint8_t ascii_to_shift_lut[16] PROGMEM = {
26 0, 0, 0, 0, 0, 0, 0, 0, 27 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
27 0, 0, 0, 0, 0, 0, 0, 0, 28 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
28 0, 0, 0, 0, 0, 0, 0, 0, 29 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
29 0, 0, 0, 0, 0, 0, 0, 0, 30 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
30 31
31 0, 1, 1, 0, 1, 1, 1, 0, 32 KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
32 1, 1, 1, 1, 0, 0, 0, 0, 33 KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
33 0, 0, 0, 0, 0, 0, 0, 0, 34 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
34 0, 0, 1, 0, 1, 0, 1, 1, 35 KCLUT_ENTRY(0, 0, 1, 0, 1, 0, 1, 1),
35 1, 1, 1, 1, 1, 1, 1, 1, 36 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
36 1, 1, 1, 1, 1, 1, 1, 1, 37 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
37 1, 1, 1, 1, 1, 1, 1, 1, 38 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
38 1, 1, 1, 0, 0, 0, 1, 1, 39 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
39 0, 0, 0, 0, 0, 0, 0, 0, 40 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
40 0, 0, 0, 0, 0, 0, 0, 0, 41 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
41 0, 0, 0, 0, 0, 0, 0, 0, 42 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
42 0, 0, 0, 1, 1, 1, 1, 0 43 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
43}; 44};
44 45
45const uint8_t ascii_to_keycode_lut[128] PROGMEM = { 46const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 37c374ece..e06448d9e 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -321,50 +321,97 @@ bool process_record_quantum(keyrecord_t *record) {
321 return process_action_kb(record); 321 return process_action_kb(record);
322} 322}
323 323
324__attribute__((weak)) const bool ascii_to_shift_lut[128] PROGMEM = {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, 324// clang-format off
325
326 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 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, 1, 1, 1, 0};
327
328__attribute__((weak)) const bool ascii_to_altgr_lut[128] PROGMEM = {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,
329 325
330 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, 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, 0, 0, 0, 0, 0, 0, 0, 0}; 326/* Bit-Packed look-up table to convert an ASCII character to whether
327 * [Shift] needs to be sent with the keycode.
328 */
329__attribute__((weak)) const uint8_t ascii_to_shift_lut[16] PROGMEM = {
330 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
331 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
332 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
333 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
334
335 KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 0),
336 KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
337 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
338 KCLUT_ENTRY(0, 0, 1, 0, 1, 0, 1, 1),
339 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
340 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
341 KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
342 KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
343 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
344 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
345 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
346 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
347};
348
349/* Bit-Packed look-up table to convert an ASCII character to whether
350 * [AltGr] needs to be sent with the keycode.
351 */
352__attribute__((weak)) const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
353 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
354 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
355 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
356 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
357
358 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
359 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
360 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
361 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
362 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
363 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
364 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
365 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
366 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
367 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
368 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
369 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
370};
371
372/* Look-up table to convert an ASCII character to a keycode.
373 */
374__attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
375 // NUL SOH STX ETX EOT ENQ ACK BEL
376 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
377 // BS TAB LF VT FF CR SO SI
378 KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
379 // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
380 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
381 // CAN EM SUB ESC FS GS RS US
382 XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
383
384 // ! " # $ % & '
385 KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
386 // ( ) * + , - . /
387 KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
388 // 0 1 2 3 4 5 6 7
389 KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
390 // 8 9 : ; < = > ?
391 KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
392 // @ A B C D E F G
393 KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
394 // H I J K L M N O
395 KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
396 // P Q R S T U V W
397 KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
398 // X Y Z [ \ ] ^ _
399 KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
400 // ` a b c d e f g
401 KC_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
402 // h i j k l m n o
403 KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
404 // p q r s t u v w
405 KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
406 // x y z { | } ~ DEL
407 KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
408};
331 409
332// clang-format off
333__attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = {// NUL SOH STX ETX EOT ENQ ACK BEL
334 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
335 // BS TAB LF VT FF CR SO SI
336 KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
337 // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
338 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
339 // CAN EM SUB ESC FS GS RS US
340 XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
341
342 // ! " # $ % & '
343 KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
344 // ( ) * + , - . /
345 KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
346 // 0 1 2 3 4 5 6 7
347 KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
348 // 8 9 : ; < = > ?
349 KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
350 // @ A B C D E F G
351 KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
352 // H I J K L M N O
353 KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
354 // P Q R S T U V W
355 KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
356 // X Y Z [ \ ] ^ _
357 KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
358 // ` a b c d e f g
359 KC_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
360 // h i j k l m n o
361 KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
362 // p q r s t u v w
363 KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
364 // x y z { | } ~ DEL
365 KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL};
366// clang-format on 410// clang-format on
367 411
412// Note: we bit-pack in "reverse" order to optimize loading
413#define PGM_LOADBIT(mem, pos) ((pgm_read_byte(&((mem)[(pos) / 8])) >> ((pos) % 8)) & 0x01)
414
368void send_string(const char *str) { send_string_with_delay(str, 0); } 415void send_string(const char *str) { send_string_with_delay(str, 0); }
369 416
370void send_string_P(const char *str) { send_string_with_delay_P(str, 0); } 417void send_string_P(const char *str) { send_string_with_delay_P(str, 0); }
@@ -462,8 +509,8 @@ void send_char(char ascii_code) {
462#endif 509#endif
463 510
464 uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); 511 uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]);
465 bool is_shifted = pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code]); 512 bool is_shifted = PGM_LOADBIT(ascii_to_shift_lut, (uint8_t)ascii_code);
466 bool is_altgred = pgm_read_byte(&ascii_to_altgr_lut[(uint8_t)ascii_code]); 513 bool is_altgred = PGM_LOADBIT(ascii_to_altgr_lut, (uint8_t)ascii_code);
467 514
468 if (is_shifted) { 515 if (is_shifted) {
469 register_code(KC_LSFT); 516 register_code(KC_LSFT);
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 7dc14e628..d03ba5942 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -211,9 +211,21 @@ typedef ioline_t pin_t;
211#define SEND_STRING(string) send_string_P(PSTR(string)) 211#define SEND_STRING(string) send_string_P(PSTR(string))
212#define SEND_STRING_DELAY(string, interval) send_string_with_delay_P(PSTR(string), interval) 212#define SEND_STRING_DELAY(string, interval) send_string_with_delay_P(PSTR(string), interval)
213 213
214extern const bool ascii_to_shift_lut[128]; 214// Look-Up Tables (LUTs) to convert ASCII character to keycode sequence.
215extern const bool ascii_to_altgr_lut[128];
216extern const uint8_t ascii_to_keycode_lut[128]; 215extern const uint8_t ascii_to_keycode_lut[128];
216extern const uint8_t ascii_to_shift_lut[16];
217extern const uint8_t ascii_to_altgr_lut[16];
218// clang-format off
219#define KCLUT_ENTRY(a, b, c, d, e, f, g, h) \
220 ( ((a) ? 1 : 0) << 0 \
221 | ((b) ? 1 : 0) << 1 \
222 | ((c) ? 1 : 0) << 2 \
223 | ((d) ? 1 : 0) << 3 \
224 | ((e) ? 1 : 0) << 4 \
225 | ((f) ? 1 : 0) << 5 \
226 | ((g) ? 1 : 0) << 6 \
227 | ((h) ? 1 : 0) << 7 )
228// clang-format on
217 229
218void send_string(const char *str); 230void send_string(const char *str);
219void send_string_with_delay(const char *str, uint8_t interval); 231void send_string_with_delay(const char *str, uint8_t interval);