123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #ifdef OLED_ENABLE
- #include QMK_KEYBOARD_H
- #ifdef PROTOCOL_LUFA
- #include "lufa.h"
- #include "split_util.h"
- #endif
- // When add source files to SRC in rules.mk, you can use functions.
- const char *read_logo(void);
- const char *read_keylog(void);
- const char *read_keylogs(void);
- void set_keylog(uint16_t keycode, keyrecord_t *record);
- void matrix_scan_user(void) { iota_gfx_task(); }
- typedef struct {
- uint8_t state;
- char name[8];
- } LAYER_DISPLAY_NAME;
- #define LAYER_DISPLAY_MAX 5
- const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
- {0, "Base"},
- {2, "Code"},
- {4, "Fn"},
- {6, "Fn+Code"},
- {__UINT8_MAX__, "?"},
- };
- static uint8_t layer_name_idx;
- static char layer_status_buf[24] = "Layer: Base\n";
- #ifdef RGBLIGHT_ENABLE
- // Following line allows macro to read current RGB settings
- extern rgblight_config_t rgblight_config;
- void update_keymap_status(void) {
- snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "Layer:%s RGB: %d\n",
- layer_display_name[layer_name_idx].name, rgblight_config.mode);
- }
- #else
- void update_keymap_status(void) {
- snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "Layer:%s\n",
- layer_display_name[layer_name_idx].name);
- }
- #endif
- void matrix_init_user(void) {
- update_keymap_status();
- }
- // declared in users/rs/rs.c
- void rgb_mod_changed_keymap(void) {
- update_keymap_status();
- }
- // declared in users/rs/rs.c
- void keylog_set_keymap(uint16_t keycode, keyrecord_t *record) {
- set_keylog(keycode, record);
- }
- layer_state_t layer_state_set_user(layer_state_t state) {
- for (layer_name_idx = 0; layer_name_idx < LAYER_DISPLAY_MAX; ++layer_name_idx) {
- if (state == 0 && layer_display_name[layer_name_idx].state == default_layer_state) {
- break;
- } else if (state != 0 && layer_display_name[layer_name_idx].state == state) {
- break;
- }
- }
- update_keymap_status();
- return state;
- }
- static inline void render_keymap_status(struct CharacterMatrix *matrix) {
- oled_write(layer_status_buf);
- }
- bool oled_task_user(void) {
- if (is_keyboard_master()) {
- render_keymap_status(matrix);
- oled_write_ln(read_keylog(), false);
- oled_write_ln(read_keylogs(), false);
- } else {
- oled_write(read_logo(), false);
- }
- return false;
- }
- #endif
|