qmk_firmware

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

leeloo.c (4168B)


      1 /* Copyright 2023 Clickety Split Ltd.
      2  *
      3  * This program is free software: you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License as published by
      5  * the Free Software Foundation, either version 2 of the License, or
      6  * (at your option) any later version.
      7  *
      8  * This program is distributed in the hope that it will be useful,
      9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11  * GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  */
     16 
     17 #include "quantum.h"
     18 
     19 #ifdef OLED_ENABLE
     20 oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
     21     if (!is_keyboard_master()) {
     22         return OLED_ROTATION_180;
     23     } else {
     24         return rotation;
     25     }
     26 }
     27 
     28 static void render_keylock_status(led_t led_state) {
     29     oled_write_P(PSTR("Lock: "), false);
     30     oled_write_P(PSTR("CAPS"), led_state.caps_lock);
     31     oled_write_P(PSTR(" "), false);
     32     oled_write_P(PSTR("NUML"), led_state.num_lock);
     33     oled_write_P(PSTR(" "), false);
     34     oled_write_ln_P(PSTR("SCLK"), led_state.scroll_lock);
     35 }
     36 
     37 static void render_mod_status(uint8_t modifiers) {
     38     oled_write_P(PSTR("Mods: "), false);
     39     oled_write_P(PSTR("Sft"), (modifiers & MOD_MASK_SHIFT));
     40     oled_write_P(PSTR(" "), false);
     41     oled_write_P(PSTR("Ctl"), (modifiers & MOD_MASK_CTRL));
     42     oled_write_P(PSTR(" "), false);
     43     oled_write_P(PSTR("Alt"), (modifiers & MOD_MASK_ALT));
     44     oled_write_P(PSTR(" "), false);
     45     oled_write_P(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
     46 }
     47 
     48 static void render_secondary_oled(void) {
     49     // Version Information
     50 #if defined(KEYBOARD_clickety_split_leeloo_rev1)
     51     oled_write_P(PSTR("Leeloo v1\n\n"), false);
     52 #elif defined(KEYBOARD_clickety_split_leeloo_rev2)
     53     oled_write_P(PSTR("Leeloo v2\n\n"), false);
     54 #else
     55     oled_write_P(PSTR("Leeloo v2.1\n\n"), false);
     56 #endif
     57     
     58     oled_write_P(PSTR("Firmware: "), false);
     59     
     60 #if defined(KEYBOARD_clickety_split_leeloo_rev1)
     61     oled_write_P(PSTR("v1.13"), false);
     62 #elif defined(KEYBOARD_clickety_split_leeloo_rev2)
     63     oled_write_P(PSTR("v2.13"), false);
     64 #else
     65     oled_write_P(PSTR("v2.14"), false);
     66 #endif
     67     
     68     oled_write_P(PSTR("\n"), false);
     69     oled_write_P(PSTR("Clickety Split Ltd."), false);
     70 }
     71 
     72 static void render_status(void) {
     73     // Host Keyboard Layer Status
     74     switch (get_highest_layer(default_layer_state)) {
     75         case 0:
     76             oled_write_P(PSTR("QWERTY | "), false);
     77             break;
     78     }
     79 
     80     // Host Keyboard Layer Status
     81     switch (get_highest_layer(layer_state)) {
     82         case 0:
     83             oled_write_P(PSTR("Base   \n"), false);
     84             break;
     85 
     86         case 1:
     87             oled_write_P(PSTR("Lower   \n"), false);
     88             break;
     89 
     90         case 2:
     91             oled_write_P(PSTR("Raise   \n"), false);
     92             break;
     93 
     94         case 3:
     95             oled_write_P(PSTR("Adjust  \n"), false);
     96             break;
     97 
     98         default:
     99             oled_write_P(PSTR("Unknown \n"), false);
    100     }
    101 
    102     oled_write_P(PSTR("\n"), false);
    103     render_keylock_status(host_keyboard_led_state());
    104     render_mod_status(get_mods() | get_oneshot_mods());
    105 }
    106 
    107 bool oled_task_kb(void) {
    108     if (!oled_task_user()) {
    109         return false; 
    110     }
    111 
    112     if (is_keyboard_master()) {
    113         // Renders the current keyboard state (layer, lock, caps, scroll, etc)
    114         render_status();
    115     } else {
    116         // Version Information
    117         render_secondary_oled();
    118     }
    119 
    120     return false;
    121 
    122 }
    123 #endif // OLED_ENABLE
    124 
    125 #ifdef ENCODER_ENABLE
    126 bool encoder_update_kb(uint8_t index, bool clockwise) {
    127     if (!encoder_update_user(index, clockwise)) { return false; }
    128     if (index == 0) {
    129         // Volume control
    130         if (clockwise) {
    131             tap_code_delay(KC_VOLD, 10);
    132         } else {
    133             tap_code_delay(KC_VOLU, 10);
    134         }
    135     } else if (index == 1) {
    136         // Page up/Page down
    137         if (clockwise) {
    138             tap_code(KC_PGDN);
    139         } else {
    140             tap_code(KC_PGUP);
    141         }
    142     }
    143     return true;
    144 }
    145 #endif // ENCODER_ENABLE