Parent directory

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}