From 1a3064afb186328c17c679094b0f92cbd46844b5 Mon Sep 17 00:00:00 2001 From: Gregorio <38576492+ohchiko@users.noreply.github.com> Date: Mon, 31 May 2021 11:04:26 +0700 Subject: [Keyboard] Add Rubi Numpad (#12283) Co-authored-by: Drashna Jaelre Co-authored-by: Ryan --- keyboards/rubi/lib/encoder.c | 115 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 keyboards/rubi/lib/encoder.c (limited to 'keyboards/rubi/lib/encoder.c') diff --git a/keyboards/rubi/lib/encoder.c b/keyboards/rubi/lib/encoder.c new file mode 100644 index 0000000000..06c25ad317 --- /dev/null +++ b/keyboards/rubi/lib/encoder.c @@ -0,0 +1,115 @@ +/* +Copyright 2021 gregorio + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include "rubi.h" + +void change_encoder_mode(bool reverse) { + if (reverse) { + if (encoder_mode == 0) { + encoder_mode = _NUM_ENCODER_MODES - 1; + } else { + encoder_mode = encoder_mode - 1; + } + } else { + encoder_mode = (encoder_mode + 1) % _NUM_ENCODER_MODES; + } +} + +uint16_t handle_encoder_cw(void) { + uint16_t mapped_code = 0; + + if (oled_mode == OLED_MODE_CALC) { + layer_on(2); + return mapped_code; + } + + switch (encoder_mode) { + default: + case ENC_MODE_VOLUME: + mapped_code = KC_VOLU; + break; + case ENC_MODE_MEDIA: + mapped_code = KC_MEDIA_NEXT_TRACK; + break; + case ENC_MODE_BRIGHTNESS: + mapped_code = KC_BRIGHTNESS_UP; + break; + } + + return mapped_code; +} + +uint16_t handle_encoder_ccw(void) { + uint16_t mapped_code = 0; + + if (oled_mode == OLED_MODE_CALC) { + layer_off(2); + return mapped_code; + } + + switch (encoder_mode) { + default: + case ENC_MODE_VOLUME: + mapped_code = KC_VOLD; + break; + case ENC_MODE_MEDIA: + mapped_code = KC_MEDIA_PREV_TRACK; + break; + case ENC_MODE_BRIGHTNESS: + mapped_code = KC_BRIGHTNESS_DOWN; + break; + } + + return mapped_code; +} + +uint16_t handle_encoder_press(void) { + uint16_t mapped_code = 0; + if (get_highest_layer(layer_state) == 1) { + if (oled_mode == OLED_MODE_CALC) { + layer_on(3); + } + layer_off(1); + return mapped_code; + } else if (get_highest_layer(layer_state) == 2) { + if (oled_mode == OLED_MODE_CALC) { + layer_off(1); + layer_on(3); + } else { + layer_on(1); + } + layer_off(2); + return mapped_code; + } else if (get_highest_layer(layer_state) == 3) { + if (oled_mode == OLED_MODE_OFF) { + layer_off(3); + } + return mapped_code; + } + + switch (encoder_mode) { + default: + case ENC_MODE_VOLUME: + mapped_code = KC_MUTE; + break; + case ENC_MODE_MEDIA: + mapped_code = KC_MEDIA_PLAY_PAUSE; + break; + } + + return mapped_code; +} -- cgit v1.2.3