logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

r2g.c (7404B)


  1. /* Copyright 2023 Elliot Powell
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include "quantum.h"
  17. #ifdef OLED_ENABLE
  18. oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
  19. if (!is_keyboard_master()) {
  20. return OLED_ROTATION_180; // flips the display 180 degrees if offhand
  21. }
  22. return rotation;
  23. }
  24. void oled_render_layer_state_r2g(void) {
  25. oled_write_P(PSTR("Layer: "), false);
  26. switch (get_highest_layer(layer_state)) {
  27. case 0:
  28. oled_write_ln_P(PSTR("Default"), false);
  29. break;
  30. case 1:
  31. oled_write_ln_P(PSTR("Lower"), false);
  32. break;
  33. case 2:
  34. oled_write_ln_P(PSTR("Raise"), false);
  35. break;
  36. case 3:
  37. oled_write_ln_P(PSTR("Adjust"), false);
  38. break;
  39. default:
  40. oled_write_ln_P(PSTR("Unknown"), false);
  41. break;
  42. }
  43. }
  44. //char keylog_str_r2g[24] = {};
  45. const char code_to_name_r2g[60] = {
  46. ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
  47. 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
  48. 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
  49. '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
  50. 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
  51. '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
  52. char key_name_r2g = ' ';
  53. uint16_t last_keycode_r2g;
  54. uint8_t last_row_r2g;
  55. uint8_t last_col_r2g;
  56. void set_keylog_r2g(uint16_t keycode, keyrecord_t *record) {
  57. key_name_r2g = ' ';
  58. last_keycode_r2g = keycode;
  59. if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
  60. (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { last_keycode_r2g = keycode & 0xFF; }
  61. if (keycode < 60) {
  62. key_name_r2g = code_to_name_r2g[keycode];
  63. }
  64. last_row_r2g = record->event.key.row;
  65. last_col_r2g = record->event.key.col;
  66. }
  67. const char *depad_str(const char *depad_str, char depad_char) {
  68. while (*depad_str == depad_char) ++depad_str;
  69. return depad_str;
  70. }
  71. void oled_render_keylog_r2g(void) {
  72. //oled_write(keylog_str_r2g, false);
  73. const char *last_row_r2g_str = get_u8_str(last_row_r2g, ' ');
  74. oled_write(depad_str(last_row_r2g_str, ' '), false);
  75. oled_write_P(PSTR("x"), false);
  76. const char *last_col_r2g_str = get_u8_str(last_col_r2g, ' ');
  77. oled_write(depad_str(last_col_r2g_str, ' '), false);
  78. oled_write_P(PSTR(", k"), false);
  79. const char *last_keycode_r2g_str = get_u16_str(last_keycode_r2g, ' ');
  80. oled_write(depad_str(last_keycode_r2g_str, ' '), false);
  81. oled_write_P(PSTR(":"), false);
  82. oled_write_char(key_name_r2g, false);
  83. }
  84. void render_bootmagic_status_r2g(bool status) {
  85. /* Show Ctrl-Gui Swap options */
  86. static const char PROGMEM logo[][2][3] = {
  87. {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
  88. {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
  89. };
  90. if (status) {
  91. oled_write_ln_P(logo[0][0], false);
  92. oled_write_ln_P(logo[0][1], false);
  93. } else {
  94. oled_write_ln_P(logo[1][0], false);
  95. oled_write_ln_P(logo[1][1], false);
  96. }
  97. }
  98. void oled_render_logo_r2g(void) {
  99. static const char PROGMEM mb_logo[] = {
  100. 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  101. 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  102. 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f,
  103. 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  104. 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  105. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  106. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  107. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  108. 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x83, 0x83, 0x83, 0x83, 0x83, 0xff, 0xff,
  109. 0x83, 0x83, 0x83, 0x83, 0xff, 0xff, 0x83, 0x83, 0x83, 0x83, 0x83, 0xff, 0xff, 0x83, 0x83, 0x83,
  110. 0x83, 0xff, 0xff, 0x83, 0x83, 0x83, 0x83, 0x83, 0xff, 0xff, 0xff, 0xff, 0x82, 0x82, 0x82, 0x82,
  111. 0x82, 0xff, 0xff, 0x83, 0x83, 0x83, 0x83, 0xff, 0xff, 0x83, 0x83, 0x83, 0x83, 0x83, 0xff, 0xff,
  112. 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xfc, 0xfc,
  113. 0x9c, 0x9c, 0xfc, 0xfc, 0xf8, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x78, 0x7c, 0x3c,
  114. 0x9c, 0xfc, 0xfc, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xf8, 0x3c, 0x3c,
  115. 0x9c, 0xbc, 0xfc, 0xb8, 0xb8, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  116. 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x41, 0x41, 0x41, 0x41, 0x41, 0xff, 0xff,
  117. 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x41, 0x41, 0x41, 0x41, 0xff, 0xff, 0xff, 0xff, 0xff,
  118. 0xff, 0xff, 0xff, 0x41, 0x41, 0x41, 0x41, 0x41, 0xff, 0xff, 0xff, 0xff, 0x41, 0x41, 0x41, 0x41,
  119. 0x41, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0x41, 0x41, 0x41, 0x41, 0x41, 0xff, 0xff,
  120. 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f,
  121. 0x03, 0x07, 0x0f, 0x3f, 0x3f, 0x3e, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x3e, 0x3f,
  122. 0x3f, 0x3f, 0x3b, 0x39, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x1f, 0x3f, 0x3c, 0x38,
  123. 0x3b, 0x3b, 0x3f, 0x1f, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  124. 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff,
  125. 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
  126. 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0,
  127. 0xf0, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff,
  128. 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  129. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  130. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  131. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  132. };
  133. oled_write_raw_P(mb_logo, sizeof(mb_logo));
  134. //oled_set_cursor(oled_max_chars()/2,oled_max_lines()/2);
  135. //oled_write_P(PSTR("R2G"), false);
  136. }
  137. bool oled_task_kb(void) {
  138. if (!oled_task_user()) { return false; }
  139. if (is_keyboard_master()) {
  140. oled_render_layer_state_r2g();
  141. oled_render_keylog_r2g();
  142. } else {
  143. oled_render_logo_r2g();
  144. }
  145. return false;
  146. }
  147. bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
  148. if (record->event.pressed) {
  149. set_keylog_r2g(keycode, record);
  150. }
  151. return process_record_user(keycode, record);
  152. }
  153. #endif // OLED_ENABLE