@ -1,13 +1,9 @@
# include QMK_KEYBOARD_H
# ifdef PROTOCOL_LUFA
# include "lufa.h"
# include "split_util.h"
# endif
# ifdef SSD1306OLED
# include "common/ssd1306.h"
# endif
extern keymap_config_t keymap_config ;
# ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@ -16,10 +12,6 @@ extern rgblight_config_t rgblight_config;
extern uint8_t is_master ;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layer_number {
_DVORAK = 0 ,
_DESTINY ,
@ -38,13 +30,14 @@ enum custom_keycodes {
LOWER ,
RAISE ,
ADJUST ,
BACKLI T,
RGBRST
RGBRS T,
RGB_MENU
} ;
enum macro_keycodes {
KC_SAMPLEMACRO ,
} ;
// Aliases to make the keymap clearer.
# define LOWER MO(_LOWER)
# define RAISE MO(_RAISE)
# define ADJUST MO(_ADJUST)
const uint16_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
[ _DVORAK ] = LAYOUT ( \
@ -53,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL , KC_A , KC_O , KC_E , KC_U , KC_I , XXXXXXX , XXXXXXX , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS , \
KC_LSFT , KC_SCLN , KC_Q , KC_J , KC_K , KC_X , XXXXXXX , XXXXXXX , KC_B , KC_M , KC_W , KC_V , KC_Z , KC_RSFT , \
KC_GRV , KC_LGUI , KC_LEFT , KC_RGHT , LOWER , KC_LCTL , KC_LALT , KC_RALT , KC_RCTL , RAISE , KC_UP , KC_DOWN , KC_RGUI , KC_RCTL , \
KC_BSPC , KC_R GUI , KC_ENT , KC_SPC \
KC_BSPC , KC_L GUI , KC_ENT , KC_SPC \
) ,
@ -63,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL , KC_A , KC_O , KC_E , KC_U , KC_I , XXXXXXX , XXXXXXX , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS , \
KC_LSFT , KC_SCLN , KC_Q , KC_J , KC_K , KC_X , XXXXXXX , XXXXXXX , KC_B , KC_M , KC_W , KC_V , KC_Z , KC_RSFT , \
KC_GRV , KC_LGUI , KC_LEFT , KC_RGHT , LOWER , KC_LCTL , KC_LALT , KC_RALT , KC_RCTL , RAISE , KC_UP , KC_DOWN , KC_RGUI , KC_RCTL , \
KC_BSPC , KC_RGUI , KC_ENT , KC_SPC \
KC_BSPC , KC_DEL , KC_ENT , KC_SPC \
) ,
@ -73,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL , KC_A , KC_S , KC_D , KC_F , KC_G , XXXXXXX , XXXXXXX , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , \
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , XXXXXXX , XXXXXXX , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , \
KC_GRV , KC_LGUI , KC_LEFT , KC_RGHT , LOWER , KC_LCTL , KC_LALT , KC_RALT , KC_RCTL , RAISE , KC_UP , KC_DOWN , KC_RGUI , KC_RCTL , \
KC_BSPC , KC_R GUI , KC_ENT , KC_SPC \
KC_BSPC , KC_L GUI , KC_ENT , KC_SPC \
) ,
[ _COLEMAK ] = LAYOUT ( \
@ -82,7 +75,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL , KC_A , KC_R , KC_S , KC_T , KC_G , XXXXXXX , XXXXXXX , KC_H , KC_N , KC_E , KC_I , KC_O , KC_QUOT , \
KC_LSFT , KC_Z , KC_X , KC_C , KC_D , KC_V , XXXXXXX , XXXXXXX , KC_K , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , \
KC_GRV , KC_LGUI , KC_LEFT , KC_RGHT , LOWER , KC_LCTL , KC_LALT , KC_RALT , KC_RCTL , RAISE , KC_UP , KC_DOWN , KC_RGUI , KC_RCTL , \
KC_BSPC , KC_R GUI , KC_ENT , KC_SPC \
KC_BSPC , KC_L GUI , KC_ENT , KC_SPC \
) ,
[ _LOWER ] = LAYOUT ( \
@ -103,228 +96,266 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_DEL , _______ , _______ , KC_INS \
) ,
/* ADJUST
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | F11 | F1 | F2 | F3 | F4 | F5 | RESET | | | F6 | F7 | F8 | F9 | F10 | F12 |
* | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | - - - - - - | | - - - - - - | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - |
* | | | QWERTY | COLEMK | DVORAK | DESTNY | | | | | PrSc | ScLk | NmLk | | |
* | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | - - - - - - | | - - - - - - | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - |
* | | | Mute | Vol - | Vol + | | | | | RGBTOG | RGBMOD | HUI | SAI | VAI | |
* | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - |
* | | | Prev | Play | Next | | | | | | RGBRMD | HUD | SAD | VAD | |
* | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - |
* | | | | Home | End | | | | | | PgUp | PgDn | | | |
* ` - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - '
* | Del | | | | Ins |
* ` - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - '
*/
[ _ADJUST ] = LAYOUT ( \
_______ , _______ , _______ , _______ , _______ , _______ , RESET , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_PSCR , KC_SLCK , KC_NLCK , _______ , _______ , \
KC_CAPS , _______ , QWERTY , COLEMAK , DVORAK , DESTINY , XXXXXXX , XXXXXXX , RGB_TOG , RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , XXXXXXX , XXXXXXX , _______ , RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , \
_______ , _______ , _______ , RGB_SPI , RGB_SPD , _______ , XXXXXXX , XXXXXXX , _______ , RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , \
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
KC_DEL , _______ , _______ , KC_INS \
)
} ;
// define variables for reactive RGB
bool TOG_STATUS = false ;
int RGB_current_mode ;
// Setting ADJ layer RGB back to default
void update_tri_layer_RGB ( uint8_t layer1 , uint8_t layer2 , uint8_t layer3 ) {
if ( IS_LAYER_ON ( layer1 ) & & IS_LAYER_ON ( layer2 ) ) {
# ifdef RGBLIGHT_ENABLE
//rgblight_mode(RGB_current_mode);
# endif
layer_on ( layer3 ) ;
} else {
layer_off ( layer3 ) ;
}
}
layer_state_t layer_state_set_user ( layer_state_t state ) {
return update_tri_layer_state ( state , _LOWER , _RAISE , _ADJUST ) ;
}
} ;
bool process_record_user ( uint16_t keycode , keyrecord_t * record ) {
if ( record - > event . pressed ) {
switch ( keycode ) {
case DVORAK :
if ( record - > event . pressed ) {
set_single_persistent_default_layer ( _DVORAK ) ;
}
return false ;
case DESTINY :
set_single_persistent_default_layer ( _DESTINY ) ;
return false ;
case QWERTY :
set_single_persistent_default_layer ( _QWERTY ) ;
return false ;
case COLEMAK :
if ( record - > event . pressed ) {
set_single_persistent_default_layer ( _COLEMAK ) ;
}
return false ;
case QWERTY :
case RGBRST :
# if defined(RGBLIGHT_ENABLE)
eeconfig_update_rgblight_default ( ) ;
rgblight_enable ( ) ;
# elif defined(RGB_MATRIX_ENABLE)
eeconfig_update_rgb_matrix_default ( ) ;
# endif
return false ;
# if defined(RGB_MATRIX_ENABLE) && defined(KEYBOARD_rgbkb_sol_rev2)
case RGB_TOG :
if ( record - > event . pressed ) {
set_single_persistent_default_layer ( _QWERTY ) ;
rgb_matrix_increase_flags ( ) ;
}
return false ;
/*
Commenting this out since I removed the layer , but I want this in here for reference .
case FN :
# endif
case RGB_MENU :
# ifdef RGB_OLED_MENU
if ( record - > event . pressed ) {
//not sure how to have keyboard check mode and set it to a variable, so my work around
//uses another variable that would be set to true after the first time a reactive key is pressed.
if ( TOG_STATUS ) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
} else {
TOG_STATUS = ! TOG_STATUS ;
# ifdef RGBLIGHT_ENABLE
//rgblight_mode(15);
# endif
if ( get_mods ( ) & MOD_MASK_SHIFT ) {
rgb_encoder_state = ( rgb_encoder_state - 1 ) ;
if ( rgb_encoder_state > 5 ) {
rgb_encoder_state = 5 ;
}
layer_on ( _FN ) ;
} else {
# ifdef RGBLIGHT_ENABLE
//rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
# endif
layer_off ( _FN ) ;
TOG_STATUS = false ;
rgb_encoder_state = ( rgb_encoder_state + 1 ) % 6 ;
}
}
# endif
return false ;
}
}
return true ;
} ;
// For RGBRST Keycode
# if defined(RGB_MATRIX_ENABLE)
void rgb_matrix_increase_flags ( void )
{
switch ( rgb_matrix_get_flags ( ) ) {
case LED_FLAG_ALL : {
rgb_matrix_set_flags ( LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER ) ;
rgb_matrix_set_color_all ( 0 , 0 , 0 ) ;
}
break ;
*/
case ADJUST :
if ( record - > event . pressed ) {
layer_on ( _ADJUST ) ;
} else {
layer_off ( _ADJUST ) ;
case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER : {
rgb_matrix_set_flags ( LED_FLAG_UNDERGLOW ) ;
rgb_matrix_set_color_all ( 0 , 0 , 0 ) ;
}
return false ;
break ;
//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
case RGBRST :
# ifdef RGBLIGHT_ENABLE
if ( record - > event . pressed ) {
eeconfig_update_rgblight_default ( ) ;
rgblight_enable ( ) ;
RGB_current_mode = rgblight_config . mode ;
case LED_FLAG_UNDERGLOW : {
rgb_matrix_set_flags ( LED_FLAG_NONE ) ;
rgb_matrix_disable_noeeprom ( ) ;
}
break ;
default : {
rgb_matrix_set_flags ( LED_FLAG_ALL ) ;
rgb_matrix_enable_noeeprom ( ) ;
}
# endif
break ;
}
return true ;
}
void matrix_init_user ( void ) {
# ifdef RGBLIGHT_ENABLE
RGB_current_mode = rgblight_config . mode ;
# endif
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
# ifdef SSD1306OLED
iota_gfx_init ( ! has_usb ( ) ) ; // turns on the display
# endif
void rgb_matrix_decrease_flags ( void )
{
switch ( rgb_matrix_get_flags ( ) ) {
case LED_FLAG_ALL : {
rgb_matrix_set_flags ( LED_FLAG_NONE ) ;
rgb_matrix_disable_noeeprom ( ) ;
}
break ;
case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER : {
rgb_matrix_set_flags ( LED_FLAG_ALL ) ;
rgb_matrix_set_color_all ( 0 , 0 , 0 ) ;
}
break ;
case LED_FLAG_UNDERGLOW : {
rgb_matrix_set_flags ( LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER ) ;
rgb_matrix_set_color_all ( 0 , 0 , 0 ) ;
}
break ;
default : {
rgb_matrix_set_flags ( LED_FLAG_UNDERGLOW ) ;
rgb_matrix_enable_noeeprom ( ) ;
}
break ;
}
}
# endif
# ifdef RGB_OLED_MENU
uint8_t rgb_encoder_state = 4 ;
typedef void ( * rgb_matrix_f ) ( void ) ;
const rgb_matrix_f rgb_matrix_functions [ 6 ] [ 2 ] = {
{ rgb_matrix_increase_hue , rgb_matrix_decrease_hue } ,
{ rgb_matrix_increase_sat , rgb_matrix_decrease_sat } ,
{ rgb_matrix_increase_val , rgb_matrix_decrease_val } ,
{ rgb_matrix_increase_speed , rgb_matrix_decrease_speed } ,
{ rgb_matrix_step , rgb_matrix_step_reverse } ,
{ rgb_matrix_increase_flags , rgb_matrix_decrease_flags }
} ;
# endif
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
# ifdef SSD1306OLED
# ifdef ENCODER_ENABLE
// hook point for 'led_test' keymap
// 'default' keymap's led_test_init() is empty function, do nothing
// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35);
__attribute__ ( ( weak ) )
void led_test_init ( void ) { }
static pin_t encoders_pad_a [ ] = ENCODERS_PAD_A ;
# define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a) / sizeof(pin_t))
void matrix_scan_user ( void ) {
led_test_init ( ) ;
iota_gfx_task ( ) ; // this is what updates the display continuously
}
const uint16_t PROGMEM encoders [ ] [ NUMBER_OF_ENCODERS * 2 ] [ 2 ] = {
[ _QWERTY ] = ENCODER_LAYOUT ( \
KC_VOLU , KC_VOLD ,
KC_VOLU , KC_VOLD
) ,
[ _COLEMAK ] = ENCODER_LAYOUT ( \
_______ , _______ ,
_______ , _______
) ,
[ _FN ] = ENCODER_LAYOUT ( \
_______ , _______ ,
_______ , _______
) ,
[ _ADJ ] = ENCODER_LAYOUT ( \
_______ , _______ ,
_______ , _______
)
} ;
void matrix_update ( struct CharacterMatrix * dest ,
const struct CharacterMatrix * source ) {
if ( memcmp ( dest - > display , source - > display , sizeof ( dest - > display ) ) ) {
memcpy ( dest - > display , source - > display , sizeof ( dest - > display ) ) ;
dest - > dirty = true ;
void encoder_update_user ( uint8_t index , bool clockwise ) {
if ( ! is_keyboard_master ( ) )
return ;
# ifdef RGB_OLED_MENU
if ( index = = RGB_OLED_MENU ) {
( * rgb_matrix_functions [ rgb_encoder_state ] [ clockwise ] ) ( ) ;
} else
# endif
{
uint8_t layer = biton32 ( layer_state ) ;
uint16_t keycode = encoders [ layer ] [ index ] [ clockwise ] ;
while ( keycode = = KC_TRANSPARENT & & layer > 0 )
{
layer - - ;
if ( ( layer_state & ( 1 < < layer ) ) ! = 0 )
keycode = encoders [ layer ] [ index ] [ clockwise ] ;
}
if ( keycode ! = KC_TRANSPARENT )
tap_code16 ( keycode ) ;
}
}
# endif
//assign the right code to your layers for OLED display
# define L_BASE 0
# define L_FN (1<<_FN)
# define L_ADJ (1<<_ADJ)
static void render_logo ( struct CharacterMatrix * matrix ) {
// OLED Driver Logic
# ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user ( oled_rotation_t rotation ) {
if ( is_keyboard_master ( ) )
return OLED_ROTATION_270 ;
return rotation ;
}
static char logo [ ] = {
static void render_logo ( void ) {
static const char PROGMEM sol_logo [ ] = {
0x80 , 0x81 , 0x82 , 0x83 , 0x84 , 0x85 , 0x86 , 0x87 , 0x88 , 0x89 , 0x8a , 0x8b , 0x8c , 0x8d , 0x8e , 0x8f , 0x90 , 0x91 , 0x92 , 0x93 , 0x94 ,
0xa0 , 0xa1 , 0xa2 , 0xa3 , 0xa4 , 0xa5 , 0xa6 , 0xa7 , 0xa8 , 0xa9 , 0xaa , 0xab , 0xac , 0xad , 0xae , 0xaf , 0xb0 , 0xb1 , 0xb2 , 0xb3 , 0xb4 ,
0xc0 , 0xc1 , 0xc2 , 0xc3 , 0xc4 , 0xc5 , 0xc6 , 0xc7 , 0xc8 , 0xc9 , 0xca , 0xcb , 0xcc , 0xcd , 0xce , 0xcf , 0xd0 , 0xd1 , 0xd2 , 0xd3 , 0xd4 ,
0 } ;
matrix_write ( matrix , logo ) ;
//matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
0xc0 , 0xc1 , 0xc2 , 0xc3 , 0xc4 , 0xc5 , 0xc6 , 0xc7 , 0xc8 , 0xc9 , 0xca , 0xcb , 0xcc , 0xcd , 0xce , 0xcf , 0xd0 , 0xd1 , 0xd2 , 0xd3 , 0xd4 , 0
} ;
oled_write_P ( sol_logo , false ) ;
}
void render_status ( struct CharacterMatrix * matrix ) {
static void render_status ( void ) {
// Render to mode icon
static char logo [ ] [ 2 ] [ 3 ] = { { { 0x95 , 0x96 , 0 } , { 0xb5 , 0xb6 , 0 } } , { { 0x97 , 0x98 , 0 } , { 0xb7 , 0xb8 , 0 } } } ;
if ( keymap_config . swap_lalt_lgui = = false ) {
matrix_write ( matrix , logo [ 0 ] [ 0 ] ) ;
matrix_write_P ( matrix , PSTR ( " \n " ) ) ;
matrix_write ( matrix , logo [ 0 ] [ 1 ] ) ;
} else {
matrix_write ( matrix , logo [ 1 ] [ 0 ] ) ;
matrix_write_P ( matrix , PSTR ( " \n " ) ) ;
matrix_write ( matrix , logo [ 1 ] [ 1 ] ) ;
}
// 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
char buf [ 40 ] ;
snprintf ( buf , sizeof ( buf ) , " Undef-%ld " , layer_state ) ;
matrix_write_P ( matrix , PSTR ( " \n Layer: " ) ) ;
switch ( layer_state ) {
case L_BASE :
matrix_write_P ( matrix , PSTR ( " Default " ) ) ;
static const char PROGMEM sol_icon [ ] = {
0x9b , 0x9c , 0x9d , 0x9e , 0x9f ,
0xbb , 0xbc , 0xbd , 0xbe , 0xbf ,
0xdb , 0xdc , 0xdd , 0xde , 0xdf , 0
} ;
oled_write_P ( sol_icon , false ) ;
// Define layers here
oled_write_P ( PSTR ( " Layer----- " ) , false ) ;
uint8_t layer = layer_state ? biton ( layer_state ) : biton32 ( default_layer_state ) ;
switch ( layer ) {
case _DVORAK :
oled_write_P ( PSTR ( " DVRAK " ) , false ) ;
break ;
case _DESTINY :
oled_write_P ( PSTR ( " DSTNY " ) , false ) ;
break ;
/* case L_FN:
matrix_write_P ( matrix , PSTR ( " FN " ) ) ;
break ; */
case L_ADJ :
/* case L_ADJ_TRI: */
matrix_write_P ( matrix , PSTR ( " ADJ " ) ) ;
case _QWERTY :
oled_write_P ( PSTR ( " QWRTY " ) , false ) ;
break ;
case _COLEMAK :
oled_write_P ( PSTR ( " COLMK " ) , false ) ;
break ;
case _LOWER :
oled_write_P ( PSTR ( " LOWER " ) , false ) ;
break ;
case _RAISE :
oled_write_P ( PSTR ( " RAISE " ) , false ) ;
break ;
case _ADJUST :
oled_write_P ( PSTR ( " ADJST " ) , false ) ;
break ;
default :
matrix_write ( matrix , buf ) ;
oled_write_P ( PSTR ( " UNDEF " ) , false ) ;
}
// Host Keyboard LED Status
char led [ 40 ] ;
snprintf ( led , sizeof ( led ) , " \n %s %s %s " ,
( IS_HOST_LED_ON ( USB_LED_NUM_LOCK ) ) ? " NUMLOCK " : " " ,
( IS_HOST_LED_ON ( USB_LED_CAPS_LOCK ) ) ? " CAPS " : " " ,
( IS_HOST_LED_ON ( USB_LED_SCROLL_LOCK ) ) ? " SCLK " : " " ) ;
matrix_write ( matrix , led ) ;
}
void iota_gfx_task_user ( void ) {
struct CharacterMatrix matrix ;
# if DEBUG_TO_SCREEN
if ( debug_enable ) {
return ;
}
uint8_t led_state = host_keyboard_leds ( ) ;
oled_write_P ( PSTR ( " ----- " ) , false ) ;
oled_write_P ( IS_LED_ON ( led_state , USB_LED_NUM_LOCK ) ? PSTR ( " NUMLK " ) : PSTR ( " " ) , false ) ;
oled_write_P ( IS_LED_ON ( led_state , USB_LED_CAPS_LOCK ) ? PSTR ( " CAPLK " ) : PSTR ( " " ) , false ) ;
oled_write_P ( IS_LED_ON ( led_state , USB_LED_SCROLL_LOCK ) ? PSTR ( " SCRLK " ) : PSTR ( " " ) , false ) ;
# ifdef RGB_OLED_MENU
static char buffer [ 31 ] = { 0 } ;
snprintf ( buffer , sizeof ( buffer ) , " h%3d s%3d v%3d s%3d m%3d e%3d " , rgb_matrix_config . hsv . h , rgb_matrix_config . hsv . s , rgb_matrix_config . hsv . v , rgb_matrix_config . speed , rgb_matrix_config . mode , rgb_matrix_get_flags ( ) ) ;
buffer [ 4 + rgb_encoder_state * 5 ] = ' < ' ;
oled_write_P ( PSTR ( " ----- " ) , false ) ;
oled_write ( buffer , false ) ;
# endif
}
matrix_clear ( & matrix ) ;
if ( is_master ) {
render_status ( & matrix ) ;
} else {
render_logo ( & matrix ) ;
void oled_task_user ( void ) {
if ( is_keyboard_master ( ) ) {
render_status ( ) ;
} else {
render_logo ( ) ;
oled_scroll_left ( ) ;
}
matrix_update ( & display , & matrix ) ;
}
# endif