logo

qmk_firmware

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

macroflow_original.c (12706B)


  1. // Copyright 2024 Patrick Mathern (@Patrickemm)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "quantum.h"
  4. static uint16_t oled_logo_timer = 0;
  5. static bool has_startup_ran = false;
  6. #ifndef SHOW_LOGO
  7. # define SHOW_LOGO 2500
  8. #endif
  9. enum layer_names {
  10. one,
  11. two,
  12. three,
  13. four,
  14. five,
  15. six,
  16. seven,
  17. eight
  18. };
  19. oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
  20. return OLED_ROTATION_180;
  21. }
  22. bool oled_task_kb(void) {
  23. if (!oled_task_user()) {
  24. return false;
  25. }
  26. if (!has_startup_ran) {
  27. static const char startUp [] PROGMEM = {
  28. // 'startUp', 128x32px
  29. 0, 0, 0,128,192,192,128,128, 0, 0,192,192, 0, 0, 0,192,192, 0, 0,128,128,192,192,128, 0, 0,192,192,192,192,192,192,192, 0, 0,128,128,192,192,128, 0, 0, 0,192,192,128, 0, 0, 0, 0,192,192,128, 0, 0, 0,128,192,192, 0, 0, 0, 0, 0,128,128,192,192,128, 0, 0,128,192,192,192,192,128,128, 0, 0, 0,128,192,192,192,128, 0, 0, 0,128,128,192,192,128, 0, 0, 0, 0, 0, 0, 0,128,192,192,128, 0, 0, 0, 0,128,192,192,128,128, 0, 0,192,192,192, 0, 0, 0, 0,128,192,192, 0,0,
  30. 0, 0,255,255, 1, 1, 1, 31, 30, 0,255,255, 0, 0, 0,255,255, 0, 30,127,241,193,129, 7, 15, 0, 1, 1, 1,255,255, 1, 1, 0,254,255, 1, 1, 1,255,255, 0, 0,255, 63,255,224, 0,128,254, 63,255,255, 0, 0,224,255, 15,127,255,192, 0, 0,254,255, 1, 1, 1, 31, 31, 0,255,255,129,129,129,255,127, 0, 0,255,255, 1, 1, 1,255,255, 0, 30,127,241,193,129, 7, 15, 0, 0, 0, 0,252,255, 3, 1, 1, 3, 31, 30, 0,255,255, 1, 1, 1,255,254, 0,255,255,127,252, 0, 0,240,255,255,255, 0, 0, 0, 0,255,255,128,128,192,252, 60, 0,127,255,128,128,128,255,127, 0,120,248,128,129,131,255,254, 0, 0, 0, 0,255,255, 0, 0, 0,127,255,128,128,128,255,255, 0, 0,255, 0, 3,255,248,255, 15, 0,255,255, 0,248,255, 27, 24, 24, 63,255,224, 0,127,255,128,128,128,252,124, 0,255,255, 3, 1, 3,127,254,240, 0,127,255,128,128,128,255,127, 0,120,248,128,129,131,255,254, 0,128,128, 0, 63,255,192,128,128,224,252, 60, 0,255,255,128,128,128,255,127, 0,255,255, 0, 31,255,252,127, 1,255,255, 0, 0,0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0
  31. };
  32. oled_write_raw_P(startUp, sizeof(startUp));
  33. if (timer_elapsed(oled_logo_timer) >= SHOW_LOGO) {
  34. has_startup_ran = true;
  35. oled_clear();
  36. }
  37. } else {
  38. static const char PROGMEM layerImage[4][67+1] = {
  39. { 224,224,224,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,224,224,224,224, 0, 0, 0, 0, 0,224,224,224,128, 0, 0, 0, 0,128,224,224,224, 0, 0, 0,224,224,224,224,224,224,224,224,224,224,224, 0, 0,224,224,224,224,224,224,224,224,224,192,128, 0 },
  40. { 255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,255,255,127, 15,127,255,255,240, 0, 0, 0, 0, 3, 15,127,252,240,240,252,127, 15, 3, 0, 0, 0, 0,255,255,255,255,192,192,192,192,192, 0, 0, 0, 0,255,255,255,255,192,192,192,225,255,255,255,127 },
  41. { 255,255,255,255,192,192,192,192,192,192,192, 0, 0,192,254,255,255,127, 28, 28, 28,127,255,255,254,192, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,129,129,129,129,129,128,128, 0, 0,255,255,255,255, 1, 1, 7,127,255,255,248,192 },
  42. { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 3, 3, 3, 3 },
  43. };
  44. static const char PROGMEM layer1[4][30+1] = {
  45. { 128,224,240,240,248,248,248,248,248,248,248,120,120, 56, 56, 24, 24, 24,248,248,248,248,248,248,248,248,240,240,224,128 },
  46. { 255,255,255,255,255,255,255,255,255,255,255,252,252,252, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255 },
  47. { 255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255 },
  48. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 28, 28, 28, 28, 31, 31, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  49. };
  50. static const char PROGMEM layer2[4][30+1] = {
  51. { 128,224,240,240,248,248,248,248,248,248,120, 56, 24, 24, 24, 24, 24, 24, 56,120,248,248,248,248,248,248,240,240,224,128 },
  52. { 255,255,255,255,255,255,255,255,255,255,248,248,248,254,255, 63, 6, 0,128,224,255,255,255,255,255,255,255,255,255,255 },
  53. { 255,255,255,255,255,255,255,255,255,255, 63, 15, 7, 1, 64,112,120,126,127,127,255,255,255,255,255,255,255,255,255,255 },
  54. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  55. };
  56. static const char PROGMEM layer3[4][30+1] = {
  57. { 128,224,240,240,248,248,248,248,248,248,120, 56, 24, 24, 24, 24, 24, 24, 56,120,248,248,248,248,248,248,240,240,224,128 },
  58. { 255,255,255,255,255,255,255,255,255,255,248,248,248, 62, 63, 63, 30, 0,128,192,255,255,255,255,255,255,255,255,255,255 },
  59. { 255,255,255,255,255,255,255,255,255,255, 31, 31, 31,126,254,254,124, 0, 0, 1,255,255,255,255,255,255,255,255,255,255 },
  60. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 30, 28, 24, 24, 24, 24, 24, 24, 28, 30, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  61. };
  62. static const char PROGMEM layer4[4][30+1] = {
  63. { 128,224,240,240,248,248,248,248,248,248,248,248,248,248,120, 24, 24, 24, 24,248,248,248,248,248,248,248,240,240,224,128 },
  64. { 255,255,255,255,255,255,255,255,255,255,255, 63, 7, 1,192,240, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255 },
  65. { 255,255,255,255,255,255,255,255,255,255,192,192,192,194,195,195, 0, 0, 0,195,195,255,255,255,255,255,255,255,255,255 },
  66. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 28, 28, 28, 31, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  67. };
  68. static const char PROGMEM layer5[4][30+1] = {
  69. { 128,224,240,240,248,248,248,248,248,248, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,248,248,248,248,248,248,240,240,224,128 },
  70. { 255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,143,143,143, 15, 15, 31,255,255,255,255,255,255,255,255,255,255 },
  71. { 255,255,255,255,255,255,255,255,255,255,142, 14, 14, 30,127,127,127, 0, 0, 0,224,255,255,255,255,255,255,255,255,255 },
  72. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 31, 30, 28, 28, 28, 28, 28, 28, 30, 31, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  73. };
  74. static const char PROGMEM layer6[4][30+1] = {
  75. { 128,224,240,240,248,248,248,248,248,248,248, 56, 24, 24, 24, 24, 24, 24, 24, 56,248,248,248,248,248,248,240,240,224,128 },
  76. { 255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 31, 31, 31, 24, 24, 56,255,255,255,255,255,255,255,255,255,255 },
  77. { 255,255,255,255,255,255,255,255,255,255,128, 0, 0, 0,127,127,127, 0, 0, 0,128,255,255,255,255,255,255,255,255,255 },
  78. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 31, 30, 28, 28, 28, 28, 28, 28, 28, 30, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  79. };
  80. static const char PROGMEM layer7[4][30+1] = {
  81. { 128,224,240,240,248,248,248,248,248,248, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,248,248,248,248,248,248,240,240,224,128 },
  82. { 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 31, 3, 0,128,248,255,255,255,255,255,255,255,255,255,255 },
  83. { 255,255,255,255,255,255,255,255,255,255,255,255,127, 15, 1, 0,192,252,255,255,255,255,255,255,255,255,255,255,255,255 },
  84. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 31, 31, 28, 28, 28, 28, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  85. };
  86. static const char PROGMEM layer8[4][30+1] = {
  87. { 128,224,240,240,248,248,248,248,248,248,248, 56, 24, 24, 24, 24, 24, 24, 24, 56,248,248,248,248,248,248,240,240,224,128 },
  88. { 255,255,255,255,255,255,255,255,255,255,224,128, 0, 0, 31, 31, 31, 0, 0,128,224,255,255,255,255,255,255,255,255,255 },
  89. { 255,255,255,255,255,255,255,255,255,255,129, 0, 0, 0,126,126,126, 0, 0, 0,129,255,255,255,255,255,255,255,255,255 },
  90. { 1, 7, 15, 15, 31, 31, 31, 31, 31, 31, 31, 30, 28, 28, 28, 28, 28, 28, 28, 30, 31, 31, 31, 31, 31, 31, 15, 15, 7, 1 }
  91. };
  92. oled_set_cursor(1, 0); // start pos
  93. oled_write_raw_P(layerImage[0], sizeof(layerImage[0]));
  94. oled_set_cursor(1, 1); // move to next line
  95. oled_write_raw_P(layerImage[1], sizeof(layerImage[1]));
  96. oled_set_cursor(1, 2); // move to next line
  97. oled_write_raw_P(layerImage[2], sizeof(layerImage[2]));
  98. oled_set_cursor(1, 3); // move to next line
  99. oled_write_raw_P(layerImage[3], sizeof(layerImage[3]));
  100. switch (get_highest_layer(layer_state)) {
  101. case one :
  102. oled_set_cursor(16, 0); // move 20 columns out
  103. oled_write_raw_P(layer1[0], sizeof(layer1[0]));
  104. oled_set_cursor(16, 1); // move 20 columns out
  105. oled_write_raw_P(layer1[1], sizeof(layer1[1]));
  106. oled_set_cursor(16, 2); // move 20 columns out
  107. oled_write_raw_P(layer1[2], sizeof(layer1[2]));
  108. oled_set_cursor(16, 3); // move 20 columns out
  109. oled_write_raw_P(layer1[3], sizeof(layer1[3]));
  110. break;
  111. case two :
  112. oled_set_cursor(16, 0); // move 20 columns out
  113. oled_write_raw_P(layer2[0], sizeof(layer2[0]));
  114. oled_set_cursor(16, 1); // move 20 columns out
  115. oled_write_raw_P(layer2[1], sizeof(layer2[1]));
  116. oled_set_cursor(16, 2); // move 20 columns out
  117. oled_write_raw_P(layer2[2], sizeof(layer2[2]));
  118. oled_set_cursor(16, 3); // move 20 columns out
  119. oled_write_raw_P(layer2[3], sizeof(layer2[3]));
  120. break;
  121. case three :
  122. oled_set_cursor(16, 0); // move 20 columns out
  123. oled_write_raw_P(layer3[0], sizeof(layer3[0]));
  124. oled_set_cursor(16, 1); // move 20 columns out
  125. oled_write_raw_P(layer3[1], sizeof(layer3[1]));
  126. oled_set_cursor(16, 2); // move 20 columns out
  127. oled_write_raw_P(layer3[2], sizeof(layer3[2]));
  128. oled_set_cursor(16, 3); // move 20 columns out
  129. oled_write_raw_P(layer3[3], sizeof(layer3[3]));
  130. break;
  131. case four :
  132. oled_set_cursor(16, 0); // move 20 columns out
  133. oled_write_raw_P(layer4[0], sizeof(layer4[0]));
  134. oled_set_cursor(16, 1); // move 20 columns out
  135. oled_write_raw_P(layer4[1], sizeof(layer4[1]));
  136. oled_set_cursor(16, 2); // move 20 columns out
  137. oled_write_raw_P(layer4[2], sizeof(layer4[2]));
  138. oled_set_cursor(16, 3); // move 20 columns out
  139. oled_write_raw_P(layer4[3], sizeof(layer4[3]));
  140. break;
  141. case five :
  142. oled_set_cursor(16, 0); // move 20 columns out
  143. oled_write_raw_P(layer5[0], sizeof(layer5[0]));
  144. oled_set_cursor(16, 1); // move 20 columns out
  145. oled_write_raw_P(layer5[1], sizeof(layer5[1]));
  146. oled_set_cursor(16, 2); // move 20 columns out
  147. oled_write_raw_P(layer5[2], sizeof(layer5[2]));
  148. oled_set_cursor(16, 3); // move 20 columns out
  149. oled_write_raw_P(layer5[3], sizeof(layer5[3]));
  150. break;
  151. case six :
  152. oled_set_cursor(16, 0); // move 20 columns out
  153. oled_write_raw_P(layer6[0], sizeof(layer6[0]));
  154. oled_set_cursor(16, 1); // move 20 columns out
  155. oled_write_raw_P(layer6[1], sizeof(layer6[1]));
  156. oled_set_cursor(16, 2); // move 20 columns out
  157. oled_write_raw_P(layer6[2], sizeof(layer6[2]));
  158. oled_set_cursor(16, 3); // move 20 columns out
  159. oled_write_raw_P(layer6[3], sizeof(layer6[3]));
  160. break;
  161. case seven :
  162. oled_set_cursor(16, 0); // move 20 columns out
  163. oled_write_raw_P(layer7[0], sizeof(layer7[0]));
  164. oled_set_cursor(16, 1); // move 20 columns out
  165. oled_write_raw_P(layer7[1], sizeof(layer7[1]));
  166. oled_set_cursor(16, 2); // move 20 columns out
  167. oled_write_raw_P(layer7[2], sizeof(layer7[2]));
  168. oled_set_cursor(16, 3); // move 20 columns out
  169. oled_write_raw_P(layer7[3], sizeof(layer7[3]));
  170. break;
  171. case eight :
  172. oled_set_cursor(16, 0); // move 20 columns out
  173. oled_write_raw_P(layer8[0], sizeof(layer8[0]));
  174. oled_set_cursor(16, 1); // move 20 columns out
  175. oled_write_raw_P(layer8[1], sizeof(layer8[1]));
  176. oled_set_cursor(16, 2); // move 20 columns out
  177. oled_write_raw_P(layer8[2], sizeof(layer8[2]));
  178. oled_set_cursor(16, 3); // move 20 columns out
  179. oled_write_raw_P(layer8[3], sizeof(layer8[3]));
  180. break;
  181. }
  182. }
  183. return false;
  184. }