Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f790948e5 | ||
|
|
a49d98e665 | ||
|
|
4f1f52b53b | ||
|
|
91a4a63ac7 | ||
|
|
039434caf9 | ||
|
|
bb5262de07 | ||
|
|
cb149650ef | ||
|
|
4446f86bfd | ||
|
|
306f23dc51 | ||
|
|
118d5cc03f | ||
|
|
8f02375cc6 | ||
|
|
155e9310ff | ||
|
|
9739d6ba0a | ||
|
|
161ffa0af6 | ||
|
|
02d44beb44 | ||
|
|
80dfd34fe4 | ||
|
|
8c3054777a | ||
|
|
6c6bbff600 | ||
|
|
641bbeb41a | ||
|
|
60f9abca12 | ||
|
|
25892301d4 | ||
|
|
1ae07f657a | ||
|
|
dd03ac3893 | ||
|
|
e83c62a002 | ||
|
|
48933811c5 | ||
|
|
119b02c540 | ||
|
|
388de9bc07 | ||
|
|
89b80b79d5 | ||
|
|
9e6ee47779 | ||
|
|
e8f730595c | ||
|
|
cc45f62d75 | ||
|
|
24b17c9619 | ||
|
|
ca39fa8222 | ||
|
|
2cef75cbb3 | ||
|
|
4e78d28b4b | ||
|
|
f6c0d999b9 | ||
|
|
baf69ee89d | ||
|
|
28fbf84cc5 | ||
|
|
8b6cdd1788 | ||
|
|
d46d304395 | ||
|
|
b11c332477 | ||
|
|
200ee8e797 | ||
|
|
7c63c0a950 | ||
|
|
a5a46f3d36 | ||
|
|
fb900e2ad1 | ||
|
|
930e1dfc4c | ||
|
|
cce19d265d | ||
|
|
a003be1e9c | ||
|
|
3bef186ea6 | ||
|
|
e5380795b9 | ||
|
|
4a5e68f4f2 | ||
|
|
e99615b2ac | ||
|
|
090c30212e | ||
|
|
753f57ee00 | ||
|
|
fd3b0787ed | ||
|
|
16302be5ad | ||
|
|
b8db0b26b1 | ||
|
|
614b3a0f7c | ||
|
|
11eaccdbce | ||
|
|
13ad650136 |
No files matched your search
+21
-20
@@ -1,28 +1,29 @@
|
|||||||
FROM debian:jessie
|
FROM debian
|
||||||
MAINTAINER Erik Dasque <[email protected]>
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install --no-install-recommends -y build-essential \
|
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
|
avr-libc \
|
||||||
|
avrdude \
|
||||||
|
binutils-arm-none-eabi \
|
||||||
|
binutils-avr \
|
||||||
|
build-essential \
|
||||||
|
dfu-programmer \
|
||||||
|
dfu-util \
|
||||||
gcc \
|
gcc \
|
||||||
|
gcc-arm-none-eabi \
|
||||||
|
gcc-avr \
|
||||||
|
git \
|
||||||
|
libnewlib-arm-none-eabi \
|
||||||
|
software-properties-common \
|
||||||
unzip \
|
unzip \
|
||||||
wget \
|
wget \
|
||||||
zip \
|
zip \
|
||||||
gcc-avr \
|
|
||||||
binutils-avr \
|
|
||||||
avr-libc \
|
|
||||||
dfu-programmer \
|
|
||||||
dfu-util \
|
|
||||||
gcc-arm-none-eabi \
|
|
||||||
binutils-arm-none-eabi \
|
|
||||||
libnewlib-arm-none-eabi \
|
|
||||||
git \
|
|
||||||
software-properties-common \
|
|
||||||
avrdude \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
ENV keyboard=ergodox
|
ENV KEYBOARD=ergodox_ez
|
||||||
ENV subproject=ez
|
ENV KEYMAP=default
|
||||||
ENV keymap=default
|
|
||||||
|
|
||||||
VOLUME /qmk
|
VOLUME /qmk_firmware
|
||||||
WORKDIR /qmk
|
WORKDIR /qmk_firmware
|
||||||
CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap}
|
COPY . .
|
||||||
|
|
||||||
|
CMD make $KEYBOARD:$KEYMAP
|
||||||
@@ -34,6 +34,10 @@ $(error MASTER does not have a valid value(left/right))
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef SKIP_VERSION
|
||||||
|
OPT_DEFS += -DSKIP_VERSION
|
||||||
|
endif
|
||||||
|
|
||||||
# Determine which subfolders exist.
|
# Determine which subfolders exist.
|
||||||
KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
|
KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
|
||||||
KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
|
KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
|
||||||
@@ -278,6 +282,7 @@ ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# # project specific files
|
# # project specific files
|
||||||
|
SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
|
||||||
SRC += $(KEYBOARD_SRC) \
|
SRC += $(KEYBOARD_SRC) \
|
||||||
$(KEYMAP_C) \
|
$(KEYMAP_C) \
|
||||||
$(QUANTUM_SRC)
|
$(QUANTUM_SRC)
|
||||||
@@ -296,6 +301,7 @@ include $(TMK_PATH)/protocol.mk
|
|||||||
include $(TMK_PATH)/common.mk
|
include $(TMK_PATH)/common.mk
|
||||||
include bootloader.mk
|
include bootloader.mk
|
||||||
|
|
||||||
|
SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
|
||||||
SRC += $(TMK_COMMON_SRC)
|
SRC += $(TMK_COMMON_SRC)
|
||||||
OPT_DEFS += $(TMK_COMMON_DEFS)
|
OPT_DEFS += $(TMK_COMMON_DEFS)
|
||||||
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
||||||
|
|||||||
+8
-3
@@ -263,9 +263,14 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
|
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
|
||||||
|
SERIAL_BACKWARD_COMPAT := $(wildcard $(QUANTUM_DIR)/split_common/serial_backward_compatibility.h)
|
||||||
|
ifneq ($(SERIAL_BACKWARD_COMPAT),)
|
||||||
|
CONFIG_H += $(SERIAL_BACKWARD_COMPAT)
|
||||||
|
# $(info CONFIG_H=$(CONFIG_H))
|
||||||
|
endif
|
||||||
OPT_DEFS += -DSPLIT_KEYBOARD
|
OPT_DEFS += -DSPLIT_KEYBOARD
|
||||||
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
|
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
|
||||||
$(QUANTUM_DIR)/split_common/split_util.c \
|
$(QUANTUM_DIR)/split_common/split_util.c
|
||||||
$(QUANTUM_DIR)/split_common/i2c.c \
|
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c
|
||||||
$(QUANTUM_DIR)/split_common/serial.c
|
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c
|
||||||
endif
|
endif
|
||||||
@@ -160,6 +160,8 @@ If you define these options you will enable the associated feature, which may in
|
|||||||
* Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature.
|
* Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature.
|
||||||
* `#define COMBO_TERM 200`
|
* `#define COMBO_TERM 200`
|
||||||
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
|
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
|
||||||
|
* `#define TAP_CODE_DELAY 100`
|
||||||
|
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
|
||||||
|
|
||||||
## RGB Light Configuration
|
## RGB Light Configuration
|
||||||
|
|
||||||
@@ -196,6 +198,9 @@ Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in yo
|
|||||||
* `#define USE_I2C`
|
* `#define USE_I2C`
|
||||||
* For using I2C instead of Serial (defaults to serial)
|
* For using I2C instead of Serial (defaults to serial)
|
||||||
|
|
||||||
|
* `#define SOFT_SERIAL_PIN D0`
|
||||||
|
* When using serial, define this. `D0` or `D1`,`D2`,`D3`,`E6`.
|
||||||
|
|
||||||
# The `rules.mk` File
|
# The `rules.mk` File
|
||||||
|
|
||||||
This is a [make](https://www.gnu.org/software/make/manual/make.html) file that is included by the top-level `Makefile`. It is used to set some information about the MCU that we will be compiling for as well as enabling and disabling certain features.
|
This is a [make](https://www.gnu.org/software/make/manual/make.html) file that is included by the top-level `Makefile`. It is used to set some information about the MCU that we will be compiling for as well as enabling and disabling certain features.
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ These allow you to combine a modifier with a keycode. When pressed, the keydown
|
|||||||
|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
|
|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
|
||||||
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|
||||||
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|
||||||
|`RALT(kc)`| |Hold Right Alt and press `kc` |
|
|`RALT(kc)`|`ALGR(kc)` |Hold Right Alt and press `kc` |
|
||||||
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|
||||||
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
|
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
|
||||||
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|
||||||
@@ -92,7 +92,7 @@ The modifiers this keycode and `OSM()` accept are prefixed with `MOD_`, not `KC_
|
|||||||
|`MOD_LGUI`|Left GUI (Windows/Command/Meta key) |
|
|`MOD_LGUI`|Left GUI (Windows/Command/Meta key) |
|
||||||
|`MOD_RCTL`|Right Control |
|
|`MOD_RCTL`|Right Control |
|
||||||
|`MOD_RSFT`|Right Shift |
|
|`MOD_RSFT`|Right Shift |
|
||||||
|`MOD_RALT`|Right Alt |
|
|`MOD_RALT`|Right Alt (AltGr) |
|
||||||
|`MOD_RGUI`|Right GUI (Windows/Command/Meta key) |
|
|`MOD_RGUI`|Right GUI (Windows/Command/Meta key) |
|
||||||
|`MOD_HYPR`|Hyper (Left Control, Shift, Alt and GUI)|
|
|`MOD_HYPR`|Hyper (Left Control, Shift, Alt and GUI)|
|
||||||
|`MOD_MEH` |Meh (Left Control, Shift, and Alt) |
|
|`MOD_MEH` |Meh (Left Control, Shift, and Alt) |
|
||||||
@@ -161,8 +161,13 @@ For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear
|
|||||||
|
|
||||||
!> If you're having issues with OSM translating over Remote Desktop Connection, this can be fixed by opening the settings, going to the "Local Resources" tap, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue and allow OSM to function properly over Remote Desktop.
|
!> If you're having issues with OSM translating over Remote Desktop Connection, this can be fixed by opening the settings, going to the "Local Resources" tap, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue and allow OSM to function properly over Remote Desktop.
|
||||||
|
|
||||||
|
# Tap-Hold Configuration Options
|
||||||
|
|
||||||
# Permissive Hold
|
While Tap-Hold options are fantastic, they are not without their issues. We have tried to configure them with reasonal defaults, but that may still cause issues for some people.
|
||||||
|
|
||||||
|
These options let you modify the behavior of the Tap-Hold keys.
|
||||||
|
|
||||||
|
## Permissive Hold
|
||||||
|
|
||||||
As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option:
|
As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option:
|
||||||
|
|
||||||
@@ -185,7 +190,7 @@ Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this wil
|
|||||||
|
|
||||||
?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
|
?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
|
||||||
|
|
||||||
# Ignore Mod Tap Interrupt
|
## Ignore Mod Tap Interrupt
|
||||||
|
|
||||||
To enable this setting, add this to your `config.h`:
|
To enable this setting, add this to your `config.h`:
|
||||||
|
|
||||||
@@ -211,7 +216,7 @@ Normally, this would send `X` (`SHIFT`+`x`). With `Ignore Mod Tap Interrupt` ena
|
|||||||
|
|
||||||
?> If you have `Permissive Hold` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
|
?> If you have `Permissive Hold` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
|
||||||
|
|
||||||
# Tapping Force Hold
|
## Tapping Force Hold
|
||||||
|
|
||||||
To enable `tapping force hold`, add the following to your `config.h`:
|
To enable `tapping force hold`, add the following to your `config.h`:
|
||||||
|
|
||||||
@@ -235,7 +240,7 @@ With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allo
|
|||||||
|
|
||||||
!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).
|
!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).
|
||||||
|
|
||||||
# Retro Tapping
|
## Retro Tapping
|
||||||
|
|
||||||
To enable `retro tapping`, add the following to your `config.h`:
|
To enable `retro tapping`, add the following to your `config.h`:
|
||||||
|
|
||||||
|
|||||||
@@ -61,9 +61,11 @@ It's advised that you wrap all audio features in `#ifdef AUDIO_ENABLE` / `#endif
|
|||||||
|
|
||||||
The available keycodes for audio are:
|
The available keycodes for audio are:
|
||||||
|
|
||||||
* `AU_ON` - Turn audio mode on
|
* `AU_ON` - Turn Audio Feature on
|
||||||
* `AU_OFF` - Turn audio mode off
|
* `AU_OFF` - Turn Audio Feature off
|
||||||
* `AU_TOG` - Toggle audio mode
|
* `AU_TOG` - Toggle Audio Feature state
|
||||||
|
|
||||||
|
!> These keycodes turn all of the audio functionality on and off. Turning it off means that audio feedback, audio clicky, music mode, etc. are disabled, completely.
|
||||||
|
|
||||||
## ARM Audio Volume
|
## ARM Audio Volume
|
||||||
|
|
||||||
@@ -158,7 +160,7 @@ You can configure the default, min and max frequencies, the stepping and built i
|
|||||||
|
|
||||||
## MIDI Functionality
|
## MIDI Functionality
|
||||||
|
|
||||||
This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
|
This is still a WIP, but check out `quantum/process_keycode/process_midi.c` to see what's happening. Enable from the Makefile.
|
||||||
|
|
||||||
|
|
||||||
## Audio Keycodes
|
## Audio Keycodes
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ and this to your `config.h`:
|
|||||||
Each PAD_A/B variable defines an array so multiple encoders can be defined, e.g.:
|
Each PAD_A/B variable defines an array so multiple encoders can be defined, e.g.:
|
||||||
|
|
||||||
#define ENCODERS_PAD_A { encoder1a, encoder2a }
|
#define ENCODERS_PAD_A { encoder1a, encoder2a }
|
||||||
#define ENCODERS_PAD_B { encoder1a, encoder2b }
|
#define ENCODERS_PAD_B { encoder1b, encoder2b }
|
||||||
|
|
||||||
If your encoder's clockwise directions are incorrect, you can swap the A & B pad definitions.
|
If your encoder's clockwise directions are incorrect, you can swap the A & B pad definitions.
|
||||||
|
|
||||||
|
|||||||
+90
-70
@@ -12,24 +12,28 @@ Here is an example `keymap.c` for a two-key keyboard:
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
MY_CUSTOM_MACRO = SAFE_RANGE
|
QMKBEST = SAFE_RANGE,
|
||||||
};
|
};
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
if (record->event.pressed) {
|
switch (keycode) {
|
||||||
switch(keycode) {
|
case QMKBEST:
|
||||||
case MY_CUSTOM_MACRO:
|
if (record->event.pressed) {
|
||||||
SEND_STRING("QMK is the best thing ever!"); // this is our macro!
|
// when keycode QMKBEST is pressed
|
||||||
return false;
|
SEND_STRING("QMK is the best thing ever!");
|
||||||
}
|
} else {
|
||||||
}
|
// when keycode QMKBEST is released
|
||||||
return true;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
{MY_CUSTOM_MACRO, KC_ESC}
|
{QMKBEST, KC_ESC}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -37,7 +41,7 @@ What happens here is this:
|
|||||||
We first define a new custom keycode in the range not occupied by any other keycodes.
|
We first define a new custom keycode in the range not occupied by any other keycodes.
|
||||||
Then we use the `process_record_user` function, which is called whenever a key is pressed or released, to check if our custom keycode has been activated.
|
Then we use the `process_record_user` function, which is called whenever a key is pressed or released, to check if our custom keycode has been activated.
|
||||||
If yes, we send the string `"QMK is the best thing ever!"` to the computer via the `SEND_STRING` macro (this is a C preprocessor macro, not to be confused with QMK macros).
|
If yes, we send the string `"QMK is the best thing ever!"` to the computer via the `SEND_STRING` macro (this is a C preprocessor macro, not to be confused with QMK macros).
|
||||||
We return `false` to indicate to the caller that the key press we just processed need not be processed any further.
|
We return `true` to indicate to the caller that the key press we just processed should continue to be processed as normal (as we didn't replace or alter the functionality).
|
||||||
Finally, we define the keymap so that the first button activates our macro and the second button is just an escape button.
|
Finally, we define the keymap so that the first button activates our macro and the second button is just an escape button.
|
||||||
|
|
||||||
You might want to add more than one macro.
|
You might want to add more than one macro.
|
||||||
@@ -45,28 +49,42 @@ You can do that by adding another keycode and adding another case to the switch
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
MY_CUSTOM_MACRO = SAFE_RANGE,
|
QMKBEST = SAFE_RANGE,
|
||||||
MY_OTHER_MACRO
|
QMKURL,
|
||||||
|
MY_OTHER_MACRO
|
||||||
};
|
};
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
if (record->event.pressed) {
|
switch (keycode) {
|
||||||
switch(keycode) {
|
case QMKBEST:
|
||||||
case MY_CUSTOM_MACRO:
|
if (record->event.pressed) {
|
||||||
SEND_STRING("QMK is the best thing ever!");
|
// when keycode QMKBEST is pressed
|
||||||
return false;
|
SEND_STRING("QMK is the best thing ever!");
|
||||||
case MY_OTHER_MACRO:
|
} else {
|
||||||
SEND_STRING(SS_LCTRL("ac")); // selects all and copies
|
// when keycode QMKBEST is released
|
||||||
return false;
|
}
|
||||||
}
|
break;
|
||||||
}
|
case QMKURL:
|
||||||
return true;
|
if (record->event.pressed) {
|
||||||
|
// when keycode QMKURL is pressed
|
||||||
|
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
|
||||||
|
} else {
|
||||||
|
// when keycode QMKURL is released
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MY_OTHER_MACRO:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING(SS_LCTRL("ac")); // selects all and copies
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
{MY_CUSTOM_MACRO, MY_OTHER_MACRO}
|
{MY_CUSTOM_MACRO, MY_OTHER_MACRO}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -136,21 +154,21 @@ By default QMK assumes you don't have any macros. To define your macros you crea
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case 0:
|
case 0:
|
||||||
return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
|
return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
|
||||||
case 1:
|
case 1:
|
||||||
return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
|
return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
This defines two macros which will be run when the key they are assigned to is pressed. If instead you'd like them to run when the key is released you can change the if statement:
|
This defines two macros which will be run when the key they are assigned to is pressed. If instead you'd like them to run when the key is released you can change the if statement:
|
||||||
|
|
||||||
if (!record->event.pressed) {
|
if (!record->event.pressed) {
|
||||||
|
|
||||||
### Macro Commands
|
### Macro Commands
|
||||||
|
|
||||||
@@ -169,21 +187,21 @@ Use the `M()` function within your `KEYMAP()` to call a macro. For example, here
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = KEYMAP(
|
[0] = KEYMAP(
|
||||||
M(0), M(1)
|
M(0), M(1)
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case 0:
|
case 0:
|
||||||
return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
|
return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
|
||||||
case 1:
|
case 1:
|
||||||
return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
|
return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -198,9 +216,9 @@ If you have a bunch of macros you want to refer to from your keymap while keepin
|
|||||||
#define M_BYE M(1)
|
#define M_BYE M(1)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = KEYMAP(
|
[0] = KEYMAP(
|
||||||
M_HI, M_BYE
|
M_HI, M_BYE
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -213,11 +231,11 @@ There are some functions you may find useful in macro-writing. Keep in mind that
|
|||||||
This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
|
This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
|
||||||
|
|
||||||
```c
|
```c
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
// on keydown
|
// on keydown
|
||||||
} else {
|
} else {
|
||||||
// on keyup
|
// on keyup
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### `register_code(<kc>);`
|
### `register_code(<kc>);`
|
||||||
@@ -232,6 +250,8 @@ Parallel to `register_code` function, this sends the `<kc>` keyup event to the c
|
|||||||
|
|
||||||
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
|
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
|
||||||
|
|
||||||
|
If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
|
||||||
|
|
||||||
### `clear_keyboard();`
|
### `clear_keyboard();`
|
||||||
|
|
||||||
This will clear all mods and keys currently pressed.
|
This will clear all mods and keys currently pressed.
|
||||||
@@ -250,16 +270,16 @@ This example defines a macro which sends `Ctrl-C` when pressed down, and `Ctrl-V
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case 0: {
|
case 0: {
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
return MACRO( D(LCTL), T(C), U(LCTL), END );
|
return MACRO( D(LCTL), T(C), U(LCTL), END );
|
||||||
} else {
|
} else {
|
||||||
return MACRO( D(LCTL), T(V), U(LCTL), END );
|
return MACRO( D(LCTL), T(V), U(LCTL), END );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
@@ -161,6 +161,24 @@ If you need to change your RGB lighting in code, for example in a macro to chang
|
|||||||
|`rgblight_sethsv(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 |
|
|`rgblight_sethsv(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 |
|
||||||
|`rgblight_sethsv_noeeprom(h, s, v)`|Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 (not written to EEPROM) |
|
|`rgblight_sethsv_noeeprom(h, s, v)`|Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 (not written to EEPROM) |
|
||||||
|`rgblight_sethsv_at(h, s, v, led)` |Set a single LED to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM)|
|
|`rgblight_sethsv_at(h, s, v, led)` |Set a single LED to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM)|
|
||||||
|
|`rgblight_toggle()` |Toggle all LEDs between on and off |
|
||||||
|
|`rgblight_toggle_noeeprom()` |Toggle all LEDs between on and off (not written to EEPROM) |
|
||||||
|
|`rgblight_step()` |Change the mode to the next RGB animation in the list of enabled RGB animations |
|
||||||
|
|`rgblight_step_noeeprom()` |Change the mode to the next RGB animation in the list of enabled RGB animations (not written to EEPROM) |
|
||||||
|
|`rgblight_step_reverse()` |Change the mode to the previous RGB animation in the list of enabled RGB animations |
|
||||||
|
|`rgblight_step_reverse_noeeprom()` |Change the mode to the previous RGB animation in the list of enabled RGB animations (not written to EEPROM) |
|
||||||
|
|`rgblight_increase_hue()` |Increase the hue for all LEDs. This wraps around at maximum hue |
|
||||||
|
|`rgblight_increase_hue_noeeprom()` |Increase the hue for all LEDs. This wraps around at maximum hue (not written to EEPROM) |
|
||||||
|
|`rgblight_decrease_hue()` |Decrease the hue for all LEDs. This wraps around at minimum hue |
|
||||||
|
|`rgblight_decrease_hue_noeeprom()` |Decrease the hue for all LEDs. This wraps around at minimum hue (not written to EEPROM) |
|
||||||
|
|`rgblight_increase_sat()` |Increase the saturation for all LEDs. This wraps around at maximum saturation |
|
||||||
|
|`rgblight_increase_sat_noeeprom()` |Increase the saturation for all LEDs. This wraps around at maximum saturation (not written to EEPROM) |
|
||||||
|
|`rgblight_decrease_sat()` |Decrease the saturation for all LEDs. This wraps around at minimum saturation |
|
||||||
|
|`rgblight_decrease_sat_noeeprom()` |Decrease the saturation for all LEDs. This wraps around at minimum saturation (not written to EEPROM) |
|
||||||
|
|`rgblight_increase_val()` |Increase the value for all LEDs. This wraps around at maximum value |
|
||||||
|
|`rgblight_increase_val_noeeprom()` |Increase the value for all LEDs. This wraps around at maximum value (not written to EEPROM) |
|
||||||
|
|`rgblight_decrease_val()` |Decrease the value for all LEDs. This wraps around at minimum value |
|
||||||
|
|`rgblight_decrease_val_noeeprom()` |Decrease the value for all LEDs. This wraps around at minimum value (not written to EEPROM) |
|
||||||
|
|
||||||
Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list!
|
Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list!
|
||||||
|
|
||||||
|
|||||||
@@ -185,29 +185,11 @@ Below is a specific example:
|
|||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
You will need a few things that can be used for 'Quad Function Tap-Dance'. The suggested setup is to create a user directory for yourself. This directory will contain rules.mk `<your_name>.c` and `<your_name>.h`. This directory should be called `<your_name>`, and located in the top level `users` directory. There should already be a few examples to look at there.
|
You will need a few things that can be used for 'Quad Function Tap-Dance'.
|
||||||
|
|
||||||
### In `/qmk_firmware/users/<your_name>/rules.mk`
|
You'll need to add these to the top of your `keymap.c` file, before your keymap.
|
||||||
|
|
||||||
Put the following:
|
|
||||||
```c
|
|
||||||
TAP_DANCE_ENABLE = yes
|
|
||||||
SRC += your_name.c
|
|
||||||
```
|
|
||||||
|
|
||||||
Pretty simple. It is a nice way to keep some rules common on all your keymaps.
|
|
||||||
|
|
||||||
|
|
||||||
### In `/qmk_firmware/users/<your_name>/<your_name>.h`
|
|
||||||
|
|
||||||
You will need a few things in this file:
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "quantum.h"
|
|
||||||
#include "process_keycode/process_tap_dance.h"
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool is_press_action;
|
bool is_press_action;
|
||||||
int state;
|
int state;
|
||||||
@@ -234,18 +216,12 @@ int cur_dance (qk_tap_dance_state_t *state);
|
|||||||
//for the x tap dance. Put it here so it can be used in any keymap
|
//for the x tap dance. Put it here so it can be used in any keymap
|
||||||
void x_finished (qk_tap_dance_state_t *state, void *user_data);
|
void x_finished (qk_tap_dance_state_t *state, void *user_data);
|
||||||
void x_reset (qk_tap_dance_state_t *state, void *user_data);
|
void x_reset (qk_tap_dance_state_t *state, void *user_data);
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### In `/qmk_firmware/users/<your_name>/<your_name>.c`
|
Now, at the bottom of your `keymap.c` file, you'll need to add the following:
|
||||||
|
|
||||||
And then in your user's `.c` file you implement the functions above:
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#include "<your_name>.h"
|
|
||||||
#include "quantum.h"
|
|
||||||
#include "action.h"
|
|
||||||
#include "process_keycode/process_tap_dance.h"
|
|
||||||
|
|
||||||
/* Return an integer that corresponds to what kind of tap dance should be executed.
|
/* Return an integer that corresponds to what kind of tap dance should be executed.
|
||||||
*
|
*
|
||||||
* How to figure out tap dance state: interrupted and pressed.
|
* How to figure out tap dance state: interrupted and pressed.
|
||||||
@@ -335,4 +311,6 @@ qk_tap_dance_action_t tap_dance_actions[] = {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
And then simply use `TD(X_CTL)` anywhere in your keymap after including `<your_name>.h`.
|
And then simply use `TD(X_CTL)` anywhere in your keymap.
|
||||||
|
|
||||||
|
If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace.
|
||||||
@@ -123,24 +123,27 @@ If you have trouble and want to ask for help, it is useful to generate a *Win_Ch
|
|||||||
|
|
||||||
## Docker
|
## Docker
|
||||||
|
|
||||||
If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following command at the root of the QMK folder to build a keyboard/keymap:
|
If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker CE](https://docs.docker.com/install/#supported-platforms), run the following command from the `qmk_firmware` directory to build a keyboard/keymap:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# You'll run this every time you want to build a keymap
|
util/docker_build.sh keyboard:keymap
|
||||||
# modify the keymap and keyboard assignment to compile what you want
|
# For example: util/docker_build.sh ergodox_ez:steno
|
||||||
# defaults are ergodox/default
|
```
|
||||||
|
This will compile the targeted keyboard/keymap and leave the resulting `.hex` or `.bin` file in the QMK directory for you to flash. If `:keymap` is omitted, the `default` keymap is used. Note that the parameter format is the same as when building with `make`.
|
||||||
|
|
||||||
docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware
|
You can also start the script without any parameters, in which case it will ask you to input the build parameters one by one, which you may find easier to use:
|
||||||
|
```bash
|
||||||
|
util/docker_build.sh
|
||||||
|
# Reads parameters as input (leave blank for defaults)
|
||||||
```
|
```
|
||||||
|
|
||||||
On Windows Docker seems to have issues with the VOLUME tag in Dockerfile, and `$('pwd')` won't print a Windows compliant path; use full path instead, like this:
|
There is also support for building _and_ flashing the keyboard straight from Docker by specifying the `target` as well:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -e keymap=default -e keyboard=ergodox_ez --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
|
util/docker_build.sh keyboard:keymap:target
|
||||||
|
# For example: util/docker_build.sh planck/rev6:default:dfu-util
|
||||||
```
|
```
|
||||||
|
If you're on Linux, this should work out of the box. On Windows and macOS, it requires [Docker Machine](http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos/) to be running. This is tedious to set up, so it's not recommended; use QMK Toolbox instead.
|
||||||
|
|
||||||
This will compile the targeted keyboard/keymap and leave it in your QMK directory for you to flash.
|
!> Docker for Windows requires [Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v) to be enabled. This means that it cannot work on versions of Windows which don't have Hyper-V, such as Windows 7, Windows 8 and **Windows 10 Home**.
|
||||||
|
|
||||||
## Vagrant
|
## Vagrant
|
||||||
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [vagrant guide](getting_started_vagrant.md).
|
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [vagrant guide](getting_started_vagrant.md).
|
||||||
+15
-26
@@ -177,7 +177,7 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
|
|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
|
||||||
|`KC_RCTRL` |`KC_RCTL` |Right Control |
|
|`KC_RCTRL` |`KC_RCTL` |Right Control |
|
||||||
|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
|
|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
|
||||||
|`KC_RALT` | |Right Alt |
|
|`KC_RALT` |`KC_ALGR` |Right Alt (AltGr) |
|
||||||
|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key) |
|
|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key) |
|
||||||
|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
|
|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
|
||||||
|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |
|
|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |
|
||||||
@@ -226,9 +226,9 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
|
|
||||||
|Key |Aliases |Description |
|
|Key |Aliases |Description |
|
||||||
|----------------|---------|----------------------------------|
|
|----------------|---------|----------------------------------|
|
||||||
|`AU_ON` | |Audio mode on |
|
|`AU_ON` | |Turns on Audio Feature |
|
||||||
|`AU_OFF` | |Audio mode off |
|
|`AU_OFF` | |Turns off Audio Feature |
|
||||||
|`AU_TOG` | |Toggles Audio mode |
|
|`AU_TOG` | |Toggles Audio state |
|
||||||
|`CLICKY_TOGGLE` |`CK_TOGG`|Toggles Audio clicky mode |
|
|`CLICKY_TOGGLE` |`CK_TOGG`|Toggles Audio clicky mode |
|
||||||
|`CLICKY_UP` |`CK_UP` |Increases frequency of the clicks |
|
|`CLICKY_UP` |`CK_UP` |Increases frequency of the clicks |
|
||||||
|`CLICKY_DOWN` |`CK_DOWN`|Decreases frequency of the clicks |
|
|`CLICKY_DOWN` |`CK_DOWN`|Decreases frequency of the clicks |
|
||||||
@@ -288,15 +288,16 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
|
|
||||||
## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
|
## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
|
||||||
|
|
||||||
|Key |Description |
|
|Key |Description |
|
||||||
|-----------------|---------------------------------------------------------------------|
|
|----------------|----------------------------------------------------------------------------------|
|
||||||
|`DF(layer)` |Switches the default layer |
|
|`DF(layer)` |Set the base (default) layer |
|
||||||
|`MO(layer)` |Momentarily activates layer, switches off when you let go |
|
|`MO(layer)` |Momentarily turn on `layer` when pressed (requires `KC_TRNS` on destination layer)|
|
||||||
|`LM(layer, mod)` |As `MO(layer)` but with `mod` active |
|
|`OSL(layer)` |Momentarily activates `layer` until a key is pressed. See [One Shot Keys](https://docs.qmk.fm/#/feature_advanced_keycodes?id=one-shot-keys) for details. |
|
||||||
|`LT(layer, kc)` |Momentarily activates layer if held, sends kc if tapped |
|
|`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well.
|
||||||
|`TG(layer)` |Toggles the layer (enables it if no active, and vise versa) |
|
|`LT(layer, kc)` |Turn on `layer` when held, `kc` when tapped |
|
||||||
|`TO(layer)` |Activates layer and deactivates all other layers |
|
|`TG(layer)` |Toggle `layer` on or off |
|
||||||
|`TT(layer)` |Momentarily activates layer if held, toggles it if tapped repeatedly |
|
|`TO(layer)` |Turn on `layer` when pressed |
|
||||||
|
|`TT(layer)` |Normally acts like MO unless it's tapped multiple times, which toggles `layer` on |
|
||||||
|
|
||||||
## [Mouse Keys](feature_mouse_keys.md)
|
## [Mouse Keys](feature_mouse_keys.md)
|
||||||
|
|
||||||
@@ -331,7 +332,7 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
|
|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
|
||||||
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|
||||||
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|
||||||
|`RALT(kc)`| |Hold Right Alt and press `kc` |
|
|`RALT(kc)`|`ALGR(kc)` |Hold Right Alt and press `kc` |
|
||||||
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|
||||||
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
|
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
|
||||||
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|
||||||
@@ -431,18 +432,6 @@ This is a reference only. Each group of keys links to the page documenting their
|
|||||||
|`KC_RIGHT_ANGLE_BRACKET`|`KC_RABK`, `KC_GT` |`>` |
|
|`KC_RIGHT_ANGLE_BRACKET`|`KC_RABK`, `KC_GT` |`>` |
|
||||||
|`KC_QUESTION` |`KC_QUES` |`?` |
|
|`KC_QUESTION` |`KC_QUES` |`?` |
|
||||||
|
|
||||||
## [Switching and Toggling Layers](feature_advanced_keycodes.md#switching-and-toggling-layers)
|
|
||||||
|
|
||||||
|Key |Description |
|
|
||||||
|----------------|----------------------------------------------------------------------------------|
|
|
||||||
|`LT(layer, kc)` |Turn on `layer` when held, `kc` when tapped |
|
|
||||||
|`TO(layer)` |Turn on `layer` when pressed |
|
|
||||||
|`MO(layer)` |Momentarily turn on `layer` when pressed (requires `KC_TRNS` on destination layer)|
|
|
||||||
|`DF(layer)` |Set the base (default) layer |
|
|
||||||
|`TG(layer)` |Toggle `layer` on or off |
|
|
||||||
|`TT(layer)` |Normally acts like MO unless it's tapped multiple times, which toggles `layer` on |
|
|
||||||
|`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well. |
|
|
||||||
|
|
||||||
## [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
|
## [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
|
||||||
|
|
||||||
|Key |Description |
|
|Key |Description |
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07
|
|||||||
|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
|
|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
|
||||||
|`KC_RCTRL` |`KC_RCTL` |Right Control |
|
|`KC_RCTRL` |`KC_RCTL` |Right Control |
|
||||||
|`KC_RSHIFT`|`KC_RSFT` |Right Shift |
|
|`KC_RSHIFT`|`KC_RSFT` |Right Shift |
|
||||||
|`KC_RALT` | |Right Alt |
|
|`KC_RALT` |`KC_ALGR` |Right Alt (AltGr) |
|
||||||
|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key)|
|
|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key)|
|
||||||
|
|
||||||
## International
|
## International
|
||||||
|
|||||||
+6
-2
@@ -6,13 +6,17 @@ Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built y
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
There are 5 main sections to this guide:
|
There are 6 main sections to this guide:
|
||||||
|
|
||||||
* [Getting Started](newbs_getting_started.md)
|
* [Getting Started](newbs_getting_started.md)
|
||||||
* [Building Your First Firmware](newbs_building_firmware.md)
|
* [Building Your First Firmware](newbs_building_firmware.md)
|
||||||
* [Flashing Firmware](newbs_flashing.md)
|
* [Flashing Firmware](newbs_flashing.md)
|
||||||
* [Testing and Debugging](newbs_testing_debugging.md)
|
* [Testing and Debugging](newbs_testing_debugging.md)
|
||||||
* [Best Practices](newbs_best_practices.md)
|
* [Git Best Practices](newbs_best_practices.md)
|
||||||
* [Learn More with these Resources](newbs_learn_more_resources.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).
|
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).
|
||||||
|
|
||||||
|
## Additional Resources
|
||||||
|
|
||||||
|
* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – A user-created blog covering the basics of how to use QMK Firmware, as seen from a new user's perspective.
|
||||||
@@ -27,6 +27,8 @@
|
|||||||
#define DESCRIPTION A split 50 key keyboard
|
#define DESCRIPTION A split 50 key keyboard
|
||||||
|
|
||||||
#define USE_SERIAL
|
#define USE_SERIAL
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
/* Select hand configuration */
|
/* Select hand configuration */
|
||||||
#define MASTER_LEFT
|
#define MASTER_LEFT
|
||||||
|
|||||||
@@ -28,6 +28,9 @@
|
|||||||
|
|
||||||
#define USE_SERIAL
|
#define USE_SERIAL
|
||||||
|
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
/* Select hand configuration */
|
/* Select hand configuration */
|
||||||
#define MASTER_LEFT
|
#define MASTER_LEFT
|
||||||
//#define MASTER_RIGHT
|
//#define MASTER_RIGHT
|
||||||
|
|||||||
@@ -28,6 +28,9 @@
|
|||||||
|
|
||||||
#define USE_SERIAL
|
#define USE_SERIAL
|
||||||
|
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
/* Select hand configuration */
|
/* Select hand configuration */
|
||||||
#define MASTER_LEFT
|
#define MASTER_LEFT
|
||||||
//#define MASTER_RIGHT
|
//#define MASTER_RIGHT
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "AT101 Blackheart PCB",
|
||||||
|
"keyboard_folder": "at101_blackheart",
|
||||||
|
"url": "https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html",
|
||||||
|
"maintainer": "qmk, blindassassin111",
|
||||||
|
"width": 22.5,
|
||||||
|
"height": 6.5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "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":"Print Screen", "x":15.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"Grave", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "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":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "y":1.5},
|
||||||
|
{"label":"Num Lock", "x":18.5, "y":1.5},
|
||||||
|
{"label":"Keypad /", "x":19.5, "y":1.5},
|
||||||
|
{"label":"Keypad *", "x":20.5, "y":1.5},
|
||||||
|
{"label":"Keypad -", "x":21.5, "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":"LBracket", "x":11.5, "y":2.5},
|
||||||
|
{"label":"RBracket]", "x":12.5, "y":2.5},
|
||||||
|
{"label":"Backslash", "x":13.5, "y":2.5, "w":1.5},
|
||||||
|
{"label":"Delete", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "y":2.5},
|
||||||
|
{"label":"Keypad 7", "x":18.5, "y":2.5},
|
||||||
|
{"label":"Keypad 8", "x":19.5, "y":2.5},
|
||||||
|
{"label":"Keypad 9", "x":20.5, "y":2.5},
|
||||||
|
{"label":"Keypad +", "x":21.5, "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":"Semicolon", "x":10.75, "y":3.5},
|
||||||
|
{"label":"Quote", "x":11.75, "y":3.5},
|
||||||
|
{"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
|
||||||
|
{"label":"Keypad 4", "x":18.5, "y":3.5},
|
||||||
|
{"label":"Keypad 5", "x":19.5, "y":3.5},
|
||||||
|
{"label":"Keypad 6", "x":20.5, "y":3.5},
|
||||||
|
{"label":"Keypad =", "x":21.5, "y":3.5},
|
||||||
|
{"label":"LShift", "x":0, "y":4.5, "w":1.25},
|
||||||
|
{"label":"ISO Backslash", "x":1.25, "y":4.5},
|
||||||
|
{"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":"Comma", "x":9.25, "y":4.5},
|
||||||
|
{"label":"Period", "x":10.25, "y":4.5},
|
||||||
|
{"label":"Slash", "x":11.25, "y":4.5},
|
||||||
|
{"label":"RShift", "x":12.25, "y":4.5, "w":1.75},
|
||||||
|
{"label":"Fn", "x":14, "y":4.5},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"Keypad 1", "x":18.5, "y":4.5},
|
||||||
|
{"label":"Keypad 2", "x":19.5, "y":4.5},
|
||||||
|
{"label":"Keypad 3", "x":20.5, "y":4.5},
|
||||||
|
{"label":"Keypad Enter", "x":21.5, "y":4.5, "h":2},
|
||||||
|
{"label":"LCtrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"LGUI", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"LAlt", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"RAlt", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"RGUI", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"RCtrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5},
|
||||||
|
{"label":"Keypad 0", "x":18.5, "y":5.5, "w":2},
|
||||||
|
{"label":"Keypad .", "x":20.5, "y":5.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
AT101 Blackheart PCB
|
# AT101 Blackheart PCB
|
||||||
===
|
|
||||||
|

|
||||||
|
|
||||||
A replacement PCB for AT101 keyboards.
|
A replacement PCB for AT101 keyboards.
|
||||||
|
|
||||||
@@ -11,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
|
|||||||
|
|
||||||
make at101_blackheart:default
|
make at101_blackheart:default
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
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).
|
||||||
+150
-13
@@ -1,16 +1,153 @@
|
|||||||
{
|
{
|
||||||
"keyboard_name": "Baguette",
|
"keyboard_name": "Baguette",
|
||||||
"url": "",
|
"url": "",
|
||||||
"maintainer": "qmk",
|
"maintainer": "qmk",
|
||||||
"bootloader": "atmel-dfu",
|
"bootloader": "atmel-dfu",
|
||||||
"width": 19.75,
|
"width": 16.5,
|
||||||
"height": 6.5,
|
"height": 5,
|
||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT_ansi": {
|
"LAYOUT_ansi": {
|
||||||
"layout": [{"label":"~", "x":3.25, "y":1.5}, {"label":"!", "x":4.25, "y":1.5}, {"label":"@", "x":5.25, "y":1.5}, {"label":"#", "x":6.25, "y":1.5}, {"label":"$", "x":7.25, "y":1.5}, {"label":"%", "x":8.25, "y":1.5}, {"label":"^", "x":9.25, "y":1.5}, {"label":"&", "x":10.25, "y":1.5}, {"label":"*", "x":11.25, "y":1.5}, {"label":"(", "x":12.25, "y":1.5}, {"label":")", "x":13.25, "y":1.5}, {"label":"_", "x":14.25, "y":1.5}, {"label":"+", "x":15.25, "y":1.5}, {"label":"|", "x":16.25, "y":1.5}, {"label":"Del", "x":17.25, "y":1.5}, {"label":"Insert", "x":18.75, "y":1.5}, {"label":"Tab", "x":3.25, "y":2.5, "w":1.5}, {"label":"Q", "x":4.75, "y":2.5}, {"label":"W", "x":5.75, "y":2.5}, {"label":"E", "x":6.75, "y":2.5}, {"label":"R", "x":7.75, "y":2.5}, {"label":"T", "x":8.75, "y":2.5}, {"label":"Y", "x":9.75, "y":2.5}, {"label":"U", "x":10.75, "y":2.5}, {"label":"I", "x":11.75, "y":2.5}, {"label":"O", "x":12.75, "y":2.5}, {"label":"P", "x":13.75, "y":2.5}, {"label":"{", "x":14.75, "y":2.5}, {"label":"}", "x":15.75, "y":2.5}, {"label":"|", "x":16.75, "y":2.5, "w":1.5}, {"label":"Delete", "x":18.75, "y":2.5}, {"label":"Control", "x":3.25, "y":3.5, "w":1.75}, {"label":"A", "x":5, "y":3.5}, {"label":"S", "x":6, "y":3.5}, {"label":"D", "x":7, "y":3.5}, {"label":"F", "x":8, "y":3.5}, {"label":"G", "x":9, "y":3.5}, {"label":"H", "x":10, "y":3.5}, {"label":"J", "x":11, "y":3.5}, {"label":"K", "x":12, "y":3.5}, {"label":"L", "x":13, "y":3.5}, {"label":":", "x":14, "y":3.5}, {"label":"\"", "x":15, "y":3.5}, {"label":"Enter", "x":16, "y":3.5, "w":2.25}, {"x":3.25, "y":4.5, "w":1.25}, {"x":4.5, "y":4.5}, {"label":"Z", "x":5.5, "y":4.5}, {"label":"X", "x":6.5, "y":4.5}, {"label":"C", "x":7.5, "y":4.5}, {"label":"V", "x":8.5, "y":4.5}, {"label":"B", "x":9.5, "y":4.5}, {"label":"N", "x":10.5, "y":4.5}, {"label":"M", "x":11.5, "y":4.5}, {"label":"<", "x":12.5, "y":4.5}, {"label":">", "x":13.5, "y":4.5}, {"label":"?", "x":14.5, "y":4.5}, {"x":15.5, "y":4.5}, {"label":"Shift", "x":16.5, "y":4.5, "w":1.25}, {"label":"\u2191", "x":17.75, "y":4.5}, {"label":"Win", "x":4.5, "y":5.5}, {"label":"Alt", "x":5.5, "y":5.5, "w":1.25}, {"x":6.75, "y":5.5, "w":6.25}, {"label":"Ctrl", "x":13, "y":5.5, "w":1.25}, {"label":"Fn", "x":14.25, "y":5.5}, {"label":"\u2190", "x":16.75, "y":5.5}, {"label":"\u2193", "x":17.75, "y":5.5}, {"label":"\u2192", "x":18.75, "y":5.5}]
|
"layout": [
|
||||||
},
|
{"label":"`", "x":0, "y":0},
|
||||||
"LAYOUT_iso": {
|
{"label":"1", "x":1, "y":0},
|
||||||
"layout": [{"label":"~", "x":3.25, "y":1.5}, {"label":"!", "x":4.25, "y":1.5}, {"label":"@", "x":5.25, "y":1.5}, {"label":"#", "x":6.25, "y":1.5}, {"label":"$", "x":7.25, "y":1.5}, {"label":"%", "x":8.25, "y":1.5}, {"label":"^", "x":9.25, "y":1.5}, {"label":"&", "x":10.25, "y":1.5}, {"label":"*", "x":11.25, "y":1.5}, {"label":"(", "x":12.25, "y":1.5}, {"label":")", "x":13.25, "y":1.5}, {"label":"_", "x":14.25, "y":1.5}, {"label":"+", "x":15.25, "y":1.5}, {"label":"|", "x":16.25, "y":1.5}, {"label":"Del", "x":17.25, "y":1.5}, {"label":"Insert", "x":18.75, "y":1.5}, {"label":"Tab", "x":3.25, "y":2.5, "w":1.5}, {"label":"Q", "x":4.75, "y":2.5}, {"label":"W", "x":5.75, "y":2.5}, {"label":"E", "x":6.75, "y":2.5}, {"label":"R", "x":7.75, "y":2.5}, {"label":"T", "x":8.75, "y":2.5}, {"label":"Y", "x":9.75, "y":2.5}, {"label":"U", "x":10.75, "y":2.5}, {"label":"I", "x":11.75, "y":2.5}, {"label":"O", "x":12.75, "y":2.5}, {"label":"P", "x":13.75, "y":2.5}, {"label":"{", "x":14.75, "y":2.5}, {"label":"}", "x":15.75, "y":2.5}, {"label":"Enter", "x":17, "y":2.5, "w":1.25, "h":2}, {"label":"Delete", "x":18.75, "y":2.5}, {"label":"Control", "x":3.25, "y":3.5, "w":1.75}, {"label":"A", "x":5, "y":3.5}, {"label":"S", "x":6, "y":3.5}, {"label":"D", "x":7, "y":3.5}, {"label":"F", "x":8, "y":3.5}, {"label":"G", "x":9, "y":3.5}, {"label":"H", "x":10, "y":3.5}, {"label":"J", "x":11, "y":3.5}, {"label":"K", "x":12, "y":3.5}, {"label":"L", "x":13, "y":3.5}, {"label":":", "x":14, "y":3.5}, {"label":"\"", "x":15, "y":3.5}, {"x":16, "y":3.5}, {"x":3.25, "y":4.5, "w":1.25}, {"x":4.5, "y":4.5}, {"label":"Z", "x":5.5, "y":4.5}, {"label":"X", "x":6.5, "y":4.5}, {"label":"C", "x":7.5, "y":4.5}, {"label":"V", "x":8.5, "y":4.5}, {"label":"B", "x":9.5, "y":4.5}, {"label":"N", "x":10.5, "y":4.5}, {"label":"M", "x":11.5, "y":4.5}, {"label":"<", "x":12.5, "y":4.5}, {"label":">", "x":13.5, "y":4.5}, {"label":"?", "x":14.5, "y":4.5}, {"x":15.5, "y":4.5}, {"label":"Shift", "x":16.5, "y":4.5, "w":1.25}, {"label":"\u2191", "x":17.75, "y":4.5}, {"label":"Win", "x":4.5, "y":5.5}, {"label":"Alt", "x":5.5, "y":5.5, "w":1.25}, {"x":6.75, "y":5.5, "w":6.25}, {"label":"Ctrl", "x":13, "y":5.5, "w":1.25}, {"label":"Fn", "x":14.25, "y":5.5}, {"label":"\u2190", "x":16.75, "y":5.5}, {"label":"\u2193", "x":17.75, "y":5.5}, {"label":"\u2192", "x":18.75, "y":5.5}]
|
{"label":"2", "x":2, "y":0},
|
||||||
}
|
{"label":"3", "x":3, "y":0},
|
||||||
|
{"label":"4", "x":4, "y":0},
|
||||||
|
{"label":"5", "x":5, "y":0},
|
||||||
|
{"label":"6", "x":6, "y":0},
|
||||||
|
{"label":"7", "x":7, "y":0},
|
||||||
|
{"label":"8", "x":8, "y":0},
|
||||||
|
{"label":"9", "x":9, "y":0},
|
||||||
|
{"label":"0", "x":10, "y":0},
|
||||||
|
{"label":"-", "x":11, "y":0},
|
||||||
|
{"label":"=", "x":12, "y":0},
|
||||||
|
{"label":"Backspace", "x":13, "y":0},
|
||||||
|
{"label":"Backspace2", "x":14, "y":0},
|
||||||
|
{"label":"Insert", "x":15.5, "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":"Delete", "x":15.5, "y":1},
|
||||||
|
{"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":1.25},
|
||||||
|
{"label":"ISO \\", "x":1.25, "y":3},
|
||||||
|
{"label":"Z", "x":2.25, "y":3},
|
||||||
|
{"label":"X", "x":3.25, "y":3},
|
||||||
|
{"label":"C", "x":4.25, "y":3},
|
||||||
|
{"label":"V", "x":5.25, "y":3},
|
||||||
|
{"label":"B", "x":6.25, "y":3},
|
||||||
|
{"label":"N", "x":7.25, "y":3},
|
||||||
|
{"label":"M", "x":8.25, "y":3},
|
||||||
|
{"label":",", "x":9.25, "y":3},
|
||||||
|
{"label":".", "x":10.25, "y":3},
|
||||||
|
{"label":"/", "x":11.25, "y":3},
|
||||||
|
{"label":"JP RO", "x":12.25, "y":3},
|
||||||
|
{"label":"Shift", "x":13.25, "y":3, "w":1.25},
|
||||||
|
{"label":"Up", "x":14.5, "y":3},
|
||||||
|
{"label":"GUI", "x":1.25, "y":4},
|
||||||
|
{"label":"Alt", "x":2.25, "y":4, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.5, "y":4, "w":6.25},
|
||||||
|
{"label":"Ctrl", "x":9.75, "y":4, "w":1.25},
|
||||||
|
{"label":"Fn", "x":11, "y":4},
|
||||||
|
{"label":"Left", "x":13.5, "y":4},
|
||||||
|
{"label":"Down", "x":14.5, "y":4},
|
||||||
|
{"label":"Right", "x":15.5, "y":4}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"LAYOUT_iso": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"`", "x":0, "y":0},
|
||||||
|
{"label":"1", "x":1, "y":0},
|
||||||
|
{"label":"2", "x":2, "y":0},
|
||||||
|
{"label":"3", "x":3, "y":0},
|
||||||
|
{"label":"4", "x":4, "y":0},
|
||||||
|
{"label":"5", "x":5, "y":0},
|
||||||
|
{"label":"6", "x":6, "y":0},
|
||||||
|
{"label":"7", "x":7, "y":0},
|
||||||
|
{"label":"8", "x":8, "y":0},
|
||||||
|
{"label":"9", "x":9, "y":0},
|
||||||
|
{"label":"0", "x":10, "y":0},
|
||||||
|
{"label":"-", "x":11, "y":0},
|
||||||
|
{"label":"=", "x":12, "y":0},
|
||||||
|
{"label":"Backspace", "x":13, "y":0},
|
||||||
|
{"label":"Backspace2", "x":14, "y":0},
|
||||||
|
{"label":"Insert", "x":15.5, "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":"Delete", "x":15.5, "y":1},
|
||||||
|
{"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":"ISO #", "x":12.75, "y":2},
|
||||||
|
{"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
|
||||||
|
{"label":"Shift", "x":0, "y":3, "w":1.25},
|
||||||
|
{"label":"ISO \\", "x":1.25, "y":3},
|
||||||
|
{"label":"Z", "x":2.25, "y":3},
|
||||||
|
{"label":"X", "x":3.25, "y":3},
|
||||||
|
{"label":"C", "x":4.25, "y":3},
|
||||||
|
{"label":"V", "x":5.25, "y":3},
|
||||||
|
{"label":"B", "x":6.25, "y":3},
|
||||||
|
{"label":"N", "x":7.25, "y":3},
|
||||||
|
{"label":"M", "x":8.25, "y":3},
|
||||||
|
{"label":",", "x":9.25, "y":3},
|
||||||
|
{"label":".", "x":10.25, "y":3},
|
||||||
|
{"label":"/", "x":11.25, "y":3},
|
||||||
|
{"label":"JP_RO", "x":12.25, "y":3},
|
||||||
|
{"label":"Shift", "x":13.25, "y":3, "w":1.25},
|
||||||
|
{"label":"Up", "x":14.5, "y":3},
|
||||||
|
{"label":"GUI", "x":1.25, "y":4},
|
||||||
|
{"label":"Alt", "x":2.25, "y":4, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.5, "y":4, "w":6.25},
|
||||||
|
{"label":"Ctrl", "x":9.75, "y":4, "w":1.25},
|
||||||
|
{"label":"Fn", "x":11, "y":4},
|
||||||
|
{"label":"Left", "x":13.5, "y":4},
|
||||||
|
{"label":"Down", "x":14.5, "y":4},
|
||||||
|
{"label":"Right", "x":15.5, "y":4}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Fredric Silberberg (333fred)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
// Long tapping term on the big switch, because it takes so long to press
|
||||||
|
#define TAPPING_TERM 500
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SINGLE_TAP, SINGLE_HOLD, DOUBLE, TRIPLE, QUAD
|
||||||
|
} tap_dance_state_enum;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
TD_KEY = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
static tap_dance_state_enum tap_dance_state;
|
||||||
|
static bool tap_dance_active = false;
|
||||||
|
static uint16_t timer;
|
||||||
|
|
||||||
|
void dance_cycle(bool override_timer) {
|
||||||
|
if (tap_dance_active)
|
||||||
|
{
|
||||||
|
if (timer_elapsed(timer) > 100 || override_timer)
|
||||||
|
{
|
||||||
|
switch (tap_dance_state)
|
||||||
|
{
|
||||||
|
case SINGLE_HOLD:
|
||||||
|
{
|
||||||
|
rgblight_increase_hue_noeeprom();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case DOUBLE:
|
||||||
|
{
|
||||||
|
rgblight_step_noeeprom();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TRIPLE:
|
||||||
|
{
|
||||||
|
rgblight_toggle_noeeprom();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Not needed
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
timer = timer_read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dance_finished(qk_tap_dance_state_t *state, void* user_data) {
|
||||||
|
// Determine the current state
|
||||||
|
switch (state->count)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
if (state->interrupted || state->pressed == 0) tap_dance_state = SINGLE_TAP;
|
||||||
|
else tap_dance_state = SINGLE_HOLD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
tap_dance_state = DOUBLE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
tap_dance_state = TRIPLE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
tap_dance_state = QUAD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (tap_dance_state)
|
||||||
|
{
|
||||||
|
case SINGLE_TAP:
|
||||||
|
{
|
||||||
|
// VS Build: CTRL+SHIFT+B
|
||||||
|
send_string_with_delay_P(PSTR(SS_DOWN(X_LCTRL) SS_DOWN(X_LSHIFT) "b" SS_UP(X_LSHIFT) SS_UP(X_LCTRL)), 10);
|
||||||
|
tap_dance_active = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SINGLE_HOLD:
|
||||||
|
case DOUBLE:
|
||||||
|
case TRIPLE:
|
||||||
|
{
|
||||||
|
// These are handled by the matrix_scan, which will register the appropriate rgb
|
||||||
|
// functions every scan
|
||||||
|
tap_dance_active = true;
|
||||||
|
timer = timer_read();
|
||||||
|
dance_cycle(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case QUAD:
|
||||||
|
{
|
||||||
|
// Reprogram
|
||||||
|
reset_keyboard();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dance_reset(qk_tap_dance_state_t *state, void* user_data)
|
||||||
|
{
|
||||||
|
tap_dance_active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[TD_KEY] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_finished, dance_reset)
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(TD(TD_KEY))
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
dance_cycle(false);
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# I'm not using things from my userpace in this one
|
||||||
|
USER_NAME = disable
|
||||||
|
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
@@ -37,6 +37,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
{ K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
|
{ K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_ansi( \
|
||||||
|
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
|
||||||
|
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
|
||||||
|
K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \
|
||||||
|
K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, K62, K72, K82, K92, \
|
||||||
|
K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
|
||||||
|
K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
|
||||||
|
){ \
|
||||||
|
{ K00, K10, K20, KC_NO, KC_NO, KC_NO, K60, KC_NO, K80, K90, KC_NO, KB0, KC0, KD0, KE0 }, \
|
||||||
|
{ K01, K11, K21, K31, K41, K51, K61, K71, K81, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
|
||||||
|
{ K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC_NO, KD2, KE2 }, \
|
||||||
|
{ K03, K13, K23, K33, K43, K53, K63, K73, K83, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
|
||||||
|
{ K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \
|
||||||
|
{ K05, KC_NO, K25, K35, K45, K55, K65, K75, K85, K95, KC_NO, KB5, KC5, KD5, KE5 }, \
|
||||||
|
{ K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
|
||||||
|
{ K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_iso( \
|
||||||
|
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
|
||||||
|
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
|
||||||
|
K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, K67, K63, K73, K83, \
|
||||||
|
K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \
|
||||||
|
K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
|
||||||
|
K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
|
||||||
|
){ \
|
||||||
|
{ K00, K10, K20, K30, KC_NO, KC_NO, K60, KC_NO, K80, K90, KC_NO, KB0, KC0, KD0, KE0 }, \
|
||||||
|
{ K01, K11, K21, K31, K41, K51, K61, K71, K81, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
|
||||||
|
{ K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, KD2, KE2 }, \
|
||||||
|
{ K03, K13, K23, K33, K43, K53, K63, K73, K83, KC_NO, KA3, KB3, KC3, KC_NO, KC_NO }, \
|
||||||
|
{ K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \
|
||||||
|
{ K05, KC_NO, K25, K35, K45, K55, K65, K75, K85, K95, KC_NO, KB5, KC5, KD5, KE5 }, \
|
||||||
|
{ K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
|
||||||
|
{ K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
|
||||||
|
}
|
||||||
|
|
||||||
#define LAYOUT_kc( \
|
#define LAYOUT_kc( \
|
||||||
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
|
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
|
||||||
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
|
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
|
||||||
|
|||||||
@@ -0,0 +1,340 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "winkeyless.kr B.mini EX",
|
||||||
|
"keyboard_folder": "bminiex",
|
||||||
|
"url": "https://winkeyless.kr/product/b-mini-ex-x2-pcb/",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 20.25,
|
||||||
|
"height": 6.25,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"ESC", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":1, "y":0},
|
||||||
|
{"label":"F2", "x":2, "y":0},
|
||||||
|
{"label":"F3", "x":3, "y":0},
|
||||||
|
{"label":"F4", "x":4, "y":0},
|
||||||
|
{"label":"F5", "x":5, "y":0},
|
||||||
|
{"label":"F6", "x":6, "y":0},
|
||||||
|
{"label":"F7", "x":7, "y":0},
|
||||||
|
{"label":"F8", "x":8, "y":0},
|
||||||
|
{"label":"F9", "x":9, "y":0},
|
||||||
|
{"label":"F10", "x":10, "y":0},
|
||||||
|
{"label":"F11", "x":11, "y":0},
|
||||||
|
{"label":"F12", "x":12, "y":0},
|
||||||
|
{"label":"PSCR", "x":13, "y":0},
|
||||||
|
{"label":"HOME", "x":14, "y":0},
|
||||||
|
{"label":"END", "x":15, "y":0},
|
||||||
|
{"label":"NO", "x":16.25, "y":0},
|
||||||
|
{"label":"NO", "x":17.25, "y":0},
|
||||||
|
{"label":"NO", "x":18.25, "y":0},
|
||||||
|
{"label":"NO", "x":19.25, "y":0},
|
||||||
|
{"label":"GRV", "x":0, "y":1.25},
|
||||||
|
{"label":"1", "x":1, "y":1.25},
|
||||||
|
{"label":"2", "x":2, "y":1.25},
|
||||||
|
{"label":"3", "x":3, "y":1.25},
|
||||||
|
{"label":"4", "x":4, "y":1.25},
|
||||||
|
{"label":"5", "x":5, "y":1.25},
|
||||||
|
{"label":"6", "x":6, "y":1.25},
|
||||||
|
{"label":"7", "x":7, "y":1.25},
|
||||||
|
{"label":"8", "x":8, "y":1.25},
|
||||||
|
{"label":"9", "x":9, "y":1.25},
|
||||||
|
{"label":"0", "x":10, "y":1.25},
|
||||||
|
{"label":"MINS", "x":11, "y":1.25},
|
||||||
|
{"label":"EQL", "x":12, "y":1.25},
|
||||||
|
{"label":"BSPC", "x":13, "y":1.25, "w":2},
|
||||||
|
{"label":"DEL", "x":15, "y":1.25},
|
||||||
|
{"label":"NLCK", "x":16.25, "y":1.25},
|
||||||
|
{"label":"PSLS", "x":17.25, "y":1.25},
|
||||||
|
{"label":"PAST", "x":18.25, "y":1.25},
|
||||||
|
{"label":"PMNS", "x":19.25, "y":1.25},
|
||||||
|
{"label":"TAB", "x":0, "y":2.25, "w":1.5},
|
||||||
|
{"label":"Q", "x":1.5, "y":2.25},
|
||||||
|
{"label":"W", "x":2.5, "y":2.25},
|
||||||
|
{"label":"E", "x":3.5, "y":2.25},
|
||||||
|
{"label":"R", "x":4.5, "y":2.25},
|
||||||
|
{"label":"T", "x":5.5, "y":2.25},
|
||||||
|
{"label":"Y", "x":6.5, "y":2.25},
|
||||||
|
{"label":"U", "x":7.5, "y":2.25},
|
||||||
|
{"label":"I", "x":8.5, "y":2.25},
|
||||||
|
{"label":"O", "x":9.5, "y":2.25},
|
||||||
|
{"label":"P", "x":10.5, "y":2.25},
|
||||||
|
{"label":"LBRC", "x":11.5, "y":2.25},
|
||||||
|
{"label":"RBRC", "x":12.5, "y":2.25},
|
||||||
|
{"label":"NO", "x":13.5, "y":2.25, "w":1.5},
|
||||||
|
{"label":"INS", "x":15, "y":2.25},
|
||||||
|
{"label":"P7", "x":16.25, "y":2.25},
|
||||||
|
{"label":"P8", "x":17.25, "y":2.25},
|
||||||
|
{"label":"P9", "x":18.25, "y":2.25},
|
||||||
|
{"label":"CAPS", "x":0, "y":3.25, "w":1.75},
|
||||||
|
{"label":"A", "x":1.75, "y":3.25},
|
||||||
|
{"label":"S", "x":2.75, "y":3.25},
|
||||||
|
{"label":"D", "x":3.75, "y":3.25},
|
||||||
|
{"label":"F", "x":4.75, "y":3.25},
|
||||||
|
{"label":"G", "x":5.75, "y":3.25},
|
||||||
|
{"label":"H", "x":6.75, "y":3.25},
|
||||||
|
{"label":"J", "x":7.75, "y":3.25},
|
||||||
|
{"label":"K", "x":8.75, "y":3.25},
|
||||||
|
{"label":"L", "x":9.75, "y":3.25},
|
||||||
|
{"label":"SCLN", "x":10.75, "y":3.25},
|
||||||
|
{"label":"QUOT", "x":11.75, "y":3.25},
|
||||||
|
{"label":"NUHS", "x":12.75, "y":3.25},
|
||||||
|
{"label":"ENT", "x":13.75, "y":3.25, "w":1.25},
|
||||||
|
{"label":"PGUP", "x":15, "y":3.25},
|
||||||
|
{"label":"P4", "x":16.25, "y":3.25},
|
||||||
|
{"label":"P5", "x":17.25, "y":3.25},
|
||||||
|
{"label":"P6", "x":18.25, "y":3.25},
|
||||||
|
{"label":"PPLS", "x":19.25, "y":2.25, "h":2},
|
||||||
|
{"label":"LSFT", "x":0, "y":4.25, "w":1.25},
|
||||||
|
{"label":"NUBS", "x":1.25, "y":4.25},
|
||||||
|
{"label":"Z", "x":2.25, "y":4.25},
|
||||||
|
{"label":"X", "x":3.25, "y":4.25},
|
||||||
|
{"label":"C", "x":4.25, "y":4.25},
|
||||||
|
{"label":"V", "x":5.25, "y":4.25},
|
||||||
|
{"label":"B", "x":6.25, "y":4.25},
|
||||||
|
{"label":"N", "x":7.25, "y":4.25},
|
||||||
|
{"label":"M", "x":8.25, "y":4.25},
|
||||||
|
{"label":"COMM", "x":9.25, "y":4.25},
|
||||||
|
{"label":"DOT", "x":10.25, "y":4.25},
|
||||||
|
{"label":"SLSH", "x":11.25, "y":4.25},
|
||||||
|
{"label":"RSFT", "x":12.25, "y":4.25, "w":1.75},
|
||||||
|
{"label":"UP", "x":14, "y":4.25},
|
||||||
|
{"label":"PGDN", "x":15, "y":4.25},
|
||||||
|
{"label":"P1", "x":16.25, "y":4.25},
|
||||||
|
{"label":"P2", "x":17.25, "y":4.25},
|
||||||
|
{"label":"P3", "x":18.25, "y":4.25},
|
||||||
|
{"label":"LCTL", "x":0, "y":5.25, "w":1.25},
|
||||||
|
{"label":"LGUI", "x":1.25, "y":5.25, "w":1.25},
|
||||||
|
{"label":"LALT", "x":2.5, "y":5.25, "w":1.25},
|
||||||
|
{"label":"SPC", "x":3.75, "y":5.25, "w":6.25},
|
||||||
|
{"label":"RALT", "x":10, "y":5.25},
|
||||||
|
{"label":"APP", "x":11, "y":5.25},
|
||||||
|
{"label":"RCTL", "x":12, "y":5.25},
|
||||||
|
{"label":"LEFT", "x":13, "y":5.25},
|
||||||
|
{"label":"DOWN", "x":14, "y":5.25},
|
||||||
|
{"label":"RGHT", "x":15, "y":5.25},
|
||||||
|
{"label":"P0", "x":16.25, "y":5.25, "w":2},
|
||||||
|
{"label":"PDOT", "x":18.25, "y":5.25},
|
||||||
|
{"label":"PENT", "x":19.25, "y":4.25, "h":2}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_ansi": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"ESC", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":1, "y":0},
|
||||||
|
{"label":"F2", "x":2, "y":0},
|
||||||
|
{"label":"F3", "x":3, "y":0},
|
||||||
|
{"label":"F4", "x":4, "y":0},
|
||||||
|
{"label":"F5", "x":5, "y":0},
|
||||||
|
{"label":"F6", "x":6, "y":0},
|
||||||
|
{"label":"F7", "x":7, "y":0},
|
||||||
|
{"label":"F8", "x":8, "y":0},
|
||||||
|
{"label":"F9", "x":9, "y":0},
|
||||||
|
{"label":"F10", "x":10, "y":0},
|
||||||
|
{"label":"F11", "x":11, "y":0},
|
||||||
|
{"label":"F12", "x":12, "y":0},
|
||||||
|
{"label":"PSCR", "x":13, "y":0},
|
||||||
|
{"label":"HOME", "x":14, "y":0},
|
||||||
|
{"label":"END", "x":15, "y":0},
|
||||||
|
{"label":"NO", "x":16.25, "y":0},
|
||||||
|
{"label":"NO", "x":17.25, "y":0},
|
||||||
|
{"label":"NO", "x":18.25, "y":0},
|
||||||
|
{"label":"NO", "x":19.25, "y":0},
|
||||||
|
{"label":"GRV", "x":0, "y":1.25},
|
||||||
|
{"label":"1", "x":1, "y":1.25},
|
||||||
|
{"label":"2", "x":2, "y":1.25},
|
||||||
|
{"label":"3", "x":3, "y":1.25},
|
||||||
|
{"label":"4", "x":4, "y":1.25},
|
||||||
|
{"label":"5", "x":5, "y":1.25},
|
||||||
|
{"label":"6", "x":6, "y":1.25},
|
||||||
|
{"label":"7", "x":7, "y":1.25},
|
||||||
|
{"label":"8", "x":8, "y":1.25},
|
||||||
|
{"label":"9", "x":9, "y":1.25},
|
||||||
|
{"label":"0", "x":10, "y":1.25},
|
||||||
|
{"label":"MINS", "x":11, "y":1.25},
|
||||||
|
{"label":"EQL", "x":12, "y":1.25},
|
||||||
|
{"label":"BSPC", "x":13, "y":1.25, "w":2},
|
||||||
|
{"label":"DEL", "x":15, "y":1.25},
|
||||||
|
{"label":"NLCK", "x":16.25, "y":1.25},
|
||||||
|
{"label":"PSLS", "x":17.25, "y":1.25},
|
||||||
|
{"label":"PAST", "x":18.25, "y":1.25},
|
||||||
|
{"label":"PMNS", "x":19.25, "y":1.25},
|
||||||
|
{"label":"TAB", "x":0, "y":2.25, "w":1.5},
|
||||||
|
{"label":"Q", "x":1.5, "y":2.25},
|
||||||
|
{"label":"W", "x":2.5, "y":2.25},
|
||||||
|
{"label":"E", "x":3.5, "y":2.25},
|
||||||
|
{"label":"R", "x":4.5, "y":2.25},
|
||||||
|
{"label":"T", "x":5.5, "y":2.25},
|
||||||
|
{"label":"Y", "x":6.5, "y":2.25},
|
||||||
|
{"label":"U", "x":7.5, "y":2.25},
|
||||||
|
{"label":"I", "x":8.5, "y":2.25},
|
||||||
|
{"label":"O", "x":9.5, "y":2.25},
|
||||||
|
{"label":"P", "x":10.5, "y":2.25},
|
||||||
|
{"label":"LBRC", "x":11.5, "y":2.25},
|
||||||
|
{"label":"RBRC", "x":12.5, "y":2.25},
|
||||||
|
{"label":"BSLS", "x":13.5, "y":2.25, "w":1.5},
|
||||||
|
{"label":"INS", "x":15, "y":2.25},
|
||||||
|
{"label":"P7", "x":16.25, "y":2.25},
|
||||||
|
{"label":"P8", "x":17.25, "y":2.25},
|
||||||
|
{"label":"P9", "x":18.25, "y":2.25},
|
||||||
|
{"label":"CAPS", "x":0, "y":3.25, "w":1.75},
|
||||||
|
{"label":"A", "x":1.75, "y":3.25},
|
||||||
|
{"label":"S", "x":2.75, "y":3.25},
|
||||||
|
{"label":"D", "x":3.75, "y":3.25},
|
||||||
|
{"label":"F", "x":4.75, "y":3.25},
|
||||||
|
{"label":"G", "x":5.75, "y":3.25},
|
||||||
|
{"label":"H", "x":6.75, "y":3.25},
|
||||||
|
{"label":"J", "x":7.75, "y":3.25},
|
||||||
|
{"label":"K", "x":8.75, "y":3.25},
|
||||||
|
{"label":"L", "x":9.75, "y":3.25},
|
||||||
|
{"label":"SCLN", "x":10.75, "y":3.25},
|
||||||
|
{"label":"QUOT", "x":11.75, "y":3.25},
|
||||||
|
{"label":"ENT", "x":12.75, "y":3.25, "w":2.25},
|
||||||
|
{"label":"PGUP", "x":15, "y":3.25},
|
||||||
|
{"label":"P4", "x":16.25, "y":3.25},
|
||||||
|
{"label":"P5", "x":17.25, "y":3.25},
|
||||||
|
{"label":"P6", "x":18.25, "y":3.25},
|
||||||
|
{"label":"PPLS", "x":19.25, "y":2.25, "h":2},
|
||||||
|
{"label":"LSFT", "x":0, "y":4.25, "w":2.25},
|
||||||
|
{"label":"Z", "x":2.25, "y":4.25},
|
||||||
|
{"label":"X", "x":3.25, "y":4.25},
|
||||||
|
{"label":"C", "x":4.25, "y":4.25},
|
||||||
|
{"label":"V", "x":5.25, "y":4.25},
|
||||||
|
{"label":"B", "x":6.25, "y":4.25},
|
||||||
|
{"label":"N", "x":7.25, "y":4.25},
|
||||||
|
{"label":"M", "x":8.25, "y":4.25},
|
||||||
|
{"label":"COMM", "x":9.25, "y":4.25},
|
||||||
|
{"label":"DOT", "x":10.25, "y":4.25},
|
||||||
|
{"label":"SLSH", "x":11.25, "y":4.25},
|
||||||
|
{"label":"RSFT", "x":12.25, "y":4.25, "w":1.75},
|
||||||
|
{"label":"UP", "x":14, "y":4.25},
|
||||||
|
{"label":"PGDN", "x":15, "y":4.25},
|
||||||
|
{"label":"P1", "x":16.25, "y":4.25},
|
||||||
|
{"label":"P2", "x":17.25, "y":4.25},
|
||||||
|
{"label":"P3", "x":18.25, "y":4.25},
|
||||||
|
{"label":"LCTL", "x":0, "y":5.25, "w":1.25},
|
||||||
|
{"label":"LGUI", "x":1.25, "y":5.25, "w":1.25},
|
||||||
|
{"label":"LALT", "x":2.5, "y":5.25, "w":1.25},
|
||||||
|
{"label":"SPC", "x":3.75, "y":5.25, "w":6.25},
|
||||||
|
{"label":"RALT", "x":10, "y":5.25},
|
||||||
|
{"label":"APP", "x":11, "y":5.25},
|
||||||
|
{"label":"RCTL", "x":12, "y":5.25},
|
||||||
|
{"label":"LEFT", "x":13, "y":5.25},
|
||||||
|
{"label":"DOWN", "x":14, "y":5.25},
|
||||||
|
{"label":"RGHT", "x":15, "y":5.25},
|
||||||
|
{"label":"P0", "x":16.25, "y":5.25, "w":2},
|
||||||
|
{"label":"PDOT", "x":18.25, "y":5.25},
|
||||||
|
{"label":"PENT", "x":19.25, "y":4.25, "h":2}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_iso": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"ESC", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":1, "y":0},
|
||||||
|
{"label":"F2", "x":2, "y":0},
|
||||||
|
{"label":"F3", "x":3, "y":0},
|
||||||
|
{"label":"F4", "x":4, "y":0},
|
||||||
|
{"label":"F5", "x":5, "y":0},
|
||||||
|
{"label":"F6", "x":6, "y":0},
|
||||||
|
{"label":"F7", "x":7, "y":0},
|
||||||
|
{"label":"F8", "x":8, "y":0},
|
||||||
|
{"label":"F9", "x":9, "y":0},
|
||||||
|
{"label":"F10", "x":10, "y":0},
|
||||||
|
{"label":"F11", "x":11, "y":0},
|
||||||
|
{"label":"F12", "x":12, "y":0},
|
||||||
|
{"label":"PSCR", "x":13, "y":0},
|
||||||
|
{"label":"HOME", "x":14, "y":0},
|
||||||
|
{"label":"END", "x":15, "y":0},
|
||||||
|
{"label":"NO", "x":16.25, "y":0},
|
||||||
|
{"label":"NO", "x":17.25, "y":0},
|
||||||
|
{"label":"NO", "x":18.25, "y":0},
|
||||||
|
{"label":"NO", "x":19.25, "y":0},
|
||||||
|
{"label":"GRV", "x":0, "y":1.25},
|
||||||
|
{"label":"1", "x":1, "y":1.25},
|
||||||
|
{"label":"2", "x":2, "y":1.25},
|
||||||
|
{"label":"3", "x":3, "y":1.25},
|
||||||
|
{"label":"4", "x":4, "y":1.25},
|
||||||
|
{"label":"5", "x":5, "y":1.25},
|
||||||
|
{"label":"6", "x":6, "y":1.25},
|
||||||
|
{"label":"7", "x":7, "y":1.25},
|
||||||
|
{"label":"8", "x":8, "y":1.25},
|
||||||
|
{"label":"9", "x":9, "y":1.25},
|
||||||
|
{"label":"0", "x":10, "y":1.25},
|
||||||
|
{"label":"MINS", "x":11, "y":1.25},
|
||||||
|
{"label":"EQL", "x":12, "y":1.25},
|
||||||
|
{"label":"BSPC", "x":13, "y":1.25, "w":2},
|
||||||
|
{"label":"DEL", "x":15, "y":1.25},
|
||||||
|
{"label":"NLCK", "x":16.25, "y":1.25},
|
||||||
|
{"label":"PSLS", "x":17.25, "y":1.25},
|
||||||
|
{"label":"PAST", "x":18.25, "y":1.25},
|
||||||
|
{"label":"PMNS", "x":19.25, "y":1.25},
|
||||||
|
{"label":"TAB", "x":0, "y":2.25, "w":1.5},
|
||||||
|
{"label":"Q", "x":1.5, "y":2.25},
|
||||||
|
{"label":"W", "x":2.5, "y":2.25},
|
||||||
|
{"label":"E", "x":3.5, "y":2.25},
|
||||||
|
{"label":"R", "x":4.5, "y":2.25},
|
||||||
|
{"label":"T", "x":5.5, "y":2.25},
|
||||||
|
{"label":"Y", "x":6.5, "y":2.25},
|
||||||
|
{"label":"U", "x":7.5, "y":2.25},
|
||||||
|
{"label":"I", "x":8.5, "y":2.25},
|
||||||
|
{"label":"O", "x":9.5, "y":2.25},
|
||||||
|
{"label":"P", "x":10.5, "y":2.25},
|
||||||
|
{"label":"LBRC", "x":11.5, "y":2.25},
|
||||||
|
{"label":"RBRC", "x":12.5, "y":2.25},
|
||||||
|
{"label":"INS", "x":15, "y":2.25},
|
||||||
|
{"label":"P7", "x":16.25, "y":2.25},
|
||||||
|
{"label":"P8", "x":17.25, "y":2.25},
|
||||||
|
{"label":"P9", "x":18.25, "y":2.25},
|
||||||
|
{"label":"CAPS", "x":0, "y":3.25, "w":1.75},
|
||||||
|
{"label":"A", "x":1.75, "y":3.25},
|
||||||
|
{"label":"S", "x":2.75, "y":3.25},
|
||||||
|
{"label":"D", "x":3.75, "y":3.25},
|
||||||
|
{"label":"F", "x":4.75, "y":3.25},
|
||||||
|
{"label":"G", "x":5.75, "y":3.25},
|
||||||
|
{"label":"H", "x":6.75, "y":3.25},
|
||||||
|
{"label":"J", "x":7.75, "y":3.25},
|
||||||
|
{"label":"K", "x":8.75, "y":3.25},
|
||||||
|
{"label":"L", "x":9.75, "y":3.25},
|
||||||
|
{"label":"SCLN", "x":10.75, "y":3.25},
|
||||||
|
{"label":"QUOT", "x":11.75, "y":3.25},
|
||||||
|
{"label":"NUHS", "x":12.75, "y":3.25},
|
||||||
|
{"label":"ENT", "x":13.75, "y":2.25, "w":1.25, "h":2},
|
||||||
|
{"label":"PGUP", "x":15, "y":3.25},
|
||||||
|
{"label":"P4", "x":16.25, "y":3.25},
|
||||||
|
{"label":"P5", "x":17.25, "y":3.25},
|
||||||
|
{"label":"P6", "x":18.25, "y":3.25},
|
||||||
|
{"label":"PPLS", "x":19.25, "y":2.25, "h":2},
|
||||||
|
{"label":"LSFT", "x":0, "y":4.25, "w":1.25},
|
||||||
|
{"label":"NUBS", "x":1.25, "y":4.25},
|
||||||
|
{"label":"Z", "x":2.25, "y":4.25},
|
||||||
|
{"label":"X", "x":3.25, "y":4.25},
|
||||||
|
{"label":"C", "x":4.25, "y":4.25},
|
||||||
|
{"label":"V", "x":5.25, "y":4.25},
|
||||||
|
{"label":"B", "x":6.25, "y":4.25},
|
||||||
|
{"label":"N", "x":7.25, "y":4.25},
|
||||||
|
{"label":"M", "x":8.25, "y":4.25},
|
||||||
|
{"label":"COMM", "x":9.25, "y":4.25},
|
||||||
|
{"label":"DOT", "x":10.25, "y":4.25},
|
||||||
|
{"label":"SLSH", "x":11.25, "y":4.25},
|
||||||
|
{"label":"RSFT", "x":12.25, "y":4.25, "w":1.75},
|
||||||
|
{"label":"UP", "x":14, "y":4.25},
|
||||||
|
{"label":"PGDN", "x":15, "y":4.25},
|
||||||
|
{"label":"P1", "x":16.25, "y":4.25},
|
||||||
|
{"label":"P2", "x":17.25, "y":4.25},
|
||||||
|
{"label":"P3", "x":18.25, "y":4.25},
|
||||||
|
{"label":"LCTL", "x":0, "y":5.25, "w":1.25},
|
||||||
|
{"label":"LGUI", "x":1.25, "y":5.25, "w":1.25},
|
||||||
|
{"label":"LALT", "x":2.5, "y":5.25, "w":1.25},
|
||||||
|
{"label":"SPC", "x":3.75, "y":5.25, "w":6.25},
|
||||||
|
{"label":"RALT", "x":10, "y":5.25},
|
||||||
|
{"label":"APP", "x":11, "y":5.25},
|
||||||
|
{"label":"RCTL", "x":12, "y":5.25},
|
||||||
|
{"label":"LEFT", "x":13, "y":5.25},
|
||||||
|
{"label":"DOWN", "x":14, "y":5.25},
|
||||||
|
{"label":"RGHT", "x":15, "y":5.25},
|
||||||
|
{"label":"P0", "x":16.25, "y":5.25, "w":2},
|
||||||
|
{"label":"PDOT", "x":18.25, "y":5.25},
|
||||||
|
{"label":"PENT", "x":19.25, "y":4.25, "h":2}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.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
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_ansi(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
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_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||||
|
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_INS, KC_P7, KC_P8, KC_P9, \
|
||||||
|
KC_LCAP, 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_PGUP, 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_PGDN, KC_P1, KC_P2, KC_P3, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# ansi
|
||||||
|
|
||||||
|
An ANSI-layout keymap based on the default.
|
||||||
|
|
||||||
|
,-------------------------------------------------------------------------------.
|
||||||
|
|Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|PSc|Hm |End|NO |NO |NO |NO |
|
||||||
|
|-------------------------------------------------------------------------------|
|
||||||
|
|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Bksp |Del|NLck|P/|P* |P- |
|
||||||
|
|-------------------------------------------------------------------------------|
|
||||||
|
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Ins|P7 |P8 |P9 | |
|
||||||
|
|---------------------------------------------------------------------------|P+ |
|
||||||
|
|CapsLk|A |S |D |F |G |H |J |K |L |; |' |Enter |PgU|P4 |P5 |P6 | |
|
||||||
|
|-------------------------------------------------------------------------------|
|
||||||
|
|Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|P1 |P2 |P3 | |
|
||||||
|
|---------------------------------------------------------------------------|Ent|
|
||||||
|
|Ctrl|GUI |Alt |Space |Alt|App|Ctl|Lft|Dwn|Rgt|P0 |P. | |
|
||||||
|
`-------------------------------------------------------------------------------'
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.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
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_iso(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, \
|
||||||
|
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_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||||
|
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_INS, KC_P7, KC_P8, KC_P9, \
|
||||||
|
KC_LCAP, 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_PGUP, KC_P4, KC_P5, KC_P6, KC_PPLS, \
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, \
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# iso
|
||||||
|
|
||||||
|
An ISO-layout keymap based on the default.
|
||||||
|
|
||||||
|
,-------------------------------------------------------------------------------.
|
||||||
|
|Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|PSc|Hm |End|NO |NO |NO |NO |
|
||||||
|
|-------------------------------------------------------------------------------|
|
||||||
|
|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Bksp |Del|NLck|P/|P* |P- |
|
||||||
|
|-------------------------------------------------------------------------------|
|
||||||
|
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] | |Ins|P7 |P8 |P9 | |
|
||||||
|
|------------------------------------------------------.Ent |---------------|P+ |
|
||||||
|
|CapsLk|A |S |D |F |G |H |J |K |L |; |' |# | |PgU|P4 |P5 |P6 | |
|
||||||
|
|-------------------------------------------------------------------------------|
|
||||||
|
|Sft |\ |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|P1 |P2 |P3 | |
|
||||||
|
|---------------------------------------------------------------------------|Ent|
|
||||||
|
|Ctrl|GUI |Alt |Space |Alt|App|Ctl|Lft|Dwn|Rgt|P0 |P. | |
|
||||||
|
`-------------------------------------------------------------------------------'
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
#ifndef FROSTY_FLAKE_H
|
#pragma once
|
||||||
#define FROSTY_FLAKE_H
|
|
||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
@@ -26,7 +25,7 @@
|
|||||||
| A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
|
| A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
|
||||||
`-------------------------------------------------------------------------' `--------------' `-------------------'
|
`-------------------------------------------------------------------------' `--------------' `-------------------'
|
||||||
*/
|
*/
|
||||||
#define KEYMAP( \
|
#define LAYOUT( \
|
||||||
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
||||||
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
|
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
|
||||||
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
|
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
|
||||||
@@ -66,7 +65,7 @@
|
|||||||
`-------------------------------------------------------------------------' `--------------'
|
`-------------------------------------------------------------------------' `--------------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define KEYMAP_TKL( \
|
#define LAYOUT_tkl( \
|
||||||
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
||||||
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
|
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
|
||||||
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
|
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
|
||||||
@@ -94,7 +93,7 @@
|
|||||||
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
|
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
|
||||||
KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
|
KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
|
||||||
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
|
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
|
||||||
) KEYMAP_TKL( \
|
) LAYOUT_tkl( \
|
||||||
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
|
||||||
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
|
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
|
||||||
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
|
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
|
||||||
@@ -103,4 +102,3 @@
|
|||||||
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
|
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
|
||||||
)
|
)
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,301 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Frosty Flake",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 22.5,
|
||||||
|
"height": 6.5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "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":"Print Screen", "x":15.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"`", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "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":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "y":1.5},
|
||||||
|
{"label":"Num Lock", "x":18.5, "y":1.5},
|
||||||
|
{"label":"/", "x":19.5, "y":1.5},
|
||||||
|
{"label":"*", "x":20.5, "y":1.5},
|
||||||
|
{"label":"-", "x":21.5, "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":"Delete", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "y":2.5},
|
||||||
|
{"label":"7", "x":18.5, "y":2.5},
|
||||||
|
{"label":"8", "x":19.5, "y":2.5},
|
||||||
|
{"label":"9", "x":20.5, "y":2.5},
|
||||||
|
{"label":"+", "x":21.5, "y":2.5, "h":2},
|
||||||
|
{"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":18.5, "y":3.5},
|
||||||
|
{"label":"5", "x":19.5, "y":3.5},
|
||||||
|
{"label":"6", "x":20.5, "y":3.5},
|
||||||
|
{"label":"Shift", "x":0, "y":4.5, "w":1.25},
|
||||||
|
{"label":"ISO \\", "x":1.25, "y":4.5},
|
||||||
|
{"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":2.75},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"1", "x":18.5, "y":4.5},
|
||||||
|
{"label":"2", "x":19.5, "y":4.5},
|
||||||
|
{"label":"3", "x":20.5, "y":4.5},
|
||||||
|
{"label":"Enter", "x":21.5, "y":4.5, "h":2},
|
||||||
|
{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"Alt", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5},
|
||||||
|
{"label":"0", "x":18.5, "y":5.5, "w":2},
|
||||||
|
{"label":".", "x":20.5, "y":5.5}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_tkl": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "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":"Print Screen", "x":15.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"`", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "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":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "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":"Delete", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "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":"Shift", "x":0, "y":4.5, "w":1.25},
|
||||||
|
{"label":"ISO \\", "x":1.25, "y":4.5},
|
||||||
|
{"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":2.75},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"Alt", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_tkl_ansi": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "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":"Print Screen", "x":15.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"`", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "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":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "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":"Delete", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "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":"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":2.75},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"Alt", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
#define TAPPING_TERM 150 //reduce time required to register a held key
|
|
||||||
|
|
||||||
#ifndef CONFIG_USER_H
|
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
// place overrides here
|
// place overrides here
|
||||||
|
#define TAPPING_TERM 150 //reduce time required to register a held key
|
||||||
#endif
|
|
||||||
@@ -1,9 +1,4 @@
|
|||||||
#include "frosty_flake.h"
|
#include QMK_KEYBOARD_H
|
||||||
#include "action_layer.h"
|
|
||||||
#ifdef AUDIO_ENABLE
|
|
||||||
#include "audio.h"
|
|
||||||
#endif
|
|
||||||
#include "eeconfig.h"
|
|
||||||
|
|
||||||
enum QFR_layers {
|
enum QFR_layers {
|
||||||
_COLEMAK,
|
_COLEMAK,
|
||||||
@@ -27,7 +22,7 @@ enum custom_macros {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5
|
const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5
|
||||||
[0] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), //Hold for momentary Lower layer, Tap for Space,
|
[0] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), //Hold for momentary Lower layer, Tap for Space,
|
||||||
[1] = ACTION_LAYER_MOMENTARY(_MOUSE) //Hold for momentary MOUSE
|
[1] = ACTION_LAYER_MOMENTARY(_MOUSE) //Hold for momentary MOUSE
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -37,12 +32,8 @@ enum custom_macros {
|
|||||||
#define PIPE M(R_PIPE)
|
#define PIPE M(R_PIPE)
|
||||||
#define POINT M(R_POINT)
|
#define POINT M(R_POINT)
|
||||||
|
|
||||||
// Fillers to make layering more clear
|
|
||||||
#define _______ KC_TRNS
|
|
||||||
#define XXXXXXX KC_NO
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_COLEMAK] = KEYMAP_TKL(\
|
[_COLEMAK] = LAYOUT_tkl(\
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
|
||||||
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_INS, KC_HOME,KC_PGUP, \
|
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_INS, KC_HOME,KC_PGUP, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
||||||
@@ -51,25 +42,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_LCTL,KC_LGUI, KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
|
KC_LCTL,KC_LGUI, KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
|
||||||
),
|
),
|
||||||
|
|
||||||
[_QWERTY] = KEYMAP_TKL(\
|
[_QWERTY] = LAYOUT_tkl(\
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
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_INS, KC_HOME, KC_PGUP, \
|
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_INS, KC_HOME, 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_DEL, KC_END, KC_PGDN, \
|
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_ENT, \
|
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_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_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, SPC_LW, MSE, KC_RGUI , KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI , KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
),
|
),
|
||||||
|
|
||||||
[_DVORAK] = KEYMAP_TKL(\
|
[_DVORAK] = LAYOUT_tkl(\
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
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_INS, KC_HOME, KC_PGUP, \
|
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_INS, KC_HOME, KC_PGUP, \
|
||||||
KC_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
KC_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
||||||
KC_BSPC,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_QUOT, KC_ENT, \
|
KC_BSPC,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_QUOT, KC_ENT, \
|
||||||
KC_LSFT,KC_NUBS,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
|
KC_LSFT,KC_NUBS,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
|
||||||
KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
),
|
),
|
||||||
|
|
||||||
[_LOWER] = KEYMAP_TKL(\
|
[_LOWER] = LAYOUT_tkl(\
|
||||||
RESET, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, _______, KC_MUTE, KC_VOLD, KC_VOLU, QWERTY, COLEMAK,DVORAK, \
|
RESET, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, _______, KC_MUTE, KC_VOLD, KC_VOLU, QWERTY, COLEMAK,DVORAK, \
|
||||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_BSPC, _______,_______,_______, \
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_BSPC, _______,_______,_______, \
|
||||||
KC_TAB, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, _______,_______,_______, \
|
KC_TAB, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, _______,_______,_______, \
|
||||||
@@ -78,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______, _______, _______, _______, KC_RALT, _______, _______, _______, _______,_______,_______ \
|
_______, _______, _______, _______, KC_RALT, _______, _______, _______, _______,_______,_______ \
|
||||||
),
|
),
|
||||||
|
|
||||||
[_MOUSE] = KEYMAP_TKL(\
|
[_MOUSE] = LAYOUT_tkl(\
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______, \
|
||||||
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_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_TAB, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, _______,_______,_______, \
|
KC_TAB, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, _______,_______,_______, \
|
||||||
@@ -106,7 +97,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
case QWERTY:
|
case QWERTY:
|
||||||
@@ -126,7 +117,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
set_single_persistent_default_layer(_DVORAK);
|
set_single_persistent_default_layer(_DVORAK);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,3 @@
|
|||||||
#ifndef CONFIG_USER_H
|
#pragma once
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
// place overrides here
|
// place overrides here
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
#include "frosty_flake.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = KEYMAP(\
|
[0] = 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_PSCR,KC_SLCK,KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
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_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
|
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_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||||
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_P7, KC_P8, KC_P9,KC_PPLS, \
|
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_P7, KC_P8, KC_P9, KC_PPLS, \
|
||||||
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_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_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_P1, KC_P2, KC_P3,KC_PENT, \
|
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_P1, KC_P2, KC_P3, KC_PENT, \
|
||||||
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT)
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
|
||||||
};
|
)
|
||||||
|
};
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Build Options
|
# Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
@@ -13,9 +13,5 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
#ifndef CONFIG_USER_H
|
#pragma once
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
|
// place overrides here
|
||||||
#define TAPPING_TERM 200
|
#define TAPPING_TERM 200
|
||||||
#define LEADER_TIMEOUT 800
|
#define LEADER_TIMEOUT 800
|
||||||
|
|
||||||
@@ -17,7 +15,4 @@
|
|||||||
#define MOUSEKEY_DELAY 0
|
#define MOUSEKEY_DELAY 0
|
||||||
#define MOUSEKEY_TIME_TO_MAX 60
|
#define MOUSEKEY_TIME_TO_MAX 60
|
||||||
#define MOUSEKEY_MAX_SPEED 7
|
#define MOUSEKEY_MAX_SPEED 7
|
||||||
#define MOUSEKEY_WHEEL_DELAY 0
|
#define MOUSEKEY_WHEEL_DELAY 0
|
||||||
// place overrides here
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,11 +1,5 @@
|
|||||||
#include "frosty_flake.h"
|
#include QMK_KEYBOARD_H
|
||||||
#include "action_layer.h"
|
|
||||||
#include "eeconfig.h"
|
|
||||||
#include "process_unicode.h"
|
|
||||||
#include "process_unicodemap.h"
|
|
||||||
#include "quantum.h"
|
|
||||||
|
|
||||||
#define _______ KC_TRNS
|
|
||||||
#define MAXEMOJITAPS 80
|
#define MAXEMOJITAPS 80
|
||||||
|
|
||||||
|
|
||||||
@@ -33,16 +27,16 @@ enum taps{
|
|||||||
ALLS
|
ALLS
|
||||||
};
|
};
|
||||||
|
|
||||||
enum unicode_name {
|
enum unicode_name {
|
||||||
EMOTIS = 1,//80, //1F60x - 1F64x
|
EMOTIS = 1,//80, //1F60x - 1F64x
|
||||||
ANIMALS, //64, //1F40x - 1F43x
|
ANIMALS, //64, //1F40x - 1F43x
|
||||||
SYMBOLS,// = 45, //1F300 - 1F32C
|
SYMBOLS,// = 45, //1F300 - 1F32C
|
||||||
FOODS,// = 87 , //1F32D -
|
FOODS,// = 87 , //1F32D -
|
||||||
ETC,// = 192, //1F44x -1F4Fx
|
ETC,// = 192, //1F44x -1F4Fx
|
||||||
VEHICLES,// = 83, //1F68x - 1F6Dx
|
VEHICLES,// = 83, //1F68x - 1F6Dx
|
||||||
SUPPLEMENT,// = 32, //1F91x-1F92x
|
SUPPLEMENT,// = 32, //1F91x-1F92x
|
||||||
ALCHEMY,// = 116 //1F70x - 1F773
|
ALCHEMY,// = 116 //1F70x - 1F773
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum my_macros {
|
enum my_macros {
|
||||||
@@ -102,7 +96,7 @@ const uint32_t PROGMEM unicode_map[] = {
|
|||||||
[EMOTIS] = 0x1F600,
|
[EMOTIS] = 0x1F600,
|
||||||
[ANIMALS] = 0x1F400,
|
[ANIMALS] = 0x1F400,
|
||||||
[SYMBOLS] = 0x1F300,
|
[SYMBOLS] = 0x1F300,
|
||||||
[FOODS] = 0x1F32D,
|
[FOODS] = 0x1F32D,
|
||||||
[ETC] = 0x1F440,
|
[ETC] = 0x1F440,
|
||||||
[VEHICLES] = 0x1F680,
|
[VEHICLES] = 0x1F680,
|
||||||
[SUPPLEMENT] = 0x1F910,
|
[SUPPLEMENT] = 0x1F910,
|
||||||
@@ -110,27 +104,30 @@ const uint32_t PROGMEM unicode_map[] = {
|
|||||||
};
|
};
|
||||||
// Layouts
|
// Layouts
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = KEYMAP(\
|
[0] = 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_PSCR,KC_SLCK,KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
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_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
|
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_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||||
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_P7, KC_P8, KC_P9,KC_PPLS, \
|
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_P7, KC_P8, KC_P9, KC_PPLS, \
|
||||||
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_ENT, KC_P4, KC_P5, KC_P6, \
|
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_ENT, KC_P4, KC_P5, KC_P6, \
|
||||||
KC_LSPO,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
|
KC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
|
||||||
TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT),
|
TD(TD_CTCPS), KC_LGUI, KC_LALT, KC_SPC, KC_LEAD, KC_RGUI, KC_APP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
|
||||||
[1] = KEYMAP(\
|
),
|
||||||
TD(ALLS), 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_SLCK,KC_PAUS, \
|
[1] = LAYOUT(\
|
||||||
KC_GRV, TD(EMOJIS),TD(ANIMAL),TD(ETC),TD(FOODS), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
|
TD(ALLS), 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_SLCK, KC_PAUS, \
|
||||||
KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \
|
KC_GRV, TD(EMOJIS), TD(ANIMAL), TD(ETC), TD(FOODS), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_MPRV, KC_MPLY, KC_MNXT, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||||
KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \
|
KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_UP, KC_RBRC, KC_BSLS, KC_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
|
||||||
KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \
|
KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_LEFT, KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \
|
||||||
KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT),
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
|
||||||
[2] = KEYMAP(\
|
KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
|
),
|
||||||
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_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
|
[2] = LAYOUT(\
|
||||||
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_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
KC_LCTL, KC_D, 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_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_MPRV, KC_MPLY, KC_MNXT, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||||
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_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \
|
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_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
|
||||||
KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2) , KC_NO , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT),
|
KC_LCTL, KC_D, 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_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_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
|
||||||
|
KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
LEADER_EXTERNS();
|
LEADER_EXTERNS();
|
||||||
@@ -183,7 +180,7 @@ void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) {
|
void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) {
|
||||||
if(state->count == 1) {
|
if(state->count == 1) {
|
||||||
unicode_input_start();
|
unicode_input_start();
|
||||||
register_hex32(pgm_read_dword(&unicode_map[ANIMALS]));
|
register_hex32(pgm_read_dword(&unicode_map[ANIMALS]));
|
||||||
|
|||||||
@@ -12,13 +12,9 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
|||||||
MIDI_ENABLE = no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
UNICODEMAP_ENABLE = yes # unicodemap
|
UNICODEMAP_ENABLE = yes # unicodemap
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = yes
|
||||||
LEADER_ENABLE = yes
|
LEADER_ENABLE = yes
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -1,8 +1,3 @@
|
|||||||
#ifndef CONFIG_USER_H
|
#pragma once
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
// place overrides here
|
// place overrides here
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#include "frosty_flake.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = KEYMAP_TKL(\
|
[0] = LAYOUT_tkl(\
|
||||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
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_INS, KC_HOME, KC_PGUP, \
|
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_INS, KC_HOME, 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_DEL, KC_END, KC_PGDN, \
|
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, \
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ keymaps `default` (104) and `tkl` (87) for example layouts.
|
|||||||
|
|
||||||
Keyboard Maintainer: QMK Community
|
Keyboard Maintainer: QMK Community
|
||||||
Hardware Supported: Frosty Flake
|
Hardware Supported: Frosty Flake
|
||||||
Hardware Availability: https://1upkeyboards.com/qfr-frosty-flake-controller.html
|
Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/qfr-frosty-flake-controller/)
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ Make example for this keyboard (after setting up your build environment):
|
|||||||
make bpiphany/frosty_flake:default
|
make bpiphany/frosty_flake:default
|
||||||
```
|
```
|
||||||
|
|
||||||
To directly flash the frosty_flake after compiling use
|
To directly flash the frosty_flake after compiling use:
|
||||||
|
|
||||||
```
|
```
|
||||||
make bpiphany/frosty_flake:default:dfu
|
make bpiphany/frosty_flake:default:dfu
|
||||||
|
|||||||
@@ -0,0 +1,192 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Pegasus Hoof",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 18.25,
|
||||||
|
"height": 6.5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "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":"Print Screen", "x":15.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"`", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "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":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "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":"Delete", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "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":"Shift", "x":0, "y":4.5, "w":1.25},
|
||||||
|
{"label":"ISO \\", "x":1.25, "y":4.5},
|
||||||
|
{"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":2.75},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"AltGr", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_tkl_ansi": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "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":"Print Screen", "x":15.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"`", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "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":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "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":"Delete", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "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":"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":2.75},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"AltGr", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,9 +15,7 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pegasushoof.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
#define _______ KC_TRNS
|
|
||||||
|
|
||||||
/* Swedish keys */
|
/* Swedish keys */
|
||||||
#define SE_HALF KC_GRV
|
#define SE_HALF KC_GRV
|
||||||
@@ -44,7 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Layer 0: Blowrak ISO layer, a Swedish take on Dvorak */
|
/* Layer 0: Blowrak ISO layer, a Swedish take on Dvorak */
|
||||||
[KM_BLOWRAK] = KEYMAP( \
|
[KM_BLOWRAK] = 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_PSCR,KC_SLCK,KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
|
||||||
SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
|
SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
|
||||||
KC_TAB, SE_AO, SE_AE, SE_OE, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_COMM,SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
|
KC_TAB, SE_AO, SE_AE, SE_OE, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_COMM,SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
|
||||||
@@ -52,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_LSFT, SE_LTGT,KC_DOT, KC_Q, KC_J, KC_K, KC_B, KC_X, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
|
KC_LSFT, SE_LTGT,KC_DOT, KC_Q, KC_J, KC_K, KC_B, KC_X, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
|
||||||
KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
|
KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
|
||||||
/* Layer 1: Standard ISO layer */
|
/* Layer 1: Standard ISO layer */
|
||||||
[KM_QWERTY] = KEYMAP( \
|
[KM_QWERTY] = 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_PSCR,KC_SLCK,KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
|
||||||
SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
|
SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, SE_AO, SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, SE_AO, SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
|
||||||
@@ -60,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_LSFT, SE_LTGT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, SE_MINS, KC_RSFT, KC_UP, \
|
KC_LSFT, SE_LTGT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, SE_MINS, KC_RSFT, KC_UP, \
|
||||||
KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
|
KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
|
||||||
/* Layer 2: Media layer */
|
/* Layer 2: Media layer */
|
||||||
[KM_MEDIA] = KEYMAP( \
|
[KM_MEDIA] = LAYOUT( \
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
|
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MUTE,_______,KC_VOLD, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MUTE,_______,KC_VOLD, \
|
||||||
@@ -68,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
|
||||||
_______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT),
|
_______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT),
|
||||||
/* Layer 3: Programming layer */
|
/* Layer 3: Programming layer */
|
||||||
[KM_HAXHAX] = KEYMAP( \
|
[KM_HAXHAX] = LAYOUT( \
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
||||||
_______,SE_LCBR,SE_PIPE,SE_RCBR,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
_______,SE_LCBR,SE_PIPE,SE_RCBR,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Build Options
|
# Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
@@ -14,9 +14,4 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -1,11 +1,6 @@
|
|||||||
#ifndef CONFIG_USER_H
|
#pragma once
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "../../config.h"
|
|
||||||
|
|
||||||
/* overridden settings: */
|
/* overridden settings: */
|
||||||
|
|
||||||
#undef PRODUCT
|
#undef PRODUCT
|
||||||
#define PRODUCT Pegasus Hoof Citadel
|
#define PRODUCT Pegasus Hoof Citadel
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pegasushoof.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
/* Allow shortcuts for combos like RALT(KC_RBRC) that don't take up more than 7 characters: */
|
/* Allow shortcuts for combos like RALT(KC_RBRC) that don't take up more than 7 characters: */
|
||||||
#define G(kc) RALT(KC_##kc)
|
#define G(kc) RALT(KC_##kc)
|
||||||
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* '------------------------------------------------------------------------' '--------------'
|
* '------------------------------------------------------------------------' '--------------'
|
||||||
* NUHS = true position of KC_NUHS
|
* NUHS = true position of KC_NUHS
|
||||||
*/
|
*/
|
||||||
[DEF] = KEYMAP( \
|
[DEF] = 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_PSCR,KC_SLCK,TD(AF4), \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,TD(AF4), \
|
||||||
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_INS, KC_HOME,KC_PGUP, \
|
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_INS, KC_HOME,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_NUHS, KC_DEL, KC_END, KC_PGDN, \
|
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_NUHS, KC_DEL, KC_END, KC_PGDN, \
|
||||||
@@ -89,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* '------------------------------------------------------------------------' '--------------'
|
* '------------------------------------------------------------------------' '--------------'
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
[FUN] = KEYMAP( \
|
[FUN] = LAYOUT( \
|
||||||
CTALDEL, KC_MYCM,KC_WHOM,KC_CALC,KC_MSEL,KC_MPRV,KC_MNXT,KC_MPLY,KC_MSTP,KC_MUTE,KC_VOLD,KC_VOLU,MO(RES), _______,KC_SLCK,KC_PAUS, \
|
CTALDEL, KC_MYCM,KC_WHOM,KC_CALC,KC_MSEL,KC_MPRV,KC_MNXT,KC_MPLY,KC_MSTP,KC_MUTE,KC_VOLD,KC_VOLU,MO(RES), _______,KC_SLCK,KC_PAUS, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,G(7), G(8), G(9), G(0), G(MINS),_______,_______, _______,_______,KC_WH_U, \
|
_______,_______,_______,_______,_______,_______,_______,G(7), G(8), G(9), G(0), G(MINS),_______,_______, _______,_______,KC_WH_U, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,G(RBRC),_______, _______,_______,KC_WH_D, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,G(RBRC),_______, _______,_______,KC_WH_D, \
|
||||||
@@ -99,7 +99,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
|
|
||||||
/* Layer 3: Reset layer (prevents accidental resets) */
|
/* Layer 3: Reset layer (prevents accidental resets) */
|
||||||
[RES] = KEYMAP( \
|
[RES] = LAYOUT( \
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
||||||
_______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
_______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
|
||||||
|
|||||||
@@ -13,10 +13,5 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
TAP_DANCE_ENABLE = yes # see https://docs.qmk.fm/#/feature_tap_dance (+1000)
|
TAP_DANCE_ENABLE = yes # see https://docs.qmk.fm/#/feature_tap_dance (+1000)
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -15,46 +15,42 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pegasushoof.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
#define _______ KC_TRNS
|
|
||||||
|
|
||||||
#define KM_QWERTY 0
|
#define KM_QWERTY 0
|
||||||
#define KM_MEDIA 1
|
#define KM_MEDIA 1
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Layer 0: Standard ISO layer */
|
/* Layer 0: Standard ISO layer */
|
||||||
[KM_QWERTY] = KEYMAP( \
|
[KM_QWERTY] = 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_PSCR,KC_SLCK,KC_PAUS, \
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||||
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_INS, KC_HOME,KC_PGUP, \
|
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_INS, KC_HOME, 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_DEL, KC_END, KC_PGDN, \
|
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_CLCK, 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_CLCK, 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_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_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_MENU,KC_FN0, KC_LEFT,KC_DOWN,KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
/* Layer 1: Function layer */
|
),
|
||||||
[KM_MEDIA] = KEYMAP( \
|
/* Layer 1: Function layer */
|
||||||
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
|
[KM_MEDIA] = LAYOUT( \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WAKE, KC_PWR, KC_SLEP, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLD, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, \
|
||||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
_______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT)
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, \
|
||||||
};
|
_______, _______, _______, _______, _______, _______, RESET, _______, KC_MPRV, KC_MSTP, KC_MNXT \
|
||||||
|
)
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
[0] = ACTION_LAYER_MOMENTARY(KM_MEDIA)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
void led_set_user(uint8_t usb_led) {
|
||||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||||
ph_caps_led_on();
|
ph_caps_led_on();
|
||||||
} else {
|
} else {
|
||||||
ph_caps_led_off();
|
ph_caps_led_off();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
||||||
ph_sclk_led_on();
|
ph_sclk_led_on();
|
||||||
} else {
|
} else {
|
||||||
ph_sclk_led_off();
|
ph_sclk_led_off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Build Options
|
# Build Options
|
||||||
# change to "no" to disable the options, or define them in the Makefile in
|
# change to "no" to disable the options, or define them in the Makefile in
|
||||||
# the appropriate keymap folder that will get included automatically
|
# the appropriate keymap folder that will get included automatically
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
@@ -14,9 +14,4 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -21,25 +21,39 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define ___ KC_NO
|
#define LAYOUT( \
|
||||||
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
|
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
||||||
|
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
||||||
|
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
|
||||||
|
KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
||||||
|
KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
|
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
|
||||||
|
/* 0 */ { KC_NO , KC_NO , KC0 , KC_NO , KC_NO , KF0 , KC_NO , KC_NO , KC_NO , KJ0 , KK0 , KC_NO , KM0 , KN0 , KO0 , KC_NO , KQ0 , KR0 }, \
|
||||||
|
/* 1 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , KC_NO , KO1 , KP1 , KC_NO , KC_NO }, \
|
||||||
|
/* 2 */ { KC_NO , KB2 , KC_NO , KD2 , KC_NO , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , KC_NO , KO2 , KC_NO , KC_NO , KC_NO }, \
|
||||||
|
/* 3 */ { KA3 , KB3 , KC_NO , KC_NO , KC_NO , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KC_NO , KO3 , KC_NO , KC_NO , KC_NO }, \
|
||||||
|
/* 4 */ { KC_NO , KC_NO , KC4 , KC_NO , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , KC_NO , KO4 , KP4 , KQ4 , KR4 }, \
|
||||||
|
/* 5 */ { KC_NO , KC_NO , KC5 , KC_NO , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , KC_NO , KC_NO }, \
|
||||||
|
/* 6 */ { KC_NO , KC_NO , KC6 , KC_NO , KC_NO , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , KC_NO , KN6 , KO6 , KC_NO , KQ6 , KC_NO }, \
|
||||||
|
/* 7 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KC_NO , KP7 , KC_NO , KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
#define KEYMAP( \
|
#define LAYOUT_tkl_ansi( \
|
||||||
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
||||||
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
||||||
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
|
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
|
||||||
KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
||||||
KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
|
KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
|
) LAYOUT( \
|
||||||
/* 0 */ { ___ , ___ , KC0 , ___ , ___ , KF0 , ___ , ___ , ___ , KJ0 , KK0 , ___ , KM0 , KN0 , KO0 , ___ , KQ0 , KR0 }, \
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
/* 1 */ { ___ , ___ , ___ , ___ , ___ , ___ , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , ___ , KO1 , KP1 , ___ , ___ }, \
|
KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
|
||||||
/* 2 */ { ___ , KB2 , ___ , KD2 , ___ , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , ___ , KO2 , ___ , ___ , ___ }, \
|
KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
|
||||||
/* 3 */ { KA3 , KB3 , ___ , ___ , ___ , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , ___ , KO3 , ___ , ___ , ___ }, \
|
KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
|
||||||
/* 4 */ { ___ , ___ , KC4 , ___ , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , ___ , KO4 , KP4 , KQ4 , KR4 }, \
|
KB2,KC_NO,KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
|
||||||
/* 5 */ { ___ , ___ , KC5 , ___ , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , ___ , ___ }, \
|
KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
/* 6 */ { ___ , ___ , KC6 , ___ , ___ , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , KN6 , KO6 , ___ , KQ6 , ___ }, \
|
)
|
||||||
/* 7 */ { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , ___ , KP7 , ___ , ___ }, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define LAYOUT_tkl_jis( \
|
#define LAYOUT_tkl_jis( \
|
||||||
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
|
||||||
@@ -49,14 +63,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0, KB3, KC6, \
|
KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0, KB3, KC6, \
|
||||||
KP4, KD2, KN6, KG0, KQ6, KH0, KI0, KN0, KM0, KP1, KC0, KQ0, KR0 \
|
KP4, KD2, KN6, KG0, KQ6, KH0, KI0, KN0, KM0, KP1, KC0, KQ0, KR0 \
|
||||||
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
|
) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
|
||||||
/* 0 */ { ___ , ___ , KC0 , ___ , ___ , KF0 , KG0 , KH0 , KI0 , KJ0 , KK0 , KL0 , KM0 , KN0 , KO0 , ___ , KQ0 , KR0 }, \
|
/* 0 */ { KC_NO, KC_NO, KC0, KC_NO, KC_NO, KF0, KG0, KH0, KI0, KJ0, KK0, KL0, KM0, KN0, KO0, KC_NO, KQ0, KR0 }, \
|
||||||
/* 1 */ { ___ , ___ , ___ , ___ , ___ , ___ , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , ___ , KO1 , KP1 , ___ , ___ }, \
|
/* 1 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KG1, KH1, KI1, KJ1, KK1, KL1, KM1, KC_NO, KO1, KP1, KC_NO, KC_NO }, \
|
||||||
/* 2 */ { ___ , KB2 , ___ , KD2 , ___ , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , ___ , KO2 , ___ , ___ , ___ }, \
|
/* 2 */ { KC_NO, KB2, KC_NO, KD2, KC_NO, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KM2, KC_NO, KO2, KC_NO, KC_NO, KC_NO }, \
|
||||||
/* 3 */ { ___ , KB3 , ___ , ___ , ___ , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , ___ , KO3 , ___ , ___ , ___ }, \
|
/* 3 */ { KC_NO, KB3, KC_NO, KC_NO, KC_NO, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KC_NO, KO3, KC_NO, KC_NO, KC_NO }, \
|
||||||
/* 4 */ { ___ , ___ , KC4 , ___ , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , ___ , KO4 , KP4 , KQ4 , KR4 }, \
|
/* 4 */ { KC_NO, KC_NO, KC4, KC_NO, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KM4, KC_NO, KO4, KP4, KQ4, KR4 }, \
|
||||||
/* 5 */ { ___ , ___ , KC5 , ___ , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , ___ , ___ }, \
|
/* 5 */ { KC_NO, KC_NO, KC5, KC_NO, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KM5, KN5, KO5, KP5, KC_NO, KC_NO }, \
|
||||||
/* 6 */ { ___ , ___ , KC6 , ___ , ___ , KF6 , KG6 , ___ , KI6 , KJ6 , KK6 , KL6 , ___ , KN6 , KO6 , ___ , KQ6 , ___ }, \
|
/* 6 */ { KC_NO, KC_NO, KC6, KC_NO, KC_NO, KF6, KG6, KC_NO, KI6, KJ6, KK6, KL6, KC_NO, KN6, KO6, KC_NO, KQ6, KC_NO }, \
|
||||||
/* 7 */ { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KO7 , KP7 , ___ , ___ }, \
|
/* 7 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KF7, KG7, KH7, KI7, KJ7, KK7, KL7, KK7, KL7, KO7, KP7, KC_NO, KC_NO } \
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
|
inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
Pegasus Hoof Controller
|
# Pegasus Hoof Controller
|
||||||
===
|
|
||||||
|
A replacement controller that turns your Filco Majestouch 87/88 mechanical keyboard into a fully programmable keyboard.
|
||||||
|
|
||||||
Keyboard Maintainer: QMK Community
|
Keyboard Maintainer: QMK Community
|
||||||
Hardware Supported: Pegasus Hoof
|
Hardware Supported: Pegasus Hoof
|
||||||
Hardware Availability: https://1upkeyboards.com/filco-pegasus-hoof-controller.html
|
Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/filco-pegasus-hoof-controller/)
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
@@ -60,8 +60,9 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||||
|
|
||||||
|
LAYOUTS = tkl_ansi
|
||||||
|
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
SRC = matrix.c
|
SRC = matrix.c
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Comet46",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "SatT",
|
||||||
|
"width": 15,
|
||||||
|
"height": 4.9,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"TAB", "x":0, "y":0.45},
|
||||||
|
{"label":"Q", "x":1, "y":0.45},
|
||||||
|
{"label":"W", "x":2, "y":0.15},
|
||||||
|
{"label":"E", "x":3, "y":0},
|
||||||
|
{"label":"R", "x":4, "y":0.30},
|
||||||
|
{"label":"T", "x":5, "y":0.45},
|
||||||
|
{"label":"Y", "x":9, "y":0.45},
|
||||||
|
{"label":"U", "x":10, "y":0.30},
|
||||||
|
{"label":"I", "x":11, "y":0},
|
||||||
|
{"label":"O", "x":12, "y":0.15},
|
||||||
|
{"label":"P", "x":13, "y":0.45},
|
||||||
|
{"label":"BSPC", "x":14, "y":0.45},
|
||||||
|
|
||||||
|
{"label":"LCTL", "x":0, "y":1.45},
|
||||||
|
{"label":"A", "x":1, "y":1.45},
|
||||||
|
{"label":"S", "x":2, "y":1.15},
|
||||||
|
{"label":"D", "x":3, "y":1},
|
||||||
|
{"label":"F", "x":4, "y":1.30},
|
||||||
|
{"label":"G", "x":5, "y":1.45},
|
||||||
|
{"label":"ESC", "x":6, "y":1},
|
||||||
|
{"label":"DEL", "x":8, "y":1},
|
||||||
|
{"label":"H", "x":9, "y":1.45},
|
||||||
|
{"label":"J", "x":10, "y":1.30},
|
||||||
|
{"label":"K", "x":11, "y":1},
|
||||||
|
{"label":"L", "x":12, "y":1.15},
|
||||||
|
{"label":"SCLN", "x":13, "y":1.45},
|
||||||
|
{"label":"QUOT", "x":14, "y":1.45},
|
||||||
|
|
||||||
|
{"label":"LSFT", "x":0, "y":2.45},
|
||||||
|
{"label":"Z", "x":1, "y":2.45},
|
||||||
|
{"label":"X", "x":2, "y":2.15},
|
||||||
|
{"label":"C", "x":3, "y":2},
|
||||||
|
{"label":"V", "x":4, "y":2.30},
|
||||||
|
{"label":"B", "x":5, "y":2.45},
|
||||||
|
{"label":"LCBR", "x":6, "y":2},
|
||||||
|
{"label":"RCBR", "x":8, "y":2},
|
||||||
|
{"label":"N", "x":9, "y":2.45},
|
||||||
|
{"label":"M", "x":10, "y":2.30},
|
||||||
|
{"label":"COMM", "x":11, "y":2},
|
||||||
|
{"label":"DOT", "x":12, "y":2.15},
|
||||||
|
{"label":"SLSH", "x":13, "y":2.45},
|
||||||
|
{"label":"RSFT", "x":14, "y":2.45},
|
||||||
|
|
||||||
|
{"label":"LGUI", "x":4, "y":3.9},
|
||||||
|
{"label":"LOWER", "x":5, "y":3.9},
|
||||||
|
{"label":"SPACE", "x":6, "y":3.4, "h":1.5},
|
||||||
|
{"label":"ENTER", "x":8, "y":3.4, "h":1.5},
|
||||||
|
{"label":"RAISE", "x":9, "y":3.9},
|
||||||
|
{"label":"LALT", "x":10, "y":3.9}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,7 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#define PREVENT_STUCK_MODIFIERS
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
#define TAPPING_FORCE_HOLD
|
#define TAPPING_FORCE_HOLD
|
||||||
#define TAPPING_TERM 150
|
#define TAPPING_TERM 250
|
||||||
|
|
||||||
#undef RGBLED_NUM
|
#undef RGBLED_NUM
|
||||||
#define RGBLIGHT_ANIMATIONS
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#ifdef SSD1306OLED
|
#ifdef SSD1306OLED
|
||||||
#include "ssd1306.h"
|
#include "ssd1306.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "oled_helper.h"
|
||||||
|
|
||||||
extern keymap_config_t keymap_config;
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
@@ -21,27 +22,35 @@ extern uint8_t is_master;
|
|||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
// 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
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
// entirely and just use numbers.
|
// entirely and just use numbers.
|
||||||
#define _QWERTY 0
|
enum layer_number {
|
||||||
#define _LOWER 3
|
_BASE = 0,
|
||||||
#define _RAISE 4
|
_LOWER,
|
||||||
#define _ADJUST 16
|
_RAISE,
|
||||||
|
_ADJUST,
|
||||||
|
};
|
||||||
|
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
LOWER = SAFE_RANGE,
|
LOWER = SAFE_RANGE,
|
||||||
RAISE,
|
RAISE,
|
||||||
ADJUST,
|
ADJUST,
|
||||||
|
KANJI,
|
||||||
RGBRST
|
RGBRST
|
||||||
};
|
};
|
||||||
|
|
||||||
#define KC______ KC_TRNS
|
enum tapdances{
|
||||||
#define KC_XXXXX KC_NO
|
TD_CODO = 0,
|
||||||
#define KC_KANJI KC_GRV
|
// TD_MNUB,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Layer Mode aliases
|
||||||
#define KC_LOWER LOWER
|
#define KC_LOWER LOWER
|
||||||
#define KC_RAISE RAISE
|
#define KC_RAISE RAISE
|
||||||
|
|
||||||
#define KC_RST RESET
|
#define KC______ KC_TRNS
|
||||||
|
#define KC_XXXXX KC_NO
|
||||||
|
#define KC_KANJI KANJI
|
||||||
|
|
||||||
|
#define KC_RST RESET
|
||||||
#define KC_LRST RGBRST
|
#define KC_LRST RGBRST
|
||||||
#define KC_LTOG RGB_TOG
|
#define KC_LTOG RGB_TOG
|
||||||
#define KC_LHUI RGB_HUI
|
#define KC_LHUI RGB_HUI
|
||||||
@@ -51,31 +60,41 @@ enum custom_keycodes {
|
|||||||
#define KC_LVAI RGB_VAI
|
#define KC_LVAI RGB_VAI
|
||||||
#define KC_LVAD RGB_VAD
|
#define KC_LVAD RGB_VAD
|
||||||
#define KC_LMOD RGB_MOD
|
#define KC_LMOD RGB_MOD
|
||||||
|
|
||||||
#define KC_KNRM AG_NORM
|
#define KC_KNRM AG_NORM
|
||||||
#define KC_KSWP AG_SWAP
|
#define KC_KSWP AG_SWAP
|
||||||
#define KC_GUAP LALT_T(KC_APP)
|
|
||||||
|
#define KC_TBSF LSFT_T(KC_TAB)
|
||||||
|
// #define KC_SPSF LSFT_T(KC_SPC)
|
||||||
|
#define KC_ALAP LALT_T(KC_APP)
|
||||||
|
|
||||||
|
#define KC_CODO TD(TD_CODO)
|
||||||
|
// #define KC_MNUB TD(TD_MNUB)
|
||||||
|
|
||||||
|
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
|
[TD_CODO] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_DOT),
|
||||||
|
// [TD_MNUB] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, LSFT(KC_RO)),
|
||||||
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_QWERTY] = LAYOUT_kc( \
|
[_BASE] = LAYOUT_kc( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------. ,-----------------------------------------.
|
||||||
ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
|
ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
LSFT, A, S, D, F, G, H, J, K, L, UP, ENT,\
|
TBSF, A, S, D, F, G, H, J, K, L, UP, ENT,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
LCTRL, Z, X, C, V, B, N, M, COMM, LEFT, DOWN, RGHT,\
|
LCTRL, Z, X, C, V, B, N, M, CODO, LEFT, DOWN, RGHT,\
|
||||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||||
LGUI, LOWER, BSPC, SPC, RAISE, GUAP \
|
LGUI, LOWER, BSPC, SPC, RAISE, ALAP \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------' `--------------------'
|
||||||
),
|
),
|
||||||
|
|
||||||
[_LOWER] = LAYOUT_kc( \
|
[_LOWER] = LAYOUT_kc( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------. ,-----------------------------------------.
|
||||||
TAB, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
|
_____, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
_____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
|
_____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
_____, F11, F12, XXXXX, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
|
_____, F11, F12, TAB, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
|
||||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||||
_____, _____, DEL, _____, _____, APP \
|
_____, _____, DEL, _____, _____, APP \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------' `--------------------'
|
||||||
@@ -83,11 +102,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
[_RAISE] = LAYOUT_kc( \
|
[_RAISE] = LAYOUT_kc( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------. ,-----------------------------------------.
|
||||||
_____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, XXXXX,\
|
_____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, PSLS,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 4, 5, 6, QUOT, XXXXX,\
|
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, QUOT, 4, 5, 6, PPLS, PAST,\
|
||||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, XXXXX,\
|
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, PMNS,\
|
||||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||||
_____, _____, BSPC, _____, _____, LALT \
|
_____, _____, BSPC, _____, _____, LALT \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------' `--------------------'
|
||||||
@@ -95,152 +114,182 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
[_ADJUST] = LAYOUT_kc( \
|
[_ADJUST] = LAYOUT_kc( \
|
||||||
//,-----------------------------------------. ,-----------------------------------------.
|
//,-----------------------------------------. ,-----------------------------------------.
|
||||||
_____, RST, LRST, KNRM, KSWP,XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
|
_____, RST, LRST, KNRM, KSWP, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
|
||||||
//|------+-------+------+------+------+-----| |------+------+------+------+------+------|
|
//|------+-------+------+------+------+-----| |------+------+------+------+------+------|
|
||||||
_____, LTOG, LHUI, LSAI, LVAI,XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
|
_____, LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
|
||||||
//|------+-------+------+------+------+-----| |------+------+------+------+------+------|
|
//|------+-------+------+------+------+-----| |------+------+------+------+------+------|
|
||||||
_____, LMOD, LHUD, LSAD, LVAD,XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
|
_____, LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
|
||||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||||
_____, _____, XXXXX, _____, _____, XXXXX \
|
_____, _____, XXXXX, _____, _____, XXXXX \
|
||||||
//`--------------------' `--------------------'
|
//`--------------------' `--------------------'
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
int RGB_current_mode;
|
#define L_BASE _BASE
|
||||||
|
#define L_LOWER (1<<_LOWER)
|
||||||
|
#define L_RAISE (1<<_RAISE)
|
||||||
|
#define L_ADJUST (1<<_ADJUST)
|
||||||
|
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
|
||||||
|
|
||||||
// Setting ADJUST layer RGB back to default
|
#ifdef SSD1306OLED
|
||||||
static inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
typedef struct {
|
||||||
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
uint8_t state;
|
||||||
layer_on(layer3);
|
char name[8];
|
||||||
} else {
|
}LAYER_DISPLAY_NAME;
|
||||||
layer_off(layer3);
|
|
||||||
|
#define LAYER_DISPLAY_MAX 5
|
||||||
|
const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
|
||||||
|
{L_BASE, "Base"},
|
||||||
|
{L_BASE + 1, "Base"},
|
||||||
|
{L_LOWER, "Lower"},
|
||||||
|
{L_RAISE, "Raise"},
|
||||||
|
{L_ADJUST_TRI, "Adjust"}
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline const char* get_leyer_status(void) {
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
|
||||||
|
if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
|
||||||
|
|
||||||
|
return layer_display_name[i].name;
|
||||||
|
} else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
|
||||||
|
|
||||||
|
return layer_display_name[i].name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return "?";
|
||||||
|
}
|
||||||
|
|
||||||
|
static char layer_status_buf[24] = "Layer state ready.\n";
|
||||||
|
static inline void update_keymap_status(void) {
|
||||||
|
|
||||||
|
snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
|
||||||
|
keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void render_keymap_status(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
matrix_write(matrix, layer_status_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define UPDATE_KEYMAP_STATUS() update_keymap_status()
|
||||||
|
#define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define UPDATE_KEYMAP_STATUS()
|
||||||
|
#define RENDER_KEYMAP_STATUS(a)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
|
||||||
|
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||||
|
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int RGB_current_mode;
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
UPDATE_KEY_STATUS(keycode, record);
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||||
|
break;
|
||||||
|
case KANJI:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (keymap_config.swap_lalt_lgui == false) {
|
||||||
|
register_code(KC_LANG2);
|
||||||
|
} else {
|
||||||
|
SEND_STRING(SS_LALT("`"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_LANG2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
case RGB_MOD:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
rgblight_mode(RGB_current_mode);
|
||||||
|
rgblight_step();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RGBRST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
eeconfig_update_rgblight_default();
|
||||||
|
rgblight_enable();
|
||||||
|
RGB_current_mode = rgblight_config.mode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
UPDATE_KEYMAP_STATUS();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void) {
|
void matrix_init_user(void) {
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
RGB_current_mode = rgblight_config.mode;
|
RGB_current_mode = rgblight_config.mode;
|
||||||
#endif
|
#endif
|
||||||
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
||||||
#ifdef SSD1306OLED
|
#ifdef SSD1306OLED
|
||||||
iota_gfx_init(!has_usb()); // turns on the display
|
iota_gfx_init(!has_usb()); // turns on the display
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
||||||
#ifdef SSD1306OLED
|
#ifdef SSD1306OLED
|
||||||
|
|
||||||
|
|
||||||
// When add source files to SRC in rules.mk, you can use functions.
|
|
||||||
const char *read_layer_state(void);
|
|
||||||
const char *read_logo(void);
|
|
||||||
void set_keylog(uint16_t keycode, keyrecord_t *record);
|
|
||||||
const char *read_keylog(void);
|
|
||||||
const char *read_keylogs(void);
|
|
||||||
|
|
||||||
// const char *read_mode_icon(bool swap);
|
|
||||||
// const char *read_host_led_state(void);
|
|
||||||
// void set_timelog(void);
|
|
||||||
// const char *read_timelog(void);
|
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
const char *read_rgb_info(void);
|
|
||||||
#define RENDER_RGB_INFO(m) matrix_write_ln(m, (const char*)read_rgb_info())
|
|
||||||
#else
|
|
||||||
#define RENDER_RGB_INFO(m)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
void matrix_scan_user(void) {
|
void matrix_scan_user(void) {
|
||||||
iota_gfx_task();
|
iota_gfx_task(); // this is what updates the display continuously
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void matrix_render_user(struct CharacterMatrix *matrix) {
|
static inline void matrix_update(struct CharacterMatrix *dest,
|
||||||
if (is_master) {
|
const struct CharacterMatrix *source) {
|
||||||
// If you want to change the display of OLED, you need to change here
|
|
||||||
matrix_write_ln(matrix, read_layer_state());
|
|
||||||
matrix_write_ln(matrix, read_keylog());
|
|
||||||
RENDER_RGB_INFO(matrix);
|
|
||||||
// matrix_write_ln(matrix, read_keylogs());
|
|
||||||
// matrix_write_ln(matrix, read_host_led_state());
|
|
||||||
|
|
||||||
// matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
|
|
||||||
// matrix_write_ln(matrix, read_timelog());
|
|
||||||
} else {
|
|
||||||
matrix_write(matrix, read_logo());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
|
|
||||||
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||||
memcpy(dest->display, source->display, sizeof(dest->display));
|
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||||
dest->dirty = true;
|
dest->dirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void render_status(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
UPDATE_LED_STATUS();
|
||||||
|
RENDER_LED_STATUS(matrix);
|
||||||
|
RENDER_KEYMAP_STATUS(matrix);
|
||||||
|
UPDATE_LOCK_STATUS();
|
||||||
|
RENDER_LOCK_STATUS(matrix);
|
||||||
|
RENDER_KEY_STATUS(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
void iota_gfx_task_user(void) {
|
void iota_gfx_task_user(void) {
|
||||||
struct CharacterMatrix matrix;
|
struct CharacterMatrix matrix;
|
||||||
|
|
||||||
|
#if DEBUG_TO_SCREEN
|
||||||
|
if (debug_enable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
matrix_clear(&matrix);
|
matrix_clear(&matrix);
|
||||||
matrix_render_user(&matrix);
|
if (is_master) {
|
||||||
|
render_status(&matrix);
|
||||||
|
} else {
|
||||||
|
RENDER_LOGO(&matrix);
|
||||||
|
}
|
||||||
|
|
||||||
matrix_update(&display, &matrix);
|
matrix_update(&display, &matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|
||||||
#ifdef SSD1306OLED
|
|
||||||
if (record->event.pressed) {
|
|
||||||
set_keylog(keycode, record);
|
|
||||||
// set_timelog();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (keycode) {
|
|
||||||
case LOWER:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_on(_LOWER);
|
|
||||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
||||||
} else {
|
|
||||||
layer_off(_LOWER);
|
|
||||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RAISE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_on(_RAISE);
|
|
||||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
||||||
} else {
|
|
||||||
layer_off(_RAISE);
|
|
||||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ADJUST:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_on(_ADJUST);
|
|
||||||
} else {
|
|
||||||
layer_off(_ADJUST);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
case RGB_MOD:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
rgblight_mode(RGB_current_mode);
|
|
||||||
rgblight_step();
|
|
||||||
RGB_current_mode = rgblight_config.mode;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RGBRST:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
eeconfig_update_rgblight_default();
|
|
||||||
rgblight_enable();
|
|
||||||
RGB_current_mode = rgblight_config.mode;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
#ifdef SSD1306OLED
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "ssd1306.h"
|
||||||
|
|
||||||
|
void render_logo(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
const char logo_buf[]={
|
||||||
|
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
|
||||||
|
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
|
||||||
|
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
|
||||||
|
0};
|
||||||
|
|
||||||
|
matrix_write(matrix, logo_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char keylog_buf[24] = "Key state ready.";
|
||||||
|
const char code_to_name[60] = {
|
||||||
|
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
|
||||||
|
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
|
||||||
|
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
||||||
|
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
|
||||||
|
'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
|
||||||
|
' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
|
||||||
|
|
||||||
|
void update_key_status(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
if (!record->event.pressed) return;
|
||||||
|
|
||||||
|
char name = (keycode < 60) ? code_to_name[keycode] : ' ';
|
||||||
|
snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c",
|
||||||
|
record->event.key.row, record->event.key.col,
|
||||||
|
(uint16_t)keycode, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void render_key_status(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
matrix_write(matrix, keylog_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char lock_buf[24] = "Lock state ready.\n";
|
||||||
|
void update_lock_status(void) {
|
||||||
|
|
||||||
|
uint8_t leds = host_keyboard_leds();
|
||||||
|
char *num_lock = (leds & (1<<USB_LED_NUM_LOCK)) ? "Num" : "";
|
||||||
|
char *caps_lock = (leds & (1<<USB_LED_CAPS_LOCK)) ? "Caps" : "";
|
||||||
|
char *scrl_lock = (leds & (1<<USB_LED_SCROLL_LOCK)) ? "Scrn" : "";
|
||||||
|
snprintf(lock_buf, sizeof(lock_buf) - 1, "Lock:%s %s %s\n",
|
||||||
|
num_lock, caps_lock, scrl_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
void render_lock_status(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
matrix_write(matrix, lock_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
|
||||||
|
static char led_buf[24] = "LED state ready.\n";
|
||||||
|
rgblight_config_t rgblight_config_bak;
|
||||||
|
void update_led_status(void) {
|
||||||
|
|
||||||
|
if (rgblight_config_bak.enable != rgblight_config.enable ||
|
||||||
|
rgblight_config_bak.mode != rgblight_config.mode ||
|
||||||
|
rgblight_config_bak.hue != rgblight_config.hue ||
|
||||||
|
rgblight_config_bak.sat != rgblight_config.sat ||
|
||||||
|
rgblight_config_bak.val != rgblight_config.val
|
||||||
|
) {
|
||||||
|
snprintf(led_buf, sizeof(led_buf) - 1, "LED%c:%2d hsv:%2d %2d %2d\n",
|
||||||
|
rgblight_config.enable ? '*' : '.', (uint8_t)rgblight_config.mode,
|
||||||
|
(uint8_t)(rgblight_config.hue / RGBLIGHT_HUE_STEP),
|
||||||
|
(uint8_t)(rgblight_config.sat / RGBLIGHT_SAT_STEP),
|
||||||
|
(uint8_t)(rgblight_config.val / RGBLIGHT_VAL_STEP));
|
||||||
|
rgblight_config_bak = rgblight_config;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void render_led_status(struct CharacterMatrix *matrix) {
|
||||||
|
|
||||||
|
matrix_write(matrix, led_buf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#ifdef SSD1306OLED
|
||||||
|
|
||||||
|
void render_logo(struct CharacterMatrix *matrix);
|
||||||
|
void update_key_status(uint16_t keycode, keyrecord_t *record);
|
||||||
|
void render_key_status(struct CharacterMatrix *matrix);
|
||||||
|
void update_lock_status(void);
|
||||||
|
void render_lock_status(struct CharacterMatrix *matrix);
|
||||||
|
|
||||||
|
#define RENDER_LOGO(a) render_logo(a)
|
||||||
|
#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
|
||||||
|
#define RENDER_KEY_STATUS(a) render_key_status(a)
|
||||||
|
#define UPDATE_LOCK_STATUS() update_lock_status()
|
||||||
|
#define RENDER_LOCK_STATUS(a) render_lock_status(a)
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
void update_led_status(void);
|
||||||
|
void render_led_status(struct CharacterMatrix *matrix);
|
||||||
|
#define UPDATE_LED_STATUS() update_led_status()
|
||||||
|
#define RENDER_LED_STATUS(a) render_led_status(a)
|
||||||
|
#else
|
||||||
|
#define UPDATE_LED_STATUS()
|
||||||
|
#define RENDER_LED_STATUS(a)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define RENDER_LOGO(a)
|
||||||
|
#define UPDATE_KEY_STATUS(a, b)
|
||||||
|
#define RENDER_KEY_STATUS(a)
|
||||||
|
#define UPDATE_LOCK_STATUS()
|
||||||
|
#define RENDER_LOCK_STATUS(a)
|
||||||
|
#define UPDATE_LED_STATUS()
|
||||||
|
#define RENDER_LED_STATUS(a)
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -14,18 +14,19 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
Link_Time_Optimization = yes # if firmware size over limit, try this option
|
||||||
|
|
||||||
|
ifeq ($(strip $(Link_Time_Optimization)),yes)
|
||||||
|
EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
|
||||||
|
endif
|
||||||
|
|
||||||
# If you want to change the display of OLED, you need to change here
|
# If you want to change the display of OLED, you need to change here
|
||||||
SRC += ./lib/glcdfont.c \
|
SRC += ./lib/glcdfont.c \
|
||||||
./lib/rgb_state_reader.c \
|
oled_helper.c \
|
||||||
./lib/layer_state_reader.c \
|
|
||||||
./lib/logo_reader.c \
|
|
||||||
./lib/keylogger.c \
|
|
||||||
# ./lib/mode_icon_reader.c \
|
|
||||||
# ./lib/host_led_state_reader.c \
|
|
||||||
# ./lib/timelogger.c \
|
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
// this is the style you want to emulate.
|
||||||
|
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
|
// 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 _QWERTY 0
|
||||||
|
#define _LOWER 1
|
||||||
|
#define _RAISE 2
|
||||||
|
#define _MOUSE 8
|
||||||
|
#define _ADJUST 16
|
||||||
|
|
||||||
|
|
||||||
|
enum dichotomy_keycodes
|
||||||
|
{
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
ADJUST,
|
||||||
|
MOUKEY,
|
||||||
|
MS_BTN1,
|
||||||
|
MS_BTN2,
|
||||||
|
MS_BTN3
|
||||||
|
};
|
||||||
|
|
||||||
|
#define RED_BRIGHTNESS 3
|
||||||
|
#define GREEN_BRIGHTNESS 2
|
||||||
|
#define BLUE_BRIGHTNESS 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
|
||||||
|
[_QWERTY] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
|
||||||
|
KC_ESCAPE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
|
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOUKEY,
|
||||||
|
KC_LCTL, KC_LALT, MOUKEY, KC_RGUI, KC_RALT, KC_RCTL,
|
||||||
|
MS_BTN3, SFT_T(KC_ESCAPE), KC_LGUI, KC_BSPC, KC_SPC, RAISE, LOWER, MS_BTN3
|
||||||
|
),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
|
||||||
|
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||||
|
_______, _______, KC_VOLD, KC_VOLU, KC_MPLY, KC_MFFD, KC_MUTE, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
|
||||||
|
_______, _______, _______, _______, _______, KC_MRWD, _______, _______, _______, KC_BSLS, KC_QUOT, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, KC_LABK, _______, _______, KC_RABK, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT( /* Number layout, basically the main function layer */
|
||||||
|
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
|
||||||
|
_______, KC_TILD, KC_GRV, KC_F13, KC_F14, KC_F15, KC_F16, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, RAISE, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_ADJUST] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_MOUSE] = LAYOUT( /* Mouse layer, including buttons for clicking. */
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, KC_UP, _______,
|
||||||
|
_______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______
|
||||||
|
)
|
||||||
|
|
||||||
|
}; // end keymaps block
|
||||||
|
|
||||||
|
static bool shift_held = false;
|
||||||
|
static bool shift_suspended = false;
|
||||||
|
report_mouse_t currentReport = {};
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
set_single_persistent_default_layer(_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
grn_led_on();
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
grn_led_off();
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
//SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
red_led_on();
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
red_led_off();
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case ADJUST:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
//MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
|
||||||
|
case MOUKEY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_MOUSE);
|
||||||
|
blu_led_on();
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_MOUSE);
|
||||||
|
blu_led_off();
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//mouse buttons, for 1-3, to update the mouse report:
|
||||||
|
case MS_BTN1:
|
||||||
|
currentReport = pointing_device_get_report();
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (shift_held && shift_suspended){
|
||||||
|
register_code(KC_LSFT);
|
||||||
|
shift_suspended = false;
|
||||||
|
}
|
||||||
|
//update mouse report here
|
||||||
|
currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
|
||||||
|
} else {
|
||||||
|
//update mouse report here
|
||||||
|
currentReport.buttons &= ~MOUSE_BTN1;
|
||||||
|
}
|
||||||
|
pointing_device_set_report(currentReport);
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case MS_BTN2:
|
||||||
|
currentReport = pointing_device_get_report();
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (shift_held && shift_suspended){
|
||||||
|
register_code(KC_LSFT);
|
||||||
|
shift_suspended = false;
|
||||||
|
}
|
||||||
|
//update mouse report here
|
||||||
|
currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
|
||||||
|
} else {
|
||||||
|
//update mouse report here
|
||||||
|
currentReport.buttons &= ~MOUSE_BTN2;
|
||||||
|
}
|
||||||
|
pointing_device_set_report(currentReport);
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case MS_BTN3:
|
||||||
|
currentReport = pointing_device_get_report();
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (shift_held && shift_suspended){
|
||||||
|
register_code(KC_LSFT);
|
||||||
|
shift_suspended = false;
|
||||||
|
}
|
||||||
|
//update mouse report here
|
||||||
|
currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN3 is a const defined in report.h
|
||||||
|
} else {
|
||||||
|
//update mouse report here
|
||||||
|
currentReport.buttons &= ~MOUSE_BTN3;
|
||||||
|
}
|
||||||
|
pointing_device_set_report(currentReport);
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
//Additionally, if NS_ keys are in use, then shift may be held (but is
|
||||||
|
//disabled for the unshifted keycodes to be send. Check the bool and
|
||||||
|
//register shift as necessary.
|
||||||
|
// default:
|
||||||
|
// if (shift_held){
|
||||||
|
// register_code(KC_LSFT);
|
||||||
|
// }
|
||||||
|
// break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
@@ -57,6 +57,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
#define DEBOUNCING_DELAY 5
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
//#define MATRIX_HAS_GHOST
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,9 @@
|
|||||||
/* Locking resynchronize hack */
|
/* Locking resynchronize hack */
|
||||||
#define LOCKING_RESYNC_ENABLE
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Magic Key Options
|
* Magic Key Options
|
||||||
*
|
*
|
||||||
|
|||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
# **DREWSKY'S DZ60 ANSI Layout**
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
Layer 1 is default configuration, for the exception of the Space cadet shifts. Layer 2 is for WASD arrows and Media, which I have included both PREV and NEXT for Windows and macOS. Layer 3 is for RGB underglow. Legends in picture follow Layers. Modifier one is momentary, and the RGB layer is TT (TAP_TOGGLE)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make dz60:drewsky
|
||||||
|
|
||||||
|
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).
|
||||||
Executable
+34
@@ -0,0 +1,34 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
// Helpful defines
|
||||||
|
#define _L0 0
|
||||||
|
#define _L1 1
|
||||||
|
#define _L2 2
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_L0] = LAYOUT_60_ansi(
|
||||||
|
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||||
|
KC_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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, TT(2), KC_RALT, MO(1), KC_RCTL),
|
||||||
|
|
||||||
|
[_L1] = LAYOUT_60_ansi(
|
||||||
|
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_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP,
|
||||||
|
KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDN,
|
||||||
|
KC_NO, KC_MRWD, KC_MFFD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_MSTP, KC_VOLD, KC_VOLU, KC_MPLY, KC__VOLDOWN, KC__VOLUP, KC_TRNS, KC_NO),
|
||||||
|
|
||||||
|
[_L2] = LAYOUT_60_ansi(
|
||||||
|
KC_ESC, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, RGB_HUD, RGB_HUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, RGB_SAD, RGB_SAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, RGB_VAD, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SPD, RGB_SPI, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, RGB_TOG, KC_TRNS, KC_NO, KC_NO, DEBUG)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -56,6 +56,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
#define BACKLIGHT_PIN B5
|
#define BACKLIGHT_PIN B5
|
||||||
#define BACKLIGHT_LEVELS 5
|
#define BACKLIGHT_LEVELS 5
|
||||||
|
|
||||||
|
|||||||
@@ -16,13 +16,6 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONFIG_H
|
#pragma once
|
||||||
#define CONFIG_H
|
|
||||||
|
|
||||||
#include "config_common.h"
|
#include "config_common.h"
|
||||||
|
|
||||||
#ifdef SUBPROJECT_rev1
|
|
||||||
#include "rev1/config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
#ifndef FOURIER_H
|
#pragma once
|
||||||
#define FOURIER_H
|
|
||||||
|
|
||||||
#include "quantum.h"
|
|
||||||
|
|
||||||
#ifdef KEYBOARD_fourier_rev1
|
#ifdef KEYBOARD_fourier_rev1
|
||||||
#include "rev1.h"
|
#include "rev1.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
// Used to create a keymap using only KC_ prefixed keys
|
// Used to create a keymap using only KC_ prefixed keys
|
||||||
#define LAYOUT_kc( \
|
#define LAYOUT_kc( \
|
||||||
LA1, LA2, LA3, LA4, LA5, LA6, RA1, RA2, RA3, RA4, RA5, RA6, RA7, \
|
LA1, LA2, LA3, LA4, LA5, LA6, RA1, RA2, RA3, RA4, RA5, RA6, RA7, \
|
||||||
@@ -20,4 +19,3 @@
|
|||||||
KC_##LC1, KC_##LC2, KC_##LC3, KC_##LC4, KC_##LC5, KC_##LC6, KC_##RC1, KC_##RC3, KC_##RC4, KC_##RC5, KC_##RC6, KC_##RC7, \
|
KC_##LC1, KC_##LC2, KC_##LC3, KC_##LC4, KC_##LC5, KC_##LC6, KC_##RC1, KC_##RC3, KC_##RC4, KC_##RC5, KC_##RC6, KC_##RC7, \
|
||||||
KC_##LD1, KC_##LD2, KC_##LD3, KC_##LD4, KC_##LD5, KC_##RD1, KC_##RD4, KC_##RD5, KC_##RD6, KC_##RD7 \
|
KC_##LD1, KC_##LD2, KC_##LD3, KC_##LD4, KC_##LD5, KC_##RD1, KC_##RD4, KC_##RD5, KC_##RD6, KC_##RD7 \
|
||||||
)
|
)
|
||||||
#endif
|
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
#include <util/twi.h>
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#include <util/twi.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "i2c.h"
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
|
|
||||||
// Limits the amount of we wait for any one i2c transaction.
|
|
||||||
// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
|
|
||||||
// 9 bits, a single transaction will take around 90μs to complete.
|
|
||||||
//
|
|
||||||
// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
|
|
||||||
// poll loop takes at least 8 clock cycles to execute
|
|
||||||
#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
|
|
||||||
|
|
||||||
#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
|
|
||||||
|
|
||||||
volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
|
|
||||||
|
|
||||||
static volatile uint8_t slave_buffer_pos;
|
|
||||||
static volatile bool slave_has_register_set = false;
|
|
||||||
|
|
||||||
// Wait for an i2c operation to finish
|
|
||||||
inline static
|
|
||||||
void i2c_delay(void) {
|
|
||||||
uint16_t lim = 0;
|
|
||||||
while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
|
|
||||||
lim++;
|
|
||||||
|
|
||||||
// easier way, but will wait slightly longer
|
|
||||||
// _delay_us(100);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup twi to run at 100kHz
|
|
||||||
void i2c_master_init(void) {
|
|
||||||
// no prescaler
|
|
||||||
TWSR = 0;
|
|
||||||
// Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
|
|
||||||
// Check datasheets for more info.
|
|
||||||
TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start a transaction with the given i2c slave address. The direction of the
|
|
||||||
// transfer is set with I2C_READ and I2C_WRITE.
|
|
||||||
// returns: 0 => success
|
|
||||||
// 1 => error
|
|
||||||
uint8_t i2c_master_start(uint8_t address) {
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
|
|
||||||
|
|
||||||
i2c_delay();
|
|
||||||
|
|
||||||
// check that we started successfully
|
|
||||||
if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
TWDR = address;
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
|
||||||
|
|
||||||
i2c_delay();
|
|
||||||
|
|
||||||
if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
|
|
||||||
return 1; // slave did not acknowledge
|
|
||||||
else
|
|
||||||
return 0; // success
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Finish the i2c transaction.
|
|
||||||
void i2c_master_stop(void) {
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
|
||||||
|
|
||||||
uint16_t lim = 0;
|
|
||||||
while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
|
|
||||||
lim++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write one byte to the i2c slave.
|
|
||||||
// returns 0 => slave ACK
|
|
||||||
// 1 => slave NACK
|
|
||||||
uint8_t i2c_master_write(uint8_t data) {
|
|
||||||
TWDR = data;
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
|
||||||
|
|
||||||
i2c_delay();
|
|
||||||
|
|
||||||
// check if the slave acknowledged us
|
|
||||||
return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
|
|
||||||
// if ack=0 the acknowledge bit is not set.
|
|
||||||
// returns: byte read from i2c device
|
|
||||||
uint8_t i2c_master_read(int ack) {
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
|
|
||||||
|
|
||||||
i2c_delay();
|
|
||||||
return TWDR;
|
|
||||||
}
|
|
||||||
|
|
||||||
void i2c_reset_state(void) {
|
|
||||||
TWCR = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void i2c_slave_init(uint8_t address) {
|
|
||||||
TWAR = address << 0; // slave i2c address
|
|
||||||
// TWEN - twi enable
|
|
||||||
// TWEA - enable address acknowledgement
|
|
||||||
// TWINT - twi interrupt flag
|
|
||||||
// TWIE - enable the twi interrupt
|
|
||||||
TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISR(TWI_vect);
|
|
||||||
|
|
||||||
ISR(TWI_vect) {
|
|
||||||
uint8_t ack = 1;
|
|
||||||
switch(TW_STATUS) {
|
|
||||||
case TW_SR_SLA_ACK:
|
|
||||||
// this device has been addressed as a slave receiver
|
|
||||||
slave_has_register_set = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TW_SR_DATA_ACK:
|
|
||||||
// this device has received data as a slave receiver
|
|
||||||
// The first byte that we receive in this transaction sets the location
|
|
||||||
// of the read/write location of the slaves memory that it exposes over
|
|
||||||
// i2c. After that, bytes will be written at slave_buffer_pos, incrementing
|
|
||||||
// slave_buffer_pos after each write.
|
|
||||||
if(!slave_has_register_set) {
|
|
||||||
slave_buffer_pos = TWDR;
|
|
||||||
// don't acknowledge the master if this memory loctaion is out of bounds
|
|
||||||
if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
|
|
||||||
ack = 0;
|
|
||||||
slave_buffer_pos = 0;
|
|
||||||
}
|
|
||||||
slave_has_register_set = true;
|
|
||||||
} else {
|
|
||||||
i2c_slave_buffer[slave_buffer_pos] = TWDR;
|
|
||||||
BUFFER_POS_INC();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TW_ST_SLA_ACK:
|
|
||||||
case TW_ST_DATA_ACK:
|
|
||||||
// master has addressed this device as a slave transmitter and is
|
|
||||||
// requesting data.
|
|
||||||
TWDR = i2c_slave_buffer[slave_buffer_pos];
|
|
||||||
BUFFER_POS_INC();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TW_BUS_ERROR: // something went wrong, reset twi state
|
|
||||||
TWCR = 0;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// Reset everything, so we are ready for the next TWI interrupt
|
|
||||||
TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#ifndef I2C_H
|
|
||||||
#define I2C_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#ifndef F_CPU
|
|
||||||
#define F_CPU 16000000UL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define I2C_READ 1
|
|
||||||
#define I2C_WRITE 0
|
|
||||||
|
|
||||||
#define I2C_ACK 1
|
|
||||||
#define I2C_NACK 0
|
|
||||||
|
|
||||||
#define SLAVE_BUFFER_SIZE 0x10
|
|
||||||
|
|
||||||
// i2c SCL clock frequency
|
|
||||||
#define SCL_CLOCK 400000L
|
|
||||||
|
|
||||||
extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
|
|
||||||
|
|
||||||
void i2c_master_init(void);
|
|
||||||
uint8_t i2c_master_start(uint8_t address);
|
|
||||||
void i2c_master_stop(void);
|
|
||||||
uint8_t i2c_master_write(uint8_t data);
|
|
||||||
uint8_t i2c_master_read(int);
|
|
||||||
void i2c_reset_state(void);
|
|
||||||
void i2c_slave_init(uint8_t address);
|
|
||||||
|
|
||||||
|
|
||||||
static inline unsigned char i2c_start_read(unsigned char addr) {
|
|
||||||
return i2c_master_start((addr << 1) | I2C_READ);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned char i2c_start_write(unsigned char addr) {
|
|
||||||
return i2c_master_start((addr << 1) | I2C_WRITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// from SSD1306 scrips
|
|
||||||
extern unsigned char i2c_rep_start(unsigned char addr);
|
|
||||||
extern void i2c_start_wait(unsigned char addr);
|
|
||||||
extern unsigned char i2c_readAck(void);
|
|
||||||
extern unsigned char i2c_readNak(void);
|
|
||||||
extern unsigned char i2c_read(unsigned char ack);
|
|
||||||
|
|
||||||
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -18,14 +18,8 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONFIG_USER_H
|
#pragma once
|
||||||
#define CONFIG_USER_H
|
|
||||||
|
|
||||||
#include "config_common.h"
|
|
||||||
|
|
||||||
/* Use I2C or Serial, not both */
|
/* Use I2C or Serial, not both */
|
||||||
|
|
||||||
#define USE_SERIAL
|
#define USE_SERIAL
|
||||||
// #define USE_I2C
|
// #define USE_I2C
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
extern keymap_config_t keymap_config;
|
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
// 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
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
@@ -14,8 +12,6 @@ enum custom_keycodes {
|
|||||||
QWERTY = SAFE_RANGE,
|
QWERTY = SAFE_RANGE,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _______ KC_TRNS
|
|
||||||
#define XXXXXXX KC_NO
|
|
||||||
#define KC_FN1 MO(_FN1)
|
#define KC_FN1 MO(_FN1)
|
||||||
#define KC_FN2 MO(_FN2)
|
#define KC_FN2 MO(_FN2)
|
||||||
#define KC_SPFN1 LT(_FN1, KC_SPACE)
|
#define KC_SPFN1 LT(_FN1, KC_SPACE)
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
ifndef QUANTUM_DIR
|
|
||||||
include ../../../../Makefile
|
|
||||||
endif
|
|
||||||
@@ -1,467 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2012 Jun Wako <wakojun@gmail.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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* scan matrix
|
|
||||||
*/
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include "wait.h"
|
|
||||||
#include "print.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "matrix.h"
|
|
||||||
#include "split_util.h"
|
|
||||||
#include "pro_micro.h"
|
|
||||||
#include "config.h"
|
|
||||||
#include "timer.h"
|
|
||||||
#include "backlight.h"
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
# include "i2c.h"
|
|
||||||
#else // USE_SERIAL
|
|
||||||
# include "serial.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef DEBOUNCING_DELAY
|
|
||||||
# define DEBOUNCING_DELAY 5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (DEBOUNCING_DELAY > 0)
|
|
||||||
static uint16_t debouncing_time;
|
|
||||||
static bool debouncing = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (MATRIX_COLS <= 8)
|
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
|
||||||
# define matrix_bitpop(i) bitpop(matrix[i])
|
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#else
|
|
||||||
# error "Currently only supports 8 COLS"
|
|
||||||
#endif
|
|
||||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
|
||||||
|
|
||||||
#define ERROR_DISCONNECT_COUNT 5
|
|
||||||
|
|
||||||
#define SERIAL_LED_ADDR 0x00
|
|
||||||
|
|
||||||
#define ROWS_PER_HAND (MATRIX_ROWS/2)
|
|
||||||
|
|
||||||
static uint8_t error_count = 0;
|
|
||||||
|
|
||||||
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
|
||||||
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
|
||||||
|
|
||||||
/* matrix state(1:on, 0:off) */
|
|
||||||
static matrix_row_t matrix[MATRIX_ROWS];
|
|
||||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
|
||||||
|
|
||||||
#if (DIODE_DIRECTION == COL2ROW)
|
|
||||||
static void init_cols(void);
|
|
||||||
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
|
|
||||||
static void unselect_rows(void);
|
|
||||||
static void select_row(uint8_t row);
|
|
||||||
static void unselect_row(uint8_t row);
|
|
||||||
#elif (DIODE_DIRECTION == ROW2COL)
|
|
||||||
static void init_rows(void);
|
|
||||||
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
|
|
||||||
static void unselect_cols(void);
|
|
||||||
static void unselect_col(uint8_t col);
|
|
||||||
static void select_col(uint8_t col);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_kb(void) {
|
|
||||||
matrix_init_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
matrix_scan_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
uint8_t matrix_rows(void)
|
|
||||||
{
|
|
||||||
return MATRIX_ROWS;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
uint8_t matrix_cols(void)
|
|
||||||
{
|
|
||||||
return MATRIX_COLS;
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init(void)
|
|
||||||
{
|
|
||||||
debug_enable = true;
|
|
||||||
debug_matrix = true;
|
|
||||||
debug_mouse = true;
|
|
||||||
// initialize row and col
|
|
||||||
unselect_rows();
|
|
||||||
init_cols();
|
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
|
||||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
|
||||||
matrix[i] = 0;
|
|
||||||
matrix_debouncing[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
matrix_init_quantum();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t _matrix_scan(void)
|
|
||||||
{
|
|
||||||
int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
|
|
||||||
#if (DIODE_DIRECTION == COL2ROW)
|
|
||||||
// Set row, read cols
|
|
||||||
for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
|
|
||||||
# if (DEBOUNCING_DELAY > 0)
|
|
||||||
bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
|
|
||||||
|
|
||||||
if (matrix_changed) {
|
|
||||||
debouncing = true;
|
|
||||||
debouncing_time = timer_read();
|
|
||||||
}
|
|
||||||
|
|
||||||
# else
|
|
||||||
read_cols_on_row(matrix+offset, current_row);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif (DIODE_DIRECTION == ROW2COL)
|
|
||||||
// Set col, read rows
|
|
||||||
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
|
|
||||||
# if (DEBOUNCING_DELAY > 0)
|
|
||||||
bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
|
|
||||||
if (matrix_changed) {
|
|
||||||
debouncing = true;
|
|
||||||
debouncing_time = timer_read();
|
|
||||||
}
|
|
||||||
# else
|
|
||||||
read_rows_on_col(matrix+offset, current_col);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
# if (DEBOUNCING_DELAY > 0)
|
|
||||||
if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
|
|
||||||
for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
|
|
||||||
matrix[i+offset] = matrix_debouncing[i+offset];
|
|
||||||
}
|
|
||||||
debouncing = false;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
|
|
||||||
// Get rows from other half over i2c
|
|
||||||
int i2c_transaction(void) {
|
|
||||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
|
||||||
|
|
||||||
int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
|
|
||||||
if (err) goto i2c_error;
|
|
||||||
|
|
||||||
// start of matrix stored at 0x00
|
|
||||||
err = i2c_master_write(0x00);
|
|
||||||
if (err) goto i2c_error;
|
|
||||||
|
|
||||||
// Start read
|
|
||||||
err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
|
|
||||||
if (err) goto i2c_error;
|
|
||||||
|
|
||||||
if (!err) {
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < ROWS_PER_HAND-1; ++i) {
|
|
||||||
matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
|
|
||||||
}
|
|
||||||
matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
|
|
||||||
i2c_master_stop();
|
|
||||||
} else {
|
|
||||||
i2c_error: // the cable is disconnceted, or something else went wrong
|
|
||||||
i2c_reset_state();
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else // USE_SERIAL
|
|
||||||
|
|
||||||
int serial_transaction(void) {
|
|
||||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
|
||||||
|
|
||||||
if (serial_update_buffers()) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
|
||||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
// Write backlight level for slave to read
|
|
||||||
serial_master_buffer[SERIAL_LED_ADDR] = get_backlight_level();
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint8_t matrix_scan(void)
|
|
||||||
{
|
|
||||||
uint8_t ret = _matrix_scan();
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
if( i2c_transaction() ) {
|
|
||||||
#else // USE_SERIAL
|
|
||||||
if( serial_transaction() ) {
|
|
||||||
#endif
|
|
||||||
// turn on the indicator led when halves are disconnected
|
|
||||||
TXLED1;
|
|
||||||
|
|
||||||
error_count++;
|
|
||||||
|
|
||||||
if (error_count > ERROR_DISCONNECT_COUNT) {
|
|
||||||
// reset other half if disconnected
|
|
||||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
|
||||||
matrix[slaveOffset+i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// turn off the indicator led on no error
|
|
||||||
TXLED0;
|
|
||||||
error_count = 0;
|
|
||||||
}
|
|
||||||
matrix_scan_quantum();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_slave_scan(void) {
|
|
||||||
_matrix_scan();
|
|
||||||
|
|
||||||
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
|
||||||
i2c_slave_buffer[i] = matrix[offset+i];
|
|
||||||
}
|
|
||||||
#else // USE_SERIAL
|
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
|
||||||
serial_slave_buffer[i] = matrix[offset+i];
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
// Read backlight level sent from master and update level on slave
|
|
||||||
backlight_set(serial_master_buffer[SERIAL_LED_ADDR]);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool matrix_is_modified(void)
|
|
||||||
{
|
|
||||||
if (debouncing) return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
bool matrix_is_on(uint8_t row, uint8_t col)
|
|
||||||
{
|
|
||||||
return (matrix[row] & ((matrix_row_t)1<<col));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
matrix_row_t matrix_get_row(uint8_t row)
|
|
||||||
{
|
|
||||||
return matrix[row];
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_print(void)
|
|
||||||
{
|
|
||||||
print("\nr/c 0123456789ABCDEF\n");
|
|
||||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
|
||||||
phex(row); print(": ");
|
|
||||||
pbin_reverse16(matrix_get_row(row));
|
|
||||||
print("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t matrix_key_count(void)
|
|
||||||
{
|
|
||||||
uint8_t count = 0;
|
|
||||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
|
||||||
count += bitpop16(matrix[i]);
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (DIODE_DIRECTION == COL2ROW)
|
|
||||||
|
|
||||||
static void init_cols(void)
|
|
||||||
{
|
|
||||||
for(uint8_t x = 0; x < MATRIX_COLS; x++) {
|
|
||||||
uint8_t pin = col_pins[x];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
|
||||||
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
|
||||||
{
|
|
||||||
// Store last value of row prior to reading
|
|
||||||
matrix_row_t last_row_value = current_matrix[current_row];
|
|
||||||
|
|
||||||
// Clear data in matrix row
|
|
||||||
current_matrix[current_row] = 0;
|
|
||||||
|
|
||||||
// Select row and wait for row selecton to stabilize
|
|
||||||
select_row(current_row);
|
|
||||||
wait_us(30);
|
|
||||||
|
|
||||||
// For each col...
|
|
||||||
for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
|
||||||
|
|
||||||
// Select the col pin to read (active low)
|
|
||||||
uint8_t pin = col_pins[col_index];
|
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unselect row
|
|
||||||
unselect_row(current_row);
|
|
||||||
|
|
||||||
return (last_row_value != current_matrix[current_row]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void select_row(uint8_t row)
|
|
||||||
{
|
|
||||||
uint8_t pin = row_pins[row];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
|
|
||||||
_SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
|
|
||||||
}
|
|
||||||
|
|
||||||
static void unselect_row(uint8_t row)
|
|
||||||
{
|
|
||||||
uint8_t pin = row_pins[row];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
|
||||||
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
|
||||||
}
|
|
||||||
|
|
||||||
static void unselect_rows(void)
|
|
||||||
{
|
|
||||||
for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
|
|
||||||
uint8_t pin = row_pins[x];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
|
||||||
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif (DIODE_DIRECTION == ROW2COL)
|
|
||||||
|
|
||||||
static void init_rows(void)
|
|
||||||
{
|
|
||||||
for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
|
|
||||||
uint8_t pin = row_pins[x];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
|
||||||
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
|
||||||
{
|
|
||||||
bool matrix_changed = false;
|
|
||||||
|
|
||||||
// Select col and wait for col selecton to stabilize
|
|
||||||
select_col(current_col);
|
|
||||||
wait_us(30);
|
|
||||||
|
|
||||||
// For each row...
|
|
||||||
for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
|
|
||||||
{
|
|
||||||
|
|
||||||
// Store last value of row prior to reading
|
|
||||||
matrix_row_t last_row_value = current_matrix[row_index];
|
|
||||||
|
|
||||||
// Check row pin state
|
|
||||||
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
|
||||||
{
|
|
||||||
// Pin LO, set col bit
|
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Pin HI, clear col bit
|
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
|
||||||
if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
|
|
||||||
{
|
|
||||||
matrix_changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unselect col
|
|
||||||
unselect_col(current_col);
|
|
||||||
|
|
||||||
return matrix_changed;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void select_col(uint8_t col)
|
|
||||||
{
|
|
||||||
uint8_t pin = col_pins[col];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
|
|
||||||
_SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
|
|
||||||
}
|
|
||||||
|
|
||||||
static void unselect_col(uint8_t col)
|
|
||||||
{
|
|
||||||
uint8_t pin = col_pins[col];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
|
||||||
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
|
||||||
}
|
|
||||||
|
|
||||||
static void unselect_cols(void)
|
|
||||||
{
|
|
||||||
for(uint8_t x = 0; x < MATRIX_COLS; x++) {
|
|
||||||
uint8_t pin = col_pins[x];
|
|
||||||
_SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
|
|
||||||
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -16,10 +16,7 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef REV1_CONFIG_H
|
#pragma once
|
||||||
#define REV1_CONFIG_H
|
|
||||||
|
|
||||||
#include "../config.h"
|
|
||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
#define VENDOR_ID 0xCB10
|
#define VENDOR_ID 0xCB10
|
||||||
@@ -38,6 +35,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_ROW_PINS { F4, D7, E6, B4 }
|
#define MATRIX_ROW_PINS { F4, D7, E6, B4 }
|
||||||
#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 }
|
#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 }
|
||||||
|
|
||||||
|
/* Split Defines */
|
||||||
|
#define SPLIT_HAND_PIN D2
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
/* define if matrix has ghost */
|
/* define if matrix has ghost */
|
||||||
//#define MATRIX_HAS_GHOST
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
@@ -56,7 +58,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
#define RGB_DI_PIN D3
|
#define RGB_DI_PIN D3
|
||||||
|
|
||||||
#define RGBLIGHT_ANIMATIONS
|
#define RGBLIGHT_ANIMATIONS
|
||||||
#define RGBLED_NUM 14 // Number of LEDs
|
#define RGBLED_NUM 14 // Number of LEDs
|
||||||
|
|
||||||
@@ -77,6 +78,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
//#define NO_ACTION_ONESHOT
|
//#define NO_ACTION_ONESHOT
|
||||||
//#define NO_ACTION_MACRO
|
//#define NO_ACTION_MACRO
|
||||||
//#define NO_ACTION_FUNCTION
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
#include "fourier.h"
|
#include "fourier.h"
|
||||||
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
matrix_init_user();
|
matrix_init_user();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1,19 +1,8 @@
|
|||||||
#ifndef REV1_H
|
#pragma once
|
||||||
#define REV1_H
|
|
||||||
|
|
||||||
#include "../fourier.h"
|
|
||||||
|
|
||||||
|
#include "fourier.h"
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
#include <stddef.h>
|
|
||||||
#ifdef __AVR__
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define LAYOUT( \
|
#define LAYOUT( \
|
||||||
LA1, LA2, LA3, LA4, LA5, LA6, RA1, RA2, RA3, RA4, RA5, RA6, RA7, \
|
LA1, LA2, LA3, LA4, LA5, LA6, RA1, RA2, RA3, RA4, RA5, RA6, RA7, \
|
||||||
LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB7, \
|
LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB7, \
|
||||||
@@ -30,5 +19,3 @@
|
|||||||
{ RC1, KC_NO, RC3, RC4, RC5, RC6, RC7}, \
|
{ RC1, KC_NO, RC3, RC4, RC5, RC6, RC7}, \
|
||||||
{ RD1, KC_NO, KC_NO, RD4, RD5, RD6, RD7} \
|
{ RD1, KC_NO, KC_NO, RD4, RD5, RD6, RD7} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,10 +1,4 @@
|
|||||||
SRC += matrix.c \
|
|
||||||
i2c.c \
|
|
||||||
split_util.c \
|
|
||||||
serial.c
|
|
||||||
|
|
||||||
# MCU name
|
# MCU name
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
@@ -41,7 +35,7 @@ F_USB = $(F_CPU)
|
|||||||
|
|
||||||
# Bootloader
|
# Bootloader
|
||||||
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||||
# different sizes, comment this out, and the correct address will be loaded
|
# different sizes, comment this out, and the correct address will be loaded
|
||||||
# automatically (+60). See bootloader.mk for all options.
|
# automatically (+60). See bootloader.mk for all options.
|
||||||
BOOTLOADER = caterina
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
@@ -63,12 +57,12 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||||
SUBPROJECT_rev1 = yes
|
SUBPROJECT_rev1 = yes
|
||||||
USE_I2C = yes
|
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
CUSTOM_MATRIX = yes
|
SPLIT_KEYBOARD = yes
|
||||||
|
|
||||||
DEFAULT_FOLDER = fourier/rev1
|
DEFAULT_FOLDER = fourier/rev1
|
||||||
@@ -1,228 +0,0 @@
|
|||||||
/*
|
|
||||||
* WARNING: be careful changing this code, it is very timing dependent
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef F_CPU
|
|
||||||
#define F_CPU 16000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#include <util/delay.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "serial.h"
|
|
||||||
|
|
||||||
#ifndef USE_I2C
|
|
||||||
|
|
||||||
// Serial pulse period in microseconds. Its probably a bad idea to lower this
|
|
||||||
// value.
|
|
||||||
#define SERIAL_DELAY 24
|
|
||||||
|
|
||||||
uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
|
|
||||||
uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
|
|
||||||
|
|
||||||
#define SLAVE_DATA_CORRUPT (1<<0)
|
|
||||||
volatile uint8_t status = 0;
|
|
||||||
|
|
||||||
inline static
|
|
||||||
void serial_delay(void) {
|
|
||||||
_delay_us(SERIAL_DELAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static
|
|
||||||
void serial_output(void) {
|
|
||||||
SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
// make the serial pin an input with pull-up resistor
|
|
||||||
inline static
|
|
||||||
void serial_input(void) {
|
|
||||||
SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
|
|
||||||
SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static
|
|
||||||
uint8_t serial_read_pin(void) {
|
|
||||||
return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static
|
|
||||||
void serial_low(void) {
|
|
||||||
SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static
|
|
||||||
void serial_high(void) {
|
|
||||||
SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial_master_init(void) {
|
|
||||||
serial_output();
|
|
||||||
serial_high();
|
|
||||||
}
|
|
||||||
|
|
||||||
void serial_slave_init(void) {
|
|
||||||
serial_input();
|
|
||||||
|
|
||||||
// Enable INT0
|
|
||||||
EIMSK |= _BV(INT0);
|
|
||||||
// Trigger on falling edge of INT0
|
|
||||||
EICRA &= ~(_BV(ISC00) | _BV(ISC01));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used by the master to synchronize timing with the slave.
|
|
||||||
static
|
|
||||||
void sync_recv(void) {
|
|
||||||
serial_input();
|
|
||||||
// This shouldn't hang if the slave disconnects because the
|
|
||||||
// serial line will float to high if the slave does disconnect.
|
|
||||||
while (!serial_read_pin());
|
|
||||||
serial_delay();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used by the slave to send a synchronization signal to the master.
|
|
||||||
static
|
|
||||||
void sync_send(void) {
|
|
||||||
serial_output();
|
|
||||||
|
|
||||||
serial_low();
|
|
||||||
serial_delay();
|
|
||||||
|
|
||||||
serial_high();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reads a byte from the serial line
|
|
||||||
static
|
|
||||||
uint8_t serial_read_byte(void) {
|
|
||||||
uint8_t byte = 0;
|
|
||||||
serial_input();
|
|
||||||
for ( uint8_t i = 0; i < 8; ++i) {
|
|
||||||
byte = (byte << 1) | serial_read_pin();
|
|
||||||
serial_delay();
|
|
||||||
_delay_us(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return byte;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sends a byte with MSB ordering
|
|
||||||
static
|
|
||||||
void serial_write_byte(uint8_t data) {
|
|
||||||
uint8_t b = 8;
|
|
||||||
serial_output();
|
|
||||||
while( b-- ) {
|
|
||||||
if(data & (1 << b)) {
|
|
||||||
serial_high();
|
|
||||||
} else {
|
|
||||||
serial_low();
|
|
||||||
}
|
|
||||||
serial_delay();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// interrupt handle to be used by the slave device
|
|
||||||
ISR(SERIAL_PIN_INTERRUPT) {
|
|
||||||
sync_send();
|
|
||||||
|
|
||||||
uint8_t checksum = 0;
|
|
||||||
for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
|
|
||||||
serial_write_byte(serial_slave_buffer[i]);
|
|
||||||
sync_send();
|
|
||||||
checksum += serial_slave_buffer[i];
|
|
||||||
}
|
|
||||||
serial_write_byte(checksum);
|
|
||||||
sync_send();
|
|
||||||
|
|
||||||
// wait for the sync to finish sending
|
|
||||||
serial_delay();
|
|
||||||
|
|
||||||
// read the middle of pulses
|
|
||||||
_delay_us(SERIAL_DELAY/2);
|
|
||||||
|
|
||||||
uint8_t checksum_computed = 0;
|
|
||||||
for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
|
|
||||||
serial_master_buffer[i] = serial_read_byte();
|
|
||||||
sync_send();
|
|
||||||
checksum_computed += serial_master_buffer[i];
|
|
||||||
}
|
|
||||||
uint8_t checksum_received = serial_read_byte();
|
|
||||||
sync_send();
|
|
||||||
|
|
||||||
serial_input(); // end transaction
|
|
||||||
|
|
||||||
if ( checksum_computed != checksum_received ) {
|
|
||||||
status |= SLAVE_DATA_CORRUPT;
|
|
||||||
} else {
|
|
||||||
status &= ~SLAVE_DATA_CORRUPT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
bool serial_slave_DATA_CORRUPT(void) {
|
|
||||||
return status & SLAVE_DATA_CORRUPT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copies the serial_slave_buffer to the master and sends the
|
|
||||||
// serial_master_buffer to the slave.
|
|
||||||
//
|
|
||||||
// Returns:
|
|
||||||
// 0 => no error
|
|
||||||
// 1 => slave did not respond
|
|
||||||
int serial_update_buffers(void) {
|
|
||||||
// this code is very time dependent, so we need to disable interrupts
|
|
||||||
cli();
|
|
||||||
|
|
||||||
// signal to the slave that we want to start a transaction
|
|
||||||
serial_output();
|
|
||||||
serial_low();
|
|
||||||
_delay_us(1);
|
|
||||||
|
|
||||||
// wait for the slaves response
|
|
||||||
serial_input();
|
|
||||||
serial_high();
|
|
||||||
_delay_us(SERIAL_DELAY);
|
|
||||||
|
|
||||||
// check if the slave is present
|
|
||||||
if (serial_read_pin()) {
|
|
||||||
// slave failed to pull the line low, assume not present
|
|
||||||
sei();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the slave is present syncronize with it
|
|
||||||
sync_recv();
|
|
||||||
|
|
||||||
uint8_t checksum_computed = 0;
|
|
||||||
// receive data from the slave
|
|
||||||
for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
|
|
||||||
serial_slave_buffer[i] = serial_read_byte();
|
|
||||||
sync_recv();
|
|
||||||
checksum_computed += serial_slave_buffer[i];
|
|
||||||
}
|
|
||||||
uint8_t checksum_received = serial_read_byte();
|
|
||||||
sync_recv();
|
|
||||||
|
|
||||||
if (checksum_computed != checksum_received) {
|
|
||||||
sei();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t checksum = 0;
|
|
||||||
// send data to the slave
|
|
||||||
for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
|
|
||||||
serial_write_byte(serial_master_buffer[i]);
|
|
||||||
sync_recv();
|
|
||||||
checksum += serial_master_buffer[i];
|
|
||||||
}
|
|
||||||
serial_write_byte(checksum);
|
|
||||||
sync_recv();
|
|
||||||
|
|
||||||
// always, release the line when not in use
|
|
||||||
serial_output();
|
|
||||||
serial_high();
|
|
||||||
|
|
||||||
sei();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#ifndef MY_SERIAL_H
|
|
||||||
#define MY_SERIAL_H
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
/* TODO: some defines for interrupt setup */
|
|
||||||
#define SERIAL_PIN_DDR DDRD
|
|
||||||
#define SERIAL_PIN_PORT PORTD
|
|
||||||
#define SERIAL_PIN_INPUT PIND
|
|
||||||
#define SERIAL_PIN_MASK _BV(PD0)
|
|
||||||
#define SERIAL_PIN_INTERRUPT INT0_vect
|
|
||||||
|
|
||||||
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
|
|
||||||
#define SERIAL_MASTER_BUFFER_LENGTH 1
|
|
||||||
|
|
||||||
// Buffers for master - slave communication
|
|
||||||
extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
|
|
||||||
extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
|
|
||||||
|
|
||||||
void serial_master_init(void);
|
|
||||||
void serial_slave_init(void);
|
|
||||||
int serial_update_buffers(void);
|
|
||||||
bool serial_slave_data_corrupt(void);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
#include <avr/io.h>
|
|
||||||
#include <avr/wdt.h>
|
|
||||||
#include <avr/power.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#include <util/delay.h>
|
|
||||||
#include <avr/eeprom.h>
|
|
||||||
#include "split_util.h"
|
|
||||||
#include "matrix.h"
|
|
||||||
#include "keyboard.h"
|
|
||||||
#include "config.h"
|
|
||||||
#include "timer.h"
|
|
||||||
#include "pincontrol.h"
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
# include "i2c.h"
|
|
||||||
#else
|
|
||||||
# include "serial.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
volatile bool isLeftHand = true;
|
|
||||||
|
|
||||||
static void setup_handedness(void) {
|
|
||||||
// Test D2 pin for handedness, if D2 is grounded, it's the right hand
|
|
||||||
pinMode(D2, PinDirectionInput);
|
|
||||||
isLeftHand = digitalRead(D2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void keyboard_master_setup(void) {
|
|
||||||
#ifdef USE_I2C
|
|
||||||
i2c_master_init();
|
|
||||||
#ifdef SSD1306OLED
|
|
||||||
matrix_master_OLED_init();
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
serial_master_init();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void keyboard_slave_setup(void) {
|
|
||||||
timer_init();
|
|
||||||
#ifdef USE_I2C
|
|
||||||
i2c_slave_init(SLAVE_I2C_ADDRESS);
|
|
||||||
#else
|
|
||||||
serial_slave_init();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool has_usb(void) {
|
|
||||||
USBCON |= (1 << OTGPADE); //enables VBUS pad
|
|
||||||
_delay_us(5);
|
|
||||||
return (USBSTA & (1<<VBUS)); //checks state of VBUS
|
|
||||||
}
|
|
||||||
|
|
||||||
void split_keyboard_setup(void) {
|
|
||||||
setup_handedness();
|
|
||||||
|
|
||||||
if (has_usb()) {
|
|
||||||
keyboard_master_setup();
|
|
||||||
} else {
|
|
||||||
keyboard_slave_setup();
|
|
||||||
}
|
|
||||||
sei();
|
|
||||||
}
|
|
||||||
|
|
||||||
void keyboard_slave_loop(void) {
|
|
||||||
matrix_init();
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
matrix_slave_scan();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// this code runs before the usb and keyboard is initialized
|
|
||||||
void matrix_setup(void) {
|
|
||||||
split_keyboard_setup();
|
|
||||||
|
|
||||||
if (!has_usb()) {
|
|
||||||
keyboard_slave_loop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#ifndef SPLIT_KEYBOARD_UTIL_H
|
|
||||||
#define SPLIT_KEYBOARD_UTIL_H
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "eeconfig.h"
|
|
||||||
|
|
||||||
#define SLAVE_I2C_ADDRESS 0x32
|
|
||||||
|
|
||||||
extern volatile bool isLeftHand;
|
|
||||||
|
|
||||||
// slave version of matix scan, defined in matrix.c
|
|
||||||
void matrix_slave_scan(void);
|
|
||||||
|
|
||||||
void split_keyboard_setup(void);
|
|
||||||
bool has_usb(void);
|
|
||||||
void keyboard_slave_loop(void);
|
|
||||||
|
|
||||||
void matrix_master_OLED_init (void);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -18,10 +18,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
*/
|
*/
|
||||||
[_QWERTY] = LAYOUT_wrapper(
|
[_QWERTY] = LAYOUT_wrapper(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
||||||
KC_TAB, _________________QWERTY_L1_________________, KC_P7, KC_P8, KC_P9, _________________QWERTY_R1_________________, KC_BSPC, \
|
LT_FN(KC_TAB), _________________QWERTY_L1_________________, KC_P7, KC_P8, KC_P9, _________________QWERTY_R1_________________, KC_BSPC, \
|
||||||
KC_CAPS, _________________QWERTY_L2_________________, KC_P4, KC_P5, KC_P6, _________________QWERTY_R2_________________, CTL_ENT, \
|
KC_CAPS, _________________QWERTY_L2_________________, KC_P4, KC_P5, KC_P6, _________________QWERTY_R2_________________, CTL_ENT, \
|
||||||
KC_LSFT, _________________QWERTY_L3_________________, KC_P1, KC_P2, KC_P3, _________________QWERTY_R3_________________, LT_RAI(KC_MINS), \
|
KC_LSFT, _________________QWERTY_L3_________________, KC_P1, KC_P2, KC_P3, _________________QWERTY_R3_________________, LT_RAI(KC_MINS), \
|
||||||
KC_ESC, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL \
|
KC_ESC, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_DEL \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Colemak
|
/* Colemak
|
||||||
@@ -39,10 +39,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
*/
|
*/
|
||||||
[_COLEMAK] = LAYOUT_wrapper(
|
[_COLEMAK] = LAYOUT_wrapper(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
||||||
KC_TAB, _________________COLEMAK_L1________________, KC_P7, KC_P8, KC_P9, _________________COLEMAK_R1________________, KC_BSPC, \
|
LT_FN(KC_TAB), _________________COLEMAK_L1________________, KC_P7, KC_P8, KC_P9, _________________COLEMAK_R1________________, KC_BSPC, \
|
||||||
KC_LCTRL, _________________COLEMAK_L2________________, KC_P4, KC_P5, KC_P6, _________________COLEMAK_R2________________, CTL_ENT, \
|
KC_LCTRL, _________________COLEMAK_L2________________, KC_P4, KC_P5, KC_P6, _________________COLEMAK_R2________________, CTL_ENT, \
|
||||||
KC_LSFT, _________________COLEMAK_L3________________, KC_P1, KC_P2, KC_P3, _________________COLEMAK_R3________________, LT_RAI(KC_MINS), \
|
KC_LSFT, _________________COLEMAK_L3________________, KC_P1, KC_P2, KC_P3, _________________COLEMAK_R3________________, LT_RAI(KC_MINS), \
|
||||||
KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL \
|
KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_DEL \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Dvorak
|
/* Dvorak
|
||||||
@@ -60,10 +60,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
*/
|
*/
|
||||||
[_DVORAK] = LAYOUT_wrapper(
|
[_DVORAK] = LAYOUT_wrapper(
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
||||||
KC_TAB, _________________DVORAK_L1_________________, KC_P7, KC_P8, KC_P9, _________________DVORAK_R1_________________, KC_BSPC, \
|
LT_FN(KC_TAB), _________________DVORAK_L1_________________, KC_P7, KC_P8, KC_P9, _________________DVORAK_R1_________________, KC_BSPC, \
|
||||||
KC_LCTL, _________________DVORAK_L2_________________, KC_P4, KC_P5, KC_P6, _________________DVORAK_R2_________________, CTL_ENT, \
|
KC_LCTL, _________________DVORAK_L2_________________, KC_P4, KC_P5, KC_P6, _________________DVORAK_R2_________________, CTL_ENT, \
|
||||||
KC_LSFT, _________________DVORAK_L3_________________, KC_P1, KC_P2, KC_P3, _________________DVORAK_R3_________________, LT_RAI(KC_MINS), \
|
KC_LSFT, _________________DVORAK_L3_________________, KC_P1, KC_P2, KC_P3, _________________DVORAK_R3_________________, LT_RAI(KC_MINS), \
|
||||||
KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL \
|
KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_DEL \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Lower
|
/* Lower
|
||||||
@@ -102,10 +102,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
*/
|
*/
|
||||||
[_RAISE] = LAYOUT_wrapper(
|
[_RAISE] = LAYOUT_wrapper(
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
|
________________NUMBER_LEFT________________, KC_6, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_PLUS, KC_BSLS, \
|
||||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
|
KC_DEL, KC_A, KC_UP, KC_D, KC_PSCR, KC_VOLU, _______, _______, _______, KC_4, KC_5, KC_6, KC_PAST, KC_COLN, KC_QUOT, \
|
||||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
|
_______, KC_LEFT, KC_DOWN, KC_RIGHT,KC__MUTE, KC_VOLD, _______, _______, _______, KC_1, KC_2, KC_3, KC_UP, KC_SLSH, _______, \
|
||||||
_______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
_______, _______, _______, _______, _______, KC_SPC, _______, _______, KC_SPC, KC_0, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NLCK \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* FN layer on Esc key
|
||||||
|
* ,------+------+------+------+------+------------------------------------------------.
|
||||||
|
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||||
|
* | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | + |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | _ | = | [ | ] | ' |
|
||||||
|
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | { | } |Enter |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||||
|
* '------+------+------+------+------+------+------+------+------+------+------+------+--------------------'
|
||||||
|
*/
|
||||||
|
[_FNLAYER] = LAYOUT_wrapper(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||||
|
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, \
|
||||||
|
_______, __________________LONG_FUNC_LEFT___________________, _______, _______, _______, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT, \
|
||||||
|
_______, __________________LONG_FUNC_RIGHT__________________, _______, _______, _______,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* Mouse Layer (semi-col)
|
/* Mouse Layer (semi-col)
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
/* Copyright 2018 Jack Humbert <[email protected]>
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*/
|
|
||||||
#ifndef REV3_H
|
|
||||||
#define REV3_H
|
|
||||||
|
|
||||||
#include "hadron.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "108 Key with TrackPoint",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "mkem114",
|
||||||
|
"width": 22.5,
|
||||||
|
"height": 7.5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"key_count": 111,
|
||||||
|
"layout": [
|
||||||
|
{"label":"Esc", "x":0, "y":0},
|
||||||
|
{"label":"F1", "x":2, "y":0},
|
||||||
|
{"label":"F2", "x":3, "y":0},
|
||||||
|
{"label":"F3", "x":4, "y":0},
|
||||||
|
{"label":"F4", "x":5, "y":0},
|
||||||
|
{"label":"F5", "x":6.5, "y":0},
|
||||||
|
{"label":"F6", "x":7.5, "y":0},
|
||||||
|
{"label":"F7", "x":8.5, "y":0},
|
||||||
|
{"label":"F8", "x":9.5, "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":"Print Screen", "x":15.25, "y":0},
|
||||||
|
{"label":"Scroll Lock", "x":16.25, "y":0},
|
||||||
|
{"label":"Pause", "x":17.25, "y":0},
|
||||||
|
{"label":"Mute", "x":18.5, "y":0},
|
||||||
|
{"label":"Previous", "x":19.5, "y":0},
|
||||||
|
{"label":"Next", "x":20.5, "y":0},
|
||||||
|
{"label":"Play", "x":21.5, "y":0},
|
||||||
|
{"label":"`", "x":0, "y":1.5},
|
||||||
|
{"label":"1", "x":1, "y":1.5},
|
||||||
|
{"label":"2", "x":2, "y":1.5},
|
||||||
|
{"label":"3", "x":3, "y":1.5},
|
||||||
|
{"label":"4", "x":4, "y":1.5},
|
||||||
|
{"label":"5", "x":5, "y":1.5},
|
||||||
|
{"label":"6", "x":6, "y":1.5},
|
||||||
|
{"label":"7", "x":7, "y":1.5},
|
||||||
|
{"label":"8", "x":8, "y":1.5},
|
||||||
|
{"label":"9", "x":9, "y":1.5},
|
||||||
|
{"label":"0", "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":"Insert", "x":15.25, "y":1.5},
|
||||||
|
{"label":"Home", "x":16.25, "y":1.5},
|
||||||
|
{"label":"Page Up", "x":17.25, "y":1.5},
|
||||||
|
{"label":"Num Lock", "x":18.5, "y":1.5},
|
||||||
|
{"label":"/", "x":19.5, "y":1.5},
|
||||||
|
{"label":"*", "x":20.5, "y":1.5},
|
||||||
|
{"label":"-", "x":21.5, "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":"Delete", "x":15.25, "y":2.5},
|
||||||
|
{"label":"End", "x":16.25, "y":2.5},
|
||||||
|
{"label":"Page Down", "x":17.25, "y":2.5},
|
||||||
|
{"label":"7", "x":18.5, "y":2.5},
|
||||||
|
{"label":"8", "x":19.5, "y":2.5},
|
||||||
|
{"label":"9", "x":20.5, "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":18.5, "y":3.5},
|
||||||
|
{"label":"5", "x":19.5, "y":3.5},
|
||||||
|
{"label":"6", "x":20.5, "y":3.5},
|
||||||
|
{"label":"+", "x":21.5, "y":2.5, "h":2},
|
||||||
|
{"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":2.75},
|
||||||
|
{"label":"Up", "x":16.25, "y":4.5},
|
||||||
|
{"label":"1", "x":18.5, "y":4.5},
|
||||||
|
{"label":"2", "x":19.5, "y":4.5},
|
||||||
|
{"label":"3", "x":20.5, "y":4.5},
|
||||||
|
{"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
|
||||||
|
{"label":"LGUI", "x":1.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.75, "y":5.5, "w":6.25},
|
||||||
|
{"label":"Alt", "x":10, "y":5.5, "w":1.25},
|
||||||
|
{"label":"RGUI", "x":11.25, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
|
||||||
|
{"label":"Left", "x":15.25, "y":5.5},
|
||||||
|
{"label":"Down", "x":16.25, "y":5.5},
|
||||||
|
{"label":"Right", "x":17.25, "y":5.5},
|
||||||
|
{"label":"0", "x":18.5, "y":5.5, "w":2},
|
||||||
|
{"label":".", "x":20.5, "y":5.5},
|
||||||
|
{"label":"Enter", "x":21.5, "y":4.5, "h":2},
|
||||||
|
{"label":"Mouse1", "x":5.25, "y":6.5},
|
||||||
|
{"label":"Mouse3", "x":6.25, "y":6.5},
|
||||||
|
{"label":"Mouse2", "x":7.25, "y":6.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -9,7 +9,7 @@ Hardware Supported (tested): Teensy++ 2.0
|
|||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make handwired/108keyTrackpoint:default
|
make handwired/108key_trackpoint: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).
|
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).
|
||||||
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
CMD60 keyboard firmware
|
|
||||||
======================
|
|
||||||
|
|
||||||
##CMD60
|
|
||||||
|
|
||||||
This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
|
|
||||||
with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
|
|
||||||
and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
|
|
||||||
achieve a higher level of productivity if you take the time to learn its function layers.
|
|
||||||
|
|
||||||
## Quantum MK Firmware
|
|
||||||
|
|
||||||
For the full Quantum feature list, see [the parent readme.md](/docs/README.md).
|
|
||||||
|
|
||||||
## Building
|
|
||||||
|
|
||||||
Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 folder.
|
|
||||||
Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
|
|
||||||
the Teensy Loader to program your .hex file.
|
|
||||||
|
|
||||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
|
||||||
|
|
||||||
### Default
|
|
||||||
|
|
||||||
To build with the default keymap, simply run `make`.
|
|
||||||
|
|
||||||
### Other Keymaps
|
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ make keymap=[default|jack|<name>]
|
|
||||||
```
|
|
||||||
|
|
||||||
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
#include "CMD60.h"
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
[0] = KEYMAP( /* CMD60 - QWERTY */
|
|
||||||
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_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, \
|
|
||||||
LT(3, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, 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_NO, KC_NO, KC_RSFT, \
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
|
|
||||||
),
|
|
||||||
[1] = KEYMAP( /* CMD60 - GameMode */
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
|
||||||
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_RSFT, \
|
|
||||||
KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
|
||||||
),
|
|
||||||
[2] = KEYMAP( /* CMD60 - Arrows */
|
|
||||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
|
|
||||||
KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
|
||||||
),
|
|
||||||
[3] = KEYMAP( /* CMD60 - Functions */
|
|
||||||
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_AUDIO_MUTE, KC_BSPC, KC_PGUP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_PAUSE, KC_SLCK, KC_PSCREEN, \
|
|
||||||
KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_INSERT, KC_NO, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
|
||||||
),
|
|
||||||
[4] = KEYMAP( /* CMD60 - Mouse */
|
|
||||||
KC_SYSTEM_SLEEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_NO, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_WH_UP, KC_MS_BTN3, KC_MS_WH_DOWN, KC_NO, KC_NO, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
|
||||||
),
|
|
||||||
[5] = KEYMAP( /* CMD60 - Media */
|
|
||||||
KC_SYSTEM_WAKE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WWW_BACK, KC_WWW_FORWARD, KC_NO, KC_NO, KC_WWW_REFRESH, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|
||||||
{
|
|
||||||
// MACRODOWN only works in this function
|
|
||||||
switch(id) {
|
|
||||||
case 0:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
register_code(KC_RSFT);
|
|
||||||
} else {
|
|
||||||
unregister_code(KC_RSFT);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return MACRO_NONE;
|
|
||||||
};
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "CMD60.h"
|
#include "cmd60.h"
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
// put your keyboard start-up code here
|
// put your keyboard start-up code here
|
||||||
@@ -3,18 +3,18 @@
|
|||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define KEYMAP( \
|
#define LAYOUT( \
|
||||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
|
||||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
|
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, K2C, K2D, \
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
|
||||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3D, \
|
||||||
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
|
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
|
||||||
) { \
|
) { \
|
||||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
|
||||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
|
{ 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, K2C, K2D }, \
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
|
||||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, KC_NO, K3D }, \
|
||||||
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \
|
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
File renamed without changes.
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "CMD60",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 15,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"`", "x":0, "y":0},
|
||||||
|
{"label":"1", "x":1, "y":0},
|
||||||
|
{"label":"2", "x":2, "y":0},
|
||||||
|
{"label":"3", "x":3, "y":0},
|
||||||
|
{"label":"4", "x":4, "y":0},
|
||||||
|
{"label":"5", "x":5, "y":0},
|
||||||
|
{"label":"6", "x":6, "y":0},
|
||||||
|
{"label":"7", "x":7, "y":0},
|
||||||
|
{"label":"8", "x":8, "y":0},
|
||||||
|
{"label":"9", "x":9, "y":0},
|
||||||
|
{"label":"0", "x":10, "y":0},
|
||||||
|
{"label":"-", "x":11, "y":0},
|
||||||
|
{"label":"=", "x":12, "y":0},
|
||||||
|
{"label":"Backspace", "x":13, "y":0, "w":2},
|
||||||
|
{"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.25},
|
||||||
|
{"label":"Z", "x":2.25, "y":3},
|
||||||
|
{"label":"X", "x":3.25, "y":3},
|
||||||
|
{"label":"C", "x":4.25, "y":3},
|
||||||
|
{"label":"V", "x":5.25, "y":3},
|
||||||
|
{"label":"B", "x":6.25, "y":3},
|
||||||
|
{"label":"N", "x":7.25, "y":3},
|
||||||
|
{"label":"M", "x":8.25, "y":3},
|
||||||
|
{"label":",", "x":9.25, "y":3},
|
||||||
|
{"label":".", "x":10.25, "y":3},
|
||||||
|
{"label":"/", "x":11.25, "y":3},
|
||||||
|
{"label":"Shift", "x":12.25, "y":3, "w":2.75},
|
||||||
|
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
|
||||||
|
{"label":"GUI", "x":1.25, "y":4, "w":1.25},
|
||||||
|
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
|
||||||
|
{"label":"Space", "x":3.75, "y":4, "w":6.25},
|
||||||
|
{"label":"Alt", "x":10, "y":4, "w":1.25},
|
||||||
|
{"label":"GUI", "x":11.25, "y":4, "w":1.25},
|
||||||
|
{"label":"Menu", "x":12.5, "y":4, "w":1.25},
|
||||||
|
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT( /* CMD60 - QWERTY */
|
||||||
|
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_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, \
|
||||||
|
LT(3, KC_ENT), 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_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
|
||||||
|
),
|
||||||
|
[1] = LAYOUT( /* CMD60 - GameMode */
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT, \
|
||||||
|
_______, XXXXXXX, _______, KC_SPC, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
[2] = LAYOUT( /* CMD60 - Arrows */
|
||||||
|
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_BSPC, KC_UP, KC_DEL, _______, _______, _______, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
|
||||||
|
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
[3] = LAYOUT( /* CMD60 - Functions */
|
||||||
|
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_MUTE, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______, KC_PAUS, KC_SLCK, KC_PSCR, \
|
||||||
|
_______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_INS, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
[4] = LAYOUT( /* CMD60 - Mouse */
|
||||||
|
KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, KC_BTN3, KC_WH_D, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
[5] = LAYOUT( /* CMD60 - Media */
|
||||||
|
KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WBAK, KC_WFWD, KC_WREF, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______ \
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# CMD60
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
|
||||||
|
with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
|
||||||
|
and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
|
||||||
|
achieve a higher level of productivity if you take the time to learn its function layers.
|
||||||
|
|
||||||
|
[Build Log](https://redd.it/4mkuu8)
|
||||||
|
|
||||||
|
Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
|
||||||
|
Hardware Supported: CMD60 handwired, Teensy 2.0
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make handwired/cmd60: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).
|
||||||
File renamed without changes.
@@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "333fred_config.h"
|
||||||
|
|
||||||
|
#define USE_SERIAL
|
||||||
|
#define EE_HANDS
|
||||||
|
|
||||||
|
#undef TAPPING_TERM
|
||||||
|
#define TAPPING_TERM 200
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "333fred.h"
|
||||||
|
|
||||||
|
enum custom_macros {
|
||||||
|
DLEFT,
|
||||||
|
DRIGHT,
|
||||||
|
PSCREEN_APP
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[BASE] = LAYOUT_5x6(
|
||||||
|
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
OSM(MOD_LSFT), CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT),
|
||||||
|
KC_F4, KC_F5, TG(CODEFLOW), KC_EQL,
|
||||||
|
KC_LALT, KC_BSPC, KC_SPC, OSL(VIM),
|
||||||
|
KC_TAB, TD(TD_SYM_VIM), KC_ENT, KC_RGUI,
|
||||||
|
KC_LCTL, KC_DEL, KC_UP, KC_DOWN
|
||||||
|
),
|
||||||
|
|
||||||
|
[CODEFLOW] = LAYOUT_5x6(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
KC_F7, KC_F8, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[SYMB] = LAYOUT_5x6(
|
||||||
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
_______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, KC_PIPE, _______, KC_7, KC_8, KC_9, _______, KC_F12,
|
||||||
|
_______, KC_HASH, KC_DLR, KC_LCBR, KC_RCBR, KC_GRV, _______, KC_4, KC_5, KC_6, _______, _______,
|
||||||
|
_______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, _______, KC_1, KC_2, KC_3, _______, _______,
|
||||||
|
KC_F7, KC_F8, KC_0, KC_ENT,
|
||||||
|
_______, _______, KC_MPLY, KC_MNXT,
|
||||||
|
_______, _______, KC_MPRV, _______,
|
||||||
|
_______, _______, KC_VOLU, KC_VOLD
|
||||||
|
),
|
||||||
|
|
||||||
|
[VIM] = LAYOUT_5x6(
|
||||||
|
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
|
||||||
|
_______, _______, _______, _______, KC_LSFT, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, M(DLEFT), M(DRIGHT), KC_LCTL, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
switch(id) {
|
||||||
|
case DLEFT:
|
||||||
|
if (record->event.pressed) { // Windows move desktop left
|
||||||
|
return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DRIGHT:
|
||||||
|
if (record->event.pressed) { // Windows move desktop right
|
||||||
|
return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PSCREEN_APP: if (record->event.pressed) {
|
||||||
|
return MACRO(D(LALT), T(PSCR), U(LALT), END);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
tap_dance_process_record(keycode);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
NKRO_ENABLE = yes
|
||||||
|
KEY_LOCK_ENABLE = yes
|
||||||
|
TAP_DANCE_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no
|
||||||
|
PERMISSIVE_HOLD = yes
|
||||||
|
EXTRAFLAGS += -flto
|
||||||
@@ -38,6 +38,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
/* Set 0 if debouncing isn't needed */
|
/* Set 0 if debouncing isn't needed */
|
||||||
#define DEBOUNCING_DELAY 5
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D0
|
||||||
|
|
||||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
#define LOCKING_SUPPORT_ENABLE
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
/* Locking resynchronize hack */
|
/* Locking resynchronize hack */
|
||||||
|
|||||||
@@ -131,13 +131,13 @@ file will run on both hands instead of having to flash left and right handed
|
|||||||
versions of the firmware to each half. To flash the EEPROM file for the left
|
versions of the firmware to each half. To flash the EEPROM file for the left
|
||||||
half run:
|
half run:
|
||||||
```
|
```
|
||||||
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
|
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep"
|
||||||
// or the equivalent in dfu-programmer
|
// or the equivalent in dfu-programmer
|
||||||
|
|
||||||
```
|
```
|
||||||
and similarly for right half
|
and similarly for right half
|
||||||
```
|
```
|
||||||
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
|
avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-righthand.eep"
|
||||||
// or the equivalent in dfu-programmer
|
// or the equivalent in dfu-programmer
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CONFIG_H
|
#pragma once
|
||||||
#define CONFIG_H
|
|
||||||
|
|
||||||
#include "config_common.h"
|
#include "config_common.h"
|
||||||
|
|
||||||
@@ -161,5 +160,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#undef TAPPING_TOGGLE
|
#undef TAPPING_TOGGLE
|
||||||
#define TAPPING_TOGGLE 2
|
#define TAPPING_TOGGLE 2
|
||||||
|
|
||||||
#endif
|
|
||||||
Loaded 100 of 260 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user