From ab2a43edb060b393387d12dfb6c24f99cad9e871 Mon Sep 17 00:00:00 2001 From: stanrc85 <47038504+stanrc85@users.noreply.github.com> Date: Mon, 7 Dec 2020 20:18:04 -0500 Subject: [PATCH] [Keymap] sneakbox keymap and userspace code (redo) (#10977) * Add support for LAYOUT_alice to sneakbox pcb * define variables for sneakbox led pins * set rules for sneakbox pcb * add rotary encoder to userspace * fix rotary function * add custom layer indicators for sneakbox * Revert "Add support for LAYOUT_alice to sneakbox pcb" This reverts commit 5ed94d8d897de6ef4f7a349368a6342cef5eff06. * add license header * Use KEYBOARD_sneakbox_aliceclone * cleaned up indicator code --- users/stanrc85/config.h | 6 +++++ users/stanrc85/indicator_layers_sneakbox.c | 28 ++++++++++++++++++++++ users/stanrc85/rules.mk | 8 +++++++ users/stanrc85/stanrc85.c | 18 ++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 users/stanrc85/indicator_layers_sneakbox.c diff --git a/users/stanrc85/config.h b/users/stanrc85/config.h index 71b915e488a..ae0a66ae674 100644 --- a/users/stanrc85/config.h +++ b/users/stanrc85/config.h @@ -7,3 +7,9 @@ #define RGBLIGHT_LAYERS #define RGBLIGHT_SLEEP #endif + +#ifdef KEYBOARD_sneakbox_aliceclone + #define INDICATOR_PIN_0 D7 + #define INDICATOR_PIN_1 D6 + #define INDICATOR_PIN_2 D4 +#endif diff --git a/users/stanrc85/indicator_layers_sneakbox.c b/users/stanrc85/indicator_layers_sneakbox.c new file mode 100644 index 00000000000..8aa1a41e49b --- /dev/null +++ b/users/stanrc85/indicator_layers_sneakbox.c @@ -0,0 +1,28 @@ + /* Copyright 2020 Stanrc85 + * + * 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 "stanrc85.h" + +layer_state_t layer_state_set_user(layer_state_t state) { + writePin(INDICATOR_PIN_2, layer_state_cmp(state, _FN2_60) || layer_state_cmp(state, _DEFAULT)); + writePin(INDICATOR_PIN_1, layer_state_cmp(state, _FN1_60) || layer_state_cmp(state, _DEFAULT)); + return state; +} + +bool led_update_user(led_t led_state) { + writePin(INDICATOR_PIN_0, led_state.caps_lock); + return false; +} \ No newline at end of file diff --git a/users/stanrc85/rules.mk b/users/stanrc85/rules.mk index 54f0f762609..fc2560d3a1c 100644 --- a/users/stanrc85/rules.mk +++ b/users/stanrc85/rules.mk @@ -18,6 +18,14 @@ ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev2) LTO_ENABLE = no VELOCIKEY_ENABLE=yes endif +ifeq ($(strip $(KEYBOARD)), sneakbox/aliceclone) + SRC += indicator_layers_sneakbox.c + #SRC += startup_fanfare.c + OPT_DEFS += -DHAS_INDICATORS + OPT_DEFS += -DHAS_ROTARY + VIA_ENABLE = yes + LTO_ENABLE = no +endif ifeq ($(strip $(KEYBOARD)), tkc/osav2) SRC += rgblight_layers_osa.c VIA_ENABLE = yes diff --git a/users/stanrc85/stanrc85.c b/users/stanrc85/stanrc85.c index 2dbd41974bc..8bc52b0ffd6 100644 --- a/users/stanrc85/stanrc85.c +++ b/users/stanrc85/stanrc85.c @@ -44,6 +44,18 @@ void ctl_copy_reset (qk_tap_dance_state_t *state, void *user_data) { } } +#if defined(HAS_ROTARY) + void encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code(KC_VOLD); + } else { + tap_code(KC_VOLU); + } + } + } +#endif + #if defined(HAS_INDICATORS) static uint8_t led_user = 0; #endif @@ -55,6 +67,9 @@ void lock_unlock (qk_tap_dance_state_t *state, void *user_data) { tap_code16(KC_CAD); #if defined(HAS_INDICATORS) led_user = 0; + #if defined(KEYBOARD_sneakbox_aliceclone) + led_user = 1; + #endif writePin(INDICATOR_PIN_0, !led_user); wait_ms(200); writePin(INDICATOR_PIN_1, !led_user); @@ -68,6 +83,9 @@ void lock_unlock (qk_tap_dance_state_t *state, void *user_data) { tap_code16(KC_LOCK); #if defined(HAS_INDICATORS) led_user = 1; + #if defined(KEYBOARD_sneakbox_aliceclone) + led_user = 0; + #endif writePin(INDICATOR_PIN_2, !led_user); wait_ms(200); writePin(INDICATOR_PIN_1, !led_user);