~ruther/qmk_firmware

d758496ad1885c20734233ec9da501daf2232276 — QMK Bot 4 years ago 3cdccc3 + abda419
Merge remote-tracking branch 'origin/master' into develop
A keyboards/ebastler/isometria_75/readme.md => keyboards/ebastler/isometria_75/readme.md +49 -0
@@ 0,0 1,49 @@
# isometria<sup>75</sup>

![Isometria sample image](https://mpwr.xyz/projects/isometria75/preview/elmo_pc_BOW_overview.png)

A 75% ISO-only board with a rotary encoder, RGB underglow and single color dimmable backlight. The hardware is ready to have Bluetooth support added later on. The design is open source and all files (PCB and case) can be found in my [Github repo](https://github.com/ebastler/isometria-75).

* Keyboard Maintainer: [ebastler](https://github.com/ebastler)
* Hardware Supported: Rev1 PCB, see Github repo linked above
* Hardware Availability: None, feel free to order/manufacture parts yourself.

Bootmagic Lite key: Escape
Physical reset switch present on the bottom of the PCB

Make example for this keyboard (after setting up your build environment):

    make ebastler/isometria_75/rev1:default:flash

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).


## Default keymap layout binds

Layer 1 toggle: Right menu key (to the right of ralt, left of the arrow cluster)
Layer 2 toggle: Right menu key + right shift key

Alternate layer mod keys (All on layer 1):
* Home: Insert
* Backspace: Delete

Alternate layer hardware control keys (All on layer 1):
* Esc: Enable/disable underglow
* F1/F2: lower/increase underglow brightness
* F3/F4: lower/increase backlight brightness
* F5/F6: lower/increase underglow hue
* F7/F8: lower/increase underglow saturation
* F9/F10: previous/next underglow effect
* F11/F12: lower/increase underglow effect speed
* Print Sreen: Shortcut to static underglow

Encoder mapping (Layer 0):
* CCW/CW: Decrease/Increase volume
* Click: Play/Pause

Encoder mapping (Layer 1):
* CCW/CW: Previous/Next track
* Click: Mute audio

Encoder mapping (Layer 2):
* CCW/CW: Screen brightness up/down

A keyboards/ebastler/isometria_75/rev1/chconf.h => keyboards/ebastler/isometria_75/rev1/chconf.h +25 -0
@@ 0,0 1,25 @@
/* Copyright 2020 Moritz Plattner (ebastler)
 *
 *  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 3 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 <https://www.gnu.org/licenses/>.
 */
#pragma once

/* Change system timer resolution, because TIM2 and TIM3 are different */
#define CH_CFG_ST_RESOLUTION                16
#define CH_CFG_INTERVALS_SIZE               16

/* no clue, wouldn't compile without */
#define CH_CFG_USE_TM                       FALSE

#include_next <chconf.h>

A keyboards/ebastler/isometria_75/rev1/config.h => keyboards/ebastler/isometria_75/rev1/config.h +74 -0
@@ 0,0 1,74 @@
/*
Copyright 2020 Moritz Plattner

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/>.
*/

#pragma once

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0x6562 // "eb"
#define PRODUCT_ID      0x1337
#define DEVICE_VER      0x0001
#define MANUFACTURER    ebastler
#define PRODUCT        isometria 75

/* key matrix size */
#define MATRIX_ROWS 6
#define MATRIX_COLS 16

#define MATRIX_ROW_PINS { A15, B4, B5, B6, B7, B8}
#define MATRIX_COL_PINS { B12, B13, B14, B15, A8, A10, A13, A14, B9, C13, F0, F1, A0, B2, B10, B11 }
#define UNUSED_PINS

/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define DEBOUNCE 5

/* Backlight */
#define BACKLIGHT_PIN A9
#define BACKLIGHT_BREATHING
#define BACKLIGHT_PWM_DRIVER PWMD1
#define BACKLIGHT_PWM_CHANNEL 2
#define BACKLIGHT_PAL_MODE 2
#define BACKLIGHT_LEVELS 5
#define BACKLIGHT_ON_STATE 1
#define BACKLIGHT_PWM_OUTPUT_FREQUENCY 1000 // Increases backlight PWM freq if compiled with an unmerged PR. Does no harm without it.

/* Underglow */
#define RGB_DI_PIN B3
#define RGBLED_NUM 17
#define WS2812_PWM_DRIVER PWMD2
#define WS2812_PWM_CHANNEL 2
#define WS2812_PWM_PAL_MODE 2
#define WS2812_DMA_STREAM STM32_DMA1_STREAM2
#define WS2812_DMA_CHANNEL 2
#define RGBLIGHT_SLEEP
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL


/* Rotary encoder - set the resolution fitting your encoder.
Most will need a value of 4. If 1 encoder click results in 2 keycodes sent
increase the value. If you need 2 clicks for 1 keycode, decrease*/
#define ENCODER_RESOLUTION 2
#define ENCODERS_PAD_A { C15 }
#define ENCODERS_PAD_B { C14 }
#define TAP_CODE_DELAY 10

/* ADC - will be used for battery monitoring once BT support is added */
/* #define ADC_PIN B0 */

A keyboards/ebastler/isometria_75/rev1/halconf.h => keyboards/ebastler/isometria_75/rev1/halconf.h +23 -0
@@ 0,0 1,23 @@
/* Copyright 2020 Moritz Plattner (ebastler)
 *
 *  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 3 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 <https://www.gnu.org/licenses/>.
 */
#pragma once

/* no clue, wouldn't compile without */
#define HAL_USE_DAC                         FALSE
#define HAL_USE_GPT                         FALSE
#define HAL_USE_I2C                         FALSE

#include_next <halconf.h>
\ No newline at end of file

A keyboards/ebastler/isometria_75/rev1/info.json => keyboards/ebastler/isometria_75/rev1/info.json +12 -0
@@ 0,0 1,12 @@
{
    "keyboard_name": "isometria_75",
    "url": "https://github.com/ebastler/isometria-75",
    "maintainer": "ebastler",
    "width": 16.25,
    "height": 6.25,
    "layouts": {
        "LAYOUT_iso": {
            "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"KC_PSCR", "x":14, "y":0}, {"label":"KC_MPLY", "x":15.25, "y":0}, {"label":"\u00b0", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"\"", "x":2, "y":1.25}, {"label":"\u00a7", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"&", "x":6, "y":1.25}, {"label":"/", "x":7, "y":1.25}, {"label":"(", "x":8, "y":1.25}, {"label":")", "x":9, "y":1.25}, {"label":"=", "x":10, "y":1.25}, {"label":"?", "x":11, "y":1.25}, {"label":"`", "x":12, "y":1.25}, {"label":"BACKSPACE", "x":13, "y":1.25, "w":2}, {"label":"HOME", "x":15.25, "y":1.25}, {"label":"TAB", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Z", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"\u00fc", "x":11.5, "y":2.25}, {"label":"*", "x":12.5, "y":2.25}, {"label":"ENTER", "x":13.75, "y":2.25, "w":1.25, "h":2}, {"label":"PAGE", "x":15.25, "y":2.25}, {"label":"CAPS LOCK", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":"\u00f6", "x":10.75, "y":3.25}, {"label":"\u00e4", "x":11.75, "y":3.25}, {"label":"'", "x":12.75, "y":3.25}, {"label":"PAGE", "x":15.25, "y":3.25}, {"label":"SHIFT", "x":0, "y":4.25, "w":1.25}, {"label":"<", "x":1.25, "y":4.25}, {"label":"Y", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":";", "x":9.25, "y":4.25}, {"label":":", "x":10.25, "y":4.25}, {"label":"_", "x":11.25, "y":4.25}, {"label":"SHIFT", "x":12.25, "y":4.25, "w":1.5}, {"label":"END", "x":15.25, "y":4.25}, {"label":"UP", "x":14, "y":4.5}, {"label":"CTRL", "x":0, "y":5.25, "w":1.25}, {"label":"SUPER", "x":1.25, "y":5.25, "w":1.25}, {"label":"ALT", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"ALT", "x":10, "y":5.25, "w":1.5}, {"label":"FUNC", "x":11.5, "y":5.25, "w":1.25}, {"label":"LEFT", "x":13, "y":5.5}, {"label":"DOWN", "x":14, "y":5.5}, {"label":"RIGHT", "x":15, "y":5.5}]
        }
    }
}

A keyboards/ebastler/isometria_75/rev1/keymaps/default/keymap.c => keyboards/ebastler/isometria_75/rev1/keymaps/default/keymap.c +74 -0
@@ 0,0 1,74 @@
/* Copyright 2020 Moritz Plattner
 *
 * 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

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    [0] = LAYOUT_iso(    /* keymap for layer 0 */
        KC_ESC,  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_PSCR,  KC_MPLY, 
        KC_GRV,  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_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_NUHS, KC_ENT,   KC_PGDN, 
        KC_LSFT, KC_NUBS, 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, LT(1, KC_APP),    KC_LEFT, KC_DOWN,  KC_RGHT),

    [1] = LAYOUT_iso(    /* keymap for layer 1 */
        RGB_TOG, RGB_VAD, RGB_VAI, BL_DEC,  BL_INC,  RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_RMOD, RGB_MOD, RGB_SPD, RGB_SPI, RGB_M_P, KC_MUTE, 
        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_DEL,  KC_INS, 
        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, MO(2),   KC_TRNS, KC_TRNS, 
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS,  LT(1, KC_APP),    KC_TRNS, KC_TRNS, KC_TRNS),

    [2] = LAYOUT_iso(    /* keymap for layer 2 */
        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, RESET, 
        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, MO(2),   KC_TRNS, KC_TRNS, 
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS,  LT(1, KC_APP),    KC_TRNS, KC_TRNS, KC_TRNS),
};

