Compare commits
86 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
4a42e10ccd | ||
|
81ae0fb10e | ||
|
e659bc4467 | ||
|
e3541853a9 | ||
|
0ea6cf719e | ||
|
c9d23f50f6 | ||
|
c5c35f5f4b | ||
|
6b584a23c0 | ||
|
6bb3fbd4e0 | ||
|
9e0b244a34 | ||
|
4b7fcf0af0 | ||
|
22b9303e2a | ||
|
e956c11bc9 | ||
|
cbc5de67be | ||
|
9cb1d36974 | ||
|
0a5d302622 | ||
|
6c24e28b8d | ||
|
d19805f9de | ||
|
4beb5e72f8 | ||
|
5f0a2e078f | ||
|
feac994f6f | ||
|
4931510ad3 | ||
|
d6215ad6af | ||
|
eba4cb7a04 | ||
|
85ea963931 | ||
|
492a16308a | ||
|
17200f4712 | ||
|
eb903c7623 | ||
|
c58921c64c | ||
|
9fc3e26f70 | ||
|
e9f44ee96d | ||
|
9cb80d68e2 | ||
|
4932f9566a | ||
|
97c6b8143c | ||
|
3b9e4967b8 | ||
|
7c57104b51 | ||
|
846598541b | ||
|
c68597d9ad | ||
|
5ffec5d9b0 | ||
|
a8eaf0b666 | ||
|
4f484bc1c9 | ||
|
a1fa70f94d | ||
|
d8f0faabda | ||
|
818042b2c3 | ||
|
8910f9b87e | ||
|
9dd3e08fdd | ||
|
b3bcafcc4b | ||
|
b8f08d936d | ||
|
dd37245373 | ||
|
eab41f7b38 | ||
|
cca3dcc5ec | ||
|
12e66330c5 | ||
|
d91c9858c5 | ||
|
8a0997709b | ||
|
0e1a731446 | ||
|
57ef8a54e4 | ||
|
1add90a6d2 | ||
|
e4230c84d0 | ||
|
1485cc1d26 | ||
|
4ea3bbdb4c | ||
|
bad839e6ac | ||
|
3aec9a4354 | ||
|
163ddd5d15 | ||
|
dc7cc26dff | ||
|
a6e46b99b9 | ||
|
ab197af2ea | ||
|
1226c69f4f | ||
|
8a1e656099 | ||
|
56f266173c | ||
|
2dfdafbd5b | ||
|
5fe0fe3756 | ||
|
cc0d4b6513 | ||
|
23b1889241 | ||
|
6cd001e337 | ||
|
e4f26a9fcc | ||
|
9cda36238f | ||
|
52630f6611 | ||
|
2ec1ab2b35 | ||
|
557745ba9f | ||
|
f229d22416 | ||
|
98ac32b417 | ||
|
eeb6443767 | ||
|
c1a6ca46a7 | ||
|
7c5428b56d | ||
|
d9983082c2 | ||
|
41d5d3e655 |
24
.clang_complete
Normal file
24
.clang_complete
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
-I.
|
||||
-I./drivers
|
||||
-I./drivers/avr
|
||||
-I./keyboards/ergodox_ez
|
||||
-I./keyboards/ergodox_ez/keymaps/vim
|
||||
-I./lib
|
||||
-I./lib/lufa
|
||||
-I./quantum
|
||||
-I./quantum/api
|
||||
-I./quantum/audio
|
||||
-I./quantum/keymap_extras
|
||||
-I./quantum/process_keycode
|
||||
-I./quantum/serial_link
|
||||
-I./quantum/template
|
||||
-I./quantum/tools
|
||||
-I./quantum/visualizer
|
||||
-I./tmk_core
|
||||
-I./tmk_core/common
|
||||
-I./tmk_core/common/debug.h
|
||||
-I./tmk_core/protocol
|
||||
-I./tmk_core/protocol/lufa
|
||||
-I./util
|
||||
-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
|
@@ -11,7 +11,7 @@ env:
|
||||
global:
|
||||
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
|
||||
before_install:
|
||||
- wget http://www.atmel.com/images/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz || wget http://qmk.fm/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
|
||||
- wget http://ww1.microchip.com/downloads/en/DeviceDoc/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz || wget http://qmk.fm/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
|
||||
install:
|
||||
- tar -zxf avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
|
||||
- export PATH="$PATH:$TRAVIS_BUILD_DIR/avr8-gnu-toolchain-linux_x86_64/bin"
|
||||
|
@@ -70,6 +70,10 @@ This is a C header file that is one of the first things included, and will persi
|
||||
* pin of the backlight - B5, B6, B7 use PWM, others use softPWM
|
||||
* `#define BACKLIGHT_LEVELS 3`
|
||||
* number of levels your backlight will have (not including off)
|
||||
* `#define BACKLIGHT_BREATHING`
|
||||
* enables backlight breathing (only works with backlight pins B5, B6 and B7)
|
||||
* `#define BREATHING_PERIOD 6`
|
||||
* the length of one backlight "breath" in seconds
|
||||
* `#define DEBOUNCING_DELAY 5`
|
||||
* the delay when reading the value of the pin (5 is default)
|
||||
* `#define LOCKING_SUPPORT_ENABLE`
|
||||
|
@@ -36,7 +36,7 @@ enum my_keycodes {
|
||||
|
||||
## Programming the Behavior of Any Keycode
|
||||
|
||||
When you want to override the behavior of an existing key, or define the behavior for a new key, you should use the `process_record_kb()` and `process_record_user()` functions. These are called by QMK during key processing before the actual key event is handled. If these functions return `true` QMK will process the keycodes as usual. That can be handy for extending the functionality of a key rather than replacing it. If these functions return `false` QMK will skip the normal key handling, and it will be up you to send any key up or down events that are required.
|
||||
When you want to override the behavior of an existing key, or define the behavior for a new key, you should use the `process_record_kb()` and `process_record_user()` functions. These are called by QMK during key processing before the actual key event is handled. If these functions return `true` QMK will process the keycodes as usual. That can be handy for extending the functionality of a key rather than replacing it. If these functions return `false` QMK will skip the normal key handling, and it will be up to you to send any key up or down events that are required.
|
||||
|
||||
These function are called every time a key is pressed or released.
|
||||
|
||||
@@ -60,6 +60,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
PLAY_NOTE_ARRAY(tone_qwerty);
|
||||
}
|
||||
return true; // Let QMK send the enter press/release events
|
||||
default:
|
||||
return true; // Process all other keycodes normally
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@@ -127,7 +127,7 @@ https://github.com/tekezo/Karabiner/issues/403
|
||||
|
||||
## Esc and <code>`</code> on a Single Key
|
||||
|
||||
See the [Grave Escape](feature_grave_escape.md) feature.
|
||||
See the [Grave Escape](feature_grave_esc.md) feature.
|
||||
|
||||
## Arrow on Right Modifier Keys with Dual-Role
|
||||
This turns right modifier keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
|
||||
|
@@ -110,6 +110,9 @@ Map three keys temporarily in your keymap:
|
||||
| KC_ASDN | Lower the Auto Shift timeout variable (down) |
|
||||
| KC_ASUP | Raise the Auto Shift timeout variable (up) |
|
||||
| KC_ASRP | Report your current Auto Shift timeout value |
|
||||
| KC_ASON | Turns on the Auto Shift Function |
|
||||
| KC_ASOFF | Turns off the Auto Shift Function |
|
||||
| KC_ASTG | Toggles the statn of the Auto Shift feature |
|
||||
|
||||
Compile and upload your new firmware.
|
||||
|
||||
|
@@ -10,8 +10,30 @@ These keycodes control the backlight. Most keyboards use this for single color i
|
||||
|---------|------------------------------------------|
|
||||
|`BL_TOGG`|Turn the backlight on or off |
|
||||
|`BL_STEP`|Cycle through backlight levels |
|
||||
|`BL_x` |Set a specific backlight level between 0-9|
|
||||
|`BL_ON` |An alias for `BL_9` |
|
||||
|`BL_OFF` |An alias for `BL_0` |
|
||||
|`BL_ON` |Set backlight to max brightness |
|
||||
|`BL_OFF` |Turn backlight off |
|
||||
|`BL_INC` |Increase backlight level |
|
||||
|`BL_DEC` |Decrease backlight level |
|
||||
|`BL_BRTG`|Toggle backlight breathing |
|
||||
|
||||
Note that for backlight breathing, you need to have `#define BACKLIGHT_BREATHING` in your config.h.
|
||||
|
||||
## Configuration Options in `config.h`
|
||||
|
||||
* `BACKLIGHT_PIN B7` defines the pin that controlls the LEDs. Unless you design your own keyboard, you don't need to set this.
|
||||
* `BACKLIGHT_LEVELS 3` defines the number of brightness levels (excluding OFF).
|
||||
* `BACKLIGHT_BREATHING` if defined, enables backlight breathing. Note that this is only available if `BACKLIGHT_PIN` is B5, B6 or B7.
|
||||
* `BREATHING_PERIOD 6` defines the length of one backlight "breath" in seconds.
|
||||
|
||||
## Notes on Implementation
|
||||
|
||||
To change the brightness when using pins B5, B6 or B7, the PWM (Pulse Width Modulation) functionality of the on-chip timer is used.
|
||||
The timer is a counter that counts up to a certain TOP value (`0xFFFF` set in ICR1) before resetting to 0.
|
||||
We also set an OCR1x register.
|
||||
When the counter reaches the value stored in that register, the PWM pin drops to low.
|
||||
The PWM pin is pulled high again when the counter resets to 0.
|
||||
Therefore, OCR1x basically sets the duty cycle of the LEDs and as such the brightness where `0` is the darkest and `0xFFFF` the brightest setting.
|
||||
|
||||
To enable the breathing effect, we register an interrupt handler to be called whenever the counter resets (with `ISR(TIMER1_OVF_vect)`).
|
||||
In this handler, which gets called roughly 244 times per second, we compute the desired brightness using a precomputed brightness curve.
|
||||
To disable breathing, we can just disable the respective interrupt vector and reset the brightness to the desired level.
|
||||
|
@@ -41,6 +41,7 @@ You can change the behavior of the RGB Lighting by setting these configuration v
|
||||
| `RGBLIGHT_HUE_STEP` | 10 | How many hues you want to have available. |
|
||||
| `RGBLIGHT_SAT_STEP` | 17 | How many steps of saturation you'd like. |
|
||||
| `RGBLIGHT_VAL_STEP` | 17 | The number of levels of brightness you want. |
|
||||
| `RGBLIGHT_LIMIT_VAL` | 255 | Limit the val of HSV to limit the maximum brightness simply. |
|
||||
|
||||
### Animations
|
||||
|
||||
|
26
docs/feature_space_shift_cadet.md
Normal file
26
docs/feature_space_shift_cadet.md
Normal file
@@ -0,0 +1,26 @@
|
||||
## Space Cadet Shift Enter: The future, built in
|
||||
|
||||
Based on the Space Cadet Shift by Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/)
|
||||
Essentially, you hit the Shift on its own, and it acts as the enter key. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. This solution works better than using a macro since the timers defined in quantum allow us to tell when another key is pressed, rather than just having a janky timer than results in accidental endlines.
|
||||
|
||||
To use it, use `KC_SFTENT` (Shift, Enter) for any Shift on your keymap.
|
||||
|
||||
It's defaulted to work on US keyboards, but if you'd like to use a different key for Enter, you can define those in your `config.h` like this:
|
||||
|
||||
#define SFTENT_KEY KC_ENT
|
||||
|
||||
|
||||
The only other thing you're going to want to do is create a `rules.mk` in your keymap directory and set the following:
|
||||
|
||||
```
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
```
|
||||
|
||||
This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PLEASE NOTE: this feature uses the same timers as the Space Cadet Shift feature, so using them in tandem may produce unwanted results.
|
||||
|
@@ -53,6 +53,7 @@ If you're using [homebrew,](http://brew.sh/) you can use the following commands:
|
||||
brew install avr-gcc
|
||||
brew install dfu-programmer
|
||||
brew install gcc-arm-none-eabi
|
||||
brew install avrdude
|
||||
|
||||
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of avr-libc can take over 20 minutes and exhibit high CPU usage.
|
||||
|
||||
|
@@ -101,8 +101,9 @@ By default QMK supports backlighting on pins `B5`, `B6`, and `B7`. If you are us
|
||||
|
||||
```
|
||||
#define BACKLIGHT_PIN B7
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BREATHING_PERIOD 6
|
||||
```
|
||||
|
||||
{% hint style='info' %}
|
||||
|
@@ -5,11 +5,11 @@
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x2260
|
||||
#define PRODUCT_ID 0xCA60
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER MechKeysCa
|
||||
#define MANUFACTURER MECHKEYS
|
||||
#define PRODUCT ACR60
|
||||
#define DESCRIPTION ACR60 Keyboard
|
||||
#define DESCRIPTION 60% customizable keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
|
@@ -1,12 +1,15 @@
|
||||
# ACR60
|
||||
ACR60
|
||||
=====
|
||||
|
||||

