~ruther/qmk_firmware

dba3f0d1ebeb8103e93494cb428021c491534202 — Simon 4 years ago 09c4d53
[Keyboard] Add bm65iso (#13400)

Co-authored-by: Ryan <fauxpark@gmail.com>
A keyboards/bm65iso/bm65iso.c => keyboards/bm65iso/bm65iso.c +59 -0
@@ 0,0 1,59 @@
/* Copyright 2020 ipetepete, 2021 deadolus
 *
 * 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 "bm65iso.h"

#ifdef RGB_MATRIX_ENABLE
led_config_t g_led_config = { {
  { 0,      1,      2,      3,      4,      5,      6,      7,      8,      9,      10,     11,     12,     13 ,    14},
  { 15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,     28,     29},
  { 30,     NO_LED, 31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     41,     42,     43},
  { 44,     45,     46,     47,     48,     49,     50,     51,     52,     53,     54,     55,     56,     57,     58},
  { 59,     60,     NO_LED, NO_LED, NO_LED, 61,     NO_LED, NO_LED, 62,     63, NO_LED,     64,     65,     66,     67}
}, {
    // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
    {   0,   0 }, {  15,   0 }, {  30,   0 }, {  45,   0 }, {  60,   0 }, {  75,   0 }, {  90,   0 }, { 105,   0 }, { 120,   0 }, { 135,   0 }, { 150,   0 }, { 165,   0 }, { 180,   0 }, { 202,   0 },{ 224,   0 },
    // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ],  ,
    {   7,  16 }, {  22,  16 }, {  37,  16 }, {  52,  16 }, {  67,  16 }, {  82,  16 }, {  97,  16 }, { 112,  16 }, { 127,  16 }, { 142,  16 }, { 157,  16 }, { 172,  16 }, { 187,  16 }, { 206,  16 },{ 224,   16},
    // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
    {  11,  32 }, {  26,  32 }, {  41,  32 }, {  56,  32 }, {  71,  32 }, {  86,  32 }, { 101,  32 }, { 116,  32 }, { 131,  32 }, { 146,  32 }, { 161,  32 }, { 176,  32 }, { 198,  32 }, { 224,   32 },
    // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
    {  18,  48 }, {  30,  48 }, {  45,  48 }, {  60,  48 }, {  75,  48 }, {  90,  48 }, { 105,  48 }, { 120,  48 }, { 135,  48 }, { 150,  48 }, { 165,  48 }, { 195,  48 }, { 209,   48 }, { 224,   48 },
    // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
    {   3,  64 }, {  22,  64 }, {  33,  64 }, { 101,  64 }, { 135,  64 }, { 153,  64 }, { 194,  64 }, { 209,  64 },{ 224,  64 },
    // UNDERGLOW
    {   216, 32 }, {  180,  32 }, {  144, 32 }, { 108,  32 }, { 72,  32 }, { 36,  32 }
}, {
    // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
    // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ],  ,
    1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
    // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
    1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
    // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
    1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
    // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
    1, 1, 1, 4, 1, 1, 1, 1, 1,
    // UNDERGLOW
    2, 2, 2, 2, 2, 2
} };

__attribute__ ((weak))
void rgb_matrix_indicators_user(void) {
    if (host_keyboard_led_state().caps_lock) {
        rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
    }
}
#endif

A keyboards/bm65iso/bm65iso.h => keyboards/bm65iso/bm65iso.h +36 -0
@@ 0,0 1,36 @@
/* Copyright 2021 deadolus
 *
 * 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( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,      K0E,   \
    K10,   K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,    K1E,   \
    K20,    K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,        K2E,   \
    K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C,     K3D, K3E,   \
    K40,  K41,  K42,              K46,                K49,  K4A,     K4C, K4D, K4E    \
) { \
    { K00,   K01,   K02,   K03,   K04,   K05,   K06,   K07,   K08,   K09,   K0A,   K0B,   K0C,   K0D,   K0E   }, \
    { K10,   K11,   K12,   K13,   K14,   K15,   K16,   K17,   K18,   K19,   K1A,   K1B,   K1C,   K1D,   K1E   }, \
    { K20,   KC_NO, K22,   K23,   K24,   K25,   K26,   K27,   K28,   K29,   K2A,   K2B,   K2C,   K2D,   K2E   }, \
    { K30, K31,   K32,   K33,   K34,   K35,   K36,   K37,   K38,   K39,   K3A,   K3B,   K3C,   K3D,   K3E   }, \
    { K40,   K41,   K42,   KC_NO, KC_NO, KC_NO, K46,   KC_NO, KC_NO, K49,   K4A,   KC_NO, K4C,   K4D,   K4E   }, \
}

// generated by KBFirmware JSON to QMK Parser
// https://noroadsleft.github.io/kbf_qmk_converter/


A keyboards/bm65iso/config.h => keyboards/bm65iso/config.h +72 -0
@@ 0,0 1,72 @@
/*
Copyright 2020 ipetepete, 2021 deadolus

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       0x4B50 // "KP"
#define PRODUCT_ID      0x0653
#define DEVICE_VER      0x0001
#define MANUFACTURER    KP Republic
#define PRODUCT         BM65ISO

/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
#define FORCE_NKRO

/*
 * Keyboard Matrix Assignments
 *
 * Change this to how you wired your keyboard
 * COLS: AVR pins used for columns, left to right
 * ROWS: AVR pins used for rows, top to bottom
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 *
 */
#define MATRIX_ROW_PINS { B0, B1, B2, B3, E6 }
#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6 }

#define DIODE_DIRECTION COL2ROW

#define RGB_DI_PIN E2
#define DRIVER_LED_TOTAL 74
#ifdef RGB_DI_PIN
    #define RGBLED_NUM 74
    #define RGB_MATRIX_KEYPRESSES
    #define RGBLIGHT_HUE_STEP 8
    #define RGBLIGHT_SAT_STEP 8
    #define RGBLIGHT_VAL_STEP 8
    #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 140
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_BAND_SAT
    #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
/*== all animations enable ==*/
    #define RGBLIGHT_ANIMATIONS
// /*== or choose animations ==*/
//     #define RGBLIGHT_EFFECT_BREATHING
//     #define RGBLIGHT_EFFECT_RAINBOW_MOOD
//     #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//     #define RGBLIGHT_EFFECT_SNAKE
//     #define RGBLIGHT_EFFECT_KNIGHT
//     #define RGBLIGHT_EFFECT_CHRISTMAS
//     #define RGBLIGHT_EFFECT_STATIC_GRADIENT
//     #define RGBLIGHT_EFFECT_RGB_TEST
//     #define RGBLIGHT_EFFECT_ALTERNATING
#endif

A keyboards/bm65iso/info.json => keyboards/bm65iso/info.json +82 -0
@@ 0,0 1,82 @@
{
    "keyboard_name": "bm65iso",
    "url": "",
    "maintainer": "qmk",
    "width": 16,
    "height": 5,
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"label":"K00 (B0,D0)", "x":0, "y":0},
                {"label":"K01 (B0,D1)", "x":1, "y":0},
                {"label":"K02 (B0,D2)", "x":2, "y":0},
                {"label":"K03 (B0,D3)", "x":3, "y":0},
                {"label":"K04 (B0,D5)", "x":4, "y":0},
                {"label":"K05 (B0,D4)", "x":5, "y":0},
                {"label":"K06 (B0,D6)", "x":6, "y":0},
                {"label":"K07 (B0,D7)", "x":7, "y":0},
                {"label":"K08 (B0,B4)", "x":8, "y":0},
                {"label":"K09 (B0,B5)", "x":9, "y":0},
                {"label":"K0A (B0,B6)", "x":10, "y":0},
                {"label":"K0B (B0,C6)", "x":11, "y":0},
                {"label":"K0C (B0,C7)", "x":12, "y":0},
                {"label":"K0D (B0,F7)", "x":13, "y":0, "w":2},
                {"label":"K0E (B0,F6)", "x":15, "y":0},
                {"label":"K10 (B1,D0)", "x":0, "y":1, "w":1.5},
                {"label":"K11 (B1,D1)", "x":1.5, "y":1},
                {"label":"K12 (B1,D2)", "x":2.5, "y":1},
                {"label":"K13 (B1,D3)", "x":3.5, "y":1},
                {"label":"K14 (B1,D5)", "x":4.5, "y":1},
                {"label":"K15 (B1,D4)", "x":5.5, "y":1},
                {"label":"K16 (B1,D6)", "x":6.5, "y":1},
                {"label":"K17 (B1,D7)", "x":7.5, "y":1},
                {"label":"K18 (B1,B4)", "x":8.5, "y":1},
                {"label":"K19 (B1,B5)", "x":9.5, "y":1},
                {"label":"K1A (B1,B6)", "x":10.5, "y":1},
                {"label":"K1B (B1,C6)", "x":11.5, "y":1},
                {"label":"K1C (B1,C7)", "x":12.5, "y":1},
                {"label":"K1D (B1,F7)", "x":13.5, "y":1, "w":1.5},
                {"label":"K1E (B1,F6)", "x":15, "y":1},
                {"label":"K20 (B2,D0)", "x":0, "y":2, "w":1.75},
                {"label":"K22 (B2,D2)", "x":1.75, "y":2},
                {"label":"K23 (B2,D3)", "x":2.75, "y":2},
                {"label":"K24 (B2,D5)", "x":3.75, "y":2},
                {"label":"K25 (B2,D4)", "x":4.75, "y":2},
                {"label":"K26 (B2,D6)", "x":5.75, "y":2},
                {"label":"K27 (B2,D7)", "x":6.75, "y":2},
                {"label":"K28 (B2,B4)", "x":7.75, "y":2},
                {"label":"K29 (B2,B5)", "x":8.75, "y":2},
                {"label":"K2A (B2,B6)", "x":9.75, "y":2},
                {"label":"K2B (B2,C6)", "x":10.75, "y":2},
                {"label":"K2C (B2,C7)", "x":11.75, "y":2},
                {"label":"K2D (B2,F7)", "x":12.75, "y":2, "w":2.25},
                {"label":"K2E (B2,F6)", "x":15, "y":2},
                {"label":"K30 (B2,D1)", "x":0, "y":3, "w":1.25},
                {"label":"K31 (B3,D1)", "x":1.25, "y":3, "w":1},
                {"label":"K32 (B3,D2)", "x":2.25, "y":3},
                {"label":"K33 (B3,D3)", "x":3.25, "y":3},
                {"label":"K34 (B3,D5)", "x":4.25, "y":3},
                {"label":"K35 (B3,D4)", "x":5.25, "y":3},
                {"label":"K36 (B3,D6)", "x":6.25, "y":3},
                {"label":"K37 (B3,D7)", "x":7.25, "y":3},
                {"label":"K38 (B3,B4)", "x":8.25, "y":3},
                {"label":"K39 (B3,B5)", "x":9.25, "y":3},
                {"label":"K3A (B3,B6)", "x":10.25, "y":3},
                {"label":"K3B (B3,C6)", "x":11.25, "y":3},
                {"label":"K3C (B3,C7)", "x":12.25, "y":3, "w":1.75},
                {"label":"K3D (B3,F7)", "x":14, "y":3},
                {"label":"K3E (B3,F6)", "x":15, "y":3},
                {"label":"K40 (E6,D0)", "x":0, "y":4, "w":1.25},
                {"label":"K41 (E6,D1)", "x":1.25, "y":4, "w":1.25},
                {"label":"K42 (E6,D2)", "x":2.5, "y":4, "w":1.25},
                {"label":"K46 (E6,D6)", "x":3.75, "y":4, "w":6.25},
                {"label":"K49 (E6,B5)", "x":10, "y":4, "w":1.25},
                {"label":"K4A (E6,B6)", "x":11.25, "y":4, "w":1.25},
                {"label":"K4C (E6,C7)", "x":13, "y":4},
                {"label":"K4D (E6,F7)", "x":14, "y":4},
                {"label":"K4E (E6,F6)", "x":15, "y":4}
            ]
        }
    }
    ,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
}

