aboutsummaryrefslogtreecommitdiffstats
path: root/src/keysym
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-12-19 19:29:41 +0100
committerLouis Burda <quent.burda@gmail.com>2022-12-19 19:29:41 +0100
commit878eb23b8394109aeb32cd505f79b96c74ec97f6 (patch)
treeed5aa20a4018fcecd0d7f922d66c92633822117c /src/keysym
parentd7c506450be613d6575649218fbcc90a4fabd150 (diff)
downloadsxkbd-878eb23b8394109aeb32cd505f79b96c74ec97f6.tar.gz
sxkbd-878eb23b8394109aeb32cd505f79b96c74ec97f6.zip
Add special hid functionality, consumer control working
Diffstat (limited to 'src/keysym')
-rw-r--r--src/keysym/consumer.c60
-rw-r--r--src/keysym/consumer.h57
-rw-r--r--src/keysym/keyboard_de.h152
-rw-r--r--src/keysym/keyboard_us.h228
-rw-r--r--src/keysym/mouse.h50
-rw-r--r--src/keysym/system.c20
-rw-r--r--src/keysym/system.h18
7 files changed, 585 insertions, 0 deletions
diff --git a/src/keysym/consumer.c b/src/keysym/consumer.c
new file mode 100644
index 0000000..8e0e8c0
--- /dev/null
+++ b/src/keysym/consumer.c
@@ -0,0 +1,60 @@
+#include "keysym/consumer.h"
+
+#include "hid/consumer.h"
+
+#include <stdint.h>
+
+uint16_t
+keysym_to_consumer(uint32_t key)
+{
+ switch (key) {
+ case KS_AUDIO_MUTE:
+ return AUDIO_MUTE;
+ case KS_AUDIO_VOL_UP:
+ return AUDIO_VOL_UP;
+ case KS_AUDIO_VOL_DOWN:
+ return AUDIO_VOL_DOWN;
+ case KS_MEDIA_NEXT_TRACK:
+ return TRANSPORT_NEXT_TRACK;
+ case KS_MEDIA_PREV_TRACK:
+ return TRANSPORT_PREV_TRACK;
+ case KS_MEDIA_FAST_FORWARD:
+ return TRANSPORT_FAST_FORWARD;
+ case KS_MEDIA_REWIND:
+ return TRANSPORT_REWIND;
+ case KS_MEDIA_STOP:
+ return TRANSPORT_STOP;
+ case KS_MEDIA_EJECT:
+ return TRANSPORT_STOP_EJECT;
+ case KS_MEDIA_PLAY_PAUSE:
+ return TRANSPORT_PLAY_PAUSE;
+ case KS_MEDIA_SELECT:
+ return AL_CC_CONFIG;
+ case KS_MAIL:
+ return AL_EMAIL;
+ case KS_CALCULATOR:
+ return AL_CALCULATOR;
+ case KS_MY_COMPUTER:
+ return AL_LOCAL_BROWSER;
+ case KS_WWW_SEARCH:
+ return AC_SEARCH;
+ case KS_WWW_HOME:
+ return AC_HOME;
+ case KS_WWW_BACK:
+ return AC_BACK;
+ case KS_WWW_FORWARD:
+ return AC_FORWARD;
+ case KS_WWW_STOP:
+ return AC_STOP;
+ case KS_WWW_REFRESH:
+ return AC_REFRESH;
+ case KS_BRIGHTNESS_UP:
+ return BRIGHTNESS_UP;
+ case KS_BRIGHTNESS_DOWN:
+ return BRIGHTNESS_DOWN;
+ case KS_WWW_FAVORITES:
+ return AC_BOOKMARKS;
+ default:
+ return 0;
+ }
+}
diff --git a/src/keysym/consumer.h b/src/keysym/consumer.h
new file mode 100644
index 0000000..c760649
--- /dev/null
+++ b/src/keysym/consumer.h
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "keysym.h"
+
+#include <stdint.h>
+
+/* Consumer Page (0x0C) */
+#define KS_MUTE KS_AUDIO_MUTE
+#define KS_VOLU KS_AUDIO_VOL_UP
+#define KS_VOLD KS_AUDIO_VOL_DOWN
+#define KS_MNXT KS_MEDIA_NEXT_TRACK
+#define KS_MPRV KS_MEDIA_PREV_TRACK
+#define KS_MSTP KS_MEDIA_STOP
+#define KS_MPLY KS_MEDIA_PLAY_PAUSE
+#define KS_MSEL KS_MEDIA_SELECT
+#define KS_EJCT KS_MEDIA_EJECT
+#define KS_CALC KS_CALCULATOR
+#define KS_MYCM KS_MY_COMPUTER
+#define KS_WSCH KS_WWW_SEARCH
+#define KS_WHOM KS_WWW_HOME
+#define KS_WBAK KS_WWW_BACK
+#define KS_WFWD KS_WWW_FORWARD
+#define KS_WSTP KS_WWW_STOP
+#define KS_WREF KS_WWW_REFRESH
+#define KS_WFAV KS_WWW_FAVORITES
+#define KS_MFFD KS_MEDIA_FAST_FORWARD
+#define KS_MRWD KS_MEDIA_REWIND
+#define KS_BRIU KS_BRIGHTNESS_UP
+#define KS_BRID KS_BRIGHTNESS_DOWN
+
+enum keysym_consumer {
+ KS_AUDIO_MUTE = KEYSYM_CONSUMER_MASK,
+ KS_AUDIO_VOL_UP,
+ KS_AUDIO_VOL_DOWN,
+ KS_MEDIA_NEXT_TRACK,
+ KS_MEDIA_PREV_TRACK,
+ KS_MEDIA_STOP,
+ KS_MEDIA_PLAY_PAUSE,
+ KS_MEDIA_SELECT,
+ KS_MEDIA_EJECT,
+ KS_MAIL,
+ KS_CALCULATOR,
+ KS_MY_COMPUTER,
+ KS_WWW_SEARCH,
+ KS_WWW_HOME,
+ KS_WWW_BACK,
+ KS_WWW_FORWARD,
+ KS_WWW_STOP,
+ KS_WWW_REFRESH,
+ KS_WWW_FAVORITES,
+ KS_MEDIA_FAST_FORWARD,
+ KS_MEDIA_REWIND,
+ KS_BRIGHTNESS_UP,
+ KS_BRIGHTNESS_DOWN
+};
+
+uint16_t keysym_to_consumer(uint32_t keysym);
diff --git a/src/keysym/keyboard_de.h b/src/keysym/keyboard_de.h
new file mode 100644
index 0000000..2294b46
--- /dev/null
+++ b/src/keysym/keyboard_de.h
@@ -0,0 +1,152 @@
+#pragma once
+
+#include "keysym.h"
+#include "hid/keyboard.h"
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ß │ ´ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Ü │ + │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+
+/* Row 1 */
+#define DE_CIRC KC_GRV // ^ (dead)
+#define DE_1 KC_1 // 1
+#define DE_2 KC_2 // 2
+#define DE_3 KC_3 // 3
+#define DE_4 KC_4 // 4
+#define DE_5 KC_5 // 5
+#define DE_6 KC_6 // 6
+#define DE_7 KC_7 // 7
+#define DE_8 KC_8 // 8
+#define DE_9 KC_9 // 9
+#define DE_0 KC_0 // 0
+#define DE_SS KC_MINS // ß
+#define DE_ACUT KC_EQL // ´ (dead)
+
+/* Row 2 */
+#define DE_Q KC_Q // Q
+#define DE_W KC_W // W
+#define DE_E KC_E // E
+#define DE_R KC_R // R
+#define DE_T KC_T // T
+#define DE_Z KC_Y // Z
+#define DE_U KC_U // U
+#define DE_I KC_I // I
+#define DE_O KC_O // O
+#define DE_P KC_P // P
+#define DE_UDIA KC_LBRC // Ü
+#define DE_PLUS KC_RBRC // +
+
+/* Row 3 */
+#define DE_A KC_A // A
+#define DE_S KC_S // S
+#define DE_D KC_D // D
+#define DE_F KC_F // F
+#define DE_G KC_G // G
+#define DE_H KC_H // H
+#define DE_J KC_J // J
+#define DE_K KC_K // K
+#define DE_L KC_L // L
+#define DE_ODIA KC_SCLN // Ö
+#define DE_ADIA KC_QUOT // Ä
+#define DE_HASH KC_NUHS // #
+
+/* Row 4 */
+#define DE_LABK KC_NUBS // <
+#define DE_Y KC_Z // Y
+#define DE_X KC_X // X
+#define DE_C KC_C // C
+#define DE_V KC_V // V
+#define DE_B KC_B // B
+#define DE_N KC_N // N
+#define DE_M KC_M // M
+#define DE_COMM KC_COMM // ,
+#define DE_DOT KC_DOT // .
+#define DE_MINS KC_SLSH // -
+
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ ' │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+
+/* Row 1 */
+#define DE_DEG S(DE_CIRC) // °
+#define DE_EXLM S(DE_1) // !
+#define DE_DQUO S(DE_2) // "
+#define DE_SECT S(DE_3) // §
+#define DE_DLR S(DE_4) // $
+#define DE_PERC S(DE_5) // %
+#define DE_AMPR S(DE_6) // &
+#define DE_SLSH S(DE_7) // /
+#define DE_LPRN S(DE_8) // (
+#define DE_RPRN S(DE_9) // )
+#define DE_EQL S(DE_0) // =
+#define DE_QUES S(DE_SS) // ?
+#define DE_GRV S(DE_ACUT) // ` (dead)
+
+/* Row 2 */
+#define DE_ASTR S(DE_PLUS) // *
+
+/* Row 3 */
+#define DE_QUOT S(DE_HASH) // '
+
+/* Row 4 */
+#define DE_RABK S(DE_LABK) // >
+#define DE_SCLN S(DE_COMM) // ;
+#define DE_COLN S(DE_DOT) // :
+#define DE_UNDS S(DE_MINS) // _
+
+/* alternate names */
+#define DE_LESS DE_LABK
+#define DE_GRTR S(DE_LABK)
+
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ │ │ ² │ ³ │ │ │ │ { │ [ │ ] │ } │ \ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ @ │ │ € │ │ │ │ │ │ │ │ │ ~ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ | │ │ │ │ │ │ │ µ │ │ │ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+
+/* Row 1 */
+#define DE_SUP2 ALGR(DE_2) // ²
+#define DE_SUP3 ALGR(DE_3) // ³
+#define DE_LCBR ALGR(DE_7) // {
+#define DE_LBRC ALGR(DE_8) // [
+#define DE_RBRC ALGR(DE_9) // ]
+#define DE_RCBR ALGR(DE_0) // }
+#define DE_BSLS ALGR(DE_SS) // (backslash)
+
+/* Row 2 */
+#define DE_AT ALGR(DE_Q) // @
+#define DE_EURO ALGR(DE_E) // €
+#define DE_TILD ALGR(DE_PLUS) // ~
+
+/* Row 4 */
+#define DE_PIPE ALGR(DE_LABK) // |
+#define DE_MICR ALGR(DE_M) // µ
diff --git a/src/keysym/keyboard_us.h b/src/keysym/keyboard_us.h
new file mode 100644
index 0000000..7107a9c
--- /dev/null
+++ b/src/keysym/keyboard_us.h
@@ -0,0 +1,228 @@
+#pragma once
+
+#include "keysym.h"
+#include "hid/keyboard.h"
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+
+/* Row 1 */
+#define US_GRV KC_GRV // `
+#define US_1 KC_1 // 1
+#define US_2 KC_2 // 2
+#define US_3 KC_3 // 3
+#define US_4 KC_4 // 4
+#define US_5 KC_5 // 5
+#define US_6 KC_6 // 6
+#define US_7 KC_7 // 7
+#define US_8 KC_8 // 8
+#define US_9 KC_9 // 9
+#define US_0 KC_0 // 0
+#define US_MINS KC_MINS // -
+#define US_EQL KC_EQL // =
+
+/* Row 2 */
+#define US_Q KC_Q // Q
+#define US_W KC_W // W
+#define US_E KC_E // E
+#define US_R KC_R // R
+#define US_T KC_T // T
+#define US_Y KC_Y // Y
+#define US_U KC_U // U
+#define US_I KC_I // I
+#define US_O KC_O // O
+#define US_P KC_P // P
+#define US_LBRC KC_LBRC // [
+#define US_RBRC KC_RBRC // ]
+#define US_BSLS KC_BSLS // (backslash)
+
+/* Row 3 */
+#define US_A KC_A // A
+#define US_S KC_S // S
+#define US_D KC_D // D
+#define US_F KC_F // F
+#define US_G KC_G // G
+#define US_H KC_H // H
+#define US_J KC_J // J
+#define US_K KC_K // K
+#define US_L KC_L // L
+#define US_SCLN KC_SCLN // ;
+#define US_QUOT KC_QUOT // '
+
+/* Row 4 */
+#define US_Z KC_Z // Z
+#define US_X KC_X // X
+#define US_C KC_C // C
+#define US_V KC_V // V
+#define US_B KC_B // B
+#define US_N KC_N // N
+#define US_M KC_M // M
+#define US_COMM KC_COMM // ,
+#define US_DOT KC_DOT // .
+#define US_SLSH KC_SLSH // /
+
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ : │ " │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+
+/* Row 1 */
+#define US_TILD S(US_GRV) // ~
+#define US_EXLM S(US_1) // !
+#define US_AT S(US_2) // @
+#define US_HASH S(US_3) // #
+#define US_DLR S(US_4) // $
+#define US_PERC S(US_5) // %
+#define US_CIRC S(US_6) // ^
+#define US_AMPR S(US_7) // &
+#define US_ASTR S(US_8) // *
+#define US_LPRN S(US_9) // (
+#define US_RPRN S(US_0) // )
+#define US_UNDS S(US_MINS) // _
+#define US_PLUS S(US_EQL) // +
+
+/* Row 2 */
+#define US_LCBR S(US_LBRC) // {
+#define US_RCBR S(US_RBRC) // }
+#define US_PIPE S(US_BSLS) // |
+
+/* Row 3 */
+#define US_COLN S(US_SCLN) // :
+#define US_DQUO S(US_QUOT) // "
+
+/* Row 4 */
+#define US_LABK S(US_COMM) // <
+#define US_RABK S(US_DOT) // >
+#define US_QUES S(US_SLSH) // ?
+
+
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ` │ ¹ │ ² │ ³ │ ¤ │ € │ ^ │ ̛ │ ¾ │ ‘ │ ’ │ ¥ │ × │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ Ä │ Å │ É │ ® │ Þ │ Ü │ Ú │ Í │ Ó │ Ö │ « │ » │ ¬ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ Á │ ß │ Ð │ │ │ │ Ï │ Œ │ Ø │ ¶ │ ' │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ │ Æ │ │ © │ │ │ Ñ │ µ │ Ç │ ˙ │ ¿ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+
+/* Row 1 */
+#define US_DGRV ALGR(US_GRV) // ` (dead)
+#define US_SUP1 ALGR(US_1) // ¹
+#define US_SUP2 ALGR(US_2) // ²
+#define US_SUP3 ALGR(US_3) // ³
+#define US_CURR ALGR(US_4) // ¤
+#define US_EURO ALGR(US_5) // €
+#define US_DCIR ALGR(US_6) // ^ (dead)
+#define US_HORN ALGR(US_7) // ̛ (dead)
+#define US_OGON ALGR(US_8) // ˛ (dead)
+#define US_LSQU ALGR(US_9) // ‘
+#define US_RSQU ALGR(US_0) // ’
+#define US_YEN ALGR(US_MINS) // ¥
+#define US_MUL ALGR(US_EQL) // ×
+
+/* Row 2 */
+#define US_ADIA ALGR(US_Q) // Ä
+#define US_ARNG ALGR(US_W) // Å
+#define US_EACU ALGR(US_E) // É
+#define US_EDIA ALGR(US_R) // Ë
+#define US_THRN ALGR(US_T) // Þ
+#define US_UDIA ALGR(US_Y) // Ü
+#define US_UACU ALGR(US_U) // Ú
+#define US_IACU ALGR(US_I) // Í
+#define US_OACU ALGR(US_O) // Ó
+#define US_ODIA ALGR(US_P) // Ö
+#define US_LDAQ ALGR(US_LBRC) // «
+#define US_RDAQ ALGR(US_RBRC) // »
+#define US_NOT ALGR(US_BSLS) // ¬
+
+/* Row 3 */
+#define US_AACU ALGR(US_A) // Á
+#define US_SS ALGR(US_S) // ß
+#define US_ETH ALGR(US_D) // Ð
+#define US_IDIA ALGR(US_J) // Ï
+#define US_OE ALGR(US_K) // Œ
+#define US_OSTR ALGR(US_L) // Ø
+#define US_PILC ALGR(US_SCLN) // ¶
+#define US_ACUT ALGR(US_QUOT) // ´ (dead)
+
+/* Row 4 */
+#define US_AE ALGR(US_Z) // Æ
+#define US_OE_2 ALGR(US_X) // Œ
+#define US_COPY ALGR(US_C) // ©
+#define US_REGD ALGR(US_V) // ®
+#define US_NTIL ALGR(US_N) // Ñ
+#define US_MICR ALGR(US_M) // µ
+#define US_CCED ALGR(US_COMM) // Ç
+#define US_DOTA ALGR(US_DOT) // ˙ (dead)
+#define US_IQUE ALGR(US_SLSH) // ¿
+
+
+/* Shift+AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ~ │ ¡ │ ˝ │ ¯ │ £ │ ¸ │ ¼ │ ½ │ ¾ │ ˘ │ ° │ ̣ │ ÷ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ “ │ ” │ ¦ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ │ │ § │ │ │ │ │ │ │ │ ° │ " │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ │ │ │ ¢ │ │ │ │ │ │ ˇ │ ̉ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+
+/* Row 1 */
+#define US_DTIL S(ALGR(US_GRV)) // ~ (dead)
+#define US_IEXL S(ALGR(US_1)) // ¡
+#define US_DACU S(ALGR(US_2)) // ˝ (dead)
+#define US_MACR S(ALGR(US_3)) // ¯ (dead)
+#define US_PND S(ALGR(US_4)) // £
+#define US_CEDL S(ALGR(US_5)) // ¸ (dead)
+#define US_QRTR S(ALGR(US_6)) // ¼
+#define US_HALF S(ALGR(US_7)) // ½
+#define US_TQTR S(ALGR(US_8)) // ¾
+#define US_BREV S(ALGR(US_9)) // ˘ (dead)
+#define US_RNGA S(ALGR(US_0)) // ° (dead)
+#define US_DOTB S(ALGR(US_MINS)) // ̣ (dead)
+#define US_DIV S(ALGR(US_EQL)) // ÷
+
+/* Row 2 */
+#define US_LDQU S(ALGR(US_LBRC)) // “
+#define US_RDQU S(ALGR(US_RBRC)) // ”
+#define US_BRKP S(ALGR(US_BSLS)) // ¦
+
+/* Row 3 */
+#define US_SECT S(ALGR(US_S)) // §
+#define US_DEG S(ALGR(US_SCLN)) // °
+#define US_DIAE S(ALGR(US_QUOT)) // ¨ (dead)
+
+/* Row 4 */
+#define US_CENT S(ALGR(US_C)) // ¢
+#define US_CARN S(ALGR(US_DOT)) // ˇ (dead)
+#define US_HOKA S(ALGR(US_SLSH)) // ̉ (dead)
diff --git a/src/keysym/mouse.h b/src/keysym/mouse.h
new file mode 100644
index 0000000..53d2a23
--- /dev/null
+++ b/src/keysym/mouse.h
@@ -0,0 +1,50 @@
+#pragma once
+
+#include "keysym.h"
+
+#define KS_MS_U KS_MS_UP
+#define KS_MS_D KS_MS_DOWN
+#define KS_MS_L KS_MS_LEFT
+#define KS_MS_R KS_MS_RIGHT
+#define KS_BTN1 KS_MS_BTN1
+#define KS_BTN2 KS_MS_BTN2
+#define KS_BTN3 KS_MS_BTN3
+#define KS_BTN4 KS_MS_BTN4
+#define KS_BTN5 KS_MS_BTN5
+#define KS_BTN6 KS_MS_BTN6
+#define KS_BTN7 KS_MS_BTN7
+#define KS_BTN8 KS_MS_BTN8
+#define KS_WH_U KS_MS_WH_UP
+#define KS_WH_D KS_MS_WH_DOWN
+#define KS_WH_L KS_MS_WH_LEFT
+#define KS_WH_R KS_MS_WH_RIGHT
+#define KS_ACL0 KS_MS_ACCEL0
+#define KS_ACL1 KS_MS_ACCEL1
+#define KS_ACL2 KS_MS_ACCEL2
+
+enum keysym_mouse {
+ /* Mouse Buttons */
+ KC_MS_UP = KEYSYM_MOUSE_MASK,
+ KC_MS_DOWN,
+ KC_MS_LEFT,
+ KC_MS_RIGHT,
+ KC_MS_BTN1,
+ KC_MS_BTN2,
+ KC_MS_BTN3,
+ KC_MS_BTN4,
+ KC_MS_BTN5,
+ KC_MS_BTN6,
+ KC_MS_BTN7,
+ KC_MS_BTN8,
+
+ /* Mouse Wheel */
+ KC_MS_WH_UP,
+ KC_MS_WH_DOWN,
+ KC_MS_WH_LEFT,
+ KC_MS_WH_RIGHT,
+
+ /* Acceleration */
+ KC_MS_ACCEL0,
+ KC_MS_ACCEL1,
+ KC_MS_ACCEL2
+};
diff --git a/src/keysym/system.c b/src/keysym/system.c
new file mode 100644
index 0000000..2aa9be9
--- /dev/null
+++ b/src/keysym/system.c
@@ -0,0 +1,20 @@
+#include "keysym/system.h"
+
+#include "hid/system.h"
+
+#include <stdint.h>
+
+uint16_t
+keysym_to_system(uint32_t keysym)
+{
+ switch (keysym) {
+ case KS_SYSTEM_POWER:
+ return SYSTEM_POWER_DOWN;
+ case KS_SYSTEM_SLEEP:
+ return SYSTEM_SLEEP;
+ case KS_SYSTEM_WAKE:
+ return SYSTEM_WAKE_UP;
+ default:
+ return 0;
+ }
+}
diff --git a/src/keysym/system.h b/src/keysym/system.h
new file mode 100644
index 0000000..f0174f5
--- /dev/null
+++ b/src/keysym/system.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "keysym.h"
+
+#include <stdint.h>
+
+/* Generic Desktop Page (0x01) */
+#define KS_PWR KS_SYSTEM_POWER
+#define KS_SLEP KS_SYSTEM_SLEEP
+#define KS_WAKE KS_SYSTEM_WAKE
+
+enum keysym_system {
+ KS_SYSTEM_POWER = KEYSYM_SYSTEM_MASK,
+ KS_SYSTEM_SLEEP,
+ KS_SYSTEM_WAKE,
+};
+
+uint16_t keysym_to_system(uint32_t keysym);