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>
master
Ted M Lin 2020-03-02 18:43:18 -05:00 committed by GitHub
parent abd36de5ad
commit 552f8d81b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 419 additions and 350 deletions

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_belgian.h" #include "keymap_belgian.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 1, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 1, 0, 0),
0, 0, 1, 1, 0, 0, 1, 1, KCLUT_ENTRY(0, 0, 1, 1, 0, 0, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 0, 0, 0, 0, 1, 1, KCLUT_ENTRY(1, 1, 0, 0, 0, 0, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_bepo.h" #include "keymap_bepo.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 0, 1, 0, 0, 0, 0, KCLUT_ENTRY(0, 1, 0, 1, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 1, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 1, 0, 1, 0, KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 1, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_danish.h" #include "keymap_danish.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 1, 1, 0, 1, 1, 0, KCLUT_ENTRY(0, 1, 1, 1, 0, 1, 1, 0),
1, 1, 1, 0, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 1, 1, 0, 1, 1, 1, KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 1, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 1, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_french.h" #include "keymap_french.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 1, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 1, 0, 0),
0, 0, 0, 1, 0, 0, 1, 1, KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 0, 0, 0, 0, 1, 1, KCLUT_ENTRY(1, 1, 0, 0, 0, 0, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_german.h" #include "keymap_german.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 1, 0, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 1, 1, 0, 1, 1, 1, KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,27 +19,28 @@
#pragma once #pragma once
#include "keymap_jp.h" #include "keymap_jp.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 0, 0, 0, 0, KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 1, 1, 1, 1, KCLUT_ENTRY(0, 0, 0, 0, 1, 1, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_spanish.h" #include "keymap_spanish.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 1, 0, 1, 1, 1, 0, KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
1, 1, 1, 0, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 1, 1, 0, 1, 1, 1, KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 1, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_turkish_f.h" #include "keymap_turkish_f.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 1, 0, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 1, 1, 0, 1, 1, 1, KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 1, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,47 +19,48 @@
#pragma once #pragma once
#include "keymap_turkish_q.h" #include "keymap_turkish_q.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 0, 0, 0, 1, 1, 1, KCLUT_ENTRY(0, 1, 0, 0, 0, 1, 1, 1),
1, 1, 0, 1, 0, 0, 0, 1, KCLUT_ENTRY(1, 1, 0, 1, 0, 0, 0, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 1, 1, 0, 1, 1, 1, KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1),
0, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 1, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
}; };
const bool ascii_to_altgr_lut[128] PROGMEM = { const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 0, 0, KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0),
1, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -19,27 +19,28 @@
#pragma once #pragma once
#include "keymap_uk.h" #include "keymap_uk.h"
#include "quantum.h"
// clang-format off // clang-format off
const bool ascii_to_shift_lut[128] PROGMEM = { const uint8_t ascii_to_shift_lut[16] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 1, 1, 0, 1, 1, 1, 0, KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0),
1, 1, 1, 1, 0, 0, 0, 0, KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 1, 0, 1, 0, 1, 1, KCLUT_ENTRY(0, 0, 1, 0, 1, 0, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 1, 1, 1, 1, 1, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
1, 1, 1, 0, 0, 0, 1, 1, KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 0, 0, 0, 0, 0, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
0, 0, 0, 1, 1, 1, 1, 0 KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
}; };
const uint8_t ascii_to_keycode_lut[128] PROGMEM = { const uint8_t ascii_to_keycode_lut[128] PROGMEM = {

View File

@ -321,50 +321,97 @@ bool process_record_quantum(keyrecord_t *record) {
return process_action_kb(record); return process_action_kb(record);
} }
__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,
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};
__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,
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};
// clang-format off // clang-format off
__attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = {// NUL SOH STX ETX EOT ENQ ACK BEL
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// BS TAB LF VT FF CR SO SI
KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// DLE DC1 DC2 DC3 DC4 NAK SYN ETB
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// CAN EM SUB ESC FS GS RS US
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & ' /* Bit-Packed look-up table to convert an ASCII character to whether
KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT, * [Shift] needs to be sent with the keycode.
// ( ) * + , - . / */
KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH, __attribute__((weak)) const uint8_t ascii_to_shift_lut[16] PROGMEM = {
// 0 1 2 3 4 5 6 7 KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
// 8 9 : ; < = > ? KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
// @ A B C D E F G
KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 0),
// H I J K L M N O KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
// P Q R S T U V W KCLUT_ENTRY(0, 0, 1, 0, 1, 0, 1, 1),
KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
// X Y Z [ \ ] ^ _ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS, KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
// ` a b c d e f g KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
KC_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
// h i j k l m n o KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O, KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
// p q r s t u v w KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0),
KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W, };
// x y z { | } ~ DEL
KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL}; /* Bit-Packed look-up table to convert an ASCII character to whether
* [AltGr] needs to be sent with the keycode.
*/
__attribute__((weak)) const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
};
/* Look-up table to convert an ASCII character to a keycode.
*/
__attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
// NUL SOH STX ETX EOT ENQ ACK BEL
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// BS TAB LF VT FF CR SO SI
KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// DLE DC1 DC2 DC3 DC4 NAK SYN ETB
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// CAN EM SUB ESC FS GS RS US
XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ! " # $ % & '
KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
// ( ) * + , - . /
KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
// 0 1 2 3 4 5 6 7
KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
// 8 9 : ; < = > ?
KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
// @ A B C D E F G
KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
// H I J K L M N O
KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
// P Q R S T U V W
KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
// X Y Z [ \ ] ^ _
KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
// ` a b c d e f g
KC_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
// h i j k l m n o
KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
// p q r s t u v w
KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
// x y z { | } ~ DEL
KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
};
// clang-format on // clang-format on
// Note: we bit-pack in "reverse" order to optimize loading
#define PGM_LOADBIT(mem, pos) ((pgm_read_byte(&((mem)[(pos) / 8])) >> ((pos) % 8)) & 0x01)
void send_string(const char *str) { send_string_with_delay(str, 0); } void send_string(const char *str) { send_string_with_delay(str, 0); }
void send_string_P(const char *str) { send_string_with_delay_P(str, 0); } void send_string_P(const char *str) { send_string_with_delay_P(str, 0); }
@ -462,8 +509,8 @@ void send_char(char ascii_code) {
#endif #endif
uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]);
bool is_shifted = pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code]); bool is_shifted = PGM_LOADBIT(ascii_to_shift_lut, (uint8_t)ascii_code);
bool is_altgred = pgm_read_byte(&ascii_to_altgr_lut[(uint8_t)ascii_code]); bool is_altgred = PGM_LOADBIT(ascii_to_altgr_lut, (uint8_t)ascii_code);
if (is_shifted) { if (is_shifted) {
register_code(KC_LSFT); register_code(KC_LSFT);

View File

@ -211,9 +211,21 @@ typedef ioline_t pin_t;
#define SEND_STRING(string) send_string_P(PSTR(string)) #define SEND_STRING(string) send_string_P(PSTR(string))
#define SEND_STRING_DELAY(string, interval) send_string_with_delay_P(PSTR(string), interval) #define SEND_STRING_DELAY(string, interval) send_string_with_delay_P(PSTR(string), interval)
extern const bool ascii_to_shift_lut[128]; // Look-Up Tables (LUTs) to convert ASCII character to keycode sequence.
extern const bool ascii_to_altgr_lut[128];
extern const uint8_t ascii_to_keycode_lut[128]; extern const uint8_t ascii_to_keycode_lut[128];
extern const uint8_t ascii_to_shift_lut[16];
extern const uint8_t ascii_to_altgr_lut[16];
// clang-format off
#define KCLUT_ENTRY(a, b, c, d, e, f, g, h) \
( ((a) ? 1 : 0) << 0 \
| ((b) ? 1 : 0) << 1 \
| ((c) ? 1 : 0) << 2 \
| ((d) ? 1 : 0) << 3 \
| ((e) ? 1 : 0) << 4 \
| ((f) ? 1 : 0) << 5 \
| ((g) ? 1 : 0) << 6 \
| ((h) ? 1 : 0) << 7 )
// clang-format on
void send_string(const char *str); void send_string(const char *str);
void send_string_with_delay(const char *str, uint8_t interval); void send_string_with_delay(const char *str, uint8_t interval);