]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
Keymap: Fixed a possible of buffer overflow. (#4016)
[qmk_firmware.git] / keyboards / helix / rev2 / keymaps / five_rows_jis / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "keymap_jp.h"
3 #include "bootloader.h"
4 #ifdef PROTOCOL_LUFA
5 #include "lufa.h"
6 #include "split_util.h"
7 #endif
8 #ifdef SSD1306OLED
9   #include "ssd1306.h"
10 #endif
11
12 // * If you want to recognize that you pressed the Adjust key with the Lower / Raise key you can enable this comment out. However, the binary size may be over. *
13 // #define ADJUST_MACRO_ENABLE
14
15 // * If you want to use the Kana key you can enable this comment out. However, the binary size may be over. *
16 // #define KANA_ENABLE
17
18 extern keymap_config_t keymap_config;
19
20 #ifdef RGBLIGHT_ENABLE
21 //Following line allows macro to read current RGB settings
22 extern rgblight_config_t rgblight_config;
23 #endif
24
25 extern uint8_t is_master;
26
27 // Each layer gets a name for readability, which is then used in the keymap matrix below.
28 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
29 // Layer names don't all need to be of the same length, obviously, and you can also skip them
30 // entirely and just use numbers.
31 enum layer_number {
32   _BASE = 0,
33   _BAS_E,
34   _LOWER,
35   _LOW_E,
36   _RAISE,
37   _RAI_E,
38   _ADJUST,
39 };
40
41 enum custom_keycodes {
42   RGBRST = SAFE_RANGE,
43   #ifdef KANA_ENABLE
44   EISU,
45   KANA,
46   #endif
47 };
48
49 // Fillers to make layering more clear
50 #define _______ KC_TRNS
51 #define XXXXXXX KC_NO
52
53 // Layer Mode aliases
54 #define DL_BAS  DF(_BASE)
55 #define DL_BASE DF(_BAS_E)
56 #define ML_LOW  MO(_LOWER)
57 #define ML_LOWE MO(_LOW_E)
58 #define ML_RAI  MO(_RAISE)
59 #define ML_RAIE MO(_RAI_E)
60 #define ML_ADJ  MO(_ADJUST)
61
62 #if HELIX_ROWS == 5
63 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
64   /* Qwerty JIS Normal
65    * ,-----------------------------------------.             ,-----------------------------------------.
66    * | Esc  |  1!  |  2"  |  3#  |  4$  |  5%  |             |  6&  |  7'  |  8(  |  9)  |   0  |  -=  |
67    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
68    * | KANJI|   Q  |   W  |   E  |   R  |   T  |             |   Y  |   U  |   I  |   O  |   P  |  @`  |
69    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
70    * | Tab  |   A  |   S  |   D  |   F  |   G  |             |   H  |   J  |   K  |   L  |  ;+  |  :*  |
71    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
72    * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   B  |   N  |   M  |  ,<  |  .>  |  Up  |Enter |
73    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
74    * | Ctrl | GUI  | Alt  |Adjust|Lower |Space |Bksp  |Space |Space |Raise | APP  | Left | Down |Right |
75    * `-------------------------------------------------------------------------------------------------'
76    */
77   [_BASE] = LAYOUT( \
78     KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, \
79     JP_ZHTG, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                      KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    JP_AT,   \
80     KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                      KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, JP_COLN, \
81     KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   KC_ENT,  \
82     KC_LCTL, KC_LALT, KC_LGUI, ML_ADJ,  ML_LOW,  KC_SPC,  KC_BSPC, KC_SPC,  KC_SPC,  ML_RAI,  KC_APP,  KC_LEFT, KC_DOWN, KC_RGHT  \
83     ),
84
85   /* Qwerty JIS Exchange L and R
86    * ,-----------------------------------------.             ,-----------------------------------------.
87    * |  6&  |  7'  |  8(  |  9)  |   0  |  -=  |             | Esc  |  1!  |  2"  |  3#  |  4$  |  5%  |
88    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
89    * |   Y  |   U  |   I  |   O  |   P  |  @`  |             | Tab  |   Q  |   W  |   E  |   R  |   T  |
90    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
91    * |   H  |   J  |   K  |   L  |  ;+  |  :*  |             |      |   A  |   S  |   D  |   F  |   G  |
92    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
93    * |   N  |   M  |  ,<  |  .>  |  /?  |  Up  |Enter |KANJI | Shift|   Z  |   X  |   C  |   V  |   B  |
94    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
95    * |Space |Raise |  }]  | APP  | Left | Down |Right |Adjust| Ctrl | GUI  | Alt  |  [{  |Lower | Bksp |
96    * `-------------------------------------------------------------------------------------------------'
97    */
98   [_BAS_E] = LAYOUT( \
99     KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,                   KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   \
100     KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    JP_AT,                     KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   \
101     KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, JP_COLN,                   XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   \
102     KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_UP,   KC_ENT,  JP_ZHTG, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   \
103     KC_SPC,  ML_RAIE, JP_RBRC, KC_APP,  KC_LEFT, KC_DOWN, KC_RGHT, ML_ADJ,  KC_LCTL, KC_LALT, KC_LGUI, JP_LBRC, ML_LOWE, KC_BSPC \
104     ),
105
106   /* Lower JIS Normal
107    * ,-----------------------------------------.             ,-----------------------------------------.
108    * |      |      |      |      |      |      |             |      |      |      |  -=  |  ^~  |  \|  |
109    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
110    * |      |      |      |      |      |      |             |      |      |      |      |  @`  |  [{  |
111    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
112    * |      |      |      |      |      |      |             |      |      |      |  ;+  |  :*  |  ]}  |
113    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
114    * |      |      |      |      |      |      |      |      |      |      |  ,<  |  .>  |  /?  |  \_  |
115    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
116    * |      |      |      |      |      |      | Del  |      |      |      |      |      |      |      |
117    * `-------------------------------------------------------------------------------------------------'
118    */
119   [_LOWER] = LAYOUT( \
120     _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, JP_CIRC, JP_YEN,  \
121     _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_AT,   JP_LBRC, \
122     _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, JP_COLN, JP_RBRC, \
123     _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT,  KC_SLSH, JP_BSLS, \
124     _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC_DEL,  _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  \
125     ),
126
127   /* Lower JIS Exchange L and R
128    * ,-----------------------------------------.             ,-----------------------------------------.
129    * |      |      |      |  -=  |  ^~  |  \|  |             |      |      |      |      |      |      |
130    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
131    * |      |      |      |      |  @`  |  [{  |             |      |      |      |      |      |      |
132    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
133    * |      |      |      |  ;+  |  :*  |  ]}  |             |      |      |      |      |      |      |
134    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
135    * |      |  ,<  |  .>  |  /?  |  \_  |PageUp|      |      |      |      |      |      |      |      |
136    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
137    * |      |      |      |      | Home |PageDn| End  |      |      |      |      |      |      | Del  |
138    * `-------------------------------------------------------------------------------------------------'
139    */
140   [_LOW_E] = LAYOUT( \
141     _______, XXXXXXX, XXXXXXX, KC_MINS, JP_CIRC, JP_YEN,                    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
142     _______, XXXXXXX, XXXXXXX, XXXXXXX, JP_AT,   JP_LBRC,                   _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
143     _______, XXXXXXX, XXXXXXX, KC_SCLN, JP_COLN, JP_RBRC,                   _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
144     _______, KC_COMM, KC_DOT,  KC_SLSH, JP_BSLS, KC_PGUP, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
145     _______, _______, XXXXXXX, _______, KC_HOME, KC_PGDN, KC_END,  _______, _______, _______, _______, XXXXXXX, _______, KC_DEL   \
146     ),
147
148   /* Raise JIS Normal
149    * ,-----------------------------------------.             ,-----------------------------------------.
150    * |      |  F1  |  F2  |  F3  |  F4  |  F5  |             |  F6  |  F7  |  F8  |  F9  | F10  | F11  |
151    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
152    * |      |      |      |      |      |      |             |      |MsWhL |MsWhU | Home |PageUp| F12  |
153    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
154    * |      |      |      |      |      |      |             |      |MsWhR |MsWhD | End  |PageDn|      |
155    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
156    * |      |      |      |      |      |      |      |      |      |      |MsBtn1|MsBtn2| MsUp |      |
157    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
158    * |      |      |      |      |      |      |      |      |      |      |      |MsLeft|MsDown|MsRght|
159    * `-------------------------------------------------------------------------------------------------'
160    */
161   [_RAISE] = LAYOUT( \
162     _______, KC_F1  , KC_F2,   KC_F3,   KC_F4,   KC_F5,                     KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  \
163     _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, KC_WH_L, KC_WH_U, KC_HOME, KC_PGUP, KC_F12,  \
164     _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, KC_WH_R, KC_WH_D, KC_END,  KC_PGDN, XXXXXXX, \
165     _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_MS_U, XXXXXXX, \
166     _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R  \
167     ),
168
169   /* Raise JIS Exchange L and R
170    * ,-----------------------------------------.             ,-----------------------------------------.
171    * |  F6  |  F7  |  F8  |  F9  | F10  | F11  |             |      |  F1  |  F2  |  F3  |  F4  |  F5  |
172    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
173    * |      |      |      |MsWhL |MsWhU | F12  |             |      |      |      |      |      |      |
174    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
175    * |      |      |      |MsWhR |MsWhD |      |             |      |      |      |      |      |      |
176    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
177    * |      |      |      |MsBtn1|MsBtn2| MsUp |      |      |      |      |      |      |      |      |
178    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
179    * |      |      |      |      |MsLeft|MsDown|MsRght|      |      |      |      |      |      |      |
180    * `-------------------------------------------------------------------------------------------------'
181    */
182   [_RAI_E] = LAYOUT( \
183     KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,                    _______, KC_F1  , KC_F2,   KC_F3,   KC_F4,   KC_F5,   \
184     XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_U, KC_F12,                    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
185     XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_R, KC_WH_D, XXXXXXX,                   _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
186     XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_MS_U, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
187     _______, _______, XXXXXXX, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX  \
188     ),
189
190   /* Adjust (Lower + Raise) Common map for Normal and Exchange
191    * ,-----------------------------------------.             ,-----------------------------------------.
192    * |      | Reset|RGBRST|      |      |      |             |      | Reset|RGBRST|      |      |      |
193    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
194    * |      |ModNrm|ModExc| Mac  | Win  |      |             |      |ModNrm|ModExc| Mac  | Win  |      |
195    * |------+------+------+------+------+------|             |------+------+------+------+------|------+
196    * |      |RGB ON| HUE+ | SAT+ | VAL+ |      |             |      |RGB ON| HUE+ | SAT+ | VAL+ |      |
197    * |------+------+------+------+------+------+------+------+------+------+------+------+------|------+
198    * |      | MODE | HUE- | SAT- | VAL- |      |      |      |      | MODE | HUE- | SAT- | VAL- |      |
199    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
200    * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
201    * `-------------------------------------------------------------------------------------------------'
202    */
203   [_ADJUST] =  LAYOUT( \
204     XXXXXXX, RESET,   RGBRST,  XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, RESET,   RGBRST,  XXXXXXX, XXXXXXX, XXXXXXX, \
205     XXXXXXX, DL_BAS,  DL_BASE, AG_NORM, AG_SWAP, XXXXXXX,                   XXXXXXX, DL_BAS,  DL_BASE, AG_NORM, AG_SWAP, XXXXXXX, \
206     XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,                   XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, \
207     XXXXXXX, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, \
208     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
209     ),
210 };
211
212 #else
213 #error "undefined keymaps"
214 #endif
215
216 #ifdef SSD1306OLED
217 char keylog[24] = {};
218 const char code_to_name[60] = {
219     ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
220     'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
221     'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
222     '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
223     'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
224     ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
225
226 static inline void set_keylog(uint16_t keycode, keyrecord_t *record)
227 {
228   char name = ' ';
229   uint8_t leds = host_keyboard_leds();
230
231   if (keycode < 60)
232   {
233     name = code_to_name[keycode];
234   }
235
236   // update keylog
237   snprintf(keylog, sizeof(keylog), "\n%dx%d %2x %c %c %c %c",
238            record->event.key.row,
239            record->event.key.col,
240            keycode,
241            name,
242           (leds & (1<<USB_LED_NUM_LOCK)) ? 'N' : ' ',
243           (leds & (1<<USB_LED_CAPS_LOCK)) ? 'C' : ' ',
244           (leds & (1<<USB_LED_SCROLL_LOCK)) ? 'S' : ' '
245            );
246 }
247 #endif
248
249 #ifdef RGBLIGHT_ENABLE
250 #define RGBLIGHT(mode) rgblight_mode(mode)
251 #else
252 #define RGBLIGHT(mode)
253 #endif
254
255 // define variables for reactive RGB
256 int RGB_current_mode;
257 #ifdef ADJUST_MACRO_ENABLE
258 // Setting ADJUST layer RGB back to default
259 void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
260   if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
261     RGBLIGHT(RGB_current_mode);
262     layer_on(layer3);
263    } else {
264     layer_off(layer3);
265   }
266 }
267 #define ADJUST_MACRO(layer1, layer2, layer3) update_tri_layer_RGB(layer1, layer2, layer3)
268 #else
269 #define ADJUST_MACRO(layer1, layer2, layer3)
270 #endif
271
272 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
273   #ifdef SSD1306OLED
274     if (record->event.pressed) {
275       set_keylog(keycode, record);
276     }
277   #endif
278
279   switch (keycode) {
280     #ifdef RGBLIGHT_ENABLE
281       //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
282       case RGB_MOD:
283           if (record->event.pressed) {
284             rgblight_mode(RGB_current_mode);
285             rgblight_step();
286             RGB_current_mode = rgblight_config.mode;
287           }
288         break;
289     #endif
290     #ifdef KANA_ENABLE
291       case EISU:
292         if (record->event.pressed) {
293           if (keymap_config.swap_lalt_lgui==false) {
294             register_code(KC_LANG2);
295           } else {
296             SEND_STRING(SS_LALT("`"));
297           }
298         } else {
299           unregister_code(KC_LANG2);
300         }
301         break;
302       case KANA:
303         if (record->event.pressed) {
304           if(keymap_config.swap_lalt_lgui==false){
305             register_code(KC_LANG1);
306           }else{
307             SEND_STRING(SS_LALT("`"));
308           }
309         } else {
310           unregister_code(KC_LANG1);
311         }
312         break;
313     #endif
314     #ifdef RGBLIGHT_ENABLE
315       case RGBRST:
316           if (record->event.pressed) {
317             eeconfig_update_rgblight_default();
318             rgblight_enable();
319             RGB_current_mode = rgblight_config.mode;
320           }
321         break;
322     #endif
323     default:
324       return true;
325   }
326
327   return false;
328 }
329
330 void matrix_init_user(void) {
331   #ifdef RGBLIGHT_ENABLE
332     RGB_current_mode = rgblight_config.mode;
333   #endif
334   //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
335   #ifdef SSD1306OLED
336     iota_gfx_init(!has_usb()); // turns on the display
337   #endif
338 }
339
340 //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
341 #ifdef SSD1306OLED
342
343 void matrix_scan_user(void) {
344   iota_gfx_task();  // this is what updates the display continuously
345 }
346
347 static inline void matrix_update(struct CharacterMatrix *dest,
348                           const struct CharacterMatrix *source) {
349   if (memcmp(dest->display, source->display, sizeof(dest->display))) {
350     memcpy(dest->display, source->display, sizeof(dest->display));
351     dest->dirty = true;
352   }
353 }
354
355 //assign the right code to your layers for OLED display
356 #define L_BASE _BASE
357 #define L_LOWER (1<<_LOWER)
358 #define L_RAISE (1<<_RAISE)
359 #define L_ADJUST (1<<_ADJUST)
360 #define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
361 #define L_LOW_E (1<<_LOW_E)
362 #define L_RAI_E (1<<_RAI_E)
363 #define L_ADJUST_TRIE (L_ADJUST|L_RAI_E|L_LOW_E)
364
365 const char helix_logo[]={
366   0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
367   0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
368   0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
369   0};
370
371 static inline void render_logo(struct CharacterMatrix *matrix) {
372
373   matrix_write(matrix, helix_logo);
374 }
375
376 const char mac_win_logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
377
378 static inline void render_status(struct CharacterMatrix *matrix) {
379
380   char buf[20];
381   // Render to mode icon
382   if(keymap_config.swap_lalt_lgui==false){
383     matrix_write(matrix, mac_win_logo[0][0]);
384     matrix_write_P(matrix, PSTR("\n"));
385     matrix_write(matrix, mac_win_logo[0][1]);
386   } else {
387     matrix_write(matrix, mac_win_logo[1][0]);
388     matrix_write_P(matrix, PSTR("\n"));
389     matrix_write(matrix, mac_win_logo[1][1]);
390   }
391
392   #ifdef RGBLIGHT_ENABLE
393     snprintf(buf, sizeof(buf), "  LED mode:%d", (short)RGB_current_mode);
394     matrix_write(matrix, buf);
395   #endif
396
397   // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
398   matrix_write_P(matrix, PSTR("\nLayer: "));
399   switch (layer_state) {
400     case L_BASE:
401       matrix_write_P(matrix, default_layer_state == (1UL<<_BAS_E) ? PSTR("BaseEx") : PSTR("Base"));
402       break;
403     case L_RAISE:
404       matrix_write_P(matrix, PSTR("Raise"));
405       break;
406     case L_RAI_E:
407       matrix_write_P(matrix, PSTR("RaiseEx"));
408       break;
409     case L_LOWER:
410       matrix_write_P(matrix, PSTR("Lower"));
411       break;
412     case L_LOW_E:
413       matrix_write_P(matrix, PSTR("LowerEx"));
414       break;
415     case L_ADJUST:
416     case L_ADJUST_TRI:
417     case L_ADJUST_TRIE:
418       matrix_write_P(matrix, PSTR("Adjust"));
419       break;
420     default:
421       snprintf(buf, sizeof(buf), "%d", (short)layer_state);
422       matrix_write(matrix, buf);
423   }
424
425   matrix_write(matrix, keylog);
426 }
427
428 void iota_gfx_task_user(void) {
429   struct CharacterMatrix matrix;
430
431   #if DEBUG_TO_SCREEN
432     if (debug_enable) {
433       return;
434     }
435   #endif
436
437   matrix_clear(&matrix);
438   if (is_master) {
439     render_status(&matrix);
440   } else {
441     render_logo(&matrix);
442   }
443
444   matrix_update(&display, &matrix);
445 }
446
447 #endif