A keyboards/bm65iso/keymaps/deadolus/config.h => keyboards/bm65iso/keymaps/deadolus/config.h +27 -0
@@ 0,0 1,27 @@
/* Copyright 2021 deadolus
 *
 * 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/>.
 */

// place overrides here

#pragma once
#define LSPO_KEYS KC_LSFT, KC_LSFT, KC_8
#define RSPC_KEYS KC_RSFT, KC_LSFT, KC_9
#define LAPO_KEYS KC_LALT, KC_RALT, KC_QUOT
#define RAPC_KEYS KC_RALT, KC_RALT, KC_NUHS

#define LEADER_TIMEOUT 1000
#define LEADER_PER_KEY_TIMING 250


A keyboards/bm65iso/keymaps/deadolus/keymap.c => keyboards/bm65iso/keymaps/deadolus/keymap.c +288 -0
@@ 0,0 1,288 @@
/* Copyright 2019 ashlar 2021 peepeetee, deadolus
 *
 * 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 "keymap.h"

#ifdef TAP_DANCE_ENABLE
enum {
  TD_HOME_END,
};

// Tap Dance definitions
qk_tap_dance_action_t tap_dance_actions[] = {
  //tap once for home, twice for end
  [TD_HOME_END] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END)
};
#endif


// // Defines names for use in layer keycodes and the keymap
enum  layers {
  _BL,
  _RED_,
  _GREEN_,
  _BLUE_,
  _CYAN_,
  _MAGENTA_,
  _YELLOW_
};



const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  /*
   * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
   * │   │   │   │   │   │   │   │   │   │   │   │   │   │       │   │
   * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
   * │     │   │   │   │   │   │   │   │   │   │   │   │   │     │   │
   * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    ├───┤
   * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │   │
   * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
   * │    │   │   │   │   │   │   │   │   │   │   │   │      │   │   │
   * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
   * │    │    │    │                        │   │   │   │   │   │   │
   * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
   */
