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