/* Encoder */
void encoder_update_user(uint8_t index, bool clockwise) {
/* The first if reads the first encoder, not needed on this board which only features a single one */
    if (index == 0) {
        /* The switch case allows for different encoder mappings on different layers, "default" map gets applied for all unspecified layers */
        switch(get_highest_layer(layer_state)){
            case 2:
                if (clockwise) {
                tap_code(KC_BRIU);
                } else {
                tap_code(KC_BRID);
                }
                break;
            case 1:
                if (clockwise) {
                tap_code(KC_MNXT);
                } else {
                tap_code(KC_MPRV);
                }
                break;
            default:
                if (clockwise){
                    tap_code(KC_VOLU);
                } else{
                    tap_code(KC_VOLD);
                }
                break;
        }
    }
}

A keyboards/ebastler/isometria_75/rev1/keymaps/via/keymap.c => keyboards/ebastler/isometria_75/rev1/keymaps/via/keymap.c +82 -0
@@ 0,0 1,82 @@
/* Copyright 2020 Moritz Plattner
 *
 * 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

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    [0] = LAYOUT_iso(    /* keymap for layer 0 */
        KC_ESC,  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_PSCR,  KC_MPLY, 
        KC_GRV,  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_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_NUHS, KC_ENT,   KC_PGDN, 
        KC_LSFT, KC_NUBS, 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, LT(1, KC_APP),    KC_LEFT, KC_DOWN,  KC_RGHT),

    [1] = LAYOUT_iso(    /* keymap for layer 1 */
        RGB_TOG, RGB_VAD, RGB_VAI, BL_DEC,  BL_INC,  RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_RMOD, RGB_MOD, RGB_SPD, RGB_SPI, RGB_M_P, KC_MUTE, 
        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_DEL,  KC_INS, 
        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, MO(2),   KC_TRNS, KC_TRNS, 
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS,  LT(1, KC_APP),    KC_TRNS, KC_TRNS, KC_TRNS),

    [2] = LAYOUT_iso(    /* keymap for layer 2 */
        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, RESET, 
        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, MO(2),   KC_TRNS, KC_TRNS, 
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS,  LT(1, KC_APP),    KC_TRNS, KC_TRNS, KC_TRNS),

    [3] = LAYOUT_iso(    /* keymap for layer 3 */
        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, 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),
};