#ifdef TAP_DANCE_ENABLE
  /* 0: ISO qwerty */
  [_BL] = LAYOUT(
      KC_CAPS,   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_DEL,
      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_ENT, TD(TD_HOME_END),
      KC_ESC, 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_PGUP,
      KC_LSPO, KC_NUBS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC, KC_UP,   KC_PGDN,
      KC_LCTL, KC_LGUI, KC_LAPO,                   KC_SPC,                             KC_RAPC, MO(_RED_),         KC_LEFT, KC_DOWN, KC_RGHT

      ),
#else
  [_BL] = LAYOUT(
      KC_CAPS,   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_DEL,
      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_ENT, KC_HOME,
      KC_ESC, 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_PGUP,
      KC_LSPO, KC_NUBS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC, KC_UP,   KC_PGDN,
      KC_LCTL, KC_LGUI, KC_LAPO,                   KC_SPC,                             KC_RAPC, MO(_RED_),         KC_LEFT, KC_DOWN, KC_RGHT

      ),
#endif

  [_RED_] = LAYOUT(
      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, _______, LGUI(KC_END),
      _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______,_______, _______, _______, TO(0),    LGUI(KC_PAUSE),
      _______, TO(_GREEN_), TO(_BLUE_), TO(_CYAN_), TO(_MAGENTA_), TO(_YELLOW_), _______, _______, _______,   _______, _______, _______, _______,        _______,
      _______,_______ ,_______ ,_______ , _______, _______, _______, _______, _______, _______, _______,  _______,_______ , KC_VOLU, _______,
      RESET, _______, _______,                   KC_LEAD,                            _______, _______,                  KC_MPLY, KC_VOLD, KC_MUTE
      ),


  [_GREEN_] = LAYOUT(
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, _______, _______,_______ , _______, _______, _______,  KC_PGDN, KC_PGUP, KC_PSCR,_______, _______, _______, TO(0),   _______,
      _______, KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP,   KC_MS_RIGHT, KC_MS_BTN1, KC_MS_BTN2, _______,    _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END,  _______, _______, _______, _______,
      _______, _______, _______,                   _______,                            _______, _______,         _______, _______, _______
      ),


  [_BLUE_] = LAYOUT(
      _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, KC_NUMLOCK, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______,
      _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, _______, _______,KC_P7, KC_P8, KC_P9, KC_PMNS, TO(0),    _______,

      _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS,           _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______,
      _______, _______, _______,                   _______,                            KC_0, KC_PCMM,          _______, _______, _______
      ),
  [_CYAN_] = LAYOUT(
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,TO(0),    _______,

      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, _______, _______,                   _______,                            _______, _______,          _______, _______, _______
      ),
  [_MAGENTA_] = LAYOUT(
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,TO(0),    _______,

      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, _______, _______,                   _______,                            _______, _______,          _______, _______, _______
      ),
  [_YELLOW_] = LAYOUT(
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,TO(0),    _______,

      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______,
      _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
      _______, _______, _______,                   _______,                            _______, _______,          _______, _______, _______
      ),

  /*template
    [_UL] = LAYOUT(
    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,TO(0),    _______,

    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______,
    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    _______, _______, _______,                   _______,                            _______, _______,          _______, _______, _______
    )
    */
};

