@@ -128,7 +128,11 @@ static uint16_t cie_lightness(uint16_t v) {
128
128
return y * 65535.0f ;
129
129
}
130
130
131
+ #ifdef VISUALIZER_ENABLE
131
132
void lcd_backlight_hal_color (uint16_t r , uint16_t g , uint16_t b ) {
133
+ #else
134
+ void ergodox_infinity_lcd_color (uint16_t r , uint16_t g , uint16_t b ) {
135
+ #endif
132
136
CHANNEL_RED .CnV = cie_lightness (r );
133
137
CHANNEL_GREEN .CnV = cie_lightness (g );
134
138
CHANNEL_BLUE .CnV = cie_lightness (b );
@@ -144,6 +148,13 @@ void keyboard_pre_init_kb() {
144
148
// Turn on LED controller
145
149
setPinOutput (B16 );
146
150
writePinHigh (B16 );
151
+ #endif
152
+ #ifndef VISUALIZER_ENABLE
153
+ // The backlight always has to be initialized, otherwise it will stay lit
154
+ lcd_backlight_hal_init ();
155
+ # ifdef ST7565_ENABLE
156
+ ergodox_infinity_lcd_color (UINT16_MAX / 2 , UINT16_MAX / 2 , UINT16_MAX / 2 );
157
+ # endif
147
158
#endif
148
159
keyboard_pre_init_user ();
149
160
}
@@ -165,10 +176,6 @@ void matrix_init_kb(void) {
165
176
#endif
166
177
167
178
matrix_init_user ();
168
- // The backlight always has to be initialized, otherwise it will stay lit
169
- #ifndef VISUALIZER_ENABLE
170
- lcd_backlight_hal_init ();
171
- #endif
172
179
#if (defined(LED_MATRIX_ENABLE ) || defined(WPM_ENABLE ))
173
180
add_remote_objects (remote_objects , sizeof (remote_objects ) / sizeof (remote_object_t * ));
174
181
#endif
@@ -404,3 +411,64 @@ led_config_t g_led_config = {
404
411
}
405
412
};
406
413
#endif
414
+
415
+ #ifdef ST7565_ENABLE
416
+ __attribute__((weak )) void st7565_on_user (void ) {
417
+ ergodox_infinity_lcd_color (UINT16_MAX / 2 , UINT16_MAX / 2 , UINT16_MAX / 2 );
418
+ }
419
+
420
+ __attribute__((weak )) void st7565_off_user (void ) {
421
+ ergodox_infinity_lcd_color (0 , 0 , 0 );
422
+ }
423
+
424
+ static void format_layer_bitmap_string (char * buffer , uint8_t offset ) {
425
+ for (int i = 0 ; i < 16 && i + offset < MAX_LAYER ; i ++ ) {
426
+ if (i == 0 || i == 4 || i == 8 || i == 12 ) {
427
+ * buffer = ' ' ;
428
+ ++ buffer ;
429
+ }
430
+
431
+ uint8_t layer = i + offset ;
432
+ if (layer_state_cmp (default_layer_state , layer )) {
433
+ * buffer = 'D' ;
434
+ } else if (layer_state_is (layer )) {
435
+ * buffer = '1' ;
436
+ } else {
437
+ * buffer = '_' ;
438
+ }
439
+ ++ buffer ;
440
+ }
441
+ * buffer = 0 ;
442
+ }
443
+
444
+ __attribute__((weak )) void st7565_task_user (void ) {
445
+ if (is_keyboard_master ()) {
446
+ // Draw led and layer status
447
+ led_t leds = host_keyboard_led_state ();
448
+ if (leds .num_lock ) { st7565_write ("Num " , false); }
449
+ if (leds .caps_lock ) { st7565_write ("Cap " , false); }
450
+ if (leds .scroll_lock ) { st7565_write ("Scrl " , false); }
451
+ if (leds .compose ) { st7565_write ("Com " , false); }
452
+ if (leds .kana ) { st7565_write ("Kana" , false); }
453
+ st7565_advance_page (true);
454
+
455
+ char layer_buffer [16 + 5 ]; // 3 spaces and one null terminator
456
+ st7565_set_cursor (0 , 1 );
457
+ format_layer_bitmap_string (layer_buffer , 0 );
458
+ st7565_write_ln (layer_buffer , false);
459
+ format_layer_bitmap_string (layer_buffer , 16 );
460
+ st7565_write_ln (layer_buffer , false);
461
+ st7565_write_ln (" 1=On D=Default" , false);
462
+ } else {
463
+ // Draw logo
464
+ static const char qmk_logo [] = {
465
+ 0x80 , 0x81 , 0x82 , 0x83 , 0x84 , 0x85 , 0x86 , 0x87 , 0x88 , 0x89 , 0x8A , 0x8B , 0x8C , 0x8D , 0x8E , 0x8F , 0x90 , 0x91 , 0x92 , 0x93 , 0x94 ,
466
+ 0xA0 , 0xA1 , 0xA2 , 0xA3 , 0xA4 , 0xA5 , 0xA6 , 0xA7 , 0xA8 , 0xA9 , 0xAA , 0xAB , 0xAC , 0xAD , 0xAE , 0xAF , 0xB0 , 0xB1 , 0xB2 , 0xB3 , 0xB4 ,
467
+ 0xC0 , 0xC1 , 0xC2 , 0xC3 , 0xC4 , 0xC5 , 0xC6 , 0xC7 , 0xC8 , 0xC9 , 0xCA , 0xCB , 0xCC , 0xCD , 0xCE , 0xCF , 0xD0 , 0xD1 , 0xD2 , 0xD3 , 0xD4 , 0x00
468
+ };
469
+
470
+ st7565_write (qmk_logo , false);
471
+ st7565_write (" Infinity Ergodox " , false);
472
+ }
473
+ }
474
+ #endif
0 commit comments