macroflow_original.c (12706B)
1 // Copyright 2024 Patrick Mathern (@Patrickemm) 2 // SPDX-License-Identifier: GPL-2.0-or-later 3 4 #include "quantum.h" 5 6 static uint16_t oled_logo_timer = 0; 7 static bool has_startup_ran = false; 8 9 #ifndef SHOW_LOGO 10 # define SHOW_LOGO 2500 11 #endif 12 13 enum layer_names { 14 one, 15 two, 16 three, 17 four, 18 five, 19 six, 20 seven, 21 eight 22 }; 23 24 oled_rotation_t oled_init_kb(oled_rotation_t rotation) { 25 return OLED_ROTATION_180; 26 } 27 28 bool 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 }