#ifdef _______
#undef _______
#define _______ {0, 0, 0}

const uint8_t PROGMEM ledmap[][3] = {
  [_BL] = _______,
  [_RED_] = RED,
  [_GREEN_] = GREEN,
  [_BLUE_] = BLUE,
  [_CYAN_] = CYAN,
  [_MAGENTA_] = MAGENTA,
  [_YELLOW_] = YELLOW
};

#undef _______
#define _______ KC_TRNS
#endif



void keyboard_post_init_user(void) {
  // Call the post init code.
#ifdef CONSOLE_ENABLE
  debug_enable=true;
  debug_matrix=true;
#endif
  rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
}


bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef CONSOLE_ENABLE
  //useful for getting matrix right
  uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %b, time: %u, interrupt: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
#endif

  switch (keycode) {
    case RGB_TOG:
      if (record->event.pressed) {
        switch (rgb_matrix_get_flags()) {
          case LED_FLAG_ALL: {
                               rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
                               rgb_matrix_set_color_all(0, 0, 0);
                             }
                             break;
          case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR): {
                                                                               rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
                                                                               rgb_matrix_set_color_all(0, 0, 0);
                                                                             }
                                                                             break;
          case LED_FLAG_UNDERGLOW: {
                                     rgb_matrix_set_flags(LED_FLAG_NONE);
                                     rgb_matrix_disable_noeeprom();
                                   }
                                   break;
          default: {
                     rgb_matrix_set_flags(LED_FLAG_ALL);
                     rgb_matrix_enable_noeeprom();
                   }
                   break;
        }
      }
      return false;
    default:
      return true; // Process all other keycodes normally
  }
}

