Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
445cd95d17 | ||
|
|
7d5ba88e6f | ||
|
|
704934c427 | ||
|
|
47ea522e79 | ||
|
|
f663ba5ed0 | ||
|
|
de0153f339 | ||
|
|
3633330e1a | ||
|
|
855dd2d218 | ||
|
|
aa1c1c3865 | ||
|
|
de68d294ec |
No files matched your search
@@ -23,6 +23,7 @@
|
|||||||
* [Overview](api_overview.md)
|
* [Overview](api_overview.md)
|
||||||
* [API Documentation](api_docs.md)
|
* [API Documentation](api_docs.md)
|
||||||
* [Keyboard Support](reference_configurator_support.md)
|
* [Keyboard Support](reference_configurator_support.md)
|
||||||
|
* [Adding Default Keymaps](configurator_default_keymaps.md)
|
||||||
|
|
||||||
* CLI
|
* CLI
|
||||||
* [Overview](cli.md)
|
* [Overview](cli.md)
|
||||||
|
|||||||
@@ -0,0 +1,193 @@
|
|||||||
|
# Adding Default Keymaps to QMK Configurator :id=adding-default-keymaps
|
||||||
|
|
||||||
|
This page covers how to add a default keymap for a keyboard to QMK Configurator.
|
||||||
|
|
||||||
|
|
||||||
|
## Technical Information :id=technical-information
|
||||||
|
|
||||||
|
QMK Configurator uses JSON as its native file format for keymaps. As much as possible, these should be kept such that they behave the same as running `make <keyboard>:default` from `qmk_firmware`.
|
||||||
|
|
||||||
|
Keymaps in this directory require four key-value pairs:
|
||||||
|
|
||||||
|
* `keyboard` (string)
|
||||||
|
* This is the name of the keyboard, the same as would be used when running a compile job through `make` (e.g. `make 1upkeyboards/1up60rgb:default`).
|
||||||
|
* `keymap` (string)
|
||||||
|
* Should be set to `default`.
|
||||||
|
* `layout` (string)
|
||||||
|
* This is the layout macro used by the default keymap.
|
||||||
|
* `layers` (array)
|
||||||
|
* The keymap itself. This key should contain one array per layer, which themselves should contain the keycodes that make up that layer.
|
||||||
|
|
||||||
|
Additionally, most keymaps contain a `commit` key. This key is not consumed by the API that back-stops QMK Configurator, but is used by Configurator's maintainers to tell which version of a keymap was used to create the JSON keymap in this repository. The value is the SHA of the last commit to modify a board's default `keymap.c` in the `qmk_firmware` repository. The SHA is found by checking out [the `master` branch of the `qmk/qmk_firmware` repository](https://github.com/qmk/qmk_firmware/tree/master/) and running `git log -1 --pretty=oneline -- keyboards/<keyboard>/keymaps/default/keymap.c` (use `keymap.json` if the keyboard in question has this file instead), which should return something similar to:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
f14629ed1cd7c7ec9089604d64f29a99981558e8 Remove/migrate action_get_macro()s from default keymaps (#5625)
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example, `f14629ed1cd7c7ec9089604d64f29a99981558e8` is the value that should be used for `commit`.
|
||||||
|
|
||||||
|
|
||||||
|
## Example :id=example
|
||||||
|
|
||||||
|
If one wished to add a default keymap for the H87a by Hineybush, one would run the `git log` command above against the H87a's default keymap in `qmk_firmware`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
user ~/qmk_firmware (master)
|
||||||
|
$ git log -1 --pretty=oneline master -- keyboards/hineybush/h87a/keymaps/default/keymap.c
|
||||||
|
ef8878fba5d3786e3f9c66436da63a560cd36ac9 Hineybush h87a lock indicators (#8237)
|
||||||
|
```
|
||||||
|
|
||||||
|
Now that we have the commit hash, we need the keymap (edited for readability):
|
||||||
|
|
||||||
|
```c
|
||||||
|
...
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
|
||||||
|
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_TOGG, BL_DEC, BL_INC,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
The default keymap uses the `LAYOUT_all` macro, so that will be the value of the `layout` key. Compiled to a QMK Configurator JSON keymap, our resulting file should be:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"keyboard": "hineybush/h87a",
|
||||||
|
"keymap": "default",
|
||||||
|
"commit": "ef8878fba5d3786e3f9c66436da63a560cd36ac9",
|
||||||
|
"layout": "LAYOUT_all",
|
||||||
|
"layers": [
|
||||||
|
[
|
||||||
|
"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_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_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NUHS", "KC_ENT",
|
||||||
|
"KC_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_TRNS", "KC_UP",
|
||||||
|
"KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_RGUI", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "RGB_TOG", "RGB_MOD", "RGB_HUD", "RGB_HUI", "RGB_SAD", "RGB_SAI", "RGB_VAD", "RGB_VAI", "BL_TOGG", "BL_DEC", "BL_INC",
|
||||||
|
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_VOLU",
|
||||||
|
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "RESET", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPLY", "KC_MNXT", "KC_VOLD",
|
||||||
|
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
|
||||||
|
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
|
||||||
|
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The white space in the `layers` arrays have no effect on the functionality of the keymap, but are used to make these files easier for humans to read.
|
||||||
|
|
||||||
|
|
||||||
|
## Caveats :id=caveats
|
||||||
|
|
||||||
|
### Layers can only be referenced by number :id=layer-references
|
||||||
|
|
||||||
|
A common QMK convention is to name layers using a series of `#define`s, or an `enum` statement:
|
||||||
|
|
||||||
|
```c
|
||||||
|
enum layer_names {
|
||||||
|
_BASE,
|
||||||
|
_MEDIA,
|
||||||
|
_FN
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
This works in C, but for Configurator, you *must* use the layer's numeric index – `MO(_FN)` would need to be `MO(2)` in the above example.
|
||||||
|
|
||||||
|
### No support for custom code of any kind :id=custom-code
|
||||||
|
|
||||||
|
Features that require adding functions to the keymap.c file, such as Tap Dance or Unicode, can not be compiled in Configurator **at all**. Even setting `TAP_DANCE_ENABLE = yes` in the `qmk_firmware` repository at the keyboard level will prevent Configurator from compiling **any** firmware for that keyboard. This is limited both by the API and the current spec of our JSON keymap format.
|
||||||
|
|
||||||
|
### Limited Support for Custom keycodes :id=custom-keycodes
|
||||||
|
|
||||||
|
There is a way to support custom keycodes: if the logic for a custom keycode is implemented at the keyboard level instead of the keymap level in qmk_firmware, that keycode *can* be used in Configurator and it *will* compile and work. Instead of using the following in your `keymap.c`:
|
||||||
|
|
||||||
|
```c
|
||||||
|
enum custom_keycodes {
|
||||||
|
MACRO_1 = SAFE_RANGE,
|
||||||
|
MACRO_2,
|
||||||
|
MACRO_3
|
||||||
|
};
|
||||||
|
...
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch(keycode) {
|
||||||
|
case MACRO_1:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("This is macro #1.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case MACRO_2:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("This is macro #2.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case MACRO_3:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("This is macro #3.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
... add the keycode `enum` block to your keyboard's header file (`<keyboard>.h`) as follows (note that the `enum` is named `keyboard_keycodes` here):
|
||||||
|
|
||||||
|
```c
|
||||||
|
enum keyboard_keycodes {
|
||||||
|
MACRO_1 = SAFE_RANGE,
|
||||||
|
MACRO_2,
|
||||||
|
MACRO_3,
|
||||||
|
NEW_SAFE_RANGE // Important!
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
... then the logic to your `<keyboard>.c` through `process_record_kb()`:
|
||||||
|
|
||||||
|
```c
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch(keycode) {
|
||||||
|
case MACRO_1:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("This is macro #1.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case MACRO_2:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("This is macro #2.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case MACRO_3:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
SEND_STRING("This is macro #3.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Note the call to `process_record_user()` at the end. Additionally, users of the keyboard will need to use `NEW_SAFE_RANGE` instead of `SAFE_RANGE` if they wish to add their own custom keycodes at keymap level, beyond what is provided by the keyboard.
|
||||||
|
|
||||||
|
|
||||||
|
## Additional Reading :id=additional-reading
|
||||||
|
|
||||||
|
For QMK Configurator to support your keyboard, your keyboard must be present in the `master` branch of the `qmk_firmware` repository. For instructions on this, please see [Supporting Your Keyboard in QMK Configurator](reference_configurator_support.md).
|
||||||
+1
-65
@@ -19,71 +19,7 @@ Note that running `make` with `sudo` is generally ***not*** a good idea, and you
|
|||||||
|
|
||||||
### Linux `udev` Rules
|
### Linux `udev` Rules
|
||||||
|
|
||||||
On Linux, you'll need proper privileges to communicate with the bootloader device. You can either use `sudo` when flashing firmware, or place this file in `/etc/udev/rules.d/`:
|
On Linux, you'll need proper privileges to communicate with the bootloader device. You can either use `sudo` when flashing firmware (not recommended), or place [this file](https://github.com/qmk/qmk_firmware/tree/master/util/udev/50-qmk.rules) into `/etc/udev/rules.d/`.
|
||||||
|
|
||||||
**/etc/udev/rules.d/50-qmk.rules:**
|
|
||||||
```
|
|
||||||
# Atmel DFU
|
|
||||||
### ATmega16U2
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FEF", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
### ATmega32U2
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF0", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
### ATmega16U4
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF3", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
### ATmega32U4
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF4", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
### AT90USB64
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF9", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
### AT90USB128
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FFB", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
|
|
||||||
# Input Club
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1C11", ATTRS{idProduct}=="B007", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
|
|
||||||
# STM32duino
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1EAF", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
# STM32 DFU
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="DF11", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
|
|
||||||
# BootloadHID
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DF", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
|
|
||||||
# USBAspLoader
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DC", TAG+="uaccess", RUN{builtin}+="uaccess"
|
|
||||||
|
|
||||||
# ModemManager should ignore the following devices
|
|
||||||
# Atmel SAM-BA (Massdrop)
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="6124", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
|
|
||||||
# Caterina (Pro Micro)
|
|
||||||
## Spark Fun Electronics
|
|
||||||
### Pro Micro 3V3/8MHz
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
### Pro Micro 5V/16MHz
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
### LilyPad 3V3/8MHz (and some Pro Micro clones)
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9207", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
## Pololu Electronics
|
|
||||||
### A-Star 32U4
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1FFB", ATTRS{idProduct}=="0101", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
## Arduino SA
|
|
||||||
### Leonardo
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
### Micro
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
## Adafruit Industries LLC
|
|
||||||
### Feather 32U4
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000C", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
### ItsyBitsy 32U4 3V3/8MHz
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000D", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
### ItsyBitsy 32U4 5V/16MHz
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000E", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
## dog hunter AG
|
|
||||||
### Leonardo
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
### Micro
|
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
||||||
```
|
|
||||||
|
|
||||||
Once added, run the following:
|
Once added, run the following:
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
#include "analog.h"
|
#include "analog.h"
|
||||||
#include "pointing_device.h"
|
#include "pointing_device.h"
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
/* Copyright (C) 2020 Sendy YK (https://mr.sendyyk.com).
|
/*
|
||||||
|
* ai03 Soyuz VIA Keymap
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Sendy YK <https://mr.sendyyk.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -13,7 +16,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
enum layer_names {
|
enum layer_names {
|
||||||
@@ -34,26 +37,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
),
|
),
|
||||||
// Fn Layer 1
|
// Fn Layer 1
|
||||||
[_FN] = LAYOUT_ortho_5x4(
|
[_FN] = LAYOUT_ortho_5x4(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
_______, _______, _______, _______
|
||||||
),
|
),
|
||||||
// Fn Layer 2
|
// Fn Layer 2
|
||||||
[_FN2] = LAYOUT_ortho_5x4(
|
[_FN2] = LAYOUT_ortho_5x4(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
_______, _______, _______, _______
|
||||||
),
|
),
|
||||||
// Fn Layer 3
|
// Fn Layer 3
|
||||||
[_FN3] = LAYOUT_ortho_5x4(
|
[_FN3] = LAYOUT_ortho_5x4(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
_______, _______, _______, _______,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
_______, _______, _______, _______
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
* ├───┴───┼───┤43 │
|
* ├───┴───┼───┤43 │
|
||||||
* │41 │42 │ │
|
* │41 │42 │ │
|
||||||
* └───────┴───┴───┘
|
* └───────┴───┴───┘
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define LAYOUT_numpad_5x4( \
|
#define LAYOUT_numpad_5x4( \
|
||||||
k00, k01, k02, k03, \
|
k00, k01, k02, k03, \
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// place overrides here
|
// place overrides here
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -14,4 +14,4 @@ GNU General Public License for more details.
|
|||||||
You should have received a copy of the GNU General Public License
|
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 "ferris.h"
|
#include "0_1.h"
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Pierre Chevalier <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
// Set the mouse settings to a comfortable speed/accuracy trade-off,
|
||||||
|
// assuming a screen refresh rate of 60 Htz or higher
|
||||||
|
// The default is 50. This makes the mouse ~3 times faster and more accurate
|
||||||
|
#define MOUSEKEY_INTERVAL 16
|
||||||
|
// The default is 20. Since we made the mouse about 3 times faster with the previous setting,
|
||||||
|
// give it more time to accelerate to max speed to retain precise control over short distances.
|
||||||
|
#define MOUSEKEY_TIME_TO_MAX 40
|
||||||
|
// The default is 300. Let's try and make this as low as possible while keeping the cursor responsive
|
||||||
|
#define MOUSEKEY_DELAY 100
|
||||||
|
// It makes sense to use the same delay for the mouseweel
|
||||||
|
#define MOUSEKEY_WHEEL_DELAY 100
|
||||||
|
// The default is 100
|
||||||
|
#define MOUSEKEY_WHEEL_INTERVAL 50
|
||||||
|
// The default is 40
|
||||||
|
#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
|
||||||
|
|
||||||
|
// Pick good defaults for enabling homerow modifiers
|
||||||
|
#define TAPPING_TERM 200
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
#define IGNORE_MOD_TAP_INTERRUPT
|
||||||
|
#define TAPPING_FORCE_HOLD
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
{ "version": 1,
|
||||||
|
"notes": "My awesome keymap",
|
||||||
|
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
|
||||||
|
"keyboard": "handwired/ferris",
|
||||||
|
"keymap": "pierrec83",
|
||||||
|
"layout": "LAYOUT",
|
||||||
|
"layers": [
|
||||||
|
["KC_Q" , "KC_D" , "KC_R" , "KC_W" , "KC_B",
|
||||||
|
"KC_J" , "KC_F" , "KC_U" , "KC_P" , "KC_SCLN",
|
||||||
|
|
||||||
|
"LSFT_T(KC_A)" , "LT(6,KC_S)" , "LT(2,KC_H)" , "LT(4,KC_T)" , "KC_G",
|
||||||
|
"KC_Y" , "LT(5,KC_N)" , "LT(3,KC_E)" , "LT(7,KC_O)" , "LSFT_T(KC_I)",
|
||||||
|
|
||||||
|
"KC_Z" , "LCTL_T(KC_X)" , "LALT_T(KC_M)" , "KC_C" , "KC_V",
|
||||||
|
"KC_K" , "KC_L" , "LALT_T(KC_COMM)", "LCTL_T(KC_DOT)" , "KC_SLSH",
|
||||||
|
|
||||||
|
"LCA(KC_UP)" , "KC_BSPC",
|
||||||
|
"LT(8,KC_SPC)" , "LCA(KC_DOWN)"
|
||||||
|
],
|
||||||
|
["KC_Q" , "KC_C" , "KC_M" , "KC_Y" , "KC_COLN",
|
||||||
|
"KC_Z" , "KC_W" , "KC_COMM" , "KC_U" , "KC_J",
|
||||||
|
|
||||||
|
"LSFT_T(KC_R)" , "LT(6,KC_S)" , "LT(2,KC_T)" , "LT(4,KC_H)" , "KC_X",
|
||||||
|
"KC_TRNS" , "LT(5,KC_N)" , "LT(3,KC_A)" , "LT(7,KC_I)" , "LSFT_T(KC_O)",
|
||||||
|
|
||||||
|
"KC_B" , "LCTL_T(KC_F)" , "LALT_T(KC_G)" , "KC_D" , "KC_V",
|
||||||
|
"KC_ESC" , "KC_L" , "LALT_T(KC_DOT)" , "LCTL_T(KC_BSPC)" , "KC_K",
|
||||||
|
|
||||||
|
"LCA(KC_UP)" , "KC_E",
|
||||||
|
"LT(8,KC_SPC)" , "LCA(KC_DOWN)"
|
||||||
|
],
|
||||||
|
["KC_TRNS" , "ANY(LCTL(LSFT(KC_C)))", "KC_TRNS" , "ANY(LCTL(LSFT(KC_V)))", "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_BTN1" , "KC_WH_U" , "KC_BTN2" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_BTN2" , "KC_NO" , "KC_BTN1" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_MS_L" , "KC_MS_D" , "KC_MS_U" , "KC_MS_R",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_WH_L" , "KC_WH_D" , "KC_WH_R" , "KC_TRNS",
|
||||||
|
|
||||||
|
"ANY(LCTL(LSFT(KC_TAB)))", "KC_TRNS",
|
||||||
|
"KC_TRNS" , "LCTL(KC_TAB)"
|
||||||
|
],
|
||||||
|
["KC_TRNS" , "KC_TRNS" , "KC_PGUP" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_LEFT" , "KC_UP" , "KC_DOWN" , "KC_RGHT" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_LGUI" , "KC_NO" , "LCTL(KC_LALT)" , "LCA(KC_LSFT)",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_HOME" , "KC_PGDN" , "KC_END" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
|
||||||
|
"LGUI(KC_LEFT)" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "LGUI(KC_RGHT)"
|
||||||
|
],
|
||||||
|
["KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_UNDS" , "KC_PIPE" , "KC_QUOT" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_CIRC" , "KC_ASTR" , "KC_AMPR" , "KC_NO" , "KC_TRNS",
|
||||||
|
"KC_HASH" , "KC_TILD" , "KC_SLSH" , "KC_DQUO" , "KC_DLR",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_MINS" , "KC_BSLS" , "KC_GRV" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_BRID" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_BRIU"
|
||||||
|
],
|
||||||
|
["KC_TRNS" , "KC_COLN" , "KC_LT" , "KC_GT" , "KC_SCLN",
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_LCBR" , "KC_RCBR" , "KC_LPRN" , "KC_RPRN" , "KC_AT",
|
||||||
|
"KC_TRNS" , "KC_NO" , "KC_EQL" , "KC_PLUS" , "KC_PERC",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_EXLM" , "KC_LBRC" , "KC_RBRC" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_VOLD" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_VOLU"
|
||||||
|
],
|
||||||
|
["KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "LCTL(KC_LALT)" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_F4" , "KC_F5" , "KC_F6" , "KC_F11",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F12",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_TRNS"
|
||||||
|
],
|
||||||
|
["KC_PSLS" , "KC_7" , "KC_8" , "KC_9" , "KC_PPLS",
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_PMNS",
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_NO" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_PAST" , "KC_4" , "KC_5" , "KC_6" , "KC_PEQL",
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TRNS",
|
||||||
|
"KC_TRNS" , "KC_TRNS"
|
||||||
|
],
|
||||||
|
["KC_TRNS" , "KC_ESC" , "KC_COLN" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"DF(2)" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_DEL",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_PERC" , "KC_SLSH" , "KC_ENT" , "KC_EXLM",
|
||||||
|
"DF(1)" , "KC_LGUI" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
|
||||||
|
"DF(0)" , "KC_TRNS" , "RALT_T(KC_COMM)", "RCTL_T(KC_DOT)" , "RESET",
|
||||||
|
|
||||||
|
"KC_TRNS" , "KC_TAB",
|
||||||
|
"KC_NO" , "KC_TRNS"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"author": "@pierrec83"
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
@pierrec83's personal keymap for the Ferris keyboard
|
||||||
|
====================================================
|
||||||
|
|
||||||
|
This keymap shares many commonalities with the default keymap.
|
||||||
|
See its readme for a write-up on many of the decisions, including
|
||||||
|
how to generate the formatted json file with json2crab.py and the
|
||||||
|
general philosophy for each layer.
|
||||||
|
|
||||||
|
Because this is my own keymap, I didn't refrain from using shortcuts
|
||||||
|
that make sense for me and may not make sense for most.
|
||||||
|
|
||||||
|
Key differences from the default keymap include:
|
||||||
|
|
||||||
|
Alpha layers:
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Because I only learned to touch type when I switched from qwerty to workman,
|
||||||
|
my base layer is workman and my layout doesn't contain a qwerty layer.
|
||||||
|
|
||||||
|
My layer 1 hosts a variant of RSTHD that I am developing, inspired from workman's
|
||||||
|
focus on reducing side-index-motion. It should become my end game keymap eventually,
|
||||||
|
but I still haven't found the time to learn it to a working proficiency.
|
||||||
|
|
||||||
|
Secondary thumbs:
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Instead of a placeholder 0 and 1, the secondary thumbs on my keymap
|
||||||
|
perform the following actions:
|
||||||
|
* Navigate to previous and next workspace the base layer
|
||||||
|
* Navigate to previous and next tab on the mouse layer
|
||||||
|
* Volume control on layer
|
||||||
|
* Brightness control on layer
|
||||||
|
|
||||||
|
Mouse layer:
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Copy/Paste shortcuts on the left hand, on the upper row.
|
||||||
|
|
||||||
|
Always available layer:
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
* Esc and column are placed differently to allow easy vim navigation with the positions of w and q in the workman base layer
|
||||||
|
* Enable permanent switch to the RSTHD layer in addition to the mouse layer
|
||||||
@@ -6,11 +6,14 @@
|
|||||||
A split 34 keys column staggered keyboard named and decorated after the rustlang mascott. All PCB files and some thoughts on the design are available on the [project's github page](https://github.com/pierrechevalier83/ferris)
|
A split 34 keys column staggered keyboard named and decorated after the rustlang mascott. All PCB files and some thoughts on the design are available on the [project's github page](https://github.com/pierrechevalier83/ferris)
|
||||||
|
|
||||||
* Keyboard Maintainer: [Pierre Chevalier](https://github.com/pierrechevalier83)
|
* Keyboard Maintainer: [Pierre Chevalier](https://github.com/pierrechevalier83)
|
||||||
* Hardware Supported: Ferris PCB
|
* Hardware Supported:
|
||||||
* Hardware Availability: Still in prototype stage
|
* Ferris 0.1 (With atmega32u4 chip. Comes in 4 variants: base, low, high and compact)
|
||||||
|
* Ferris sweep (With pro-micro. Comes in a couple of PCB edge cuts shapes, but with identical pinout)
|
||||||
|
* Hardware Availability: Pierre Chevalier has been selling keyboard kits (see the #ferris channel in the 40% discord chat). Wider availability is on the horizon.
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make examples for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make handwired/ferris:default
|
make ferris/0_1:default
|
||||||
|
make ferris/sweep:default:avrdude-split-right
|
||||||
|
|
||||||
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).
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/* Copyright 2018-2020 ENDO Katsuhiro <[email protected]> David Philip Barr <@davidphilipbarr> Pierre Chevalier <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xC2AB
|
||||||
|
#define PRODUCT_ID 0x3939
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER DPB
|
||||||
|
#define PRODUCT Ferris sweep
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 5
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
* NO_DIODE = switches are directly connected to AVR pins
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define DIRECT_PINS { \
|
||||||
|
{ E6, F7, F6, F5, F4 }, \
|
||||||
|
{ B1, B3, B2, B6, D3 }, \
|
||||||
|
{ D1, D0, D4, C6, D7 }, \
|
||||||
|
{ B4, B5, NO_PIN, NO_PIN, NO_PIN } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DIRECT_PINS_RIGHT { \
|
||||||
|
{ F4, F5, F6, F7, E6 }, \
|
||||||
|
{ D3,B6,B2,B3,B1 }, \
|
||||||
|
{ D7,C6,D4,D0,D1}, \
|
||||||
|
{ B5, B4, NO_PIN, NO_PIN, NO_PIN } \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* Serial settings */
|
||||||
|
#define USE_SERIAL
|
||||||
|
/* serial.c configuration for split keyboard */
|
||||||
|
#define SOFT_SERIAL_PIN D2
|
||||||
|
|
||||||
|
#define EE_HANDS
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = caterina
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
UNICODE_ENABLE = yes # Unicode
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
|
SPLIT_KEYBOARD = yes # Use shared split_common code
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
/* Copyright 2018-2020 ENDO Katsuhiro <[email protected]> David Philip Barr <@davidphilipbarr> Pierre Chevalier <[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/>.
|
||||||
|
*/
|
||||||
|
#include "sweep.h"
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/* Copyright 2018-2020 ENDO Katsuhiro <[email protected]> David Philip Barr <@davidphilipbarr> Pierre Chevalier <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// readability
|
||||||
|
#define ___ KC_NO
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
L01, L02, L03, L04, L05, R01, R02, R03, R04, R05, \
|
||||||
|
L06, L07, L08, L09, L10, R06, R07, R08, R09, R10, \
|
||||||
|
L11, L12, L13, L14, L15, R11, R12, R13, R14, R15, \
|
||||||
|
L16, L17, R16, R17 \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ L01, L02, L03, L04, L05 }, \
|
||||||
|
{ L06, L07, L08, L09, L10 }, \
|
||||||
|
{ L11, L12, L13, L14, L15 }, \
|
||||||
|
{ L16, L17, ___, ___ , ___}, \
|
||||||
|
{ R01, R02, R03, R04, R05 }, \
|
||||||
|
{ R06, R07, R08, R09, R10 }, \
|
||||||
|
{ R11, R12, R13, R14, R15 }, \
|
||||||
|
{ R16, R17, ___, ___, ___ } \
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -70,3 +70,8 @@
|
|||||||
#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)
|
#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)
|
||||||
#define RGB_MATRIX_DISABLE_KEYCODES
|
#define RGB_MATRIX_DISABLE_KEYCODES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 170
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||||
@@ -70,3 +70,8 @@
|
|||||||
#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)
|
#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)
|
||||||
# define RGB_MATRIX_DISABLE_KEYCODES
|
# define RGB_MATRIX_DISABLE_KEYCODES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 170
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
|
||||||
|
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||||
@@ -1,19 +1,18 @@
|
|||||||
/*
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
Copyright 2017 Danny Nguyen <[email protected]>
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
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
|
||||||
it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
* (at your option) any later version.
|
||||||
(at your option) any later version.
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
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/>.
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
/*
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
Copyright 2017 Danny Nguyen <[email protected]>
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
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
|
||||||
it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
* (at your option) any later version.
|
||||||
(at your option) any later version.
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
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/>.
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
/*
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
Copyright 2017 Danny Nguyen <[email protected]>
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
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
|
||||||
it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
* (at your option) any later version.
|
||||||
(at your option) any later version.
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
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/>.
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
/*
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
Copyright 2017 Danny Nguyen <[email protected]>
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
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
|
||||||
it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
* (at your option) any later version.
|
||||||
(at your option) any later version.
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
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/>.
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
// Fillers to make layering more clear
|
// Fillers to make layering more clear
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2019 Thomas Baart <thomas@splitkb.com>
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
uint8_t is_master;
|
uint8_t is_master;
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/* Underlight Configuration */
|
||||||
|
#undef RGB_DI_PIN
|
||||||
|
#define RGB_DI_PIN F5
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
#undef RGBLED_NUM
|
||||||
|
#define RGBLED_NUM 8 // Number of LEDs
|
||||||
|
#define RGBLIGHT_HUE_STEP 10
|
||||||
|
#define RGBLIGHT_SAT_STEP 17
|
||||||
|
#define RGBLIGHT_VAL_STEP 17
|
||||||
|
|
||||||
|
#define DRIVER_LED_TOTAL RGBLED_NUM
|
||||||
|
#define B7_AUDIO
|
||||||
|
#define AUDIO_CLICKY
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum local_layers {
|
||||||
|
_QWERTY,
|
||||||
|
_RGB,
|
||||||
|
_FUNC,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Defines for task manager and such
|
||||||
|
#define CALTDEL LCTL(LALT(KC_DEL))
|
||||||
|
#define TSKMGR LCTL(LSFT(KC_ESC))
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-------------.
|
||||||
|
* | 1 | 2 |
|
||||||
|
* |------+------|
|
||||||
|
* | 3 | 4 |
|
||||||
|
* |------+------|
|
||||||
|
* | 5 | 6 |
|
||||||
|
* |------+------|
|
||||||
|
* | FUNC | RGB |
|
||||||
|
* `-------------'
|
||||||
|
*/
|
||||||
|
[_QWERTY] = LAYOUT( \
|
||||||
|
KC_1, KC_2, \
|
||||||
|
KC_3, KC_4, \
|
||||||
|
KC_5, KC_6, \
|
||||||
|
MO(_FUNC), TG(_RGB) \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* RGB
|
||||||
|
* ,-------------.
|
||||||
|
* | Mode-| Mode+|
|
||||||
|
* |------+------|
|
||||||
|
* | HUE- | HUE+ |
|
||||||
|
* |------+------|
|
||||||
|
* | SAT- | SAT+ |
|
||||||
|
* |------+------|
|
||||||
|
* |RGBTOG| |
|
||||||
|
* `-------------'
|
||||||
|
*/
|
||||||
|
[_RGB] = LAYOUT( \
|
||||||
|
RGB_RMOD, RGB_MOD, \
|
||||||
|
RGB_HUD, RGB_HUI, \
|
||||||
|
RGB_SAD, RGB_SAI, \
|
||||||
|
RGB_TOG, KC_TRNS \
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Function
|
||||||
|
* ,-------------.
|
||||||
|
* | Q |CALDEL|
|
||||||
|
* |------+------|
|
||||||
|
* | A |TSKMGR|
|
||||||
|
* |------+------|
|
||||||
|
* | Z | X |
|
||||||
|
* |------+------|
|
||||||
|
* | | C |
|
||||||
|
* `-------------'
|
||||||
|
*/
|
||||||
|
[_FUNC] = LAYOUT( \
|
||||||
|
KC_Q, CALTDEL, \
|
||||||
|
KC_A, TSKMGR, \
|
||||||
|
KC_Z, KC_X, \
|
||||||
|
_______, RESET \
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
led_config_t g_led_config = {
|
||||||
|
{
|
||||||
|
{ 7, 0 },
|
||||||
|
{ 6, 1 },
|
||||||
|
{ 5, 2 },
|
||||||
|
{ 4, 3 },
|
||||||
|
},{
|
||||||
|
{ 121, 2 }, { 121, 23 },
|
||||||
|
{ 121, 41 }, { 121, 60 },
|
||||||
|
{ 103, 2 }, { 103, 23 },
|
||||||
|
{ 103, 41 }, { 103, 60 },
|
||||||
|
},{
|
||||||
|
1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
RGBLIGHT_ENABLE = no
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
BOOTMAGIC_ENABLE = lite
|
||||||
|
RGB_MATRIX_ENABLE = WS2812
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/* Copyright 2020 dezlidezlidezli
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
_MAIN,
|
||||||
|
};
|
||||||
|
|
||||||
|
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||||
|
if (index == 0) { /* First encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_VOLU);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_VOLD);
|
||||||
|
}
|
||||||
|
} else if (index == 1) { /* Second encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_3);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_4);
|
||||||
|
}
|
||||||
|
} else if (index == 2) { /* Third encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_5);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_6);
|
||||||
|
}
|
||||||
|
} else if (index == 3) { /* Fourth encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_7);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_8);
|
||||||
|
}
|
||||||
|
} else if (index == 4) { /* Fifth encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_VOLU);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_VOLD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_MAIN] = LAYOUT_ortho_1x5(
|
||||||
|
KC_CAPS, KC_MNXT, KC_MPLY, KC_MPRV, KC_CAPS
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/* Copyright 2020 dezlidezlidezli
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
_MAIN,
|
||||||
|
};
|
||||||
|
|
||||||
|
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||||
|
if (index == 0) { /* First encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_1);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_2);
|
||||||
|
}
|
||||||
|
} else if (index == 1) { /* Second encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_3);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_4);
|
||||||
|
}
|
||||||
|
} else if (index == 2) { /* Third encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_5);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_6);
|
||||||
|
}
|
||||||
|
} else if (index == 3) { /* Fourth encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_7);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_8);
|
||||||
|
}
|
||||||
|
} else if (index == 4) { /* Fifth encoder*/
|
||||||
|
if (clockwise) {
|
||||||
|
tap_code(KC_VOLU);
|
||||||
|
} else {
|
||||||
|
tap_code(KC_VOLD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //buttion closest to usb is first
|
||||||
|
[_MAIN] = LAYOUT_ortho_1x5(
|
||||||
|
KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MUTE
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2020 Drashna Jael're <[email protected]>
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -15,7 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define TAPPING_TERM_PER_KEY
|
#define TAPPING_TERM_PER_KEY
|
||||||
|
#define WAIT_FOR_USB
|
||||||
|
// #define NO_USB_STARTUP_CHECK
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2020 Drashna Jael're <[email protected]>
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
* 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 "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
#ifndef UNICODE_ENABLE
|
#ifndef UNICODE_ENABLE
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright 2020 Sönke Hahn <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define ORYX_CONFIGURATOR
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
/* Copyright 2020 Sönke Hahn <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
BASE, // default layer
|
||||||
|
L_3,
|
||||||
|
L_4,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
a_umlaut = ML_SAFE_RANGE,
|
||||||
|
o_umlaut,
|
||||||
|
u_umlaut,
|
||||||
|
eszett,
|
||||||
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[BASE] = LAYOUT_moonlander(
|
||||||
|
XXXXXXX, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , XXXXXXX, XXXXXXX, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , XXXXXXX,
|
||||||
|
KC_TAB , KC_X , KC_V , KC_L , KC_C , KC_W , XXXXXXX, XXXXXXX, KC_K , KC_H , KC_G , KC_F , KC_Q , eszett ,
|
||||||
|
XXXXXXX, KC_U , KC_I , KC_A , KC_E , KC_O , XXXXXXX, XXXXXXX, KC_S , KC_N , KC_R , KC_T , KC_D , KC_Y ,
|
||||||
|
XXXXXXX, u_umlaut, o_umlaut, a_umlaut, KC_P , KC_Z , KC_B , KC_M , KC_COMM, KC_DOT , KC_J , XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX , XXXXXXX , KC_LGUI , MO(L_4), XXXXXXX, XXXXXXX, MO(L_4), KC_RGUI, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
KC_LCTL, KC_LSFT, MO(L_3), MO(L_3), KC_RSFT, KC_SPC
|
||||||
|
),
|
||||||
|
|
||||||
|
[L_3] = LAYOUT_moonlander(
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, KC_UNDS, KC_LBRC, KC_RBRC, KC_CIRC, XXXXXXX, XXXXXXX, KC_EXLM, KC_LABK, KC_RABK, KC_EQL , KC_AMPR, XXXXXXX,
|
||||||
|
XXXXXXX, KC_BSLS, KC_SLSH, KC_LCBR, KC_RCBR, KC_ASTR, XXXXXXX, XXXXXXX, KC_QUES, KC_LPRN, KC_RPRN, KC_MINS, KC_COLN, KC_AT ,
|
||||||
|
XXXXXXX, KC_HASH, KC_DLR , KC_PIPE, KC_TILD, KC_GRV , KC_PLUS, KC_PERC, KC_DQUO, KC_QUOT, KC_SCLN, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
|
||||||
|
),
|
||||||
|
|
||||||
|
[L_4] = LAYOUT_moonlander(
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, KC_PGUP, KC_BSPC, KC_UP , KC_DEL , KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX, KC_7 , KC_8 , KC_9 , XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , XXXXXXX, XXXXXXX, XXXXXXX, KC_4 , KC_5 , KC_6 , XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, KC_ESC , KC_TAB , XXXXXXX, KC_ENT , XXXXXXX, XXXXXXX, KC_1 , KC_2 , KC_3 , XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_0
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||||
|
ML_LED_1(false);
|
||||||
|
ML_LED_2(false);
|
||||||
|
ML_LED_3(false);
|
||||||
|
ML_LED_4(false);
|
||||||
|
ML_LED_5(false);
|
||||||
|
ML_LED_6(false);
|
||||||
|
|
||||||
|
switch (get_highest_layer(state)) {
|
||||||
|
case 1:
|
||||||
|
ML_LED_1(1);
|
||||||
|
ML_LED_4(1);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ML_LED_2(1);
|
||||||
|
ML_LED_5(1);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
ML_LED_3(1);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
ML_LED_4(1);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
ML_LED_5(1);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
ML_LED_6(1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
// only works after executing
|
||||||
|
// $ xmodmap -e "keycode 138 = Multi_key"
|
||||||
|
#define compose_key SS_TAP(X_MENU)
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
if (record->event.pressed) {
|
||||||
|
switch (keycode) {
|
||||||
|
case a_umlaut:
|
||||||
|
SEND_STRING(compose_key "\"a");
|
||||||
|
return false;
|
||||||
|
case o_umlaut:
|
||||||
|
SEND_STRING(compose_key "\"o");
|
||||||
|
return false;
|
||||||
|
case u_umlaut:
|
||||||
|
SEND_STRING(compose_key "\"u");
|
||||||
|
return false;
|
||||||
|
case eszett:
|
||||||
|
SEND_STRING(compose_key "ss");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# Sönke Hahn's Neo layout for the Moonlander keyboard
|
||||||
|
|
||||||
|
This is my personal keyboard layout based on the Neo keyboard layout:
|
||||||
|
https://en.wikipedia.org/wiki/Neo_(keyboard_layout)
|
||||||
|
This layout is not meant as a general layout for other people using the
|
||||||
|
Neo keyboard layout. It's very specific to my personal needs.
|
||||||
|
It still might be useful as inspiration to other people who want to
|
||||||
|
create a Neo layout.
|
||||||
|
|
||||||
|
Some notes:
|
||||||
|
|
||||||
|
- I've put the ctrl key, the shift keys and the modifiers to switch to
|
||||||
|
layer 4 in the middle to be operated by the thumbs. I wanted to avoid
|
||||||
|
having to use my pinkies on the outer rows of the keyboard.
|
||||||
|
- The umlauts (äöü) and the ß only work on linux when configuring the
|
||||||
|
compose key properly. See `compose_key` in `./keymap.c`.
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/* Copyright 2020 Ramon Imbao
|
||||||
|
*
|
||||||
|
* 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 "aelith.h"
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/* Copyright 2020 Ramon Imbao
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/* This is a shortcut to help you visually see your layout.
|
||||||
|
*
|
||||||
|
* The first section contains all of the arguments representing the physical
|
||||||
|
* layout of the board and position of the keys.
|
||||||
|
*
|
||||||
|
* The second converts the arguments into a two-dimensional array which
|
||||||
|
* represents the switch matrix.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
// Split backspace
|
||||||
|
// Split right shift
|
||||||
|
#define LAYOUT_alice_split_bs( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k28, k29, k2a, k2b, k2c, k2d, k2f, \
|
||||||
|
k31, k32, k33, k34, k35, k36, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, \
|
||||||
|
k41, k43, k44, k46, k49, k4b, k4f \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
|
||||||
|
{ k10, k11, k12, k13, k14, k15, k16, XXX, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
|
||||||
|
{ k20, k21, k22, k23, k24, k25, k26, XXX, k28, k29, k2a, k2b, k2c, k2d, XXX, k2f }, \
|
||||||
|
{ XXX, k31, k32, k33, k34, k35, k36, XXX, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f }, \
|
||||||
|
{ XXX, k41, XXX, k43, k44, XXX, k46, XXX, XXX, k49, XXX, k4b, XXX, XXX, XXX, k4f }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2u backspace
|
||||||
|
// Split right shift
|
||||||
|
#define LAYOUT_alice( \
|
||||||
|
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0f, \
|
||||||
|
k10, k11, k12, k13, k14, k15, k16, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
|
||||||
|
k20, k21, k22, k23, k24, k25, k26, k28, k29, k2a, k2b, k2c, k2d, k2f, \
|
||||||
|
k31, k32, k33, k34, k35, k36, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, \
|
||||||
|
k41, k43, k44, k46, k49, k4b, k4f \
|
||||||
|
) \
|
||||||
|
{ \
|
||||||
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, XXX, k0f }, \
|
||||||
|
{ k10, k11, k12, k13, k14, k15, k16, XXX, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
|
||||||
|
{ k20, k21, k22, k23, k24, k25, k26, XXX, k28, k29, k2a, k2b, k2c, k2d, XXX, k2f }, \
|
||||||
|
{ XXX, k31, k32, k33, k34, k35, k36, XXX, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f }, \
|
||||||
|
{ XXX, k41, XXX, k43, k44, XXX, k46, XXX, XXX, k49, XXX, k4b, XXX, XXX, XXX, k4f }, \
|
||||||
|
}
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Ramon Imbao
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xB16B
|
||||||
|
#define PRODUCT_ID 0xE460
|
||||||
|
#define DEVICE_VER 0x0012
|
||||||
|
#define MANUFACTURER Ramon Imbao
|
||||||
|
#define PRODUCT AELITH
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { D5, D1, D0, D6, A7 }
|
||||||
|
#define MATRIX_COL_PINS { D7, C0, C1, C2, C3, C4, C5, C6, C7, A6, A5, A0, A1, A2, A3, A4 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is useful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
//#define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
|
||||||
|
/* disable these deprecated features by default */
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "AELITH",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "Ramon Imbao",
|
||||||
|
"width": 19,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_alice_split_bs": {
|
||||||
|
"layout": [
|
||||||
|
{"x":0.5, "y":0},
|
||||||
|
|
||||||
|
{"x":1.75, "y":0},
|
||||||
|
{"x":2.75, "y":0},
|
||||||
|
{"x":3.75, "y":0},
|
||||||
|
{"x":4.75, "y":0},
|
||||||
|
{"x":5.75, "y":0},
|
||||||
|
{"x":6.75, "y":0},
|
||||||
|
{"x":7.75, "y":0},
|
||||||
|
|
||||||
|
{"x":11, "y":0},
|
||||||
|
{"x":12, "y":0},
|
||||||
|
{"x":13, "y":0},
|
||||||
|
{"x":14, "y":0},
|
||||||
|
{"x":15, "y":0},
|
||||||
|
{"x":16, "y":0},
|
||||||
|
{"x":17, "y":0},
|
||||||
|
{"x":18, "y":0},
|
||||||
|
|
||||||
|
{"x":0.25, "y":1},
|
||||||
|
{"x":1.75, "y":1, "w":1.5},
|
||||||
|
{"x":3.25, "y":1},
|
||||||
|
{"x":4.25, "y":1},
|
||||||
|
{"x":5.25, "y":1},
|
||||||
|
{"x":6.25, "y":1},
|
||||||
|
{"x":7.25, "y":1},
|
||||||
|
|
||||||
|
{"x":10.5, "y":1},
|
||||||
|
{"x":11.5, "y":1},
|
||||||
|
{"x":12.5, "y":1},
|
||||||
|
{"x":13.5, "y":1},
|
||||||
|
{"x":14.5, "y":1},
|
||||||
|
{"x":15.5, "y":1},
|
||||||
|
{"x":16.5, "y":1},
|
||||||
|
{"x":17.5, "y":1, "w":1.5},
|
||||||
|
|
||||||
|
{"x":0, "y":2},
|
||||||
|
|
||||||
|
{"x":1.75, "y":2, "w":1.75},
|
||||||
|
{"x":3.5, "y":2},
|
||||||
|
{"x":4.5, "y":2},
|
||||||
|
{"x":5.5, "y":2},
|
||||||
|
{"x":6.5, "y":2},
|
||||||
|
{"x":7.5, "y":2},
|
||||||
|
|
||||||
|
{"x":10.75, "y":2},
|
||||||
|
{"x":11.75, "y":2},
|
||||||
|
{"x":12.75, "y":2},
|
||||||
|
{"x":13.75, "y":2},
|
||||||
|
{"x":14.75, "y":2},
|
||||||
|
{"x":15.75, "y":2},
|
||||||
|
{"x":16.75, "y":2, "w":2.25},
|
||||||
|
|
||||||
|
{"x":1.75, "y":3, "w":2.25},
|
||||||
|
{"x":4, "y":3},
|
||||||
|
{"x":5, "y":3},
|
||||||
|
{"x":6, "y":3},
|
||||||
|
{"x":7, "y":3},
|
||||||
|
{"x":8, "y":3},
|
||||||
|
|
||||||
|
{"x":10.25, "y":3},
|
||||||
|
{"x":11.25, "y":3},
|
||||||
|
{"x":12.25, "y":3},
|
||||||
|
{"x":13.25, "y":3},
|
||||||
|
{"x":14.25, "y":3},
|
||||||
|
{"x":15.25, "y":3},
|
||||||
|
{"x":16.25, "y":3, "w":1.75},
|
||||||
|
{"x":18, "y":3},
|
||||||
|
|
||||||
|
{"x":1.75, "y":4, "w":1.5},
|
||||||
|
{"x":4.5, "y":4, "w":1.5},
|
||||||
|
{"x":6, "y":4, "w":2.25},
|
||||||
|
{"x":8.25, "y":4},
|
||||||
|
|
||||||
|
{"x":10.25, "y":4, "w":2.75},
|
||||||
|
{"x":13, "y":4, "w":1.5},
|
||||||
|
{"x":17.5, "y":4, "w":1.5}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/* Copyright 2020 Ramon Imbao
|
||||||
|
*
|
||||||
|
* 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_alice_split_bs(
|
||||||
|
KC_ESC, 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_BSPC,
|
||||||
|
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
|
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_alice_split_bs(
|
||||||
|
RESET, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
|
||||||
|
KC_HOME, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
KC_END, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/* Copyright 2020 Ramon Imbao
|
||||||
|
*
|
||||||
|
* 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_alice_split_bs(
|
||||||
|
KC_ESC, 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_BSPC,
|
||||||
|
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
|
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_alice_split_bs(
|
||||||
|
RESET, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
|
||||||
|
KC_HOME, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
KC_END, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[2] = LAYOUT_alice_split_bs(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[3] = LAYOUT_alice_split_bs(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# ÆLITH
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A through-hole Alice-layout keyboard.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [Ramon Imbao](https://github.com/ramonimbao)
|
||||||
|
* Hardware Supported: ATmega32A
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make ramonimbao/aelith: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).
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32a
|
||||||
|
|
||||||
|
# Processor frequency
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = USBasp
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
|
|
||||||
|
LAYOUTS = alice
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2020 Sendy YK <[email protected]>.
|
* 60 ANSI Arrow Keymap with RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Sendy YK <https://mr.sendyyk.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -15,50 +17,35 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* 60% ANSI Arrow Keyboard Layout and Keymap
|
|
||||||
* with RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
|
|
||||||
* by Sendy YK <https://mr.sendyyk.com>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
enum layer_names {
|
enum layer_names {
|
||||||
_BASE, // Default Layer
|
_BASE, // Default Layer
|
||||||
_FN, // Fn Layer 1
|
_FN // Fn Layer
|
||||||
_SETTINGS // Fn Layer 2
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// Default Layer
|
// Default Layer
|
||||||
[_BASE] = LAYOUT_60_ansi_arrow(
|
[_BASE] = LAYOUT_60_ansi_arrow(
|
||||||
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_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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(2, KC_RALT), LT(1, KC_RCTL), KC_LEFT, KC_DOWN, KC_RGHT
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
),
|
),
|
||||||
// Fn Layer 1
|
// Fn Layer
|
||||||
[_FN] = LAYOUT_60_ansi_arrow(
|
[_FN] = LAYOUT_60_ansi_arrow(
|
||||||
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_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_BRIU, KC_TRNS, KC_TRNS, KC_END, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_EJCT,
|
KC_BRIU, _______, _______, KC_END, RESET, _______, _______, _______, KC_INS, _______, KC_PSCR, _______, _______, KC_EJCT,
|
||||||
KC_BRID, KC_TRNS, KC_SLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
|
KC_BRID, _______, KC_SLCK, _______, _______, _______, KC_HOME, _______, _______, _______, _______, _______, KC_MUTE,
|
||||||
KC_VOLU, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_NLCK, KC_MAIL, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_TRNS,
|
KC_VOLU, _______, _______, KC_CALC, _______, _______, KC_NLCK, KC_MAIL, _______, _______, KC_PAUS, KC_PGUP, _______,
|
||||||
KC_VOLD, KC_MRWD, KC_MFFD, KC_MPLY, KC_MSTP, KC_TRNS, KC_MPRV, KC_PGDN, KC_MNXT
|
KC_VOLD, KC_MRWD, KC_MFFD, KC_MPLY, KC_MSTP, _______, KC_MPRV, KC_PGDN, KC_MNXT
|
||||||
),
|
|
||||||
// Fn Layer 2
|
|
||||||
[_SETTINGS] = LAYOUT_60_ansi_arrow(
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
void keyboard_post_init_user(void) {
|
void keyboard_post_init_user(void) {
|
||||||
rgblight_enable_noeeprom();
|
rgblight_enable_noeeprom();
|
||||||
rgblight_sethsv_noeeprom(0, 0, 0);
|
rgblight_setrgb(100, 255, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
|
// RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
|
||||||
@@ -69,7 +56,7 @@ void update_led(void) {
|
|||||||
}
|
}
|
||||||
// Scroll Lock Indicator
|
// Scroll Lock Indicator
|
||||||
if (host_keyboard_led_state().scroll_lock) {
|
if (host_keyboard_led_state().scroll_lock) {
|
||||||
rgblight_setrgb(255, 110, 0);
|
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,22 +64,18 @@ void led_set_user(uint8_t usb_led) {
|
|||||||
// Caps Lock Indicator
|
// Caps Lock Indicator
|
||||||
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
||||||
writePinLow(B2);
|
writePinLow(B2);
|
||||||
rgblight_setrgb(100, 255, 100);
|
rgblight_setrgb(255, 110, 0);
|
||||||
}
|
}
|
||||||
// Layer Indicator
|
// Layer Indicator
|
||||||
else {
|
else {
|
||||||
switch (get_highest_layer(layer_state)) {
|
switch (get_highest_layer(layer_state)) {
|
||||||
// Fn Layer 1 Indicator
|
// Fn Layer Indicator
|
||||||
case _FN:
|
case _FN:
|
||||||
rgblight_setrgb(100, 255, 100);
|
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 1);
|
||||||
break;
|
|
||||||
// Fn Layer 2 Indicator
|
|
||||||
case _SETTINGS:
|
|
||||||
rgblight_setrgb(100, 255, 100);
|
|
||||||
break;
|
break;
|
||||||
// Default Layer Indicator
|
// Default Layer Indicator
|
||||||
case _BASE:
|
case _BASE:
|
||||||
rgblight_setrgb(0, 0, 0);
|
rgblight_setrgb(100, 255, 100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
update_led();
|
update_led();
|
||||||
|
|||||||
@@ -1,42 +1,28 @@
|
|||||||
# Sendy YK's 60% ANSI Arrow Layout and Keymap
|
# 60 ANSI Arrow Keymap by [Sendy YK](https://mr.sendyyk.com)
|
||||||
|
|
||||||
60% ANSI Arrow keyboard layout and keymap with RGB lighting/LED/underglow as Caps Lock, Num Lock, Scroll Lock, and layer indicator by [Sendy YK](https://mr.sendyyk.com).
|
With RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator.
|
||||||
|
|
||||||
## 60% ANSI Arrow Layout
|
## Default Layer
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Keymap
|
## Fn Layer
|
||||||
|
|
||||||
### Default Layer
|

|
||||||
|
|
||||||

|
## RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
|
||||||
|
|
||||||
### Fn Layer 1
|
### Caps Lock Indicator
|
||||||
|
|
||||||
Press and hold *right* **Ctrl** key.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Fn Layer 2
|
|
||||||
|
|
||||||
Press and hold *right* **Alt** key.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### RGB Lighting/LED/Underglow as Caps Lock, Num Lock, Scroll Lock, and Layer Indicator
|
|
||||||
|
|
||||||
#### Caps Lock Indicator
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// Caps Lock Indicator
|
// Caps Lock Indicator
|
||||||
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
|
||||||
writePinLow(B2);
|
writePinLow(B2);
|
||||||
rgblight_setrgb(100, 255, 100);
|
rgblight_setrgb(255, 110, 0);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Num Lock Indicator
|
### Num Lock Indicator
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// Num Lock Indicator
|
// Num Lock Indicator
|
||||||
@@ -45,31 +31,27 @@ Press and hold *right* **Alt** key.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Scroll Lock Indicator
|
### Scroll Lock Indicator
|
||||||
```c
|
```c
|
||||||
// Scroll Lock Indicator
|
// Scroll Lock Indicator
|
||||||
if (host_keyboard_led_state().scroll_lock) {
|
if (host_keyboard_led_state().scroll_lock) {
|
||||||
rgblight_setrgb(255, 110, 0);
|
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 2);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Layer Indicator
|
### Layer Indicator
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// Layer Indicator
|
// Layer Indicator
|
||||||
else {
|
else {
|
||||||
switch (get_highest_layer(layer_state)) {
|
switch (get_highest_layer(layer_state)) {
|
||||||
// Fn Layer 1 Indicator
|
// Fn Layer Indicator
|
||||||
case _FN:
|
case _FN:
|
||||||
rgblight_setrgb(100, 255, 100);
|
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 1);
|
||||||
break;
|
|
||||||
// Fn Layer 2 Indicator
|
|
||||||
case _SETTINGS:
|
|
||||||
rgblight_setrgb(100, 255, 100);
|
|
||||||
break;
|
break;
|
||||||
// Default Layer Indicator
|
// Default Layer Indicator
|
||||||
case _BASE:
|
case _BASE:
|
||||||
rgblight_setrgb(0, 0, 0);
|
rgblight_setrgb(100, 255, 100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
update_led();
|
update_led();
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
@@ -15,7 +31,7 @@
|
|||||||
#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Hybrid Monstrosity
|
#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Hybrid Monstrosity
|
||||||
|
|
||||||
#undef DEBOUNCE
|
#undef DEBOUNCE
|
||||||
#define DEBOUNCE 15
|
#define DEBOUNCE 20
|
||||||
|
|
||||||
#define TAPPING_TERM_PER_KEY
|
#define TAPPING_TERM_PER_KEY
|
||||||
|
|
||||||
@@ -25,8 +41,7 @@
|
|||||||
# undef RGB_MATRIX_LED_PROCESS_LIMIT
|
# undef RGB_MATRIX_LED_PROCESS_LIMIT
|
||||||
# undef RGB_MATRIX_LED_FLUSH_LIMIT
|
# undef RGB_MATRIX_LED_FLUSH_LIMIT
|
||||||
# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
|
# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
|
||||||
# define RGBLIGHT_LIMIT_VAL 175
|
# define RGBLIGHT_LIMIT_VAL 100
|
||||||
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS (RGBLIGHT_LIMIT_VAL + 25)
|
|
||||||
# undef RGBLIGHT_SLEEP
|
# undef RGBLIGHT_SLEEP
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
#ifdef UNICODEMAP_ENABLE
|
#ifdef UNICODEMAP_ENABLE
|
||||||
@@ -6,9 +22,6 @@
|
|||||||
#ifndef UNICODE_ENABLE
|
#ifndef UNICODE_ENABLE
|
||||||
# define UC(x) KC_NO
|
# define UC(x) KC_NO
|
||||||
#endif
|
#endif
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
extern rgblight_config_t rgblight_config;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum more_custom_keycodes {
|
enum more_custom_keycodes {
|
||||||
KC_SWAP_NUM = NEW_SAFE_RANGE,
|
KC_SWAP_NUM = NEW_SAFE_RANGE,
|
||||||
@@ -315,8 +328,21 @@ void keyboard_post_init_keymap(void) {
|
|||||||
void shutdown_keymap(void) {
|
void shutdown_keymap(void) {
|
||||||
trackball_set_rgbw(RGB_RED, 0x00);
|
trackball_set_rgbw(RGB_RED, 0x00);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool mouse_button_one, trackball_button_one;
|
||||||
|
|
||||||
|
void trackball_check_click(bool pressed, report_mouse_t* mouse) {
|
||||||
|
if (mouse_button_one | pressed) {
|
||||||
|
mouse->buttons |= MOUSE_BTN1;
|
||||||
|
} else {
|
||||||
|
mouse->buttons &= ~MOUSE_BTN1;
|
||||||
|
}
|
||||||
|
trackball_button_one = pressed;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
case KC_1:
|
case KC_1:
|
||||||
@@ -358,33 +384,20 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
run_trackball_cleanup();
|
run_trackball_cleanup();
|
||||||
break;
|
break;
|
||||||
#if !defined(MOUSEKEY_ENABLE) && defined(POINTING_DEVICE_ENABLE)
|
#if !defined(MOUSEKEY_ENABLE)
|
||||||
case KC_BTN1 ... KC_BTN3:
|
case KC_MS_BTN1:
|
||||||
{
|
mouse_button_one = record->event.pressed;
|
||||||
report_mouse_t currentReport = pointing_device_get_report();
|
trackball_register_button(mouse_button_one | trackball_button_one, MOUSE_BTN1);
|
||||||
if (record->event.pressed) {
|
break;
|
||||||
currentReport.buttons |= (1 << (keycode - KC_BTN1)); // this is defined in report.h
|
case KC_MS_BTN2:
|
||||||
} else {
|
trackball_register_button(record->event.pressed, MOUSE_BTN2);
|
||||||
currentReport.buttons &= ~(1 << (keycode - KC_BTN1));
|
break;
|
||||||
}
|
case KC_MS_BTN3:
|
||||||
pointing_device_set_report(currentReport);
|
trackball_register_button(record->event.pressed, MOUSE_BTN3);
|
||||||
pointing_device_send();
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// switch (keycode) {
|
|
||||||
// case KC_P00:
|
|
||||||
// if (!record->event.pressed) {
|
|
||||||
// register_code(KC_KP_0);
|
|
||||||
// unregister_code(KC_KP_0);
|
|
||||||
// register_code(KC_KP_0);
|
|
||||||
// unregister_code(KC_KP_0);
|
|
||||||
// }
|
|
||||||
// return false;
|
|
||||||
// break;
|
|
||||||
//}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,7 +470,8 @@ void rgb_matrix_indicators_user(void) {
|
|||||||
if (userspace_config.rgb_layer_change)
|
if (userspace_config.rgb_layer_change)
|
||||||
# endif
|
# endif
|
||||||
{
|
{
|
||||||
switch (get_highest_layer(layer_state)) {
|
bool mods_enabled = IS_LAYER_ON(_MODS);
|
||||||
|
switch (get_highest_layer(layer_state|default_layer_state)) {
|
||||||
case _GAMEPAD:
|
case _GAMEPAD:
|
||||||
rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
@@ -473,36 +487,30 @@ void rgb_matrix_indicators_user(void) {
|
|||||||
case _ADJUST:
|
case _ADJUST:
|
||||||
rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
default: {
|
case _QWERTY:
|
||||||
bool mods_enabled = IS_LAYER_ON(_MODS);
|
rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
switch (get_highest_layer(default_layer_state)) {
|
break;
|
||||||
case _QWERTY:
|
case _COLEMAK:
|
||||||
rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_MAGENTA, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
case _COLEMAK:
|
case _DVORAK:
|
||||||
rgb_matrix_layer_helper(HSV_MAGENTA, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
case _DVORAK:
|
case _WORKMAN:
|
||||||
rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_GOLDENROD, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
case _WORKMAN:
|
case _NORMAN:
|
||||||
rgb_matrix_layer_helper(HSV_GOLDENROD, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_CORAL, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
case _NORMAN:
|
case _MALTRON:
|
||||||
rgb_matrix_layer_helper(HSV_CORAL, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_YELLOW, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
case _MALTRON:
|
case _EUCALYN:
|
||||||
rgb_matrix_layer_helper(HSV_YELLOW, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_PINK, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
break;
|
||||||
case _EUCALYN:
|
case _CARPLAX:
|
||||||
rgb_matrix_layer_helper(HSV_PINK, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
||||||
break;
|
|
||||||
case _CARPLAX:
|
|
||||||
rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2020 Sendy YK <[email protected]>.
|
* Numpad 5x4 Keymap
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Sendy YK <https://mr.sendyyk.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -15,8 +17,6 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Number Pad 5x4 Layout and Keymap by Sendy YK <https://mr.sendyyk.com>.
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
enum layer_names {
|
enum layer_names {
|
||||||
|
|||||||
@@ -1,14 +1,6 @@
|
|||||||
# Sendy YK's Numpad 5x4 Layout and Keymap
|
# Numpad 5x4 Keymap by [Sendy YK](https://mr.sendyyk.com).
|
||||||
|
|
||||||
Number Pad 5x4 layout and keymap by [Sendy YK](https://mr.sendyyk.com).
|

|
||||||
|
|
||||||
## Numpad 5x4 Layout
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Keymap
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Build The Firmware
|
## Build The Firmware
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// #define B6_AUDIO
|
// #define B6_AUDIO
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
#define F2_MCRO LT(_GAMEPAD, KC_F2)
|
#define F2_MCRO LT(_GAMEPAD, KC_F2)
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
|
#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/* ws2812 RGB LED */
|
/* ws2812 RGB LED */
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
+16
-20
@@ -1,22 +1,18 @@
|
|||||||
/*
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
This is the c configuration file for the keymap
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
* it under the terms of the GNU General Public License as published by
|
||||||
Copyright 2015 Jack Humbert
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
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
|
* This program is distributed in the hope that it will be useful,
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
(at your option) any later version.
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
This program is distributed in the hope that it will be useful,
|
*
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* You should have received a copy of the GNU General Public License
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
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
|
#pragma once
|
||||||
|
|
||||||
@@ -70,7 +66,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#undef PRODUCT
|
#undef PRODUCT
|
||||||
#define PRODUCT Drashna Hacked Corne Keyboard
|
#define PRODUCT Drashna Hacked Corne Keyboard
|
||||||
|
|
||||||
#define OLED_FONT_H "keyboards/crkbd/keymaps/drashna/glcdfont.c"
|
#define OLED_FONT_H "layouts/community/split_3x6_3/drashna/glcdfont.c"
|
||||||
// #define OLED_FONT_WIDTH 5
|
// #define OLED_FONT_WIDTH 5
|
||||||
// #define OLED_FONT_HEIGHT 7
|
// #define OLED_FONT_HEIGHT 7
|
||||||
|
|
||||||
File renamed without changes.
+31
-15
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
extern uint8_t is_master;
|
extern uint8_t is_master;
|
||||||
@@ -17,90 +33,90 @@ enum crkbd_keycodes { RGBRST = NEW_SAFE_RANGE };
|
|||||||
* of use. K## is a placeholder to pass through the individual keycodes
|
* of use. K## is a placeholder to pass through the individual keycodes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define LAYOUT_crkbd_base( \
|
#define LAYOUT_split_3x6_3_base( \
|
||||||
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
|
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
|
||||||
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
|
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
|
||||||
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
|
K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
|
||||||
) \
|
) \
|
||||||
LAYOUT_wrapper( \
|
LAYOUT_split_3x6_3_wrapper( \
|
||||||
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
|
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
|
||||||
ALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
|
ALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
|
||||||
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
|
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
|
||||||
KC_GRV, KC_SPC, BK_LWER, DL_RAIS, KC_ENT, OS_RGUI \
|
KC_GRV, KC_SPC, BK_LWER, DL_RAIS, KC_ENT, OS_RGUI \
|
||||||
)
|
)
|
||||||
#define LAYOUT_crkbd_base_wrapper(...) LAYOUT_crkbd_base(__VA_ARGS__)
|
#define LAYOUT_split_3x6_3_base_wrapper(...) LAYOUT_split_3x6_3_base(__VA_ARGS__)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_QWERTY] = LAYOUT_crkbd_base_wrapper(
|
[_QWERTY] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
|
_________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
|
||||||
_________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
|
_________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
|
||||||
_________________QWERTY_L3_________________, _________________QWERTY_R3_________________
|
_________________QWERTY_L3_________________, _________________QWERTY_R3_________________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_COLEMAK] = LAYOUT_crkbd_base_wrapper(
|
[_COLEMAK] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
|
_________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
|
||||||
_________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
|
_________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
|
||||||
_________________COLEMAK_L3________________, _________________COLEMAK_R3________________
|
_________________COLEMAK_L3________________, _________________COLEMAK_R3________________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_DVORAK] = LAYOUT_crkbd_base_wrapper(
|
[_DVORAK] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
|
_________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
|
||||||
_________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
|
_________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
|
||||||
_________________DVORAK_L3_________________, _________________DVORAK_R3_________________
|
_________________DVORAK_L3_________________, _________________DVORAK_R3_________________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_WORKMAN] = LAYOUT_crkbd_base_wrapper(
|
[_WORKMAN] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
|
_________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
|
||||||
_________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
|
_________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
|
||||||
_________________WORKMAN_L3________________, _________________WORKMAN_R3________________
|
_________________WORKMAN_L3________________, _________________WORKMAN_R3________________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_NORMAN] = LAYOUT_crkbd_base_wrapper(
|
[_NORMAN] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_________________NORMAN_L1_________________, _________________NORMAN_L1_________________,
|
_________________NORMAN_L1_________________, _________________NORMAN_L1_________________,
|
||||||
_________________NORMAN_L2_________________, _________________NORMAN_R2_________________,
|
_________________NORMAN_L2_________________, _________________NORMAN_R2_________________,
|
||||||
_________________NORMAN_L3_________________, _________________NORMAN_R3_________________
|
_________________NORMAN_L3_________________, _________________NORMAN_R3_________________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_MALTRON] = LAYOUT_crkbd_base_wrapper(
|
[_MALTRON] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_________________MALTRON_L1________________, _________________MALTRON_R1________________,
|
_________________MALTRON_L1________________, _________________MALTRON_R1________________,
|
||||||
_________________MALTRON_L2________________, _________________MALTRON_R2________________,
|
_________________MALTRON_L2________________, _________________MALTRON_R2________________,
|
||||||
_________________MALTRON_L3________________, _________________MALTRON_R3________________
|
_________________MALTRON_L3________________, _________________MALTRON_R3________________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_EUCALYN] = LAYOUT_crkbd_base_wrapper(
|
[_EUCALYN] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_________________EUCALYN_L1________________, _________________EUCALYN_R1________________,
|
_________________EUCALYN_L1________________, _________________EUCALYN_R1________________,
|
||||||
_________________EUCALYN_L2________________, _________________EUCALYN_R2________________,
|
_________________EUCALYN_L2________________, _________________EUCALYN_R2________________,
|
||||||
_________________EUCALYN_L3________________, _________________EUCALYN_R3________________
|
_________________EUCALYN_L3________________, _________________EUCALYN_R3________________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_CARPLAX] = LAYOUT_crkbd_base_wrapper(
|
[_CARPLAX] = LAYOUT_split_3x6_3_base_wrapper(
|
||||||
_____________CARPLAX_QFMLWY_L1_____________, _____________CARPLAX_QFMLWY_R1_____________,
|
_____________CARPLAX_QFMLWY_L1_____________, _____________CARPLAX_QFMLWY_R1_____________,
|
||||||
_____________CARPLAX_QFMLWY_L2_____________, _____________CARPLAX_QFMLWY_R2_____________,
|
_____________CARPLAX_QFMLWY_L2_____________, _____________CARPLAX_QFMLWY_R2_____________,
|
||||||
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
|
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
|
||||||
),
|
),
|
||||||
|
|
||||||
[_MODS] = LAYOUT_wrapper(
|
[_MODS] = LAYOUT_split_3x6_3_wrapper(
|
||||||
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
|
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
|
||||||
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
|
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
|
||||||
KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, KC_RSFT,
|
KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, KC_RSFT,
|
||||||
_______, _______, _______, _______, _______, _______
|
_______, _______, _______, _______, _______, _______
|
||||||
),
|
),
|
||||||
|
|
||||||
[_LOWER] = LAYOUT_wrapper(
|
[_LOWER] = LAYOUT_split_3x6_3_wrapper(
|
||||||
KC_F11, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11,
|
KC_F11, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11,
|
||||||
KC_F12, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
|
KC_F12, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
|
||||||
_______, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______,
|
_______, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______,
|
||||||
_______, _______, _______, _______, _______, _______
|
_______, _______, _______, _______, _______, _______
|
||||||
),
|
),
|
||||||
|
|
||||||
[_RAISE] = LAYOUT_wrapper( \
|
[_RAISE] = LAYOUT_split_3x6_3_wrapper( \
|
||||||
_______, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
|
_______, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
|
||||||
_______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
|
_______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
|
||||||
_______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
|
_______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
|
||||||
_______, _______, _______, _______, _______, _______
|
_______, _______, _______, _______, _______, _______
|
||||||
),
|
),
|
||||||
|
|
||||||
[_ADJUST] = LAYOUT_wrapper( \
|
[_ADJUST] = LAYOUT_split_3x6_3_wrapper( \
|
||||||
KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
|
KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
|
||||||
VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
|
VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
|
||||||
MG_NKRO, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, RGB_IDL,
|
MG_NKRO, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, RGB_IDL,
|
||||||
+6
-5
@@ -16,12 +16,13 @@ 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.
|
||||||
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||||
RGB_MATRIX_ENABLE = WS2812
|
|
||||||
|
|
||||||
HAPTIC_ENABLE = SOLENOID
|
|
||||||
# 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
|
||||||
|
|
||||||
BOOTLOADER = qmk-dfu
|
ifeq ($(strip $(KEYBOARD)), crkbd/rev1)
|
||||||
|
OLED_DRIVER_ENABLE = yes
|
||||||
OLED_DRIVER_ENABLE = yes
|
RGB_MATRIX_ENABLE = WS2812
|
||||||
|
HAPTIC_ENABLE = SOLENOID
|
||||||
|
BOOTLOADER = qmk-dfu
|
||||||
|
endif
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2020 Sendy YK <[email protected]>.
|
* 60_ansi_arrow Keymap
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Sendy YK <https://mr.sendyyk.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -15,39 +17,28 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Default 60% ANSI Arrow Keyboard Layout and Keymap by Sendy YK <https://mr.sendyyk.com>.
|
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
enum layer_names {
|
enum layer_names {
|
||||||
_BASE, // Default Layer
|
_BASE, // Default Layer
|
||||||
_FN, // Fn Layer 1
|
_FN // Fn Layer
|
||||||
_SETTINGS // Fn Layer 2
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// Default Layer
|
// Default Layer
|
||||||
[_BASE] = LAYOUT_60_ansi_arrow(
|
[_BASE] = LAYOUT_60_ansi_arrow(
|
||||||
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_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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(2, KC_RALT), LT(1, KC_RCTL), KC_LEFT, KC_DOWN, KC_RGHT
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
),
|
),
|
||||||
// Fn Layer 1
|
// Fn Layer
|
||||||
[_FN] = LAYOUT_60_ansi_arrow(
|
[_FN] = LAYOUT_60_ansi_arrow(
|
||||||
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_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_BRIU, KC_TRNS, KC_TRNS, KC_END, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_EJCT,
|
KC_BRIU, _______, _______, KC_END, RESET, _______, _______, _______, KC_INS, _______, KC_PSCR, _______, _______, KC_EJCT,
|
||||||
KC_BRID, KC_TRNS, KC_SLCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
|
KC_BRID, _______, KC_SLCK, _______, _______, _______, KC_HOME, _______, _______, _______, _______, _______, KC_MUTE,
|
||||||
KC_VOLU, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_NLCK, KC_MAIL, KC_TRNS, KC_TRNS, KC_PAUS, KC_PGUP, KC_TRNS,
|
KC_VOLU, _______, _______, KC_CALC, _______, _______, KC_NLCK, KC_MAIL, _______, _______, KC_PAUS, KC_PGUP, _______,
|
||||||
KC_VOLD, KC_MRWD, KC_MFFD, KC_MPLY, KC_MSTP, KC_TRNS, KC_MPRV, KC_PGDN, KC_MNXT
|
KC_VOLD, KC_MRWD, KC_MFFD, KC_MPLY, KC_MSTP, _______, KC_MPRV, KC_PGDN, KC_MNXT
|
||||||
),
|
|
||||||
// Fn Layer 2
|
|
||||||
[_SETTINGS] = LAYOUT_60_ansi_arrow(
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
@@ -1,28 +1,14 @@
|
|||||||
# 60_ansi_arrow and Keymap
|
# 60_ansi_arrow Keymap
|
||||||
|
|
||||||
Default 60% ANSI Arrow keyboard layout and keymap by [Sendy YK](https://mr.sendyyk.com).
|
by [Sendy YK](https://mr.sendyyk.com).
|
||||||
|
|
||||||
## 60% ANSI Arrow Layout
|
## Default Layer
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Keymap
|
## Fn Layer
|
||||||
|
|
||||||
### Default Layer
|

|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Fn Layer 1
|
|
||||||
|
|
||||||
Press and hold *right* **Ctrl** key.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Fn Layer 2
|
|
||||||
|
|
||||||
Press and hold *right* **Alt** key.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Build The Firmware
|
## Build The Firmware
|
||||||
|
|
||||||
|
|||||||
+63
-15
@@ -18,9 +18,11 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import shlex
|
import shlex
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from platform import platform
|
||||||
from tempfile import NamedTemporaryFile
|
from tempfile import NamedTemporaryFile
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
@@ -94,29 +96,54 @@ def format_ansi(text):
|
|||||||
return text + ansi_colors['style_reset_all']
|
return text + ansi_colors['style_reset_all']
|
||||||
|
|
||||||
|
|
||||||
class ANSIFormatter(logging.Formatter):
|
class ANSIFormatterMixin(object):
|
||||||
"""A log formatter that inserts ANSI color.
|
"""A log formatter mixin that inserts ANSI color.
|
||||||
"""
|
"""
|
||||||
def format(self, record):
|
def format(self, record):
|
||||||
msg = super(ANSIFormatter, self).format(record)
|
msg = super(ANSIFormatterMixin, self).format(record)
|
||||||
return format_ansi(msg)
|
return format_ansi(msg)
|
||||||
|
|
||||||
|
|
||||||
class ANSIEmojiLoglevelFormatter(ANSIFormatter):
|
class ANSIStrippingMixin(object):
|
||||||
"""A log formatter that makes the loglevel an emoji on UTF capable terminals.
|
"""A log formatter mixin that strips ANSI.
|
||||||
|
"""
|
||||||
|
def format(self, record):
|
||||||
|
msg = super(ANSIStrippingMixin, self).format(record)
|
||||||
|
record.levelname = ansi_escape.sub('', record.levelname)
|
||||||
|
return ansi_escape.sub('', msg)
|
||||||
|
|
||||||
|
|
||||||
|
class EmojiLoglevelMixin(object):
|
||||||
|
"""A log formatter mixin that makes the loglevel an emoji on UTF capable terminals.
|
||||||
"""
|
"""
|
||||||
def format(self, record):
|
def format(self, record):
|
||||||
if UNICODE_SUPPORT:
|
if UNICODE_SUPPORT:
|
||||||
record.levelname = EMOJI_LOGLEVELS[record.levelname].format(**ansi_colors)
|
record.levelname = EMOJI_LOGLEVELS[record.levelname].format(**ansi_colors)
|
||||||
return super(ANSIEmojiLoglevelFormatter, self).format(record)
|
return super(EmojiLoglevelMixin, self).format(record)
|
||||||
|
|
||||||
|
|
||||||
class ANSIStrippingFormatter(ANSIFormatter):
|
class ANSIFormatter(ANSIFormatterMixin, logging.Formatter):
|
||||||
"""A log formatter that strips ANSI.
|
"""A log formatter that colorizes output.
|
||||||
"""
|
"""
|
||||||
def format(self, record):
|
pass
|
||||||
msg = super(ANSIStrippingFormatter, self).format(record)
|
|
||||||
return ansi_escape.sub('', msg)
|
|
||||||
|
class ANSIStrippingFormatter(ANSIStrippingMixin, ANSIFormatterMixin, logging.Formatter):
|
||||||
|
"""A log formatter that strips ANSI
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ANSIEmojiLoglevelFormatter(EmojiLoglevelMixin, ANSIFormatterMixin, logging.Formatter):
|
||||||
|
"""A log formatter that adds Emoji and ANSI
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ANSIStrippingEmojiLoglevelFormatter(ANSIStrippingMixin, EmojiLoglevelMixin, ANSIFormatterMixin, logging.Formatter):
|
||||||
|
"""A log formatter that adds Emoji and strips ANSI
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Configuration(object):
|
class Configuration(object):
|
||||||
@@ -288,11 +315,12 @@ class MILC(object):
|
|||||||
self.config_file = None
|
self.config_file = None
|
||||||
self.default_arguments = {}
|
self.default_arguments = {}
|
||||||
self.version = 'unknown'
|
self.version = 'unknown'
|
||||||
self.release_lock()
|
self.platform = platform()
|
||||||
|
|
||||||
# Figure out our program name
|
# Figure out our program name
|
||||||
self.prog_name = sys.argv[0][:-3] if sys.argv[0].endswith('.py') else sys.argv[0]
|
self.prog_name = sys.argv[0][:-3] if sys.argv[0].endswith('.py') else sys.argv[0]
|
||||||
self.prog_name = self.prog_name.split('/')[-1]
|
self.prog_name = self.prog_name.split('/')[-1]
|
||||||
|
self.release_lock()
|
||||||
|
|
||||||
# Initialize all the things
|
# Initialize all the things
|
||||||
self.read_config_file()
|
self.read_config_file()
|
||||||
@@ -315,6 +343,8 @@ class MILC(object):
|
|||||||
strings.
|
strings.
|
||||||
|
|
||||||
If *args or **kwargs are passed they will be used to %-format the strings.
|
If *args or **kwargs are passed they will be used to %-format the strings.
|
||||||
|
|
||||||
|
If `self.config.general.color` is False any ANSI escape sequences in the text will be stripped.
|
||||||
"""
|
"""
|
||||||
if args and kwargs:
|
if args and kwargs:
|
||||||
raise RuntimeError('You can only specify *args or **kwargs, not both!')
|
raise RuntimeError('You can only specify *args or **kwargs, not both!')
|
||||||
@@ -322,8 +352,27 @@ class MILC(object):
|
|||||||
args = args or kwargs
|
args = args or kwargs
|
||||||
text = format_ansi(text)
|
text = format_ansi(text)
|
||||||
|
|
||||||
|
if not self.config.general.color:
|
||||||
|
text = ansi_escape.sub('', text)
|
||||||
|
|
||||||
print(text % args)
|
print(text % args)
|
||||||
|
|
||||||
|
def run(self, command, *args, **kwargs):
|
||||||
|
"""Run a command with subprocess.run
|
||||||
|
The *args and **kwargs arguments get passed directly to `subprocess.run`.
|
||||||
|
"""
|
||||||
|
if isinstance(command, str):
|
||||||
|
raise TypeError('`command` must be a non-text sequence such as list or tuple.')
|
||||||
|
|
||||||
|
if 'windows' in self.platform.lower():
|
||||||
|
safecmd = map(shlex.quote, command)
|
||||||
|
safecmd = ' '.join(safecmd)
|
||||||
|
command = [os.environ['SHELL'], '-c', safecmd]
|
||||||
|
|
||||||
|
self.log.debug('Running command: %s', command)
|
||||||
|
|
||||||
|
return subprocess.run(command, *args, **kwargs)
|
||||||
|
|
||||||
def initialize_argparse(self):
|
def initialize_argparse(self):
|
||||||
"""Prepare to process arguments from sys.argv.
|
"""Prepare to process arguments from sys.argv.
|
||||||
"""
|
"""
|
||||||
@@ -678,14 +727,13 @@ class MILC(object):
|
|||||||
self.log_print_level = logging.DEBUG
|
self.log_print_level = logging.DEBUG
|
||||||
|
|
||||||
self.log_file = self.config['general']['log_file'] or self.log_file
|
self.log_file = self.config['general']['log_file'] or self.log_file
|
||||||
self.log_file_format = self.config['general']['log_file_fmt']
|
|
||||||
self.log_file_format = ANSIStrippingFormatter(self.config['general']['log_file_fmt'], self.config['general']['datetime_fmt'])
|
self.log_file_format = ANSIStrippingFormatter(self.config['general']['log_file_fmt'], self.config['general']['datetime_fmt'])
|
||||||
self.log_format = self.config['general']['log_fmt']
|
self.log_format = self.config['general']['log_fmt']
|
||||||
|
|
||||||
if self.config.general.color:
|
if self.config.general.color:
|
||||||
self.log_format = ANSIEmojiLoglevelFormatter(self.args.log_fmt, self.config.general.datetime_fmt)
|
self.log_format = ANSIEmojiLoglevelFormatter(self.config.general.log_fmt, self.config.general.datetime_fmt)
|
||||||
else:
|
else:
|
||||||
self.log_format = ANSIStrippingFormatter(self.args.log_fmt, self.config.general.datetime_fmt)
|
self.log_format = ANSIStrippingEmojiLoglevelFormatter(self.config.general.log_fmt, self.config.general.datetime_fmt)
|
||||||
|
|
||||||
if self.log_file:
|
if self.log_file:
|
||||||
self.log_file_handler = logging.FileHandler(self.log_file, self.log_file_mode)
|
self.log_file_handler = logging.FileHandler(self.log_file, self.log_file_mode)
|
||||||
|
|||||||
@@ -156,24 +156,16 @@ def check_udev_rules():
|
|||||||
_udev_rule("03EB", "2FF3"), # ATmega16U4
|
_udev_rule("03EB", "2FF3"), # ATmega16U4
|
||||||
_udev_rule("03EB", "2FF4"), # ATmega32U4
|
_udev_rule("03EB", "2FF4"), # ATmega32U4
|
||||||
_udev_rule("03EB", "2FF9"), # AT90USB64
|
_udev_rule("03EB", "2FF9"), # AT90USB64
|
||||||
_udev_rule("03EB", "2FFB") # AT90USB128
|
_udev_rule("03EB", "2FFB") # AT90USB128
|
||||||
},
|
|
||||||
'kiibohd': {
|
|
||||||
_udev_rule("1C11", "B007")
|
|
||||||
},
|
},
|
||||||
|
'kiibohd': {_udev_rule("1C11", "B007")},
|
||||||
'stm32': {
|
'stm32': {
|
||||||
_udev_rule("1EAF", "0003"), # STM32duino
|
_udev_rule("1EAF", "0003"), # STM32duino
|
||||||
_udev_rule("0483", "DF11") # STM32 DFU
|
_udev_rule("0483", "DF11") # STM32 DFU
|
||||||
},
|
|
||||||
'bootloadhid': {
|
|
||||||
_udev_rule("16C0", "05DF")
|
|
||||||
},
|
|
||||||
'usbasploader': {
|
|
||||||
_udev_rule("16C0", "05DC")
|
|
||||||
},
|
|
||||||
'massdrop': {
|
|
||||||
_udev_rule("03EB", "6124")
|
|
||||||
},
|
},
|
||||||
|
'bootloadhid': {_udev_rule("16C0", "05DF")},
|
||||||
|
'usbasploader': {_udev_rule("16C0", "05DC")},
|
||||||
|
'massdrop': {_udev_rule("03EB", "6124")},
|
||||||
'caterina': {
|
'caterina': {
|
||||||
# Spark Fun Electronics
|
# Spark Fun Electronics
|
||||||
_udev_rule("1B4F", "9203", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pro Micro 3V3/8MHz
|
_udev_rule("1B4F", "9203", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pro Micro 3V3/8MHz
|
||||||
@@ -190,7 +182,7 @@ def check_udev_rules():
|
|||||||
_udev_rule("239A", "000E", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # ItsyBitsy 32U4 5V/16MHz
|
_udev_rule("239A", "000E", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # ItsyBitsy 32U4 5V/16MHz
|
||||||
# dog hunter AG
|
# dog hunter AG
|
||||||
_udev_rule("2A03", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Leonardo
|
_udev_rule("2A03", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Leonardo
|
||||||
_udev_rule("2A03", "0037", 'ENV{ID_MM_DEVICE_IGNORE}="1"') # Micro
|
_udev_rule("2A03", "0037", 'ENV{ID_MM_DEVICE_IGNORE}="1"') # Micro
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
"""Functions to collect user input.
|
"""Functions to collect user input.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from milc import cli, format_ansi
|
from milc import cli
|
||||||
|
|
||||||
|
try:
|
||||||
|
from milc import format_ansi
|
||||||
|
except ImportError:
|
||||||
|
from milc.ansi import format_ansi
|
||||||
|
|
||||||
|
|
||||||
def yesno(prompt, *args, default=None, **kwargs):
|
def yesno(prompt, *args, default=None, **kwargs):
|
||||||
|
|||||||
+20
-8
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Use custom magic number so that when switching branches, EEPROM always gets reset
|
// Use custom magic number so that when switching branches, EEPROM always gets reset
|
||||||
@@ -7,11 +23,6 @@
|
|||||||
#define USB_POLLING_INTERVAL_MS 1
|
#define USB_POLLING_INTERVAL_MS 1
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
# if __GNUC__ > 5
|
|
||||||
# if __has_include("drashna_song_list.h")
|
|
||||||
# include "drashna_song_list.h"
|
|
||||||
# endif // if file exists
|
|
||||||
# endif // __GNUC__
|
|
||||||
|
|
||||||
# define AUDIO_CLICKY
|
# define AUDIO_CLICKY
|
||||||
# define STARTUP_SONG SONG(RICK_ROLL)
|
# define STARTUP_SONG SONG(RICK_ROLL)
|
||||||
@@ -49,7 +60,7 @@
|
|||||||
// # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
|
// # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
|
||||||
// # define EECONFIG_RGB_MATRIX (uint32_t *)16
|
// # define EECONFIG_RGB_MATRIX (uint32_t *)16
|
||||||
|
|
||||||
# if defined(__AVR__) && !defined(__AVR_AT90USB1286__)
|
# if defined(__AVR__) && !defined(__AVR_AT90USB1286__) && !defined(KEYBOARD_launchpad)
|
||||||
# define DISABLE_RGB_MATRIX_ALPHAS_MODS
|
# define DISABLE_RGB_MATRIX_ALPHAS_MODS
|
||||||
# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||||
# define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
|
# define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
|
||||||
@@ -63,7 +74,7 @@
|
|||||||
# define DISABLE_RGB_MATRIX_CYCLE_ALL
|
# define DISABLE_RGB_MATRIX_CYCLE_ALL
|
||||||
# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
|
# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||||
# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
||||||
# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
|
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||||
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
|
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
|
||||||
# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||||
# define DISABLE_RGB_MATRIX_DUAL_BEACON
|
# define DISABLE_RGB_MATRIX_DUAL_BEACON
|
||||||
@@ -100,7 +111,7 @@
|
|||||||
|
|
||||||
#ifdef QMK_KEYS_PER_SCAN
|
#ifdef QMK_KEYS_PER_SCAN
|
||||||
# undef QMK_KEYS_PER_SCAN
|
# undef QMK_KEYS_PER_SCAN
|
||||||
# define QMK_KEYS_PER_SCAN 1
|
# define QMK_KEYS_PER_SCAN 2
|
||||||
#endif // !QMK_KEYS_PER_SCAN
|
#endif // !QMK_KEYS_PER_SCAN
|
||||||
|
|
||||||
// this makes it possible to do rolling combos (zx) with keys that
|
// this makes it possible to do rolling combos (zx) with keys that
|
||||||
@@ -111,6 +122,7 @@
|
|||||||
#undef PERMISSIVE_HOLD
|
#undef PERMISSIVE_HOLD
|
||||||
//#define TAPPING_FORCE_HOLD
|
//#define TAPPING_FORCE_HOLD
|
||||||
//#define RETRO_TAPPING
|
//#define RETRO_TAPPING
|
||||||
|
#define TAPPING_TERM_PER_KEY
|
||||||
|
|
||||||
#define FORCE_NKRO
|
#define FORCE_NKRO
|
||||||
|
|
||||||
|
|||||||
+15
-16
@@ -1,19 +1,18 @@
|
|||||||
/*
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
Copyright 2017 Christopher Courtney <[email protected]> @drashna
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
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
|
||||||
it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
* (at your option) any later version.
|
||||||
(at your option) any later version.
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
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 "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
|
|||||||
+15
-16
@@ -1,19 +1,18 @@
|
|||||||
/*
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
|
||||||
Copyright 2017 Christopher Courtney <[email protected]> @drashna
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
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
|
||||||
it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
the Free Software Foundation, either version 2 of the License, or
|
* (at your option) any later version.
|
||||||
(at your option) any later version.
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
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/>.
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
extern uint8_t is_master;
|
extern uint8_t is_master;
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "pimoroni_trackball.h"
|
#include "pimoroni_trackball.h"
|
||||||
#include "i2c_master.h"
|
#include "i2c_master.h"
|
||||||
|
|
||||||
@@ -6,7 +22,7 @@ static int16_t x_offset = 0;
|
|||||||
static int16_t y_offset = 0;
|
static int16_t y_offset = 0;
|
||||||
static int16_t h_offset = 0;
|
static int16_t h_offset = 0;
|
||||||
static int16_t v_offset = 0;
|
static int16_t v_offset = 0;
|
||||||
static float precisionSpeed = 1;
|
static float precisionSpeed = 1;
|
||||||
|
|
||||||
#ifndef I2C_TIMEOUT
|
#ifndef I2C_TIMEOUT
|
||||||
# define I2C_TIMEOUT 100
|
# define I2C_TIMEOUT 100
|
||||||
@@ -47,17 +63,37 @@ __attribute__((weak)) void trackball_check_click(bool pressed, report_mouse_t* m
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float trackball_get_precision(void) { return precisionSpeed; }
|
void trackball_register_button(bool pressed, enum mouse_buttons button) {
|
||||||
void trackball_set_precision(float precision) { precisionSpeed = precision; }
|
report_mouse_t currentReport = pointing_device_get_report();
|
||||||
bool trackball_is_scrolling(void) { return scrolling; }
|
if (pressed) {
|
||||||
void trackball_set_scrolling(bool scroll) { scrolling = scroll; }
|
currentReport.buttons |= button;
|
||||||
|
} else {
|
||||||
|
currentReport.buttons &= ~button;
|
||||||
|
}
|
||||||
|
pointing_device_set_report(currentReport);
|
||||||
|
}
|
||||||
|
|
||||||
__attribute__((weak)) void pointing_device_init(void) { trackball_set_rgbw(0x00,0x00,0x00,0x4F); }
|
float trackball_get_precision(void) { return precisionSpeed; }
|
||||||
|
void trackball_set_precision(float precision) { precisionSpeed = precision; }
|
||||||
|
bool trackball_is_scrolling(void) { return scrolling; }
|
||||||
|
void trackball_set_scrolling(bool scroll) { scrolling = scroll; }
|
||||||
|
|
||||||
|
bool has_report_changed (report_mouse_t first, report_mouse_t second) {
|
||||||
|
return !(
|
||||||
|
(!first.buttons && first.buttons == second.buttons) &&
|
||||||
|
(!first.x && first.x == second.x) &&
|
||||||
|
(!first.y && first.y == second.y) &&
|
||||||
|
(!first.h && first.h == second.h) &&
|
||||||
|
(!first.v && first.v == second.v) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__attribute__((weak)) void pointing_device_init(void) { trackball_set_rgbw(0x00, 0x00, 0x00, 0x4F); }
|
||||||
|
|
||||||
void pointing_device_task(void) {
|
void pointing_device_task(void) {
|
||||||
static bool debounce;
|
static bool debounce;
|
||||||
static uint16_t debounce_timer;
|
static uint16_t debounce_timer;
|
||||||
uint8_t state[5] = {};
|
uint8_t state[5] = {};
|
||||||
if (i2c_readReg(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) {
|
if (i2c_readReg(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) {
|
||||||
if (!state[4] && !debounce) {
|
if (!state[4] && !debounce) {
|
||||||
if (scrolling) {
|
if (scrolling) {
|
||||||
@@ -85,7 +121,7 @@ void pointing_device_task(void) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (state[4]) {
|
if (state[4]) {
|
||||||
debounce = true;
|
debounce = true;
|
||||||
debounce_timer = timer_read();
|
debounce_timer = timer_read();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,7 +133,6 @@ void pointing_device_task(void) {
|
|||||||
|
|
||||||
trackball_check_click(state[4] & (1 << 7), &mouse);
|
trackball_check_click(state[4] & (1 << 7), &mouse);
|
||||||
|
|
||||||
|
|
||||||
#ifndef PIMORONI_TRACKBALL_ROTATE
|
#ifndef PIMORONI_TRACKBALL_ROTATE
|
||||||
update_member(&mouse.x, &x_offset);
|
update_member(&mouse.x, &x_offset);
|
||||||
update_member(&mouse.y, &y_offset);
|
update_member(&mouse.y, &y_offset);
|
||||||
@@ -110,5 +145,7 @@ void pointing_device_task(void) {
|
|||||||
update_member(&mouse.v, &h_offset);
|
update_member(&mouse.v, &h_offset);
|
||||||
#endif
|
#endif
|
||||||
pointing_device_set_report(mouse);
|
pointing_device_set_report(mouse);
|
||||||
pointing_device_send();
|
if (has_report_changed(mouse, pointing_device_get_report())) {
|
||||||
|
pointing_device_send();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
@@ -11,6 +27,7 @@
|
|||||||
|
|
||||||
void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white);
|
void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white);
|
||||||
void trackball_check_click(bool pressed, report_mouse_t *mouse);
|
void trackball_check_click(bool pressed, report_mouse_t *mouse);
|
||||||
|
void trackball_register_button(bool pressed, enum mouse_buttons button);
|
||||||
|
|
||||||
float trackball_get_precision(void);
|
float trackball_get_precision(void);
|
||||||
void trackball_set_precision(float precision);
|
void trackball_set_precision(float precision);
|
||||||
|
|||||||
+150
-267
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
uint16_t copy_paste_timer;
|
uint16_t copy_paste_timer;
|
||||||
@@ -21,304 +37,171 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
process_record_user_oled(keycode, record);
|
process_record_user_oled(keycode, record);
|
||||||
#endif // OLED
|
#endif // OLED
|
||||||
|
|
||||||
if (process_record_keymap(keycode, record) && process_record_secrets(keycode, record)
|
if (!(process_record_keymap(keycode, record) && process_record_secrets(keycode, record)
|
||||||
#ifdef RGB_MATRIX_ENABLE
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
&& process_record_user_rgb_matrix(keycode, record)
|
&& process_record_user_rgb_matrix(keycode, record)
|
||||||
#endif
|
#endif
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
&& process_record_user_rgb_light(keycode, record)
|
&& process_record_user_rgb_light(keycode, record)
|
||||||
#endif
|
#endif
|
||||||
) {
|
&& true)) {
|
||||||
switch (keycode) {
|
return false;
|
||||||
case KC_QWERTY ... KC_WORKMAN:
|
}
|
||||||
if (record->event.pressed) {
|
|
||||||
uint8_t mods = mod_config(get_mods() | get_oneshot_mods());
|
|
||||||
if (!mods) {
|
|
||||||
set_single_persistent_default_layer(keycode - KC_QWERTY);
|
|
||||||
} else if (mods & MOD_MASK_SHIFT) {
|
|
||||||
set_single_persistent_default_layer(keycode - KC_QWERTY + 4);
|
|
||||||
} else if (mods & MOD_MASK_CTRL) {
|
|
||||||
set_single_persistent_default_layer(keycode - KC_QWERTY + 8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
|
switch (keycode) {
|
||||||
if (!record->event.pressed) {
|
case KC_QWERTY ... KC_WORKMAN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
uint8_t mods = mod_config(get_mods() | get_oneshot_mods());
|
||||||
|
if (!mods) {
|
||||||
|
set_single_persistent_default_layer(keycode - KC_QWERTY);
|
||||||
|
} else if (mods & MOD_MASK_SHIFT) {
|
||||||
|
set_single_persistent_default_layer(keycode - KC_QWERTY + 4);
|
||||||
|
} else if (mods & MOD_MASK_CTRL) {
|
||||||
|
set_single_persistent_default_layer(keycode - KC_QWERTY + 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
|
||||||
|
if (!record->event.pressed) {
|
||||||
#ifndef MAKE_BOOTLOADER
|
#ifndef MAKE_BOOTLOADER
|
||||||
uint8_t temp_mod = mod_config(get_mods());
|
uint8_t temp_mod = mod_config(get_mods());
|
||||||
uint8_t temp_osm = mod_config(get_oneshot_mods());
|
uint8_t temp_osm = mod_config(get_oneshot_mods());
|
||||||
clear_mods();
|
clear_mods();
|
||||||
clear_oneshot_mods();
|
clear_oneshot_mods();
|
||||||
#endif
|
#endif
|
||||||
send_string_with_delay_P(PSTR("qmk"), TAP_CODE_DELAY);
|
send_string_with_delay_P(PSTR("qmk"), TAP_CODE_DELAY);
|
||||||
#ifndef MAKE_BOOTLOADER
|
#ifndef MAKE_BOOTLOADER
|
||||||
if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
|
if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
send_string_with_delay_P(PSTR(" flash "), TAP_CODE_DELAY);
|
send_string_with_delay_P(PSTR(" flash "), TAP_CODE_DELAY);
|
||||||
#ifndef MAKE_BOOTLOADER
|
#ifndef MAKE_BOOTLOADER
|
||||||
} else {
|
|
||||||
send_string_with_delay_P(PSTR(" compile "), TAP_CODE_DELAY);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
send_string_with_delay_P(PSTR("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP), TAP_CODE_DELAY);
|
|
||||||
#ifdef RGB_MATRIX_SPLIT_RIGHT
|
|
||||||
send_string_with_delay_P(PSTR(" RGB_MATRIX_SPLIT_RIGHT=yes"), TAP_CODE_DELAY);
|
|
||||||
# ifndef OLED_DRIVER_ENABLE
|
|
||||||
send_string_with_delay_P(PSTR(" OLED_DRIVER_ENABLE=no"), TAP_CODE_DELAY);
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VRSN: // Prints firmware version
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
|
|
||||||
#ifdef TAP_DANCE_ENABLE
|
|
||||||
if (record->event.pressed) {
|
|
||||||
for (uint8_t index = 0; index < 4; index++) {
|
|
||||||
diablo_timer[index].key_interval = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif // TAP_DANCE_ENABLE
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KC_CCCV: // One key copy/paste
|
|
||||||
if (record->event.pressed) {
|
|
||||||
copy_paste_timer = timer_read();
|
|
||||||
} else {
|
} else {
|
||||||
if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
|
send_string_with_delay_P(PSTR(" compile "), TAP_CODE_DELAY);
|
||||||
tap_code16(LCTL(KC_C));
|
|
||||||
} else { // Tap, paste
|
|
||||||
tap_code16(LCTL(KC_V));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#ifdef UNICODE_ENABLE
|
|
||||||
case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case UC_TABL: // ┬─┬ノ( º _ ºノ)
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_unicode_string("┬─┬ノ( º _ ºノ)");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case UC_SHRG: // ¯\_(ツ)_/¯
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_unicode_string("¯\\_(ツ)_/¯");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case UC_DISA: // ಠ_ಠ
|
|
||||||
if (record->event.pressed) {
|
|
||||||
send_unicode_string("ಠ_ಠ");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
#endif
|
||||||
case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
|
|
||||||
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
|
|
||||||
if (record->event.pressed) {
|
|
||||||
userspace_config.rgb_layer_change ^= 1;
|
|
||||||
dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
|
|
||||||
eeconfig_update_user(userspace_config.raw);
|
|
||||||
if (userspace_config.rgb_layer_change) {
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
|
|
||||||
rgblight_enable_noeeprom();
|
|
||||||
# endif
|
|
||||||
layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
|
|
||||||
} else {
|
|
||||||
rgblight_disable_noeeprom();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
send_string_with_delay_P(PSTR("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP), TAP_CODE_DELAY);
|
||||||
|
#ifdef RGB_MATRIX_SPLIT_RIGHT
|
||||||
|
send_string_with_delay_P(PSTR(" RGB_MATRIX_SPLIT_RIGHT=yes"), TAP_CODE_DELAY);
|
||||||
|
# ifndef OLED_DRIVER_ENABLE
|
||||||
|
send_string_with_delay_P(PSTR(" OLED_DRIVER_ENABLE=no"), TAP_CODE_DELAY);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VRSN: // Prints firmware version
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
|
||||||
|
#ifdef TAP_DANCE_ENABLE
|
||||||
|
if (record->event.pressed) {
|
||||||
|
for (uint8_t index = 0; index < 4; index++) {
|
||||||
|
diablo_timer[index].key_interval = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // TAP_DANCE_ENABLE
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KC_CCCV: // One key copy/paste
|
||||||
|
if (record->event.pressed) {
|
||||||
|
copy_paste_timer = timer_read();
|
||||||
|
} else {
|
||||||
|
if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
|
||||||
|
tap_code16(LCTL(KC_C));
|
||||||
|
} else { // Tap, paste
|
||||||
|
tap_code16(LCTL(KC_V));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef UNICODE_ENABLE
|
||||||
|
case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case UC_TABL: // ┬─┬ノ( º _ ºノ)
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_unicode_string("┬─┬ノ( º _ ºノ)");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case UC_SHRG: // ¯\_(ツ)_/¯
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_unicode_string("¯\\_(ツ)_/¯");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case UC_DISA: // ಠ_ಠ
|
||||||
|
if (record->event.pressed) {
|
||||||
|
send_unicode_string("ಠ_ಠ");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
|
||||||
|
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
|
||||||
|
if (record->event.pressed) {
|
||||||
|
userspace_config.rgb_layer_change ^= 1;
|
||||||
|
dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
|
||||||
|
eeconfig_update_user(userspace_config.raw);
|
||||||
|
if (userspace_config.rgb_layer_change) {
|
||||||
|
# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
|
||||||
|
rgblight_enable_noeeprom();
|
||||||
|
# endif
|
||||||
|
layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
|
||||||
|
# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
|
||||||
|
} else {
|
||||||
|
rgblight_disable_noeeprom();
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif // RGBLIGHT_ENABLE
|
#endif // RGBLIGHT_ENABLE
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
|
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
|
||||||
case RGB_TOG:
|
case RGB_TOG:
|
||||||
// Split keyboards need to trigger on key-up for edge-case issue
|
// Split keyboards need to trigger on key-up for edge-case issue
|
||||||
# ifndef SPLIT_KEYBOARD
|
# ifndef SPLIT_KEYBOARD
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
# else
|
# else
|
||||||
if (!record->event.pressed) {
|
if (!record->event.pressed) {
|
||||||
# endif
|
# endif
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
||||||
rgblight_toggle();
|
rgblight_toggle();
|
||||||
# endif
|
# endif
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
||||||
rgb_matrix_toggle();
|
rgb_matrix_toggle();
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
|
case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
bool is_eeprom_updated;
|
bool is_eeprom_updated;
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
||||||
// This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
|
// This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
|
||||||
if (userspace_config.rgb_layer_change) {
|
if (userspace_config.rgb_layer_change) {
|
||||||
userspace_config.rgb_layer_change = false;
|
userspace_config.rgb_layer_change = false;
|
||||||
dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
|
dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
|
||||||
is_eeprom_updated = true;
|
is_eeprom_updated = true;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
|
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
|
||||||
if (userspace_config.rgb_matrix_idle_anim) {
|
if (userspace_config.rgb_matrix_idle_anim) {
|
||||||
userspace_config.rgb_matrix_idle_anim = false;
|
userspace_config.rgb_matrix_idle_anim = false;
|
||||||
dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
|
dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
|
||||||
is_eeprom_updated = true;
|
is_eeprom_updated = true;
|
||||||
}
|
|
||||||
# endif
|
|
||||||
if (is_eeprom_updated) {
|
|
||||||
eeconfig_update_user(userspace_config.raw);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# if defined(RGBLIGHT_DISABLE_KEYCODES) || defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
if (keycode == RGB_MODE_FORWARD && record->event.pressed) {
|
|
||||||
uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
|
|
||||||
if (shifted) {
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_step_reverse();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_step_reverse();
|
|
||||||
# endif
|
|
||||||
} else {
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_step();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_step();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_MODE_REVERSE && record->event.pressed) {
|
|
||||||
uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
|
|
||||||
if (shifted) {
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_step();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_step();
|
|
||||||
# endif
|
|
||||||
} else {
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_step_reverse();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_step_reverse();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_HUI) {
|
|
||||||
# ifndef SPLIT_KEYBOARD
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# else
|
|
||||||
if (!record->event.pressed) {
|
|
||||||
# endif
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_increase_hue();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_increase_hue();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_HUD) {
|
|
||||||
# ifndef SPLIT_KEYBOARD
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# else
|
|
||||||
if (!record->event.pressed) {
|
|
||||||
# endif
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_decrease_hue();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_decrease_hue();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_SAI) {
|
|
||||||
# ifndef SPLIT_KEYBOARD
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# else
|
|
||||||
if (!record->event.pressed) {
|
|
||||||
# endif
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_increase_sat();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_increase_sat();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_SAD) {
|
|
||||||
# ifndef SPLIT_KEYBOARD
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# else
|
|
||||||
if (!record->event.pressed) {
|
|
||||||
# endif
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_decrease_sat();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_decrease_sat();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_VAI) {
|
|
||||||
# ifndef SPLIT_KEYBOARD
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# else
|
|
||||||
if (!record->event.pressed) {
|
|
||||||
# endif
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_increase_val();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_increase_val();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_VAD) {
|
|
||||||
# ifndef SPLIT_KEYBOARD
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# else
|
|
||||||
if (!record->event.pressed) {
|
|
||||||
# endif
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_decrease_val();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_decrease_val();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_SPI) {
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_increase_speed();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_increase_speed();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
} else if (keycode == RGB_SPD) {
|
|
||||||
if (record->event.pressed) {
|
|
||||||
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
|
|
||||||
rgblight_decrease_speed();
|
|
||||||
# endif
|
|
||||||
# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
|
|
||||||
rgb_matrix_decrease_speed();
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
# endif
|
# endif
|
||||||
|
if (is_eeprom_updated) {
|
||||||
|
eeconfig_update_user(userspace_config.raw);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,21 @@
|
|||||||
#include "drashna.h"
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "drashna.h"
|
||||||
|
#include "rgb_matrix.h"
|
||||||
#include "lib/lib8tion/lib8tion.h"
|
#include "lib/lib8tion/lib8tion.h"
|
||||||
extern led_config_t g_led_config;
|
extern led_config_t g_led_config;
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
|
|||||||
+42
-32
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
#include "rgb_stuff.h"
|
#include "rgb_stuff.h"
|
||||||
#include "eeprom.h"
|
#include "eeprom.h"
|
||||||
@@ -152,14 +168,15 @@ void matrix_scan_rgb_light(void) {
|
|||||||
|
|
||||||
void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) {
|
void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) {
|
||||||
rgblight_sethsv_noeeprom(hue, sat, val);
|
rgblight_sethsv_noeeprom(hue, sat, val);
|
||||||
wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly
|
// wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly
|
||||||
rgblight_mode_noeeprom(mode);
|
rgblight_mode_noeeprom(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
layer_state_t layer_state_set_rgb_light(layer_state_t state) {
|
layer_state_t layer_state_set_rgb_light(layer_state_t state) {
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
if (userspace_config.rgb_layer_change) {
|
if (userspace_config.rgb_layer_change) {
|
||||||
switch (get_highest_layer(state)) {
|
uint8_t mode = layer_state_cmp(state,_MODS) ? RGBLIGHT_MODE_BREATHING : RGBLIGHT_MODE_STATIC_LIGHT;
|
||||||
|
switch (get_highest_layer(state|default_layer_state)) {
|
||||||
case _MACROS:
|
case _MACROS:
|
||||||
rgblight_set_hsv_and_mode(HSV_ORANGE, userspace_config.is_overwatch ? RGBLIGHT_MODE_SNAKE + 2 : RGBLIGHT_MODE_SNAKE + 3);
|
rgblight_set_hsv_and_mode(HSV_ORANGE, userspace_config.is_overwatch ? RGBLIGHT_MODE_SNAKE + 2 : RGBLIGHT_MODE_SNAKE + 3);
|
||||||
break;
|
break;
|
||||||
@@ -181,37 +198,30 @@ layer_state_t layer_state_set_rgb_light(layer_state_t state) {
|
|||||||
case _ADJUST:
|
case _ADJUST:
|
||||||
rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
|
rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
|
||||||
break;
|
break;
|
||||||
default: // for any other layers, or the default layer
|
case _COLEMAK:
|
||||||
{
|
rgblight_set_hsv_and_mode(HSV_MAGENTA, mode);
|
||||||
uint8_t mode = get_highest_layer(state) == _MODS ? RGBLIGHT_MODE_BREATHING : RGBLIGHT_MODE_STATIC_LIGHT;
|
break;
|
||||||
switch (get_highest_layer(default_layer_state)) {
|
case _DVORAK:
|
||||||
case _COLEMAK:
|
rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode);
|
||||||
rgblight_set_hsv_and_mode(HSV_MAGENTA, mode);
|
break;
|
||||||
break;
|
case _WORKMAN:
|
||||||
case _DVORAK:
|
rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode);
|
||||||
rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode);
|
break;
|
||||||
break;
|
case _NORMAN:
|
||||||
case _WORKMAN:
|
rgblight_set_hsv_and_mode(HSV_CORAL, mode);
|
||||||
rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode);
|
break;
|
||||||
break;
|
case _MALTRON:
|
||||||
case _NORMAN:
|
rgblight_set_hsv_and_mode(HSV_YELLOW, mode);
|
||||||
rgblight_set_hsv_and_mode(HSV_CORAL, mode);
|
break;
|
||||||
break;
|
case _EUCALYN:
|
||||||
case _MALTRON:
|
rgblight_set_hsv_and_mode(HSV_PINK, mode);
|
||||||
rgblight_set_hsv_and_mode(HSV_YELLOW, mode);
|
break;
|
||||||
break;
|
case _CARPLAX:
|
||||||
case _EUCALYN:
|
rgblight_set_hsv_and_mode(HSV_BLUE, mode);
|
||||||
rgblight_set_hsv_and_mode(HSV_PINK, mode);
|
break;
|
||||||
break;
|
default:
|
||||||
case _CARPLAX:
|
rgblight_set_hsv_and_mode(HSV_CYAN, mode);
|
||||||
rgblight_set_hsv_and_mode(HSV_BLUE, mode);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
rgblight_set_hsv_and_mode(HSV_CYAN, mode);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // RGBLIGHT_ENABLE
|
#endif // RGBLIGHT_ENABLE
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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 RGBLIGHT_EFFECT_BREATHE_TABLE
|
#ifndef RGBLIGHT_EFFECT_BREATHE_TABLE
|
||||||
#define RGBLIGHT_EFFECT_BREATHE_TABLE
|
#define RGBLIGHT_EFFECT_BREATHE_TABLE
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "tap_dances.h"
|
#include "tap_dances.h"
|
||||||
|
|
||||||
#define NUM_OF_DIABLO_KEYS 4
|
#define NUM_OF_DIABLO_KEYS 4
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "template.h"
|
#include "template.h"
|
||||||
|
|
||||||
// Add reconfigurable functions here, for keymap customization
|
// Add reconfigurable functions here, for keymap customization
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "drashna.h"
|
#include "drashna.h"
|
||||||
/*
|
/*
|
||||||
@@ -17,6 +33,7 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
|
|||||||
#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
|
#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
|
||||||
#define LAYOUT_ortho_5x12_wrapper(...) LAYOUT_ortho_5x12(__VA_ARGS__)
|
#define LAYOUT_ortho_5x12_wrapper(...) LAYOUT_ortho_5x12(__VA_ARGS__)
|
||||||
#define LAYOUT_gergo_wrapper(...) LAYOUT_gergo(__VA_ARGS__)
|
#define LAYOUT_gergo_wrapper(...) LAYOUT_gergo(__VA_ARGS__)
|
||||||
|
#define LAYOUT_split_3x6_3_wrapper(...) LAYOUT_split_3x6_3(__VA_ARGS__)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Blocks for each of the four major keyboard layouts
|
Blocks for each of the four major keyboard layouts
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
# Atmel DFU
|
||||||
|
### ATmega16U2
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FEF", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
### ATmega32U2
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF0", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
### ATmega16U4
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF3", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
### ATmega32U4
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF4", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
### AT90USB64
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF9", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
### AT90USB128
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FFB", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# Input Club
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1C11", ATTRS{idProduct}=="B007", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# STM32duino
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1EAF", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
# STM32 DFU
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="DF11", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# BootloadHID
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DF", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# USBAspLoader
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DC", TAG+="uaccess", RUN{builtin}+="uaccess"
|
||||||
|
|
||||||
|
# ModemManager should ignore the following devices
|
||||||
|
# Atmel SAM-BA (Massdrop)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="6124", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
|
||||||
|
# Caterina (Pro Micro)
|
||||||
|
## Spark Fun Electronics
|
||||||
|
### Pro Micro 3V3/8MHz
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
### Pro Micro 5V/16MHz
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
### LilyPad 3V3/8MHz (and some Pro Micro clones)
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9207", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
## Pololu Electronics
|
||||||
|
### A-Star 32U4
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1FFB", ATTRS{idProduct}=="0101", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
## Arduino SA
|
||||||
|
### Leonardo
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
### Micro
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
## Adafruit Industries LLC
|
||||||
|
### Feather 32U4
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000C", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
### ItsyBitsy 32U4 3V3/8MHz
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000D", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
### ItsyBitsy 32U4 5V/16MHz
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000E", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
## dog hunter AG
|
||||||
|
### Leonardo
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
### Micro
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
Reference in new issue
Block a user