From f388493694362c65ad7b3e2505a753439e46f0c1 Mon Sep 17 00:00:00 2001 From: MaxMalRichtig Date: Fri, 23 Mar 2018 20:35:10 +0100 Subject: [PATCH] first version for malrichtig ergodox layout --- assets/L0_LEFT.bmp | Bin 0 -> 642 bytes assets/L0_RIGHT.bmp | Bin 0 -> 642 bytes assets/L1_LEFT.bmp | Bin 0 -> 642 bytes assets/L1_RIGHT.bmp | Bin 0 -> 642 bytes assets/L2_LEFT.bmp | Bin 0 -> 642 bytes assets/L2_RIGHT.bmp | Bin 0 -> 642 bytes assets/L2_RIGHT_NLK_OFF.bmp | Bin 0 -> 642 bytes assets/L2_RIGHT_NLK_ON.bmp | Bin 0 -> 642 bytes assets/LEFT_MAP.xcf | Bin 0 -> 9602 bytes assets/RIGHT_MAP.xcf | Bin 0 -> 11767 bytes config.h | 102 ++++++++++ custom_visualizer.h | 185 ++++++++++++++++++ keymap.c | 366 ++++++++++++++++++++++++++++++++++++ readme.md | 32 ++++ res/bitmaps.c | 272 +++++++++++++++++++++++++++ res/bitmaps.h | 35 ++++ rules.mk | 1 + visualizer.c | 55 ++++++ 18 files changed, 1048 insertions(+) create mode 100644 assets/L0_LEFT.bmp create mode 100644 assets/L0_RIGHT.bmp create mode 100644 assets/L1_LEFT.bmp create mode 100644 assets/L1_RIGHT.bmp create mode 100644 assets/L2_LEFT.bmp create mode 100644 assets/L2_RIGHT.bmp create mode 100644 assets/L2_RIGHT_NLK_OFF.bmp create mode 100644 assets/L2_RIGHT_NLK_ON.bmp create mode 100644 assets/LEFT_MAP.xcf create mode 100644 assets/RIGHT_MAP.xcf create mode 100644 config.h create mode 100644 custom_visualizer.h create mode 100644 keymap.c create mode 100644 readme.md create mode 100644 res/bitmaps.c create mode 100644 res/bitmaps.h create mode 100644 rules.mk create mode 100644 visualizer.c diff --git a/assets/L0_LEFT.bmp b/assets/L0_LEFT.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b8f73141a293ff91a6f1adcbb7f0d1de751ed28c GIT binary patch literal 642 zcma)(u};G<5QgulAx0qTrk%kpNaYcz6jd<_q6>&JGay(Qs93^8YZZ~c1{-ftBnBo} z87=5eRTwfC_#5_-?(ORrik^x@KLb53<4r)v{Bzp5GbGRk$Z zc<<(`9TD8kF@+^-1gI+!^+pVFka4ADqF%8I-RXT%TadgyKn$3FH#*I1jGV|hbR~DT zA5Ns5ITg>tSYE}3rKa3pdjjg$GMpEzBPvo9te?0B?6^3T0+HvmhVY-)W642f<4Zh1R-|p2R+aZxTf8 zP3Rj0TIf}upw8~5rANOov-$1J?0zK4&6I-G6!Qbd1VdmDe5|luKXPGOO(fTMPpj0gBy8?E0O&X#De?(f0cY5Qb;NN=72)!~=zhjHjTbS{abA6O5wZC)kOWHWmh(v+}Ye5Gxyd8-GYr z2zLI31MRi2ND+*4yHPBiW9Ig`cjmp_t?t?!xUf<$Boj%JRPwkGeX`&)Yt6E{b#&#$ z|JQ8pZwv;5zxcc6Jz185B-;T%(C0&W(XAP>tsKB6Q#1MD=mfUeRHe!HhX=3{(XCRi z4fz(dg(0N-286~j3S$Ym_a+EmA6b=9BYA(`*)o)|lvDcC^IQ!!kscaado~OkXsX=P zD*sG&&D3EX&3+;lxI}hC^c^%unI#C@IfiYdyN+=FCH=Cq49nsV*ZBldbZK-@PE(1fWe6|(EAaBv!%v#xsc9M#ifGBs$r^UGNoc17>Rpo;IQ?FmOR zFS7~}nuH89;y>gzIa6P-2z|PVQ(d{7PvTeEA6POYfu{C?X@%^$40^io!75Z(O#8i< o1Fcty)zt8Q)>EAuU2KT%Tn&JZ+K(1?XJf7pC)pk4A}C3vj@NWwwv6ZrNT=hUI<_c%Rj~81g=( zm6gpOqD#SXkCQuT%U~1yx1WYQQgx_tn6cuLx>L`d!x| zs*u>~GqGtW5$G{-3Us~_fqtX@RKM7KSndQ>SDCiz%*gdNh)Qn$FlaYAfh<`76ZJ-* OOZE-GI$wXym+%XQ_-Yye literal 0 HcmV?d00001 diff --git a/assets/L2_LEFT.bmp b/assets/L2_LEFT.bmp new file mode 100644 index 0000000000000000000000000000000000000000..87fe7b8b123bf957a6406adee2c365983edddd02 GIT binary patch literal 642 zcma)%u};G<5Qfi9M1nwxBRVi-uqy^eMmA6ti7pKA1h6wy>Q2)#P!^skQWY=@cwiHq)XpMT%^u75r4khLk|1H6VSxWH!(`q6=NzRKRex*a+3|B>rLGsbvC zRtHKBUNigmnZE;0z#B?7(DNlOMwZ8>7PQ|RpbX5`cqU7WXhBY=F&_}Eh!Xvd#tvzS zja6HZV=y&mz8|=qhu^cKaKqNn|YviewFe?zaO$o$$VkZCa~NzOn!gf z(2757DbW9BaqKnzp}uoUQYUYjjMZ?WDYYEO1$Z`5lz$GON3oEPDg~36QK_5fy|Ow_ qKQwv}bgG0rQ7hE56}ns96y09^;yAloKD}m#<$82)^<5CVG|0C5%5k#* literal 0 HcmV?d00001 diff --git a/assets/L2_RIGHT.bmp b/assets/L2_RIGHT.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e42d9896b33306ca726680df7e91c712d5fa6bba GIT binary patch literal 642 zcma)(u}Z{15QhJ3Vpt>OHrR*=ZX<}5G&Jca^$#z44aX$)8Wt+R`$YfhB&tUlVDf{_Wb>FroXd^k)yPK zfmJq*3YyZg9tTbwE9$qU@B4o2eJQ`65BE*|6MKE_?&sMZ!<*PzA`tfi)+@^B)~jVMP7>+sy|W}1h-jHEW*Sf_-x1R M*T-8rKBM!^59NbD`v3p{ literal 0 HcmV?d00001 diff --git a/assets/L2_RIGHT_NLK_OFF.bmp b/assets/L2_RIGHT_NLK_OFF.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6f81b33c39cd8c7e7d51462a074bcc0e8d6911fc GIT binary patch literal 642 zcmZ?rZDL{ogC-!E1H=tLtN_G}KnMmvd0}n{1}Oz$C-_R>d8n8OLjiLGlKdZr6|4?GK0+R%9;O7QAI8T;3!q7GK=}$lx&eq;fEWZE zpcv+>9}Eo44}fCOFoVm3H37vHfVcsO!4e>vNFWGN$EX1HKNpnm0Odp7!}tT$|BMdM z@PWz0^h5a|Q&7SeVl0?sV*TLokcov)fW@JQ!TtaP6DxzGAR~()kUxpR63Ayc0OKzN z$uqYo6h1uA&L?A2u#kbF1t>4z$jHzlDB$7%;j0R`0y%+#E-sT87|t*-o_S#L;Q8S` LJ`2kp28Id%KZh{$ literal 0 HcmV?d00001 diff --git a/assets/L2_RIGHT_NLK_ON.bmp b/assets/L2_RIGHT_NLK_ON.bmp new file mode 100644 index 0000000000000000000000000000000000000000..001dbbcd52cd480d5f742fd67065251fbca0a858 GIT binary patch literal 642 zcma)(u}Z{15QhKktzlJ2CfFzlZX;M)o*;#y1ZyLHz&j z>iTQ5+4OPCPeE8G_9wQ>Y=q|CPJE0E;gP$H8IB1yZ+p6eR#A8LjnK;YY9Pfq>fZTX zm|x`G6sprzCn;CYzU=r5%5$8mfg0G{#5=<+RzWhM;LP{Wei`_1Yrc3&&|H5dYX29C zE~L>wbK2f7j{Ok#+w%9r{kS=}U(S!Z@4v_EKj!D-#m=f+3Yn2CXSlM=7!`>unCG6Q zjl6I?nCj=Hea((9>jlU_NE#)W7F3miPwATBzNo4>j`)f`+F|?o{+10dX2|gk8?!%a literal 0 HcmV?d00001 diff --git a/assets/LEFT_MAP.xcf b/assets/LEFT_MAP.xcf new file mode 100644 index 0000000000000000000000000000000000000000..3fffdcb7fafc5168541c70a90cabbb96c9f76716 GIT binary patch literal 9602 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 literal 0 HcmV?d00001 diff --git a/assets/RIGHT_MAP.xcf b/assets/RIGHT_MAP.xcf new file mode 100644 index 0000000000000000000000000000000000000000..54f4d88cc4b6e8fe63f8d896986dd94bbb58843f GIT binary patch literal 11767 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 Zi})9$88#6;FOz_CFE`zk&b& literal 0 HcmV?d00001 diff --git a/config.h b/config.h new file mode 100644 index 0000000..56341df --- /dev/null +++ b/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2015 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef INFINITY_ERGODOX_CONFIG_H +#define INFINITY_ERGODOX_CONFIG_H + + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6464 +#define DEVICE_VER 0x0001 +/* in python2: list(u"whatever".encode('utf-16-le')) */ +/* at most 32 characters or the ugly hack in usb_main.c borks */ +#define MANUFACTURER "TMK" +#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00' +#define PRODUCT "Infinity keyboard/TMK" +#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00' + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_MAX_SPEED 10 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 60 + +#define TAPPING_TOGGLE 2 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +#define PERMISSIVE_HOLD +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \ + keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \ +) + +/* key matrix size */ +#define MATRIX_ROWS 18 +#define MATRIX_COLS 5 +#define LOCAL_MATRIX_ROWS 9 + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 5 + +#define LED_BRIGHTNESS_LO 100 +#define LED_BRIGHTNESS_HI 255 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 2 + +#define SERIAL_LINK_BAUD 562500 +#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1) + +#define VISUALIZER_USER_DATA_SIZE 16 + +//#define FORCE_NKRO + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/custom_visualizer.h b/custom_visualizer.h new file mode 100644 index 0000000..ba5dffe --- /dev/null +++ b/custom_visualizer.h @@ -0,0 +1,185 @@ +/* Copyright 2017 Fred Sundvik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MALRICHTIG_CUSTOM_VISUALIZER_H_ +#define MALRICHTIG_CUSTOM_VISUALIZER_H_ + +// Currently we are assuming that both the backlight and LCD are enabled +// But it's entirely possible to write a custom visualizer that use only +// one of them +#ifndef LCD_BACKLIGHT_ENABLE +#error This visualizer needs that LCD backlight is enabled +#endif + +#ifndef LCD_ENABLE +#error This visualizer needs that LCD is enabled +#endif + +#include "visualizer.h" +#include "visualizer_keyframes.h" +#include "lcd_keyframes.h" +#include "lcd_backlight_keyframes.h" +#include "system/serial_link.h" +#include "led.h" +#include "default_animations.h" +#include "res/bitmaps.h" + +#include + +static const uint32_t logo_background_color = LCD_COLOR(0x00, 0x00, 0xFF); +static const uint32_t initial_color = LCD_COLOR(0, 0, 0); + +static bool initial_update = true; + +bool custom_lcd_keyframe_draw_layer(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + // Read the uGFX documentation for information how to use the displays + // http://wiki.ugfx.org/index.php/Main_Page + gdispClear(White); + + // You can use static variables for things that can't be found in the animation + // or state structs, here we use the image + + if (state->status.layer & 0x8) { + // TODO: make some nice image + } + else if (state->status.layer & 0x4) { + if (is_serial_link_master()) { + gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)image_data_L2_LEFT); + } + else { + if (state->status.leds & (1u << USB_LED_NUM_LOCK)) { + gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)image_data_L2_RIGHT_NLK_ON); + } + else { + gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)image_data_L2_RIGHT_NLK_OFF); + } + } + } + else if (state->status.layer & 0x2) { + if (is_serial_link_master()) { + gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)image_data_L1_LEFT); + } + else { + gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)image_data_L1_RIGHT); + } + } + else { + if (is_serial_link_master()) { + gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)image_data_L0_LEFT); + } + else { + gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)image_data_L0_RIGHT); + } + } + + return false; +} + +// Feel free to modify the animations below, or even add new ones if needed + +static keyframe_animation_t lcd_layer_display = { + .num_frames = 1, + .loop = false, + .frame_lengths = {gfxMillisecondsToTicks(0)}, + .frame_functions = {lcd_keyframe_display_layer_and_led_states} +}; + +// The color animation animates the LCD color when you change layers +static keyframe_animation_t color_animation = { + .num_frames = 2, + .loop = false, + // Note that there's a 200 ms no-operation frame, + // this prevents the color from changing when activating the layer + // momentarily + .frame_lengths = {gfxMillisecondsToTicks(50), gfxMillisecondsToTicks(500)}, + .frame_functions = {keyframe_no_operation, lcd_backlight_keyframe_animate_color}, +}; + +// Don't worry, if the startup animation is long, you can use the keyboard like normal +// during that time +static keyframe_animation_t custom_bitmap_layer_change = { + .num_frames = 1, + .loop = false, + .frame_lengths = {gfxMillisecondsToTicks(500)}, + .frame_functions = {custom_lcd_keyframe_draw_layer}, +}; + +void initialize_user_visualizer(visualizer_state_t* state) { + // The brightness will be dynamically adjustable in the future + // But for now, change it here. + lcd_backlight_brightness(130); + state->current_lcd_color = initial_color; + state->target_lcd_color = logo_background_color; + initial_update = true; + start_keyframe_animation(&default_startup_animation); +} + + +// This function should be implemented by the keymap visualizer +// Don't change anything else than state->target_lcd_color and state->layer_text as that's the only thing +// that the simple_visualizer assumes that you are updating +// Also make sure that the buffer passed to state->layer_text remains valid until the previous animation is +// stopped. This can be done by either double buffering it or by using constant strings +static void get_visualizer_layer_and_color(visualizer_state_t* state); + +void update_user_visualizer_state(visualizer_state_t* state, visualizer_keyboard_status_t* prev_status) { + // Add more tests, change the colors and layer texts here + // Usually you want to check the high bits (higher layers first) + // because that's the order layers are processed for keypresses + // You can for check for example: + // state->status.layer + // state->status.default_layer + // state->status.leds (see led.h for available statuses) + + uint32_t prev_color = state->target_lcd_color; + const char* prev_layer_text = state->layer_text; + + get_visualizer_layer_and_color(state); + + if (initial_update || prev_color != state->target_lcd_color) { + start_keyframe_animation(&color_animation); + } + + if (strcmp(state->layer_text, "") == 0) { + start_keyframe_animation(&custom_bitmap_layer_change); + } + else { + if (initial_update || prev_layer_text != state->layer_text) { + start_keyframe_animation(&lcd_layer_display); + } + } + // You can also stop existing animations, and start your custom ones here + // remember that you should normally have only one animation for the LCD + // and one for the background. But you can also combine them if you want. +} + +void user_visualizer_suspend(visualizer_state_t* state) { + state->layer_text = "Suspending..."; + uint8_t hue = LCD_HUE(state->current_lcd_color); + uint8_t sat = LCD_SAT(state->current_lcd_color); + state->target_lcd_color = LCD_COLOR(hue, sat, 0); + start_keyframe_animation(&default_suspend_animation); +} + +void user_visualizer_resume(visualizer_state_t* state) { + state->current_lcd_color = initial_color; + state->target_lcd_color = logo_background_color; + initial_update = true; + start_keyframe_animation(&default_startup_animation); +} + +#endif /* MALRICHTIG_CUSTOM_VISUALIZER_H_ */ diff --git a/keymap.c b/keymap.c new file mode 100644 index 0000000..7f76212 --- /dev/null +++ b/keymap.c @@ -0,0 +1,366 @@ +// German keymap derived from "german", but more closely resembling the German layout of the Kinesis Ergo Elan. +// +// chschmitz, 2016-01-27 +#include QMK_KEYBOARD_H +#include "debug.h" +#include "action_layer.h" +#include "keymap_german.h" +#include "lcd_backlight.h" + +// Layer names +#define XBASE 0 // default layer +#define SYMB 1 // symbol layer +#define MOUS 2 // mouse and numbers +#define MDIA 3 // media keys + +#define _STEP 25 // increase / decrease stepsize + +/* +#define COUNT(x) (sizeof (x) / sizeof (*(x))) + +const uint16_t PROGMEM auto_tap_keys[] = { + DE_LESS, + DE_MORE, +}; +*/ + +//Tap Dance Declarations +enum { + TD_L_SHLCK = 0, + TD_R_SHLCK, + TD_ESCCLS, + TD_ALTTAB +}; + +enum custom_layers { + _BASE, + _LOWER, + _RAISE, + _NUMS +}; + +enum custom_keycodes { + CK_CUT = SAFE_RANGE, + CK_COPY, + CK_PASTE, + DIS_COL, + DIS_IDEC, + DIS_IINC, + DIS_SDEC, + DIS_SINC, + DIS_TOG, + BASE, + LOWER, + RAISE, + NUMS +}; + +uint8_t _hue = 0; +uint8_t _saturation = 0; +uint8_t _intensity = 0; +uint8_t _enable = 0; + +static bool alttab_sequence_start = true; + +void td_alttab_sequence (qk_tap_dance_state_t *state, void *user_data) { + if (state->count <= 2) { + if (alttab_sequence_start) { + register_code(KC_LALT); + alttab_sequence_start = false; + } + SEND_STRING(SS_TAP(X_TAB)); + } + else { + unregister_code(KC_LALT); + alttab_sequence_start = true; + reset_tap_dance (state); + } +} + +void td_escape_close (qk_tap_dance_state_t *state, void *user_data) { + if (state->count <= 2) { + register_code(KC_ESC); + unregister_code(KC_ESC); + } + else { + SEND_STRING(SS_DOWN(X_LALT)SS_TAP(X_F4)SS_UP(X_LALT)); + } +} + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_L_SHLCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [TD_R_SHLCK] = ACTION_TAP_DANCE_DOUBLE(KC_RSFT, KC_CAPS), + [TD_ESCCLS] = ACTION_TAP_DANCE_FN(td_escape_close), + [TD_ALTTAB] = ACTION_TAP_DANCE_FN(td_alttab_sequence) +// Other declarations would go here, separated by commas, if you have them +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * X'es mark the spots where this is different from the "german" layout which it is based on. + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |X Esc X| 1 | 2 | 3 | 4 | 5 |X ` X| |XPRSCX| 6 | 7 | 8 | 9 | 0 | ß | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * |X Tab X| Q | W | E | R | T |X L1 X| |X L1 X| Z | U | I | O | P | Ü | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Caps | A | S | D | F | G |------| |------| H | J | K | L | Ö | Ä/L2 | + * |--------+------+------+------+------+------|X L2 X| |X L2 X|------+------+------+------+------+--------| + * | LShift | Y | X | C | V | B | | | | N | M | , | . |X - X| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |XLGuiX|X ^ X|X < X|XLEFTX|XRIGHT| |XDownX|X Up X|X # X|X + X|XRGuiX| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |XCTRLX|XALTX | | Alt |Ctrl/Esc| + * ,------+------+------| |------+--------+------. + * |XXX |XXX | Home | | PgUp |XXX |XXX | + * | Bkspc|Del |------| |------| Enter | Space| + * | | | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[_BASE] = LAYOUT_ergodox( // layer 0 : default + // left hand + TD(TD_ESCCLS),KC_1, KC_2, KC_3, KC_4, KC_5, CK_CUT, + TD(TD_ALTTAB),KC_Q, KC_W, KC_E, KC_R, KC_T, CK_COPY, + KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LALT, DE_Y, KC_X, KC_C, KC_V, KC_B, CK_PASTE, + KC_LGUI, KC_DEL, KC_PGDN, KC_PGUP, LOWER, + KC_LEFT, KC_RGHT, + KC_HOME, + KC_SPC,TD(TD_L_SHLCK),KC_TAB, + // right hand + KC_PSCR, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DOT, + KC_PGUP, DE_Z, KC_U, KC_I, KC_O, KC_P, DE_SS, + KC_H, KC_J, KC_K, KC_L, DE_OE, RCTL_T(DE_UE), + KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, DE_MINS, RALT_T(DE_AE), + RAISE, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, + KC_DOWN, KC_UP, + KC_END, + KC_ENT, TD(TD_R_SHLCK), KC_BSPC + ), +// [BASE] = LAYOUT_ergodox( // layer 0 : default +// // left hand +// KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MPLY, +// KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), +// KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, +// KC_LSFT, DE_Y, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), +// LT(SYMB,DE_LESS),CTL_T(DE_HASH), DE_ACUT, DE_MINS, DE_PLUS, +// ALT_T(KC_APP), KC_LGUI, +// KC_HOME, +// KC_SPC,KC_BSPC,KC_END, +// // right hand +// KC_MNXT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, +// TG(2), DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, +// KC_H, KC_J, KC_K, KC_L, DE_OE, LT(MDIA,DE_AE), +// MEH_T(KC_NO),KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(DE_MINS), KC_RSFT, +// KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_FN1, +// KC_LALT,CTL_T(KC_ESC), +// KC_PGUP, +// KC_PGDN,KC_TAB, KC_ENT +// ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | @ | € | [ | ] | # | | | | * | \ | / | ` | ´ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | & | | | ( | ) | $ |------| |------| + | ! | ? | " | ' | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | ~ | ^ | { | } | % | | | | = | < | > | § | ° | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[_LOWER] = LAYOUT_ergodox( + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, DE_AT, DE_EURO, DE_LBRC, DE_RBRC, DE_HASH, KC_TRNS, + KC_TRNS, DE_AMPR, DE_PIPE, DE_LPRN, DE_RPRN, DE_DLR, + KC_TRNS, DE_TILD, DE_CIRC, DE_LCBR, DE_RCBR, DE_PERC, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, DE_ASTR, DE_BSLS, DE_SLSH, DE_GRV, DE_ACUT, KC_TRNS, + DE_PLUS, DE_EXLM, DE_QST, DE_DQOT, DE_QUOT, KC_TRNS, + KC_TRNS, DE_EQL, DE_LESS, DE_MORE, DE_PARA, DE_RING, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | Lclk | MsUp | Rclk | | | | | |VolDwn| Mute |VolUp | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------| |------| | Prev | Stop | Play | Next | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |WhRght|WhDown| WhUp |WhLeft|WhClk | | | |BwSrch|BwBack|BwHome|BwRefr|BwFwd | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | |MsAcl0|MsAcl1|MsAcl2| | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | |Brwser|Brwser| + * | Lclk | Rclk |------| |------|Back |Forwd | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MOUSE AND NUMBERS +[_RAISE] = LAYOUT_ergodox( + KC_TRNS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F11, + KC_TRNS, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO , KC_TRNS, + KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5, + KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_BTN1, KC_BTN2, KC_TRNS, + // right hand + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, + KC_TRNS, KC_PCMM, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_PAST, + KC_PDOT, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSLS, + KC_TRNS, KC_P0, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PEQL, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), + +// MEDIA AND KEYBOARD +[_NUMS] = LAYOUT_ergodox( + // left hand + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, + KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, + KC_TRNS,KC_1, KC_2, KC_3, KC_4, KC_5, + KC_TRNS,DIS_SDEC, DIS_SINC, KC_NO, KC_NO, KC_NO, DEBUG, + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, + KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO, + KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_WBAK, KC_WFWD +), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + switch(keycode) { + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _NUMS); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _NUMS); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _NUMS); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _NUMS); + } + return false; + break; + + case CK_CUT: + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("x")); + } + return false; break; + case CK_COPY: + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("c")); + } + return false; break; + case CK_PASTE: + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("v")); + } + return false; break; + + case DIS_TOG: + _enable = !_enable; + return false; break; + + case DIS_COL: + _hue = _hue - _STEP; + return false; break; + + case DIS_IDEC: + _intensity = _intensity - _STEP < 0 ? 0 : _intensity - _STEP; + return false; break; + case DIS_IINC: + _intensity = _intensity + _STEP > 255 ? 255 : _intensity + _STEP; + return false; break; + + case DIS_SDEC: + _saturation = _saturation - _STEP < 0 ? 0 : _saturation - _STEP; + return false; break; + case DIS_SINC: + _saturation = _saturation + _STEP > 255 ? 255 : _saturation + _STEP; + return false; break; + } + return true; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + switch (layer) { + case SYMB: + //ergodox_right_led_1_on(); + break; + case MOUS: + //ergodox_right_led_2_on(); + break; + case MDIA: + //ergodox_right_led_3_on(); + break; + default: + if(_enable) { + //lcd_backlight_color(_hue, _saturation, _intensity); + //ergodox_right_led_2_set(200); + } + break; + } + +}; diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..b4af36c --- /dev/null +++ b/readme.md @@ -0,0 +1,32 @@ +# German Layout for the ErgoDox + +Based on 'german-kinergo' by Christoph Schmitz, as well as the "german" layout from the +[qmk_firmware](https://github.com/qmk/qmk_firmware). + + +### Default Layer +A basic QWERTZ layout with some nice tweaks and SHIFT on the thumbs + + +### Code & Symbol Layer +All the symbols in one layer + +TODO: QKM has some problems with rapid shifted/non-shifted keystrokes (like '<> , +* , .: , etc.') + + +### Mouse & Number Layer +Mouse control and some 10key + + +### Keyboard & Media Layer +Controls for the ergodox and some basic media-keys + + +# Compile & Build +Build the layout: +`make ergodox_infinity:malrichtig MASTER=right` + +Flash it onto the keyboard(s): +`sudo make ergodox_infinity:malrichtig:dfu-util MASTER=right` + + diff --git a/res/bitmaps.c b/res/bitmaps.c new file mode 100644 index 0000000..84f6a3d --- /dev/null +++ b/res/bitmaps.c @@ -0,0 +1,272 @@ + +/******************************************************************************* +* image +* filename: unsaved +* name: RIGHT_MAP +* +* preset name: Monochrome +* data block size: 8 bit(s), uint8_t +* RLE compression enabled: no +* conversion type: Monochrome, Edge 114 +* bits per pixel: 1 +* +* preprocess: +* main scan direction: top_to_bottom +* line scan direction: forward +* inverse: no +*******************************************************************************/ + +/* + typedef struct { + const uint8_t *data; + uint16_t width; + uint16_t height; + uint8_t dataSize; + } tImage; +*/ +#include "bitmaps.h" + +const uint8_t image_data_L0_LEFT[512] = { + 0x80, 0xff, 0xff, 0xf3, 0x8f, 0x1f, 0x9c, 0x1f, 0xef, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xff, 0xff, 0xfb, 0x76, 0xef, 0x5d, 0xff, 0xef, 0xee, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xc3, 0x1f, 0xfb, 0xf7, 0xee, 0xdc, 0x3f, 0xef, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0xbe, 0xef, 0xfb, 0xef, 0x9d, 0xdf, 0xdf, 0xef, 0xf9, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xc6, 0xff, 0xfb, 0x9f, 0xec, 0x0f, 0xdf, 0xef, 0xfe, 0xfe, 0xf7, 0xf0, 0x1f, 0x03, 0x07, + 0xbf, 0xfa, 0xef, 0xfb, 0x7e, 0xef, 0xdd, 0xdf, 0xef, 0xee, 0xfe, 0xf7, 0xf7, 0xff, 0x7d, 0xdf, + 0x80, 0x87, 0x1f, 0xfb, 0x07, 0x1f, 0xde, 0x3f, 0xe0, 0x31, 0xff, 0xf7, 0xf7, 0xff, 0x7d, 0xdf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf0, 0xff, 0x03, 0xdf, + 0xf7, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xff, 0x77, 0xdf, + 0xeb, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xff, 0x7b, 0xdf, + 0xeb, 0xbe, 0xff, 0xc3, 0x77, 0x1d, 0x3b, 0xff, 0x87, 0xff, 0xfe, 0xf0, 0x10, 0x1f, 0x7d, 0x07, + 0xdd, 0x8e, 0x1f, 0xbb, 0x76, 0xec, 0xd8, 0xff, 0x7b, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc1, 0xbe, 0xef, 0xbb, 0x76, 0x0d, 0xfb, 0xfe, 0xfe, 0x1b, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbe, 0xba, 0xef, 0xc3, 0x56, 0xfd, 0xfb, 0xbe, 0xfe, 0xeb, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbe, 0xc6, 0x1f, 0xfb, 0x27, 0x0d, 0xfc, 0x7e, 0xfe, 0xec, 0x3e, 0xf8, 0x37, 0xdf, 0x7d, 0xc7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0x1f, 0xbf, 0xf7, 0xd7, 0xdf, 0x7d, 0xbb, + 0xe1, 0xbe, 0xff, 0xff, 0xff, 0xee, 0x3f, 0xff, 0x86, 0xf8, 0x7f, 0xf7, 0xf7, 0xdf, 0x7d, 0x7d, + 0xde, 0xbe, 0xff, 0xff, 0xff, 0xed, 0xdf, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0x30, 0x1f, 0x01, 0x7d, + 0xbf, 0xbe, 0xff, 0xc7, 0x87, 0xed, 0xfc, 0x3f, 0xff, 0xff, 0xfe, 0xff, 0xd7, 0xdf, 0x7d, 0x7d, + 0xbf, 0x8e, 0xff, 0xb7, 0x7f, 0x0c, 0x7b, 0xbf, 0xff, 0xff, 0xfe, 0xf7, 0xd7, 0xdf, 0x7d, 0xbb, + 0xbf, 0xbe, 0xff, 0xb7, 0x8e, 0xed, 0xf8, 0x3e, 0x07, 0xfb, 0xfe, 0xf8, 0x37, 0xdf, 0x7d, 0xc7, + 0xde, 0xba, 0xff, 0xb7, 0xf6, 0xed, 0xff, 0xbe, 0xfb, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xc6, 0xff, 0xc3, 0x0f, 0x0d, 0xf8, 0x7e, 0xfb, 0x0b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfa, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0x07, 0x1b, 0xff, 0xff, 0xff, 0xff, 0x01, 0x0f, + 0xeb, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0xff, 0xeb, 0xbf, 0xff, 0xff, 0xff, 0xef, 0x77, + 0xeb, 0xaf, 0xff, 0xbb, 0x77, 0x1d, 0xdb, 0xfe, 0xfe, 0x1c, 0x7e, 0xff, 0xff, 0xff, 0xef, 0x77, + 0xdd, 0xa3, 0xff, 0xbb, 0xae, 0xed, 0xd8, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x03, + 0xc1, 0xaf, 0xff, 0xc3, 0xde, 0xfe, 0xbb, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x7d, + 0xbe, 0xae, 0xff, 0xfb, 0xae, 0xee, 0xbb, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x7d, + 0xbe, 0xb1, 0xff, 0x87, 0x77, 0x1f, 0x78, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +const uint8_t image_data_L0_RIGHT[512] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xfe, 0x38, 0x38, 0xf1, 0xf3, 0xfc, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xff, 0xfd, 0xdf, 0xb7, 0x6e, 0xed, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xec, 0x31, 0xfd, 0xff, 0x77, 0x6e, 0xde, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xeb, 0xee, 0xfc, 0x3f, 0x78, 0xf0, 0xde, 0xfd, 0x8f, 0xff, + 0x83, 0xbe, 0xfb, 0xe8, 0x1f, 0x78, 0x1c, 0x6f, 0xfd, 0xde, 0xf7, 0x7e, 0xde, 0xfd, 0xf7, 0xff, + 0xbd, 0x9e, 0xfb, 0xeb, 0xef, 0x7b, 0xff, 0xae, 0xfd, 0xde, 0xf7, 0x7e, 0xed, 0xfd, 0x77, 0xff, + 0xbe, 0xae, 0xfb, 0xeb, 0xef, 0xfb, 0xf8, 0x71, 0xfe, 0x3d, 0xf8, 0xfe, 0xf3, 0xfd, 0x8f, 0xff, + 0xbe, 0xb6, 0xfb, 0xeb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbe, 0xba, 0xfb, 0xe8, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xff, + 0xbd, 0xbc, 0xfd, 0xdb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x83, 0xbe, 0xfe, 0x3b, 0xff, 0x78, 0x1f, 0xff, 0xfc, 0x1b, 0xbf, 0xf1, 0xc3, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xff, 0xff, 0xbb, 0xbd, 0xee, 0xdd, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xec, 0x2e, 0xff, 0x7b, 0xbd, 0xee, 0xdd, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xeb, 0xae, 0xfe, 0xfb, 0xbd, 0xee, 0xc3, 0xfd, 0xdf, 0xff, + 0x80, 0x83, 0xfc, 0x1b, 0xef, 0x78, 0x18, 0x2e, 0xfc, 0x1c, 0x7d, 0xf1, 0xdf, 0xfe, 0x3f, 0xff, + 0xbf, 0xbd, 0xfb, 0xeb, 0xef, 0xfb, 0xff, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xbe, 0xfb, 0xfb, 0xef, 0xfb, 0xf8, 0x71, 0xfd, 0xff, 0xf7, 0xfb, 0xeb, 0xfe, 0xbf, 0xff, + 0x87, 0xbe, 0xfc, 0x18, 0x0f, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xb7, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xbe, 0xff, 0xeb, 0xef, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0x7b, 0xe3, 0xfe, 0x3f, 0xff, + 0xbf, 0xbd, 0xfb, 0xeb, 0xef, 0x7f, 0xff, 0xff, 0xfc, 0x3f, 0xb6, 0xfb, 0xdd, 0xfd, 0xbf, 0xff, + 0x80, 0x83, 0xfc, 0x1b, 0xef, 0x78, 0x1f, 0xbf, 0xfd, 0xdf, 0xb1, 0xfb, 0xdd, 0xfd, 0xbf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xbf, 0xfd, 0xdb, 0xb6, 0xfb, 0xdd, 0xfd, 0xbf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xa1, 0xfd, 0xdc, 0x77, 0x7b, 0xe3, 0xfe, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xec, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x80, 0xbe, 0xf8, 0x7c, 0x1f, 0xf8, 0x1b, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xdf, + 0xbf, 0x9e, 0xfb, 0xbb, 0xef, 0xfb, 0xfb, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5e, 0xdf, + 0xbf, 0xae, 0xfb, 0xbb, 0xff, 0x7b, 0xfc, 0x2e, 0xfc, 0x39, 0x3f, 0xff, 0xff, 0xff, 0x5e, 0xdf, + 0x87, 0xb6, 0xf8, 0x1c, 0x1f, 0x7f, 0xff, 0xff, 0xfd, 0xda, 0xbf, 0xff, 0xc1, 0xfe, 0xee, 0xc7, + 0xbf, 0xba, 0xfb, 0xef, 0xef, 0x7f, 0xff, 0xff, 0xfd, 0xda, 0xbf, 0xff, 0xff, 0xfe, 0x0e, 0xdf, + 0xbf, 0xbc, 0xfb, 0xeb, 0xef, 0x7f, 0xff, 0xff, 0xfd, 0xda, 0xbf, 0xff, 0xff, 0xfd, 0xf6, 0xdd, + 0x80, 0xbe, 0xf8, 0x1c, 0x1f, 0x7f, 0xff, 0xff, 0xfd, 0xdb, 0xbc, 0xf3, 0xff, 0xfd, 0xf6, 0xe3, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +const uint8_t image_data_L1_LEFT[512] = { + 0x80, 0xff, 0xff, 0xf3, 0xe3, 0x8f, 0x98, 0x3f, 0x87, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xff, 0xff, 0xfb, 0xdd, 0x77, 0x5b, 0xff, 0x7b, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xc3, 0x1f, 0xfb, 0xfd, 0xf6, 0xd8, 0x7e, 0xfe, 0xeb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x87, 0xbe, 0xef, 0xfb, 0xfb, 0xcd, 0xdf, 0xbe, 0xfe, 0xe8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xc6, 0xff, 0xfb, 0xe7, 0xf4, 0x0f, 0xbe, 0xfe, 0xeb, 0xfe, 0xf7, 0xf0, 0x1f, 0x03, 0x07, + 0xbf, 0xfa, 0xef, 0xfb, 0xdf, 0x77, 0xdb, 0xbf, 0x7a, 0xeb, 0xbe, 0xf7, 0xf7, 0xff, 0x7d, 0xdf, + 0x80, 0x87, 0x1f, 0xfb, 0xc1, 0x8f, 0xdc, 0x7f, 0x87, 0x1c, 0x7f, 0xf7, 0xf7, 0xff, 0x7d, 0xdf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf0, 0xff, 0x03, 0xdf, + 0xf7, 0xbe, 0xff, 0xe3, 0xf1, 0x8e, 0x3a, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xff, 0x77, 0xdf, + 0xeb, 0xbe, 0xff, 0xdd, 0xee, 0xbf, 0xba, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xf7, 0xff, 0x7b, 0xdf, + 0xeb, 0xbe, 0xff, 0xb2, 0x87, 0xbf, 0xa0, 0x3f, 0x87, 0xff, 0xfe, 0xf0, 0x10, 0x1f, 0x7d, 0x07, + 0xdd, 0x8e, 0x1f, 0xaa, 0xdf, 0xbf, 0xba, 0xff, 0x7b, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc1, 0xbe, 0xef, 0xa1, 0x87, 0xbf, 0xa0, 0x3e, 0xfe, 0x1b, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbe, 0xba, 0xef, 0xdf, 0xee, 0xbf, 0xba, 0xfe, 0xfe, 0xeb, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbe, 0xc6, 0x1f, 0xe7, 0xf1, 0x8e, 0x3a, 0xfe, 0xfe, 0xec, 0x3e, 0xf8, 0x37, 0xdf, 0x7d, 0xc7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0x1f, 0xbf, 0xf7, 0xd7, 0xdf, 0x7d, 0xbb, + 0xe1, 0xbe, 0xff, 0xcf, 0xf7, 0xe4, 0xfd, 0xff, 0x86, 0xf8, 0x7f, 0xf7, 0xf7, 0xdf, 0x7d, 0x7d, + 0xde, 0xbe, 0xff, 0xb6, 0xf7, 0xdf, 0x70, 0x3f, 0xff, 0xff, 0xfe, 0xf8, 0x30, 0x1f, 0x01, 0x7d, + 0xbf, 0xbe, 0xff, 0xb5, 0xf7, 0xbf, 0xad, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd7, 0xdf, 0x7d, 0x7d, + 0xbf, 0x8e, 0xff, 0xc3, 0xf7, 0xbf, 0xb0, 0x7f, 0xff, 0xff, 0xfe, 0xf7, 0xd7, 0xdf, 0x7d, 0xbb, + 0xbf, 0xbe, 0xff, 0xbb, 0xf7, 0xbf, 0xbd, 0xbe, 0x07, 0xfb, 0xfe, 0xf8, 0x37, 0xdf, 0x7d, 0xc7, + 0xde, 0xba, 0xff, 0xb9, 0xf7, 0xdf, 0x60, 0x7e, 0xfb, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe1, 0xc6, 0xff, 0xc6, 0xf7, 0xe4, 0xfd, 0xfe, 0xfb, 0x0b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfa, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0xaf, 0xff, 0xff, 0xf7, 0xe4, 0xf7, 0xbe, 0x07, 0x1b, 0xff, 0xff, 0xff, 0xff, 0x01, 0x0f, + 0xeb, 0xaf, 0xff, 0xff, 0xeb, 0xdf, 0x6b, 0x7e, 0xff, 0xeb, 0xbf, 0xff, 0xff, 0xff, 0xef, 0x77, + 0xeb, 0xaf, 0xff, 0xce, 0xdd, 0xdf, 0x76, 0xfe, 0xfe, 0x1c, 0x7e, 0xff, 0xff, 0xff, 0xef, 0x77, + 0xdd, 0xa3, 0xff, 0xb6, 0xbe, 0xbf, 0xbd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x03, + 0xc1, 0xaf, 0xff, 0xb9, 0xbe, 0xdf, 0x7b, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x7d, + 0xbe, 0xae, 0xff, 0xff, 0xff, 0xdf, 0x76, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x7d, + 0xbe, 0xb1, 0xff, 0xff, 0xff, 0xe4, 0xef, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +const uint8_t image_data_L1_RIGHT[512] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0x1e, 0x0f, 0x1e, 0x3e, 0x7c, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xff, 0xfe, 0xef, 0xee, 0xed, 0xdd, 0xbd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xec, 0x31, 0xfe, 0xff, 0xde, 0xed, 0xdb, 0xdd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xeb, 0xee, 0xfe, 0x1f, 0xdf, 0x1e, 0x1b, 0xdd, 0x8f, 0xff, + 0x83, 0xbe, 0xfb, 0xe8, 0x1f, 0x78, 0x1c, 0x6f, 0xfe, 0xef, 0xbe, 0xef, 0xdb, 0xdd, 0xf7, 0xff, + 0xbd, 0x9e, 0xfb, 0xeb, 0xef, 0x7b, 0xff, 0xae, 0xfe, 0xef, 0xbe, 0xef, 0xdd, 0xbd, 0x77, 0xff, + 0xbe, 0xae, 0xfb, 0xeb, 0xef, 0xfb, 0xf8, 0x71, 0xff, 0x1f, 0x7f, 0x1f, 0xde, 0x7d, 0x8f, 0xff, + 0xbe, 0xb6, 0xfb, 0xeb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbe, 0xba, 0xfb, 0xe8, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xfb, 0x3f, 0x7e, 0xbf, 0xff, + 0xbd, 0xbc, 0xfd, 0xdb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbe, 0xff, 0xf7, 0xbe, 0xff, 0xff, 0xff, + 0x83, 0xbe, 0xfe, 0x3b, 0xff, 0x78, 0x1f, 0xff, 0xfe, 0x0f, 0x7f, 0xef, 0xff, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xff, 0xff, 0xbf, 0xbf, 0xdf, 0xff, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xec, 0x2e, 0xff, 0x5f, 0xdf, 0xbf, 0xff, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xeb, 0xae, 0xfe, 0xef, 0xef, 0x7f, 0xff, 0xfd, 0xdf, 0xff, + 0x80, 0x83, 0xfc, 0x1b, 0xef, 0x78, 0x18, 0x2e, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xfe, 0x3f, 0xff, + 0xbf, 0xbd, 0xfb, 0xeb, 0xef, 0xfb, 0xff, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0xbe, 0xfb, 0xfb, 0xef, 0xfb, 0xf8, 0x71, 0xff, 0xff, 0xbf, 0x07, 0x5e, 0xfe, 0xbf, 0xff, + 0x87, 0xbe, 0xfc, 0x18, 0x0f, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xbe, 0xfb, 0x5e, 0xff, 0xff, 0xff, + 0xbf, 0xbe, 0xff, 0xeb, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0xfb, 0xff, 0xfe, 0x3f, 0xff, + 0xbf, 0xbd, 0xfb, 0xeb, 0xef, 0x7f, 0xff, 0xff, 0xfe, 0x0f, 0xbf, 0xc7, 0xff, 0xfd, 0xbf, 0xff, + 0x80, 0x83, 0xfc, 0x1b, 0xef, 0x78, 0x1f, 0xbf, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xfd, 0xbf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfd, 0xbf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xef, 0xa1, 0xff, 0xff, 0xbf, 0xbf, 0xff, 0xfe, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xec, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x80, 0xbe, 0xf8, 0x7c, 0x1f, 0xf8, 0x1b, 0xae, 0xff, 0xff, 0xe6, 0x7f, 0x83, 0x8f, 0xbe, 0xdf, + 0xbf, 0x9e, 0xfb, 0xbb, 0xef, 0xfb, 0xfb, 0xae, 0xff, 0xff, 0x9f, 0x9f, 0x7d, 0xaf, 0x5e, 0xdf, + 0xbf, 0xae, 0xfb, 0xbb, 0xff, 0x7b, 0xfc, 0x2e, 0xfe, 0x0e, 0x7f, 0xe7, 0x07, 0x8f, 0x5e, 0xdf, + 0x87, 0xb6, 0xf8, 0x1c, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfb, 0xbb, 0xfe, 0xee, 0xc7, + 0xbf, 0xba, 0xfb, 0xef, 0xef, 0x7f, 0xff, 0xff, 0xfe, 0x0e, 0x7f, 0xe7, 0xc1, 0xfe, 0x0e, 0xdf, + 0xbf, 0xbc, 0xfb, 0xeb, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x9f, 0x7d, 0xfd, 0xf6, 0xdd, + 0x80, 0xbe, 0xf8, 0x1c, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe6, 0x7f, 0x83, 0xfd, 0xf6, 0xe3, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +const uint8_t image_data_L2_LEFT[512] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf1, 0x9f, 0x1c, 0x7c, 0x71, 0xf1, 0xf3, 0xe3, 0x07, 0x8c, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xee, 0xde, 0xeb, 0xbb, 0xae, 0xee, 0xeb, 0xdd, 0x7f, 0x76, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xde, 0xff, 0xbb, 0xfe, 0xef, 0xdb, 0xdf, 0x0f, 0x7e, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe3, 0xde, 0x3f, 0x78, 0xf9, 0xe3, 0xbb, 0xc7, 0xf7, 0x1e, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xde, 0xfc, 0xfb, 0xfe, 0xef, 0x81, 0xdf, 0xf7, 0x7e, 0xdf, 0xff, 0xff, 0xfe, 0x77, 0xff, + 0xef, 0xde, 0xfb, 0xfb, 0xee, 0xef, 0xfb, 0xdf, 0x77, 0x7e, 0xdf, 0xff, 0xf0, 0x1d, 0xb7, 0xff, + 0xef, 0xde, 0xf8, 0x3b, 0xf1, 0xef, 0xfb, 0xdf, 0x8f, 0x7e, 0xde, 0xff, 0xf7, 0xfd, 0xd7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xd7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xe7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xff, + 0xff, 0xff, 0xfe, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0xf7, 0xff, + 0xff, 0xfe, 0x3c, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xdf, 0xb7, 0xff, + 0xff, 0xfe, 0x10, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xdf, 0xb7, 0xff, + 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf0, 0x3c, 0x0f, 0xff, + 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x8f, 0xfe, 0xff, 0xff, 0x3f, 0xcf, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x8f, 0xfe, 0xff, 0xfe, 0xdf, 0xb7, 0xff, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xf8, 0xde, 0x37, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x1f, 0xff, 0xff, 0xf6, 0xdd, 0xb7, 0xff, + 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0xff, 0xf6, 0xdd, 0xb7, 0xff, + 0xff, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xff, 0x80, 0x00, 0x7f, 0xfe, 0xff, 0xf6, 0xdd, 0xb7, 0xff, + 0xff, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x01, 0xff, 0xfe, 0xff, 0xf0, 0x1c, 0x07, 0xff, + 0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +const uint8_t image_data_L2_RIGHT_NLK_OFF[512] = { + 0xff, 0xfe, 0x33, 0x1f, 0xc7, 0x1f, 0x18, 0x3c, 0x71, 0xf1, 0xc7, 0xc6, 0x73, 0xff, 0xff, 0x87, + 0xff, 0xfd, 0xda, 0xef, 0xba, 0xee, 0xef, 0xbb, 0xae, 0xee, 0xbb, 0xbb, 0x6d, 0xff, 0xff, 0x33, + 0xff, 0xfd, 0xfb, 0xef, 0xbe, 0xfe, 0xff, 0x7b, 0xee, 0xef, 0xbb, 0xbf, 0x5e, 0xff, 0xff, 0x7b, + 0xff, 0xfc, 0x7b, 0xdf, 0x8e, 0x1e, 0x3f, 0x78, 0xf1, 0xe3, 0xc3, 0x8f, 0x5e, 0xff, 0xff, 0x7b, + 0xff, 0xfd, 0xfb, 0x3f, 0xbe, 0xee, 0xfe, 0xfb, 0xee, 0xef, 0xfb, 0xbf, 0x5e, 0xff, 0xc0, 0x3f, + 0xff, 0xfd, 0xfa, 0xff, 0xbe, 0xee, 0xfe, 0xfb, 0xee, 0xef, 0xfb, 0xbf, 0x6d, 0xff, 0xc6, 0x3f, + 0xff, 0xfd, 0xfa, 0x0f, 0xbf, 0x1e, 0xfd, 0xfb, 0xf1, 0xef, 0xfb, 0xbf, 0x73, 0xff, 0xc0, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xff, 0x8f, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x07, 0xff, 0x57, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0x57, 0xfa, 0xbf, 0xff, 0xff, 0xff, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0x8f, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +const uint8_t image_data_L2_RIGHT_NLK_ON[512] = { + 0xff, 0xfe, 0x33, 0x1f, 0xc7, 0x1f, 0x18, 0x3c, 0x71, 0xf1, 0xc7, 0xc6, 0x73, 0xff, 0xf0, 0xff, + 0xff, 0xfd, 0xda, 0xef, 0xba, 0xee, 0xef, 0xbb, 0xae, 0xee, 0xbb, 0xbb, 0x6d, 0xff, 0xe6, 0x7f, + 0xff, 0xfd, 0xfb, 0xef, 0xbe, 0xfe, 0xff, 0x7b, 0xee, 0xef, 0xbb, 0xbf, 0x5e, 0xff, 0xef, 0x7f, + 0xff, 0xfc, 0x7b, 0xdf, 0x8e, 0x1e, 0x3f, 0x78, 0xf1, 0xe3, 0xc3, 0x8f, 0x5e, 0xff, 0xef, 0x7f, + 0xff, 0xfd, 0xfb, 0x3f, 0xbe, 0xee, 0xfe, 0xfb, 0xee, 0xef, 0xfb, 0xbf, 0x5e, 0xff, 0xc0, 0x3f, + 0xff, 0xfd, 0xfa, 0xff, 0xbe, 0xee, 0xfe, 0xfb, 0xee, 0xef, 0xfb, 0xbf, 0x6d, 0xff, 0xc0, 0x3f, + 0xff, 0xfd, 0xfa, 0x0f, 0xbf, 0x1e, 0xfd, 0xfb, 0xf1, 0xef, 0xfb, 0xbf, 0x73, 0xff, 0xc0, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0x8f, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x77, 0xfd, 0xdf, 0xfd, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x77, 0xfd, 0xdf, 0xfd, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x8f, 0xfe, 0x1f, 0xf0, 0x7f, 0xff, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x77, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x77, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xf5, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xbf, 0xff, 0x8f, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xee, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x07, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x7f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x0f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xf7, 0xfc, 0x3f, 0xf0, 0x7f, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xf7, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x77, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xf7, 0xff, 0x8f, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xf7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xcf, 0xff, 0x8f, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xef, 0xff, 0x77, 0xfd, 0xdf, 0xf7, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xef, 0xff, 0xf7, 0xff, 0xdf, 0xf7, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xef, 0xff, 0xef, 0xff, 0x3f, 0xf0, 0x1f, 0xff, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xef, 0xff, 0x9f, 0xff, 0xdf, 0xff, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xef, 0xff, 0x7f, 0xfd, 0xdf, 0xff, 0x7f, 0xff, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xef, 0xff, 0x07, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; diff --git a/res/bitmaps.h b/res/bitmaps.h new file mode 100644 index 0000000..42f23e0 --- /dev/null +++ b/res/bitmaps.h @@ -0,0 +1,35 @@ +/* Copyright 2017 Fred Sundvik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MALRICHTIG_VISUALIZER_RES_BITMAPS_H_ +#define MALRICHTIG_VISUALIZER_RES_BITMAPS_H_ + +#include + +#ifdef LCD_ENABLE +extern const uint8_t image_data_L0_LEFT[]; +extern const uint8_t image_data_L0_RIGHT[]; + +extern const uint8_t image_data_L1_LEFT[]; +extern const uint8_t image_data_L1_RIGHT[]; + +extern const uint8_t image_data_L2_LEFT[]; +extern const uint8_t image_data_L2_RIGHT_NLK_ON[]; +extern const uint8_t image_data_L2_RIGHT_NLK_OFF[]; +#endif + + +#endif /* MALRICHTIG_VISUALIZER_RES_BITMAPS_H_ */ diff --git a/rules.mk b/rules.mk new file mode 100644 index 0000000..8d6a7d1 --- /dev/null +++ b/rules.mk @@ -0,0 +1 @@ +SRC += res/bitmaps.c diff --git a/visualizer.c b/visualizer.c new file mode 100644 index 0000000..9826812 --- /dev/null +++ b/visualizer.c @@ -0,0 +1,55 @@ +/* +Copyright 2017 Fred Sundvik + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// Currently we are assuming that both the backlight and LCD are enabled +// But it's entirely possible to write a custom visualizer that use only +// one of them +#ifndef LCD_BACKLIGHT_ENABLE +#error This visualizer needs that LCD backlight is enabled +#endif + +#ifndef LCD_ENABLE +#error This visualizer needs that LCD is enabled +#endif + +#include "custom_visualizer.h" + + +static void get_visualizer_layer_and_color(visualizer_state_t* state) { + uint8_t saturation = 175; + if (state->status.leds & (1u << USB_LED_CAPS_LOCK)) { + saturation = 255; + } + + if (state->status.layer & 0x8) { + state->target_lcd_color = LCD_COLOR(255, saturation, 0xFF); + state->layer_text = "3: KB & Media"; + } + else if (state->status.layer & 0x4) { + state->target_lcd_color = LCD_COLOR(150, saturation, 0xFF); + state->layer_text = ""; + } + else if (state->status.layer & 0x2) { + state->target_lcd_color = LCD_COLOR(60, saturation, 0xFF); + state->layer_text = ""; + } + else { + state->target_lcd_color = LCD_COLOR(20, saturation, 0xFF); + state->layer_text = ""; + } +} +