Skip to content

Instantly share code, notes, and snippets.

@sivar2311
Last active October 1, 2021 17:11
Show Gist options
  • Save sivar2311/36aca08f296289b3f7aebe1ef151fe35 to your computer and use it in GitHub Desktop.
Save sivar2311/36aca08f296289b3f7aebe1ef151fe35 to your computer and use it in GitHub Desktop.
Keyboard layouts
#include <Arduino.h>
#include <map>
using KbdLayout = std::map<uint8_t, uint8_t>;
// standard US layout
#define SHIFT 0x80
KbdLayout std_layout{
{0x08, 0x2a}, // BS Backspace
{0x09, 0x2b}, // TAB Tab
{0x0A, 0x28}, // LF Enter
{0x20, 0x2c}, // ' '
{0x21, 0x1e | SHIFT}, // !
{0x22, 0x34 | SHIFT}, // "
{0x23, 0x20 | SHIFT}, // #
{0x24, 0x21 | SHIFT}, // $
{0x25, 0x22 | SHIFT}, // %
{0x26, 0x24 | SHIFT}, // &
{0x27, 0x34}, // '
{0x28, 0x26 | SHIFT}, // (
{0x29, 0x27 | SHIFT}, // )
{0x2A, 0x25 | SHIFT}, // *
{0x2B, 0x2e | SHIFT}, // +
{0x2C, 0x36}, // ,
{0x2D, 0x2d}, // -
{0x2E, 0x37}, // .
{0x2F, 0x38}, // /
{0x30, 0x27}, // 0
{0x31, 0x1e}, // 1
{0x32, 0x1f}, // 2
{0x33, 0x20}, // 3
{0x34, 0x21}, // 4
{0x35, 0x22}, // 5
{0x36, 0x23}, // 6
{0x37, 0x24}, // 7
{0x38, 0x25}, // 8
{0x39, 0x26}, // 9
{0x3A, 0x33 | SHIFT}, // :
{0x3B, 0x33}, // ;
{0x3C, 0x36 | SHIFT}, // <
{0x3D, 0x2e}, // =
{0x3E, 0x37 | SHIFT}, // >
{0x3F, 0x38 | SHIFT}, // ?
{0x40, 0x1f | SHIFT}, // @
{0x41, 0x04 | SHIFT}, // A
{0x42, 0x05 | SHIFT}, // B
{0x43, 0x06 | SHIFT}, // C
{0x44, 0x07 | SHIFT}, // D
{0x45, 0x08 | SHIFT}, // E
{0x46, 0x09 | SHIFT}, // F
{0x47, 0x0a | SHIFT}, // G
{0x48, 0x0b | SHIFT}, // H
{0x49, 0x0c | SHIFT}, // I
{0x4A, 0x0d | SHIFT}, // J
{0x4B, 0x0e | SHIFT}, // K
{0x4C, 0x0f | SHIFT}, // L
{0x4D, 0x10 | SHIFT}, // M
{0x4E, 0x11 | SHIFT}, // N
{0x4F, 0x12 | SHIFT}, // O
{0x50, 0x13 | SHIFT}, // P
{0x51, 0x14 | SHIFT}, // Q
{0x52, 0x15 | SHIFT}, // R
{0x53, 0x16 | SHIFT}, // S
{0x54, 0x17 | SHIFT}, // T
{0x55, 0x18 | SHIFT}, // U
{0x56, 0x19 | SHIFT}, // V
{0x57, 0x1a | SHIFT}, // W
{0x58, 0x1b | SHIFT}, // X
{0x59, 0x1c | SHIFT}, // Y
{0x5A, 0x1d | SHIFT}, // Z
{0x5B, 0x2f}, // [
{0x5C, 0x31}, // bslash
{0x5D, 0x30}, // ]
{0x5E, 0x23 | SHIFT}, // ^
{0x5F, 0x2d | SHIFT}, // _
{0x60, 0x35}, // `
{0x61, 0x04}, // a
{0x62, 0x05}, // b
{0x63, 0x06}, // c
{0x64, 0x07}, // d
{0x65, 0x08}, // e
{0x66, 0x09}, // f
{0x67, 0x0a}, // g
{0x68, 0x0b}, // h
{0x69, 0x0c}, // i
{0x6A, 0x0d}, // j
{0x6B, 0x0e}, // k
{0x6C, 0x0f}, // l
{0x6D, 0x10}, // m
{0x6E, 0x11}, // n
{0x6F, 0x12}, // o
{0x70, 0x13}, // p
{0x71, 0x14}, // q
{0x72, 0x15}, // r
{0x73, 0x16}, // s
{0x74, 0x17}, // t
{0x75, 0x18}, // u
{0x76, 0x19}, // v
{0x77, 0x1a}, // w
{0x78, 0x1b}, // x
{0x79, 0x1c}, // y
{0x7A, 0x1d}, // z
{0x7B, 0x2f | SHIFT}, // {
{0x7C, 0x31 | SHIFT}, // |
{0x7D, 0x30 | SHIFT}, // }
{0x7E, 0x35 | SHIFT} // ~
};
// differences on german layout
#define ALTGR 0x40
KbdLayout mod_ger{
{0xE1, 0x2D | ALTGR}, // ß
{0x94, 0x33} // ö
// todo...
};
// inject new or modify existing codes
void modifyKeyboard(KbdLayout& dest, KbdLayout& source) {
for (auto& key : source) dest[key.first] = key.second;
}
void setup() {
Serial.begin(115200);
modifyKeyboard(std_layout, mod_ger);
}
void loop() {
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment