qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 }