| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #ifdef SSD1306OLED
- #include QMK_KEYBOARD_H
- #include "ssd1306.h"
- #ifdef PROTOCOL_LUFA
- #include "lufa.h"
- #include "split_util.h"
- #endif
- extern uint8_t is_master;
- // 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) {
- iota_gfx_init(!has_usb()); // turns on the display
- 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);
- }
- uint32_t layer_state_set_user(uint32_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) {
- matrix_write(matrix, layer_status_buf);
- }
- void matrix_render_user(struct CharacterMatrix *matrix) {
- if (is_master) {
- render_keymap_status(matrix);
- matrix_write_ln(matrix, read_keylog());
- matrix_write_ln(matrix, read_keylogs());
- } else {
- matrix_write(matrix, read_logo());
- }
- }
- 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 iota_gfx_task_user(void) {
- struct CharacterMatrix matrix;
- matrix_clear(&matrix);
- matrix_render_user(&matrix);
- matrix_update(&display, &matrix);
- }
- #endif
|