qmk_firmware

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

orbit.c (3701B)


      1 /* Copyright 2018 Ryota Goto
      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 #include "orbit.h"
     17 #include "split_util.h"
     18 
     19 void led_init_ports(void) {
     20     // Initialize indicator LEDs to output
     21     if (isLeftHand) {
     22         gpio_set_pin_output(C6);
     23         gpio_set_pin_output(B6);
     24         gpio_set_pin_output(B5);
     25     } else {
     26         gpio_set_pin_output(F6);
     27         gpio_set_pin_output(F7);
     28         gpio_set_pin_output(C7);
     29     }
     30 
     31     set_layer_indicators(0);
     32 }
     33 
     34 // Call led_toggle to set LEDs easily
     35 // LED IDs:
     36 //
     37 // (LEFT) 0 1 2   |   3 4 5 (RIGHT)
     38 void led_toggle(uint8_t id, bool on) {
     39     if (isLeftHand) {
     40         switch (id) {
     41             case 0:
     42                 // Left hand C6
     43                 gpio_write_pin(C6, on);
     44                 break;
     45             case 1:
     46                 // Left hand B6
     47                 gpio_write_pin(B6, on);
     48                 break;
     49             case 2:
     50                 // Left hand B5
     51                 gpio_write_pin(B5, on);
     52                 break;
     53             default:
     54                 break;
     55         }
     56     } else {
     57         switch (id) {
     58             case 3:
     59                 // Right hand F6
     60                 gpio_write_pin(F6, on);
     61                 break;
     62             case 4:
     63                 // Right hand F7
     64                 gpio_write_pin(F7, on);
     65                 break;
     66             case 5:
     67                 // Right hand C7
     68                 gpio_write_pin(C7, on);
     69                 break;
     70             default:
     71                 break;
     72         }
     73     }
     74 }
     75 
     76 // Set all LEDs at once using an array of 6 booleans
     77 // LED IDs:
     78 //
     79 // (LEFT) 0 1 2   |   3 4 5 (RIGHT)
     80 //
     81 // Ex. set_all_leds({ false, false, false, true, true, true }) would turn off left hand, turn on right hand
     82 
     83 void set_all_leds(bool leds[6]) {
     84     for (int i = 0; i < 6; i++) {
     85         led_toggle(i, leds[i]);
     86     }
     87 }
     88 
     89 void set_layer_indicators(uint8_t layer) {
     90     switch (layer) {
     91         case 0:
     92             led_toggle(0, true);
     93             led_toggle(1, false);
     94             led_toggle(2, false);
     95             break;
     96         case 1:
     97             led_toggle(0, true);
     98             led_toggle(1, true);
     99             led_toggle(2, false);
    100             break;
    101         case 2:
    102             led_toggle(0, true);
    103             led_toggle(1, true);
    104             led_toggle(2, true);
    105             break;
    106         case 3:
    107             led_toggle(0, false);
    108             led_toggle(1, true);
    109             led_toggle(2, true);
    110             break;
    111         case 4:
    112             led_toggle(0, false);
    113             led_toggle(1, false);
    114             led_toggle(2, true);
    115             break;
    116         default:
    117             led_toggle(0, true);
    118             led_toggle(1, false);
    119             led_toggle(2, true);
    120             break;
    121     }
    122 }
    123 
    124 bool led_update_kb(led_t led_state) {
    125     bool res = led_update_user(led_state);
    126     if (res) {
    127         led_toggle(3, led_state.num_lock);
    128         led_toggle(4, led_state.caps_lock);
    129         led_toggle(5, led_state.scroll_lock);
    130     }
    131     return res;
    132 }
    133 
    134 layer_state_t layer_state_set_kb(layer_state_t state) {
    135     set_layer_indicators(get_highest_layer(state));
    136 
    137     return layer_state_set_user(state);
    138 }