You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

443 lines
21 KiB

  1. #include QMK_KEYBOARD_H
  2. #include "keymap_jp.h"
  3. #include "bootloader.h"
  4. #ifdef PROTOCOL_LUFA
  5. #include "lufa.h"
  6. #include "split_util.h"
  7. #endif
  8. #ifdef SSD1306OLED
  9. #include "ssd1306.h"
  10. #endif
  11. // * If you want to recognize that you pressed the Adjust key with the Lower / Raise key you can enable this comment out. However, the binary size may be over. *
  12. // #define ADJUST_MACRO_ENABLE
  13. // * If you want to use the Kana key you can enable this comment out. However, the binary size may be over. *
  14. // #define KANA_ENABLE
  15. extern keymap_config_t keymap_config;
  16. #ifdef RGBLIGHT_ENABLE
  17. //Following line allows macro to read current RGB settings
  18. extern rgblight_config_t rgblight_config;
  19. #endif
  20. extern uint8_t is_master;
  21. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  22. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  23. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  24. // entirely and just use numbers.
  25. enum layer_number {
  26. _BASE = 0,
  27. _BAS_E,
  28. _LOWER,
  29. _LOW_E,
  30. _RAISE,
  31. _RAI_E,
  32. _ADJUST,
  33. };
  34. enum custom_keycodes {
  35. RGBRST = SAFE_RANGE,
  36. #ifdef KANA_ENABLE
  37. EISU,
  38. KANA,
  39. #endif
  40. };
  41. // Layer Mode aliases
  42. #define DL_BAS DF(_BASE)
  43. #define DL_BASE DF(_BAS_E)
  44. #define ML_LOW MO(_LOWER)
  45. #define ML_LOWE MO(_LOW_E)
  46. #define ML_RAI MO(_RAISE)
  47. #define ML_RAIE MO(_RAI_E)
  48. #define ML_ADJ MO(_ADJUST)
  49. #if HELIX_ROWS == 5
  50. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  51. /* Qwerty JIS Normal
  52. * ,-----------------------------------------. ,-----------------------------------------.
  53. * | Esc | 1! | 2" | 3# | 4$ | 5% | | 6& | 7' | 8( | 9) | 0 | -= |
  54. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  55. * | KANJI| Q | W | E | R | T | | Y | U | I | O | P | @` |
  56. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  57. * | Tab | A | S | D | F | G | | H | J | K | L | ;+ | :* |
  58. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  59. * | Shift| Z | X | C | V | B | N | B | N | M | ,< | .> | Up |Enter |
  60. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  61. * | Ctrl | GUI | Alt |Adjust|Lower |Space |Bksp |Space |Space |Raise | APP | Left | Down |Right |
  62. * `-------------------------------------------------------------------------------------------------'
  63. */
  64. [_BASE] = LAYOUT( \
  65. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
  66. JP_ZHTG, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, \
  67. KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, \
  68. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT, \
  69. KC_LCTL, KC_LALT, KC_LGUI, ML_ADJ, ML_LOW, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, ML_RAI, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT \
  70. ),
  71. /* Qwerty JIS Exchange L and R
  72. * ,-----------------------------------------. ,-----------------------------------------.
  73. * | 6& | 7' | 8( | 9) | 0 | -= | | Esc | 1! | 2" | 3# | 4$ | 5% |
  74. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  75. * | Y | U | I | O | P | @` | | Tab | Q | W | E | R | T |
  76. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  77. * | H | J | K | L | ;+ | :* | | | A | S | D | F | G |
  78. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  79. * | N | M | ,< | .> | /? | Up |Enter |KANJI | Shift| Z | X | C | V | B |
  80. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  81. * |Space |Raise | }] | APP | Left | Down |Right |Adjust| Ctrl | GUI | Alt | [{ |Lower | Bksp |
  82. * `-------------------------------------------------------------------------------------------------'
  83. */
  84. [_BAS_E] = LAYOUT( \
  85. KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, \
  86. KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \
  87. KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, \
  88. KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_ENT, JP_ZHTG, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, \
  89. KC_SPC, ML_RAIE, JP_RBRC, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, ML_ADJ, KC_LCTL, KC_LALT, KC_LGUI, JP_LBRC, ML_LOWE, KC_BSPC \
  90. ),
  91. /* Lower JIS Normal
  92. * ,-----------------------------------------. ,-----------------------------------------.
  93. * | | | | | | | | | | | -= | ^~ | \| |
  94. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  95. * | | | | | | | | | | | | @` | [{ |
  96. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  97. * | | | | | | | | | | | ;+ | :* | ]} |
  98. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  99. * | | | | | | | | | | | ,< | .> | /? | \_ |
  100. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  101. * | | | | | | | Del | | | | | | | |
  102. * `-------------------------------------------------------------------------------------------------'
  103. */
  104. [_LOWER] = LAYOUT( \
  105. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, JP_CIRC, JP_YEN, \
  106. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_AT, JP_LBRC, \
  107. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, JP_COLN, JP_RBRC, \
  108. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH, JP_BSLS, \
  109. _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC_DEL, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
  110. ),
  111. /* Lower JIS Exchange L and R
  112. * ,-----------------------------------------. ,-----------------------------------------.
  113. * | | | | -= | ^~ | \| | | | | | | | |
  114. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  115. * | | | | | @` | [{ | | | | | | | |
  116. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  117. * | | | | ;+ | :* | ]} | | | | | | | |
  118. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  119. * | | ,< | .> | /? | \_ |PageUp| | | | | | | | |
  120. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  121. * | | | | | Home |PageDn| End | | | | | | | Del |
  122. * `-------------------------------------------------------------------------------------------------'
  123. */
  124. [_LOW_E] = LAYOUT( \
  125. _______, XXXXXXX, XXXXXXX, KC_MINS, JP_CIRC, JP_YEN, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  126. _______, XXXXXXX, XXXXXXX, XXXXXXX, JP_AT, JP_LBRC, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  127. _______, XXXXXXX, XXXXXXX, KC_SCLN, JP_COLN, JP_RBRC, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  128. _______, KC_COMM, KC_DOT, KC_SLSH, JP_BSLS, KC_PGUP, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  129. _______, _______, XXXXXXX, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, _______, _______, XXXXXXX, _______, KC_DEL \
  130. ),
  131. /* Raise JIS Normal
  132. * ,-----------------------------------------. ,-----------------------------------------.
  133. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  134. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  135. * | | | | | | | | |MsWhL |MsWhU | Home |PageUp| F12 |
  136. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  137. * | | | | | | | | |MsWhR |MsWhD | End |PageDn| |
  138. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  139. * | | | | | | | | | | |MsBtn1|MsBtn2| MsUp | |
  140. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  141. * | | | | | | | | | | | |MsLeft|MsDown|MsRght|
  142. * `-------------------------------------------------------------------------------------------------'
  143. */
  144. [_RAISE] = LAYOUT( \
  145. _______, KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, \
  146. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_U, KC_HOME, KC_PGUP, KC_F12, \
  147. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_R, KC_WH_D, KC_END, KC_PGDN, XXXXXXX, \
  148. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_MS_U, XXXXXXX, \
  149. _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R \
  150. ),
  151. /* Raise JIS Exchange L and R
  152. * ,-----------------------------------------. ,-----------------------------------------.
  153. * | F6 | F7 | F8 | F9 | F10 | F11 | | | F1 | F2 | F3 | F4 | F5 |
  154. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  155. * | | | |MsWhL |MsWhU | F12 | | | | | | | |
  156. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  157. * | | | |MsWhR |MsWhD | | | | | | | | |
  158. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  159. * | | | |MsBtn1|MsBtn2| MsUp | | | | | | | | |
  160. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  161. * | | | | |MsLeft|MsDown|MsRght| | | | | | | |
  162. * `-------------------------------------------------------------------------------------------------'
  163. */
  164. [_RAI_E] = LAYOUT( \
  165. KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, \
  166. XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_U, KC_F12, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  167. XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_R, KC_WH_D, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  168. XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_MS_U, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  169. _______, _______, XXXXXXX, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX \
  170. ),
  171. /* Adjust (Lower + Raise) Common map for Normal and Exchange
  172. * ,-----------------------------------------. ,-----------------------------------------.
  173. * | | Reset|RGBRST| | | | | | Reset|RGBRST| | | |
  174. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  175. * | |ModNrm|ModExc| Mac | Win | | | |ModNrm|ModExc| Mac | Win | |
  176. * |------+------+------+------+------+------| |------+------+------+------+------|------+
  177. * | |RGB ON| HUE+ | SAT+ | VAL+ | | | |RGB ON| HUE+ | SAT+ | VAL+ | |
  178. * |------+------+------+------+------+------+------+------+------+------+------+------+------|------+
  179. * | | MODE | HUE- | SAT- | VAL- | | | | | MODE | HUE- | SAT- | VAL- | |
  180. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  181. * | | | | | | | | | | | | | | |
  182. * `-------------------------------------------------------------------------------------------------'
  183. */
  184. [_ADJUST] = LAYOUT( \
  185. XXXXXXX, RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, \
  186. XXXXXXX, DL_BAS, DL_BASE, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, DL_BAS, DL_BASE, AG_NORM, AG_SWAP, XXXXXXX, \
  187. XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, \
  188. XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, \
  189. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
  190. ),
  191. };
  192. #else
  193. #error "undefined keymaps"
  194. #endif
  195. #ifdef SSD1306OLED
  196. char keylog[24] = {};
  197. const char code_to_name[60] = {
  198. ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
  199. 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
  200. 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
  201. '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
  202. 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
  203. ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
  204. static inline void set_keylog(uint16_t keycode, keyrecord_t *record)
  205. {
  206. char name = ' ';
  207. uint8_t leds = host_keyboard_leds();
  208. if (keycode < 60)
  209. {
  210. name = code_to_name[keycode];
  211. }
  212. // update keylog
  213. snprintf(keylog, sizeof(keylog), "\n%dx%d %2x %c %c %c %c",
  214. record->event.key.row,
  215. record->event.key.col,
  216. keycode,
  217. name,
  218. (leds & (1<<USB_LED_NUM_LOCK)) ? 'N' : ' ',
  219. (leds & (1<<USB_LED_CAPS_LOCK)) ? 'C' : ' ',
  220. (leds & (1<<USB_LED_SCROLL_LOCK)) ? 'S' : ' '
  221. );
  222. }
  223. #endif
  224. #ifdef RGBLIGHT_ENABLE
  225. #define RGBLIGHT(mode) rgblight_mode(mode)
  226. #else
  227. #define RGBLIGHT(mode)
  228. #endif
  229. // define variables for reactive RGB
  230. int RGB_current_mode;
  231. #ifdef ADJUST_MACRO_ENABLE
  232. // Setting ADJUST layer RGB back to default
  233. void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
  234. if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
  235. RGBLIGHT(RGB_current_mode);
  236. layer_on(layer3);
  237. } else {
  238. layer_off(layer3);
  239. }
  240. }
  241. #define ADJUST_MACRO(layer1, layer2, layer3) update_tri_layer_RGB(layer1, layer2, layer3)
  242. #else
  243. #define ADJUST_MACRO(layer1, layer2, layer3)
  244. #endif
  245. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  246. #ifdef SSD1306OLED
  247. if (record->event.pressed) {
  248. set_keylog(keycode, record);
  249. }
  250. #endif
  251. switch (keycode) {
  252. #ifdef RGBLIGHT_ENABLE
  253. //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
  254. case RGB_MOD:
  255. if (record->event.pressed) {
  256. rgblight_mode(RGB_current_mode);
  257. rgblight_step();
  258. RGB_current_mode = rgblight_config.mode;
  259. }
  260. break;
  261. #endif
  262. #ifdef KANA_ENABLE
  263. case EISU:
  264. if (record->event.pressed) {
  265. if (keymap_config.swap_lalt_lgui==false) {
  266. register_code(KC_LANG2);
  267. } else {
  268. SEND_STRING(SS_LALT("`"));
  269. }
  270. } else {
  271. unregister_code(KC_LANG2);
  272. }
  273. break;
  274. case KANA:
  275. if (record->event.pressed) {
  276. if(keymap_config.swap_lalt_lgui==false){
  277. register_code(KC_LANG1);
  278. }else{
  279. SEND_STRING(SS_LALT("`"));
  280. }
  281. } else {
  282. unregister_code(KC_LANG1);
  283. }
  284. break;
  285. #endif
  286. #ifdef RGBLIGHT_ENABLE
  287. case RGBRST:
  288. if (record->event.pressed) {
  289. eeconfig_update_rgblight_default();
  290. rgblight_enable();
  291. RGB_current_mode = rgblight_config.mode;
  292. }
  293. break;
  294. #endif
  295. default:
  296. return true;
  297. }
  298. return false;
  299. }
  300. void matrix_init_user(void) {
  301. #ifdef RGBLIGHT_ENABLE
  302. RGB_current_mode = rgblight_config.mode;
  303. #endif
  304. //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
  305. #ifdef SSD1306OLED
  306. iota_gfx_init(!has_usb()); // turns on the display
  307. #endif
  308. }
  309. //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
  310. #ifdef SSD1306OLED
  311. void matrix_scan_user(void) {
  312. iota_gfx_task(); // this is what updates the display continuously
  313. }
  314. static inline void matrix_update(struct CharacterMatrix *dest,
  315. const struct CharacterMatrix *source) {
  316. if (memcmp(dest->display, source->display, sizeof(dest->display))) {
  317. memcpy(dest->display, source->display, sizeof(dest->display));
  318. dest->dirty = true;
  319. }
  320. }
  321. //assign the right code to your layers for OLED display
  322. #define L_BASE _BASE
  323. #define L_LOWER (1<<_LOWER)
  324. #define L_RAISE (1<<_RAISE)
  325. #define L_ADJUST (1<<_ADJUST)
  326. #define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
  327. #define L_LOW_E (1<<_LOW_E)
  328. #define L_RAI_E (1<<_RAI_E)
  329. #define L_ADJUST_TRIE (L_ADJUST|L_RAI_E|L_LOW_E)
  330. const char helix_logo[]={
  331. 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
  332. 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
  333. 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
  334. 0};
  335. static inline void render_logo(struct CharacterMatrix *matrix) {
  336. matrix_write(matrix, helix_logo);
  337. }
  338. const char mac_win_logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
  339. static inline void render_status(struct CharacterMatrix *matrix) {
  340. char buf[20];
  341. // Render to mode icon
  342. if(keymap_config.swap_lalt_lgui==false){
  343. matrix_write(matrix, mac_win_logo[0][0]);
  344. matrix_write_P(matrix, PSTR("\n"));
  345. matrix_write(matrix, mac_win_logo[0][1]);
  346. } else {
  347. matrix_write(matrix, mac_win_logo[1][0]);
  348. matrix_write_P(matrix, PSTR("\n"));
  349. matrix_write(matrix, mac_win_logo[1][1]);
  350. }
  351. #ifdef RGBLIGHT_ENABLE
  352. snprintf(buf, sizeof(buf), " LED mode:%d", (short)RGB_current_mode);
  353. matrix_write(matrix, buf);
  354. #endif
  355. // 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
  356. matrix_write_P(matrix, PSTR("\nLayer: "));
  357. switch (layer_state) {
  358. case L_BASE:
  359. matrix_write_P(matrix, default_layer_state == (1UL<<_BAS_E) ? PSTR("BaseEx") : PSTR("Base"));
  360. break;
  361. case L_RAISE:
  362. matrix_write_P(matrix, PSTR("Raise"));
  363. break;
  364. case L_RAI_E:
  365. matrix_write_P(matrix, PSTR("RaiseEx"));
  366. break;
  367. case L_LOWER:
  368. matrix_write_P(matrix, PSTR("Lower"));
  369. break;
  370. case L_LOW_E:
  371. matrix_write_P(matrix, PSTR("LowerEx"));
  372. break;
  373. case L_ADJUST:
  374. case L_ADJUST_TRI:
  375. case L_ADJUST_TRIE:
  376. matrix_write_P(matrix, PSTR("Adjust"));
  377. break;
  378. default:
  379. snprintf(buf, sizeof(buf), "%d", (short)layer_state);
  380. matrix_write(matrix, buf);
  381. }
  382. matrix_write(matrix, keylog);
  383. }
  384. void iota_gfx_task_user(void) {
  385. struct CharacterMatrix matrix;
  386. #if DEBUG_TO_SCREEN
  387. if (debug_enable) {
  388. return;
  389. }
  390. #endif
  391. matrix_clear(&matrix);
  392. if (is_master) {
  393. render_status(&matrix);
  394. } else {
  395. render_logo(&matrix);
  396. }
  397. matrix_update(&display, &matrix);
  398. }
  399. #endif