|
||||
|
||||
A customizable 60% keyboard based on the DZ60.
|
||||
A customizable 60% keyboard made and sold by mechkeys.ca [More info on MECHKEYS](https://mechkeys.ca)
|
||||
|
||||
Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
|
||||
|
||||
Keyboard Maintainer: QMK Community
|
||||
Hardware Supported: ACR60
|
||||
Hardware Availability: [mechkeysca](https://mechkeys.ca/products/acr60)
|
||||
|
||||
Hardware Availability: [MECHKEYS](https://mechkeys.ca/products/acr60)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
|
46
keyboards/alu84/alu84.c
Executable file
46
keyboards/alu84/alu84.c
Executable file
@@ -0,0 +1,46 @@
|
||||
/* Copyright 2017 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
|
||||
*
|
||||
* 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 "alu84.h"
|
||||
#include "rgblight.h"
|
||||
#include "action_layer.h"
|
||||
#include "quantum.h"
|
||||
#include "action.h"
|
||||
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||
// put your per-action keyboard code here
|
||||
// runs for every action, just before processing by the firmware
|
||||
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
|
||||
led_set_user(usb_led);
|
||||
}
|
||||
|
||||
|
||||
|
41
keyboards/alu84/alu84.h
Executable file
41
keyboards/alu84/alu84.h
Executable file
@@ -0,0 +1,41 @@
|
||||
/* Copyright 2017 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
|
||||
*
|
||||
* 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 ALU84_H
|
||||
#define ALU84_H
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
|
||||
|
||||
#define KEYMAP( \
|
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
|
||||
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \
|
||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \
|
||||
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, \
|
||||
K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K413, K414, K415, \
|
||||
K500, K501, K503, K506, K510, K511, K512, K513, K514, K515 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
|
||||
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \
|
||||
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
|
||||
{ K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315 }, \
|
||||
{ K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, K414, K415 }, \
|
||||
{ K500, K501, KC_NO, K503, KC_NO, KC_NO, K506, KC_NO, KC_NO, KC_NO, K510, K511, K512, K513, K514, K515 } \
|
||||
}
|
||||
|
||||
#endif
|
76
keyboards/alu84/config.h
Executable file
76
keyboards/alu84/config.h
Executable file
@@ -0,0 +1,76 @@
|
||||
/* Copyright 2017 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
|
||||
*
|
||||
* 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 ALU84_CONFIG_H
|
||||
#define ALU84_CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0xCA75
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER MECHKEYS
|
||||
#define PRODUCT ALU84
|
||||
#define DESCRIPTION 75% keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 16
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5, B7 }
|
||||
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, F5, D4, B1, B0, B5, B4, D7, D6, B3, F4, F6 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* number of backlight levels */
|
||||
#define BACKLIGHT_PIN B6
|
||||
#ifdef BACKLIGHT_PIN
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
#endif
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 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
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* prevent stuck modifiers */
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
|
||||
#define RGB_DI_PIN E2
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLED_NUM 16
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 10
|
||||
#define RGBLIGHT_VAL_STEP 10
|
||||
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
144
keyboards/alu84/keymaps/default/keymap.c
Executable file
144
keyboards/alu84/keymaps/default/keymap.c
Executable file
@@ -0,0 +1,144 @@
|
||||
#include "alu84.h"
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||
|
||||
#define _BL 0
|
||||
#define _FN1 1
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* BL
|
||||
* ,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
|
||||
* | Esc | Scrn Brght Up | Scrn Bright Down | Expose | Launchpad | Show Desktop | Dock Hide Tog | Screen Capture | Shortcut | Shortcut | Shortcut| Shortcut | Play/Pause | Mute | Vol Up | Vol Down |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspace | POWER |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | Shortcut |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | Enter | Pg Up |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Up | Pg Dn |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | Control | Option/Alt | Gui | Space | Gui | Opt | Fn (layer) | Left | Down | Right |
|
||||
* `- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -'
|
||||
*/
|
||||
|
||||
[_BL] = KEYMAP(
|
||||
KC_ESC, KC_F14, KC_F15, LCTL(KC_UP), LCTL(KC_L), KC_F11, LALT(LGUI(KC_D)), LCTL(KC_S), LCTL(LSFT(KC_O)), LCTL(LGUI(KC_1)), LCTL(LGUI(KC_2)), LCTL(LGUI(KC_3)), KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU,
|
||||
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_POWER,
|
||||
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, LCTL(LGUI(KC_N)),
|
||||
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_PGUP,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_PGDN,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
/* FN1
|
||||
* ,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
|
||||
* | Quit All | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Trns | Trns | DFU RESET |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | DELETE | Lock Shrct |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | Trns | RGB Toggle | RGB Mode | RGB Increase | RGB Decrease | RGB Hue Inc | RGB Hue Dec | RGB Sat Inc | RGB Sat Dec | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | Trns | Backlight Tog | Backlight Inc | Backlight Dec | Backlight Step | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* |- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -|
|
||||
* | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* `- - -+ - - - - - - - + - - - - - - - - -+ - - - -+ - - - - - + - - - - - - -+ - - - - - - - + - - - - - - - -+ - - - - -+ - - - - -+ - - - - + - - - - -+ - - - - - -+ - - -+ - - - -+ - - - - -'
|
||||
*/
|
||||
|
||||
[_FN1] = KEYMAP(
|
||||
LALT(LGUI(KC_Q)), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, RESET,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, LCTL(LALT(LGUI(KC_S))),
|
||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, 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_TOGG, BL_INC, BL_DEC, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
|
||||
|
||||
switch (id) {
|
||||
|
||||
}
|
||||
return MACRO_NONE;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||
DDRB |= (1 << 2); PORTB &= ~(1 << 2);
|
||||
} else {
|
||||
DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_COMPOSE)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_KANA)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum function_id {
|
||||
SHIFT_ESC,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(SHIFT_ESC),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
static uint8_t shift_esc_shift_mask;
|
||||
switch (id) {
|
||||
case SHIFT_ESC:
|
||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||
if (record->event.pressed) {
|
||||
if (shift_esc_shift_mask) {
|
||||
add_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
add_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
} else {
|
||||
if (shift_esc_shift_mask) {
|
||||
del_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
del_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
25
keyboards/alu84/keymaps/turbomech/config.h
Normal file
25
keyboards/alu84/keymaps/turbomech/config.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/* Copyright 2017 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
|
||||
*
|
||||
* 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 CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#define TAPPING_TOGGLE 2
|
||||
#include "../../config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
176
keyboards/alu84/keymaps/turbomech/keymap.c
Normal file
176
keyboards/alu84/keymaps/turbomech/keymap.c
Normal file
@@ -0,0 +1,176 @@
|
||||
/* Copyright 2017 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
|
||||
*
|
||||
* 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 "alu84.h"
|
||||
#include "turbomech.h"
|
||||
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||
|
||||
#define _QWERTY 0 //BASE layer
|
||||
#define _FUNCTION 1 //Function layer
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* BL
|
||||
* ,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -.
|
||||
* | Esc | Scrn | Scrn | Expose |Launchpad| Show |Dock Hide| Screen | Shortcut| Shortcut| Shortcut| Shortcut| Play | Mute | Vol Up | Vol Down|
|
||||
* | |Brght Up | Brght Dn| | | Desktop | Toggle | Capture | | | | | Pause | | | |
|
||||
* |- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - -+- - - - -|
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspace | POWER |
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |- - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - +- - - - -|
|
||||
* | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | Shortcut|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |- - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - - -+- - - - -|
|
||||
* | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | Enter | Page |
|
||||
* | | | | | | | | | | | | | | Up |
|
||||
* |- - - - - - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - +- - - - -+- - - - -+
|
||||
* | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Up | Page |
|
||||
* | | | | | | | | | | | | | | Down |
|
||||
* |- - - - - +- - - - - - +- - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -|
|
||||
* | Control | Option | Gui | Space | Gui | Opt | Fn | Left | Down | Right |
|
||||
* | | /Alt | | | | Alt | | | | |
|
||||
* `- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'
|
||||
*/
|
||||
|
||||
[_QWERTY] = KEYMAP(
|
||||
KC_ESC, KC_F14, KC_F15, LCTL(KC_UP), LCTL(KC_L), KC_F11, LALT(LGUI(KC_D)), LCTL(KC_S), LCTL(LSFT(KC_O)), LCTL(LGUI(KC_1)), LCTL(LGUI(KC_2)), LCTL(LGUI(KC_3)), KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU,
|
||||
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_POWER,
|
||||
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, LCTL(LGUI(KC_N)),
|
||||
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_PGUP,
|
||||
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_PGDN,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
/* FN1 - SEE readme.md
|
||||
* ,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -.
|
||||
* | Quit | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Trns | Trns | DFU |
|
||||
* | All | | | | | | | | | | | | | | | Reset |
|
||||
* |- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - -+- - - - -|
|
||||
* | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Delete | Lock |
|
||||
* | | | | | | | | | | | | | | |Shortcut |
|
||||
* |- - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - +- - - - -|
|
||||
* | Trns | RGB | RGB | RGB | RGB | RGB Hue | RGB Hue | RGB Sat | RGB Sat | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* | | Toggle | Mode | Increase| Decrease| Increase| Decrease| Increase| Decrease| | | | | | |
|
||||
* |- - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - - -+- - - - -|
|
||||
* | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* | | | | | | | | | | | | | | |
|
||||
* |- - - - - - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - +- - - - -+- - - - -+
|
||||
* | Trns |Backlight|Backlight|Backlight|Backlight| Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* | | Toggle | Increase| Decrease| Step | | | | | | | | | |
|
||||
* |- - - - - +- - - - - - +- - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -|
|
||||
* | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
* | | | | | | | | | | |
|
||||
* `- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'
|
||||
*/
|
||||
|
||||
|
||||
[_FUNCTION] = KEYMAP(
|
||||
LALT(LGUI(KC_Q)), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_RESET,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, LCTL(LALT(LGUI(KC_S))),
|
||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, 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_TOGG, BL_INC, BL_DEC, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
//switch (id) {
|
||||
// case _FLIP:
|
||||
// if (record->event.pressed)
|
||||
|
||||
//SEND_STRING("(╯°□°)╯︵ ┻━┻");
|
||||
// }
|
||||
// return false;
|
||||
// break;
|
||||
// }
|
||||
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||
DDRB |= (1 << 2); PORTB &= ~(1 << 2);
|
||||
} else {
|
||||
DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_COMPOSE)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (usb_led & (1 << USB_LED_KANA)) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum function_id {
|
||||
SHIFT_ESC,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(SHIFT_ESC),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
static uint8_t shift_esc_shift_mask;
|
||||
switch (id) {
|
||||
case SHIFT_ESC:
|
||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||
if (record->event.pressed) {
|
||||
if (shift_esc_shift_mask) {
|
||||
add_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
add_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
} else {
|
||||
if (shift_esc_shift_mask) {
|
||||
del_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
del_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
93
keyboards/alu84/keymaps/turbomech/readme.md
Normal file
93
keyboards/alu84/keymaps/turbomech/readme.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# This is u/TurboMech's keyboard layout for ALU84.
|
||||
|
||||
## It is designed for Mac OS, due to the specific functions I created.
|
||||
|
||||
### Here is the layout found in the keymap.c file.
|
||||
##### I use shortcuts for the Function row (above number row) listed below
|
||||
- Scrn Bright Up: F14
|
||||
- Scrn Bright Down: F15
|
||||
- Expose: LCTRL + Up
|
||||
- Launchpad: LCTRL + L
|
||||
- Show Desktop: F11
|
||||
- Show/Hide Dock: LALT + LGUI + D
|
||||
- Screen Capture: LCTRL + S
|
||||
- Custom Shortcut (setup for an application I use frequently): LCTRL + LSHFT + O
|
||||
- Custom Shortcut 1: LCTRL + LGUI + 1
|
||||
- Custom Shortcut 2: LCTRL + LGUI + 2
|
||||
- Custom Shortcut 3: LCTRL + LGUI + 3
|
||||
- use the custom shortcuts for whatever you want: launch an application, a macro, etc.
|
||||
- Play/Pause: exactly that
|
||||
- Mute / Volume Up / Volume Down: exactly what it says
|
||||
|
||||
##### Going down the right side from Vol Down:
|
||||
- POWER: this serves as the power button on Mac's only. Press and hold the button as you would on your Macbook or iMac keyboard.
|
||||
- Menu: this slides the notification bar on the right side (its the same as on iPhones/ iPads)
|
||||
|
||||
### See below keymaps for how to setup shortcuts on Mac
|
||||
|
||||
#### Base Layer
|
||||
```
|
||||
.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -.
|
||||
| Esc | Scrn | Scrn | Expose |Launchpad| Show |Dock Hide| Screen | Shortcut| Shortcut| Shortcut| Shortcut| Play | Mute | Vol Up | Vol Down|
|
||||
| |Brght Up | Brght Dn| | | Desktop | Toggle | Capture | | | | | Pause | | | |
|
||||
|- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - -+- - - - -|
|
||||
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | Backspace | POWER |
|
||||
| | | | | | | | | | | | | | | |
|
||||
|- - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - +- - - - -|
|
||||
| TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | Shortcut|
|
||||
| | | | | | | | | | | | | | | |
|
||||
|- - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - - -+- - - - -|
|
||||
| CAPS | A | S | D | F | G | H | J | K | L | ; | ' | Enter | Page |
|
||||
| | | | | | | | | | | | | | Up |
|
||||
|- - - - - - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - +- - - - -+- - - - -+
|
||||
| Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Up | Page |
|
||||
| | | | | | | | | | | | | | Down |
|
||||
|- - - - - +- - - - - - +- - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -|
|
||||
| Control | Option | Gui | Space | Gui | Opt | Fn | Left | Down | Right |
|
||||
| | /Alt | | | | Alt | | | | |
|
||||
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'
|
||||
```
|
||||
#### Function Layer 1 - See above for shortcuts
|
||||
```
|
||||
.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -.
|
||||
| Quit | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Trns | Trns | DFU |
|
||||
| All | | | | | | | | | | | | | | | Reset |
|
||||
|- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - -+- - - - -|
|
||||
| Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Delete | Lock |
|
||||
| | | | | | | | | | | | | | |Shortcut |
|
||||
|- - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - +- - - - -|
|
||||
| Trns | RGB | RGB | RGB | RGB | RGB Hue | RGB Hue | RGB Sat | RGB Sat | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
| | Toggle | Mode | Increase| Decrease| Increase| Decrease| Increase| Decrease| | | | | | |
|
||||
|- - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - - - -+- - - - -|
|
||||
| Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
| | | | | | | | | | | | | | |
|
||||
|- - - - - - - - - - - +- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - - - - - +- - - - -+- - - - -+
|
||||
| Trns |Backlight|Backlight|Backlight|Backlight| Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
| | Toggle | Increase| Decrease| Step | | | | | | | | | |
|
||||
|- - - - - +- - - - - - +- - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -+- - - - -|
|
||||
| Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns | Trns |
|
||||
| | | | | | | | | | |
|
||||
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'
|
||||
```
|
||||
|
||||
#### How to use/ setup shortcuts on Mac
|
||||
- First navigate to System Preferences > Keyboard > Shortcuts
|
||||
- You can use any of them in here
|
||||
- Just set them to the shortcut keys listed above
|
||||
|
||||
#### How to make your own (to launch applications, quit all, etc.)
|
||||
- Navigate to Automator > New Document > click Service > Choose
|
||||
- Now we have to setup our shortcut
|
||||
- Here's how to setup the Quit All Shortcut
|
||||
- In the right window select the Service recieves dropdown > select No Input
|
||||
- At the top left click the Name (Search) > type quit > click and hold Quit All Applications > drag to the right hand box (under the Service Recieves)
|
||||
- **IMPORTANT** You have to click the Run button at the upper right hand corner in order for these to actually work.
|
||||
- Now click File > Save > save it as Quit All Apps (or whatever you want) / you can also just exit out and it'll ask you if you want to save
|
||||
- Navigate back to System Preferences > Keyboard > Shortcuts
|
||||
- The new shortcut can be found under services, set it to one of the shortcuts I listed above and done
|
||||
- The same applies for applications in the Name (search) just type the application you want to have as shortcut. Don't forget to run it, then do the same steps
|
||||
to set it up as a shortcut.
|
||||
|
||||
|
||||
|
||||
|
15
keyboards/alu84/keymaps/turbomech/rules.mk
Normal file
15
keyboards/alu84/keymaps/turbomech/rules.mk
Normal file
@@ -0,0 +1,15 @@
|
||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE ?= no
|
||||
RGBLIGHT_ENABLE ?= yes
|
||||
UNICODE_ENABLE ?= yes
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
18
keyboards/alu84/readme.md
Normal file
18
keyboards/alu84/readme.md
Normal file
@@ -0,0 +1,18 @@
|
||||
ALU84
|
||||
===
|
||||
|
||||

|
||||
|
||||
A 75% keyboard made and sold by MECHKEYS [More info on MECHKEYS](https://mechkeys.ca).
|
||||
|
||||
Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
|
||||
|
||||
Hardware Supported: ALU84
|
||||
|
||||
Hardware Availability: [MECHKEYS](https://mechkeys.ca)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make alu84:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
56
keyboards/alu84/rules.mk
Executable file
56
keyboards/alu84/rules.mk
Executable file
@@ -0,0 +1,56 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE ?= no
|
||||
RGBLIGHT_ENABLE ?= yes
|
@@ -345,14 +345,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
case MACRO_BREATH_SPEED_INC:
|
||||
if (record->event.pressed)
|
||||
{
|
||||
breathing_speed_inc(1);
|
||||
breathing_period_inc();
|
||||
}
|
||||
break;
|
||||
|
||||
case MACRO_BREATH_SPEED_DEC:
|
||||
if (record->event.pressed)
|
||||
{
|
||||
breathing_speed_dec(1);
|
||||
breathing_period_dec();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -374,7 +374,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
if (record->event.pressed)
|
||||
{
|
||||
layer_on(LAYER_UPPER);
|
||||
breathing_speed_set(2);
|
||||
breathing_period_set(2);
|
||||
breathing_pulse();
|
||||
update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
|
||||
}
|
||||
@@ -389,7 +389,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
if (record->event.pressed)
|
||||
{
|
||||
layer_on(LAYER_LOWER);
|
||||
breathing_speed_set(2);
|
||||
breathing_period_set(2);
|
||||
breathing_pulse();
|
||||
update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
|
||||
}
|
||||
@@ -403,13 +403,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
case MACRO_FUNCTION:
|
||||
if (record->event.pressed)
|
||||
{
|
||||
breathing_speed_set(3);
|
||||
breathing_period_set(3);
|
||||
breathing_enable();
|
||||
layer_on(LAYER_FUNCTION);
|
||||
}
|
||||
else
|
||||
{
|
||||
breathing_speed_set(1);
|
||||
breathing_period_set(1);
|
||||
breathing_self_disable();
|
||||
layer_off(LAYER_FUNCTION);
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
#define BACKLIGHT_LEVELS 1
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
|
||||
/* mapping backlight LEDs to correct Pin */
|
||||
#define BACKLIGHT_PIN B7
|
||||
|
@@ -21,5 +21,7 @@
|
||||
|
||||
// place overrides here
|
||||
#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
#define BACKLIGHT_BREATHING
|
||||
#define BREATHING_PERIOD 8
|
||||
|
||||
#endif
|
||||
|
@@ -16,7 +16,7 @@
|
||||
#include "bananasplit.h"
|
||||
|
||||
enum custom_keycodes {
|
||||
WIN_SWITCH_LAYOUT = SAFE_RANGE
|
||||
WIN_SWITCH_LAYOUT = SAFE_RANGE,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
@@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, 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_CAPS, KC_MPRV, KC_VOLU, KC_MNXT, KC_PGUP, KC_INS, KC_HOME, LCTL(KC_LEFT), LCTL(KC_RGHT), KC_END, _______, _______, _______, KC_PSCR, \
|
||||
_______, KC_MUTE, KC_VOLD, KC_MPLY, KC_PGDN, KC_DEL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______,_______, LCTL(KC_BSPC), LCTL(KC_DEL), _______, _______, _______, _______, _______, \
|
||||
_______, BL_STEP, BL_BRTG, _______, _______,_______, LCTL(KC_BSPC), LCTL(KC_DEL), _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______,_______, _______, _______, _______, _______, RESET \
|
||||
),
|
||||
};
|
||||
@@ -76,20 +76,20 @@ void matrix_scan_user(void) {
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
|
||||
case WIN_SWITCH_LAYOUT: {
|
||||
// Sends Alt+Shift on both key down and key up.
|
||||
// Designed to switch between two keyboard layouts on Windows using a locking switch.
|
||||
// Does nothing if right shift is pressed for easy resync.
|
||||
if (!(get_mods() & MOD_BIT(KC_RSFT))) {
|
||||
if (!(get_mods() & MOD_BIT(KC_RSFT)))
|
||||
SEND_STRING(SS_DOWN(X_LALT)SS_TAP(X_LSHIFT)SS_UP(X_LALT));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
|
@@ -1,77 +0,0 @@
|
||||
# Target file name (without extension).
|
||||
PROJECT = ch
|
||||
|
||||
# Directory common source files exist
|
||||
TMK_DIR = ../../tmk_core
|
||||
|
||||
# Directory keyboard dependent files exist
|
||||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = matrix.c \
|
||||
led.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
else
|
||||
SRC := keymap_plain.c $(SRC)
|
||||
endif
|
||||
|
||||
CONFIG_H = config.h
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# - For Teensies, FAMILY = KINETIS and SERIES is either
|
||||
# KL2x (LC) or K20x (3.0,3.1,3.2).
|
||||
MCU_FAMILY = KINETIS
|
||||
MCU_SERIES = K20x
|
||||
|
||||
# Linker script to use
|
||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
|
||||
# or <this_dir>/ld/
|
||||
# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
|
||||
# - LDSCRIPT =
|
||||
# - MKL26Z64 for Teensy LC
|
||||
# - MK20DX128 for Teensy 3.0
|
||||
# - MK20DX256 for Teensy 3.1 and 3.2
|
||||
MCU_LDSCRIPT = MK20DX128
|
||||
|
||||
# Startup code to use
|
||||
# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
|
||||
# - STARTUP =
|
||||
# - kl2x for Teensy LC
|
||||
# - k20x5 for Teensy 3.0
|
||||
# - k20x7 for Teensy 3.1 and 3.2
|
||||
MCU_STARTUP = k20x5
|
||||
|
||||
# Board: it should exist either in <chibios>/os/hal/boards/
|
||||
# or <this_dir>/boards
|
||||
# - BOARD =
|
||||
# - PJRC_TEENSY_LC for Teensy LC
|
||||
# - PJRC_TEENSY_3 for Teensy 3.0
|
||||
# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
|
||||
BOARD = PJRC_TEENSY_3
|
||||
|
||||
# Cortex version
|
||||
# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
|
||||
MCU = cortex-m4
|
||||
|
||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
|
||||
# I.e. 6 for Teensy LC; 7 for Teensy 3.x
|
||||
ARMV = 7
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
|
||||
include $(TMK_DIR)/tool/chibios/common.mk
|
||||
include $(TMK_DIR)/tool/chibios/chibios.mk
|
247
keyboards/chimera_ortho/info.json
Normal file
247
keyboards/chimera_ortho/info.json
Normal file
@@ -0,0 +1,247 @@
|
||||
{
|
||||
"keyboard_name": "",
|
||||
"manufacturer": "",
|
||||
"identifier": "",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"processor": "",
|
||||
"bootloader": "",
|
||||
"width": 15.5,
|
||||
"height": 4.25,
|
||||
"layouts": {
|
||||
"KEYMAP": {
|
||||
"layout": [
|
||||
{
|
||||
"label": "Esc",
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "Q",
|
||||
"x": 1,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "W",
|
||||
"x": 2,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "E",
|
||||
"x": 3,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "R",
|
||||
"x": 4,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "T",
|
||||
"x": 5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "{",
|
||||
"x": 6,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "}",
|
||||
"x": 8.5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "Y",
|
||||
"x": 9.5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "U",
|
||||
"x": 10.5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "I",
|
||||
"x": 11.5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "O",
|
||||
"x": 12.5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "P",
|
||||
"x": 13.5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "\"",
|
||||
"x": 14.5,
|
||||
"y": 0
|
||||
},
|
||||
{
|
||||
"label": "Tab",
|
||||
"x": 0,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "A",
|
||||
"x": 1,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "S",
|
||||
"x": 2,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "D",
|
||||
"x": 3,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "F",
|
||||
"x": 4,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "G",
|
||||
"x": 5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "-",
|
||||
"x": 6,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "1",
|
||||
"x": 8.5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "H",
|
||||
"x": 9.5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "J",
|
||||
"x": 10.5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "K",
|
||||
"x": 11.5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "L",
|
||||
"x": 12.5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": ";",
|
||||
"x": 13.5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "Enter",
|
||||
"x": 14.5,
|
||||
"y": 1
|
||||
},
|
||||
{
|
||||
"label": "(",
|
||||
"x": 0,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "Z",
|
||||
"x": 1,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "X",
|
||||
"x": 2,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "C",
|
||||
"x": 3,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "V",
|
||||
"x": 4,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "B",
|
||||
"x": 5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "=",
|
||||
"x": 6,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "8",
|
||||
"x": 8.5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "N",
|
||||
"x": 9.5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "M",
|
||||
"x": 10.5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": ",",
|
||||
"x": 11.5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": ".",
|
||||
"x": 12.5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "/",
|
||||
"x": 13.5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": ")",
|
||||
"x": 14.5,
|
||||
"y": 2
|
||||
},
|
||||
{
|
||||
"label": "Num Layer",
|
||||
"x": 4,
|
||||
"y": 3.25
|
||||
},
|
||||
{
|
||||
"label": "Back Space",
|
||||
"x": 5,
|
||||
"y": 3.25
|
||||
},
|
||||
{
|
||||
"label": "Space",
|
||||
"x": 9.5,
|
||||
"y": 3.25
|
||||
},
|
||||
{
|
||||
"label": "Symbol Layer",
|
||||
"x": 10.5,
|
||||
"y": 3.25
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
1
keyboards/christmas_tree/V2017/V2017.c
Normal file
1
keyboards/christmas_tree/V2017/V2017.c
Normal file
@@ -0,0 +1 @@
|
||||
#include "V2017.h"
|
6
keyboards/christmas_tree/V2017/V2017.h
Normal file
6
keyboards/christmas_tree/V2017/V2017.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef V2017_H
|
||||
#define V2017_H
|
||||
|
||||
#include "christmas_tree.h"
|
||||
|
||||
#endif
|
8
keyboards/christmas_tree/V2017/config.h
Normal file
8
keyboards/christmas_tree/V2017/config.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef V2017_CONFIG_H
|
||||
#define V2017_CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
#define DEVICE_VER 0x2017
|
||||
|
||||
#endif
|
3
keyboards/christmas_tree/V2017/info.json
Normal file
3
keyboards/christmas_tree/V2017/info.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"identifier": "FEED:3070:2017"
|
||||
}
|
3
keyboards/christmas_tree/V2017/rules.mk
Normal file
3
keyboards/christmas_tree/V2017/rules.mk
Normal file
@@ -0,0 +1,3 @@
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
5
keyboards/christmas_tree/christmas_tree.c
Normal file
5
keyboards/christmas_tree/christmas_tree.c
Normal file
@@ -0,0 +1,5 @@
|
||||
#include "christmas_tree.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
matrix_init_user();
|
||||
}
|
20
keyboards/christmas_tree/christmas_tree.h
Normal file
20
keyboards/christmas_tree/christmas_tree.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef CHRISTMAS_TREE_H
|
||||
#define CHRISTMAS_TREE_H
|
||||
#include "quantum.h"
|
||||
|
||||
|
||||
#define KEYMAP( \
|
||||
k00, k01, k02, k03, k04, k05 \
|
||||
) \
|
||||
{ \
|
||||
{ k00 }, \
|
||||
{ k01 }, \
|
||||
{ k02 }, \
|
||||
{ k03 }, \
|
||||
{ k04 }, \
|
||||
{ k05 } \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
63
keyboards/christmas_tree/config.h
Normal file
63
keyboards/christmas_tree/config.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x3070
|
||||
#define MANUFACTURER Maple Computing
|
||||
#define PRODUCT Christmas Tree
|
||||
#define DESCRIPTION A tiny 6 key macro pad, in the shape of a christmas tree
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 1
|
||||
|
||||
/* Planck PCB default pin-out */
|
||||
#define MATRIX_ROW_PINS { D3, F4, D0, F6, F5, D4 }
|
||||
#define MATRIX_COL_PINS { D1 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
#define BACKLIGHT_PIN D2
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 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
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
#endif
|
17
keyboards/christmas_tree/info.json
Normal file
17
keyboards/christmas_tree/info.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"keyboard_name": "Christmas Tree",
|
||||
"keyboard_folder": "christmas_tree",
|
||||
"manufacturer": "Maple Computing",
|
||||
"identifier": "FEED:3070:2017",
|
||||
"url": "https://www.reddit.com/r/MechanicalKeyboards/comments/7cqxpf/gb_christmas_tree_pcb_gb_now_live/",
|
||||
"processor": "atmega32u4",
|
||||
"bootloader": "catarina",
|
||||
"maintainer": "That-Canadian",
|
||||
"width": 3,
|
||||
"height": 3,
|
||||
"layouts": {
|
||||
"2017": {
|
||||
"key_count": 6
|
||||
}
|
||||
}
|
||||
}
|
6
keyboards/christmas_tree/keymaps/default/config.h
Normal file
6
keyboards/christmas_tree/keymaps/default/config.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../config.h"
|
||||
|
||||
#endif
|
77
keyboards/christmas_tree/keymaps/default/keymap.c
Normal file
77
keyboards/christmas_tree/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/* Copyright 2015-2017 Jack Humbert
|
||||
*
|
||||
* 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 "christmas_tree.h"
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
|
||||
enum layers {
|
||||
_BASE,
|
||||
_FUNC
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
FUNC = SAFE_RANGE,
|
||||
BACKLIT
|
||||
};
|
||||
|
||||
#define _______ KC_TRNS
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Base
|
||||
* ,------.
|
||||
* | 1 |
|
||||
* ,------+------.
|
||||
* | 2 | 3 |
|
||||
* ,------+------+------.
|
||||
* | 4 | FUNC | 6 |
|
||||
* `--------------------'
|
||||
*/
|
||||
[_BASE] = KEYMAP(KC_1, KC_2, KC_3, KC_4, MO(_FUNC), KC_6),
|
||||
|
||||
/* Func
|
||||
* ,------.
|
||||
* |BCKLIT|
|
||||
* ,------+------.
|
||||
* | 8 | 9 |
|
||||
* ,------+------+------.
|
||||
* | 0 | FUNC | RESET|
|
||||
* `--------------------'
|
||||
*/
|
||||
[_FUNC] = KEYMAP(BACKLIT, KC_8, KC_9, KC_0, _______, RESET)
|
||||
|
||||
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case BACKLIT:
|
||||
if (record->event.pressed) {
|
||||
register_code(KC_RSFT);
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
register_code(KC_LSFT);
|
||||
backlight_step();
|
||||
#endif
|
||||
} else {
|
||||
unregister_code(KC_RSFT);
|
||||
unregister_code(KC_LSFT);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
2
keyboards/christmas_tree/keymaps/default/readme.md
Normal file
2
keyboards/christmas_tree/keymaps/default/readme.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# The Default Christmas Tree Layout
|
||||
|
14
keyboards/christmas_tree/readme.md
Normal file
14
keyboards/christmas_tree/readme.md
Normal file
@@ -0,0 +1,14 @@
|
||||
Christmas Tree
|
||||
===
|
||||
|
||||

|
||||
|
||||
A tiny 6 key macro pad, in the shape of a christmas tree, made by That-Canadian, SpaceCat, and ChillCaps.
|
||||
|
||||
Keyboard Maintainer: [That-Canadian](https://github.com/That-Canadian)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make christmas_tree/V2017:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
70
keyboards/christmas_tree/rules.mk
Normal file
70
keyboards/christmas_tree/rules.mk
Normal file
@@ -0,0 +1,70 @@
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
API_SYSEX_ENABLE = no
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
DEFAULT_FOLDER = christmas_tree/V2017
|
@@ -416,7 +416,7 @@
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
|
||||
PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN7) | \
|
||||
PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
|
||||
PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
|
||||
@@ -432,7 +432,7 @@
|
||||
PIN_ODR_HIGH(GPIOB_PIN4) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN5) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN6) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN7) | \
|
||||
PIN_ODR_LOW(GPIOB_PIN7) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN8) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN9) | \
|
||||
PIN_ODR_HIGH(GPIOB_PIN10) | \
|
||||
|
@@ -1,2 +0,0 @@
|
||||
EXTRAKEY_ENABLE = yes
|
||||
COMMAND_ENABLE = no
|
41
keyboards/clueboard/66/keymaps/mrscooty/keymap.c
Normal file
41
keyboards/clueboard/66/keymaps/mrscooty/keymap.c
Normal file
@@ -0,0 +1,41 @@
|
||||
#include "clueboard.h"
|
||||
|
||||
// Helpful defines
|
||||
#define _______ KC_TRNS
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
#define _BL 0
|
||||
#define _FL 1
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _BL: Base Layer (Default Layer)
|
||||
*/
|
||||
[_BL] = KEYMAP(
|
||||
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_GRV, KC_BSPC, KC_HOME, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \
|
||||
MO(_FL), 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_RO, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
/* Keymap _FL: Function Layer
|
||||
*/
|
||||
[_FL] = KEYMAP(
|
||||
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_PGUP, \
|
||||
_______, RGB_TOG, KC_MPRV, KC_MPLY, KC_MNXT,_______,_______,KC_HOME,KC_UP, KC_END, _______, _______, _______, KC_PSCR, KC_PGDN, \
|
||||
_______, RGB_VAI, KC_MUTE, KC_VOLD, KC_VOLU,_______,_______,KC_LEFT,KC_DOWN,KC_RIGHT, _______, _______, _______, _______, \
|
||||
_______, RGB_VAD, _______, _______, _______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_SAI, \
|
||||
_______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI)
|
||||
};
|
||||
|
||||
/* Keymap _CL: Control layer
|
||||
|
||||
[_CL] = KEYMAP(
|
||||
BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______,_______,RGB_TOG, RGB_VAI, \
|
||||
_______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD, \
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_SAI, \
|
||||
_______,_______,_______,_______, RGB_MOD, RGB_MOD, _______,_______,_______,_______,RGB_HUD,RGB_SAD,RGB_HUI),
|
||||
};*/
|
15
keyboards/clueboard/66/keymaps/mrscooty/readme.md
Normal file
15
keyboards/clueboard/66/keymaps/mrscooty/readme.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Mr Scooty's Clueboard Layout
|
||||
|
||||
My personal layout for everyday typing and coding.
|
||||
I have a most of my media keys on the function layer as well as a second set of arrows as IJKL which you switch between by holding the normal CAPS key.
|
||||
|
||||
|
||||
#### Base Layer
|
||||
![Base Layout Image] (https://imgur.com/HWdi36y)
|
||||
|
||||
#### Fn Layer
|
||||
![Fn Layout Image] (https://imgur.com/IPa8gFg)
|
||||
|
||||
|
||||
|
||||
Both layers (https://imgur.com/a/dAwXq)
|
2
keyboards/clueboard/66/keymaps/skully/rules.mk
Normal file
2
keyboards/clueboard/66/keymaps/skully/rules.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
RGBLIGHT_ENABLE = no
|
||||
MOUSEKEY_ENABLE = yes
|
@@ -1 +0,0 @@
|
||||
SRC = tetris_text.c
|
@@ -1,49 +0,0 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# On command line:
|
||||
#
|
||||
# make all = Make software.
|
||||
#
|
||||
# make clean = Clean out built project files.
|
||||
#
|
||||
# make coff = Convert ELF to AVR COFF.
|
||||
#
|
||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||
#
|
||||
# make program = Download the hex file to the device.
|
||||
# Please customize your programmer settings(PROGRAM_CMD)
|
||||
#
|
||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||
# (must have teensy_loader_cli installed).
|
||||
#
|
||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||
# have dfu-programmer installed).
|
||||
#
|
||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||
# have Atmel FLIP installed).
|
||||
#
|
||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||
# (must have dfu-programmer installed).
|
||||
#
|
||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||
# (must have Atmel FLIP installed).
|
||||
#
|
||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||
# with avr-gdb or avr-insight as the front end for debugging.
|
||||
#
|
||||
# make filename.s = Just compile filename.c into the assembler code only.
|
||||
#
|
||||
# make filename.i = Create a preprocessed source file for use in submitting
|
||||
# bug reports to the GCC project.
|
||||
#
|
||||
# To rebuild project do "make clean" then "make all".
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the makefile.mk in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
94
keyboards/cospad/config.h
Normal file
94
keyboards/cospad/config.h
Normal file
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER KPREPUBLIC
|
||||
#define PRODUCT COSPAD
|
||||
#define DESCRIPTION QMK keyboard firmware for COSPAD
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 4
|
||||
|
||||
// ROWS: Top to bottom, COLS: Left to right
|
||||
|
||||
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D4, D5 }
|
||||
#define MATRIX_COL_PINS { F0, F1, E6, C7 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
#define BACKLIGHT_PIN F7
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 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
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* Backlight configuration
|
||||
*/
|
||||
#define BACKLIGHT_LEVELS 4
|
||||
|
||||
/* Underlight configuration
|
||||
*/
|
||||
|
||||
#define RGB_DI_PIN F6
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 4 // Number of LEDs
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
#define RGBLIGHT_VAL_STEP 17
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif
|
37
keyboards/cospad/cospad.c
Normal file
37
keyboards/cospad/cospad.c
Normal file
@@ -0,0 +1,37 @@
|
||||
#include "cospad.h"
|
||||
#include "led.h"
|
||||
|
||||
extern inline void cospad_bl_led_on(void);
|
||||
extern inline void cospad_bl_led_off(void);
|
||||
extern inline void cospad_bl_led_togg(void);
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
matrix_init_user();
|
||||
led_init_ports();
|
||||
};
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
matrix_scan_user();
|
||||
};
|
||||
|
||||
void led_init_ports(void) {
|
||||
// * Set our LED pins as output
|
||||
DDRB |= (1<<2);
|
||||
DDRF |= (1<<7);
|
||||
// * Setting BL LEDs to init as off
|
||||
PORTF |= (1<<7);
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
|
||||
// Turn numlock on
|
||||
PORTB &= ~(1<<2);
|
||||
} else {
|
||||
// Turn numlock off
|
||||
PORTB |= (1<<2);
|
||||
}
|
||||
}
|
77
keyboards/cospad/cospad.h
Normal file
77
keyboards/cospad/cospad.h
Normal file
@@ -0,0 +1,77 @@
|
||||
#ifndef COSPAD_H
|
||||
#define COSPAD_H
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
// readability
|
||||
#define XXX KC_NO
|
||||
|
||||
/* COSPAD ortho matrix layout
|
||||
* ,-------------------.
|
||||
* | 00 | 01 | 02 | 03 |
|
||||
* |----|----|----|----|
|
||||
* | 10 | 11 | 12 | 13 |
|
||||
* |----|----|----|----|
|
||||
* | 20 | 21 | 22 | 23 |
|
||||
* |----|----|----|----|
|
||||
* | 30 | 31 | 32 | 33 |
|
||||
* |----|----|----|----|
|
||||
* | 40 | 41 | 42 | 43 |
|
||||
* |----|----|----|----|
|
||||
* | 50 | 51 | 52 | 53 |
|
||||
* `-------------------'
|
||||
*/
|
||||
|
||||
|
||||
/* COSPAD numpad matrix layout
|
||||
* ,-------------------.
|
||||
* | 00 | 01 | 02 | 03 |
|
||||
* |----|----|----|----|
|
||||
* | 10 | 11 | 12 | 13 |
|
||||
* |----|----|----|----|
|
||||
* | 20 | 21 | 22 | |
|
||||
* |----|----|----| 23 |
|
||||
* | 30 | 31 | 32 | |
|
||||
* |----|----|----|----|
|
||||
* | 40 | 41 | 42 | |
|
||||
* |----|----|----| 43 |
|
||||
* | 50 | 52 | |
|
||||
* `-------------------'
|
||||
*/
|
||||
// The first section contains all of the arguments
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
#define KEYMAP( \
|
||||
k00, k01, k02, k03, \
|
||||
k10, k11, k12, k13, \
|
||||
k20, k21, k22, k23, \
|
||||
k30, k31, k32, k33, \
|
||||
k40, k41, k42, k43, \
|
||||
k50, k51, k52, k53 \
|
||||
) \
|
||||
{ \
|
||||
{k00, k01, k02, k03}, \
|
||||
{k10, k11, k12, k13}, \
|
||||
{k20, k21, k22, k23}, \
|
||||
{k30, k31, k32, k33}, \
|
||||
{k40, k41, k42, k43}, \
|
||||
{k50, k51, k52, k53} \
|
||||
}
|
||||
void matrix_init_user(void);
|
||||
void matrix_scan_user(void);
|
||||
/*
|
||||
inline void cospad_bl_led_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
|
||||
inline void cospad_bl_led_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
|
||||
*/
|
||||
|
||||
inline void cospad_bl_led_on(void) { PORTF &= ~(1<<7); }
|
||||
inline void cospad_bl_led_off(void) { PORTF |= (1<<7); }
|
||||
|
||||
inline void cospad_bl_led_togg(void) {
|
||||
uint8_t bl_mask = PORTF&(1<<7);
|
||||
if (bl_mask) {
|
||||
PORTF &= ~(1<<7);
|
||||
} else {
|
||||
PORTF |= (1<<7);
|
||||
}
|
||||
}
|
||||
#endif
|
91
keyboards/cospad/keymaps/default/keymap.c
Normal file
91
keyboards/cospad/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,91 @@
|
||||
#include "cospad.h"
|
||||
#include "led.h"
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
#include "rgblight.h"
|
||||
#endif
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
#define _BL 0
|
||||
#define _FL 1
|
||||
|
||||
#define _______ KC_TRNS
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap _BL: (Base Layer) Default Layer
|
||||
* ,-------------------.
|
||||
* |Esc |TAB | FN | BS |
|
||||
* |----|----|----|----|
|
||||
* | NL | / | * | - |
|
||||
* |----|----|----|----|
|
||||
* | 7 | 8 | 9 | |
|
||||
* |----|----|----| + |
|
||||
* | 4 | 5 | 6 | |
|
||||
* |----|----|----|----|
|
||||
* | 1 | 2 | 3 | |
|
||||
* |----|----|----| En |
|
||||
* | 0 | . | |
|
||||
* `-------------------'
|
||||
*/
|
||||
|
||||
[_BL] = KEYMAP(
|
||||
KC_ESC, KC_TAB, MO(_FL), KC_BSPC, \
|
||||
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
|
||||
KC_P7, KC_P8, KC_P9, KC_PPLS, \
|
||||
KC_P4, KC_P5, KC_P6, KC_NO, \
|
||||
KC_P1, KC_P2, KC_P3, KC_PENT, \
|
||||
KC_P0, KC_NO, KC_PDOT, KC_NO),
|
||||
|
||||
/* Keymap _FL: Function Layer
|
||||
* ,-------------------.
|
||||
* |RGBT|TAB | FN | BS |
|
||||
* |----|----|----|----|
|
||||
* |RGBM|RGBP|BTOG| - |
|
||||
* |----|----|----|----|
|
||||
* |HUD |HUI |BON | |
|
||||
* |----|----|----| + |
|
||||
* |SAD |SAI |BOFF| |
|
||||
* |----|----|----|----|
|
||||
* |VAD |VAS | 3 | |
|
||||
* |----|----|----| En |
|
||||
* | 0 |RST | |
|
||||
* `-------------------'
|
||||
*/
|
||||
[_FL] = KEYMAP(
|
||||
RGB_TOG, KC_TAB, KC_TRNS, KC_BSPC, \
|
||||
RGB_MOD, RGB_M_P, BL_TOGG, KC_PMNS, \
|
||||
RGB_HUD, RGB_HUI, BL_ON, KC_PPLS, \
|
||||
RGB_SAD, RGB_SAI, BL_OFF, KC_NO, \
|
||||
RGB_VAD, RGB_VAI, KC_P3, KC_PENT, \
|
||||
KC_P0, KC_NO, RESET, KC_NO),
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = MO(_FL),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case BL_TOGG:
|
||||
if (record->event.pressed) {
|
||||
cospad_bl_led_togg();
|
||||
}
|
||||
return false;
|
||||
case BL_ON:
|
||||
if (record->event.pressed) {
|
||||
cospad_bl_led_on();
|
||||
}
|
||||
return false;
|
||||
case BL_OFF:
|
||||
if(record->event.pressed) {
|
||||
cospad_bl_led_off();
|
||||
}
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
21
keyboards/cospad/readme.md
Normal file
21
keyboards/cospad/readme.md
Normal file
@@ -0,0 +1,21 @@
|
||||
COSPAD
|
||||
===
|
||||
|
||||
A DIY Keypad Kit sold by KPRepublic, runs TKG natively.
|
||||
|
||||
Keyboard Maintainer: QMK Community
|
||||
Hardware Supported: COSPAD
|
||||
Hardware Availability: https://aliexpress.com/item/cospad-Custom-Mechanical-Keyboard-Kit-up-tp-24-keys-Supports-TKG-TOOLS-Underglow-RGB-PCB-20/32818383873.html
|
||||
|
||||
Only supports on and off for the backlight leds, as they are not connected to a PWM pin.
|
||||
|
||||
Supported Layouts:
|
||||
|
||||

|
||||

|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make cospad:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
66
keyboards/cospad/rules.mk
Normal file
66
keyboards/cospad/rules.mk
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
# MCU name
|
||||
#MCU = at90usb1287
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150)
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
74
keyboards/dz60/keymaps/iso_6u_space/keymap.c
Normal file
74
keyboards/dz60/keymaps/iso_6u_space/keymap.c
Normal file
@@ -0,0 +1,74 @@
|
||||
#include "dz60.h"
|
||||
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* ISO 6u layout layer 0
|
||||
* ,-----------------------------------------------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BSPC |
|
||||
* |-----------------------------------------------------------------------------------------+
|
||||
* | Tab | Q | W | E | R | T | Z | U | I | O | P | P | Ü | * | |
|
||||
* |-------------------------------------------------------------------------------------| +
|
||||
* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ä | # |Enter |
|
||||
* |-----------------------------------------------------------------------------------------+
|
||||
* | Shift| < | Y | X | C | V | B | N | M | , | . | . | - | RShift |
|
||||
* |-----------------------------------------------------------------------------------------+
|
||||
* | LCtrl | LGUI | LAlt | Space | RAlt | RGUI | Layer_2 | RCtrl |
|
||||
* `-----------------------------------------------------------------------------------------'
|
||||
*/
|
||||
KEYMAP(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, 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,
|
||||
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_NO,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT,KC_RGUI, KC_NO, MO(2), KC_RCTL),
|
||||
|
||||
|
||||
KEYMAP(
|
||||
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_NO, KC_DEL,
|
||||
KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LSFT, KC_NO, KC_NO, KC_NO, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LCTL, KC_LGUI, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_NO, KC_RCTL),
|
||||
|
||||
KEYMAP(
|
||||
KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), M(12), KC_NO, KC_DEL,
|
||||
KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
|
||||
};
|
||||
|
||||
enum function_id {
|
||||
SHIFT_ESC,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(SHIFT_ESC),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
static uint8_t shift_esc_shift_mask;
|
||||
switch (id) {
|
||||
case SHIFT_ESC:
|
||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||
if (record->event.pressed) {
|
||||
if (shift_esc_shift_mask) {
|
||||
add_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
add_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
} else {
|
||||
if (shift_esc_shift_mask) {
|
||||
del_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
del_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
76
keyboards/dz60/keymaps/iso_7u_space/keymap.c
Normal file
76
keyboards/dz60/keymaps/iso_7u_space/keymap.c
Normal file
@@ -0,0 +1,76 @@
|
||||
#include "dz60.h"
|
||||
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* ISO 7u layout layer 0
|
||||
* ,-----------------------------------------------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BSPC |
|
||||
* |-----------------------------------------------------------------------------------------+
|
||||
* | Tab | Q | W | E | R | T | Z | U | I | O | P | P | Ü | * | |
|
||||
* |-------------------------------------------------------------------------------------| +
|
||||
* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ä | # |Enter |
|
||||
* |-----------------------------------------------------------------------------------------+
|
||||
* | Shift| < | Y | X | C | V | B | N | M | , | . | . | - | RShift |
|
||||
* |-----------------------------------------------------------------------------------------+
|
||||
* | LCtrl | LGUI | LAlt | Space | RAlt | Layer_2 | RCtrl |
|
||||
* `-----------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
KEYMAP(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, 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,
|
||||
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_LCTL, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_NO, KC_RALT, KC_NO, MO(2), KC_RCTL),
|
||||
|
||||
|
||||
KEYMAP(
|
||||
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_NO, KC_DEL,
|
||||
KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_PGUP, KC_NO, KC_NO, KC_NO, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_PGDOWN, KC_LGUI, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_NO, KC_RCTL),
|
||||
|
||||
KEYMAP(
|
||||
KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
|
||||
KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
|
||||
};
|
||||
|
||||
enum function_id {
|
||||
SHIFT_ESC,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(SHIFT_ESC),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
static uint8_t shift_esc_shift_mask;
|
||||
switch (id) {
|
||||
case SHIFT_ESC:
|
||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
|
||||
if (record->event.pressed) {
|
||||
if (shift_esc_shift_mask) {
|
||||
add_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
add_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
} else {
|
||||
if (shift_esc_shift_mask) {
|
||||
del_key(KC_GRV);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
del_key(KC_ESC);
|
||||
send_keyboard_report();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
29
keyboards/dz60/keymaps/tailcall/keymap.c
Normal file
29
keyboards/dz60/keymaps/tailcall/keymap.c
Normal file
@@ -0,0 +1,29 @@
|
||||
#include "dz60.h"
|
||||
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
KEYMAP(
|
||||
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 , XXXXXXX, 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_LCTL, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
|
||||
KC_LSFT, XXXXXXX, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, XXXXXXX,
|
||||
MO(1) , KC_LGUI, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RGUI, XXXXXXX, MO(2) , KC_RCTL),
|
||||
|
||||
KEYMAP(
|
||||
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_HOME, KC_UP , KC_END , KC_PGUP, KC_INS , KC_PSCR, KC_SLCK, RGB_VAD, _______, _______, _______, _______, _______,
|
||||
KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_DEL , _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||
|
||||
KEYMAP(
|
||||
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_SLEP,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET ,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, BL_DEC , BL_TOGG, BL_INC , BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||
|
||||
};
|
1
keyboards/eagle_viper/eagle_viper.c
Normal file
1
keyboards/eagle_viper/eagle_viper.c
Normal file
@@ -0,0 +1 @@
|
||||
#include "eagle_viper.h"
|
10
keyboards/eagle_viper/eagle_viper.h
Normal file
10
keyboards/eagle_viper/eagle_viper.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef EAGLE_VIPER_H
|
||||
#define EAGLE_VIPER_H
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef KEYBOARD_eagle_viper_v2
|
||||
#include "v2.h"
|
||||
#endif
|
||||
|
||||
#endif
|
13
keyboards/eagle_viper/info.json
Normal file
13
keyboards/eagle_viper/info.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Eagle/Viper",
|
||||
"manufacturer": "Duck",
|
||||
"processor": "atmega32u4",
|
||||
"bootloader": "atmel-dfu",
|
||||
"width": 15,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"KEYMAP": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0.5, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":14, "y":1, "w":1.5}, {"x":0.75, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":14, "y":2, "w":2.25}, {"x":1.25, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":13, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0.25, "y":4, "w":1.25}, {"x":1.5, "y":4, "w":1.25}, {"x":2.75, "y":4, "w":1.25}, {"x":9, "y":4, "w":6.25}, {"x":10.25, "y":4, "w":1.25}, {"x":11.5, "y":4, "w":1.25}, {"x":12.75, "y":4, "w":1.25}, {"x":14, "y":4, "w":1.25}]
|
||||
}
|
||||
}
|
||||
}
|
12
keyboards/eagle_viper/readme.md
Normal file
12
keyboards/eagle_viper/readme.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Duck Eagle/Viper
|
||||
|
||||
Non official firmware for custom Korean keyboard with 60% key layout made by Duck.
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
|
||||
Newest version is the [Eagle/Viper V2](http://duck0113.tistory.com/127)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make eagle_viper/v2:default
|
||||
|
1
keyboards/eagle_viper/rules.mk
Normal file
1
keyboards/eagle_viper/rules.mk
Normal file
@@ -0,0 +1 @@
|
||||
DEFAULT_FOLDER = eagle_viper/v2
|
54
keyboards/eagle_viper/v2/config.h
Normal file
54
keyboards/eagle_viper/v2/config.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6050
|
||||
#define DEVICE_VER 0x0104
|
||||
#define MANUFACTURER Duck
|
||||
#define PRODUCT Eagle/Viper V2
|
||||
#define DESCRIPTION 60% Korean custom keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* number of backlight levels */
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
|
||||
/* key combination for magic key command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGB_DI_PIN D6
|
||||
#define RGBLED_NUM 17
|
||||
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#endif
|
89
keyboards/eagle_viper/v2/indicator_leds.c
Normal file
89
keyboards/eagle_viper/v2/indicator_leds.c
Normal file
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
#include <stdbool.h>
|
||||
#include <util/delay.h>
|
||||
#include "indicator_leds.h"
|
||||
|
||||
#define RES 6000
|
||||
|
||||
#define LED_T1H 600
|
||||
#define LED_T1L 650
|
||||
#define LED_T0H 250
|
||||
#define LED_T0L 1000
|
||||
|
||||
#define NS_PER_SEC (1000000000L)
|
||||
#define CYCLES_PER_SEC (F_CPU)
|
||||
#define NS_PER_CYCLE (NS_PER_SEC / CYCLES_PER_SEC)
|
||||
#define NS_TO_CYCLES(n) ((n) / NS_PER_CYCLE)
|
||||
|
||||
void send_bit_d4(bool bitVal) {
|
||||
if(bitVal) {
|
||||
asm volatile (
|
||||
"sbi %[port], %[bit] \n\t"
|
||||
".rept %[onCycles] \n\t"
|
||||
"nop \n\t"
|
||||
".endr \n\t"
|
||||
"cbi %[port], %[bit] \n\t"
|
||||
".rept %[offCycles] \n\t"
|
||||
"nop \n\t"
|
||||
".endr \n\t"
|
||||
::
|
||||
[port] "I" (_SFR_IO_ADDR(PORTD)),
|
||||
[bit] "I" (4),
|
||||
[onCycles] "I" (NS_TO_CYCLES(LED_T1H) - 2),
|
||||
[offCycles] "I" (NS_TO_CYCLES(LED_T1L) - 2));
|
||||
} else {
|
||||
asm volatile (
|
||||
"sbi %[port], %[bit] \n\t"
|
||||
".rept %[onCycles] \n\t"
|
||||
"nop \n\t"
|
||||
".endr \n\t"
|
||||
"cbi %[port], %[bit] \n\t"
|
||||
".rept %[offCycles] \n\t"
|
||||
"nop \n\t"
|
||||
".endr \n\t"
|
||||
::
|
||||
[port] "I" (_SFR_IO_ADDR(PORTD)),
|
||||
[bit] "I" (4),
|
||||
[onCycles] "I" (NS_TO_CYCLES(LED_T0H) - 2),
|
||||
[offCycles] "I" (NS_TO_CYCLES(LED_T0L) - 2));
|
||||
}
|
||||
}
|
||||
|
||||
void show(void) {
|
||||
_delay_us((RES / 1000UL) + 1);
|
||||
}
|
||||
|
||||
void send_value(uint8_t byte) {
|
||||
for(uint8_t b = 0; b < 8; b++) {
|
||||
send_bit_d4(byte & 0b10000000);
|
||||
byte <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Send the LED indicators to the WS2811S chips
|
||||
void indicator_leds_set(bool leds[8]) {
|
||||
uint8_t led_cnt;
|
||||
|
||||
cli();
|
||||
for(led_cnt = 0; led_cnt < 8; led_cnt++)
|
||||
send_value(leds[led_cnt] ? 255 : 0);
|
||||
sei();
|
||||
show();
|
||||
}
|
2
keyboards/eagle_viper/v2/indicator_leds.h
Normal file
2
keyboards/eagle_viper/v2/indicator_leds.h
Normal file
@@ -0,0 +1,2 @@
|
||||
void indicator_leds_set(bool leds[8]);
|
||||
void show(void);
|
37
keyboards/eagle_viper/v2/keymaps/default/keymap.c
Normal file
37
keyboards/eagle_viper/v2/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "eagle_viper.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* layer 0: qwerty */
|
||||
[0] = KEYMAP(\
|
||||
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_NO, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_NO, KC_RALT, KC_RGUI, KC_RCTL),
|
||||
|
||||
[1] = KEYMAP(\
|
||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
return MACRO_NONE;
|
||||
};
|
10
keyboards/eagle_viper/v2/keymaps/default/readme.md
Normal file
10
keyboards/eagle_viper/v2/keymaps/default/readme.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Default Eagle Layout
|
||||
|
||||
This is the default implement layout for Duck Eagle V2.
|
||||
|
||||

|
||||
|
||||
|
||||
## Features
|
||||
|
||||
* Default QWERTY layer
|
44
keyboards/eagle_viper/v2/keymaps/mechmerlin/keymap.c
Normal file
44
keyboards/eagle_viper/v2/keymaps/mechmerlin/keymap.c
Normal file
@@ -0,0 +1,44 @@
|
||||
/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "eagle_viper.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* layer 0: qwerty */
|
||||
[0] = KEYMAP(\
|
||||
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_NO, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_NO, KC_RALT, KC_RGUI, KC_RCTL),
|
||||
|
||||
[1] = KEYMAP(\
|
||||
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
|
||||
RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS,
|
||||
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_PGDN, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, TG(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[2] = KEYMAP(\
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
return MACRO_NONE;
|
||||
};
|
15
keyboards/eagle_viper/v2/keymaps/mechmerlin/readme.md
Normal file
15
keyboards/eagle_viper/v2/keymaps/mechmerlin/readme.md
Normal file
@@ -0,0 +1,15 @@
|
||||
MechMerlin's Duck Eagle V2 Layout
|
||||
======================
|
||||
|
||||
This is the preferred 60% layout used by u/merlin36, host of the MechMerlin YouTube channel.
|
||||
|
||||

|
||||
|
||||
## Keymap Notes
|
||||
- Highly influenced by the KBP V60 and WKL B.Face standard layouts
|
||||
- Does not support any form of inswitch lighting as Merlin hates them.
|
||||
- Arrow toggle switch is FN + Space
|
||||
- Reset is FN + R
|
||||
|
||||
### Build
|
||||
To build this keymap, simply run `make eagle_viper/v2:mechmerlin` from the qmk_firmware directory.
|
40
keyboards/eagle_viper/v2/keymaps/profanum429/keymap.c
Normal file
40
keyboards/eagle_viper/v2/keymaps/profanum429/keymap.c
Normal file
@@ -0,0 +1,40 @@
|
||||
/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "eagle_viper.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* layer 0: qwerty */
|
||||
[0] = KEYMAP(\
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||
KC_NO, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_NO, KC_RALT, KC_RGUI, KC_NO),
|
||||
|
||||
[1] = KEYMAP(\
|
||||
KC_TRNS, 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_INS, KC_DEL,
|
||||
KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAI, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
|
||||
KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_TRNS, KC_ENT,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
|
||||
|
5
keyboards/eagle_viper/v2/keymaps/profanum429/readme.md
Normal file
5
keyboards/eagle_viper/v2/keymaps/profanum429/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Profanum429 Duck Viper V2 Layout
|
||||
TODO
|
||||
|
||||
## Features
|
||||
TODO
|
266
keyboards/eagle_viper/v2/matrix.c
Normal file
266
keyboards/eagle_viper/v2/matrix.c
Normal file
@@ -0,0 +1,266 @@
|
||||
/*
|
||||
Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <util/delay.h>
|
||||
#include <avr/io.h>
|
||||
#include <stdio.h>
|
||||
#include "matrix.h"
|
||||
#include "util.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
|
||||
static uint8_t debouncing = DEBOUNCING_DELAY;
|
||||
|
||||
/* matrix state(1:on, 0:off) */
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||
|
||||
static uint8_t read_rows(uint8_t col);
|
||||
static void init_rows(void);
|
||||
static void unselect_cols(void);
|
||||
static void select_col(uint8_t col);
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_quantum(void) {
|
||||
matrix_init_kb();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_quantum(void) {
|
||||
matrix_scan_kb();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_kb(void) {
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_kb(void) {
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
void backlight_init_ports(void)
|
||||
{
|
||||
DDRD |= 0b11010000;
|
||||
PORTD &= ~0b01010000;
|
||||
PORTD |= 0b10000000;
|
||||
DDRB |= 0b00011111;
|
||||
PORTB &= ~0b00001110;
|
||||
PORTB |= 0b00010001;
|
||||
DDRE |= 0b01000000;
|
||||
PORTE &= ~0b01000000;
|
||||
}
|
||||
|
||||
void matrix_init(void) {
|
||||
backlight_init_ports();
|
||||
unselect_cols();
|
||||
init_rows();
|
||||
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = 0;
|
||||
matrix_debouncing[i] = 0;
|
||||
}
|
||||
|
||||
matrix_init_quantum();
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void) {
|
||||
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
|
||||
select_col(col);
|
||||
_delay_us(3);
|
||||
|
||||
uint8_t rows = read_rows(col);
|
||||
|
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||
bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
|
||||
bool curr_bit = rows & (1<<row);
|
||||
if (prev_bit != curr_bit) {
|
||||
matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
|
||||
debouncing = DEBOUNCING_DELAY;
|
||||
}
|
||||
}
|
||||
unselect_cols();
|
||||
}
|
||||
|
||||
if (debouncing) {
|
||||
if (--debouncing) {
|
||||
_delay_ms(1);
|
||||
} else {
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = matrix_debouncing[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
matrix_scan_quantum();
|
||||
return 1;
|
||||
}
|
||||
|
||||
inline matrix_row_t matrix_get_row(uint8_t row) {
|
||||
return matrix[row];
|
||||
}
|
||||
|
||||
void matrix_print(void) {
|
||||
print("\nr/c 0123456789ABCDEF\n");
|
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||
xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
|
||||
}
|
||||
}
|
||||
|
||||
/* Row pin configuration
|
||||
* row: 0 1 2 3 4 5
|
||||
* pin: PB7 PD0 PD1 PD2 PD3 PD5
|
||||
*
|
||||
* Esc uses its own pin PE2
|
||||
*/
|
||||
static void init_rows(void) {
|
||||
DDRD &= ~0b00101111;
|
||||
PORTD &= ~0b00101111;
|
||||
|
||||
DDRB &= ~0b10000000;
|
||||
PORTB &= ~0b10000000;
|
||||
|
||||
DDRE &= ~0b00000100;
|
||||
PORTE |= 0b00000100;
|
||||
}
|
||||
|
||||
static uint8_t read_rows(uint8_t col) {
|
||||
|
||||
return (PIND&(1<<0) ? (1<<0) : 0) |
|
||||
(PIND&(1<<1) ? (1<<1) : 0) |
|
||||
(PIND&(1<<2) ? (1<<2) : 0) |
|
||||
(PIND&(1<<3) ? (1<<3) : 0) |
|
||||
(PIND&(1<<5) ? (1<<4) : 0) |
|
||||
(PINB&(1<<7) ? (1<<5) : 0) |
|
||||
(col==0 ? ((PINE&(1<<2) ? 0 : (1<<2))) : 0);
|
||||
|
||||
}
|
||||
|
||||
uint8_t read_fwkey(void)
|
||||
{
|
||||
return PINE&(1<<2) ? 0 : (1<<2);
|
||||
}
|
||||
|
||||
/* Columns 0 - 15
|
||||
* These columns uses two 74HC237D 3 to 8 bit demultiplexers.
|
||||
* col / pin: PC6 PB6 PF0 PF1 PC7
|
||||
* 0: 1 0 0 0 0
|
||||
* 1: 1 0 1 0 0
|
||||
* 2: 1 0 0 1 0
|
||||
* 3: 1 0 1 1 0
|
||||
* 4: 1 0 0 0 1
|
||||
* 5: 1 0 1 0 1
|
||||
* 6: 1 0 0 1 1
|
||||
* 7: 1 0 1 1 1
|
||||
* 8: 0 1 0 0 0
|
||||
* 9: 0 1 1 0 0
|
||||
* 10: 0 1 0 1 0
|
||||
* 11: 0 1 1 1 0
|
||||
* 12: 0 1 0 0 1
|
||||
* 13: 0 1 1 0 1
|
||||
* 14: 0 1 0 1 1
|
||||
* 15: 0 1 1 1 1
|
||||
*
|
||||
*/
|
||||
static void unselect_cols(void) {
|
||||
DDRB |= 0b01000000;
|
||||
PORTB &= ~0b01000000;
|
||||
|
||||
DDRC |= 0b11000000;
|
||||
PORTC &= ~0b11000000;
|
||||
|
||||
DDRF |= 0b00000011;
|
||||
PORTF &= ~0b00000011;
|
||||
}
|
||||
|
||||
static void select_col(uint8_t col) {
|
||||
|
||||
switch (col) {
|
||||
case 0:
|
||||
PORTC |= 0b01000000;
|
||||
break;
|
||||
case 1:
|
||||
PORTC |= 0b01000000;
|
||||
PORTF |= 0b00000001;
|
||||
break;
|
||||
case 2:
|
||||
PORTC |= 0b01000000;
|
||||
PORTF |= 0b00000010;
|
||||
break;
|
||||
case 3:
|
||||
PORTC |= 0b01000000;
|
||||
PORTF |= 0b00000011;
|
||||
break;
|
||||
case 4:
|
||||
PORTC |= 0b11000000;
|
||||
break;
|
||||
case 5:
|
||||
PORTC |= 0b11000000;
|
||||
PORTF |= 0b00000001;
|
||||
break;
|
||||
case 6:
|
||||
PORTC |= 0b11000000;
|
||||
PORTF |= 0b00000010;
|
||||
break;
|
||||
case 7:
|
||||
PORTC |= 0b11000000;
|
||||
PORTF |= 0b00000011;
|
||||
break;
|
||||
case 8:
|
||||
PORTB |= 0b01000000;
|
||||
break;
|
||||
case 9:
|
||||
PORTB |= 0b01000000;
|
||||
PORTF |= 0b00000001;
|
||||
break;
|
||||
case 10:
|
||||
PORTB |= 0b01000000;
|
||||
PORTF |= 0b00000010;
|
||||
break;
|
||||
case 11:
|
||||
PORTB |= 0b01000000;
|
||||
PORTF |= 0b00000011;
|
||||
break;
|
||||
case 12:
|
||||
PORTB |= 0b01000000;
|
||||
PORTC |= 0b10000000;
|
||||
break;
|
||||
case 13:
|
||||
PORTB |= 0b01000000;
|
||||
PORTF |= 0b00000001;
|
||||
PORTC |= 0b10000000;
|
||||
break;
|
||||
case 14:
|
||||
PORTB |= 0b01000000;
|
||||
PORTF |= 0b00000010;
|
||||
PORTC |= 0b10000000;
|
||||
break;
|
||||
case 15:
|
||||
PORTB |= 0b01000000;
|
||||
PORTF |= 0b00000011;
|
||||
PORTC |= 0b10000000;
|
||||
break;
|
||||
}
|
||||
}
|
30
keyboards/eagle_viper/v2/readme.md
Normal file
30
keyboards/eagle_viper/v2/readme.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Duck Eagle/Viper V2
|
||||
|
||||
Non official firmware for custom Korean keyboard with 60% key layout made by Duck.
|
||||
Group buy was run November 2016 via [geekhack](https://geekhack.org/index.php?topic=86087.0) with 100 keyboards total.
|
||||
|
||||
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
|
||||
Hardware Supported: Duck Eagle/Viper PCB Ver 2.0, Atmega32u4
|
||||
Hardware Availability: Wait until GB of the next revision
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make eagle_viper/v2:default
|
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||
|
||||
## Hardware Notes
|
||||
|
||||
The Duck Eagle/Viper V2 PCB consists of:
|
||||
|
||||
### Microchips
|
||||
2 74HC237D 3-to-8 line decoders
|
||||
1 Atmega32u4 microcontroller
|
||||
2 WS2811 LED controller
|
||||
|
||||
## Notes
|
||||
Thanks to Ralf Schmitt for previous implementations in his [TMK fork](https://github.com/xauser/tmk_keyboard/tree/xauser/) and few helping words.
|
||||
|
||||
Based heavily on Rasmus Schults [Duck Lightsaver QMK Port](https://github.com/qmk/qmk_firmware/tree/master/keyboards/lightsaver)
|
||||
|
||||
Special thanks to profanum429 for debugging help and contributions to support the Viper and LED indicators.
|
72
keyboards/eagle_viper/v2/rules.mk
Normal file
72
keyboards/eagle_viper/v2/rules.mk
Normal file
@@ -0,0 +1,72 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE ?= no # Console for debug(+400)
|
||||
COMMAND_ENABLE ?= yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality on B7 by default
|
||||
MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
|
||||
UNICODE_ENABLE ?= no # Unicode
|
||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE ?= no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
|
||||
RGBLIGHT_ENABLE = yes
|
||||
|
||||
CUSTOM_MATRIX = yes
|
||||
SRC += indicator_leds.c \
|
||||
matrix.c
|
65
keyboards/eagle_viper/v2/v2.c
Normal file
65
keyboards/eagle_viper/v2/v2.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "v2.h"
|
||||
#include "indicator_leds.h"
|
||||
|
||||
enum BACKLIGHT_AREAS {
|
||||
BACKLIGHT_ALPHAS = 0b00000010,
|
||||
BACKLIGHT_MODNUM = 0b00001000
|
||||
};
|
||||
|
||||
void backlight_set(uint8_t level) {
|
||||
switch(level) {
|
||||
case 0:
|
||||
PORTB |= BACKLIGHT_ALPHAS;
|
||||
PORTB |= BACKLIGHT_MODNUM;
|
||||
break;
|
||||
case 1:
|
||||
PORTB &= ~BACKLIGHT_ALPHAS;
|
||||
PORTB |= BACKLIGHT_MODNUM;
|
||||
break;
|
||||
case 2:
|
||||
PORTB |= BACKLIGHT_ALPHAS;
|
||||
PORTB &= ~BACKLIGHT_MODNUM;
|
||||
break;
|
||||
case 3:
|
||||
PORTB &= ~BACKLIGHT_ALPHAS;
|
||||
PORTB &= ~BACKLIGHT_MODNUM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Port from backlight_update_state
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
bool status[8] = {
|
||||
host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK), /* LED 3 */
|
||||
host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK), /* LED 2 */
|
||||
host_keyboard_leds() & (1<<USB_LED_NUM_LOCK), /* LED 1 */
|
||||
|
||||
layer_state & (1<<2), /* LED 6 */
|
||||
layer_state & (1<<1), /* LED 5 */
|
||||
layer_state & (1<<0) ? 0: 1, /* LED 4 */
|
||||
|
||||
layer_state & (1<<5), /* LED 8 */
|
||||
layer_state & (1<<4) /* LED 7 */
|
||||
};
|
||||
|
||||
indicator_leds_set(status);
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||
return process_record_user(keycode, record);
|
||||
}
|
34
keyboards/eagle_viper/v2/v2.h
Normal file
34
keyboards/eagle_viper/v2/v2.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef V2_H
|
||||
#define V2_H
|
||||
|
||||
#include "../eagle_viper.h"
|
||||
|
||||
#define KEYMAP( \
|
||||
K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, \
|
||||
K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
|
||||
K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2O, \
|
||||
K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, \
|
||||
K0A, K0B, K0C, K0J, K0K, K0L, K0M, K0N, K0O \
|
||||
) { \
|
||||
{ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, }, \
|
||||
{ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, }, \
|
||||
{ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, KC_NO, K2O, }, \
|
||||
{ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, }, \
|
||||
{ K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, K0L, K0M, K0N, K0O } \
|
||||
}
|
||||
#endif
|
237
keyboards/ergodone/keymaps/kloki/keymap.c
Normal file
237
keyboards/ergodone/keymaps/kloki/keymap.c
Normal file
@@ -0,0 +1,237 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
|
||||
#define BASE 0 // default layer
|
||||
#define QW 1 // qwerty
|
||||
#define SYMB 2 // symbols
|
||||
#define NUM 3 // media keys
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
EPRM,
|
||||
VRSN,
|
||||
RGB_SLD
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | SHIFT| | SYM | 6 | 7 | 8 | 9 | 0 | Bck |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | D | R | W | B | `~ | | "' | J | F | U | P | : | \ | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Ctr/Es | A | S | H | T | G |------| |------| Y | N | E | O | I | Enter |
|
||||
* |--------+------+------+------+------+------| = + | | -_ |------+------+------+------+------+--------|
|
||||
* | LShift | Z | X | M | C | V | | | | K | L | , | . | / | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* |MEH | Gui |AltShf| Left | Right| | DOWN | UP | [ | ] | ~SYM |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | ESC |Home | | PgUp | QW |
|
||||
* ,------|------|------| |------+--------+------.
|
||||
* | | ENT | End | | PgDn | | |
|
||||
* | Space| WIN |------| |------| Tab |Back |
|
||||
* | SYM | | SCTR | | SALT | SYM | |
|
||||
* `--------------------' `----------------------'
|
||||
*/
|
||||
|
||||
[BASE] = LAYOUT_ergodox( // layer 0 : default
|
||||
// left hand
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LSFT,
|
||||
KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_GRV,
|
||||
CTL_T(KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G,
|
||||
KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_EQL,
|
||||
KC_MEH, KC_LGUI, KC_LALT, KC_LEFT,KC_RGHT,
|
||||
KC_ESC, KC_HOME,
|
||||
KC_END,
|
||||
LT(SYMB, KC_SPC), LGUI_T(KC_ENT), S(KC_LGUI),
|
||||
// right hand
|
||||
TG(NUM), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_QUOT, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
|
||||
KC_Y, KC_N, KC_E, KC_O, KC_I , KC_ENT,
|
||||
KC_MINS, KC_K, KC_L, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_DOWN,KC_UP, KC_LBRC,KC_RBRC, MO(SYMB),
|
||||
KC_PGUP, TG(QW),
|
||||
KC_PGDN,
|
||||
S(KC_LALT),LT(SYMB, KC_TAB), KC_BSPC
|
||||
),
|
||||
|
||||
[QW] = LAYOUT_ergodox(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_Q, KC_W, KC_E, KC_R, KC_T, _______,
|
||||
_______, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______,
|
||||
_______, _______, _______,
|
||||
// right hand
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, KC_Y, KC_U, KC_I , KC_O, KC_P, _______,
|
||||
KC_H, KC_J, KC_K , KC_L, KC_SCLN, _______,
|
||||
_______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______,
|
||||
_______, _______, _______
|
||||
),
|
||||
/* Keymap 1: Symbol Layer
|
||||
*
|
||||
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | DEL |
|
||||
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||
* | | ! | @ | { | } | * | | | | < | H | U | PU | * | |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | # | $ | ( | ) | ` |------| |------| > | L | D | R | + | |
|
||||
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | % | ^ | [ | ] | ~ | | | | & | E | D | PD | \ | |
|
||||
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// SYMBOLS
|
||||
[SYMB] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______,
|
||||
_______,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_ASTR,_______,
|
||||
_______,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||
_______,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,_______,
|
||||
_______,_______,_______,_______,_______,
|
||||
_______,_______,
|
||||
_______,
|
||||
_______,_______,_______,
|
||||
// right hand
|
||||
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
|
||||
_______, KC_LABK, KC_HOME, KC_UP, KC_PGUP, KC_ASTR, _______,
|
||||
KC_RABK, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PLUS, _______,
|
||||
_______, KC_AMPR, KC_END, KC_DOWN, KC_PGDN, KC_BSLS, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______,
|
||||
_______, _______, _______
|
||||
),
|
||||
/* Keymap 2: Media and mouse keys
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | | L | MsUp | R | | | | | | 4 | 5 | 6 | | TAB |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | |MsLeft|MsDown|MsRght| |------| |------| | 1 | 2 | 3 | | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | | 0 | 0 | | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | | | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[NUM] = LAYOUT_ergodox(
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______,
|
||||
_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______,
|
||||
_______, _______, _______,
|
||||
// right hand
|
||||
_______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_4, KC_5 , KC_6, _______, KC_TAB,
|
||||
_______, KC_1, KC_2 , KC_3, _______, _______,
|
||||
_______, _______, _______, KC_0, KC_0, _______, _______,
|
||||
_______, _______, _______, _______, _______,
|
||||
_______, _______,
|
||||
_______,
|
||||
_______, _______, _______
|
||||
),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// MACRODOWN only works in this function
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (record->event.pressed) { // For resetting EEPROM
|
||||
eeconfig_init();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// dynamically generate these.
|
||||
case EPRM:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_init();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case VRSN:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RGB_SLD:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_mode(1);
|
||||
#endif
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
|
||||
};
|
||||
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
case 1:
|
||||
ergodox_board_led_on();
|
||||
break;
|
||||
case 3:
|
||||
ergodox_board_led_on();
|
||||
break;
|
||||
default:
|
||||
// none
|
||||
break;
|
||||
}
|
||||
|
||||
};
|
7
keyboards/ergodone/keymaps/kloki/readme.md
Normal file
7
keyboards/ergodone/keymaps/kloki/readme.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# Kloki's ergodone layout
|
||||
|
||||
-workman
|
||||
-qwerty layer
|
||||
-num layer
|
||||
-overloaded modifier
|
||||
-a lot of duplicated keys to make common shortcuts work
|
28
keyboards/ergodox_ez/keymaps/bepo_tm_style/config.h
Executable file
28
keyboards/ergodox_ez/keymaps/bepo_tm_style/config.h
Executable file
@@ -0,0 +1,28 @@
|
||||
#include "../../config.h"
|
||||
|
||||
// Sets good default for the speed of the mouse.
|
||||
#undef MOUSEKEY_INTERVAL
|
||||
#undef MOUSEKEY_DELAY
|
||||
#undef MOUSEKEY_TIME_TO_MAX
|
||||
#undef MOUSEKEY_MAX_SPEED
|
||||
|
||||
#define MOUSEKEY_INTERVAL 20
|
||||
#define MOUSEKEY_DELAY 100
|
||||
#define MOUSEKEY_TIME_TO_MAX 60
|
||||
#define MOUSEKEY_MAX_SPEED 7
|
||||
|
||||
#undef MOUSEKEY_WHEEL_MAX_SPEED
|
||||
#undef MOUSEKEY_WHEEL_TIME_TO_MAX
|
||||
#undef MOUSEKEY_WHEEL_DELAY
|
||||
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 5
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 60
|
||||
#define MOUSEKEY_WHEEL_DELAY 100
|
||||
|
||||
#undef TAPPING_TOGGLE
|
||||
#undef TAPPING_TERM
|
||||
#undef IGNORE_MOD_TAP_INTERRUPT
|
||||
|
||||
#define TAPPING_TOGGLE 1
|
||||
#define TAPPING_TERM 150
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
353
keyboards/ergodox_ez/keymaps/bepo_tm_style/keymap.c
Executable file
353
keyboards/ergodox_ez/keymaps/bepo_tm_style/keymap.c
Executable file
@@ -0,0 +1,353 @@
|
||||
// An Ergodox EZ keymap meant to be used with a bépo layout (FR ergonomic
|
||||
// layout, dvorak style). The overall design is slightly inspired by the
|
||||
// TypeMatrix keyboard. Switching between a TypeMatrix and an Ergodox with this
|
||||
// layout should be relatively easy.
|
||||
//
|
||||
// See the README.md file for an image of this keymap.
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "keymap_bepo.h"
|
||||
|
||||
// The layers that we are defining for this keyboards.
|
||||
#define BASE 0
|
||||
#define FN 1
|
||||
#define MOUSE 2
|
||||
#define NUMS 3
|
||||
#define SWAP 4
|
||||
#define SYSLEDS 5
|
||||
|
||||
// The Tap Dance identifiers, used in the TD keycode and tap_dance_actions array.
|
||||
#define TAP_MACRO 0
|
||||
|
||||
// A 'transparent' key code (that falls back to the layers below it).
|
||||
#define ___ KC_TRANSPARENT
|
||||
|
||||
// A 'blocking' key code. Does nothing but prevent falling back to another layer.
|
||||
#define XXX KC_NO
|
||||
|
||||
// Some combined keys (one normal keycode when tapped and one modifier or layer
|
||||
// toggle when held).
|
||||
#define ESC_FN LT(FN, KC_ESC) // ESC key and FN layer toggle.
|
||||
#define M_RSFT MT(MOD_RSFT, BP_M) // 'M' key and right shift modifier.
|
||||
#define W_RCTL MT(MOD_RCTL, BP_W) // 'W' key and right control modifier.
|
||||
#define SPC_RALT MT(MOD_RALT, KC_SPC) // SPACE key and right alt modifier.
|
||||
#define PERC_FN LT(FN, BP_PERC) // '%' key and FN layer toggle.
|
||||
|
||||
// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators).
|
||||
#define MK_CUT LSFT(KC_DEL) // shift + delete
|
||||
#define MK_COPY LCTL(KC_INS) // ctrl + insert
|
||||
#define MK_PASTE LSFT(KC_INS) // shift + insert
|
||||
|
||||
// Custom keycodes
|
||||
enum {
|
||||
// SAFE_RANGE must be used to tag the first element of the enum.
|
||||
// DYNAMIC_MACRO_RANGE must always be the last element of the enum if other
|
||||
// values are added (as its value is used to create a couple of other keycodes
|
||||
// after it).
|
||||
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
|
||||
};
|
||||
|
||||
// This file must be included after DYNAMIC_MACRO_RANGE is defined...
|
||||
#include "dynamic_macro.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// Layer 0: basic keys.
|
||||
[BASE] = KEYMAP(
|
||||
/* left hand */
|
||||
BP_DLR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL,
|
||||
KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC,
|
||||
KC_LSFT, BP_A, BP_U, BP_I, BP_E, BP_COMM,
|
||||
KC_LCTRL, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT,
|
||||
ESC_FN, BP_ECRC, KC_LGUI, KC_LALT, SPC_RALT,
|
||||
TT(SWAP), KC_MNXT,
|
||||
KC_MPLY,
|
||||
TT(FN), TT(NUMS), KC_MPRV,
|
||||
/* right hand */
|
||||
KC_DEL, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, BP_EQL,
|
||||
KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z,
|
||||
BP_C, BP_T, BP_S, BP_R, BP_N, M_RSFT,
|
||||
KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, W_RCTL,
|
||||
SPC_RALT, KC_LALT, TT(SYSLEDS), BP_CCED, PERC_FN,
|
||||
KC_LEFT, KC_RIGHT,
|
||||
KC_UP,
|
||||
KC_DOWN, TD(TAP_MACRO), TT(MOUSE)),
|
||||
|
||||
// Layer 1: function and media keys.
|
||||
[FN] = KEYMAP(
|
||||
/* left hand */
|
||||
KC_SLEP, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, KC_LSFT,
|
||||
___, ___, MK_CUT, MK_COPY, MK_PASTE, KC_LCTRL, ___,
|
||||
___, ___, ___, ___, ___,
|
||||
___, KC_VOLU,
|
||||
KC_VOLD,
|
||||
___, ___, KC_MUTE,
|
||||
/* right hand */
|
||||
___, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
___, ___, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_F12,
|
||||
___, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___,
|
||||
KC_HOME, KC_END,
|
||||
KC_PGUP,
|
||||
KC_PGDN, ___, ___),
|
||||
// Note that any change to the FN layer above must be added to
|
||||
// the MOUSE layer below (except for the arrow keys).
|
||||
|
||||
// Layer 2: Mouse control.
|
||||
[MOUSE] = KEYMAP(
|
||||
/* left hand */
|
||||
KC_SLEP, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, ___,
|
||||
___, ___, KC_BTN4, KC_MS_U, KC_BTN5, ___, ___,
|
||||
___, ___, KC_MS_L, KC_MS_D, KC_MS_R, KC_LSFT,
|
||||
___, ___, MK_CUT, MK_COPY, MK_PASTE, KC_LCTRL, ___,
|
||||
___, ___, ___, ___, ___,
|
||||
___, KC_VOLU,
|
||||
KC_VOLD,
|
||||
___, ___, KC_MUTE,
|
||||
/* right hand */
|
||||
___, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
___, ___, XXX, KC_WH_U, XXX, XXX, KC_F12,
|
||||
___, KC_WH_L, KC_WH_D, KC_WH_R, XXX, ___,
|
||||
___, ___, KC_ACL0, KC_ACL1, KC_ACL2, ___, ___,
|
||||
KC_BTN1, KC_BTN2, KC_BTN3, ___, ___,
|
||||
___, ___,
|
||||
___,
|
||||
___, ___, ___),
|
||||
|
||||
// Layer 3: Numeric keypad and system keys.
|
||||
[NUMS] = KEYMAP(
|
||||
/* left hand */
|
||||
KC_PSCR, KC_INS, KC_PAUS, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___,
|
||||
___, ___, MK_CUT, MK_COPY, MK_PASTE, ___, ___,
|
||||
___, ___, ___, ___, ___,
|
||||
___, ___,
|
||||
___,
|
||||
___, ___, ___,
|
||||
/* right hand */
|
||||
___, ___, ___, ___, ___, ___, KC_NLCK,
|
||||
___, KC_PEQL, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_SLCK,
|
||||
KC_PCMM, KC_P4, KC_P5, KC_P6, KC_PPLS, ___,
|
||||
KC_PENT, KC_P0, KC_P1, KC_P2, KC_P3, KC_PAST, ___,
|
||||
___, ___, ___, KC_PSLS, ___,
|
||||
___, ___,
|
||||
___,
|
||||
___, ___, ___),
|
||||
|
||||
// Layer 4: hand swap, all keys are mirrored to the other side of the keyboard
|
||||
// except for the layer toggle itself (so there is no right arrow when this
|
||||
// layer is activated).
|
||||
[SWAP] = KEYMAP(
|
||||
/* left hand */
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___,
|
||||
TT(SWAP), ___,
|
||||
___,
|
||||
___, ___, ___,
|
||||
/* right hand */
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___,
|
||||
___, TT(SWAP),
|
||||
___,
|
||||
___, ___, ___),
|
||||
|
||||
// Layer 5: The LEDs are showing the "standard" caps/num/scroll lock indicator
|
||||
// instead of their default which shows the currently active layers (FN, NUMS,
|
||||
// and MOUSE in that order).
|
||||
[SYSLEDS] = KEYMAP(
|
||||
/* left hand */
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___,
|
||||
___, ___,
|
||||
___,
|
||||
___, ___, ___,
|
||||
/* right hand */
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___,
|
||||
___, ___, ___, ___, ___, ___, ___,
|
||||
___, ___, TT(SYSLEDS), ___, ___,
|
||||
___, ___,
|
||||
___,
|
||||
___, ___, ___),
|
||||
};
|
||||
|
||||
// Whether the macro 1 is currently being recorded.
|
||||
static bool is_macro1_recording = false;
|
||||
|
||||
// The current set of active layers (as a bitmask).
|
||||
// There is a global 'layer_state' variable but it is set after the call
|
||||
// to layer_state_set_user().
|
||||
static uint32_t current_layer_state = 0;
|
||||
uint32_t layer_state_set_user(uint32_t state);
|
||||
|
||||
// Method called at the end of the tap dance on the TAP_MACRO key. That key is
|
||||
// used to start recording a macro (double tap or more), to stop recording (any
|
||||
// number of tap), or to play the recorded macro (1 tap).
|
||||
void macro_tapdance_fn(qk_tap_dance_state_t *state, void *user_data) {
|
||||
uint16_t keycode;
|
||||
keyrecord_t record;
|
||||
dprintf("macro_tap_dance_fn %d\n", state->count);
|
||||
if (is_macro1_recording) {
|
||||
keycode = DYN_REC_STOP;
|
||||
is_macro1_recording = false;
|
||||
layer_state_set_user(current_layer_state);
|
||||
} else if (state->count == 1) {
|
||||
keycode = DYN_MACRO_PLAY1;
|
||||
} else {
|
||||
keycode = DYN_REC_START1;
|
||||
is_macro1_recording = true;
|
||||
layer_state_set_user(current_layer_state);
|
||||
}
|
||||
|
||||
record.event.pressed = true;
|
||||
process_record_dynamic_macro(keycode, &record);
|
||||
record.event.pressed = false;
|
||||
process_record_dynamic_macro(keycode, &record);
|
||||
}
|
||||
|
||||
// The definition of the tap dance actions:
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
// This Tap dance plays the macro 1 on TAP and records it on double tap.
|
||||
[TAP_MACRO] = ACTION_TAP_DANCE_FN(macro_tapdance_fn),
|
||||
};
|
||||
|
||||
// Runs for each key down or up event.
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (keycode != TD(TAP_MACRO)) {
|
||||
// That key is processed by the macro_tapdance_fn. Not ignoring it here is
|
||||
// mostly a no-op except that it is recorded in the macros (and uses space).
|
||||
// We can't just return false when the key is a tap dance, because
|
||||
// process_record_user, is called before the tap dance processing (and
|
||||
// returning false would eat the tap dance).
|
||||
if (!process_record_dynamic_macro(keycode, record)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true; // Let QMK send the enter press/release events
|
||||
}
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
};
|
||||
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
};
|
||||
|
||||
// The state of the LEDs requested by the system, as a bitmask.
|
||||
static uint8_t sys_led_state = 0;
|
||||
|
||||
// Use these masks to read the system LEDs state.
|
||||
static const uint8_t sys_led_mask_num_lock = 1 << USB_LED_NUM_LOCK;
|
||||
static const uint8_t sys_led_mask_caps_lock = 1 << USB_LED_CAPS_LOCK;
|
||||
static const uint8_t sys_led_mask_scroll_lock = 1 << USB_LED_SCROLL_LOCK;
|
||||
|
||||
// Value to use to switch LEDs on. The default value of 255 is far too bright.
|
||||
static const uint8_t max_led_value = 20;
|
||||
|
||||
// Whether the given layer (one of the constant defined at the top) is active.
|
||||
#define LAYER_ON(layer) (current_layer_state & (1<<layer))
|
||||
|
||||
void led_1_on(void) {
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_1_set(max_led_value);
|
||||
}
|
||||
|
||||
void led_2_on(void) {
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_2_set(max_led_value);
|
||||
}
|
||||
|
||||
void led_3_on(void) {
|
||||
ergodox_right_led_3_on();
|
||||
ergodox_right_led_3_set(max_led_value);
|
||||
}
|
||||
|
||||
void led_1_off(void) {
|
||||
ergodox_right_led_1_off();
|
||||
}
|
||||
|
||||
void led_2_off(void) {
|
||||
ergodox_right_led_2_off();
|
||||
}
|
||||
|
||||
void led_3_off(void) {
|
||||
ergodox_right_led_3_off();
|
||||
}
|
||||
|
||||
// Called when the computer wants to change the state of the keyboard LEDs.
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
sys_led_state = usb_led;
|
||||
if (LAYER_ON(SYSLEDS)) {
|
||||
if (sys_led_state & sys_led_mask_caps_lock) {
|
||||
led_1_on();
|
||||
} else {
|
||||
led_1_off();
|
||||
}
|
||||
if (sys_led_state & sys_led_mask_num_lock) {
|
||||
led_2_on();
|
||||
} else {
|
||||
led_2_off();
|
||||
}
|
||||
if (sys_led_state & sys_led_mask_scroll_lock) {
|
||||
led_3_on();
|
||||
} else {
|
||||
led_3_off();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
current_layer_state = state;
|
||||
swap_hands = LAYER_ON(SWAP);
|
||||
|
||||
if (is_macro1_recording) {
|
||||
led_1_on();
|
||||
led_2_on();
|
||||
led_3_on();
|
||||
return state;
|
||||
}
|
||||
|
||||
if (LAYER_ON(SYSLEDS)) {
|
||||
led_set_user(sys_led_state);
|
||||
return state;
|
||||
}
|
||||
|
||||
if (LAYER_ON(FN)) {
|
||||
led_1_on();
|
||||
} else {
|
||||
led_1_off();
|
||||
}
|
||||
|
||||
if (LAYER_ON(NUMS)) {
|
||||
led_2_on();
|
||||
} else {
|
||||
led_2_off();
|
||||
}
|
||||
|
||||
if (LAYER_ON(MOUSE)) {
|
||||
led_3_on();
|
||||
} else {
|
||||
led_3_off();
|
||||
}
|
||||
|
||||
return state;
|
||||
};
|
22
keyboards/ergodox_ez/keymaps/bepo_tm_style/readme.md
Executable file
22
keyboards/ergodox_ez/keymaps/bepo_tm_style/readme.md
Executable file
@@ -0,0 +1,22 @@
|
||||
# Bépo compatible keymap for the Ergodox EZ, *TypeMatrix* style.
|
||||
|
||||
This keymap is meant to be used with a [Bépo](http://bepo.fr) layout. It is
|
||||
designed to be somewhat similar to a TypeMatrix keyboard so that switching
|
||||
between one and the other is easy.
|
||||
|
||||

|
||||
|
||||
## Build instruction
|
||||
|
||||
To build this on Windows, under Cygwin, provided that you have installed the
|
||||
Arduino environment and Teensy loaded in the default path, you can do:
|
||||
|
||||
```shell
|
||||
PATH=/cygdrive/c/Program\ Files\ \(x86\)/Arduino/hardware/tools/avr/bin:$PATH
|
||||
make ergodox_ez:bepo_tm_style:all
|
||||
```
|
||||
|
||||
## Debug
|
||||
|
||||
See https://github.com/tmk/tmk_keyboard#magic-commands for command that can help
|
||||
debug, together with the hid_listen tool (https://docs.qmk.fm/faq_debug.html).
|
15
keyboards/ergodox_ez/keymaps/bepo_tm_style/rules.mk
Executable file
15
keyboards/ergodox_ez/keymaps/bepo_tm_style/rules.mk
Executable file
@@ -0,0 +1,15 @@
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - for issues, see github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
ONEHAND_ENABLE = yes # Allow swapping hands of keyboard
|
||||
KEY_LOCK_ENABLE = yes # Enable the KC_LOCK key
|
||||
TAP_DANCE_ENABLE = yes # Enable the tap dance feature.
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||
UNICODE_ENABLE = no
|
||||
SLEEP_LED_ENABLE = no
|
||||
API_SYSEX_ENABLE = no
|
||||
RGBLIGHT_ENABLE = no
|
||||
RGBLIGHT_ANIMATION = no
|
25
keyboards/ergodox_ez/keymaps/drashna/README.md
Normal file
25
keyboards/ergodox_ez/keymaps/drashna/README.md
Normal file
@@ -0,0 +1,25 @@
|
||||
Overview
|
||||
========
|
||||
|
||||
This is my personal Ergodox EZ configuration, and my daily driver.
|
||||
|
||||
Most of the code resides in my userspace, rather than here, as I have multiple keyboards.
|
||||
|
||||
How to build
|
||||
------------
|
||||
make ergodox_ez:drashna:teensy
|
||||
|
||||
Layers
|
||||
------
|
||||
* QWERTY/DVORAK/COLEMAK/WORKMAN: basic layout, default set like the OLKB boards. Default is set and persists on power cycle.
|
||||
* SYMB: F keys across the top, symbols on the left and numpad on the right.
|
||||
* GAMEPAD: This is the QWERTY layout shifted to the right for FPS type games. Destiny and Overwatch are the primary games for this.
|
||||
* DIABLO: This contains a Diablo 3 layout, that requires much less reaching or shifting. If Tap Dance is enabled, then it has a "spam" feature. See Userspace for details.
|
||||
* MOUSE: mouse navigation
|
||||
|
||||
All layers have RGB specific indicators, so you can see what layer you're on by the underglow.
|
||||
|
||||
Ergodox Specific Code
|
||||
---------------------
|
||||
|
||||
Aside from my userspace code, this includes LED indications for Shift (Green LED), Ctrl (Red LED), and Alt (Blue LED).
|
@@ -1,9 +1,8 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
#include "../../config.h"
|
||||
|
||||
#include QMK_KEYBOARD_CONFIG_H
|
||||
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
#undef RGBLIGHT_SAT_STEP
|
||||
@@ -13,6 +12,12 @@
|
||||
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
|
||||
#endif // RGBLIGHT_ENABLE
|
||||
|
||||
#define FORCE_NKRO
|
||||
#ifdef TAPPING_TERM
|
||||
#undef TAPPING_TERM
|
||||
#endif
|
||||
#define TAPPING_TERM 150
|
||||
#undef PERMISSIVE_HOLD
|
||||
#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
|
||||
#define ONESHOT_TAP_TOGGLE 2
|
||||
|
||||
#endif
|
||||
|
@@ -15,15 +15,8 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "debug.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
#include "drashna.h"
|
||||
|
||||
#include "keymap_german.h"
|
||||
|
||||
#include "keymap_nordic.h"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -31,18 +24,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
bool skip_leds = false;
|
||||
|
||||
|
||||
#ifdef TAP_DANCE_ENABLE
|
||||
#define KC_D3_1 TD(TD_D3_1)
|
||||
#define KC_D3_2 TD(TD_D3_2)
|
||||
#define KC_D3_3 TD(TD_D3_3)
|
||||
#define KC_D3_4 TD(TD_D3_4)
|
||||
#else
|
||||
#define KC_D3_1 KC_1
|
||||
#define KC_D3_2 KC_2
|
||||
#define KC_D3_3 KC_3
|
||||
#define KC_D3_4 KC_4
|
||||
#endif
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Keymap 0: Basic layer
|
||||
@@ -71,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(_DIABLO),
|
||||
KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LSHIFT, LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(_OVERWATCH),
|
||||
OSM(MOD_LSFT), LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(_GAMEPAD),
|
||||
LT(_SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
|
||||
|
||||
ALT_T(KC_APPLICATION), KC_LGUI,
|
||||
@@ -81,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
|
||||
TG(_DIABLO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
|
||||
KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
|
||||
TG(_OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT,
|
||||
TG(_GAMEPAD), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),OSM(MOD_RSFT),
|
||||
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
|
||||
KC_RGUI, CTL_T(KC_ESCAPE),
|
||||
KC_PGUP,
|
||||
@@ -115,7 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(_DIABLO),
|
||||
KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
|
||||
KC_LSFT, LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(_OVERWATCH),
|
||||
OSM(MOD_LSFT), LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(_GAMEPAD),
|
||||
LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
|
||||
ALT_T(KC_APP), KC_LGUI,
|
||||
KC_HOME,
|
||||
@@ -124,7 +105,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
TG(_DIABLO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
||||
KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE),
|
||||
TG(_OVERWATCH),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
|
||||
TG(_GAMEPAD),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), OSM(MOD_RSFT),
|
||||
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
|
||||
KC_RGUI, CTL_T(KC_ESC),
|
||||
KC_PGUP,
|
||||
@@ -158,7 +139,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
|
||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(_DIABLO),
|
||||
KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
|
||||
KC_LSFT, LCTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(_OVERWATCH),
|
||||
OSM(MOD_LSFT), LCTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(_GAMEPAD),
|
||||
LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET, KC_RBRACKET,
|
||||
ALT_T(KC_APP), KC_LEAD,
|
||||
KC_HOME,
|
||||
@@ -167,7 +148,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
||||
TG(_DIABLO), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
||||
KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
||||
TG(_OVERWATCH),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), KC_RSHIFT,
|
||||
TG(_GAMEPAD),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), OSM(MOD_RSFT),
|
||||
KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, TT(_SYMB),
|
||||
KC_LALT, CTL_T(KC_ESC),
|
||||
KC_PGUP,
|
||||
@@ -178,11 +159,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
|
||||
* | Del | Q | D | R | W | B | L1 | | L1 | J | F | U | P | ; | \ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
|
||||
* | BkSp | A | S | H | T | D |------| |------| Y | N | E | O | I | ' |
|
||||
* |--------+------+------+------+------+------| OVER | | Meh |------+------+------+------+------+--------|
|
||||
* | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
|
||||
* | LShift |Z/Ctrl| X | M | C | V | | | | K | L | , | . |//Ctrl| RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
@@ -201,7 +182,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
|
||||
KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(_DIABLO),
|
||||
KC_BSPC, KC_A, KC_S, KC_H, KC_T, KC_G,
|
||||
KC_LSFT, LCTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V, TG(_OVERWATCH),
|
||||
OSM(MOD_LSFT), LCTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V, TG(_GAMEPAD),
|
||||
LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
|
||||
ALT_T(KC_APP), KC_LEAD,
|
||||
KC_HOME,
|
||||
@@ -210,7 +191,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
TG(_DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
|
||||
KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
|
||||
TG(_OVERWATCH),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
|
||||
TG(_GAMEPAD),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), OSM(MOD_RSFT),
|
||||
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
|
||||
KC_LALT, CTL_T(KC_ESC),
|
||||
KC_PGUP,
|
||||
@@ -239,7 +220,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[_SYMB] = LAYOUT_ergodox(
|
||||
KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_WORKMAN,
|
||||
EPRM, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_WORKMAN,
|
||||
VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK,
|
||||
KC_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
|
||||
KC_RESET, KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK,
|
||||
@@ -279,8 +260,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | H | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[_OVERWATCH] = LAYOUT_ergodox(
|
||||
KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
[_GAMEPAD] = LAYOUT_ergodox(
|
||||
KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, HYPR(KC_D), HYPR(KC_Q), HYPR(KC_GRV),
|
||||
KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
|
||||
KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
|
||||
KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS,
|
||||
@@ -291,10 +272,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
TG(_OVERWATCH), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO,
|
||||
KC_I, KC_O, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
TG(_GAMEPAD), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO,
|
||||
KC_HYPR, MAGIC_TOGGLE_NKRO,
|
||||
KC_NO,
|
||||
KC_PGDOWN, KC_DELETE, KC_ENTER
|
||||
),
|
||||
@@ -364,7 +345,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[_MOUS] = LAYOUT_ergodox(
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
|
||||
KC_NO, KC_SECRET_1,KC_SECRET_2,KC_SECRET_3,KC_SECRET_4,KC_SECRET_5,KC_TRNS,
|
||||
KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS,
|
||||
KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
|
||||
KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_TRNS,
|
||||
|
@@ -4,8 +4,3 @@ COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
RGBLIGHT_ENABLE = yes
|
||||
CONSOLE_ENABLE = no
|
||||
|
||||
EXTRAFLAGS = -flto
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../../../Makefile
|
||||
endif
|
||||
|
10
keyboards/ergodox_ez/keymaps/vim/config.h
Normal file
10
keyboards/ergodox_ez/keymaps/vim/config.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
#endif
|
||||
|
||||
#define NORMAL_MODE 0
|
||||
#define INSERT_MODE 1
|
||||
#define SYMB 2
|
||||
#define MOUSE 3
|
||||
|
||||
#include "../../config.h"
|
384
keyboards/ergodox_ez/keymaps/vim/keymap.c
Normal file
384
keyboards/ergodox_ez/keymaps/vim/keymap.c
Normal file
@@ -0,0 +1,384 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "quantum_keycodes.h"
|
||||
#include "action_layer.h"
|
||||
#include "version.h"
|
||||
#include "vim.h"
|
||||
|
||||
#define VERSION_STRING QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION
|
||||
#define _______ KC_TRNS
|
||||
#define X_____X KC_TRNS
|
||||
#define KC_ATM LGUI(LSFT(KC_P))
|
||||
#define KC_ATP LGUI(LCTL(KC_P))
|
||||
#define TO_NORM TO(NORMAL_MODE)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Normal mode
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | TAB | | WORD | END | | | | | | YANK | UNDO | | OPEN | PUT | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | ⎋ | | | DEL | | |------| |------| ← | ↓ | ↑ | → | | ⎋ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | SHIFT | | | |VISUAL| BACK | | | | | | | | | SHIFT |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | | | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* |SPACE |DELETE|------| |------|ENTER |BACKSP|
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[NORMAL_MODE] = KEYMAP(
|
||||
// Layer 2 Left Hand
|
||||
X_____X,X_____X,X_____X,X_____X,X_____X,X_____X,X_____X,
|
||||
KC_TAB ,X_____X,VIM_W, VIM_E ,X_____X,X_____X,X_____X,
|
||||
X_____X,VIM_A ,VIM_S ,VIM_D ,X_____X,X_____X,
|
||||
KC_LSFT,X_____X,VIM_X ,VIM_C ,VIM_V ,VIM_B ,X_____X,
|
||||
KC_LCTL,KC_LALT,X_____X,X_____X,X_____X,
|
||||
|
||||
KC_HOME,KC_END ,
|
||||
TO(SYMB),
|
||||
GUI_T(KC_SPC), KC_ESC ,_______,
|
||||
|
||||
|
||||
// Layer 2 Right Hand
|
||||
X_____X,X_____X,X_____X,X_____X,X_____X,X_____X,X_____X,
|
||||
X_____X,VIM_Y ,VIM_U ,VIM_I ,VIM_O ,VIM_P ,X_____X,
|
||||
VIM_H ,VIM_J ,VIM_K ,VIM_L ,X_____X,X_____X,
|
||||
X_____X,X_____X,X_____X,X_____X,X_____X,X_____X,KC_LSFT,
|
||||
X_____X,X_____X,X_____X,KC_RALT,KC_RCTL,
|
||||
|
||||
KC_PGUP, KC_PGDN,
|
||||
TO(SYMB),
|
||||
KC_DEL , KC_ENT, GUI_T(KC_BSPC)
|
||||
),
|
||||
|
||||
/* Insert mode
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | NORMAL | 1 | 2 | 3 | 4 | 5 | ⇧⌘P | | PROJ | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | ⇥ | Q | W | E | R | T | ` | | - | Y | U | I | O | P | \ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | ⎋ | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||
* |--------+------+------+------+------+------| = | | + |------+------+------+------+------+--------|
|
||||
* | L⇧ | Z | X | C | V | B | | | | N | M | , | . | / | R⇧ |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | ⌃ | ⌥ | ( | [ | { | | } | ] | ) | ⌥ | ⌃ |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | HOME | END | | PGDN | PGUP |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* |SPACE | | | | | | BSPC |
|
||||
* | |NORMAL|------| |------| ENTER| |
|
||||
* | ⌘ | | | | | | ⌘ |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[INSERT_MODE] = KEYMAP(
|
||||
// Left Hand
|
||||
NOR_MOD,KC_1, KC_2, KC_3, KC_4, KC_5, KC_ATM,
|
||||
KC_TAB ,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_GRV,
|
||||
KC_ESC ,KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL,
|
||||
KC_LCTL,KC_LALT,KC_LPRN,KC_LBRC, KC_LCBR,
|
||||
|
||||
KC_HOME,KC_END ,
|
||||
TO(SYMB),
|
||||
GUI_T(KC_SPC),KC_ESC ,TO_NORM,
|
||||
|
||||
|
||||
// Right Hand
|
||||
KC_ATP , KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
KC_MINS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
|
||||
KC_PLUS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,KC_RSFT,
|
||||
KC_RCBR,KC_RBRC, KC_RPRN,KC_RALT,KC_RCTL,
|
||||
|
||||
KC_PGUP, KC_PGDN,
|
||||
TO(SYMB),
|
||||
MO(MOUSE) , KC_ENT, GUI_T(KC_BSPC)
|
||||
),
|
||||
|
||||
[SYMB] = KEYMAP(
|
||||
// Left Hand
|
||||
NOR_MOD,KC_1, KC_2, KC_3, KC_4, KC_5, KC_ATM,
|
||||
KC_TAB ,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_GRV,
|
||||
_______,KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL,
|
||||
KC_LCTL,KC_LALT,KC_LPRN,KC_LBRC, KC_LCBR,
|
||||
|
||||
_______,_______,
|
||||
_______,
|
||||
_______,_______,TO_NORM,
|
||||
|
||||
// Right Hand
|
||||
KC_ATP , KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
KC_MINS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
|
||||
KC_PLUS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,KC_RSFT,
|
||||
KC_RCBR,KC_RBRC, KC_RPRN,KC_RALT,KC_RCTL,
|
||||
|
||||
_______,_______,
|
||||
_______,
|
||||
_______,_______,_______
|
||||
),
|
||||
|
||||
[MOUSE] = KEYMAP(
|
||||
// Left Hand
|
||||
_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,
|
||||
|
||||
_______,_______,
|
||||
_______,
|
||||
_______,_______,_______,
|
||||
|
||||
// Right Hand
|
||||
_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,KC_BTN1,KC_BTN3,KC_BTN2,_______,_______,
|
||||
KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______,
|
||||
_______,_______,_______,_______,_______,_______,_______,
|
||||
_______,_______,_______,_______,_______,
|
||||
|
||||
_______,_______,
|
||||
_______,
|
||||
_______,_______,_______
|
||||
),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
[1] = ACTION_LAYER_TAP_TOGGLE(1)
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
switch(id) {
|
||||
case 0:
|
||||
if (record->event.pressed) { SEND_STRING (VERSION_STRING); }
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
bool SHIFTED = (keyboard_report->mods & MOD_BIT(KC_LSFT)) |
|
||||
(keyboard_report->mods & MOD_BIT(KC_RSFT));
|
||||
|
||||
switch (keycode) {
|
||||
|
||||
case VIM_A:
|
||||
if (record->event.pressed) { SHIFTED ? VIM_APPEND_LINE() : VIM_APPEND(); }
|
||||
return false;
|
||||
|
||||
case VIM_B:
|
||||
if (record->event.pressed) {
|
||||
switch(VIM_QUEUE) {
|
||||
case KC_NO: VIM_BACK(); break;
|
||||
case VIM_C: VIM_CHANGE_BACK(); break;
|
||||
case VIM_D: VIM_DELETE_BACK(); break;
|
||||
case VIM_V: VIM_VISUAL_BACK(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_C:
|
||||
if (record->event.pressed) {
|
||||
switch(VIM_QUEUE) {
|
||||
case KC_NO: SHIFTED ? VIM_CHANGE_LINE() : VIM_LEADER(VIM_C); break;
|
||||
case VIM_C: VIM_CHANGE_WHOLE_LINE(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_D:
|
||||
if (record->event.pressed) {
|
||||
switch(VIM_QUEUE) {
|
||||
case KC_NO: SHIFTED ? VIM_DELETE_LINE() : VIM_LEADER(VIM_D); break;
|
||||
case VIM_D: VIM_DELETE_WHOLE_LINE(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_E:
|
||||
if (record->event.pressed) {
|
||||
switch (VIM_QUEUE) {
|
||||
case KC_NO: VIM_END(); break;
|
||||
case VIM_C: VIM_CHANGE_END(); break;
|
||||
case VIM_D: VIM_DELETE_END(); break;
|
||||
case VIM_V: VIM_VISUAL_END(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_H:
|
||||
if (record->event.pressed) {
|
||||
switch (VIM_QUEUE) {
|
||||
case KC_NO: VIM_LEFT(); break;
|
||||
case VIM_C: VIM_CHANGE_LEFT(); break;
|
||||
case VIM_D: VIM_DELETE_LEFT(); break;
|
||||
case VIM_V: VIM_VISUAL_LEFT(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_I:
|
||||
if (record->event.pressed) {
|
||||
switch (VIM_QUEUE) {
|
||||
case KC_NO: layer_on(INSERT_MODE); break;
|
||||
case VIM_C: VIM_LEADER(VIM_CI); break;
|
||||
case VIM_D: VIM_LEADER(VIM_DI); break;
|
||||
case VIM_V: VIM_LEADER(VIM_VI); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_J:
|
||||
if (record->event.pressed) {
|
||||
switch (VIM_QUEUE) {
|
||||
case KC_NO: SHIFTED ? VIM_JOIN() : VIM_DOWN(); break;
|
||||
case VIM_C: VIM_CHANGE_DOWN(); break;
|
||||
case VIM_D: VIM_DELETE_DOWN(); break;
|
||||
case VIM_V: VIM_VISUAL_DOWN(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_K:
|
||||
if (record->event.pressed) {
|
||||
switch (VIM_QUEUE) {
|
||||
case KC_NO: VIM_UP(); break;
|
||||
case VIM_C: VIM_CHANGE_UP(); break;
|
||||
case VIM_D: VIM_DELETE_UP(); break;
|
||||
case VIM_V: VIM_VISUAL_UP(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_L:
|
||||
if (record->event.pressed) {
|
||||
switch (VIM_QUEUE) {
|
||||
case KC_NO: VIM_RIGHT(); break;
|
||||
case VIM_C: VIM_CHANGE_RIGHT(); break;
|
||||
case VIM_D: VIM_DELETE_RIGHT(); break;
|
||||
case VIM_V: VIM_VISUAL_RIGHT(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_O:
|
||||
if (record->event.pressed) { SHIFTED ? VIM_OPEN_ABOVE() : VIM_OPEN(); }
|
||||
return false;
|
||||
|
||||
case VIM_P:
|
||||
if (record->event.pressed) { SHIFTED ? VIM_PUT_BEFORE() : VIM_PUT(); }
|
||||
return false;
|
||||
|
||||
case VIM_S:
|
||||
if (record->event.pressed) { SHIFTED ? VIM_CHANGE_WHOLE_LINE() : VIM_SUBSTITUTE(); }
|
||||
return false;
|
||||
|
||||
case VIM_U:
|
||||
if (record->event.pressed) { VIM_UNDO(); }
|
||||
return false;
|
||||
|
||||
case VIM_V:
|
||||
if (record->event.pressed) { VIM_LEADER(VIM_V); }
|
||||
return false;
|
||||
|
||||
case VIM_W:
|
||||
if (record->event.pressed) {
|
||||
switch (VIM_QUEUE) {
|
||||
case KC_NO: VIM_WORD(); break;
|
||||
case VIM_C: VIM_CHANGE_WORD(); break;
|
||||
case VIM_CI: VIM_CHANGE_INNER_WORD(); break;
|
||||
case VIM_D: VIM_DELETE_WORD(); break;
|
||||
case VIM_DI: VIM_DELETE_INNER_WORD(); break;
|
||||
case VIM_V: VIM_VISUAL_WORD(); break;
|
||||
case VIM_VI: VIM_VISUAL_INNER_WORD(); break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
case VIM_X:
|
||||
if (record->event.pressed) { VIM_CUT(); }
|
||||
return false;
|
||||
|
||||
case VIM_Y:
|
||||
if (record->event.pressed) { SHIFTED ? VIM_YANK_LINE() : VIM_YANK(); }
|
||||
return false;
|
||||
|
||||
// dynamically generate these.
|
||||
case EPRM:
|
||||
if (record->event.pressed) { eeconfig_init(); }
|
||||
return false;
|
||||
case VRSN:
|
||||
if (record->event.pressed) { SEND_STRING(VERSION_STRING); }
|
||||
return false;
|
||||
case RGB_SLD:
|
||||
if (record->event.pressed) { rgblight_mode(1); }
|
||||
return false;
|
||||
}
|
||||
|
||||
// End by clearing the queue unless keycode is a
|
||||
// if ((record->event.pressed) &&
|
||||
// (keycode != VIM_I ||
|
||||
// keycode != VIM_C ||
|
||||
// keycode != VIM_D ||
|
||||
// keycode != VIM_V)) {
|
||||
// VIM_LEADER(KC_NO);
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
void matrix_init_user(void) {
|
||||
debug_enable = true;
|
||||
VIM_LEADER(KC_NO);
|
||||
};
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
case 1:
|
||||
ergodox_right_led_1_on();
|
||||
break;
|
||||
case 2:
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
case 3:
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 4:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
break;
|
||||
case 5:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 6:
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
case 7:
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
};
|
5
keyboards/ergodox_ez/keymaps/vim/readme.md
Normal file
5
keyboards/ergodox_ez/keymaps/vim/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Vim-like keymap for macOS
|
||||
|
||||
This keymap adds vim emulation to the keyboard firmware. Layer 0 is 'normal mode', providing a number of commands like `w`, `e`, `a`, `dw`, etc.
|
||||
|
||||
The keymap works by using macOS text-editing shortcuts, so currently it only chooches on macOS.
|
756
keyboards/ergodox_ez/keymaps/vim/vim.h
Normal file
756
keyboards/ergodox_ez/keymaps/vim/vim.h
Normal file
@@ -0,0 +1,756 @@
|
||||
#include "config.h"
|
||||
#include "print.h"
|
||||
#include "keycode.h"
|
||||
#include "quantum.h"
|
||||
#include "quantum_keycodes.h"
|
||||
|
||||
#define NOR_MOD TO(NORMAL_MODE)
|
||||
#define INS_MOD TO(INSERT_MODE)
|
||||
|
||||
#define PRESS(keycode) register_code16(keycode)
|
||||
#define RELEASE(keycode) unregister_code16(keycode)
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
|
||||
uint16_t VIM_QUEUE = KC_NO;
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
VIM_A,
|
||||
VIM_B,
|
||||
VIM_C,
|
||||
VIM_CI,
|
||||
VIM_D,
|
||||
VIM_DI,
|
||||
VIM_E,
|
||||
VIM_H,
|
||||
VIM_I,
|
||||
VIM_J,
|
||||
VIM_K,
|
||||
VIM_L,
|
||||
VIM_O,
|
||||
VIM_P,
|
||||
VIM_S,
|
||||
VIM_U,
|
||||
VIM_V,
|
||||
VIM_VI,
|
||||
VIM_W,
|
||||
VIM_X,
|
||||
VIM_Y,
|
||||
EPRM,
|
||||
VRSN,
|
||||
RGB_SLD,
|
||||
};
|
||||
|
||||
void VIM_APPEND(void);
|
||||
void VIM_APPEND_LINE(void);
|
||||
void VIM_BACK(void);
|
||||
void VIM_CHANGE_BACK(void);
|
||||
void VIM_CHANGE_DOWN(void);
|
||||
void VIM_CHANGE_END(void);
|
||||
void VIM_CHANGE_INNER_WORD(void);
|
||||
void VIM_CHANGE_LEFT(void);
|
||||
void VIM_CHANGE_LINE(void);
|
||||
void VIM_CHANGE_RIGHT(void);
|
||||
void VIM_CHANGE_UP(void);
|
||||
void VIM_CHANGE_WHOLE_LINE(void);
|
||||
void VIM_CHANGE_WORD(void);
|
||||
void VIM_CUT(void);
|
||||
void VIM_DELETE_BACK(void);
|
||||
void VIM_DELETE_DOWN(void);
|
||||
void VIM_DELETE_END(void);
|
||||
void VIM_DELETE_INNER_WORD(void);
|
||||
void VIM_DELETE_LEFT(void);
|
||||
void VIM_DELETE_LINE(void);
|
||||
void VIM_DELETE_RIGHT(void);
|
||||
void VIM_DELETE_UP(void);
|
||||
void VIM_DELETE_WHOLE_LINE(void);
|
||||
void VIM_DELETE_WORD(void);
|
||||
void VIM_END(void);
|
||||
void VIM_JOIN(void);
|
||||
void VIM_OPEN(void);
|
||||
void VIM_OPEN_ABOVE(void);
|
||||
void VIM_PUT(void);
|
||||
void VIM_SUBSTITUTE(void);
|
||||
void VIM_UNDO(void);
|
||||
void VIM_VISUAL_BACK(void);
|
||||
void VIM_VISUAL_DOWN(void);
|
||||
void VIM_VISUAL_END(void);
|
||||
void VIM_VISUAL_INNER_WORD(void);
|
||||
void VIM_VISUAL_LEFT(void);
|
||||
void VIM_VISUAL_RIGHT(void);
|
||||
void VIM_VISUAL_UP(void);
|
||||
void VIM_VISUAL_WORD(void);
|
||||
void VIM_WORD(void);
|
||||
void VIM_YANK(void);
|
||||
|
||||
void TAP(uint16_t keycode) {
|
||||
PRESS(keycode);
|
||||
RELEASE(keycode);
|
||||
}
|
||||
|
||||
void CMD(uint16_t keycode) {
|
||||
PRESS(KC_LGUI);
|
||||
TAP(keycode);
|
||||
RELEASE(KC_LGUI);
|
||||
}
|
||||
|
||||
void CTRL(uint16_t keycode) {
|
||||
PRESS(KC_LCTRL);
|
||||
TAP(keycode);
|
||||
RELEASE(KC_LCTRL);
|
||||
}
|
||||
|
||||
void SHIFT(uint16_t keycode) {
|
||||
PRESS(KC_LSHIFT);
|
||||
TAP(keycode);
|
||||
RELEASE(KC_LSHIFT);
|
||||
}
|
||||
|
||||
void ALT(uint16_t keycode) {
|
||||
PRESS(KC_LALT);
|
||||
TAP(keycode);
|
||||
RELEASE(KC_LALT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the `VIM_QUEUE` variable to the incoming keycode.
|
||||
* Pass `KC_NO` to cancel the operation.
|
||||
* @param keycode
|
||||
*/
|
||||
void VIM_LEADER(uint16_t keycode) {
|
||||
VIM_QUEUE = keycode;
|
||||
switch(keycode) {
|
||||
case VIM_C: print("\e[32mc\e[0m"); break;
|
||||
case VIM_CI: print("\e[32mi\e[0m"); break;
|
||||
case VIM_D: print("\e[32md\e[0m"); break;
|
||||
case VIM_DI: print("\e[32mi\e[0m"); break;
|
||||
case VIM_V: print("\e[32mv\e[0m"); break;
|
||||
case VIM_VI: print("\e[32mi\e[0m"); break;
|
||||
case KC_NO: print("❎"); break;
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* ####### # # ####### ##### # # ####### #######
|
||||
* # # ## # # # # # # # # #
|
||||
* # # # # # # # # # # # #
|
||||
* # # # # # ##### ##### ####### # # #
|
||||
* # # # # # # # # # # # #
|
||||
* # # # ## # # # # # # # #
|
||||
* ####### # # ####### ##### # # ####### #
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `append` command.
|
||||
* Works by sending →.
|
||||
*/
|
||||
void VIM_APPEND(void) {
|
||||
print("\e[31ma\e[0m");
|
||||
TAP(KC_RIGHT);
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `back` command
|
||||
* Simulates vim's `b` command by sending ⌥←
|
||||
*/
|
||||
void VIM_BACK(void) {
|
||||
print("\e[31mb\e[0m");
|
||||
ALT(KC_LEFT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `cut` command
|
||||
* Simulates vim's `x` command by sending ⇧→ then ⌘X.
|
||||
*/
|
||||
void VIM_CUT(void) {
|
||||
print("\e[31mx\e[0m");
|
||||
SHIFT(KC_RIGHT);
|
||||
CMD(KC_X);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `down` command
|
||||
* Sends ↓
|
||||
*/
|
||||
void VIM_DOWN(void) {
|
||||
print("\e[31mj\e[0m");
|
||||
TAP(KC_DOWN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `end` command
|
||||
* Simulates vim's `e` command by sending ⌥→
|
||||
*/
|
||||
void VIM_END(void) {
|
||||
print("\e[31me\e[0m");
|
||||
ALT(KC_RIGHT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `left` command
|
||||
* Sends ←
|
||||
*/
|
||||
void VIM_LEFT(void) {
|
||||
print("\e[31mh\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
TAP(KC_LEFT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `open` command.
|
||||
* Works by sending ⌘→ to move to the end of the line, `enter` to open a new line,
|
||||
* then switching to insert mode.
|
||||
*/
|
||||
void VIM_OPEN(void) {
|
||||
print("\e[31mo\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_RIGHT);
|
||||
TAP(KC_ENTER);
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `put` command
|
||||
* Simulates vim's `p` command by sending ⌘V
|
||||
*/
|
||||
void VIM_PUT(void) {
|
||||
print("\e[31mp\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_V);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `put before` command
|
||||
* Simulates vim's `P` command by sending ↑, ⌘←, then ⌘V
|
||||
*/
|
||||
void VIM_PUT_BEFORE(void) {
|
||||
print("\e[31mP\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
TAP(KC_UP);
|
||||
CMD(KC_LEFT);
|
||||
CMD(KC_V);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `right` command
|
||||
* Sends →
|
||||
*/
|
||||
void VIM_RIGHT(void) {
|
||||
print("\e[31ml\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
TAP(KC_RIGHT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `substitute` command
|
||||
* Simulates vim's `s` command by sending ⇧→ to select the next character, then
|
||||
* ⌘X to cut it, then entering insert mode.
|
||||
*/
|
||||
void VIM_SUBSTITUTE(void) {
|
||||
print("\e[31ms\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
SHIFT(KC_RIGHT);
|
||||
CMD(KC_X);
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `undo` command
|
||||
* Simulates vim's `u` command by sending ⌘Z
|
||||
*/
|
||||
void VIM_UNDO(void) {
|
||||
print("\e[31mu\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_Z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `up` command
|
||||
* Sends ↑
|
||||
*/
|
||||
void VIM_UP(void) {
|
||||
print("\e[31mk\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
TAP(KC_UP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `word` command
|
||||
* Simulates vim's `w` command by moving the cursor first to the
|
||||
* end of the current word, then to the end of the next word,
|
||||
* then to the beginning of that word.
|
||||
*/
|
||||
void VIM_WORD(void) {
|
||||
print("\e[31mw\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
PRESS(KC_LALT);
|
||||
TAP(KC_RIGHT);
|
||||
TAP(KC_RIGHT);
|
||||
TAP(KC_LEFT);
|
||||
RELEASE(KC_LALT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `yank` command
|
||||
* Simulates vim's `y` command by sending ⌘C
|
||||
*/
|
||||
void VIM_YANK(void) {
|
||||
print("\e[31my\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_C);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `yank line` command
|
||||
* Simulates vim's `y` command by sending ⌘← then ⇧⌘→ then ⌘C
|
||||
*/
|
||||
void VIM_YANK_LINE(void) {
|
||||
print("\e[31mY\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_LEFT);
|
||||
PRESS(KC_LSHIFT);
|
||||
CMD(KC_RIGHT);
|
||||
RELEASE(KC_LSHIFT);
|
||||
CMD(KC_C);
|
||||
}
|
||||
|
||||
/***
|
||||
* ##### # # ### ####### ####### ####### ######
|
||||
* # # # # # # # # # #
|
||||
* # # # # # # # # #
|
||||
* ##### ####### # ##### # ##### # #
|
||||
* # # # # # # # # #
|
||||
* # # # # # # # # # #
|
||||
* ##### # # ### # # ####### ######
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `append to line` command
|
||||
* Simulates vim's `A` command by sending ⌘→ then switching to insert mode.
|
||||
*/
|
||||
void VIM_APPEND_LINE(void) {
|
||||
print("\e[31mA\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_RIGHT);
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `change line` command
|
||||
* Simulates vim's `C` command by sending ⌃K then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_LINE(void) {
|
||||
print("\e[31mC\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_DELETE_LINE();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like 'delete line' command
|
||||
* Simulates vim's `D` command by sending ⌃K to kill the line
|
||||
*/
|
||||
void VIM_DELETE_LINE(void) {
|
||||
print("\e[31mD\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CTRL(KC_K);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like 'join lines' command
|
||||
* Simulates vim's `J` command by sending ⌘→ to go to the end of the line, then
|
||||
* DELETE to join the lines
|
||||
*/
|
||||
void VIM_JOIN(void) {
|
||||
print("\e[31mJ\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_RIGHT);
|
||||
TAP(KC_DELETE);
|
||||
VIM_LEADER(KC_NO);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like 'open above' command
|
||||
* Simulates vim's `O` command by sending ⌘→ to go to the start of the line,
|
||||
* enter to move the line down, ↑ to move up to the new line, then switching to
|
||||
* insert mode.
|
||||
*/
|
||||
void VIM_OPEN_ABOVE(void) {
|
||||
print("\e[31mO\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_LEFT);
|
||||
TAP(KC_ENTER);
|
||||
TAP(KC_UP);
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like 'change whole line' command
|
||||
* Simulates vim's `S` `cc` or `c$` commands by sending ⌘← to go to the start of the line,
|
||||
* ⌃K to kill the line, then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_WHOLE_LINE(void) {
|
||||
print("\e[31mS\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_LEFT);
|
||||
VIM_CHANGE_LINE();
|
||||
}
|
||||
|
||||
/***
|
||||
* ###### ###### ###### ####### ####### ### # # ####### ######
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # ###### ###### ##### ##### # # ##### # #
|
||||
* # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # #
|
||||
* ###### # # # ####### # ### # # ####### ######
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `delete to end` command
|
||||
* Simulates vim's `de` command by sending ⌥⇧→ then ⌘X.
|
||||
*/
|
||||
void VIM_DELETE_END(void) {
|
||||
print("\e[31me\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
PRESS(KC_LALT);
|
||||
SHIFT(KC_RIGHT); // select to end of this word
|
||||
RELEASE(KC_LALT);
|
||||
CMD(KC_X);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `delete whole line` command
|
||||
* Simulates vim's `dd` command by sending ⌘← to move to start of line,
|
||||
* selecting the whole line, then sending ⌘X to cut the line.
|
||||
* alternate method: ⌘⌫, ⌃K
|
||||
*/
|
||||
void VIM_DELETE_WHOLE_LINE(void) {
|
||||
print("\e[31md\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
CMD(KC_LEFT);
|
||||
PRESS(KC_LSHIFT);
|
||||
CMD(KC_RIGHT);
|
||||
RELEASE(KC_LSHIFT);
|
||||
CMD(KC_X);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `delete word` command
|
||||
* Simulates vim's `dw` command by sending ⌥⇧→→← then ⌘X to select to the start
|
||||
* of the next word then cut.
|
||||
*/
|
||||
void VIM_DELETE_WORD(void) {
|
||||
print("\e[31mw\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
PRESS(KC_LALT);
|
||||
SHIFT(KC_RIGHT); // select to end of this word
|
||||
SHIFT(KC_RIGHT); // select to end of next word
|
||||
SHIFT(KC_LEFT); // select to start of next word
|
||||
RELEASE(KC_LALT);
|
||||
CMD(KC_X); // delete selection
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `delete back` command
|
||||
* Simulates vim's `db` command by selecting to the end of the word then deleting.
|
||||
*/
|
||||
void VIM_DELETE_BACK(void) {
|
||||
print("\e[31mb\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
PRESS(KC_LALT);
|
||||
SHIFT(KC_LEFT); // select to start of word
|
||||
SHIFT(KC_DEL); // delete selection
|
||||
RELEASE(KC_LSHIFT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `delete left` command
|
||||
* Simulates vim's `dh` command by sending ⇧← then ⌘X.
|
||||
*/
|
||||
void VIM_DELETE_LEFT(void) {
|
||||
print("\e[31mh\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
SHIFT(KC_LEFT);
|
||||
CMD(KC_X);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `delete right` command
|
||||
* Simulates vim's `dl` command by sending ⇧→ then ⌘X.
|
||||
*/
|
||||
void VIM_DELETE_RIGHT(void) {
|
||||
print("\e[31ml\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
SHIFT(KC_RIGHT);
|
||||
CMD(KC_X);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `delete up` command
|
||||
* Simulates vim's `dk` command by sending ↑ then deleting the line.
|
||||
*/
|
||||
void VIM_DELETE_UP(void) {
|
||||
print("\e[31mk\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
TAP(KC_UP);
|
||||
VIM_DELETE_LINE();
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `delete down` command
|
||||
* Simulates vim's `dj` command by sending ↓ then deleting the line.
|
||||
*/
|
||||
void VIM_DELETE_DOWN(void) {
|
||||
print("\e[31mj\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
TAP(KC_DOWN);
|
||||
VIM_DELETE_LINE();
|
||||
}
|
||||
|
||||
/***
|
||||
* ###### ### ###### ###### ####### ####### ### # # ####### ######
|
||||
* # # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # # #
|
||||
* # # # ###### ###### ##### ##### # # ##### # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* ###### ### # # # ####### # ### # # ####### ######
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `delete inner word` command
|
||||
* Simulates vim's `diw` command by moving back then cutting to the end of the word.
|
||||
*/
|
||||
void VIM_DELETE_INNER_WORD(void) {
|
||||
print("\e[31mw\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_BACK();
|
||||
VIM_DELETE_END();
|
||||
}
|
||||
|
||||
/***
|
||||
* ##### ###### ###### ####### ####### ### # # ####### ######
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # #
|
||||
* # ###### ###### ##### ##### # # ##### # #
|
||||
* # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # #
|
||||
* ##### # # # ####### # ### # # ####### ######
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `change back` command
|
||||
* Simulates vim's `cb` command by first deleting to the start of the word,
|
||||
* then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_BACK(void) {
|
||||
print("\e[31mb\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_DELETE_BACK();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `change down` command
|
||||
* Simulates vim's `cj` command by sending ↓ then changing the line.
|
||||
*/
|
||||
void VIM_CHANGE_DOWN(void) {
|
||||
print("\e[31mj\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_DELETE_DOWN();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `change to end` command
|
||||
* Simulates vim's `ce` command by first deleting to the end of the word,
|
||||
* then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_END(void) {
|
||||
print("\e[31mce\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_DELETE_END();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `change left` command
|
||||
* Simulates vim's `ch` command by deleting left then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_LEFT(void) {
|
||||
print("\e[31mch\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_DELETE_LEFT();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `change right` command
|
||||
* Simulates vim's `cl` command by deleting right then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_RIGHT(void) {
|
||||
print("\e[31mcl\e[0m");
|
||||
VIM_DELETE_RIGHT();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `change up` command
|
||||
* Simulates vim's `ck` command by deleting up then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_UP(void) {
|
||||
print("\e[31mck\e[0m");
|
||||
VIM_DELETE_UP();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `change word` command
|
||||
* Simulates vim's `cw` command by first deleting to the end of the word,
|
||||
* then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_WORD(void) {
|
||||
print("\e[31mcw\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_DELETE_WORD();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/***
|
||||
* ##### ### ###### ###### ####### ####### ### # # ####### ######
|
||||
* # # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # ###### ###### ##### ##### # # ##### # #
|
||||
* # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* ##### ### # # # ####### # ### # # ####### ######
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `change inner word` command
|
||||
* Simulates vim's `ciw` command by deleting the inner word then switching to insert mode.
|
||||
*/
|
||||
void VIM_CHANGE_INNER_WORD(void) {
|
||||
print("\e[31mciw\e[0m");
|
||||
VIM_DELETE_INNER_WORD();
|
||||
layer_on(INSERT_MODE);
|
||||
}
|
||||
|
||||
/***
|
||||
* # # ###### ###### ####### ####### ### # # ####### ######
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # ###### ###### ##### ##### # # ##### # #
|
||||
* # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # #
|
||||
* # # # # ####### # ### # # ####### ######
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `visual select back` command
|
||||
* Simulates vim's `vb` command by selecting to the enc of the word.
|
||||
*/
|
||||
void VIM_VISUAL_BACK(void) {
|
||||
print("\e[31mvb\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
PRESS(KC_LALT);
|
||||
SHIFT(KC_LEFT); // select to start of word
|
||||
RELEASE(KC_LALT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `visual select to end` command
|
||||
* Simulates vim's `ve` command by selecting to the end of the word.
|
||||
*/
|
||||
void VIM_VISUAL_END(void) {
|
||||
print("\e[31mve\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
PRESS(KC_LALT);
|
||||
SHIFT(KC_RIGHT); // select to end of this word
|
||||
RELEASE(KC_LALT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `visual select word` command
|
||||
* Simulates vim's `vw` command by selecting to the end of the word.
|
||||
*/
|
||||
void VIM_VISUAL_WORD(void) {
|
||||
print("\e[31mvw\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
PRESS(KC_LALT);
|
||||
SHIFT(KC_RIGHT); // select to end of this word
|
||||
SHIFT(KC_RIGHT); // select to end of next word
|
||||
SHIFT(KC_LEFT); // select to start of next word
|
||||
RELEASE(KC_LALT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `visual left` command
|
||||
* Simulates vim's `vh` command by sending ⇧←.
|
||||
*/
|
||||
void VIM_VISUAL_LEFT(void) {
|
||||
print("\e[31mvh\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
SHIFT(KC_LEFT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `visual right` command
|
||||
* Simulates vim's `vl` command by sending ⇧→.
|
||||
*/
|
||||
void VIM_VISUAL_RIGHT(void) {
|
||||
print("\e[31mvl\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
SHIFT(KC_RIGHT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `visual up` command
|
||||
* Simulates vim's `vk` command by sending ⇧↑.
|
||||
*/
|
||||
void VIM_VISUAL_UP(void) {
|
||||
print("\e[31mvk\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
SHIFT(KC_UP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vim-like `visual down` command
|
||||
* Simulates vim's `vj` command by sending ⇧↓.
|
||||
*/
|
||||
void VIM_VISUAL_DOWN(void) {
|
||||
print("\e[31mdj\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
SHIFT(KC_DOWN);
|
||||
}
|
||||
|
||||
/***
|
||||
* # # ### ###### ###### ####### ####### ### # # ####### ######
|
||||
* # # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # # #
|
||||
* # # # ###### ###### ##### ##### # # ##### # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* # # # # # # # # # # # # # #
|
||||
* # ### # # # ####### # ### # # ####### ######
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vim-like `visual inner word` command
|
||||
* Simulates vim's `viw` command by moving back then selecting to the end of the word.
|
||||
*/
|
||||
void VIM_VISUAL_INNER_WORD(void) {
|
||||
print("\e[31mviw\e[0m");
|
||||
VIM_LEADER(KC_NO);
|
||||
VIM_BACK();
|
||||
VIM_VISUAL_END();
|
||||
}
|
@@ -25,6 +25,17 @@ Thread on Geekhack: https://geekhack.org/index.php?topic=88439.0
|
||||
|
||||
Also: https://geekhack.org/index.php?topic=88720.0
|
||||
|
||||
|
||||
Actuation Point adjustment
|
||||
--------------------------
|
||||
You can adjust the actuation point of the keys by setting `ACTUATION_DEPTH_ADJUSTMENT` in `config.h`.
|
||||
A value above 0 will result in a deeper, less sensitive actuation whereas a value above 1 will result in a more shallow, more sensitive actuation.
|
||||
Be careful with this setting and use small values (+/-5).
|
||||
See the `actuation-point-example` keymap of the `fc980c` keyboard for an example.
|
||||
For more information, inspect the `fc660c_i2c` branch of TMK [here](https://github.com/tmk/tmk_keyboard/tree/fc660c_i2c).
|
||||
Functionality for writing to the EEPROM has deliberately not been included to reduce the chance of people messing up their boards.
|
||||
|
||||
|
||||
Pinouts
|
||||
-------
|
||||
|
||||
|
87
keyboards/fc660c/actuation_point.c
Normal file
87
keyboards/fc660c/actuation_point.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
Copyright 2017 Balz Guenat
|
||||
based on work by Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "actuation_point.h"
|
||||
#include "i2c.h"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// AD5258 I2C digital potentiometer
|
||||
// http://www.analog.com/media/en/technical-documentation/data-sheets/AD5258.pdf
|
||||
//
|
||||
#define AD5258_ADDR 0b0011000
|
||||
#define AD5258_INST_RDAC 0x00
|
||||
#define AD5258_INST_EEPROM 0x20
|
||||
|
||||
uint8_t read_rdac(void) {
|
||||
// read RDAC register
|
||||
i2c_start_write(AD5258_ADDR);
|
||||
i2c_master_write(AD5258_INST_RDAC);
|
||||
i2c_start_read(AD5258_ADDR);
|
||||
uint8_t ret = i2c_master_read(I2C_NACK);
|
||||
i2c_master_stop();
|
||||
return ret;
|
||||
};
|
||||
|
||||
uint8_t read_eeprom(void) {
|
||||
i2c_start_write(AD5258_ADDR);
|
||||
i2c_master_write(AD5258_INST_EEPROM);
|
||||
i2c_start_read(AD5258_ADDR);
|
||||
uint8_t ret = i2c_master_read(I2C_NACK);
|
||||
i2c_master_stop();
|
||||
return ret;
|
||||
};
|
||||
|
||||
void write_rdac(uint8_t rdac) {
|
||||
// write RDAC register:
|
||||
i2c_start_write(AD5258_ADDR);
|
||||
i2c_master_write(AD5258_INST_RDAC);
|
||||
i2c_master_write(rdac & 0x3F);
|
||||
i2c_master_stop();
|
||||
};
|
||||
|
||||
void actuation_point_up(void) {
|
||||
// write RDAC register: lower value makes actuation point shallow
|
||||
uint8_t rdac = read_rdac();
|
||||
if (rdac == 0)
|
||||
write_rdac(0);
|
||||
else
|
||||
write_rdac(rdac-1);
|
||||
};
|
||||
|
||||
void actuation_point_down(void) {
|
||||
// write RDAC register: higher value makes actuation point deep
|
||||
uint8_t rdac = read_rdac();
|
||||
if (rdac == 63)
|
||||
write_rdac(63);
|
||||
else
|
||||
write_rdac(rdac+1);
|
||||
};
|
||||
|
||||
void adjust_actuation_point(int offset) {
|
||||
i2c_master_init();
|
||||
uint8_t rdac = read_eeprom() + offset;
|
||||
if (rdac > 63) { // protects from under and overflows
|
||||
if (offset > 0)
|
||||
write_rdac(63);
|
||||
else
|
||||
write_rdac(0);
|
||||
} else {
|
||||
write_rdac(rdac);
|
||||
}
|
||||
}
|
32
keyboards/fc660c/actuation_point.h
Normal file
32
keyboards/fc660c/actuation_point.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
Copyright 2017 Balz Guenat
|
||||
|
||||
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 ACTUATION_POINT_H
|
||||
#define ACTUATION_POINT_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// see keymaps/actuation-point-example to see how these functions can be used.
|
||||
uint8_t read_rdac(void);
|
||||
uint8_t read_eeprom(void);
|
||||
void actuation_point_up(void);
|
||||
void actuation_point_down(void);
|
||||
|
||||
// be careful with this.
|
||||
void adjust_actuation_point(int offset);
|
||||
|
||||
#endif
|
@@ -64,6 +64,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
#define USE_I2C
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
@@ -77,4 +79,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
// higher value means deeper actuation point, less sensitive
|
||||
// be careful and only make small adjustments (steps of 1 or 2).
|
||||
// too high and keys will fail to actuate. too low and keys will actuate spontaneously.
|
||||
// test all keys before further adjustment.
|
||||
// this should probably stay in the range +/-5.
|
||||
// #define ACTUATION_DEPTH_ADJUSTMENT 0
|
||||
|
||||
#endif
|
||||
|
@@ -16,10 +16,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "fc660c.h"
|
||||
|
||||
#ifdef ACTUATION_DEPTH_ADJUSTMENT
|
||||
#include "actuation_point.h"
|
||||
#endif
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
|
||||
#ifdef ACTUATION_DEPTH_ADJUSTMENT
|
||||
adjust_actuation_point(ACTUATION_DEPTH_ADJUSTMENT);
|
||||
#endif
|
||||
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user