/* Encoder */
void encoder_update_user(uint8_t index, bool clockwise) {
/* The first if reads the first encoder, not needed on this board which only features a single one */
    if (index == 0) {
        /* The switch case allows for different encoder mappings on different layers, "default" map gets applied for all unspecified layers */
        switch(get_highest_layer(layer_state)){
            case 2:
                if (clockwise) {
                tap_code(KC_BRIU);
                } else {
                tap_code(KC_BRID);
                }
                break;
            case 1:
                if (clockwise) {
                tap_code(KC_MNXT);
                } else {
                tap_code(KC_MPRV);
                }
                break;
            default:
                if (clockwise){
                    tap_code(KC_VOLU);
                } else{
                    tap_code(KC_VOLD);
                }
                break;
        }
    }
}

A keyboards/ebastler/isometria_75/rev1/keymaps/via/rules.mk => keyboards/ebastler/isometria_75/rev1/keymaps/via/rules.mk +1 -0
@@ 0,0 1,1 @@
VIA_ENABLE = yes
\ No newline at end of file

A keyboards/ebastler/isometria_75/rev1/mcuconf.h => keyboards/ebastler/isometria_75/rev1/mcuconf.h +33 -0
@@ 0,0 1,33 @@
/* Copyright 2020 Moritz Plattner (ebastler)
 *
 *  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 3 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 <https://www.gnu.org/licenses/>.
 */
#pragma once

#include_next <mcuconf.h>

/* enable TIM1, used for backlight PWM */
#undef STM32_PWM_USE_TIM1
#define STM32_PWM_USE_TIM1                  TRUE