void setCapsLock(void) {
  led_t host_leds = host_keyboard_led_state();
  if (host_leds.caps_lock) {
    rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);

  } else {
    //if capslock is not pressed don't clear it, it might be used for displaying led pattern
    if((rgb_matrix_get_flags() != LED_FLAG_ALL)) {
      rgb_matrix_set_color(30, 0x0, 0x0, 0x0);
    }
  }
}

void set_layer_color(int layer) {
  int ledkey=0;
  for(int i=0; i<MATRIX_COLS*MATRIX_ROWS;i++) {
    uint8_t row = i/MATRIX_COLS;
    uint8_t col=(i-(i/MATRIX_COLS)*MATRIX_COLS);
    uint16_t key=pgm_read_word(&keymaps[layer][row][col]);
    //continue if this is not a valid key
    if(key==KC_NO) { continue; }
    //clear key if it is only a transition
    if ((key == KC_TRNS)) {
      if(rgb_matrix_get_flags() != LED_FLAG_ALL){
        rgb_matrix_set_color(ledkey, 0, 0, 0);
      }
    }else {
      //this key does something - light it up
      HSV hsv = {
        .h = pgm_read_byte(&ledmap[layer][0]),
        .s = pgm_read_byte(&ledmap[layer][1]),
        .v = pgm_read_byte(&ledmap[layer][2]),
      };

      RGB rgb = hsv_to_rgb(hsv);
      float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
      if( (layer != 0) || (rgb_matrix_get_flags() != LED_FLAG_ALL))
        rgb_matrix_set_color(ledkey, f * rgb.r, f * rgb.g, f * rgb.b);
    }
    //if we are on layer 0 set capslock to correct status
    if(layer==0 && i==30) { setCapsLock(); }
    ledkey++;
  }
  return;
}

