oled.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifdef OLED_ENABLE
  2. #include QMK_KEYBOARD_H
  3. #ifdef PROTOCOL_LUFA
  4. #include "lufa.h"
  5. #include "split_util.h"
  6. #endif
  7. // When add source files to SRC in rules.mk, you can use functions.
  8. const char *read_logo(void);
  9. const char *read_keylog(void);
  10. const char *read_keylogs(void);
  11. void set_keylog(uint16_t keycode, keyrecord_t *record);
  12. void matrix_scan_user(void) { iota_gfx_task(); }
  13. typedef struct {
  14. uint8_t state;
  15. char name[8];
  16. } LAYER_DISPLAY_NAME;
  17. #define LAYER_DISPLAY_MAX 5
  18. const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
  19. {0, "Base"},
  20. {2, "Code"},
  21. {4, "Fn"},
  22. {6, "Fn+Code"},
  23. {__UINT8_MAX__, "?"},
  24. };
  25. static uint8_t layer_name_idx;
  26. static char layer_status_buf[24] = "Layer: Base\n";
  27. #ifdef RGBLIGHT_ENABLE
  28. // Following line allows macro to read current RGB settings
  29. extern rgblight_config_t rgblight_config;
  30. void update_keymap_status(void) {
  31. snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "Layer:%s RGB: %d\n",
  32. layer_display_name[layer_name_idx].name, rgblight_config.mode);
  33. }
  34. #else
  35. void update_keymap_status(void) {
  36. snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "Layer:%s\n",
  37. layer_display_name[layer_name_idx].name);
  38. }
  39. #endif
  40. void matrix_init_user(void) {
  41. update_keymap_status();
  42. }
  43. // declared in users/rs/rs.c
  44. void rgb_mod_changed_keymap(void) {
  45. update_keymap_status();
  46. }
  47. // declared in users/rs/rs.c
  48. void keylog_set_keymap(uint16_t keycode, keyrecord_t *record) {
  49. set_keylog(keycode, record);
  50. }
  51. layer_state_t layer_state_set_user(layer_state_t state) {
  52. for (layer_name_idx = 0; layer_name_idx < LAYER_DISPLAY_MAX; ++layer_name_idx) {
  53. if (state == 0 && layer_display_name[layer_name_idx].state == default_layer_state) {
  54. break;
  55. } else if (state != 0 && layer_display_name[layer_name_idx].state == state) {
  56. break;
  57. }
  58. }
  59. update_keymap_status();
  60. return state;
  61. }
  62. static inline void render_keymap_status(struct CharacterMatrix *matrix) {
  63. oled_write(layer_status_buf);
  64. }
  65. bool oled_task_user(void) {
  66. if (is_keyboard_master()) {
  67. render_keymap_status(matrix);
  68. oled_write_ln(read_keylog(), false);
  69. oled_write_ln(read_keylogs(), false);
  70. } else {
  71. oled_write(read_logo(), false);
  72. }
  73. return false;
  74. }
  75. #endif