/* enable TIM2, used for underglow PWM driver */
#undef STM32_PWM_USE_TIM2
#define STM32_PWM_USE_TIM2                  TRUE

/* move system from TIM2 (default) to TIM3 (since TIM2 is needed for underglow) */
#undef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3                  FALSE
#undef STM32_ST_USE_TIMER
#define STM32_ST_USE_TIMER                  3


A keyboards/ebastler/isometria_75/rev1/readme.md => keyboards/ebastler/isometria_75/rev1/readme.md +49 -0
@@ 0,0 1,49 @@
# isometria<sup>75</sup>

![Isometria sample image](https://mpwr.xyz/projects/isometria75/preview/elmo_pc_BOW_overview.png)

A 75% ISO-only board with a rotary encoder, RGB underglow and single color dimmable backlight. The hardware is ready to have Bluetooth support added later on. The design is open source and all files (PCB and case) can be found in my [Github repo](https://github.com/ebastler/isometria-75).

* Keyboard Maintainer: [ebastler](https://github.com/ebastler)
* Hardware Supported: Rev1 PCB, see Github repo linked above
* Hardware Availability: None, feel free to order/manufacture parts yourself.

Bootmagic Lite key: Escape
Physical reset switch present on the bottom of the PCB

Make example for this keyboard (after setting up your build environment):

    make ebastler/isometria_75/rev1:default:flash

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).


## Default keymap layout binds

Layer 1 toggle: Right menu key (to the right of ralt, left of the arrow cluster)
Layer 2 toggle: Right menu key + right shift key

Alternate layer mod keys (All on layer 1):
* Home: Insert
* Backspace: Delete

Alternate layer hardware control keys (All on layer 1):
* Esc: Enable/disable underglow
* F1/F2: lower/increase underglow brightness
* F3/F4: lower/increase backlight brightness
* F5/F6: lower/increase underglow hue
* F7/F8: lower/increase underglow saturation
* F9/F10: previous/next underglow effect
* F11/F12: lower/increase underglow effect speed
* Print Sreen: Shortcut to static underglow

Encoder mapping (Layer 0):
* CCW/CW: Decrease/Increase volume
* Click: Play/Pause

Encoder mapping (Layer 1):
* CCW/CW: Previous/Next track
* Click: Mute audio

Encoder mapping (Layer 2):
* CCW/CW: Screen brightness up/down

A keyboards/ebastler/isometria_75/rev1/rev1.c => keyboards/ebastler/isometria_75/rev1/rev1.c +17 -0
@@ 0,0 1,17 @@
/* Copyright 2020 Moritz Plattner
 *
 * 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 "rev1.h"

A keyboards/ebastler/isometria_75/rev1/rev1.h => keyboards/ebastler/isometria_75/rev1/rev1.h +35 -0
@@ 0,0 1,35 @@
/* Copyright 2020 Moritz Plattner
 *
 * 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/>.
 */

#pragma once

#include "quantum.h"

#define LAYOUT_iso( \
	K000, K001, K002, K003, K004,       K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112,       K114, K115, \
	K200,       K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
	K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411,       K413, K414, K415, \
	K500, K501, K502,                   K506,                   K510, K511,       K513, K514, K515  \
) { \
	{ K000,  K001,  K002,  K003,  K004,  KC_NO, K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  K014,  K015 } , \
	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  KC_NO, K114,  K115 } , \
	{ K200,  KC_NO, K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO, K215 } , \
	{ K300,  KC_NO, K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  K314,  K315 } , \
	{ K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  KC_NO, K413,  K414,  K415 } , \
	{ K500,  K501,  K502,  KC_NO, KC_NO, KC_NO, K506,  KC_NO, KC_NO, KC_NO, K510,  K511,  KC_NO, K513,  K514,  K515 }  \
}

A keyboards/ebastler/isometria_75/rev1/rules.mk => keyboards/ebastler/isometria_75/rev1/rules.mk +24 -0
@@ 0,0 1,24 @@
# MCU name
MCU = STM32F072

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no        # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes           # USB Nkey Rollover
BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output
ENCODER_ENABLE = yes
WS2812_DRIVER = pwm

# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

A keyboards/ebastler/readme.md => keyboards/ebastler/readme.md +6 -0
@@ 0,0 1,6 @@
# ebastler

I'm a hobbyist designing keyboards for fun. [My homepage](https://mpwr.xyz). All my personal keyboard projects are open source and can be found in my github repo(s), linked below. Commissions may remain closed source.


* [isometria<sup>75</sup>](isometria_75) - 75% ISO-only board with rotary encoder, RGB underglow and single color backlight. [Github repo](https://github.com/ebastler/isometria-75).