void rgb_matrix_indicators_user(void) {
  set_layer_color(get_highest_layer(layer_state));

}

#ifdef LEADER_ENABLE
LEADER_EXTERNS();

//SEND_STRING seems to be local dependent.
//For swiss-german layout I have to send "ctrl+." to get ":"
void matrix_scan_user(void) {
  LEADER_DICTIONARY() {
    leading = false;
    leader_end();

    SEQ_ONE_KEY(KC_F) {
      // Anything you can do in a macro.
      SEND_STRING("QMK is awesome.");
    }
    SEQ_TWO_KEYS(KC_D, KC_D) {
      SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
    }
    SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
      SEND_STRING("https");
      register_code(KC_LSFT);
      SEND_STRING(".77");
      unregister_code(KC_LSFT);
      SEND_STRING("start.duckduckgo.com\n");
    }
  }
}
#endif

A keyboards/bm65iso/keymaps/deadolus/keymap.h => keyboards/bm65iso/keymaps/deadolus/keymap.h +63 -0
@@ 0,0 1,63 @@
/* Copyright 2019 ash0x0 2021 peepeetee, deadolus
 *
 * 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 "print.h"
#include <string.h>
// HID has not yet been implemented for this keyboard
// #include "raw_hid.h"

#define MILLISECONDS_IN_SECOND 1000

// These are just to make it neater to use builtin HSV values in the keymap
#define RED {HSV_RED}
#define CORAL {HSV_CORAL}
#define ORANGE {HSV_ORANGE}
#define GOLDEN {HSV_GOLDENROD}
#define GOLD {HSV_GOLD}
#define YELLOW {HSV_YELLOW}
#define CHART {HSV_CHARTREUSE}
#define GREEN {HSV_GREEN}
#define SPRING {HSV_SPRINGGREEN}
#define TURQ {HSV_TURQUOISE}
#define TEAL {HSV_TEAL}
#define CYAN {HSV_CYAN}
#define AZURE {HSV_AZURE}
#define BLUE {HSV_BLUE}
#define PURPLE {HSV_PURPLE}
#define MAGENTA {HSV_MAGENTA}
#define PINK {HSV_PINK}

//========================================================== CONFIGURABLE DEFAULTS ==========================================================
#define RGB_DEFAULT_TIME_OUT 30
#define RGB_FAST_MODE_TIME_OUT 3
#define RGB_TIME_OUT_MAX 600
#define RGB_TIME_OUT_MIN 10
#define RGB_TIME_OUT_STEP 10

extern bool g_suspend_state;
bool disable_layer_color;

uint8_t dfa_state;  //state for my language switching DFA


bool rgb_enabled_flag;                  // Current LED state flag. If false then LED is off.
bool rgb_time_out_enable;               // Idle LED toggle enable. If false then LED will not turn off after idle timeout.
bool rgb_time_out_fast_mode_enabled;    // Enable flag for RGB timeout fast mode
bool rgb_time_out_user_value;           // This holds the toggle value set by user with ROUT_TG. It's necessary as RGB_TOG changes timeout enable.
uint16_t rgb_time_out_seconds;          // Idle LED timeout value, in seconds not milliseconds
uint16_t rgb_time_out_saved_seconds;    // The saved user config for RGB timeout period
led_flags_t rgb_time_out_saved_flag;    // Store LED flag before timeout so it can be restored when LED is turned on again.

A keyboards/bm65iso/keymaps/deadolus/readme.md => keyboards/bm65iso/keymaps/deadolus/readme.md +20 -0
@@ 0,0 1,20 @@
# Deadolus' keymap for the bm65iso

* Six layers (even though three are mostly empty)
* Different color for each layer (r,g,b,c,m,y)
* **Keys with something else defined than KC_TRNS are lit up in the layer color, so you easily can see which keys have some function defined**
* Caps-Lock lights up when active and on layer 0
* Some leader shortcuts defined - nothing useful yet
* Some space cadet keys defined for easier insertion of () and {}
* Bootmagic lite enabled via default settings so you can plug in the keyboard while holding esc to land in bootloader mode
* Manages all this and still fits in to the program memory

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

    make bm65iso:deadolus

Flashing example for this keyboard:

    make bm65iso:deadolus:flash

Keyboard Maintainer: **[deadolus](https://github.com/deadolus)**

A keyboards/bm65iso/keymaps/deadolus/rules.mk => keyboards/bm65iso/keymaps/deadolus/rules.mk +4 -0
@@ 0,0 1,4 @@
DYNAMIC_MACRO_ENABLE = yes
TAP_DANCE_ENABLE = yes
LEADER_ENABLE = yes
#CONSOLE_ENABLE=yes

A keyboards/bm65iso/keymaps/default/keymap.c => keyboards/bm65iso/keymaps/default/keymap.c +35 -0
@@ 0,0 1,35 @@
/* Copyright 2021 deadolus
 *
 * 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(
    KC_CAPS,   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_DEL,
    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_ENT, KC_HOME,
    KC_ESC, 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_PGUP,
    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_PGDN,
    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, MO(1),         KC_LEFT, KC_DOWN, KC_RGHT

  ),
    [1] = LAYOUT(
        RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______,     RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,      _______,
        _______,       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,             _______,
        _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,        _______, _______,
        _______,   _______,   _______,                      _______,                              _______,   _______,        _______, _______, _______
    ),

};

A keyboards/bm65iso/keymaps/via/keymap.c => keyboards/bm65iso/keymaps/via/keymap.c +48 -0
@@ 0,0 1,48 @@
/* Copyright 2021 deadolus
 *
 * 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(
        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_DEL,
        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_ENT, KC_HOME,
        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_BSLS,           KC_PGUP,
        KC_LSFT, KC_BSLS,   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_PGDN,
        KC_LCTL, KC_LGUI, KC_LALT,                      KC_SPC,                          KC_RALT, MO(1),                     KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [1] = LAYOUT(
        RESET,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,     _______,       _______,
        _______,          RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
        _______, _______, _______,                      _______,                         _______, _______,                   _______, _______, _______
    ),
    [2] = LAYOUT(
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
        _______, _______, _______,                      _______,                         _______, _______,                   _______, _______, _______
    ),
    [3] = LAYOUT(
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
        _______, _______, _______,                      _______,                         _______, _______,                   _______, _______, _______
    ),

};

A keyboards/bm65iso/keymaps/via/readme.md => keyboards/bm65iso/keymaps/via/readme.md +1 -0
@@ 0,0 1,1 @@
# The VIA default keymap for bm65iso

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

A keyboards/bm65iso/readme.md => keyboards/bm65iso/readme.md +24 -0
@@ 0,0 1,24 @@
# bm65iso

![bm65iso](https://ae01.alicdn.com/kf/He2fd118856c7490292bc3c299049fdbcp.jpg)

A 65% hotswap in switch RGB keyboard from KPRepublic.

* Keyboard Maintainer: [deadolus](https://github.com/deadolus)
* Hardware Supported: BM65 ISO
* Hardware Availability: [KP Republic](https://kprepublic.com/products/bm65rgb-bm65-iso-rgb-65-hot-swappable-custom-mechanical-keyboard-pcb-programmed-qmk-via-firmware-rgb-switch-underglow-type-c)

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

    make bm65iso:default

Flashing example for this keyboard:

    make bm65iso:default:flash

To reset the board into bootloader mode, do one of the following:

* Short the two-pad footprint to the left of the spacebar switch while the board is plugged in
* Hold the Esc key while connecting the USB cable (also erases persistent settings)

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).

A keyboards/bm65iso/rules.mk => keyboards/bm65iso/rules.mk +25 -0
@@ 0,0 1,25 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = atmel-dfu

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = lite       # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes       # 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 = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
LTO_ENABLE = yes