~ruther/qmk_firmware

c9c2916829eccab2222dad99c7f599988789ec2f — KDon 4 years ago 792c4e7
[Keyboard] Add kabedon98e (#13314)

A keyboards/kabedon/kabedon98e/chconf.h => keyboards/kabedon/kabedon98e/chconf.h +28 -0
@@ 0,0 1,28 @@
/* Copyright 2020 QMK
 *
 * 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/>.
 */

/*
 * This file was auto-generated by:
 *    `qmk chibios-confmigrate -i keyboards/keyboards/kabedon/kabedon98e/chconf.h -r platforms/chibios/common/configs/chconf.h`
 */

#pragma once

#define CH_CFG_ST_TIMEDELTA 0

#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE

#include_next <chconf.h>

A keyboards/kabedon/kabedon98e/config.h => keyboards/kabedon/kabedon98e/config.h +64 -0
@@ 0,0 1,64 @@
/* Copyright 2021 KDon<370490639@qq.com>
 *
 * 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      0x4B44
#define PRODUCT_ID     0x3935
#define DEVICE_VER     0x0002
#define MANUFACTURER   Kabe_Don
#define PRODUCT        98e

/* key matrix size */
#define MATRIX_ROWS 12
#define MATRIX_COLS 11

#define MATRIX_ROW_PINS {A4,B10,B2,B1,B0,B15,B13,B14,B12,A10,A9,A8}
#define MATRIX_COL_PINS {A0,B7,B8,B6,A3,A2,A1,B9,A7,A5,A6}
#define DIODE_DIRECTION ROW2COL

/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5

#define FORCE_NKRO

#define RGB_DI_PIN B4
#define RGBLED_NUM 24
#define RGBLIGHT_ANIMATIONS

#define WS2812_PWM_DRIVER PWMD3
#define WS2812_PWM_CHANNEL 1
#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
#define WS2812_DMA_CHANNEL 3

/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

#define ENCODERS 2
#define ENCODERS_PAD_A { B3,A14 }
#define ENCODERS_PAD_B { B5,A15 }

#define ENCODERS_CW_KEY  { { 0, 0 },{ 2, 0 } }
#define ENCODERS_CCW_KEY { { 6, 0 },{ 8, 0 } }

#define DYNAMIC_KEYMAP_LAYER_COUNT 3
/* Bootmagic Lite key configuration */
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 1

A keyboards/kabedon/kabedon98e/halconf.h => keyboards/kabedon/kabedon98e/halconf.h +26 -0
@@ 0,0 1,26 @@
/* Copyright 2020 QMK
 *
 * 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/>.
 */

/*
 * This file was auto-generated by:
 *    `qmk chibios-confmigrate -i keyboards/keyboards/kabedon/kabedon98e/halconf.h -r platforms/chibios/common/configs/halconf.h`
 */

#pragma once

#define HAL_USE_PWM TRUE

#include_next <halconf.h>

A keyboards/kabedon/kabedon98e/info.json => keyboards/kabedon/kabedon98e/info.json +114 -0
@@ 0,0 1,114 @@
{
    "keyboard_name": "KabeDon98E", 
    "url": "", 
    "maintainer": "370490639", 
    "width": 20.8, 
    "height": 6.7, 
    "layouts": {
        "LAYOUT": {
            "layout": [
			{"label":"Esc", "x":0, "y":0},
			{"label":"F1", "x":1.5, "y":0},
			{"label":"F2", "x":2.5, "y":0},
			{"label":"F3", "x":3.5, "y":0},
			{"label":"F4", "x":4.5, "y":0},
			{"label":"F5", "x":6.25, "y":0},
			{"label":"F6", "x":7.25, "y":0},
			{"label":"F7", "x":8.25, "y":0},
			{"label":"F8", "x":9.25, "y":0},
			{"label":"F9", "x":11, "y":0},
			{"label":"F10", "x":12, "y":0},
			{"label":"F11", "x":13, "y":0},
			{"label":"F12", "x":14, "y":0},
			{"label":"Delete", "x":15.5, "y":0},
			{"label":"Insert", "x":17, "y":0},
			{"label":"Mute", "x":18.5, "y":0},			
			{"label":"~", "x":0, "y":1.5},
			{"label":"!", "x":1, "y":1.5},
			{"label":"@", "x":2, "y":1.5},
			{"label":"#", "x":3, "y":1.5},
			{"label":"$", "x":4, "y":1.5},
			{"label":"%", "x":5, "y":1.5},
			{"label":"^", "x":6, "y":1.5},
			{"label":"&", "x":7, "y":1.5},
			{"label":"*", "x":8, "y":1.5},
			{"label":"(", "x":9, "y":1.5},
			{"label":")", "x":10, "y":1.5},
			{"label":"_", "x":11, "y":1.5},
			{"label":"+", "x":12, "y":1.5},
			{"label":"Backspace", "x":13, "y":1.5, "w":2},
			{"label":"Num Lock", "x":15.4, "y":1.5},
			{"label":"/", "x":16.4, "y":1.5},
			{"label":"*", "x":17.4, "y":1.5},
			{"label":"-", "x":18.4, "y":1.5},			
			{"label":"Home", "x":19.8, "y":1.5},			
			{"label":"Tab", "x":0, "y":2.5, "w":1.5},
			{"label":"Q", "x":1.5, "y":2.5},
			{"label":"W", "x":2.5, "y":2.5},
			{"label":"E", "x":3.5, "y":2.5},
			{"label":"R", "x":4.5, "y":2.5},
			{"label":"T", "x":5.5, "y":2.5},
			{"label":"Y", "x":6.5, "y":2.5},
			{"label":"U", "x":7.5, "y":2.5},
			{"label":"I", "x":8.5, "y":2.5},
			{"label":"O", "x":9.5, "y":2.5},
			{"label":"P", "x":10.5, "y":2.5},
			{"label":"{", "x":11.5, "y":2.5},
			{"label":"}", "x":12.5, "y":2.5},
			{"label":"|", "x":13.5, "y":2.5, "w":1.5},
			{"label":"7", "x":15.4, "y":2.5},
			{"label":"8", "x":16.4, "y":2.5},
			{"label":"9", "x":17.4, "y":2.5},
			{"label":"+", "x":18.4, "y":2.5, "h":2},			
			{"label":"End", "x":19.8, "y":2.5},			
			{"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
			{"label":"A", "x":1.75, "y":3.5},
			{"label":"S", "x":2.75, "y":3.5},
			{"label":"D", "x":3.75, "y":3.5},
			{"label":"F", "x":4.75, "y":3.5},
			{"label":"G", "x":5.75, "y":3.5},
			{"label":"H", "x":6.75, "y":3.5},
			{"label":"J", "x":7.75, "y":3.5},
			{"label":"K", "x":8.75, "y":3.5},
			{"label":"L", "x":9.75, "y":3.5},
			{"label":":", "x":10.75, "y":3.5},
			{"label":"\"", "x":11.75, "y":3.5},
			{"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
			{"label":"4", "x":15.4, "y":3.5},
			{"label":"5", "x":16.4, "y":3.5},
			{"label":"6", "x":17.4, "y":3.5},						
			{"label":"Shift", "x":0, "y":4.5, "w":2.25},
			{"label":"Z", "x":2.25, "y":4.5},
			{"label":"X", "x":3.25, "y":4.5},
			{"label":"C", "x":4.25, "y":4.5},
			{"label":"V", "x":5.25, "y":4.5},
			{"label":"B", "x":6.25, "y":4.5},
			{"label":"N", "x":7.25, "y":4.5},
			{"label":"M", "x":8.25, "y":4.5},
			{"label":"<", "x":9.25, "y":4.5},
			{"label":">", "x":10.25, "y":4.5},
			{"label":"?", "x":11.25, "y":4.5},
			{"label":"Shift", "x":12.25, "y":4.5, "w":1.75},
			{"label":"Up", "x":14.2, "y":4.7},
			{"label":"1", "x":15.4, "y":4.5},
			{"label":"2", "x":16.4, "y":4.5},
			{"label":"3", "x":17.4, "y":4.5},
			{"label":"Enter", "x":18.4, "y":4.5, "h":2},						
			{"label":"Pgup", "x":19.8, "y":4.5},						
			{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
			{"label":"Win", "x":1.25, "y":5.5},
			{"label":"Alt", "x":2.25, "y":5.5},
			{"label":"MO(1)", "x":3.25, "y":5.5},
			{"label":"Space", "x":4.25, "y":5.5, "w":6.25},
			{"label":"Alt", "x":10.5, "y":5.5, "w":1.25},
			{"label":"Ctrl", "x":11.75, "y":5.5, "w":1.25},
			{"label":"Left", "x":13.2, "y":5.7},
			{"label":"Down", "x":14.2, "y":5.7},
			{"label":"Right", "x":15.2, "y":5.7},
			{"label":"0", "x":16.4, "y":5.5},
			{"label":".", "x":17.4, "y":5.5},
			{"label":"Pgdn", "x":19.8, "y":5.5}
			]
        }
    }
}

A keyboards/kabedon/kabedon98e/kabedon98e.c => keyboards/kabedon/kabedon98e/kabedon98e.c +16 -0
@@ 0,0 1,16 @@
/* Copyright 2021 KDon<370490639@qq.com>
 *
 * 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 "kabedon98e.h"

A keyboards/kabedon/kabedon98e/kabedon98e.h => keyboards/kabedon/kabedon98e/kabedon98e.h +42 -0
@@ 0,0 1,42 @@
/* Copyright 2021 KDon<370490639@qq.com>
 *
 * 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 XXXX KC_NO

#define LAYOUT( \
    KB00,   KA01, KB01, KA02, KB02,    KA03, KB03, KA04, KB04,    KA05, KB05, KB06, KB07,     KF07,    KE08,    KE00,        \
    KD00, KC01, KD01, KC02, KD02, KC03, KD03, KC04, KD04, KC05, KD05, KC06, KD06,   KD07,     KD09, KE09, KE10, KF10,  KA00, \
    KF00, KE01, KF01, KE02, KF02, KE03, KF03, KE04, KF04, KE05, KF05, KE06, KF06,   KE07,     KF09, KG09, KG10,        KC00, \
    KH00, KG01, KH01, KG02, KH02, KG03, KH03, KG04, KH04, KG05, KH05, KG06,      KH07,        KH09, KI09, KI10, KH10,        \
    KJ00, KJ01, KI02, KJ02, KI03, KJ03, KI04, KJ04, KI05, KJ05, KI06,       KJ07,     KI08,   KJ09, KK09, KJ10,        KG00, \
    KL00, KK01, KL01, KL03,               KL02,                 KL05,   KK07,   KL07, KK08, KL08,   KL09, KK10, KL10,  KI00  \
) { \
  { KA00,  KA01,  KA02,  KA03,  KA04,  KA05,  XXXX,  XXXX,  XXXX,  XXXX,  XXXX }, \
  { KB00,  KB01,  KB02,  KB03,  KB04,  KB05,  KB06,  KB07,  XXXX,  XXXX,  XXXX }, \
  { KC00,  KC01,  KC02,  KC03,  KC04,  KC05,  KC06,  XXXX,  XXXX,  XXXX,  XXXX }, \
  { KD00,  KD01,  KD02,  KD03,  KD04,  KD05,  KD06,  KD07,  XXXX,  KD09,  XXXX }, \
  { KE00,  KE01,  KE02,  KE03,  KE04,  KE05,  KE06,  KE07,  KE08,  KE09,  KE10 }, \
  { KF00,  KF01,  KF02,  KF03,  KF04,  KF05,  KF06,  KF07,  XXXX,  KF09,  KF10 }, \
  { KG00,  KG01,  KG02,  KG03,  KG04,  KG05,  KG06,  XXXX,  XXXX,  KG09,  KG10 }, \
  { KH00,  KH01,  KH02,  KH03,  KH04,  KH05,  XXXX,  KH07,  XXXX,  KH09,  KH10 }, \
  { KI00,  XXXX,  KI02,  KI03,  KI04,  KI05,  KI06,  XXXX,  KI08,  KI09,  KI10 }, \
  { KJ00,  KJ01,  KJ02,  KJ03,  KJ04,  KJ05,  XXXX,  KJ07,  XXXX,  KJ09,  KJ10 }, \
  { XXXX,  KK01,  XXXX,  XXXX,  XXXX,  XXXX,  XXXX,  KK07,  KK08,  KK09,  KK10 }, \
  { KL00,  KL01,  KL02,  KL03,  XXXX,  KL05,  XXXX,  KL07,  KL08,  KL09,  KL10 }  \
}

A keyboards/kabedon/kabedon98e/keymaps/default/keymap.c => keyboards/kabedon/kabedon98e/keymaps/default/keymap.c +108 -0
@@ 0,0 1,108 @@
/* Copyright 2021 KDon<370490639@qq.com>
 *
 * 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
// Defines names for use in layer keycodes and the keymap
enum layer_names {
    _BASE,
    _FN,
    _FN1
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
┌──┐  ┌──┐┌──┐┌──┐┌──┐   ┌──┐┌──┐┌──┐┌──┐   ┌──┐┌──┐┌──┐┌──┐  ┌──┐  ┌──┐  ┌──┐
│1A│  │0B││1B││0C││1C│   │0D││1D││0E││1E│   │0F││1F││1G││1H│  │5H│  │4I│  │4A│
└──┘  └──┘└──┘└──┘└──┘   └──┘└──┘└──┘└──┘   └──┘└──┘└──┘└──┘  └──┘  └──┘  └──┘
┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐  ┌──┐┌──┐┌──┐┌──┐  ┌──┐
│3A││2B││3B││2C││3C││2D││3D││2E││3E││2F││3F││2G││3G││3H    │  │3J││4J││4K││5K│  │0A│
└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──────┘  └──┘└──┘└──┘└──┘  └──┘
┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐  ┌──┐┌──┐┌──┐┌──┐  ┌──┐
│5A  ││4B││5B││4C││5C││4D││5D││4E││5E││4F││5F││4G││5G││4H  │  │5J││6J││6K││2A│  │7A│
└────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘  └──┘└──┘└──┘│  │  └──┘
┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐  ┌──┐┌──┐┌──┐│  │
│6B   ││7B││6C││7C││6D││7D││6E││7E││6F││7F││6G││7H││7J     │  │8J││8K││7K││  │
└─────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└───────┘  └──┘└──┘└──┘└──┘
┌───────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────┐      ┌──┐┌──┐┌──┐┌──┐  ┌──┐
│9A     ││9B││8C││9C││8D││9D││8E││9E││8F││9F││8G││9H   │ ┌──┐ │9J││AJ││9K││6A│  │BA│
└───────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└─────┘ │8I│ └──┘└──┘└──┘│  │  └──┘
┌───┐┌──┐┌──┐┌──┐┌───────────────────────┐┌───┐┌───┐     └──┘     ┌──┐┌──┐│  │  ┌──┐
│AB ││BB││BD││BC││BF                     ││AH ││BH │ ┌──┐┌──┐┌──┐ │AK││BK││  │  │8A│
└───┘└──┘└──┘└──┘└───────────────────────┘└───┘└───┘ │AI││BI││BJ│ └──┘└──┘└──┘  └──┘
                                                     └──┘└──┘└──┘
 */
[_BASE] = LAYOUT(
	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_DEL,      KC_INS, 		 KC_MUTE, 
	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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,   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_P7,   KC_P8,   KC_P9,              KC_END,
	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_P4,   KC_P5,   KC_P6,   KC_PPLS,  
	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_P1,   KC_P2,   KC_P3,              KC_PGUP,
	KC_LCTL, KC_LGUI, KC_LALT, MO(1),                KC_SPC,                         KC_RALT,    KC_RCTL,   KC_LEFT,  KC_DOWN,  KC_RGHT,   KC_P0,   KC_PDOT, KC_PENT,   KC_PGDN),

[_FN] = LAYOUT(
	KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, 
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS,         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,        KC_TRNS,     RGB_VAI,  KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, 
	KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                     RGB_TOG,  RGB_MOD,    RGB_HUI, RGB_VAD, RGB_HUD,  KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS),

[_FN1] = LAYOUT(
	KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, 
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS,         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,        KC_TRNS,     KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS,
	KC_TRNS,  KC_TRNS,  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 uint8_t encoder_state[ENCODERS] = {0};
static keypos_t encoder_cw[ENCODERS] = ENCODERS_CW_KEY;
static keypos_t encoder_ccw[ENCODERS] = ENCODERS_CCW_KEY;

void encoder_action_unregister(void) {
    for (int index = 0; index < ENCODERS; ++index) {
        if (encoder_state[index]) {
            keyevent_t encoder_event = (keyevent_t) {
                .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
                .pressed = false,
                .time = (timer_read() | 1)
            };
            encoder_state[index] = 0;
            action_exec(encoder_event);
        }
    }
}

void encoder_action_register(uint8_t index, bool clockwise) {
    keyevent_t encoder_event = (keyevent_t) {
        .key = clockwise ? encoder_cw[index] : encoder_ccw[index],
        .pressed = true,
        .time = (timer_read() | 1)
    };
    encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
    action_exec(encoder_event);
}

void matrix_scan_user(void) {
    encoder_action_unregister();
}

bool encoder_update_user(uint8_t index, bool clockwise) {
    encoder_action_register(index, clockwise);
    return true;
};

A keyboards/kabedon/kabedon98e/keymaps/via/keymap.c => keyboards/kabedon/kabedon98e/keymaps/via/keymap.c +108 -0
@@ 0,0 1,108 @@
/* Copyright 2021 KDon<370490639@qq.com>
 *
 * 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
// Defines names for use in layer keycodes and the keymap
enum layer_names {
    _BASE,
    _FN,
    _FN1
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
┌──┐  ┌──┐┌──┐┌──┐┌──┐   ┌──┐┌──┐┌──┐┌──┐   ┌──┐┌──┐┌──┐┌──┐  ┌──┐  ┌──┐  ┌──┐
│1A│  │0B││1B││0C││1C│   │0D││1D││0E││1E│   │0F││1F││1G││1H│  │5H│  │4I│  │4A│
└──┘  └──┘└──┘└──┘└──┘   └──┘└──┘└──┘└──┘   └──┘└──┘└──┘└──┘  └──┘  └──┘  └──┘
┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──────┐  ┌──┐┌──┐┌──┐┌──┐  ┌──┐
│3A││2B││3B││2C││3C││2D││3D││2E││3E││2F││3F││2G││3G││3H    │  │3J││4J││4K││5K│  │0A│
└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──────┘  └──┘└──┘└──┘└──┘  └──┘
┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐  ┌──┐┌──┐┌──┐┌──┐  ┌──┐
│5A  ││4B││5B││4C││5C││4D││5D││4E││5E││4F││5F││4G││5G││4H  │  │5J││6J││6K││2A│  │7A│
└────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘  └──┘└──┘└──┘│  │  └──┘
┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐  ┌──┐┌──┐┌──┐│  │
│6B   ││7B││6C││7C││6D││7D││6E││7E││6F││7F││6G││7H││7J     │  │8J││8K││7K││  │
└─────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└───────┘  └──┘└──┘└──┘└──┘
┌───────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────┐      ┌──┐┌──┐┌──┐┌──┐  ┌──┐
│9A     ││9B││8C││9C││8D││9D││8E││9E││8F││9F││8G││9H   │ ┌──┐ │9J││AJ││9K││6A│  │BA│
└───────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└─────┘ │8I│ └──┘└──┘└──┘│  │  └──┘
┌───┐┌──┐┌──┐┌──┐┌───────────────────────┐┌───┐┌───┐     └──┘     ┌──┐┌──┐│  │  ┌──┐
│AB ││BB││BD││BC││BF                     ││AH ││BH │ ┌──┐┌──┐┌──┐ │AK││BK││  │  │8A│
└───┘└──┘└──┘└──┘└───────────────────────┘└───┘└───┘ │AI││BI││BJ│ └──┘└──┘└──┘  └──┘
                                                     └──┘└──┘└──┘
 */
[_BASE] = LAYOUT(
	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_DEL,      KC_INS, 		 KC_MUTE, 
	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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,   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_P7,   KC_P8,   KC_P9,              KC_END,
	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_P4,   KC_P5,   KC_P6,   KC_PPLS,  
	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_P1,   KC_P2,   KC_P3,              KC_PGUP,
	KC_LCTL, KC_LGUI, KC_LALT, MO(1),                KC_SPC,                         KC_RALT,    KC_RCTL,   KC_LEFT,  KC_DOWN,  KC_RGHT,   KC_P0,   KC_PDOT, KC_PENT,   KC_PGDN),

[_FN] = LAYOUT(
	KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, 
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS,         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,        KC_TRNS,     RGB_VAI,  KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, 
	KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                     RGB_TOG,  RGB_MOD,    RGB_HUI, RGB_VAD, RGB_HUD,  KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS),

[_FN1] = LAYOUT(
	KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, 
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS,
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS,         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   
	KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,        KC_TRNS,     KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS,
	KC_TRNS,  KC_TRNS,  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 uint8_t encoder_state[ENCODERS] = {0};
static keypos_t encoder_cw[ENCODERS] = ENCODERS_CW_KEY;
static keypos_t encoder_ccw[ENCODERS] = ENCODERS_CCW_KEY;

void encoder_action_unregister(void) {
    for (int index = 0; index < ENCODERS; ++index) {
        if (encoder_state[index]) {
            keyevent_t encoder_event = (keyevent_t) {
                .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
                .pressed = false,
                .time = (timer_read() | 1)
            };
            encoder_state[index] = 0;
            action_exec(encoder_event);
        }
    }
}

void encoder_action_register(uint8_t index, bool clockwise) {
    keyevent_t encoder_event = (keyevent_t) {
        .key = clockwise ? encoder_cw[index] : encoder_ccw[index],
        .pressed = true,
        .time = (timer_read() | 1)
    };
    encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
    action_exec(encoder_event);
}

void matrix_scan_user(void) {
    encoder_action_unregister();
}

bool encoder_update_user(uint8_t index, bool clockwise) {
    encoder_action_register(index, clockwise);
    return true;
};

A keyboards/kabedon/kabedon98e/keymaps/via/rules.mk => keyboards/kabedon/kabedon98e/keymaps/via/rules.mk +1 -0
@@ 0,0 1,1 @@
VIA_ENABLE = yes

A keyboards/kabedon/kabedon98e/mcuconf.h => keyboards/kabedon/kabedon98e/mcuconf.h +27 -0
@@ 0,0 1,27 @@
/* Copyright 2020 QMK
 *
 * 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/>.
 */

/*
 * This file was auto-generated by:
 *    `qmk chibios-confmigrate -i keyboards/keyboards/kabedon/kabedon98e/mcuconf.h -r platforms/chibios/STM32_F103_STM32DUINO/configs/mcuconf.h`
 */

#pragma once

#include_next <mcuconf.h>

#undef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 TRUE

A keyboards/kabedon/kabedon98e/readme.md => keyboards/kabedon/kabedon98e/readme.md +17 -0
@@ 0,0 1,17 @@
# KabeDon 98e

![KabeDon98e](https://gitee.com/kabedon/picture/raw/master/pictures/980e.jpg)

A mechanical keyboard PCB similar to 980 layout, it has two encoders.
This PCB uses kailh hot swap socket.
Kabedon980 includes RGB underflow.

* Keyboard Maintainer: [370490639](https://github.com/370490639)
* Hardware Supported: f103 KabeDon98e
* Hardware Availability: [KabeDon98e]https://kabedon.taobao.com

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

    make kabedon/kabedon98e:default

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/kabedon/kabedon98e/rules.mk => keyboards/kabedon/kabedon98e/rules.mk +24 -0
@@ 0,0 1,24 @@
# MCU name
MCU = STM32F103

# Bootloader selection
BOOTLOADER = stm32duino

# 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 = yes       # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output
WS2812_DRIVER = pwm
ENCODER_ENABLE = yes