]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/helix/rev2/keymaps/froggy/keymap.c
Merge branch 'master' of github.com:qmk/qmk_firmware into hf/shinydox
[qmk_firmware.git] / keyboards / helix / rev2 / keymaps / froggy / keymap.c
1 #include "helix.h"
2 #include "bootloader.h"
3 #include "action_layer.h"
4 #include "eeconfig.h"
5 #ifdef PROTOCOL_LUFA
6 #include "lufa.h"
7 #include "split_util.h"
8 #endif
9 #include "LUFA/Drivers/Peripheral/TWI.h"
10 #ifdef AUDIO_ENABLE
11   #include "audio.h"
12 #endif
13 #ifdef SSD1306OLED
14   #include "ssd1306.h"
15 #endif
16
17 extern keymap_config_t keymap_config;
18
19 #ifdef RGBLIGHT_ENABLE
20 //Following line allows macro to read current RGB settings
21 extern rgblight_config_t rgblight_config;
22 #endif
23
24 extern uint8_t is_master;
25
26 #define DELAY_TIME  75
27 static uint16_t key_timer;
28 static uint16_t tap_timer;
29 static uint16_t delay_registered_code;
30 static uint8_t delay_mat_row;
31 static uint8_t delay_mat_col;
32 static bool delay_key_stat;
33 static bool delay_key_pressed;
34 static bool tapping_key;
35
36 // Each layer gets a name for readability, which is then used in the keymap matrix below.
37 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
38 // Layer names don't all need to be of the same length, obviously, and you can also skip them
39 // entirely and just use numbers.
40 #define _BASE 0
41 #define _OPT 1
42 #define _FUNC 2
43 #define _SYM 3
44 #define _NUM 4
45
46 bool RGBAnimation = false; //Flag for LED Layer color Refresh.
47
48 enum custom_keycodes {
49   QWERTY = SAFE_RANGE,
50   EISU,
51   KANA,
52   RGBRST,
53   RGBOFF,
54   RGB1,
55   RGB2,
56   RGB3,
57   OPT_TAP_SP,
58   DESKTOP,
59   MAC,
60   WIN,
61 };
62
63 enum macro_keycodes {
64   KC_SAMPLEMACRO,
65 };
66
67
68 // Fillers to make layering more clear
69 #define _______ KC_TRNS
70 #define XXXXXXX KC_NO
71 //Macros
72 #define M_SAMPLE M(KC_SAMPLEMACRO)
73
74 #if HELIX_ROWS == 5
75 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
76
77   /* Base
78    * ,-----------------------------------------.             ,-----------------------------------------.
79    * |  C+z |   ;  |   [  |   (  |   <  |   {  |             |      |      |      |      |      |      |
80    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
81    * | KANA |   P  |   K  |   R  |   A  |   F  |             |      |      |      |      |      |      |
82    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
83    * |  BS  |   D  |   T  |   H  |   E  |   O  |             |      |      |      |      |      |      |
84    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
85    * | Shift|   Y  |   S  |   N  |   I  |   U  |Space |      |      |      |      |      |      |      |
86    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
87    * | Ctrl | Alt  | win  | Sym  | Num  |  OPT | Ent  |      |      |      |      |      |      |      |
88    * `-------------------------------------------------------------------------------------------------'
89    */
90   [_BASE] = KEYMAP( \
91       LCTL(KC_Z),    KC_SCLN,       KC_LBRC,       KC_LPRN,   KC_LT,     KC_LCBR,                                _______,  _______,  _______,  _______,  _______,  _______, \
92       KANA,          KC_P,          KC_K,          KC_R,      KC_A,      KC_F,                                   _______,  _______,  _______,  _______,  _______,  _______, \
93       KC_BSPC,       KC_D,          KC_T,          KC_H,      KC_E,      KC_O,                                   _______,  _______,  _______,  _______,  _______,  _______, \
94       OSM(MOD_LSFT), KC_Y,          KC_S,          KC_N,      KC_I,      KC_U,       KC_SPC, _______,  _______,  _______,  _______,  _______,  _______,  _______, \
95       OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), MO(_SYM),  MO(_NUM),  OPT_TAP_SP, KC_ENT, _______,  _______,  _______,  _______,  _______,  _______,  _______ \
96       ),
97
98   /* Opt
99    * ,-----------------------------------------.             ,-----------------------------------------.
100    * |  Esc |  :   |  ]   |  )   |  >   |  }   |             |      |      |      |      |      |      |
101    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
102    * |  EISU|   J  |   M  |   B  |   '  |  Tab |             |      |      |      |      |      |      |
103    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
104    * |   .  |   V  |   C  |   L  |   Z  |  Q   |             |      |      |      |      |      |      |
105    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
106    * |      |   X  |   G  |   W  |   -  |  Del | Esc  |      |      |      |      |      |      |      |
107    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
108    * |      |      |      |   ,  | DTOP |      |      |      |      |      |      |      |      |      |
109    * `-------------------------------------------------------------------------------------------------'
110    */
111   [_OPT] = KEYMAP( \
112       KC_ESC,  KC_COLN,KC_RBRC, KC_RPRN,KC_GT,     KC_RCBR,                   _______,  _______,  _______,  _______,  _______,  _______, \
113       EISU,    KC_J,   KC_M,    KC_B,   KC_QUOT,   KC_TAB,                    _______,  _______,  _______,  _______,  _______,  _______, \
114       KC_DOT,  KC_V,   KC_C,    KC_L,   KC_Z,      KC_Q,                      _______,  _______,  _______,  _______,  _______,  _______, \
115       _______, KC_X,   KC_G,    KC_W,   KC_MINUS,  KC_DEL,  KC_ESC,  _______, _______,  _______,  _______,  _______,  _______,  _______, \
116       _______, _______,_______, KC_COMM,DESKTOP,   _______, _______, _______, _______,  _______,  _______,  _______,  _______,  _______ \
117       ),
118
119   /* Func
120    * ,-----------------------------------------.             ,-----------------------------------------.
121    * |RGBRST|  Hue |      |  RST |  Mac |  Win |             |      |      |      |      |      |      |
122    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
123    * | RGB1 | VAL+ |  F7  |  F8  |  F9  |      |             |      |      |      |      |      |      |
124    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
125    * | RGB2 | VAL- |  F4  |  F5  |  F6  | F12  |             |      |      |      |      |      |      |
126    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
127    * | RGB3 |  F10 |  F1  |  F2  |  F3  | F11  |      |      |      |      |      |      |      |      |
128    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
129    * |RGBOFF|      |      |      |      |      |      |      |      |      |      |      |      |      |
130    * `-------------------------------------------------------------------------------------------------'
131    */
132   [_FUNC] = KEYMAP( \
133       RGBRST,RGB_HUI, _______, RESET,   MAC,     WIN,                         _______,  _______,  _______,  _______,  _______,  _______, \
134       RGB1,  RGB_VAI, KC_F7,   KC_F8,   KC_F9,   _______,                     _______,  _______,  _______,  _______,  _______,  _______, \
135       RGB2,  RGB_VAD, KC_F4,   KC_F5,   KC_F6,   KC_F12,                      _______,  _______,  _______,  _______,  _______,  _______, \
136       RGB3,  KC_F10,  KC_F1,   KC_F2,   KC_F3,   KC_F11,   _______,  _______, _______,  _______,  _______,  _______,  _______,  _______, \
137       RGBOFF,_______, _______, _______, _______, _______,  _______,  _______, _______,  _______,  _______,  _______,  _______,  _______ \
138       ),
139
140   /* Sym
141    * ,-----------------------------------------.             ,-----------------------------------------.
142    * |  Ins |  GRV |      |  PU  |  PD  |   ^  |             |      |      |      |      |      |      |
143    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
144    * |      |   \  |   #  |   =  |   ?  |   %  |             |      |      |      |      |      |      |
145    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
146    * |      |   $  |  upA |   @  |   !  |   |  |             |      |      |      |      |      |      |
147    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
148    * |  CL  |  <-  |  dwA |  ->  |   _  |   &  |      |      |      |      |      |      |      |      |
149    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
150    * |      |      |  PS  |      |   ~  |      |      |      |      |      |      |      |      |      |
151    * `-------------------------------------------------------------------------------------------------'
152    */
153   [_SYM] = KEYMAP( \
154       KC_INS,  KC_GRV,  _______, KC_PGUP, KC_PGDN, KC_CIRC,                   _______,  _______,  _______,  _______,  _______,  _______, \
155       _______, KC_BSLS, KC_HASH, KC_EQL,  KC_QUES, KC_PERC,                   _______,  _______,  _______,  _______,  _______,  _______, \
156       _______, KC_DLR,  KC_UP,   KC_AT,   KC_EXLM, KC_PIPE,                   _______,  _______,  _______,  _______,  _______,  _______, \
157       KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_UNDS, KC_AMPR, _______, _______, _______,  _______,  _______,  _______,  _______,  _______, \
158       _______, _______, KC_PSCR, _______, KC_TILD, _______, _______, _______, _______,  _______,  _______,  _______,  _______,  _______ \
159       ),
160
161   /* Raise
162    * ,-----------------------------------------.             ,-----------------------------------------.
163    * |      |      | Func | home |  End |      |             |      |      |      |      |      |      |
164    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
165    * |      |   *  |  7   |  8   |  9   |  -   |             |      |      |      |      |      |      |
166    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
167    * |  .   |   /  |  4   |  5   |  6   |  +   |             |      |      |      |      |      |      |
168    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
169    * |  LN  |  0   |  1   |  2   |  3   |C+S+F1|      |      |      |      |      |      |      |      |
170    * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
171    * |      |      |      |  ,   |      |      |      |      |      |      |      |      |      |      |
172    * `-------------------------------------------------------------------------------------------------'
173    */
174   [_NUM] = KEYMAP( \
175       _______,  _______, OSL(_FUNC), KC_HOME, KC_END,  _______,                          _______,  _______,  _______,  _______,  _______,  _______, \
176       _______,  KC_ASTR, KC_P7,      KC_P8,   KC_P9,   KC_MINS,                          _______,  _______,  _______,  _______,  _______,  _______, \
177       KC_PDOT,  KC_SLSH, KC_P4,      KC_P5,   KC_P6,   KC_PLUS,                          _______,  _______,  _______,  _______,  _______,  _______, \
178       KC_NLCK,  KC_P0,   KC_P1,      KC_P2,   KC_P3,   LCTL(S(KC_F1)), _______, _______, _______,  _______,  _______,  _______,  _______,  _______, \
179       _______,  _______, KC_PDOT,    KC_COMM, _______, _______,        _______, _______, _______,  _______,  _______,  _______,  _______,  _______ \
180       )
181 };
182 #else
183 #error "undefined keymaps"
184 #endif
185
186
187 #ifdef AUDIO_ENABLE
188
189 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
190 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
191 float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
192 float tone_plover[][2]     = SONG(PLOVER_SOUND);
193 float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
194 float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
195 #endif
196
197 // define variables for reactive RGB
198 //bool TOG_STATUS = false;
199 int RGB_current_mode;
200
201 void persistent_default_layer_set(uint16_t default_layer) {
202   eeconfig_update_default_layer(default_layer);
203   default_layer_set(default_layer);
204 }
205
206 bool find_mairix(uint16_t keycode, uint8_t *row, uint8_t *col){
207   for(uint8_t i=0; i<MATRIX_ROWS; i++){
208     for(uint8_t j=0; j<MATRIX_COLS; j++){
209       if( pgm_read_word(&(keymaps[_BASE][i][j]))==keycode){
210         *row = i;
211         *col = j;
212         return true;
213       }
214     }
215   }
216   return false;
217 }
218
219 void unregister_delay_code(void){
220   if(delay_registered_code){
221     unregister_code(delay_registered_code);
222     if (delay_registered_code & QK_LSFT){
223       unregister_code(KC_LSFT);
224     }
225     if (delay_registered_code & QK_LCTL){
226       unregister_code(KC_LCTL);
227     }
228     if (delay_registered_code & QK_LALT){
229       unregister_code(KC_LALT);
230     }
231     if (delay_registered_code & QK_LGUI){
232       unregister_code(KC_LGUI);
233     }
234     delay_registered_code=0;
235   }
236 }
237
238 void register_delay_code(uint8_t layer){
239   if(delay_key_stat){
240     unregister_delay_code();
241
242     uint16_t code = pgm_read_word(&(keymaps[layer][delay_mat_row][delay_mat_col]));
243     if (code & QK_LSFT){
244       register_code(KC_LSFT);
245     }
246     if (code & QK_LCTL){
247       register_code(KC_LCTL);
248     }
249     if (code & QK_LALT){
250       register_code(KC_LALT);
251     }
252     if (code & QK_LGUI){
253       register_code(KC_LGUI);
254     }
255     register_code(code);
256     delay_registered_code = code;
257     delay_key_stat = false;
258     tapping_key = true;
259   }
260 }
261
262 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
263
264   if(tap_timer&&keycode!=OPT_TAP_SP){
265     tapping_key = true;
266   }
267
268   if(keycode==delay_registered_code){
269       if (!record->event.pressed){
270         unregister_delay_code();
271       }
272   }
273
274   switch (keycode) {
275     case KC_SCLN:
276     case KC_LBRC:
277     case KC_LPRN:
278     case KC_LT:
279     case KC_LCBR:
280     case KC_P:
281     case KC_K:
282     case KC_R:
283     case KC_A:
284     case KC_F:
285     case KC_BSPC:
286     case KC_D:
287     case KC_T:
288     case KC_H:
289     case KC_E:
290     case KC_O:
291     case KC_Y:
292     case KC_S:
293     case KC_N:
294     case KC_I:
295     case KC_U:
296     case LCTL(KC_Z):
297     case KC_SPC:
298       if (record->event.pressed) {
299         register_delay_code(_BASE);
300         if(find_mairix(keycode, &delay_mat_row, &delay_mat_col)){
301           key_timer = timer_read();
302           delay_key_stat = true;
303           delay_key_pressed = true;
304         }
305       }else{
306         delay_key_pressed = false;
307       }
308       return false;
309       break;
310     case OPT_TAP_SP:
311       if (record->event.pressed) {
312         tapping_key = false;
313         register_delay_code(_OPT);
314         layer_on(_OPT);
315         tap_timer = timer_read();
316       }else{
317         layer_off(_OPT);
318         if(tapping_key==false && timer_elapsed(tap_timer) < TAPPING_TERM){
319           SEND_STRING(" ");
320         }
321         tap_timer = 0;
322       }
323       return false;
324       break;
325    case EISU:
326       if (record->event.pressed) {
327         if(keymap_config.swap_lalt_lgui==false){
328           register_code(KC_LANG2);
329         }else{
330           SEND_STRING(SS_LALT("`"));
331         }
332       } else {
333         unregister_code(KC_LANG2);
334       }
335       return false;
336       break;
337     case KANA:
338       if (record->event.pressed) {
339         if(keymap_config.swap_lalt_lgui==false){
340           register_code(KC_LANG1);
341         }else{
342           SEND_STRING(SS_LALT("`"));
343         }
344       } else {
345         unregister_code(KC_LANG1);
346       }
347       return false;
348       break;
349     case DESKTOP:
350       if (record->event.pressed) {
351         if(keymap_config.swap_lalt_lgui==false){
352           register_code(KC_F11);
353         }else{
354           SEND_STRING(SS_LGUI("d"));
355         }
356       } else {
357         unregister_code(KC_F11);
358       }
359       return false;
360       break;
361     case RGBRST:
362       #ifdef RGBLIGHT_ENABLE
363         if (record->event.pressed) {
364           eeconfig_update_rgblight_default();
365           rgblight_enable();
366           RGB_current_mode = rgblight_config.mode;
367           RGBAnimation = false;
368         }
369       #endif
370       break;
371     case RGBOFF:
372       #ifdef RGBLIGHT_ENABLE
373         if (record->event.pressed) {
374           rgblight_disable();
375         }
376       #endif
377       break;
378     case RGB1:
379       #ifdef RGBLIGHT_ENABLE
380         if (record->event.pressed) {
381           RGBAnimation = true;
382           rgblight_mode(6);
383           RGB_current_mode = rgblight_config.mode;
384         }
385       #endif
386       break;
387     case RGB2:
388       #ifdef RGBLIGHT_ENABLE
389         if (record->event.pressed) {
390           RGBAnimation = true;
391           rgblight_mode(10);
392           RGB_current_mode = rgblight_config.mode;
393         }
394       #endif
395       break;
396     case RGB3:
397       #ifdef RGBLIGHT_ENABLE
398         if (record->event.pressed) {
399           RGBAnimation = true;
400           rgblight_mode(21);
401           RGB_current_mode = rgblight_config.mode;
402         }
403       #endif
404       break;
405     case MAC:
406       if (record->event.pressed) {
407         keymap_config.swap_lalt_lgui = false;
408         keymap_config.swap_ralt_rgui = false;
409         #ifdef AUDIO_ENABLE
410           PLAY_SONG(ag_norm_song);
411         #endif
412       }
413       break;
414     case WIN:
415       if (record->event.pressed) {
416         keymap_config.swap_lalt_lgui = true;
417         keymap_config.swap_ralt_rgui = true;
418         #ifdef AUDIO_ENABLE
419           PLAY_SONG(ag_swap_song);
420         #endif
421       }
422       break;
423     }
424   return true;
425 }
426
427
428 //keyboard start-up code. Runs once when the firmware starts up.
429 void matrix_init_user(void) {
430     #ifdef AUDIO_ENABLE
431         startup_user();
432     #endif
433     #ifdef RGBLIGHT_ENABLE
434       RGB_current_mode = rgblight_config.mode;
435     #endif
436     //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
437     #ifdef SSD1306OLED
438         TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
439         iota_gfx_init(!has_usb());   // turns on the display
440     #endif
441 }
442
443
444 #ifdef AUDIO_ENABLE
445
446 void startup_user()
447 {
448     _delay_ms(20); // gets rid of tick
449 }
450
451 void shutdown_user()
452 {
453     _delay_ms(150);
454     stop_all_notes();
455 }
456
457 void music_on_user(void)
458 {
459     music_scale_user();
460 }
461
462 void music_scale_user(void)
463 {
464     PLAY_SONG(music_scale);
465 }
466
467 #endif
468
469
470 //assign the right code to your layers for OLED display
471 #define L_BASE 0
472 #define L_OPT 2
473 #define L_FUNC 4
474 #define L_SYM 8
475 #define L_NUM 16
476 #define L_FNLAYER 64
477 #define L_NUMLAY 128
478 #define L_NLOWER 136
479 #define L_NFNLAYER 192
480 #define L_MOUSECURSOR 256
481
482
483 uint8_t layer_state_old;
484
485 //runs every scan cycle (a lot)
486 void matrix_scan_user(void) {
487   #ifdef SSD1306OLED
488     iota_gfx_task();  // this is what updates the display continuously
489   #endif
490
491   if(delay_key_stat && (timer_elapsed(key_timer) > DELAY_TIME)){
492     register_delay_code(_BASE);
493     if(!delay_key_pressed){
494       unregister_delay_code();
495     }
496   }
497
498   if(layer_state_old != layer_state){
499     switch (layer_state) {
500       case L_BASE:
501         #ifdef RGBLIGHT_ENABLE
502           if (!RGBAnimation){
503             rgblight_sethsv(187,255,255);
504             rgblight_mode(1);
505           }else{
506             rgblight_mode(RGB_current_mode);
507           }
508         #endif
509         break;
510       case L_OPT:
511         register_delay_code(_OPT);
512         break;
513       case L_NUM:
514         register_delay_code(_NUM);
515         #ifdef RGBLIGHT_ENABLE
516           rgblight_sethsv(25,255,255);
517           rgblight_mode(1);
518         #endif
519         break;
520       case L_SYM:
521         register_delay_code(_SYM);
522         #ifdef RGBLIGHT_ENABLE
523           rgblight_sethsv(96,255,255);
524           rgblight_mode(1);
525         #endif
526         break;
527       case L_FUNC:
528         register_delay_code(_FUNC);
529         #ifdef RGBLIGHT_ENABLE
530           rgblight_sethsv(331,255,255);
531           rgblight_mode(1);
532         #endif
533         break;
534     }
535     layer_state_old = layer_state;
536   }
537 }
538
539 //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
540 #ifdef SSD1306OLED
541
542 void matrix_update(struct CharacterMatrix *dest,
543                           const struct CharacterMatrix *source) {
544   if (memcmp(dest->display, source->display, sizeof(dest->display))) {
545     memcpy(dest->display, source->display, sizeof(dest->display));
546     dest->dirty = true;
547   }
548 }
549
550 // Render to OLED
551 void render_status(struct CharacterMatrix *matrix) {
552
553   // froggy logo
554   static char logo[4][1][17]=
555   {
556     {
557       {0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0}
558     },
559     {
560       {0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0}
561     },
562     {
563       {0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0}
564     },
565     {
566       {0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0}
567     }
568   };
569
570   static char indctr[8][2][4]=
571   {
572     // white icon
573     {
574       {0x60,0x61,0x62,0},
575       {0x63,0x64,0}
576     },
577     {
578       {0x80,0x81,0x82,0},
579       {0x83,0x84,0}
580     },
581     {
582       {0xa0,0xa1,0xa2,0},
583       {0xa3,0xa4,0}
584     },
585     {
586       {0xc0,0xc1,0xc2,0},
587       {0xc3,0xc4,0}
588     },
589     // Black icon
590     {
591       {0x75,0x76,0x77,0},
592       {0x78,0x79,0}
593     },
594     {
595       {0x95,0x96,0x97,0},
596       {0x98,0x99,0}
597     },
598     {
599       {0xb5,0xb6,0xb7,0},
600       {0xb8,0xb9,0}
601     },
602     {
603       {0xd5,0xd6,0xd7,0},
604       {0xd8,0xd9,0}
605     },
606   };
607
608   int rown = 0;
609   int rowf = 0;
610   int rowa = 0;
611   int rows = 0;
612
613   //Set Indicator icon
614   if (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) { rown = 4; } else { rown = 0; }
615   if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) { rowa = 4; } else { rowa = 0; }
616   if (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) { rows = 4; } else { rows = 0; }
617   if (layer_state == L_FUNC) { rowf = 4; }
618
619   matrix_write(matrix, indctr[rown]  [0]);
620   matrix_write(matrix, indctr[rowf]  [1]);
621   matrix_write(matrix, logo  [0]     [0]);
622   matrix_write(matrix, indctr[rown+1][0]);
623   matrix_write(matrix, indctr[rowf+1][1]);
624   matrix_write(matrix, logo  [1]     [0]);
625   matrix_write(matrix, indctr[rowa+2][0]);
626   matrix_write(matrix, indctr[rows+2][1]);
627   matrix_write(matrix, logo  [2]     [0]);
628   matrix_write(matrix, indctr[rowa+3][0]);
629   matrix_write(matrix, indctr[rows+3][1]);
630   matrix_write(matrix, logo  [3]     [0]);
631
632 }
633
634 void iota_gfx_task_user(void) {
635   struct CharacterMatrix matrix;
636
637 #if DEBUG_TO_SCREEN
638   if (debug_enable) {
639     return;
640   }
641 #endif
642
643   matrix_clear(&matrix);
644   if(is_master){
645     render_status(&matrix);
646   }
647   matrix_update(&display, &matrix);
648 }
649
650 #endif