Bläddra i källkod

Keebwerk devices keymaps (#15504)

* Keymap with status leds animations

* Midi2Vol keymap

* Coding conventions

* Coding Conventions

* rename directory

* Midi2Vol keymap

* Update to follow coding conventions

* Rename keyboards/keebwerk/nano_slider/keymaps/Midi2Vol/keymap.c to keyboards/keebwerk/nano_slider/keymaps/midi2vol/keymap.c

* Rename keyboards/keebwerk/nano_slider/keymaps/Midi2Vol/readme.md to keyboards/keebwerk/nano_slider/keymaps/midi2vol/readme.md

* Update keyboards/keebwerk/mega/ansi/keymaps/jesusvallejo/keymap.c

Wild slash typo.

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/keebwerk/nano_slider/keymaps/midi2vol/keymap.c

Changed define for an enum.

Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
Jesús Vallejo 3 år sedan
förälder
incheckning
27fd6b7462

+ 176 - 0
keyboards/keebwerk/mega/ansi/keymaps/jesusvallejo/keymap.c

@@ -0,0 +1,176 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#include "drivers/issi/is31fl3733.h"
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_65_ansi( /* Base */
+    KC_GESC, KC_1,    KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_HOME,
+    KC_TAB,  KC_Q,    KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+    KC_CAPS, KC_A,    KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  KC_PGDN,
+    KC_LSFT, KC_Z,    KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,          KC_UP,   KC_END,
+    KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                          KC_RALT, MO(1),   KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_65_ansi( /* FN */
+    KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC,  S1_INC,  S2_DEC,  S2_INC,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, EF_DEC,  EF_INC,  H1_DEC,  H1_INC,  H2_DEC,  H2_INC,  BR_DEC,  BR_INC,  ES_DEC,  ES_INC,  KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_VOLU, KC_VOLD, KC_MUTE,                KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[2] = LAYOUT_65_ansi( /* Empty for dynamic keymaps */
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS,                KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[3] = LAYOUT_65_ansi( /* Empty for dynamic keymaps */
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS,                KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+
+static uint16_t ledTimer;
+
+uint8_t R = 0;  /* First led*/
+uint8_t G = 0;  /* Second led*/
+uint8_t B = 0;  /* Third led*/
+
+/* Boot animation parameters */
+
+uint8_t bootFirst=3;    /* Number of increment slides. */
+uint8_t bootSec=3;      /* Number of full blink. */
+
+/* Breathing animation parameters */
+
+const uint16_t travelTime = 1000;   /* Time the leds take to go from off to on or on to off. */
+const uint16_t fadeStep = 5;        /* Steps for the fade in and out, 0-255 by steps of 10. */
+const uint16_t fadeTime = 20;       /* Time between each fade step. */
+const uint8_t maxBrightness=255;    /* keep them multipliers of fade Step between 0 and 255. */
+const uint8_t minBrightness=0;
+
+uint16_t previousTime = 0;
+uint16_t time = 0;
+
+bool bootAnimation(void){
+    if (bootFirst>0 || bootSec>0){    
+        if(bootFirst!=0){
+            if (timer_elapsed(ledTimer) > 150){
+                G = 255;
+                R = 0;
+                B = 0;
+                IS31FL3733_set_color( 6+64-1, R, G, B );
+            }
+            if (timer_elapsed(ledTimer) > 300){
+                G = 255;
+                R = 255;
+                B = 0;
+                IS31FL3733_set_color( 6+64-1, R, G, B );
+            }
+            if (timer_elapsed(ledTimer) > 400){
+                G = 255;
+                R = 255;
+                B = 255;
+                IS31FL3733_set_color( 6+64-1, R, G, B );
+            }
+            if (timer_elapsed(ledTimer) > 500){
+                G = 0;
+                R = 0;
+                B = 0;
+                IS31FL3733_set_color( 6+64-1, R, G, B );
+                ledTimer = timer_read();
+                bootFirst--;
+            }
+        }
+        if (bootFirst==0 && bootSec!=0){
+            if (timer_elapsed(ledTimer) > 200) {
+                G = 255;
+                R = 255;
+                B = 255;
+                IS31FL3733_set_color( 6+64-1, R, G, B );
+            }
+            if (timer_elapsed(ledTimer) > 400){
+                G = 0;
+                R = 0;
+                B = 0;
+                IS31FL3733_set_color( 6+64-1, R, G, B );
+                ledTimer = timer_read();
+                bootSec--;
+            }
+        }
+        return false;
+    }
+    return true;
+}
+
+
+void breathing(void) {
+    if(timer_elapsed(ledTimer)<travelTime){
+        time = timer_elapsed(ledTimer);
+        if((time - previousTime) > fadeTime && R<maxBrightness){
+            G+=fadeStep;
+            R+=fadeStep;
+            B+=fadeStep;
+            IS31FL3733_set_color( 6+64-1, R, G, B );
+            previousTime = time;
+        }
+    }
+    else if(timer_elapsed(ledTimer)<(travelTime *  2)){
+        time = timer_elapsed(ledTimer);
+        if((time - previousTime) > fadeTime && R>minBrightness){
+            G-=fadeStep;
+            R-=fadeStep;
+            B-=fadeStep;
+            IS31FL3733_set_color( 6+64-1, R, G, B );
+            previousTime = time;
+        } 
+    }
+    else {
+        R=0;
+        G=0;
+        B=0;
+        IS31FL3733_set_color( 6+64-1, R, G, B );
+        previousTime = 0;
+        time = 0;
+        ledTimer=timer_read();
+    }
+}
+
+/* this avoids turning off the led each matrix_scan_user() call */
+bool capsState; 
+bool prevCapsState;
+
+void matrix_scan_user(void){
+    if(bootAnimation()){
+        capsState = host_keyboard_led_state().caps_lock; 
+        if (capsState) {
+            breathing();
+            prevCapsState = capsState; 
+        } 
+        else if(!capsState && capsState != prevCapsState){ 
+            G = 0;
+            R = 0;
+            B = 0;
+            IS31FL3733_set_color( 6+64-1, R, G, B );
+            prevCapsState = capsState; 
+        }
+    }
+}

+ 9 - 0
keyboards/keebwerk/mega/ansi/keymaps/jesusvallejo/readme.md

@@ -0,0 +1,9 @@
+# The jesusvallejo keymap for ANSI Keebwerk Mega. VIA support enabled.
+
+![Layer 0](https://i.imgur.com/RcuLofrl.png)
+
+![Layer 1](https://i.imgur.com/NJOORcdl.png)
+
+- Default layer is normal ANSI 65%.
+- Leds slide and blink bootup animation.
+- Leds fade Caps Lock animation.

+ 1 - 0
keyboards/keebwerk/mega/ansi/keymaps/jesusvallejo/rules.mk

@@ -0,0 +1 @@
+VIA_ENABLE = yes

+ 154 - 0
keyboards/keebwerk/nano_slider/keymaps/midi2vol/keymap.c

@@ -0,0 +1,154 @@
+/* Copyright 2020 Duckle, 2021 Jesús Vallejo
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+
+#include QMK_KEYBOARD_H
+#include "analog.h"
+#include "qmk_midi.h"
+
+/*
+This keymap works with midi2vol: linux version  https://github.com/jesusvallejo/Midi2Vol-Linux  
+and windows version https://github.com/jesusvallejo/Midi2Vol
+
+Enables the user to change the volume on the host computer if running midi2vol software.
+
+Example to extend usability is provided check VLC in: enum custom_keycodes {} and bool process_record_user(uint16_t keycode, keyrecord_t *record) {}
+Remember to give allways the new volume control a hex value not used by other volume control, 
+and add it to the midi2vol software.
+Check respective midi2vol readme on how to do so.In linux change config.json,in windows you can use configuration option.
+
+A compiled version of this keymap is provided in here: https://github.com/jesusvallejo/nanokeymaps/
+
+*/
+
+uint8_t midi2vol = 0x3E;
+
+/* Defines names for use in layer keycodes and the keymap */
+
+enum custom_layers {
+    _MEDIA,    /* Controls Pause, Mute , Forward ... */
+    _NAV,      /* Nav arrows, Enter, Space*/
+    _VOLUME    /* Changes midi2vol int to interface with midi2vol program: Chrome Volume, General Volume */
+    _DISCORD,  /* FXX unsused keys to interface with Discord: Mute , Silence */
+    _LIGHTS,   /* Edits underglow and retroilumination */
+    _EDIT,     /* Cut, Copy ,Paste */
+    _RESET,    /* Layer to set nano in bootloader mode */
+    _TOOGLE,   /* Momentary layer to switch between layers */
+};
+
+
+
+/* Defines the keycodes used by our macros in process_record_user */
+enum custom_keycodes { /* In order to add more volume controls, add here a custom keycode, ex: VLC */
+    DEFAULT= SAFE_RANGE,SPOTIFY,DISCORD,CHROME/*,VLC*/
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_MEDIA] = LAYOUT(
+        MO(_TOOGLE),
+        KC_MPLY, KC_MNXT,  KC_COPY,
+        KC_MUTE,  KC_MPRV, KC_PASTE, KC_ENTER
+    ),
+    [_NAV] = LAYOUT(
+        MO(_TOOGLE),
+        KC_SPC, KC_UP, KC_BSPACE,
+        KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENTER      
+    ),
+    [_VOLUME] = LAYOUT(
+        MO(_TOOGLE),
+        SPOTIFY, DISCORD, CHROME,
+        KC_NO, KC_NO, KC_NO, DEFAULT
+    ),
+    [_DISCORD] = LAYOUT(
+        MO(_TOOGLE),
+        KC_F18, KC_F19, KC_F20,
+        KC_F21, KC_F22, KC_F23, KC_F24
+    ),
+    [_LIGHTS] = LAYOUT(
+        MO(_TOOGLE),
+        RGB_TOG, RGB_MOD, RGB_VAI,
+        RGB_SAI, BL_BRTG, BL_STEP, KC_LSFT
+    ),
+    [_EDIT] = LAYOUT(
+        MO(_TOOGLE),
+        KC_MENU, KC_CUT, KC_COPY,
+        KC_FIND, KC_UNDO, KC_PASTE, KC_MPLY
+    ),
+    [_RESET] = LAYOUT(
+        MO(_TOOGLE),
+        KC_NO, KC_NO, KC_NO,
+        KC_NO, KC_NO, KC_NO, RESET 
+    ),
+    [_TOOGLE] = LAYOUT(
+        MO(_TOOGLE),
+        TO(_MEDIA),    TO(_NAV),    TO(_VOLUME),
+        TO(_DISCORD),    TO(_LIGHTS),    TO(_EDIT),    TO(_RESET)
+    )
+};
+/* In order to add more volume controls, add here code to detect custom keycode, ex: VLC */
+bool process_record_user(uint16_t keycode, keyrecord_t *record) { 
+    switch (keycode) {
+        case DEFAULT:
+            if (record->event.pressed) {
+                /* when keycode DEFAULT is pressed */
+                midi2vol= 0x3E;
+            } else {
+                /* when keycode DEFAULT is released */
+            }
+            break;
+        case SPOTIFY:
+            if (record->event.pressed) {                
+                midi2vol= 0x3F;
+            }
+            break;
+        case DISCORD:
+            if (record->event.pressed) {
+                
+                midi2vol= 0x40;
+            } 
+            break;
+        case CHROME:
+            if (record->event.pressed) {
+                
+                midi2vol= 0x41;
+            }
+            break;
+        /*
+        case VLC:
+            if (record->event.pressed) {
+                midi2vol= 0x42;
+            }
+            break;
+        */
+    }
+    return true;
+}
+
+uint8_t divisor = 0;
+
+
+void slider(void) {
+    if (divisor++) { /* only run the slider function 1/256 times it's called */
+        return;
+    }
+    midi_send_cc(&midi_device, 2, midi2vol, 0x7F - (analogReadPin(SLIDER_PIN) >> 3));
+}
+
+void matrix_scan_user(void) {
+    slider();
+}

+ 2 - 0
keyboards/keebwerk/nano_slider/keymaps/midi2vol/readme.md

@@ -0,0 +1,2 @@
+# The Midi2Vol keymap for nano_slider
+This keymap has the code for the nano_slider to work with [Midi2Vol](https://github.com/jesusvallejo/Midi2Vol).