mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-08-14 09:31:12 +00:00
Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
adb72b60b0 | ||
![]() |
bc2157eea8 | ||
![]() |
f3bf301825 | ||
![]() |
85f4c3ebb4 | ||
![]() |
853b99954e | ||
![]() |
74dc65ab2e | ||
![]() |
3eb82e0470 | ||
![]() |
ad7ba08ac8 | ||
![]() |
876e544433 | ||
![]() |
b54722cc63 | ||
![]() |
94e2a39d72 | ||
![]() |
f6b9604f4a | ||
![]() |
0374677814 | ||
![]() |
3d54b1adf0 | ||
![]() |
d4c23d881f | ||
![]() |
1f26101f0e | ||
![]() |
80c2e26741 | ||
![]() |
707d449ba0 | ||
![]() |
ba13127c04 | ||
![]() |
20d3a979f1 | ||
![]() |
25d1901d7a |
@@ -231,15 +231,16 @@ endif
|
||||
|
||||
# backward compat
|
||||
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
|
||||
BACKLIGHT_ENABLE = custom
|
||||
BACKLIGHT_DRIVER = custom
|
||||
endif
|
||||
|
||||
VALID_BACKLIGHT_TYPES := yes software custom
|
||||
VALID_BACKLIGHT_TYPES := pwm software custom
|
||||
|
||||
BACKLIGHT_ENABLE ?= no
|
||||
ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
|
||||
ifeq ($(filter $(BACKLIGHT_ENABLE),$(VALID_BACKLIGHT_TYPES)),)
|
||||
$(error BACKLIGHT_ENABLE="$(BACKLIGHT_ENABLE)" is not a valid backlight type)
|
||||
BACKLIGHT_DRIVER ?= pwm
|
||||
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
|
||||
ifeq ($(filter $(BACKLIGHT_DRIVER),$(VALID_BACKLIGHT_TYPES)),)
|
||||
$(error BACKLIGHT_DRIVER="$(BACKLIGHT_DRIVER)" is not a valid backlight type)
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||
@@ -250,10 +251,10 @@ ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
|
||||
SRC += $(QUANTUM_DIR)/backlight/backlight.c
|
||||
OPT_DEFS += -DBACKLIGHT_ENABLE
|
||||
|
||||
ifeq ($(strip $(BACKLIGHT_ENABLE)), software)
|
||||
ifeq ($(strip $(BACKLIGHT_DRIVER)), software)
|
||||
SRC += $(QUANTUM_DIR)/backlight/backlight_soft.c
|
||||
else
|
||||
ifeq ($(strip $(BACKLIGHT_ENABLE)), custom)
|
||||
ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
|
||||
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
|
||||
endif
|
||||
|
||||
|
@@ -6,16 +6,14 @@ QMK is able to control the brightness of these LEDs by switching them on and off
|
||||
|
||||
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
|
||||
|
||||
## Driver configuration
|
||||
## Feature Configuration
|
||||
|
||||
Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
|
||||
|
||||
```makefile
|
||||
BACKLIGHT_ENABLE = software # Valid driver values are 'yes,software,no'
|
||||
BACKLIGHT_ENABLE = yes
|
||||
```
|
||||
|
||||
See below for help on individual drivers.
|
||||
|
||||
## Keycodes
|
||||
Once enabled the following keycodes below can be used to change the backlight level.
|
||||
|
||||
@@ -51,6 +49,16 @@ Once enabled the following keycodes below can be used to change the backlight le
|
||||
|`breathing_enable()` |Turns on backlight breathing |
|
||||
|`breathing_disable()` |Turns off backlight breathing |
|
||||
|
||||
## Driver Configuration
|
||||
|
||||
To select which driver to use, configure your `rules.mk` with the following:
|
||||
|
||||
```makefile
|
||||
BACKLIGHT_DRIVER = software # Valid driver values are 'pwm,software,no'
|
||||
```
|
||||
|
||||
See below for help on individual drivers.
|
||||
|
||||
## Common Driver Configuration
|
||||
|
||||
To change the behavior of the backlighting, `#define` these in your `config.h`:
|
||||
@@ -72,9 +80,9 @@ This functionality is configured at the keyboard level with the `BACKLIGHT_ON_ST
|
||||
|
||||
## AVR driver
|
||||
|
||||
On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. To enable it, add this to your rules.mk:
|
||||
On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. The driver is configured by default, however the equivalent setting within rules.mk would be:
|
||||
```makefile
|
||||
BACKLIGHT_ENABLE = yes
|
||||
BACKLIGHT_DRIVER = pwm
|
||||
```
|
||||
|
||||
### Caveats
|
||||
@@ -150,9 +158,9 @@ The breathing effect is the same as in the hardware PWM implementation.
|
||||
|
||||
## ARM Driver
|
||||
|
||||
While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. To enable it, add this to your rules.mk:
|
||||
While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. The driver is configured by default, however the equivalent setting within rules.mk would be:
|
||||
```makefile
|
||||
BACKLIGHT_ENABLE = yes
|
||||
BACKLIGHT_DRIVER = pwm
|
||||
```
|
||||
|
||||
### Caveats
|
||||
@@ -176,7 +184,7 @@ To change the behavior of the backlighting, `#define` these in your `config.h`:
|
||||
|
||||
Emulation of PWM while running other keyboard tasks, it offers maximum hardware compatibility without extra platform configuration. The tradeoff is the backlight might jitter when the keyboard is busy. To enable, add this to your rules.mk:
|
||||
```makefile
|
||||
BACKLIGHT_ENABLE = software
|
||||
BACKLIGHT_DRIVER = software
|
||||
```
|
||||
|
||||
### Software PWM Configuration
|
||||
@@ -200,3 +208,29 @@ To activate multiple backlight pins, you need to add something like this to your
|
||||
#undef BACKLIGHT_PIN
|
||||
#define BACKLIGHT_PINS { F5, B2 }
|
||||
```
|
||||
|
||||
## Custom Driver
|
||||
|
||||
To enable, add this to your rules.mk:
|
||||
|
||||
```makefile
|
||||
BACKLIGHT_DRIVER = custom
|
||||
```
|
||||
|
||||
When implementing the custom driver API, the provided keyboard hooks are as follows:
|
||||
|
||||
```c
|
||||
void backlight_init_ports(void) {
|
||||
// Optional - Run on startup
|
||||
// - usually you want to configure pins here
|
||||
}
|
||||
void backlight_set(uint8_t level) {
|
||||
// Optional - Run on level change
|
||||
// - usually you want to respond to the new value
|
||||
}
|
||||
|
||||
void backlight_task(void) {
|
||||
// Optional - Run periodically
|
||||
// - long running actions here can cause performance issues
|
||||
}
|
||||
```
|
||||
|
@@ -13,7 +13,7 @@ There are 7 main sections to this guide:
|
||||
* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md)
|
||||
* [Flashing Firmware](newbs_flashing.md)
|
||||
* [Testing and Debugging](newbs_testing_debugging.md)
|
||||
* [Git Best Practices](newbs_best_practices.md)
|
||||
* [Best Git Practices](newbs_git_best_practices.md)
|
||||
* [Learn More with these Resources](newbs_learn_more_resources.md)
|
||||
|
||||
This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
|
||||
|
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#define ENCODER_RESOLUTION 2
|
37
keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c
Normal file
37
keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
Copyright 2019 Boy_314
|
||||
|
||||
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 keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_2x2(
|
||||
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_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_NO, ENC_PRESS,
|
||||
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_HOME,
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER, KC_END,
|
||||
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_DEL,
|
||||
KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT_2x2(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
NK_TOGG, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, OLED_TOGG,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, RESET, CLOCK_SET,
|
||||
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
|
||||
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
|
||||
)
|
||||
};
|
@@ -0,0 +1,3 @@
|
||||
# Boy_314's Satisfaction75 Layout
|
||||
|
||||
This is Boy_314's Satisfaction75 Layout. It can be used on VIA. It features a QWERTY layout on the base, along with missing TKL keys on layer 1. Right side 3 keys from top down are: Home, End, Delete. The encoder resolution has been reduced from the default of 4 down to 2 so that it no longer needs to click twice, but now only once, before triggering an action.
|
@@ -0,0 +1,4 @@
|
||||
# rules.mk overrides to enable VIA
|
||||
|
||||
RAW_ENABLE = yes
|
||||
DYNAMIC_KEYMAP_ENABLE = yes
|
@@ -27,27 +27,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define PRODUCT AEK64
|
||||
#define DESCRIPTION QMK keyboard firmware for AEK64 handwired
|
||||
|
||||
/* Define the backlight */
|
||||
/*#define BACKLIGHT_ON_STATE 1*/
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 14
|
||||
|
||||
// Originally made for a Teensy 2++
|
||||
#define MATRIX_COL_PINS { F0, E6, E7, B0, B1, B2, B3, B4, B5, B6, B7, D0, D1, D2 }
|
||||
#define MATRIX_COL_PINS { F0, E6, E7, B0, B1, B2, B3, B4, B5, B6, D3, D0, D1, D2 }
|
||||
#define MATRIX_ROW_PINS { E0, E1, C0, C1, C2 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* 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
|
||||
|
||||
/* Enable the space-cadet options */
|
||||
#define RSPC_KEYS KC_RSFT, KC_TRNS, KC_PGUP
|
||||
#define RCPC_KEYS KC_RCTL, KC_TRNS, KC_PGDOWN
|
||||
@@ -59,20 +53,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#define COMBO_COUNT 1
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
#define BACKLIGHT_PIN B7
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BACKLIGHT_LEVELS 5
|
||||
|
85
keyboards/handwired/aek64/keymaps/4sstylz/keycodes.h
Normal file
85
keyboards/handwired/aek64/keymaps/4sstylz/keycodes.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* Version 2, December 2004
|
||||
*
|
||||
* Copyright (C) 2019 4sStylZ <4sstylz@protonmail.ch>
|
||||
*
|
||||
* Everyone is permitted to copy and distribute verbatim or modified
|
||||
* copies of this license document, and changing it is allowed as long
|
||||
* as the name is changed.
|
||||
*
|
||||
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
*
|
||||
* 0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
/**
|
||||
* Macro for selecting all the text in the document.
|
||||
* Usual shortcut : Ctrl+A.
|
||||
*
|
||||
* @param keyrecord_t *record
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void select_all(keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
register_code(KC_LCTL);
|
||||
tap_code(KC_A);
|
||||
unregister_code(KC_LCTL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Macro for selecting the current row.
|
||||
*
|
||||
* @param keyrecord_t *record
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void select_row(keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
tap_code(KC_HOME);
|
||||
register_code(KC_LSFT);
|
||||
tap_code(KC_END);
|
||||
unregister_code(KC_LSFT);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Macro for selecting the current word.
|
||||
* Usage : You need to have the cursor into the word or directly at the right.
|
||||
*
|
||||
*
|
||||
* Usual shortcut : Ctrl+A.
|
||||
*
|
||||
* @param keyrecord_t *record
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void select_word(keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
register_code(KC_LCTL);
|
||||
tap_code(KC_LEFT);
|
||||
register_code(KC_LSFT);
|
||||
tap_code(KC_RIGHT);
|
||||
unregister_code(KC_LSFT);
|
||||
unregister_code(KC_LCTL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Macro for inserting two 0 with keypad.
|
||||
* Be carefull to have the keypad lock enabled
|
||||
*
|
||||
* @param keyrecord_t *record
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void insert_00(keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
tap_code(KC_P0);
|
||||
tap_code(KC_P0);
|
||||
}
|
||||
}
|
@@ -1,4 +1,5 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include <keycodes.h>
|
||||
|
||||
// Implement Super-alt↯tab
|
||||
// See https://docs.qmk.fm/#/feature_macros?id=super-alt↯tab
|
||||
@@ -7,7 +8,10 @@ uint16_t alt_tab_timer = 0;
|
||||
|
||||
// Defining all the custom keycodes.
|
||||
enum custom_keycodes {
|
||||
ALT_TAB = SAFE_RANGE
|
||||
ALT_TAB = SAFE_RANGE,
|
||||
SLC_ROW,
|
||||
SLC_ALL,
|
||||
SLC_WRD
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM lock_combo[] = {KC_J, KC_K, KC_L, KC_SCLN, COMBO_END};
|
||||
@@ -18,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty
|
||||
* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬─────────────┐
|
||||
* │ ` Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Bksp │
|
||||
* ├─────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
|
||||
* ├──────┴──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
|
||||
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
|
||||
* ├─────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┴┐ Enter│
|
||||
* │ Layer 2 │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
|
||||
@@ -40,14 +44,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
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,
|
||||
MO(1) , 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_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_LCPO , KC_LALT, ALT_TAB, KC_SPC, KC_LGUI, KC_RALT, KC_RCPC
|
||||
KC_LCPO , KC_LGUI, KC_LALT, KC_SPC, KC_APP , KC_RALT, KC_RCPC
|
||||
),
|
||||
|
||||
/* 1: second layer for media keys and many advanced features ç
|
||||
* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬─────────────┐
|
||||
* │Alt F4│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
|
||||
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
|
||||
* │ │ │ │PrtScn│ Brt+ │ Brt- │Ctrl A│ Home │ Up │ End │ ‽ │ ↑ │ ⸮ │ │ │
|
||||
* ├──────┴──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
|
||||
* │ │ │PrtScn│ Brt+ │ Brt- │Ctrl A│ Home │ Up │ End │ ‽ │ ↑ │ ⸮ │ │ │
|
||||
* ├─────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┴┐ │
|
||||
* │ │ Cut │ Copy │Paste │ Del │ Del │ Left │ Down │Right │ ← │ ↓ │ → │ │ │
|
||||
* ├──────┬──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┴──────┴──────┤
|
||||
@@ -57,11 +61,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* └──────┴──────┴──────┴──────────────────────────────────────────────────────────────┴──────┴──────┴──────┘
|
||||
*/
|
||||
[1] = LAYOUT( \
|
||||
LALT(KC_F4), 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_BRIU , KC_BRID, LCTL(KC_A), KC_HOME, KC_UP , KC_END , UC(0x203D) , UC(0x8593), UC(0x2E2E),
|
||||
_______ , _______ , LSFT(KC_DEL), LCTL(KC_INS), LSFT(KC_INS), KC_DEL , KC_DEL , KC_LEFT, KC_DOWN, KC_RIGHT, UC(0x8592) , UC(0x8595), UC(0x8594), _______,
|
||||
_______ , _______ , KC_MUTE , KC_VOLD , KC_VOLU , _______, _______ , _______, _______, _______ , _______ , RESET , _______ ,
|
||||
_______ , _______ , _______ , _______, _______ , _______ , _______
|
||||
LALT(KC_F4), 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 ,
|
||||
_______ , _______ , SLC_ALL , SLC_ROW , SLC_WRD , _______, KC_BSPC, KC_HOME, KC_UP , KC_END , KC_BRIU, KC_BRID , KC_PSCR,
|
||||
_______ , _______ , LSFT(KC_DEL), LCTL(KC_INS), LSFT(KC_INS), KC_DEL , KC_ENT , KC_LEFT, KC_DOWN, KC_RIGHT, BL_TOGG, BL_STEP , BL_BRTG, _______,
|
||||
_______ , _______ , KC_MUTE , KC_VOLD , KC_VOLU , ALT_TAB, _______, _______, _______, _______ , _______, RESET , _______ ,
|
||||
_______ , _______ , _______ , _______, _______ , _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
@@ -88,6 +92,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
unregister_code(KC_TAB);
|
||||
}
|
||||
break;
|
||||
case SLC_ALL:
|
||||
select_all(record);
|
||||
break;
|
||||
case SLC_ROW:
|
||||
select_row(record);
|
||||
break;
|
||||
case SLC_WRD:
|
||||
select_word(record);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@@ -25,3 +25,4 @@ UNICODE_ENABLE = yes # Enable support for arrow keys icon on the second layer.
|
||||
COMBO_ENABLE = yes # Enable combo for special function when using multiple keys at once.
|
||||
TAP_DANCE_ENABLE = no # Enable use multiple tap
|
||||
NKRO_ENABLE = yes
|
||||
BACKLIGHT_ENABLE = yes
|
||||
|
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
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_DEL, KC_END, KC_PGDN,
|
||||
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_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_TRNS, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DEC, BL_INC,
|
||||
|
@@ -4,7 +4,10 @@
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
#define _MA 0
|
||||
enum _layer {
|
||||
_MA,
|
||||
_FN
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
@@ -12,6 +15,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_ESC, 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_BSLS, KC_BSPC, \
|
||||
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_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_ENT, \
|
||||
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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTRL)
|
||||
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, LT(_FN, KC_UP), \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(_FN, KC_APP), KC_RCTRL),
|
||||
|
||||
[_FN] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______)
|
||||
};
|
||||
|
@@ -14,14 +14,14 @@ BOOTLOADER = qmk-dfu
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
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
|
||||
NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870)
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150)
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
|
@@ -6,22 +6,12 @@ void matrix_init_board(void){
|
||||
setPinOutput(A2);
|
||||
}
|
||||
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
|
||||
writePinLow(A0);
|
||||
} else {
|
||||
writePinHigh(A0);
|
||||
bool led_update_kb(led_t led_state) {
|
||||
bool runDefault = led_update_user(led_state);
|
||||
if (runDefault) {
|
||||
writePin(A0, !led_state.num_lock);
|
||||
writePin(A1, !led_state.caps_lock);
|
||||
writePin(A2, !led_state.scroll_lock);
|
||||
}
|
||||
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
||||
writePinLow(A1);
|
||||
} else {
|
||||
writePinHigh(A1);
|
||||
}
|
||||
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
|
||||
writePinLow(A2);
|
||||
} else {
|
||||
writePinHigh(A2);
|
||||
}
|
||||
led_set_user(usb_led);
|
||||
return runDefault;
|
||||
}
|
||||
|
@@ -23,17 +23,16 @@ enum my_layers {
|
||||
};
|
||||
|
||||
#define FNMS MO(_FNMS)
|
||||
#define SPCNAV LT(_NAVMED, KC_SPC)
|
||||
#define CAPSTL CTL_T(KC_CAPS)
|
||||
#define CMDENT CMD_T(KC_ENT)
|
||||
#define NAVMED MO(_NAVMED)
|
||||
#define CAP_CTL CTL_T(KC_CAPS)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT_default(
|
||||
KC_GESC, 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_DEL, KC_BSPC,
|
||||
KC_PGUP, 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_PGDN, CAPSTL, 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_GESC, 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_BSLS, KC_DEL,
|
||||
KC_PGUP, 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_BSPC,
|
||||
KC_PGDN, CAP_CTL, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FNMS,
|
||||
KC_LCTL, KC_LALT, CMDENT, FNMS, SPCNAV, KC_RALT, KC_RCTL
|
||||
KC_LCTL, KC_LALT, KC_LCMD, NAVMED, KC_SPC, KC_RALT, KC_RCTL
|
||||
),
|
||||
|
||||
[_FNMS] = LAYOUT_default(
|
||||
@@ -41,15 +40,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, RESET,
|
||||
VLK_TOG, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______,
|
||||
_______, BL_INC, BL_DEC, BL_TOGG, BL_BRTG, _______, RGB_SAI, RGB_HUI, RGB_VAI, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
AG_TOGG, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_NAVMED] = LAYOUT_default(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, _______, KC_UP, _______, _______, _______, _______, RESET,
|
||||
_______, _______, _______, _______, _______, _______, KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, EEP_RST,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
KC_HOME, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, RESET,
|
||||
KC_END, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, EEP_RST,
|
||||
_______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
static uint8_t top = 0;
|
||||
static uint8_t middle = 0;
|
||||
static uint8_t bottom = 1;
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
top = middle = bottom = 0;
|
||||
switch (get_highest_layer(state)) {
|
||||
case _NAVMED:
|
||||
top = 1;
|
||||
break;
|
||||
case _FNMS:
|
||||
middle = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
bool led_update_user(led_t usb_led) {
|
||||
writePin(A0, !top);
|
||||
writePin(A1, !middle);
|
||||
writePin(A2, !bottom);
|
||||
return false;
|
||||
}
|
||||
|
@@ -1 +1,2 @@
|
||||
VELOCIKEY_ENABLE = yes
|
||||
CONSOLE_ENABLE = no
|
||||
|
38
keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h
Normal file
38
keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
Copyright 2019 starcalleramethyst
|
||||
|
||||
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
|
||||
|
||||
|
||||
/* Use I2C or Serial, not both */
|
||||
|
||||
#define USE_SERIAL
|
||||
// #define USE_I2C
|
||||
|
||||
/* Select hand configuration */
|
||||
|
||||
#define MASTER_LEFT
|
||||
// #define MASTER_RIGHT
|
||||
// #define EE_HANDS
|
||||
|
||||
#undef RGBLED_NUM
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 16
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
#define RGBLIGHT_VAL_STEP 8
|
||||
#define TAPPING_TERM 200
|
148
keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c
Normal file
148
keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c
Normal file
@@ -0,0 +1,148 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
uint16_t copy_paste_timer;
|
||||
|
||||
enum custom_keycodes {
|
||||
S_H = SAFE_RANGE, // slack here
|
||||
S_H_P, // slack here + paste
|
||||
T_H_B, // ticket header bike
|
||||
T_H_T, // ticket header tread
|
||||
E_OP, // email open
|
||||
E_CL, // email close
|
||||
E_FU, // email follow up
|
||||
E_SS, // email service schedule
|
||||
SCRN_C, // screen clip
|
||||
DC_C, // double click + copy
|
||||
KC_CCCV, // one key copy/paste
|
||||
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
|
||||
case S_H:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("@HERE");
|
||||
}
|
||||
break;
|
||||
|
||||
case S_H_P:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("@HERE" SS_TAP(X_SPC) SS_LCTL("v"));
|
||||
}
|
||||
break;
|
||||
|
||||
case T_H_B:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("Your Peloton Bike - ");
|
||||
}
|
||||
break;
|
||||
|
||||
case T_H_T:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("Your Peloton Tread - ");
|
||||
}
|
||||
break;
|
||||
|
||||
case E_OP:
|
||||
if (record->event.pressed) {
|
||||
// when keycode E_OP is pressed
|
||||
SEND_STRING("Hi , "SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for contacting Peloton."SS_TAP(X_ENTER)SS_TAP(X_ENTER));
|
||||
}
|
||||
break;
|
||||
|
||||
case E_CL:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("Please let me know if you have any other questions."SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for being the best part of Peloton.");
|
||||
}
|
||||
break;
|
||||
|
||||
case E_FU:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("I will be personally watching this issue and will reach out to you after this is complete to make sure everything went smoothly."SS_TAP(X_ENTER)SS_TAP(X_ENTER));
|
||||
}
|
||||
break;
|
||||
|
||||
case E_SS:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("Please click here to schedule your service."SS_TAP(X_ENTER)SS_TAP(X_ENTER));
|
||||
}
|
||||
break;
|
||||
|
||||
case SCRN_C:
|
||||
if (record->event.pressed) {
|
||||
tap_code16(C(S(KC_F5)));
|
||||
}
|
||||
break;
|
||||
|
||||
case DC_C:
|
||||
if (record->event.pressed) {
|
||||
tap_code(KC_BTN1);
|
||||
tap_code(KC_BTN1);
|
||||
tap_code16(C(KC_C));
|
||||
}
|
||||
break;
|
||||
|
||||
case KC_CCCV: // One key copy/paste
|
||||
if (record->event.pressed) {
|
||||
copy_paste_timer = timer_read();
|
||||
} else {
|
||||
if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
|
||||
tap_code16(C(KC_C));
|
||||
} else { // Tap, paste
|
||||
tap_code16(C(KC_V));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
//Tap Dance Declarations
|
||||
enum {
|
||||
TD_SPC_DOT = 0
|
||||
};
|
||||
|
||||
//Tap Dance Definitions
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
//Tap once for Esc, twice for Caps Lock
|
||||
[TD_SPC_DOT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_PDOT)
|
||||
// Other declarations would go here, separated by commas, if you have them
|
||||
};
|
||||
|
||||
|
||||
|
||||
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_BSLS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
|
||||
KC_CCCV, KC_LGUI, KC_LALT, RGB_TOG, MO(1), TD(TD_SPC_DOT), KC_BSPC, KC_ENT, TD(TD_SPC_DOT), MO(2), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN),
|
||||
|
||||
[1] = LAYOUT(
|
||||
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_TRNS, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END,
|
||||
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT,
|
||||
KC_NO, KC_LGUI, KC_LALT, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD),
|
||||
|
||||
/* [2] = LAYOUT(
|
||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_NO, TO(0), KC_SPC, KC_BSPC, KC_ENT, KC_SPC, TO(0), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN),
|
||||
*/
|
||||
[2] = LAYOUT(
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, S_H_P, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, E_CL, E_FU, E_OP, S_H, SCRN_C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, DC_C, E_SS, T_H_T, T_H_B, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO)
|
||||
|
||||
};
|
||||
|
||||
|
@@ -0,0 +1,3 @@
|
||||
RGBLIGHT_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
MOUSEKEY_ENABLE = yes
|
110
keyboards/xd68/config.h
Normal file
110
keyboards/xd68/config.h
Normal file
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
Copyright 2019 Michael Campbell
|
||||
|
||||
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 0xCDCD
|
||||
#define PRODUCT_ID 0x6868
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER xiudi
|
||||
#define PRODUCT XD68
|
||||
#define DESCRIPTION XD68 65pc keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
||||
/*
|
||||
* 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 { D0, D1, D2, D3, D5 }
|
||||
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3, F7 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
#define BACKLIGHT_PIN F5
|
||||
#define BACKLIGHT_LEVELS 6
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* 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
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
// ws2812 options
|
||||
#define RGB_DI_PIN F6 // pin the DI on the ws2812 is hooked-up to
|
||||
#define RGBLIGHT_ANIMATIONS // run RGB animations
|
||||
#define RGBLED_NUM 12 // number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
|
||||
#define RGBLIGHT_SAT_STEP 25 // units to step when in/decresing saturation
|
||||
#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
|
5
keyboards/xd68/keymaps/default/config.h
Normal file
5
keyboards/xd68/keymaps/default/config.h
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BREATHING_PERIOD 6
|
48
keyboards/xd68/keymaps/default/keymap.c
Normal file
48
keyboards/xd68/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,48 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define _BL 0
|
||||
#define _FL 1
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _BL: (Base Layer) Default Layer
|
||||
* ,----------------------------------------------------------------.
|
||||
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
|
||||
* |----------------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
|
||||
* |----------------------------------------------------------------|
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
|
||||
* |----------------------------------------------------------------|
|
||||
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
|
||||
* |----------------------------------------------------------------|
|
||||
* |Ctrl|Win |Alt | Space |App|Ctrl|FN |Lef|Dow|Rig |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_BL] = LAYOUT_65_ansi(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, KC_PGUP,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGDN,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_END,
|
||||
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_APP, KC_RCTRL, MO(_FL), KC_LEFT,KC_DOWN,KC_RGHT
|
||||
),
|
||||
|
||||
/* Keymap _FL: Function Layer
|
||||
* ,----------------------------------------------------------------.
|
||||
* |~ `| F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
|
||||
* |----------------------------------------------------------------|
|
||||
* |RESET| |Up | | | | | | | | | | | | |
|
||||
* |----------------------------------------------------------------|
|
||||
* | |<- |Dn | ->| | | | | | | | | | |
|
||||
* |----------------------------------------------------------------|
|
||||
* |HUI |SAI|VAI|RGBMOD|BL-|BL |BL+| | | | |Play |V+ |Mut |
|
||||
* |----------------------------------------------------------------|
|
||||
* |HUD |SAD |VAD | RGB_Tog | | | | <M|V- |M> |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_FL] = LAYOUT_65_ansi(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS,
|
||||
RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
|
||||
RGB_HUD, RGB_SAD, RGB_VAD, RGB_TOG, _______, _______, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
|
||||
),
|
||||
};
|
5
keyboards/xd68/keymaps/default/readme.md
Normal file
5
keyboards/xd68/keymaps/default/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# XD68 layout for Default ANSI
|
||||
|
||||
```
|
||||
make xd68:default
|
||||
```
|
4
keyboards/xd68/keymaps/default_iso/config.h
Normal file
4
keyboards/xd68/keymaps/default_iso/config.h
Normal file
@@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BREATHING_PERIOD 6
|
48
keyboards/xd68/keymaps/default_iso/keymap.c
Normal file
48
keyboards/xd68/keymaps/default_iso/keymap.c
Normal file
@@ -0,0 +1,48 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define _BL 0
|
||||
#define _FL 1
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _BL: (Base Layer) Default Layer
|
||||
* ,----------------------------------------------------------------.
|
||||
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
|
||||
* |----------------------------------------------------------------|
|
||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |PgUp|
|
||||
* |------------------------------------------------------- -----|
|
||||
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgDn|
|
||||
* |----------------------------------------------------------------|
|
||||
* |Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|End |
|
||||
* |----------------------------------------------------------------|
|
||||
* |Ctrl|Win |Alt | Space |App|Ctrl |Fn|Lef|Dow|Rig |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_BL] = LAYOUT_65_iso(
|
||||
KC_ESC, 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_APP, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/* Keymap _FL1: Function Layer 1
|
||||
* ,----------------------------------------------------------------.
|
||||
* |~ `| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Delete| Ins|
|
||||
* |----------------------------------------------------------------|
|
||||
* |RESET| | ↑ | | | | | | | | | | | | |
|
||||
* |------------------------------------------------------- -----|
|
||||
* | | ← | ↓ | → | | | | | | | | | | | |
|
||||
* |----------------------------------------------------------------|
|
||||
* |HUI |SAI|VAI |RGBMOD| L+|LED| L-| | | | | |Play|V+|Mut|
|
||||
* |----------------------------------------------------------------|
|
||||
* |HUD |SAD |VAD | RGB_Tog | | | | <M | V-| M> |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
[_FL] = LAYOUT_65_iso(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS,
|
||||
RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
|
||||
RGB_HUD, RGB_SAD, RGB_VAD, RGB_TOG, _______, _______, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
|
||||
)
|
||||
};
|
5
keyboards/xd68/keymaps/default_iso/readme.md
Normal file
5
keyboards/xd68/keymaps/default_iso/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# XD68 layout for Default ISO
|
||||
|
||||
```
|
||||
make xd68:default_iso
|
||||
```
|
53
keyboards/xd68/readme.md
Normal file
53
keyboards/xd68/readme.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# XD68
|
||||
|
||||

|
||||
|
||||
65% board with USB-C, RGB underglow and backlight. Powered by ATM32U4.
|
||||
|
||||

|
||||
|
||||
* Keyboard Maintainer: QMK Community
|
||||
* Hardware Supported: XD68
|
||||
* Hardware Availability: [KPRepublic on AliExpress](http://kprepublic.com/products/xiudi-xd68-pcb-65-custom-mechanical-keyboard-support-tkg-tools-underglow-rgb-pcb-programmed-kle-lots-of-layouts)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make xd68:default
|
||||
make xd68:default_iso # default ISO UK layout
|
||||
|
||||
## Layouts
|
||||
|
||||
### ANSI
|
||||
|
||||
```
|
||||
,----------------------------------------------------------------.
|
||||
|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
|
||||
|----------------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
|
||||
|----------------------------------------------------------------|
|
||||
|CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
|
||||
|----------------------------------------------------------------|
|
||||
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
|
||||
|----------------------------------------------------------------|
|
||||
|Ctrl|Win |Alt | Space |App|Ctrl|FN |Lef|Dow|Rig |
|
||||
`----------------------------------------------------------------'
|
||||
```
|
||||
|
||||
### ISO-UK
|
||||
|
||||
```
|
||||
,----------------------------------------------------------------.
|
||||
|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
|
||||
|----------------------------------------------------------------|
|
||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |PgUp|
|
||||
|------------------------------------------------------- -----|
|
||||
|CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgDn|
|
||||
|----------------------------------------------------------------|
|
||||
|Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|End |
|
||||
|----------------------------------------------------------------|
|
||||
|Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
|
||||
`----------------------------------------------------------------'
|
||||
```
|
||||
|
||||
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).
|
||||
|
32
keyboards/xd68/rules.mk
Normal file
32
keyboards/xd68/rules.mk
Normal file
@@ -0,0 +1,32 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# QMK Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
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 = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI support
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
LAYOUTS = 65_ansi 65_iso
|
22
keyboards/xd68/xd68.c
Executable file
22
keyboards/xd68/xd68.c
Executable file
@@ -0,0 +1,22 @@
|
||||
#include "xd68.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
matrix_init_user();
|
||||
led_init_ports();
|
||||
}
|
||||
|
||||
void led_init_ports(void) {
|
||||
// * Set our LED pins as output
|
||||
setPinOutput(B2);
|
||||
writePinHigh(B2);
|
||||
}
|
||||
|
||||
bool led_update_kb(led_t led_state) {
|
||||
if(led_update_user(led_state)) {
|
||||
writePin(B2, !led_state.caps_lock);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
69
keyboards/xd68/xd68.h
Executable file
69
keyboards/xd68/xd68.h
Executable file
@@ -0,0 +1,69 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
// readability
|
||||
#define XXX KC_NO
|
||||
|
||||
/* XD68 ANSI layout
|
||||
* ,----------------------------------------------------------------.
|
||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
|
||||
* |----------------------------------------------------------------|
|
||||
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | 1e |
|
||||
* |----------------------------------------------------------------|
|
||||
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | 2e |
|
||||
* |----------------------------------------------------------------|
|
||||
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
|
||||
* |----------------------------------------------------------------|
|
||||
* | 40 | 41 | 42 | 45 | 48| 4a| 4b| 4c| 4d| 4e |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
// The first section contains all of the arguments
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
|
||||
#define LAYOUT_65_ansi( \
|
||||
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, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
|
||||
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
|
||||
k40, k41, k42, k45, k48, k4a, k4b, 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, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \
|
||||
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
|
||||
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, k4b, XXX, k48, k4a, k4c, k4d, k4e} \
|
||||
}
|
||||
|
||||
/* XD68 ISO layout
|
||||
* ,----------------------------------------------------------------.
|
||||
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
|
||||
* |----------------------------------------------------------------|
|
||||
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| | 1e |
|
||||
* |------------------------------------------------------. -----|
|
||||
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c| 2d| 2e |
|
||||
* |----------------------------------------------------------------|
|
||||
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
|
||||
* |----------------------------------------------------------------|
|
||||
* | 40 | 41 | 42 | 45 | 48| 4a| 4b| 4c| 4d| 4e |
|
||||
* `----------------------------------------------------------------'
|
||||
*/
|
||||
// The first section contains all of the arguments
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
|
||||
#define LAYOUT_65_iso( \
|
||||
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, k1e, \
|
||||
k20, k21, 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, k45, k48, k4a, k4b, 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, XXX, k1e}, \
|
||||
{k20, k21, 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, XXX, XXX, k45, XXX, XXX, k4b, XXX, k48, k4a, k4c, k4d, k4e} \
|
||||
}
|
46
keyboards/ymdk/ymd67/config.h
Normal file
46
keyboards/ymdk/ymd67/config.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER YMDK
|
||||
#define PRODUCT YMD67
|
||||
#define DESCRIPTION Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
|
||||
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, F7, B5, B4, D7, D6, B3, B2 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* number of backlight levels */
|
||||
#define BACKLIGHT_PIN B7
|
||||
#ifdef BACKLIGHT_PIN
|
||||
#define BACKLIGHT_LEVELS 5
|
||||
#endif
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
|
||||
/* prevent stuck modifiers */
|
||||
|
||||
#define RGB_DI_PIN E2
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 12
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
#define RGBLIGHT_VAL_STEP 8
|
||||
#endif
|
81
keyboards/ymdk/ymd67/info.json
Normal file
81
keyboards/ymdk/ymd67/info.json
Normal file
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"keyboard_name": "ymd67",
|
||||
"url": "https://www.aliexpress.com/item/4000311811121.html",
|
||||
"maintainer": "SwiftLawnGnome",
|
||||
"width": 15,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"key_count": 67,
|
||||
"layout": [
|
||||
{"label": "Esc", "x": 0, "y": 0},
|
||||
{"label": "!", "x": 1, "y": 0},
|
||||
{"label": "@", "x": 2, "y": 0},
|
||||
{"label": "#", "x": 3, "y": 0},
|
||||
{"label": "$", "x": 4, "y": 0},
|
||||
{"label": "%", "x": 5, "y": 0},
|
||||
{"label": "^", "x": 6, "y": 0},
|
||||
{"label": "&", "x": 7, "y": 0},
|
||||
{"label": "*", "x": 8, "y": 0},
|
||||
{"label": "(", "x": 9, "y": 0},
|
||||
{"label": ")", "x": 10, "y": 0},
|
||||
{"label": "_", "x": 11, "y": 0},
|
||||
{"label": "+", "x": 12, "y": 0},
|
||||
{"label": "~", "x": 13, "y": 0},
|
||||
{"label": "Bs", "x": 14, "y": 0},
|
||||
{"label": "Tab", "x": 0, "y": 1, "w": 1.5},
|
||||
{"label": "Q", "x": 1.5, "y": 1},
|
||||
{"label": "W", "x": 2.5, "y": 1},
|
||||
{"label": "E", "x": 3.5, "y": 1},
|
||||
{"label": "R", "x": 4.5, "y": 1},
|
||||
{"label": "T", "x": 5.5, "y": 1},
|
||||
{"label": "Y", "x": 6.5, "y": 1},
|
||||
{"label": "U", "x": 7.5, "y": 1},
|
||||
{"label": "I", "x": 8.5, "y": 1},
|
||||
{"label": "O", "x": 9.5, "y": 1},
|
||||
{"label": "P", "x": 10.5, "y": 1},
|
||||
{"label": "{", "x": 11.5, "y": 1},
|
||||
{"label": "}", "x": 12.5, "y": 1},
|
||||
{"label": "|", "x": 13.5, "y": 1, "w": 1.5},
|
||||
{"label": "Caps Lock", "x": 0, "y": 2, "w": 1.75},
|
||||
{"label": "A", "x": 1.75, "y": 2},
|
||||
{"label": "S", "x": 2.75, "y": 2},
|
||||
{"label": "D", "x": 3.75, "y": 2},
|
||||
{"label": "F", "x": 4.75, "y": 2},
|
||||
{"label": "G", "x": 5.75, "y": 2},
|
||||
{"label": "H", "x": 6.75, "y": 2},
|
||||
{"label": "J", "x": 7.75, "y": 2},
|
||||
{"label": "K", "x": 8.75, "y": 2},
|
||||
{"label": "L", "x": 9.75, "y": 2},
|
||||
{"label": ":", "x": 10.75, "y": 2},
|
||||
{"label": "\"", "x": 11.75, "y": 2},
|
||||
{"label": "Enter", "x": 12.75, "y": 2, "w": 2.25},
|
||||
{"label": "Shift", "x": 0, "y": 3, "w": 2},
|
||||
{"label": "Z", "x": 2, "y": 3},
|
||||
{"label": "X", "x": 3, "y": 3},
|
||||
{"label": "C", "x": 4, "y": 3},
|
||||
{"label": "V", "x": 5, "y": 3},
|
||||
{"label": "B", "x": 6, "y": 3},
|
||||
{"label": "N", "x": 7, "y": 3},
|
||||
{"label": "M", "x": 8, "y": 3},
|
||||
{"label": "<", "x": 9, "y": 3},
|
||||
{"label": ">", "x": 10, "y": 3},
|
||||
{"label": "?", "x": 11, "y": 3},
|
||||
{"label": "Shift", "x": 12, "y": 3},
|
||||
{"label": "Up", "x": 13, "y": 3},
|
||||
{"label": "Del", "x": 14, "y": 3},
|
||||
{"label": "Ctrl", "x": 0, "y": 4, "w": 1.75},
|
||||
{"label": "Win", "x": 1.75, "y": 4, "w": 1.25},
|
||||
{"label": "Alt", "x": 3, "y": 4, "w": 1.25},
|
||||
{"x": 4.25, "y": 4, "w": 1.25},
|
||||
{"x": 5.5, "y": 4, "w": 3},
|
||||
{"label": "Alt", "x": 8.5, "y": 4, "w": 1.25},
|
||||
{"label": "Ctrl", "x": 9.75, "y": 4, "w": 1.25},
|
||||
{"x": 11, "y": 4},
|
||||
{"label": "Left", "x": 12, "y": 4},
|
||||
{"label": "Down", "x": 13, "y": 4},
|
||||
{"label": "Right", "x": 14, "y": 4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
17
keyboards/ymdk/ymd67/keymaps/default/keymap.c
Normal file
17
keyboards/ymdk/ymd67/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,17 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[0] = LAYOUT(KC_ESC, 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_GRV, KC_BSPC,
|
||||
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_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_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_DEL,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, MO(1), KC_RALT, KC_RCTL, 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, KC_TRNS, KC_DEL,
|
||||
KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
|
||||
|
||||
};
|
5
keyboards/ymdk/ymd67/keymaps/default/readme.md
Normal file
5
keyboards/ymdk/ymd67/keymaps/default/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Default YMD67 layout
|
||||
|
||||

|
||||
|
||||
This is the default layout the keyboard comes with.
|
15
keyboards/ymdk/ymd67/readme.md
Normal file
15
keyboards/ymdk/ymd67/readme.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# YMD67
|
||||
|
||||

|
||||
|
||||
A low-profile minila keyboard kit by [YMDK](https://ymdk.aliexpress.com/store/429151?spm=2114.10010108.0.0.3ab23641lIkgzm). Available in multiple colors and has RGB side-lighting.
|
||||
|
||||
* Keyboard Maintainer: [Zach Shaftel](https://github.com/swiftlawngnome)
|
||||
* Hardware Supported: YMD67
|
||||
* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/4000311811121.html)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make ymdk/ymd67: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).
|
26
keyboards/ymdk/ymd67/rules.mk
Normal file
26
keyboards/ymdk/ymd67/rules.mk
Normal file
@@ -0,0 +1,26 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # 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 = yes # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no
|
||||
RGBLIGHT_ENABLE = yes
|
1
keyboards/ymdk/ymd67/ymd67.c
Normal file
1
keyboards/ymdk/ymd67/ymd67.c
Normal file
@@ -0,0 +1 @@
|
||||
#include "ymd67.h"
|
17
keyboards/ymdk/ymd67/ymd67.h
Normal file
17
keyboards/ymdk/ymd67/ymd67.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#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, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
|
||||
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
|
||||
K40, K41, K42, K43, K47, K48, K49, K4A, K4B, K4C, K4D \
|
||||
) { \
|
||||
{ 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, KC_NO }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
|
||||
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
|
||||
{ K40, K41, K42, K43, KC_NO, KC_NO, KC_NO, K47, K48, K49, K4A, K4B, K4C, K4D, KC_NO } \
|
||||
}
|
@@ -10,7 +10,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef BACKLIGHT_ON_STATE
|
||||
# define BACKLIGHT_ON_STATE 0
|
||||
# define BACKLIGHT_ON_STATE 1
|
||||
#endif
|
||||
|
||||
#ifdef BACKLIGHT_PINS
|
||||
@@ -20,6 +20,7 @@
|
||||
{ BACKLIGHT_PIN }
|
||||
#endif
|
||||
|
||||
static uint16_t s_duty_pattern = 0;
|
||||
static const pin_t backlight_pins[] = BACKLIGHT_PIN_INIT;
|
||||
#define BACKLIGHT_LED_COUNT (sizeof(backlight_pins) / sizeof(pin_t))
|
||||
|
||||
@@ -46,14 +47,38 @@ void backlight_off(pin_t backlight_pin) {
|
||||
}
|
||||
|
||||
void backlight_init_ports(void) {
|
||||
// Setup backlight pin as output and output to on state.
|
||||
FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);)
|
||||
// Setup backlight pin as output and output to off state.
|
||||
FOR_EACH_LED(setPinOutput(backlight_pin); backlight_off(backlight_pin);)
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
|
||||
/** \brief PWM duty patterns
|
||||
*
|
||||
* We scale the current backlight level to an index within this array. This allows
|
||||
* backlight_task to focus on just switching LEDs on/off, and we can predict the duty pattern
|
||||
*/
|
||||
static uint16_t backlight_duty_table[] = {
|
||||
0b0000000000000000,
|
||||
0b1000000000000000,
|
||||
0b1000000010000000,
|
||||
0b1000001000010000,
|
||||
0b1000100010001000,
|
||||
0b1001001001001000,
|
||||
0b1010101010101010,
|
||||
0b1110111011101110,
|
||||
0b1111111111111111,
|
||||
};
|
||||
#define backlight_duty_table_size (sizeof(backlight_duty_table) / sizeof(backlight_duty_table[0]))
|
||||
|
||||
// clang-format on
|
||||
|
||||
static uint8_t scale_backlight(uint8_t v) { return v * (backlight_duty_table_size - 1) / BACKLIGHT_LEVELS; }
|
||||
|
||||
void backlight_task(void) {
|
||||
static uint8_t backlight_tick = 0;
|
||||
|
||||
if ((0xFFFF >> (get_backlight_level() * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
|
||||
if (s_duty_pattern & ((uint16_t)1 << backlight_tick)) {
|
||||
FOR_EACH_LED(backlight_on(backlight_pin);)
|
||||
} else {
|
||||
FOR_EACH_LED(backlight_off(backlight_pin);)
|
||||
@@ -61,6 +86,4 @@ void backlight_task(void) {
|
||||
backlight_tick = (backlight_tick + 1) % 16;
|
||||
}
|
||||
|
||||
void backlight_set(uint8_t level) {
|
||||
// noop as backlight_task uses get_backlight_level()
|
||||
}
|
||||
void backlight_set(uint8_t level) { s_duty_pattern = backlight_duty_table[scale_backlight(level)]; }
|
||||
|
@@ -48,7 +48,7 @@ action_t action_for_key(uint8_t layer, keypos_t key) {
|
||||
// keycode remapping
|
||||
keycode = keycode_config(keycode);
|
||||
|
||||
action_t action;
|
||||
action_t action = {};
|
||||
uint8_t action_layer, when, mod;
|
||||
|
||||
switch (keycode) {
|
||||
|
@@ -33,9 +33,11 @@ bool waitForUsb(void) {
|
||||
wait_ms(100);
|
||||
}
|
||||
|
||||
#if defined(__AVR__)
|
||||
// Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow
|
||||
#if defined(__AVR__)
|
||||
(USBCON &= ~(_BV(USBE) | _BV(OTGPADE)));
|
||||
#else
|
||||
usbStop(&USBD1);
|
||||
#endif
|
||||
|
||||
return false;
|
||||
|
@@ -5,9 +5,7 @@ AUDIO_ENABLE = yes
|
||||
WS2812_DRIVER = bitbang
|
||||
|
||||
# Force task driven PWM until ARM can provide automatic configuration
|
||||
ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
|
||||
BACKLIGHT_ENABLE = software
|
||||
endif
|
||||
BACKLIGHT_DRIVER = software
|
||||
|
||||
# The rest of these settings shouldn't change
|
||||
|
||||
|
@@ -297,13 +297,14 @@ void keyboard_task(void) {
|
||||
}
|
||||
#endif
|
||||
if (debug_matrix) matrix_print();
|
||||
for (uint8_t c = 0; c < MATRIX_COLS; c++) {
|
||||
if (matrix_change & ((matrix_row_t)1 << c)) {
|
||||
matrix_row_t col_mask = 1;
|
||||
for (uint8_t c = 0; c < MATRIX_COLS; c++, col_mask <<= 1) {
|
||||
if (matrix_change & col_mask) {
|
||||
action_exec((keyevent_t){
|
||||
.key = (keypos_t){.row = r, .col = c}, .pressed = (matrix_row & ((matrix_row_t)1 << c)), .time = (timer_read() | 1) /* time should not be 0 */
|
||||
.key = (keypos_t){.row = r, .col = c}, .pressed = (matrix_row & col_mask), .time = (timer_read() | 1) /* time should not be 0 */
|
||||
});
|
||||
// record a processed key
|
||||
matrix_prev[r] ^= ((matrix_row_t)1 << c);
|
||||
matrix_prev[r] ^= col_mask;
|
||||
#ifdef QMK_KEYS_PER_SCAN
|
||||
// only jump out if we have processed "enough" keys.
|
||||
if (++keys_processed >= QMK_KEYS_PER_SCAN)
|
||||
|
@@ -15,6 +15,16 @@
|
||||
* GPL v2 or later.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Implementation notes:
|
||||
*
|
||||
* USBEndpointConfig - Configured using explicit order instead of struct member name.
|
||||
* This is due to ChibiOS hal LLD differences, which is dependent on hardware,
|
||||
* "USBv1" devices have `ep_buffers` and "OTGv1" have `in_multiplier`.
|
||||
* Given `USBv1/hal_usb_lld.h` marks the field as "not currently used" this code file
|
||||
* makes the assumption this is safe to avoid littering with preprocessor directives.
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
@@ -98,7 +108,7 @@ static const USBDescriptor *usb_get_descriptor_cb(USBDriver *usbp, uint8_t dtype
|
||||
#ifndef KEYBOARD_SHARED_EP
|
||||
/* keyboard endpoint state structure */
|
||||
static USBInEndpointState kbd_ep_state;
|
||||
/* keyboard endpoint initialization structure (IN) */
|
||||
/* keyboard endpoint initialization structure (IN) - see USBEndpointConfig comment at top of file */
|
||||
static const USBEndpointConfig kbd_ep_config = {
|
||||
USB_EP_MODE_TYPE_INTR, /* Interrupt EP */
|
||||
NULL, /* SETUP packet notification callback */
|
||||
@@ -117,7 +127,7 @@ static const USBEndpointConfig kbd_ep_config = {
|
||||
/* mouse endpoint state structure */
|
||||
static USBInEndpointState mouse_ep_state;
|
||||
|
||||
/* mouse endpoint initialization structure (IN) */
|
||||
/* mouse endpoint initialization structure (IN) - see USBEndpointConfig comment at top of file */
|
||||
static const USBEndpointConfig mouse_ep_config = {
|
||||
USB_EP_MODE_TYPE_INTR, /* Interrupt EP */
|
||||
NULL, /* SETUP packet notification callback */
|
||||
@@ -136,7 +146,7 @@ static const USBEndpointConfig mouse_ep_config = {
|
||||
/* shared endpoint state structure */
|
||||
static USBInEndpointState shared_ep_state;
|
||||
|
||||
/* shared endpoint initialization structure (IN) */
|
||||
/* shared endpoint initialization structure (IN) - see USBEndpointConfig comment at top of file */
|
||||
static const USBEndpointConfig shared_ep_config = {
|
||||
USB_EP_MODE_TYPE_INTR, /* Interrupt EP */
|
||||
NULL, /* SETUP packet notification callback */
|
||||
@@ -164,58 +174,62 @@ typedef struct {
|
||||
QMKUSBDriver driver;
|
||||
} usb_driver_config_t;
|
||||
|
||||
#define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \
|
||||
{ \
|
||||
.queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \
|
||||
.in_ep_config = {.ep_mode = stream##_IN_MODE, \
|
||||
.setup_cb = NULL, \
|
||||
.in_cb = qmkusbDataTransmitted, \
|
||||
.out_cb = NULL, \
|
||||
.in_maxsize = stream##_EPSIZE, \
|
||||
.out_maxsize = 0, /* The pointer to the states will be filled during initialization */ \
|
||||
.in_state = NULL, \
|
||||
.out_state = NULL, \
|
||||
.ep_buffers = 2, \
|
||||
.setup_buf = NULL}, \
|
||||
.out_ep_config = \
|
||||
{ \
|
||||
.ep_mode = stream##_OUT_MODE, \
|
||||
.setup_cb = NULL, \
|
||||
.in_cb = NULL, \
|
||||
.out_cb = qmkusbDataReceived, \
|
||||
.in_maxsize = 0, \
|
||||
.out_maxsize = stream##_EPSIZE, /* The pointer to the states will be filled during initialization */ \
|
||||
.in_state = NULL, \
|
||||
.out_state = NULL, \
|
||||
.ep_buffers = 2, \
|
||||
.setup_buf = NULL, \
|
||||
}, \
|
||||
.int_ep_config = \
|
||||
{ \
|
||||
.ep_mode = USB_EP_MODE_TYPE_INTR, \
|
||||
.setup_cb = NULL, \
|
||||
.in_cb = qmkusbInterruptTransmitted, \
|
||||
.out_cb = NULL, \
|
||||
.in_maxsize = CDC_NOTIFICATION_EPSIZE, \
|
||||
.out_maxsize = 0, /* The pointer to the states will be filled during initialization */ \
|
||||
.in_state = NULL, \
|
||||
.out_state = NULL, \
|
||||
.ep_buffers = 2, \
|
||||
.setup_buf = NULL, \
|
||||
}, \
|
||||
.config = { \
|
||||
.usbp = &USB_DRIVER, \
|
||||
.bulk_in = stream##_IN_EPNUM, \
|
||||
.bulk_out = stream##_OUT_EPNUM, \
|
||||
.int_in = notification, \
|
||||
.in_buffers = stream##_IN_CAPACITY, \
|
||||
.out_buffers = stream##_OUT_CAPACITY, \
|
||||
.in_size = stream##_EPSIZE, \
|
||||
.out_size = stream##_EPSIZE, \
|
||||
.fixed_size = fixedsize, \
|
||||
.ib = (uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \
|
||||
.ob = (uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \
|
||||
} \
|
||||
/* Reusable initialization structure - see USBEndpointConfig comment at top of file */
|
||||
#define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \
|
||||
{ \
|
||||
.queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \
|
||||
.in_ep_config = \
|
||||
{ \
|
||||
stream##_IN_MODE, /* Interrupt EP */ \
|
||||
NULL, /* SETUP packet notification callback */ \
|
||||
qmkusbDataTransmitted, /* IN notification callback */ \
|
||||
NULL, /* OUT notification callback */ \
|
||||
stream##_EPSIZE, /* IN maximum packet size */ \
|
||||
0, /* OUT maximum packet size */ \
|
||||
NULL, /* IN Endpoint state */ \
|
||||
NULL, /* OUT endpoint state */ \
|
||||
2, /* IN multiplier */ \
|
||||
NULL /* SETUP buffer (not a SETUP endpoint) */ \
|
||||
}, \
|
||||
.out_ep_config = \
|
||||
{ \
|
||||
stream##_OUT_MODE, /* Interrupt EP */ \
|
||||
NULL, /* SETUP packet notification callback */ \
|
||||
NULL, /* IN notification callback */ \
|
||||
qmkusbDataReceived, /* OUT notification callback */ \
|
||||
0, /* IN maximum packet size */ \
|
||||
stream##_EPSIZE, /* OUT maximum packet size */ \
|
||||
NULL, /* IN Endpoint state */ \
|
||||
NULL, /* OUT endpoint state */ \
|
||||
2, /* IN multiplier */ \
|
||||
NULL, /* SETUP buffer (not a SETUP endpoint) */ \
|
||||
}, \
|
||||
.int_ep_config = \
|
||||
{ \
|
||||
USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ \
|
||||
NULL, /* SETUP packet notification callback */ \
|
||||
qmkusbInterruptTransmitted, /* IN notification callback */ \
|
||||
NULL, /* OUT notification callback */ \
|
||||
CDC_NOTIFICATION_EPSIZE, /* IN maximum packet size */ \
|
||||
0, /* OUT maximum packet size */ \
|
||||
NULL, /* IN Endpoint state */ \
|
||||
NULL, /* OUT endpoint state */ \
|
||||
2, /* IN multiplier */ \
|
||||
NULL, /* SETUP buffer (not a SETUP endpoint) */ \
|
||||
}, \
|
||||
.config = { \
|
||||
.usbp = &USB_DRIVER, \
|
||||
.bulk_in = stream##_IN_EPNUM, \
|
||||
.bulk_out = stream##_OUT_EPNUM, \
|
||||
.int_in = notification, \
|
||||
.in_buffers = stream##_IN_CAPACITY, \
|
||||
.out_buffers = stream##_OUT_CAPACITY, \
|
||||
.in_size = stream##_EPSIZE, \
|
||||
.out_size = stream##_EPSIZE, \
|
||||
.fixed_size = fixedsize, \
|
||||
.ib = (uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \
|
||||
.ob = (uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \
|
||||
} \
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
@@ -68,7 +68,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
#endif
|
||||
|
||||
/* debug for signal timing, see debug pin with oscilloscope */
|
||||
#define SERIAL_SOFT_DEBUG
|
||||
#ifdef SERIAL_SOFT_DEBUG
|
||||
# define SERIAL_SOFT_DEBUG_INIT() (DDRD |= 1 << 7)
|
||||
# define SERIAL_SOFT_DEBUG_TGL() (PORTD ^= 1 << 7)
|
||||
@@ -169,7 +168,7 @@ void serial_send(uint8_t data) {
|
||||
/* detect edge of start bit */
|
||||
ISR(SERIAL_SOFT_RXD_VECT) {
|
||||
SERIAL_SOFT_DEBUG_TGL();
|
||||
SERIAL_SOFT_RXD_INT_ENTER()
|
||||
SERIAL_SOFT_RXD_INT_ENTER();
|
||||
|
||||
uint8_t data = 0;
|
||||
|
||||
|
Reference in New Issue
Block a user