Compare commits

..

30 Commits

Author SHA1 Message Date
skullydazed
e3f67e6e7f Add SGUI() and SGUI_T() for consistency with KC_GUI (#2442)
* Add `SGUI()` as an alias of `SCMD()` for consistency with `KC_GUI`

* Add `SGUI_T()` as an alias of `SCMD_T()` for consistency with `KC_GUI`

* Make SGUI the primary name
2018-03-01 08:13:10 -08:00
Mitchell van Manen
31cae1f1bd Update feature_macros.md (#2387)
break statements are never reached due to the return statement, so unnecessary
2018-03-01 08:05:15 -08:00
Ivan Choi
0092be5925 adding my keymap (#2443) 2018-03-01 07:51:57 -08:00
Maarten Dekkers
381f4e6404 Updated and added maartenwut's layouts (#2444) 2018-03-01 07:51:11 -08:00
fauxpark
b713feb6f2 Add a little aside explaining that shifted keys with mod-tap doesn't work (#2446) 2018-03-01 07:49:50 -08:00
Louis Orleans
d7f46f3466 layout(preonic): dudeofawesome's layout (#2449)
* 🎉 duplicate default Preonic keymap

*  add Workman layout

* 🚚 swap backspace and delete

*  enable hold enter for shift

* 🚚 swap media play and next

* 💄 use Planck startup sound

* 💄 add Workman layer sound

*  add numpad layer

* 💄 add new workman sound

* 📝 add README

* 🎨 fix layout formatting

* 📝 add image of numpad layer

* 📦 changing chibios submodule version

to match upstream/master's version

*  add caps lock key on adjust layer

*  reworking numpad layer to match a real numpad

*  add double tap to activate numpad

* 📝 fix layout comments

* 📝 update numpad layer render

*  adding operator keys to left hand on numpad

* 🎨 shorten numpad keycodes
2018-03-01 07:48:15 -08:00
Drashna Jaelre
452d23da52 Update to drashna keymaps and userspace (#2450)
* Add OSL keycodes and macro handling

* Re-add AVRDUDE target

* Userspace document cleanup and commenting

* Fix Orthodox keymap layout (cosmetic)

* Add caveat for KEYMAP Macros

* Minor tweaks

* Enable Bootmagic in Ergodox EZ

* Minor tweaks
2018-03-01 07:46:57 -08:00
Brian Choromanski
7f7f763598 Fixed dead links (#2451)
* Fixed typo of 'confid.h' to 'config.h'

* Fixed broken links in docs

* Fixed a lot of dead links
2018-03-01 07:45:47 -08:00
Gam3cat
2b8a82fb9d M10-A, M65-A, GonNerd keymaps (#2418)
* adding my keymap

* update keymap

* adding gamecat keymap for jc65 keyboard

* updating jc65-gamecat keymap

* updating jc65-gamecat keymap

* updating jc65-gamecat keymap

* updating jc65-gamecat keymap

* M10a keymap and M65a updates

* keymap updates

* keymap updates

* M10a/M65a keymap updates

* M10a/M65a keymap updates

* Delete test.txt

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65/M10 keymap updates

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65/M10 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* Set theme jekyll-theme-cayman

* Set theme jekyll-theme-slate

* M65 keymap update

* M10a/M65a keymap updates

* M10a keymap update

* M65a keymap update

* M65a keymap update

* M65a keymap update

* M65a readme update

* M65a/M10a updates

* M65a readme updates

* M65a/M10a updates

* M65A update

* M65A update

* M65A update

* M65A update

* M65A/M10A keymap update

* M10A keymap update

* Set theme jekyll-theme-tactile

* M10A keymap update

* M65A keymap.c update

* M65 keymap added LED backlight toggle, inc/dec to adjust layer.

* M65 keymap/readme updates.

* M65 keymap fix

* M65 keymap update

* remove theme

* fix comments/readme

* update keymap

* LED backlight update, guess based on reading atmega32u4 documentation for DDRB/PORTB regs, believe DDRB should only be written to once not every time CAPS is hit, but really not too sure.

* LED backlight update, guess based on reading atmega32u4 documentation for DDRB/PORTB regs, believe DDRB should only be written to once not every time CAPS is hit, but really not too sure.

* M65 keymap update

* Updated M65, M10, and gonNerd keymaps.

* update

* del

* keymap updates M65, M10, gonnerd

* update keymaps

* adding back readme that somehow got removed.
2018-02-28 16:44:27 -05:00
Brian Choromanski
8e99fbc884 Fixed typo of 'confid.h' to 'config.h' (#2448)
* Fixed typo of 'confid.h' to 'config.h'

* Fixed broken links in docs
2018-02-28 16:43:15 -05:00
Danny
524053e3c0 Remap msys2 usb, fix USB port detection (#2301)
* Add AVRDUDE to MSYS2 setup

* Remap detected USB port in MSYS2 to COM port
2018-02-28 16:40:43 -05:00
Jason Gorman
19b02bf267 Merge of e6v2 stuff as well as my personal keymaps (#2434)
* Checkin of tada keymap and initial commit for e6v2.

* checking in other remaining changes before trying to merge

* Reverting pin change. This was done based on the json orginally provided by exclusive, but it was later determined my map was the correct one based on user testing

* fix extra key for ansi keymap. Didn't include fn as standard ansi shift is not split but still had it in keymap

* Fix default help file and add reset to default
2018-02-28 16:22:53 -05:00
skullY
298ac18dfa remove duplicate #define 2018-02-25 17:41:43 -08:00
skullY
c6ce959f49 Test a shrug macro 2018-02-25 17:40:18 -08:00
Yan-Fa Li
3b801880a0 Custom keymap for clueboard 60
My customized keymap for the clueboard 60.

 - Maps MT(LCTL,ESC) to Caps lock
 - Swaps ALT and GUI for OSX
 - Adds layer for WASD key navigation
2018-02-23 13:25:23 -05:00
Alejandro Blanco
21a37a5245 ErgoDox layout similar to Truly Ergonomic 2018-02-23 13:23:55 -05:00
Sean-Li Murmann
3cff95c8df new customized ErgodoxEz keymap with easy to remember modifiers. (#2400)
* First pass keyboard setup!

* More variation

* Final layer for today

* Added brace to middle key
2018-02-23 13:22:50 -05:00
Isaac Hookom
93eabc4b2c new xd60 layout (#2405)
* new xd60 layout

* fix kc_slsh
2018-02-23 13:22:32 -05:00
ajp10304
01f91bf6f4 JJ40 AJP10304 layout (#2407)
* JJ40 AJP10304 layout
Updated AJP10304 readme.md with formatting

* Revert default JJ40 keymap
2018-02-23 13:21:56 -05:00
Michael Wamsley
2c1ba03a98 Add additional 'tada68' layout. 2018-02-23 13:17:00 -05:00
lucwastiaux
27d32378b5 Update Dvorak 42 key layouts (#2420)
* add SCREEN_NAV layer for copy/pasting within screen

* working readreg/paste macros

* working read reg / paste macros

* write log and tran patterns, and expand

* add ls -la shortcut, add tab on combined layer

* put delete word on the right pinky key on shell_nav layer

* add TAB on the right side, add reset key

* added Cloud9 macros

* add cloud9 shortcuts to atreus layout

* added BROWSER_CONTROL layer

* finalized browser control layer

* adding comment
2018-02-23 13:16:40 -05:00
scott-t-wilson
3f3d0551cd Lfkeyboards updates (#2421)
* Update smk65 fn layer, add iso

* Added Fn layer to ISO keymap

* Fix error when backlight is disabled but lighting isn't

* Remove broke mini1800 iso map

* Add keymaps

* Add LFKPad

* Add split delete to lfk78

* Typo

* Custom keymap
2018-02-23 13:16:10 -05:00
Graham P Heath
f746174874 Graham's Keymaps. (#2422)
* add my config

* fix backlight, clean up that code

* group background code, restore static var

* qwerty is supposed to be in the middle

* wrap layer change backlight in ifdef

* backlight levels and some more 'emojis'.

* Restructure to make it possible to press cmd ent on the right side of the board with one hand.

* Expose the period through the number layer. Add Hyper keys to mouse layer

* reduce mouse speed

* add a : -P  key

* Thumbs up and down, remove some keys that are duplicated via function keys, clean up

* fix build issues

* add various emoji

* duplicate default Meira keymaps

* Miera updates

* add documented but unmapped emoji

* Sound for the Meira, was stumped by a file size! Thanks drashna!

* add docs

* docs

* revert lib changes...

* clean up

* clean up

* remove make file

* Fixes missing key
2018-02-23 13:15:34 -05:00
Yan-Fa Li
a8daf3ffba Document bootmagic hot keys
- covers most of tmk_core/common/bootmagic.h
2018-02-23 13:14:53 -05:00
wanleg
3b4d26e344 flashing instructions, keymap changes
* added flashing instructions for Linux & Windows
* minor keymap changes
2018-02-23 13:14:22 -05:00
ferbie
767f7a8cf0 Fixed formatting for Fedora example 2018-02-23 13:13:30 -05:00
deadencryption
ee176f2b27 Adds dead encryption keymap 2018-02-23 13:13:09 -05:00
Mason McAllaster
c72c1db68b Planck/NIU_Mini - Mason Layout - Fixing comments, adding missed keys 2018-02-23 13:12:27 -05:00
James Shackleford
d469aaa166 tada68: layout: add new layout 'tshack' (#2431)
* Move to a more cross-platform grep command

* Use sed to strip out AVR_SIZE instead

* tada68: layout: add new layout tshack

Adds "James Shackleford's UNIX layout" for the Tada68
2018-02-23 13:12:04 -05:00
Jose Pablo Mora
d54de1c5f2 ergobox -> ergodox 2018-02-23 13:11:31 -05:00
189 changed files with 8422 additions and 1213 deletions

View File

@@ -1,6 +1,6 @@
# Setting up Eclipse for QMK Development
[Eclipse](https://en.wikipedia.org/wiki/Eclipse_(software)) is an open-source [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment) (IDE) widely used for Java development, but with an extensible plugin system that allows to customize it for other languages and usages.
[Eclipse][1] is an open-source [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment) (IDE) widely used for Java development, but with an extensible plugin system that allows to customize it for other languages and usages.
Using an IDE such as Eclipse provides many advantages over a plain text editor, such as:
* intelligent code completion
@@ -17,7 +17,7 @@ Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
# Prerequisites
## Build Environment
Before starting, you must have followed the [Getting Started](home.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
Before starting, you must have followed the [Getting Started](README.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
## Java
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
@@ -84,3 +84,5 @@ We will now configure a make target that cleans the project and builds the keyma
7. (Optional) Toggle the <kbd>Hide Empty Folders</kbd> icon button above the targets tree to only show your build target.
8. Double-click the build target you created to trigger a build.
9. Select the <kbd>Console</kbd> view at the bottom to view the running build.
[1]: https://en.wikipedia.org/wiki/Eclipse_(software)

View File

@@ -116,7 +116,7 @@ These are the values you can use for the `mod` in `MT()` and `OSM()`:
* MOD_HYPR
* MOD_MEH
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped. Note however, that you cannot mix right and left side modifiers.
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
@@ -129,6 +129,12 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac
* `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
* `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
{% hint style='info' %}
Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped.
Additionally, if there is at least one right modifier, any other modifiers will turn into their right equivalents, so it is not possible to "mix and match" the two.
{% endhint %}
# One Shot Keys
One shot keys are keys that remain active until the next key is pressed, and then are released. This allows you to type keyboard combinations without pressing more than one key at a time. These keys are usually called "Sticky keys" or "Dead keys".

View File

@@ -82,7 +82,7 @@ The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, a
#define PITCH_STANDARD_A 432.0f
You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller. To disable it, add this to your `confid.h`:
You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller. To disable it, add this to your `config.h`:
#define NO_MUSIC_MODE

View File

@@ -27,3 +27,38 @@ Shortcuts for bootmagic options. You can use these even when bootmagic is off.
|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Left Alt and GUI |
|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
## Bootmagc Hotkeys
Use this by holding the SPACEBAR and the documented key while
plugging in the USB connection. e.g. to get into bootloader mode
hold `SPACE` and `B` while plugging in USB.
|Key |Description |
|-----------|------------------------------------------------------------------------|
|`ESC` | Skip bootmagic and saved eeprom configuration |
|`B` | Enter bootloader instead of firmware |
|`BACKSPACE`| Clear the saved settings from flash |
|`LCTRL` | Swap `Control` and `Capslock` and save into flash |
|`CAPSLOCK` | Swap `Capslock` and `Control` and save into flash |
|`LALT` | Swap Left `Alt` and `GUI` and save into flash, e.g. for OSX Opt and Cmd|
|`RALT` | Swap Right `Alt` and `GUI` and save into flash |
|`LGUI` | Disable GUI key - e.g. disable Windows key during gaming |
|`GRAVE` | Swap &#39; and `ESC` and save into flash |
|`BACKSLASH`| Swap Blackslash and Backspace and save into flash |
|`N` | Enable NKRO (N Key Roll Over) |
|`0` | Make Layer 0 the default layer at bootup, e.g. switch to dvorak |
|`1` | Make Layer 1 the default layer at bootup |
|`2` | Make Layer 2 the default layer at bootup |
|`3` | Make Layer 3 the default layer at bootup |
|`4` | Make Layer 4 the default layer at bootup |
|`5` | Make Layer 5 the default layer at bootup |
|`6` | Make Layer 6 the default layer at bootup |
|`7` | Make Layer 7 the default layer at bootup |

View File

@@ -22,7 +22,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case MY_CUSTOM_MACRO:
SEND_STRING("QMK is the best thing ever!"); // this is our macro!
return false; break;
return false;
}
}
return true;
@@ -56,10 +56,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case MY_CUSTOM_MACRO:
SEND_STRING("QMK is the best thing ever!");
return false; break;
return false;
case MY_OTHER_MACRO:
SEND_STRING(SS_LCTRL("ac")); // selects all and copies
return false; break;
return false;
}
}
return true;

View File

@@ -5,17 +5,17 @@ Mousekeys is a feature that allows you to emulate a mouse using your keyboard. Y
## Adding Mousekeys to a Keymap
There are two steps to adding Mousekeys support to your keyboard. You must enable support in the Makefile and you must map mouse actions to keys on your keyboard.
There are two steps to adding Mousekeys support to your keyboard. You must enable support in the `rules.mk` file and you must map mouse actions to keys on your keyboard.
### Adding Mousekeys Support in the `Makefile`
### Adding Mousekeys Support in the `rules.mk`
To add support for Mousekeys you simply need to add a single line to your keymap's `Makefile`:
To add support for Mousekeys you simply need to add a single line to your keymap's `rules.mk`:
```
MOUSEKEY_ENABLE = yes
```
You can see an example here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/keymaps/mouse_keys/Makefile
You can see an example here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/keymaps/mouse_keys/rules.mk
### Mapping Mouse Actions to Keyboard Keys
@@ -40,7 +40,7 @@ You can use these keycodes within your keymap to map button presses to mouse act
|`KC_MS_ACCEL1` |`KC_ACL1`|Set mouse acceleration to 1|
|`KC_MS_ACCEL2` |`KC_ACL2`|Set mouse acceleration to 2|
You can see an example in the `_ML` here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/keymaps/mouse_keys/keymap.c#L46
You can see an example in the `_ML` here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c#L46
## Configuring the Behavior of Mousekeys

View File

@@ -37,6 +37,7 @@ Debian / Ubuntu example:
sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi
Fedora / Red Hat example:
sudo dnf install gcc unzip wget zip dfu-util dfu-programmer avr-gcc avr-libc binutils-avr32-linux-gnu arm-none-eabi-gcc-cs arm-none-eabi-binutils-cs arm-none-eabi-newlib
## Nix
@@ -131,7 +132,7 @@ docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasqu
On Windows Docker seems to have issues with the VOLUME tag in Dockerfile, and `$('pwd')` won't print a Windows compliant path; use full path instead, like this:
```bash
docker run -e keymap=default -e keyboard=ergobox_ez --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
docker run -e keymap=default -e keyboard=ergodox_ez --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
```

View File

@@ -4,7 +4,7 @@
A line of 32-bit MCU's produced by a number of companies, such as Atmel, Cypress, Kinetis, NXP, ST, and TI.
## AVR
A line of 8-bit MCU's produced by [Atmel](http://atmel.com). AVR was the original platform that TMK supported.
A line of 8-bit MCU's produced by [Atmel](http://www.microchip.com/). AVR was the original platform that TMK supported.
## AZERTY
The standard Français (French) keyboard layout. Named for the first 6 keys on the keyboard.

View File

@@ -366,7 +366,7 @@ This is a reference only. Each group of keys links to the page documenting their
|`KC_RIGHT_ANGLE_BRACKET`|`KC_GT`/`KC_RABK` |`>` |
|`KC_QUESTION` |`KC_QUES` |`?` |
## [Switching and Toggling Layers](feature_common_shortcuts.md#switching-and-toggling-layers)
## [Switching and Toggling Layers](feature_advanced_keycodes.md#switching-and-toggling-layers)
|Key |Description |
|---------------|----------------------------------------------------------------------------------|

View File

@@ -77,7 +77,7 @@ At the keyboard level we define a C macro (typically named `KEYMAP()`) which map
Notice how the second block of our `KEYMAP()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to.
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/rev2/rev2.h). Explaining that is outside the scope of this document.
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
##### Keycode Assignment
@@ -135,8 +135,8 @@ The `process_record()` function itself is deceptively simple, but hidden within
* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action.c#L128)
* [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L140)
* [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum.c#L143)
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/cluecard/cluecard.c#L20)
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/cluecard/keymaps/default/keymap.c#L58)
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/card/card.c#L20)
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
* [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_midi.c#L102)
* [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_audio.c#L10)
* [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_music.c#L69)

View File

@@ -1,228 +0,0 @@
#include <avr/io.h>
#include <util/twi.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include <stdlib.h>
#include "twi.h"
#ifndef F_SCL
#define F_SCL 100000UL // SCL frequency
#endif
#ifndef PRESCALER
#define PRESCALER 1
#endif
// Limits the amount of we wait for any one i2c transaction.
// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
// 9 bits, a single transaction will take around 90μs to complete.
//
// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
// poll loop takes at least 8 clock cycles to execute
#ifdef TWI_TIMEOUT
#ifndef TWI_TX_SIZE
#define TWI_TX_SIZE 9
#endif
#endif
// Wait for an twi operation to finish
inline static
void twi_wait(uint8_t status) {
#ifdef TWI_TIMEOUT
uint16_t lim = 0;
while ( !(TWCR & (_BV(status))) && lim < (TWI_TX_SIZE+1)*(F_CPU/F_SCL)/8)
lim++;
#else
while ( !(TWCR & (_BV(status))) );
#endif
}
void twi_master_init(void) {
TWBR = (uint8_t) ((((F_CPU / F_SCL) / PRESCALER) - 16 ) / 2);
}
void twi_slave_init(uint8_t address) {
TWAR = address << 0; // slave i2c address
TWCR = _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWEN);
}
uint8_t twi_master_start(uint8_t address) {
// reset TWI control register and transmit start
TWCR = 0;
TWCR = _BV(TWINT) | _BV(TWEN) | _BV(TWSTA);
twi_wait(TWINT);
// check if the start condition was successfully transmitted
if (TW_STATUS != TW_START)
return 1;
// set slave address and transmit
TWDR = address;
TWCR = _BV(TWINT) | _BV(TWEN);
twi_wait(TWINT);
// check if the device has acknowledged the READ / WRITE mode
if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
return 1;
return 0;
}
void twi_master_stop(void) {
// transmit STOP condition
TWCR = _BV(TWINT) | _BV(TWEN) | _BV(TWSTO);
twi_wait(TWSTO);
}
uint8_t twi_write(uint8_t data) {
// load data into data register and start transmission of data
TWDR = data;
TWCR = _BV(TWINT) | _BV(TWEN);
twi_wait(TWINT);
if ( TW_STATUS != TW_MT_DATA_ACK )
return 1;
return 0;
}
uint8_t twi_read(bool ack) {
// start TWI module and acknowledge data after reception
if (ack)
TWCR = _BV(TWINT) | _BV(TWEN) | _BV(TWEA);
else
TWCR = _BV(TWINT) | _BV(TWEN);
twi_wait(TWINT);
return TWDR;
}
uint8_t twi_transmit(uint8_t address, uint8_t* data, uint16_t length) {
if (twi_start(address | TW_WRITE))
return 1;
for (uint16_t i = 0; i < length; i++) {
if (twi_write(data[i]))
return 1;
}
twi_stop();
return 0;
}
uint8_t twi_receive(uint8_t address, uint8_t* data, uint16_t length) {
if (twi_start(address | TW_READ))
return 1;
for (uint16_t i = 0; i < (length-1); i++) {
data[i] = twi_read(true);
}
data[(length-1)] = twi_read(false);
twi_stop();
return 0;
}
uint8_t twi_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length) {
if (twi_start(devaddr | TW_WRITE))
return 1;
twi_write(regaddr);
for (uint16_t i = 0; i < length; i++) {
if (twi_write(data[i]))
return 1;
}
twi_stop();
return 0;
}
uint8_t twi_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length)
{
if (twi_start(devaddr))
return 1;
twi_write(regaddr);
if (twi_start(devaddr | TW_READ))
return 1;
for (uint16_t i = 0; i < (length-1); i++) {
data[i] = twi_read(true);
}
data[(length-1)] = twi_read(false);
twi_stop();
return 0;
}
uint8_t buffer_address = 0;
ISR(TWI_vect) {
uint8_t data;
switch (TW_STATUS) {
case TW_SR_SLA_ACK:
buffer_address = 0xff;
TWCR |= _BV(TWIE) | _BV(TWINT) | _BV(TWEA) | _BV(TWEN);
break;
case TW_SR_DATA_ACK:
data = TWDR;
if (buffer_address == 0xff) {
// store address to read from later
buffer_address = data;
TWCR |= _BV(TWIE) | _BV(TWINT) | _BV(TWEA) | _BV(TWEN);
} else {
// store data from address and increment
rxbuffer[buffer_address] = data;
buffer_address++;
if (buffer_address < 0xFF) {
// ack
TWCR |= _BV(TWIE) | _BV(TWINT) | _BV(TWEA) | _BV(TWEN);
} else {
// nack
TWCR &= ~_BV(TWEA);
TWCR |= _BV(TWIE) | _BV(TWINT) | _BV(TWEN);
}
}
break;
case TW_ST_SLA_ACK:
case TW_ST_DATA_ACK:
data = TWDR;
if (buffer_address == 0xFF) {
buffer_address = data;
}
TWDR = txbuffer[buffer_address];
buffer_address++;
if (buffer_address < 0xFF) {
// ack
TWCR |= _BV(TWIE) | _BV(TWINT) | _BV(TWEA) | _BV(TWEN);
} else {
// nack
TWCR &= ~_BV(TWEA);
TWCR |= _BV(TWIE) | _BV(TWINT) | _BV(TWEN);
}
break;
case TW_BUS_ERROR:
TWCR = 0;
break;
default:
TWCR |= _BV(TWIE) | _BV(TWEA) | _BV(TWEN);
break;
}
}

View File

@@ -1,4 +0,0 @@
#ifndef TWI_H
#define TWI_H
#endif

View File

@@ -14,6 +14,19 @@
static bool mouse_lock = false;
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
// Cloud9 macros
CLOUD9_TAB_LEFT,
CLOUD9_TAB_RIGHT,
CLOUD9_TAB_CLOSE,
CLOUD9_GOTO_SYMBOL,
CLOUD9_GOTO_LINE,
CLOUD9_NAVIGATE,
};
// building instructions:
// make atreus:dvorak_42_key
@@ -30,10 +43,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
},
[KEYNAV] = {
{KC_ESC, MEH(KC_F9), RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, },
{MEH(KC_F11), MEH(KC_F12), RSFT(KC_TAB), KC_TAB, MEH(KC_A), KC_TRNS, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), },
{MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F), KC_TRNS, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, },
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), }
{KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, },
{MEH(KC_F11), CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A), KC_TRNS, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), },
{MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, },
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), }
},
[KEYSEL] = {
@@ -64,6 +77,40 @@ const uint16_t PROGMEM fn_actions[] = {
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if(record->event.pressed) {
switch (keycode) {
// Cloud9 macros
case CLOUD9_TAB_LEFT:
SEND_STRING(SS_LCTRL("["));
return true;
break;
case CLOUD9_TAB_RIGHT:
SEND_STRING(SS_LCTRL("]"));
return true;
break;
case CLOUD9_TAB_CLOSE:
SEND_STRING(SS_LALT("w"));
return true;
break;
case CLOUD9_GOTO_SYMBOL:
SEND_STRING(SS_LSFT(SS_LCTRL("e")));
return true;
break;
case CLOUD9_GOTO_LINE:
SEND_STRING(SS_LCTRL("g"));
return true;
break;
case CLOUD9_NAVIGATE:
SEND_STRING(SS_LCTRL("e"));
return true;
break;
}
}
return true;
}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function

View File

@@ -0,0 +1,134 @@
#include "60.h"
#define _______ KC_TRNS
enum keyboard_layers {
_BL,
_FL,
_CL,
_YF
};
enum custom_keycodes {
S_BSKTC = SAFE_RANGE,
S_ODEJY,
S_RCKBY,
S_DOEDR,
S_SCALE,
S_ONEUP,
S_COIN,
S_SONIC,
S_ZELDA
};
#ifdef AUDIO_ENABLE
float song_basketcase[][2] = SONG(BASKET_CASE);
float song_ode_to_joy[][2] = SONG(ODE_TO_JOY);
float song_rock_a_bye_baby[][2] = SONG(ROCK_A_BYE_BABY);
float song_doe_a_deer[][2] = SONG(DOE_A_DEER);
float song_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float song_coin[][2] = SONG(COIN_SOUND);
float song_one_up[][2] = SONG(ONE_UP_SOUND);
float song_sonic_ring[][2] = SONG(SONIC_RING);
float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
#endif
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
* ,-----------------------------------------------------------------.
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
* |-----------------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
* |-----------------------------------------------------------------|
* |MT(CTL, ESC)| A| S| D| F| G| H| J| K| L| ;| '|Enter |
* |-----------------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
* |-----------------------------------------------------------------'
* |Ctrl |Alt|Gui | Space |Alt |Gui|Fn |Ctrl |
* `-----------------------------------------------------------------'
*/
[_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_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, \
MT(MOD_LCTL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS, KC_ENT, \
KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(_YF), \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
[_FL] = KEYMAP(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,_______,\
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, MO(_YF), \
_______,_______,_______, _______, _______, _______, MO(_FL), _______),
[_CL] = KEYMAP(
BL_STEP,S_BSKTC,S_ODEJY,S_RCKBY,S_DOEDR,S_SCALE,S_ONEUP,S_COIN, S_SONIC,S_ZELDA,_______,_______,_______,_______,_______,\
_______, _______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______, _______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, MO(_YF), \
_______, _______, _______, _______, _______, _______, MO(_FL), _______),
[_YF] = KEYMAP(
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
_______,_______,KC_UP ,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
_______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, MO(_YF), \
_______, _______, _______, _______, _______, _______, MO(_FL), _______)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case S_BSKTC:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_basketcase);
}
return false;
case S_ODEJY:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_ode_to_joy);
}
return false;
case S_RCKBY:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_rock_a_bye_baby);
}
return false;
case S_DOEDR:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_doe_a_deer);
}
return false;
case S_SCALE:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_scale);
}
return false;
case S_ONEUP:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_one_up);
}
return false;
case S_COIN:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_coin);
}
return false;
case S_SONIC:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_sonic_ring);
}
return false;
case S_ZELDA:
if (record->event.pressed) {
stop_all_notes();
PLAY_SONG(song_zelda_puzzle);
}
return false;
}
return true;
}

View File

@@ -0,0 +1,14 @@
# /u/yanfali keymap for clueboard 60%
Almost the same as default but differs in the following ways
1. `Caps Lock` -> `MT(KC_LCTL, KC_ESC)`.
I'm a heavy vim user and I prefer escape to be closer than default. I also move `Control` to this key if you hold it.
1. Switch Alt and GUI.
I spend most of my time on OSX, so I reverse Alt and GUI to be
more comfortable on OSX.
1. Added a custom layer.
I use this to map the cursor keys to WASD, the familiar directional
gaming keys. As I use a split right shift, this naturally leads
to the left hand being used for navigation. This is also the
best place to add custom mappings, macros and combo keys.

View File

@@ -1,5 +1,9 @@
#include "66.h"
enum custom_keycodes {
M_SHRUG = SAFE_RANGE
};
// 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
@@ -30,9 +34,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _CL: Control layer
*/
[_CL] = LAYOUT(
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
M_SHRUG, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
_______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
_______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch(keycode) {
case M_SHRUG:
SEND_STRING("/shrug"SS_TAP(X_ENTER));
return false; break;
}
}
return true;
};

View File

@@ -14,4 +14,4 @@ Make example for this keyboard (after setting up your build environment):
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.
For those that prefer a GUI tool, the crawlpad.json file in this repo can be used on [kbfirmware.com](http://kbfirmware.com].
For those that prefer a GUI tool, the crawlpad.json file in this repo can be used on [kbfirmware.com](http://kbfirmware.com).

65
keyboards/e6v2/config.h Normal file
View File

@@ -0,0 +1,65 @@
/*
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 0x0002
#define MANUFACTURER Exclusive / E-Team
#define PRODUCT E6-V2
#define DESCRIPTION E6-V2 QMK PCB (Mid-Port)
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
/* QMK E6-V2 PCB default pin-out */
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
#define MATRIX_COL_PINS { C7, C6, B5, B4, D7, D6, D4, F6, F7, F5, F4, F1, F0, B0, B1 }
#define UNUSED_PINS { E6, B2, B3, B7 }
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 8
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 12
#define RGBLIGHT_VAL_STEP 12
#endif
#define BACKLIGHT_PIN B6
#ifdef BACKLIGHT_PIN
#define BACKLIGHT_LEVELS 5
#define BACKLIGHT_BREAHTING
#define BREATHING_PERIOD 3
#endif
#define DIODE_DIRECTION COL2ROW
#define DEBOUNCING_DELAY 5
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
#endif

53
keyboards/e6v2/e6v2.c Normal file
View File

@@ -0,0 +1,53 @@
#include "e6v2.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
}
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
DDRB |= (1<<6);
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
// output low
DDRB |= (1<<2);
PORTB &= ~(1<<2);
} else {
// Hi-Z
DDRB &= ~(1<<2);
PORTB &= ~(1<<2);
}
// DDRB |= (1<<7);
// DDRB |= (1<<1);
// DDRB |= (1<<3);
// DDRE |= (1<<6);
if (usb_led == 0){
PORTB |= (1<<6);
// PORTB |= (1<<7);
// PORTB |= (1<<1);
// PORTB |= (1<<3);
// PORTE |= (1<<6);
}
else{
PORTB &= ~(1<<6);
// PORTB &= ~(1<<7);
}
led_set_user(usb_led);
}

66
keyboards/e6v2/e6v2.h Normal file
View File

@@ -0,0 +1,66 @@
#ifndef E6V2_H
#define E6V2_H
#include "quantum.h"
#define KEYMAP( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K41, K42, K46, K4A, K4B, K4C, K4D \
)\
{\
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO }, \
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO }, \
}
#define KEYMAP_ANSI( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
K40, K41, K42, K46, K4A, K4B, K4C, K4D \
)\
{\
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO, KC_NO }, \
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO }, \
}
#define KEYMAP_HHKB( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K41, K42, K46, K4B, K4C \
)\
{\
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO }, \
{ KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, KC_NO }, \
}
#define KEYMAP_HHKB_SPLITS( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K41, K42, K46, K4B, K4C \
)\
{\
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO }, \
{ KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, KC_NO }, \
}
#endif

View File

@@ -0,0 +1 @@
#include "../../config.h"

View File

@@ -0,0 +1,79 @@
#include "e6v2.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _BL 0
#define _HLa 1
#define _HLb 2
#define _HL 3
#define _XL 4
enum hype_keycodes {
FN_HLa = SAFE_RANGE,
FN_HLb
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = KEYMAP_HHKB(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
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, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_HLb,
KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, FN_HLa
),
[_HLa] = KEYMAP_HHKB(
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_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, 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_MPLY, KC_TRNS, KC_TRNS
),
[_HLb] = KEYMAP_HHKB(
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_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, 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_MPLY, KC_TRNS, KC_TRNS
),
[_HL] = KEYMAP_HHKB(
RGB_TOG, RGB_M_P, RGB_RMOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, BL_BRTG, BL_OFF, BL_STEP, BL_ON, BL_DEC, BL_INC, LALT(KC_F4),
RESET, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, 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
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case FN_HLa:
if (record->event.pressed)
{
layer_on(_HLa);
update_tri_layer(_HLa, _HLb, _HL);
}
else
{
layer_off(_HLa);
update_tri_layer(_HLa, _HLb, _HL);
}
return false;
break;
case FN_HLb:
if (record->event.pressed)
{
layer_on(_HLb);
update_tri_layer(_HLa, _HLb, _HL);
}
else
{
layer_off(_HLb);
update_tri_layer(_HLa, _HLb, _HL);
}
return false;
break;
}
return true;
}

View File

@@ -0,0 +1,8 @@
amnesia0287's Keymap
===
Keymap Maintainer: [Jason Gorman](https://github.com/amnesia0287)
Difference from base layout: Primarily the HHKB-ness
Intended usage: Daily driver for programming

View File

@@ -0,0 +1 @@
#include "../../config.h"

View File

@@ -0,0 +1,18 @@
#include "e6v2.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP_ANSI(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, MO(1), KC_MENU, KC_RCTL
),
[1] = KEYMAP_ANSI(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, 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_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View File

@@ -0,0 +1,8 @@
Default Keymap
===
Super simple default keymap with only a base layer.
Keymap Maintainer: [Jason Gorman](https://github.com/amnesia0287)
Intended usage: This is mostly provided for testing before you build your own keymap and as a reference to a stock(ish) configuration

View File

18
keyboards/e6v2/readme.md Normal file
View File

@@ -0,0 +1,18 @@
E6-V2
===
These docs are for the QMK version of the PCB. [More info on qmk.fm](http://qmk.fm/)
Keyboard Maintainer: [Jason Gorman](https://github.com/amnesia0287)
Hardware Supported: E6-V2 Mid Port rev.qmk
Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
Make example for this keyboard (after setting up your build environment):
make e6v2:default
Or to make and flash:
make e6v2:default:dfu
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.

68
keyboards/e6v2/rules.mk Normal file
View File

@@ -0,0 +1,68 @@
# 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 yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # 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
# 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
RGBLIGHT_ENABLE = yes
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6

View File

@@ -19,4 +19,4 @@ 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).
debug, together with the [hid_listen tool](https://docs.qmk.fm/faq_debug.html).

View File

@@ -19,6 +19,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//enum more_custom_keycodes {
// KC_P00 = NEW_SAFE_RANGE
//};
//define layer change stuff for underglow indicator
bool skip_leds = false;
@@ -49,20 +53,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `---------------------' `---------------------'
*/
[_QWERTY] = LAYOUT_ergodox_wrapper(
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TT(_MOUS),
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS),
KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO),
KC_BSPC, _________________QWERTY_L2_________________,
KC_LSFT, _________________QWERTY_L3_________________, TG(_GAMEPAD),
KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD),
LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPACE,KC_BSPC, KC_END,
TT(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS,
_________________QWERTY_R2_________________, GUI_T(KC_QUOT),
TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_RSFT,
TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF,
___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
KC_RGUI, CTL_T(KC_ESCAPE),
KC_PGUP,
@@ -93,19 +97,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
[_COLEMAK] = LAYOUT_ergodox_wrapper(
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TT(_MOUS),
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS),
KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO),
KC_BSPC, _________________COLEMAK_L2________________,
KC_LSFT, _________________COLEMAK_L3________________, TG(_GAMEPAD),
KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD),
LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPACE,KC_BSPC, KC_END,
// right hand
TT(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS,
_________________COLEMAK_R2________________, GUI_T(KC_QUOT),
TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_RSFT,
TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF,
___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
KC_RGUI, CTL_T(KC_ESCAPE),
KC_PGUP,
@@ -136,19 +140,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
[_DVORAK] = LAYOUT_ergodox_wrapper(
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TT(_MOUS),
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS),
KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO),
KC_BSPC, _________________DVORAK_L2_________________,
KC_LSFT, _________________DVORAK_L3_________________, TG(_GAMEPAD),
KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD),
LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPACE,KC_BSPC, KC_END,
// right hand
TT(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH,
_________________DVORAK_R2_________________, GUI_T(KC_MINS),
TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_RSFT,
TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF,
___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
KC_RGUI, CTL_T(KC_ESCAPE),
KC_PGUP,
@@ -179,19 +183,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
[_WORKMAN] = LAYOUT_ergodox_wrapper(
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TT(_MOUS),
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS),
KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO),
KC_BSPC, _________________WORKMAN_L2________________,
KC_LSFT, _________________WORKMAN_L3________________, TG(_GAMEPAD),
KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD),
LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPACE,KC_BSPC, KC_END,
// right hand
TT(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS,
_________________WORKMAN_R2________________, GUI_T(KC_QUOT),
TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_RSFT,
TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF,
___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB),
KC_RGUI, CTL_T(KC_ESCAPE),
KC_PGUP,
@@ -202,7 +206,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
OSM(MOD_LSFT),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_LSFT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
@@ -211,7 +215,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, OSM(MOD_RSFT),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
@@ -241,9 +245,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_SYMB] = LAYOUT_ergodox(
EPRM, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, TG(_MODS),
VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_WORKMAN,
KC_RESET, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_WORKMAN,
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,
VRSN, KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK,
KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
RGB_SMOD, KC_RGB_T,
RGB_HUI,
@@ -387,12 +391,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
//switch (keycode) {
// case KC_P00:
// if (!record->event.pressed) {
// register_code(KC_KP_0);
// unregister_code(KC_KP_0);
// register_code(KC_KP_0);
// unregister_code(KC_KP_0);
// }
// return false;
// break;
//}
return true;
}
void matrix_init_keymap(void) { // Runs boot tasks for keyboard
};

View File

@@ -1,6 +1,7 @@
TAP_DANCE_ENABLE = yes
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
COMMAND_ENABLE = no # Commands for debug and configuration
COMMAND_ENABLE = yes # Commands for debug and configuration
RGBLIGHT_ENABLE = yes
CONSOLE_ENABLE = no
BOOTMAGIC_ENABLE = yes

View File

@@ -7,6 +7,12 @@
// to build this keymap
// make ergodox_ez:dvorak_42_key:teensy
// keeping fork up to date:
// https://help.github.com/articles/configuring-a-remote-for-a-fork/
// https://help.github.com/articles/syncing-a-fork/
// pushing dev branch
// git push origin dev:dev
static bool mouse_lock = false;
enum custom_keycodes {
@@ -17,6 +23,7 @@ enum custom_keycodes {
// shell nav macros
SHELL_LS,
SHELL_LSLTR,
SHELL_LSLA,
SHELL_CDPRE,
SHELL_LESS,
SHELL_PLESS,
@@ -31,6 +38,15 @@ enum custom_keycodes {
SHELL_SCREEN_LIST,
SHELL_MKE,
SHELL_HTCSTATUS,
// Cloud9 macros
CLOUD9_TAB_LEFT,
CLOUD9_TAB_RIGHT,
CLOUD9_TAB_CLOSE,
CLOUD9_GOTO_SYMBOL,
CLOUD9_GOTO_LINE,
CLOUD9_NAVIGATE,
};
@@ -39,8 +55,11 @@ enum custom_keycodes {
#define KEYSEL 2 // arrow navigation + shift (allow text selection)
#define SHELL_NAV 3 // bash shortcuts
#define SHELL_SCREEN 4 // linux screen shortcuts
#define MOUSE 5 // mouse layer (can be locked with lock key)
#define COMBINED 6 // combined numbers and symbols layer
#define SCREEN_NAV 5 // navigate between linux screen tabs
#define MOUSE 6 // mouse layer (can be locked with lock key), unmapped for now
#define BROWSER_CONTROL 7 // control browser and mouse
#define COMBINED 8 // combined numbers and symbols layer
// macros
#define MOUSE_TOGGLE 1
@@ -64,7 +83,18 @@ enum custom_keycodes {
#define SCREEN_8 20
#define SCREEN_9 21
#define SCREEN_DETACH 22
#define SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND 30
#define SCREEN_UP_JUMP 23
#define SCREEN_DOWN_JUMP 24
#define SCREEN_READREG_1 25
#define SCREEN_READREG_2 26
#define SCREEN_READREG_3 27
#define SCREEN_PASTEREG_1 28
#define SCREEN_PASTEREG_2 29
#define SCREEN_PASTEREG_3 30
#define SHELL_WRITE_LOGPATTERN 31
#define SHELL_WRITE_TRANPATTERN 32
#define SHELL_EXPAND_PATTERN 33
#define MACRO_SCREEN_NUM(MACRO_NAME,NUM) \
@@ -73,16 +103,50 @@ enum custom_keycodes {
return MACRO( D(LCTL), T(A), U(LCTL), T(NUM), END);\
}\
break;\
#define MACRO_SCREEN_REG(MACRO_NAME,NUM) \
case MACRO_NAME:\
if (record->event.pressed) {\
return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(SCOLON), U(LSFT),\
T(R),\
T(E),\
T(A),\
T(D),\
T(R),\
T(E),\
T(G),\
T(SPC),\
T(NUM),\
T(ENTER),\
END);\
}\
break;\
#define MACRO_SCREEN_PASTE(MACRO_NAME,NUM)\
case MACRO_NAME:\
if (record->event.pressed) {\
return MACRO( D(LCTL), T(A), U(LCTL), D(LSFT), T(SCOLON), U(LSFT),\
T(P),\
T(A),\
T(S),\
T(T),\
T(E),\
T(SPC),\
T(NUM),\
T(ENTER),\
END);\
}\
break;\
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = KEYMAP(
// left hand
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, MEH(KC_2),
OSL(SCREEN_NAV), KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, MEH(KC_2),
OSL(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I,
OSL(SHELL_SCREEN), KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, MEH(KC_3),
MEH(KC_1), OSM(MOD_LSFT), OSM(MOD_LCTL), M(MOUSE_TOGGLE), MO(KEYSEL),
MEH(KC_1), OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL),
// left thumb cluster
MEH(KC_4), MEH(KC_5),
@@ -91,8 +155,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// right hand
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MEH(KC_9),
MEH(KC_7), KC_F, KC_G, KC_C, KC_R, KC_L, MEH(KC_F1),
KC_D, KC_H, KC_T, KC_N, KC_S, MEH(KC_F2),
MEH(KC_7), KC_F, KC_G, KC_C, KC_R, KC_L, KC_TAB,
KC_D, KC_H, KC_T, KC_N, KC_S, RCTL(KC_BSPC),
MEH(KC_8), KC_B, KC_M, KC_W, KC_V, KC_Z, MEH(KC_F3),
KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT),MEH(KC_F4),
@@ -103,11 +167,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[KEYNAV] = KEYMAP(
// left hand
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_ESC, MEH(KC_F9), RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS,
KC_TRNS,MEH(KC_F11), MEH(KC_F12), RSFT(KC_TAB), KC_TAB, MEH(KC_A),
KC_TRNS,MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F), KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS,
KC_TRNS,KC_LSFT, CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A),
KC_TRNS,MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// left thumb cluster
KC_TRNS,KC_TRNS,KC_TRNS,TO(MOUSE),KC_TRNS,KC_TRNS,
@@ -130,7 +194,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P),
KC_TRNS,MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS,
// bottom row
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
// thumb cluster
KC_TRNS,KC_TRNS,
KC_TRNS,
@@ -151,9 +215,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// shell navigation layer
[SHELL_NAV] = KEYMAP(
// left hand
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, SHELL_PGREP, SHELL_PLESS, SHELL_LESS, KC_TRNS, SHELL_H3,
KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_PWD,
KC_TRNS,SHELL_MKE, SHELL_CDPRE, SHELL_LSLTR, SHELL_LS, SHELL_LSLA,
KC_TRNS,SHELL_SCREEN_LIST, SHELL_SCREENRD, SHELL_SCREEN_NEW, SHELL_TAILF, SHELL_HTCSTATUS, SHELL_AMMCOLO,
// bottom row
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
@@ -162,10 +226,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(SWITCH_NDS),
RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, RCTL(KC_R),
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), LALT(KC_DOT),
RCTL(KC_C), RCTL(KC_U), M(SCREEN_COPY_MODE), M(SCREEN_PASTE), MEH(KC_V), RCTL(KC_K), M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(SHELL_WRITE_TRANPATTERN),
RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, M(SHELL_WRITE_LOGPATTERN),
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), RCTL(KC_W),
RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), M(SHELL_EXPAND_PATTERN),
// bottom row (match functionality of base layer)
KC_BSPC, RCTL(KC_W), KC_DELETE, LALT(KC_D), RCTL(KC_U),
// thumb cluster
@@ -178,7 +242,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// linux screen layer
[SHELL_SCREEN] = KEYMAP(
// left hand
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -201,6 +265,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS
),
// navigation within screen (for copy/paste)
[SCREEN_NAV] = KEYMAP(
// left hand
// left hand
KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, M(SCREEN_READREG_3), M(SCREEN_READREG_2), M(SCREEN_READREG_1), KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, M(SCREEN_PASTEREG_3), M(SCREEN_PASTEREG_2), M(SCREEN_PASTEREG_1), KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// bottom row
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
// thumb cluster
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_0, KC_UP, KC_DLR, M(SCREEN_UP_JUMP), KC_TRNS,
KC_B, KC_LEFT, KC_DOWN, KC_RIGHT, KC_W, M(SCREEN_COPY_MODE),
KC_TRNS, KC_TRNS, S(KC_W), S(KC_Y), M(SCREEN_PASTE), M(SCREEN_DOWN_JUMP), MEH(KC_V),
// bottom row (match functionality of base layer)
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// thumb cluster
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
[COMBINED] = KEYMAP(
@@ -222,7 +315,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// bottom row
KC_0, KC_DOT, KC_PIPE, KC_BSLS, MEH(KC_P),
// thumb cluster
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TAB),
[MOUSE] = KEYMAP(
@@ -246,6 +341,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,
KC_TRNS, KC_BTN1, KC_BTN2
),
[BROWSER_CONTROL] = KEYMAP(
// left hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// bottom row
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS, KC_TRNS,
KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT), KC_TRNS,
KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5, KC_TRNS,
// bottom row
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, RCTL(KC_W), RCTL(KC_T)
),
};
@@ -317,6 +436,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
break;
MACRO_SCREEN_REG(SCREEN_READREG_1,1);
MACRO_SCREEN_REG(SCREEN_READREG_2,2);
MACRO_SCREEN_REG(SCREEN_READREG_3,3);
MACRO_SCREEN_PASTE(SCREEN_PASTEREG_1,1);
MACRO_SCREEN_PASTE(SCREEN_PASTEREG_2,2);
MACRO_SCREEN_PASTE(SCREEN_PASTEREG_3,3);
MACRO_SCREEN_NUM(SCREEN_0,0);
MACRO_SCREEN_NUM(SCREEN_1,1);
MACRO_SCREEN_NUM(SCREEN_2,2);
@@ -328,6 +455,18 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
MACRO_SCREEN_NUM(SCREEN_8,8);
MACRO_SCREEN_NUM(SCREEN_9,9);
case SCREEN_UP_JUMP:
if (record->event.pressed) {
return MACRO( T(5), T(UP), END);
}
break;
case SCREEN_DOWN_JUMP:
if (record->event.pressed) {
return MACRO( T(5), T(DOWN), END);
}
break;
case SCREEN_COPY_MODE:
if (record->event.pressed) {
return MACRO( D(LCTL), T(A), U(LCTL), T(ESC), END);
@@ -338,23 +477,39 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END);
}
break;
case SWITCH_NDS:
case SHELL_WRITE_LOGPATTERN:
if (record->event.pressed) {
return MACRO( D(LSFT),
T(F11),
U(LSFT),
W(255),
D(LALT),
T(TAB),
U(LALT),
END);
}
break;
case SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND:
return MACRO( D(LSFT),
T(8),
T(8),
U(LSFT),
T(L),
T(O),
T(G),
T(LEFT),
T(LEFT),
T(LEFT),
T(LEFT),
END);
}
break;
case SHELL_WRITE_TRANPATTERN:
if (record->event.pressed) {
return MACRO( T(UP), T(HOME), D(LALT), T(D), U(LALT), END);
}
break;
return MACRO( D(LSFT),
T(8),
T(8),
U(LSFT), T(T), T(R), T(A), T(N), T(LEFT), T(LEFT), T(LEFT), T(LEFT), T(LEFT), END);
}
break;
case SHELL_EXPAND_PATTERN:
if (record->event.pressed) {
return MACRO( D(LALT), T(F), U(LALT), D(LCTL), T(X), U(LCTL), D(LSFT), T(8), D(LSFT), END);
}
break;
}
return MACRO_NONE;
};
@@ -393,6 +548,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
SEND_STRING("ls -ltr\n");
return true;
break;
case SHELL_LSLA:
SEND_STRING("ls -la\n");
return true;
break;
case SHELL_CDPRE:
SEND_STRING("cd ..\n");
return true;
@@ -445,6 +604,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
SEND_STRING("htcStatus -j ");
return true;
break;
// Cloud9 macros
case CLOUD9_TAB_LEFT:
SEND_STRING(SS_LCTRL("["));
return true;
break;
case CLOUD9_TAB_RIGHT:
SEND_STRING(SS_LCTRL("]"));
return true;
break;
case CLOUD9_TAB_CLOSE:
SEND_STRING(SS_LALT("w"));
return true;
break;
case CLOUD9_GOTO_SYMBOL:
SEND_STRING(SS_LSFT(SS_LCTRL("e")));
return true;
break;
case CLOUD9_GOTO_LINE:
SEND_STRING(SS_LCTRL("g"));
return true;
break;
case CLOUD9_NAVIGATE:
SEND_STRING(SS_LCTRL("e"));
return true;
break;
}
}
@@ -474,9 +659,11 @@ void matrix_scan_user(void) {
case SHELL_SCREEN:
case KEYNAV:
case KEYSEL:
case SCREEN_NAV:
ergodox_right_led_3_on();
break;
case MOUSE:
case BROWSER_CONTROL:
ergodox_right_led_2_on();
ergodox_right_led_3_on();
break;

View File

@@ -0,0 +1,228 @@
#include QMK_KEYBOARD_H
#include "debug.h"
#include "action_layer.h"
#include "version.h"
#define BASE 0 // default layer
#define MDIA 1 // media keys
#define _______ KC_TRNS
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
EPRM,
VRSN,
RGB_SLD
};
bool capsOn = false;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | Bksp |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | { | | } | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* |HyperCaps| A | S | D | F | G |------| |------| H | J | K | L |; / L1| Enter |
* |--------+------+------+------+------+------| Alt | | L1 |------+------+------+------+------+--------|
* | LShift | Z/L1 | X | C | V | B | | | | N | M | , | . | ? | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |lCrtr | [ | ] | ` | ' | | Left | Up | Down | Right| PlayWin |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* |PRTSRN| Win | | Home | End |
* ,------|------|------| |------+--------+------.
* | | | Ins | | PgUp | | |
* | Space|Backsp|------| |------| Enter |Space |
* | |ace | Del | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = LAYOUT_ergodox( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LCBR,
ALL_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, LT(MDIA,KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
KC_LCTRL, KC_LBRC, KC_RBRC, KC_GRV, KC_QUOT,
KC_PSCR, KC_LGUI,
KC_INS,
KC_SPC,KC_BSPC,KC_DEL,
// right hand
KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC,
KC_RCBR, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_ENT,
TG(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
KC_LEFT, KC_UP,KC_DOWN,KC_RGHT, GUI_T(KC_MPLY),
KC_HOME, KC_END,
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
/* Keymap 1: Media and mouse keys
*
* ,---------------------------------------------------. ,--------------------------------------------------.
* |Version | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
* |BootLoad | | Lclk | MsUp | Rclk | | | | | | | Up | | | |
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | Left | Down | Right| | |
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsAcl0|MsAcl1|MsAcl2| | | | | | | Mute | Mute | | |
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | Prev |VolUp |VolDn | Next | |
* `-----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// Functions
[MDIA] = LAYOUT_ergodox(
// left hand
VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
RESET,_______,KC_BTN1,KC_MS_U,KC_BTN2,_______,_______,
_______,_______,KC_MS_L,KC_MS_D,KC_MS_R,_______,
_______,_______,KC_ACL0,KC_ACL1,KC_ACL2,_______,_______,
_______,_______,_______,_______,_______,
_______,_______,
_______,
_______,_______,_______,
// right hand
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,
_______,_______,_______, KC_UP ,_______,_______,_______,
_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,
_______,_______,_______,KC_MUTE,KC_MUTE,_______,_______,
KC_MPRV,KC_VOLU,KC_VOLD,KC_MNXT,_______,
_______, _______,
_______,
_______, _______, _______
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(MDIA) // FN1 - Momentary Layer 1 (Symbols)
};
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) {
#ifdef RGBLIGHT_COLOR_LAYER_0
rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
#endif
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
if(layer == 1)
{
ergodox_right_led_2_on();
ergodox_right_led_3_on();
ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
}
if(capsOn)
{
ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
ergodox_right_led_1_on ();
}
if(keyboard_report->mods & MOD_BIT(KC_LSFT))
{
ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
ergodox_right_led_1_on ();
} else {
ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
if(!capsOn)
{
ergodox_right_led_1_off ();
}
}
if(keyboard_report->mods & MOD_BIT(KC_LALT))
{
ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
ergodox_right_led_2_on ();
} else {
ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
if(layer != 1)
{
ergodox_right_led_2_off ();
}
}
if(keyboard_report->mods & MOD_BIT(KC_LCTRL))
{
ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
ergodox_right_led_3_on ();
} else {
ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
if(layer != 1)
{
ergodox_right_led_3_off ();
}
}
};
void led_set_user(uint8_t usb_led){
if (usb_led & (1 << USB_LED_CAPS_LOCK))
{
capsOn = true;
}else {
capsOn = false;
}
}

View File

@@ -0,0 +1,3 @@
# Truly Ergonomic like layout
A basic ErgoDox layout that imitates the Truly Ergonomic keyboard layout.

View File

@@ -0,0 +1,177 @@
#include QMK_KEYBOARD_H
#include "debug.h"
#include "action_layer.h"
#include "version.h"
#define BASE 0 // default layer
#define EXTRA 1 // extra
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 | LGui | | LGui | 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | Del | | Tab | Y | U | I | O | P | = |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | RShift |
* |--------+------+------+------+------+------| Back | | Back |------+------+------+------+------+--------|
* | LCtrl | Z | X | C | V | B | space| | space| N | M | , | . | ' | RCtrl |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | LAlt | Home | PgUp | PgDn | End | | Left | Up | Down | Rigth| RAlt |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | ~ | | | | [ | ] |
* ,------|------|------| |------+------+------.
* | | | L1 | | Grv | | |
* | Space|Enter |------| |------| Enter|Space |
* | | | / | | \ | | |
* `--------------------' `--------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = LAYOUT_ergodox( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_DELT,
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC,
KC_LALT, KC_HOME, KC_PGUP, KC_PGDN, KC_END,
KC_TILD, KC_PIPE,
TG(EXTRA),
KC_SPC, KC_ENT, KC_SLSH,
// right hand
KC_LGUI, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_TAB, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT,
KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, KC_RCTL,
KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_RALT,
KC_LBRC, KC_RBRC,
KC_GRV,
KC_BSLS, KC_ENT, KC_SPC
),
/* Keymap 1: Extra Layer
*
* ,---------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | PSCR | F6 | F7 | F8 | F9 | F10 | F11 |
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Caps | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | 0 | , | . | = | |
* `-----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* |VolUp |VolDn | | Prev | Next |
* ,------|------|------| |------+------+------.
* | | | | | Stop |Bright|Bright|
* | Mute |Pause |------| |------|ness- |ness+ |
* | | | | | Play | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[EXTRA] = LAYOUT_ergodox(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_CAPS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_VOLU,KC_VOLD,
KC_TRNS,
KC_MUTE,KC_PAUS,KC_TRNS,
// right hand
KC_PSCR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_0, KC_COMM, KC_DOT, KC_EQL, KC_TRNS,
KC_MPRV, KC_MNXT,
KC_STOP,
KC_MPLY, RGB_VAD, RGB_VAI
),
};
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) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

View File

@@ -155,8 +155,8 @@ Datasheets
- AD5258: http://www.analog.com/media/en/technical-documentation/data-sheets/AD5258.pdf
- JST S5B-PH-SM4: http://www.jst-mfg.com/product/pdf/eng/ePH.pdf
- Hirose UX60SC-MB-5S8: https://www.hirose.com/product/en/products/UX/UX60SC-MB-5S8%2880%29/
- TYU TU1252WNR-05S: http://php2.twinner.com.tw/files/tyu/TU1252series.pdf
- Tr(E42) for LED?: http://cj-elec.com/txUpfile/2013614923661845.pdf
- TYU TU1252WNR-05S: http://php2.twinner.com.tw/files/goodjob/TY1252series.pdf
3.3V power supply

View File

@@ -49,6 +49,13 @@
/*tap dance definition */
#define TAPPING_TERM 200
//Mousekeys Settings
#define MOUSEKEY_INTERVAL 1
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 1
#define MOUSEKEY_MAX_SPEED 15
#define MOUSEKEY_WHEEL_DELAY 0
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS

View File

@@ -173,14 +173,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
// * | left | down | right | PrScr | SHIFT | CTRL | PgDn | END | [ | ] |
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
// * | | | | | | | | | ALT | / |
// * | P-Brk | | | | | | | RGUI | ALT | / |
// * '-----------------------------------------------------------------------------------------'
// */
//
[DIR] = KEYMAP( /* Directional Modifiers */
KC_TAB, KC_UP, KC_TRNS, KC_INS, KC_LCTL, KC_RSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL ,
KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_RCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC ,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_SLSH
KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_LALT, KC_SLSH
),
//
// /*
@@ -205,17 +205,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// /*
// * ETC
// * .-----------------------------------------------------------------------------------------.
// * | ` | | | | | | | | | \ |
// * | ` | mUP | | | | SHIFT | mUp | mDown | | \ |
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
// * | CAPS | P-Brk | | | | | | | ; | ' |
// * | mLeft | mDown | mRight | | SHIFT | | mBtn1 | mBtn2 | ; | ' |
// * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
// * | SHIFT | | | | | C-A-D | | GUI | | DEL |
// * | Sft//Cp| | | | | C-A-D | | | ALT | DEL |
// * '-----------------------------------------------------------------------------------------'
// */
//
[ETC] = KEYMAP( /* ETC */
KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS ,
KC_CAPS, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT ,
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LALT(LCTL(KC_DEL)), KC_TRNS, KC_RGUI, KC_TRNS, KC_DEL
KC_GRV, KC_MS_U, _______, _______, _______, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS ,
KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_LSFT, KC_TRNS, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT ,
TD(TD_SFT_CAPS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LALT(LCTL(KC_DEL)), KC_TRNS, KC_TRNS, KC_LALT, KC_DEL
),
};

View File

@@ -1,12 +1,47 @@
![Gherkin Wanleg Layout Image](https://i.imgur.com/RpN5N42.png)
![Gherkin Wanleg Layout Image](https://i.imgur.com/mXsgoro.png)
# Gherkin Wanleg Layout
Here is the layout I came up with to preserve a standard QWERTY layout as much as possible, in as few layers as possible for a 30 key board.
I originally set up a few Tap Dance keys, but eventually dropped most of them in favor of chorded versions, since in actual use, they tended to impede typing speed more than their (current) two-key versions.
I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions, since in actual use, they tended to impede typing speed more than their (current) two-key versions.
I've left them in my layout ready for use if anyone wants to try them out:
Single tap - Double tap - Hold
space - enter - shift
backspace - delete - control
shift - caps lock - XXXX
KC_Q - escape - XXXX
Legend Name | Single Tap | Double Tap | Hold
--- | --- | --- | ---
*null* | space | enter | shift
*null* | backspace | delete | control
Sft//Cp | shift | caps lock | *null*
Q//Esc | KC_Q | escape | *null*
# Gherkin Flashing
## Linux
The ProMicro doesn't like dfu-programmer, so we have to use AVRdude. What follows below are instructions for Linux taken from https://deskthority.net/workshop-f7/how-to-use-a-pro-micro-as-a-cheap-controller-converter-like-soarer-s-t8448.html
`ls /dev/tty*`
Next, plug in your device and re-run the command, the same as before:
`ls /dev/tty*`
There should be one more output device than was seen previously. For me, it's /dev/ttyACM0.
To flash the device, you need to have AVRdude installed. On Linux, you can do this with your normal package manager.
Once you have AVRdude set up, navigate to the directory with your .hex file in it. Then, run the following:
`avrdude -p atmega32u4 -P YOUR_SERIAL_PORT -c avr109 -U flash:w:YOUR_FILENAME.hex`
Of course, replace YOUR_SERIAL_PORT with your serial port's device name, and YOUR_FILENAME.hex with the appropriate filename. For me, this line looks like this:
`avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:Soarer_at2usb_v1.12_atmega32u4.hex`
If it says ''device not in sync'' or similar, your device is no longer in bootloader mode. Unplug it, and get it back into bootloader mode like you did in the previous step (or short the reset pin), and try again.
If this still doesn't work, try running the command again as root
`sudo avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:Soarer_at2usb_v1.12_atmega32u4.hex`
## Windows
1. Install the latest version of AVRdude for Windows from http://savannah.nongnu.org/projects/avrdude/
Test that it installed correctly by running "avrdude" from Command Prompt. It should display a usage message with version information at the end
2. Open Device Manager and take a look at your "Ports (COM & LPT)" section
3. Plug in the Gherkin and short the RESET pin on the microcontroller to Ground to put it into bootloader mode. Take note of the new COM device that shows up. After 8 seconds or so the microcontroller will leave bootloader mode and it will disappear from that section
4. Open Command Prompt and run the following (substituting "com7" with whatever port you saw earlier)
`avrdude -p atmega32u4 -P com7 -c avr109 -U flash:w:YOURHEX.hex`

View File

@@ -0,0 +1,7 @@
#include "../../config.h"
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
#define GRAVE_ESC_CTRL_OVERRIDE
#define PREVENT_STUCK_MODIFIERS
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
//#define TAPPING_TERM 200

View File

@@ -0,0 +1,288 @@
#include "gonnerd.h"
#include "version.h"
enum layers {
_BL = 0, // Base Layer
_WL, // Workman Layer
_NL, // Norman Layer
_DL, // Dvorak Layer
_CL, // Base Layer
_FL, // Function Layer
_AL, // Adjust Layer
};
enum gonnerd_keycodes {
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
};
#include "dynamic_macro.h"
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#define FN_CAPS LT(_FL, KC_CAPS)
#define KC_DMR1 DYN_REC_START1
#define KC_DMR2 DYN_REC_START2
#define KC_DMP1 DYN_MACRO_PLAY1
#define KC_DMP2 DYN_MACRO_PLAY2
#define KC_DMRS DYN_REC_STOP
static uint8_t current_layer;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* _BL: Base Layer, mostly standard TKL QWERTY layout.
* .-----------------------------------------------------------------------.
* |Esc||||| F1| F2| F3| F4||| F5| F6| F7| F8||| F9|F10|F11|F12|PSc|SLk|Pau|
* |-----------------------------------------------------------|-----------|
* | ~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|Hom|PgU|
* |-----------------------------------------------------------|-----------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
* |-----------------------------------------------------------|-----------|
* |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
* |-----------------------------------------------------------|-----------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
* |-----------------------------------------------------------|-----------|
* |Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
* *-----------------------------------------------------------------------*
*/
[_BL] = KEYMAP_TKL( \
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, 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, MO(_FL), KC_UP, \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* _WL: Workman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | -| =| | | | |
* |-----------------------------------------------------------|-----------|
* | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| S| H| T| G| Y| N| E| O| I| '| | |
* |-----------------------------------------------------------|-----------|
* | | Z| X| M| C| V| K| L| ,| .| /| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
*/
[_WL] = KEYMAP_TKL( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN, _______, _______, _______, _______, _______, _______, \
_______, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , _______, _______, _______, \
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _NL: Norman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | -| =| | | | |
* |-----------------------------------------------------------|-----------|
* | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| S| E| T| G| Y| N| I| O| H| '| | |
* |-----------------------------------------------------------|-----------|
* | | Z| X| C| V| B| P| M| ,| .| /| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
*/
[_NL] = KEYMAP_TKL( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_Q , KC_W , KC_D , KC_F , KC_K , KC_J , KC_U , KC_R , KC_L , KC_SCLN, _______, _______, _______, _______, _______, _______, \
_______, KC_A , KC_S , KC_E , KC_T , KC_G , KC_Y , KC_N , KC_I , KC_O , KC_H , _______, _______, _______, \
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _DL: Dvorak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | [| ]| | | | |
* |-----------------------------------------------------------|-----------|
* | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| O| E| U| I| D| H| T| N| S| -| | |
* |-----------------------------------------------------------|-----------|
* | | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
*/
[_DL] = KEYMAP_TKL( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, \
_______, KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLSH, KC_EQL , _______, _______, _______, _______, \
_______, KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS, _______, _______, \
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _CL: Colmak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | -| =| | | | |
* |-----------------------------------------------------------|-----------|
* | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| R| S| T| D| H| N| E| I| O| '| | |
* |-----------------------------------------------------------|-----------|
* | | Z| X| C| V| B| K| M| ,| .| /| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
*/
[_CL] = KEYMAP_TKL( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, _______, _______, _______, _______, _______, _______, \
_______, KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , _______, _______, _______, \
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _FL: Function Layer.
* M0 opens Chrome
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
* .-----------------------------------------------------------|-----------|
* | M0| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* |Fn_AL| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* |FnCaps| | | | | | |Lft|Dwn|Up |Rgt| | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| |WBk| |WFw|
* *-----------------------------------------------------------------------*
*/
[_FL] = KEYMAP_TKL( \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, \
M(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
XXXXXXX, XXXXXXX, KC_MENU, M(1), XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
),
/* _AL: Adjust Layer.
* Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
* .-----------------------------------------------------------------------.
* |Rst||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
* |-----------------------------------------------------------|-----------|
* |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
* |-----------------------------------------------------------|-----------|
* |FnCaps| | |_DL| | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | |_CL| |_BL|_NL| | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
*/
[_AL] = KEYMAP_TKL( \
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
F(0), RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS, KC_DMR2, KC_DMP2, \
_______, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
case 0:
if (record->event.pressed) {
return MACRO(I(0), D(LGUI), T(R), U(LGUI), END);
}
else {
SEND_STRING("chrome.exe\n");
return false;
}
break;
case 1:
if (record->event.pressed) {
return MACRO(I(0), T(SPC), T(SPC), T(SPC), T(SPC), END);
}
else {
return false;
}
break;
}
return MACRO_NONE;
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(0),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch (id) {
case 0:
if (record->event.pressed) {
SEND_STRING ("[QMK:" QMK_KEYBOARD ":" QMK_KEYMAP ":" QMK_VERSION "]");
}
break;
}
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
backlight_level(0);
#endif
}
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
if (current_layer == layer) {
}
else {
current_layer = layer;
switch (layer) {
case 0:
backlight_level(0);
break;
case 1:
backlight_level(1);
break;
case 2:
backlight_level(1);
break;
case 3:
backlight_level(1);
break;
case 4:
backlight_level(1);
break;
case 5:
backlight_level(2);
break;
case 6:
backlight_level(3);
break;
default:
backlight_level(0);
break;
}
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Enable Dynamic Macros.
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
return true;
}

View File

@@ -0,0 +1,120 @@
# Keymap Maintainer: Gam3cat
make gonnerd:gam3cat
## Layout Config:
2u backspace, 2.25u left shift/enter, 1.75u right shift.
2x1.5u, 1x7.0u, 2x1.5u, 3x1u bottom row.
FN_CAPS = MO(_FL) when held, CAPS when tapped.
GRAVE_ESC + GUI = `
GRAVE_ESC + SHIFT = ~
## Base Layer Selection:
(Caps+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
### Base Layer Options:
_BL: Base Layer, mostly standard TKL QWERTY layout.
.-----------------------------------------------------------------------.
|Esc||||| F1| F2| F3| F4||| F5| F6| F7| F8||| F9|F10|F11|F12|PSc|SLk|Pau|
|-----------------------------------------------------------|-----------|
| ~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|Hom|PgU|
|-----------------------------------------------------------|-----------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
|-----------------------------------------------------------|-----------|
|FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
|-----------------------------------------------------------|-----------|
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
|-----------------------------------------------------------|-----------|
|Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
*-----------------------------------------------------------------------*
_WL: Workman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | -| =| | | | |
|-----------------------------------------------------------|-----------|
| | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
|-----------------------------------------------------------|-----------|
| | A| S| H| T| G| Y| N| E| O| I| '| | |
|-----------------------------------------------------------|-----------|
| | Z| X| M| C| V| K| L| ,| .| /| | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
*-----------------------------------------------------------------------*
_NL: Norman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | -| =| | | | |
|-----------------------------------------------------------|-----------|
| | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
|-----------------------------------------------------------|-----------|
| | A| S| E| T| G| Y| N| I| O| H| '| | |
|-----------------------------------------------------------|-----------|
| | Z| X| C| V| B| P| M| ,| .| /| | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
*-----------------------------------------------------------------------*
_DL: Dvorak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | [| ]| | | | |
|-----------------------------------------------------------|-----------|
| | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
|-----------------------------------------------------------|-----------|
| | A| O| E| U| I| D| H| T| N| S| -| | |
|-----------------------------------------------------------|-----------|
| | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
*-----------------------------------------------------------------------*
_CL: Colmak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | -| =| | | | |
|-----------------------------------------------------------|-----------|
| | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
|-----------------------------------------------------------|-----------|
| | A| R| S| T| D| H| N| E| I| O| '| | |
|-----------------------------------------------------------|-----------|
| | Z| X| C| V| B| K| M| ,| .| /| | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
*-----------------------------------------------------------------------*
_FL: Function Layer.
M0 opens Chrome
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
.-----------------------------------------------------------|-----------|
| M0| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | |Lft|Dwn|Up |Rgt| | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| |WBk| |WFw|
*-----------------------------------------------------------------------*
_AL: Adjust Layer.
Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
.-----------------------------------------------------------------------.
|Rst||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
|Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|-----------------------------------------------------------|-----------|
|Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|-----------------------------------------------------------|-----------|
|FnCaps| | |_DL| | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | |_CL| |_BL|_NL| | | | | | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
*-----------------------------------------------------------------------*

View File

@@ -0,0 +1,21 @@
# 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 = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI 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. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -10,7 +10,7 @@ achieve a higher level of productivity if you take the time to learn its functio
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
For the full Quantum feature list, see [the parent readme.md](/docs/README.md).
## Building

View File

@@ -3,7 +3,7 @@ fivethirteen keyboard firmware
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
For the full Quantum feature list, see [the parent readme.md](/doc/README.md).
## Building

View File

@@ -76,7 +76,7 @@ This is the code for the KC_FN1 button. Notice how we check against what key is
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
For the full Quantum feature list, see [the parent readme.md](/docs/README.md).
## Building

View File

@@ -30,4 +30,4 @@ Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` fol
- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c)
- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck)
- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid)
- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck)

View File

@@ -3,7 +3,7 @@
## Quantum MK Firmware
For the full Quantum feature list, see [the parent README.md](/README.md).
For the full Quantum feature list, see [the parent README.md](/readme.md).
## Building

View File

@@ -14,7 +14,7 @@ You can make your own traveller keyboard by using the openscad tools from the a
## Quantum MK Firmware
For the full Quantum feature list, see [the parent README.md](/README.md).
For the full Quantum feature list, see [the parent README.md](/readme.md).
## Building

View File

@@ -0,0 +1 @@
#include "../../config.h"

View File

@@ -0,0 +1,35 @@
#include "v32u4.h"
// How long (in ms) to wait between animation steps for the breathing mode
const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
// How long (in ms) to wait between animation steps for the rainbow mode
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
// How long (in ms) to wait between animation steps for the swirl mode
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {30, 20, 3};
// How long (in ms) to wait between animation steps for the snake mode
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
// How long (in ms) to wait between animation steps for the knight modes
const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {127, 63, 31};
// These control which colors are selected for the gradient mode
const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[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_BSLS, KC_GRV, KC_PSCR,
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_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_SPACE, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = KEYMAP(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_PAUS, KC_TRNS,
KC_TRNS, RGB_TOG, 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_MOD, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS,
KC_TRNS, RGB_HUI, RGB_SAI, RGB_VAI, RGB_HUD, RGB_SAD, RGB_VAD, KC_DOWN, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MPLY, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View File

@@ -0,0 +1,10 @@
Dead's Keymap
===
Split backspace, 6.25u space, 2 Function Layers, reset + rgb controls on layer(2)
Intended usage: This is my daily driver keymap
===
Encryption Complete

View File

@@ -0,0 +1,7 @@
#include "../../config.h"
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
#define GRAVE_ESC_CTRL_OVERRIDE
#define PREVENT_STUCK_MODIFIERS
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
//#define TAPPING_TERM 200

View File

@@ -0,0 +1,279 @@
#include "jc65.h"
#include "version.h"
enum layers {
_BL = 0, // Base Layer
_WL, // Workman Layer
_NL, // Norman Layer
_DL, // Dvorak Layer
_CL, // Base Layer
_FL, // Function Layer
_AL, // Adjust Layer
};
enum jc65_keycodes {
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
};
#include "dynamic_macro.h"
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#define FN_CAPS LT(_FL, KC_CAPS)
#define KC_DMR1 DYN_REC_START1
#define KC_DMR2 DYN_REC_START2
#define KC_DMP1 DYN_MACRO_PLAY1
#define KC_DMP2 DYN_MACRO_PLAY2
#define KC_DMRS DYN_REC_STOP
static uint8_t current_layer;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* _BL: Base Layer, mostly standard 65% QWERTY layout.
* .---------------------------------------------------------------.
* |GrE| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|
* |---------------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
* |---------------------------------------------------------------|
* |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return |PgU|
* |---------------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
* |---------------------------------------------------------------|
* |Ctrl|Gui |Alt | Space |RAlt |Ctrl |Lft|Dwn|Rgt|
* *---------------------------------------------------------------*
*/
[_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, XXXXXXX, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
FN_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_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/* _WL: Workman Layer.
* .---------------------------------------------------------------.
* | | | | | | | | | | | | -| =| | |
* |---------------------------------------------------------------|
* | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| |
* |---------------------------------------------------------------|
* | | A| S| H| T| G| Y| N| E| O| I| '| | |
* |---------------------------------------------------------------|
* | | Z| X| M| C| V| K| L| ,| .| /| | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
*/
[_WL] = KEYMAP(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN, _______, _______, _______, _______,
_______, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , _______, _______, _______,
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* _NL: Norman Layer.
* .---------------------------------------------------------------.
* | | | | | | | | | | | | -| =| | |
* |---------------------------------------------------------------|
* | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| |
* |---------------------------------------------------------------|
* | | A| S| E| T| G| Y| N| I| O| H| '| | |
* |---------------------------------------------------------------|
* | | Z| X| C| V| B| P| M| ,| .| /| | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
*/
[_NL] = KEYMAP(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_Q , KC_W , KC_D , KC_F , KC_K , KC_J , KC_U , KC_R , KC_L , KC_SCLN, _______, _______, _______, _______,
_______, KC_A , KC_S , KC_E , KC_T , KC_G , KC_Y , KC_N , KC_I , KC_O , KC_H , _______, _______, _______,
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* _DL: Dvorak Layer.
* .---------------------------------------------------------------.
* | | | | | | | | | | | | [| ]| | |
* |---------------------------------------------------------------|
* | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| |
* |---------------------------------------------------------------|
* | | A| O| E| U| I| D| H| T| N| S| -| | |
* |---------------------------------------------------------------|
* | | ;| Q| J| K| X| B| M| W| V| Z| | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
*/
[_DL] = KEYMAP(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______,
_______, KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLSH, KC_EQL , _______, _______,
_______, KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS, _______, _______,
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* _CL: Colmak Layer.
* .---------------------------------------------------------------.
* | | | | | | | | | | | | -| =| | |
* |---------------------------------------------------------------|
* | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| |
* |---------------------------------------------------------------|
* | | A| R| S| T| D| H| N| E| I| O| '| | |
* |---------------------------------------------------------------|
* | | Z| X| C| V| B| K| M| ,| .| /| | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
*/
[_CL] = KEYMAP(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, _______, _______, _______, _______,
_______, KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , _______, _______, _______,
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* _FL: Function Layer.
* M0 opens Chrome
* .---------------------------------------------------------------.
* |M0 | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|SLock |PSc|
* |---------------------------------------------------------------|
* |Fn_AL| | | | | | | | | | | | | |Pau|
* |---------------------------------------------------------------|
* |FnCaps| | | | | |Lft|Dwn|Up |Rgt| | | |Hme|
* |---------------------------------------------------------------|
* | | | | | | | | | | | |VlMute|VlU|End|
* |---------------------------------------------------------------|
* | | |Menu| | | |WBk|VlD|WFw|
* *---------------------------------------------------------------*
*/
[_FL] = KEYMAP(
M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_SLCK, KC_PSCR,
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLU, KC_END,
XXXXXXX, XXXXXXX, KC_MENU, M(1), M(1), M(1), XXXXXXX, XXXXXXX, XXXXXXX, KC_WBAK, KC_VOLD, KC_WFWD
),
/* _AL: Adjust Layer.
* Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
* .---------------------------------------------------------------.
* |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
* |---------------------------------------------------------------|
* |Fn_AL|_BL|_WL| | | | | | | | | | | |MR1|
* |---------------------------------------------------------------|
* |FnCaps| | |_DL| | | | | | | | | |MS |
* |---------------------------------------------------------------|
* | | | |_CL| |_BL|_NL| | | | | | |MR2|
* |---------------------------------------------------------------|
* |Rst | | | | | | | |MP2|
* *---------------------------------------------------------------*
*/
[_AL] = KEYMAP(
F(0), RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMP1,
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR1,
_______, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR2,
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMP2
),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
case 0:
if (record->event.pressed) {
return MACRO(I(0), D(LGUI), T(R), U(LGUI), END);
}
else {
SEND_STRING("chrome.exe https://geekhack.org/index.php?topic=86756.new;topicseen#new\n");
return false;
}
break;
case 1:
if (record->event.pressed) {
return MACRO(I(0), T(SPC), T(SPC), T(SPC), T(SPC), END);
}
else {
return false;
}
break;
}
return MACRO_NONE;
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(0),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch (id) {
case 0:
if (record->event.pressed) {
SEND_STRING ("[QMK:" QMK_KEYBOARD ":" QMK_KEYMAP ":" QMK_VERSION "]");
}
break;
}
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
backlight_level(0);
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_mode(1);
rgblight_sethsv(180,100,100);
#endif
}
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
if (current_layer == layer) {
}
else {
current_layer = layer;
switch (layer) {
case 0:
backlight_level(0);
rgblight_sethsv(180,100,255);
break;
case 1:
backlight_level(1);
rgblight_sethsv(180,95,240);
break;
case 2:
backlight_level(1);
rgblight_sethsv(180,90,225);
break;
case 3:
backlight_level(1);
rgblight_sethsv(180,85,210);
break;
case 4:
backlight_level(1);
rgblight_sethsv(180,80,195);
break;
case 5:
backlight_level(2);
rgblight_sethsv(230,255,255);
break;
case 6:
backlight_level(3);
rgblight_sethsv(350,255,255);
break;
default:
backlight_level(0);
rgblight_sethsv(180,100,100);
break;
}
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Enable Dynamic Macros.
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
return true;
}

View File

@@ -0,0 +1,109 @@
# Keymap Maintainer: Gam3cat
make jc65/v32u4:gam3cat
## Layout Config:
2u backspace, 2.25u left shift/enter, 1.75u right shift.
(2x1.5u, 1x7.0u, 2x1.5u, 3x1u), (3x1.25u, 1x6.25u, 2x1.5u, 3x1u), or
(3x1.25u, 1x6.25u, 6x1u) bottom row.
FN_CAPS = MO(_FL) when held, CAPS when tapped.
GRAVE_ESC + GUI = `
GRAVE_ESC + SHIFT = ~
## Base Layer Selection:
(Caps+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
### Base Layer Options:
#### _BL: Base Layer, mostly standard 65% QWERTY layout.
.---------------------------------------------------------------.
|GrE| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|
|---------------------------------------------------------------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
|---------------------------------------------------------------|
|FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return |PgU|
|---------------------------------------------------------------|
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
|---------------------------------------------------------------|
|Ctrl|Gui |Alt | Space |RAlt |Ctrl |Lft|Dwn|Rgt|
*---------------------------------------------------------------*
#### _WL: Workman Layer.
.---------------------------------------------------------------.
| | | | | | | | | | | | -| =| | |
|---------------------------------------------------------------|
| | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| |
|---------------------------------------------------------------|
| | A| S| H| T| G| Y| N| E| O| I| '| | |
|---------------------------------------------------------------|
| | Z| X| M| C| V| K| L| ,| .| /| | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
#### _NL: Norman Layer.
.---------------------------------------------------------------.
| | | | | | | | | | | | -| =| | |
|---------------------------------------------------------------|
| | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| |
|---------------------------------------------------------------|
| | A| S| E| T| G| Y| N| I| O| H| '| | |
|---------------------------------------------------------------|
| | Z| X| C| V| B| P| M| ,| .| /| | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
#### _DL: Dvorak Layer.
.---------------------------------------------------------------.
| | | | | | | | | | | | [| ]| | |
|---------------------------------------------------------------|
| | '| ,| .| P| Y| F| G| C| R| L| /| =| \| |
|---------------------------------------------------------------|
| | A| O| E| U| I| D| H| T| N| S| -| | |
|---------------------------------------------------------------|
| | ;| Q| J| K| X| B| M| W| V| Z| | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
#### _CL: Colmak Layer.
.---------------------------------------------------------------.
| | | | | | | | | | | | -| =| | |
|---------------------------------------------------------------|
| | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| |
|---------------------------------------------------------------|
| | A| R| S| T| D| H| N| E| I| O| '| | |
|---------------------------------------------------------------|
| | Z| X| C| V| B| K| M| ,| .| /| | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
### Function Layer: (hold Caps to access)
M0 opens Chrome
#### _FL: Function Layer.
.---------------------------------------------------------------.
|M0 | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|SLock |PSc|
|---------------------------------------------------------------|
|Fn_AL| | | | | | | | | | | | | |Pau|
|---------------------------------------------------------------|
|FnCaps| | | | | |Lft|Dwn|Up |Rgt| | | |Hme|
|---------------------------------------------------------------|
| | | | | | | | | | | |VlMute|VlU|End|
|---------------------------------------------------------------|
| | |Menu| | | |WBk|VlD|WFw|
*---------------------------------------------------------------*
### Adjust Layer: (hold Caps+TAB to access)
Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
#### _AL: Adjust Layer.
.---------------------------------------------------------------.
|Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
|---------------------------------------------------------------|
|Fn_AL|_BL|_WL| | | | | | | | | | | |MR1|
|---------------------------------------------------------------|
|FnCaps| | |_DL| | | | | | | | | |MS |
|---------------------------------------------------------------|
| | | |_CL| |_BL|_NL| | | | | | |MR2|
|---------------------------------------------------------------|
|Rst | | | | | | | |MP2|
*---------------------------------------------------------------*

View File

@@ -0,0 +1,6 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
BACKLIGHT_ENABLE=yes
//TAP_DANCE_ENABLE=yes

View File

@@ -5,7 +5,7 @@ A compact 40% keyboard.
Keyboard Maintainer: QMK Community
Hardware Supported: JD40 PCB
Hardware Availability: [1up](https://1upkeyboards.com/jd40-mkii-1up-keyboards-logo-pcb.html) [mechanicalkeyboards.com](https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=2452) [originative](https://originative.co/products/jd40-pcb)
Hardware Availability: [1up](https://1upkeyboards.com/jd40-mkii-1up-keyboards-logo-pcb.html) [mechanicalkeyboards.com](https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=2452) [originative](https://www.originativeco.com/products/jd40-pcb)
Make example for this keyboard (after setting up your build environment):

View File

@@ -0,0 +1,8 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
#define PREVENT_STUCK_MODIFIERS
#endif

View File

@@ -0,0 +1,70 @@
/*
Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEYMAP_COMMON_H
#define KEYMAP_COMMON_H
#include "quantum.h"
// #include "keycode.h"
// #include "action.h"
#define KEYMAP_GRID( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312 \
) \
{ \
{ K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
{ K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
{ K312, K311, K310, K39, K35, K36, K37, K38, K34, K33, K32, K31 } \
}
#define KEYMAP_MIT( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
K31, K32, K33, K34, K35, K3X, K38, K39, K310, K311, K312 \
) \
{ \
{ K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
{ K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
{ K312, K311, K310, K39, K35, K3X, KC_NO, K38, K34, K33, K32, K31 } \
}
#define KEYMAP_OFFSET( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
K31, K32, K33, K34, K35, K36, K3X, K39, K310, K311, K312 \
) \
{ \
{ K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
{ K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
{ K312, K311, K310, K39, K35, K36, K3X, KC_NO, K34, K33, K32, K31 } \
}
#define KEYMAP KEYMAP_GRID
#define LAYOUT_ortho_4x12 LAYOUT_planck_grid
#endif

View File

@@ -0,0 +1,206 @@
#include "jj40.h"
#include "action_layer.h"
#include "eeconfig.h"
#include "keymap_uk.h"
extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
#define _FUNC 3
#define _ADJUST 16
#define _DYN 6
enum planck_keycodes {
QWERTY = SAFE_RANGE,
FUNC,
LOWER,
RAISE,
DYNAMIC_MACRO_RANGE
};
#include "dynamic_macro.h"
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn |
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = KEYMAP(\
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,\
MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) ,\
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT ,\
MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC) \
),
/* Function
* ,-----------------------------------------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | MENU | Alt | Ctrl | Fn |
* `-----------------------------------------------------------------------------------'
*/
[_FUNC] = KEYMAP(\
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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, UK_TILD, KC_INSERT ,\
KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,\
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* Lower
* ,-----------------------------------------------------------------------------------.
* | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_LOWER] = KEYMAP(\
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC ,\
LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC) ,\
KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,\
_______, _______, _______, _______, _______, KC_DEL, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | { | } | | |< | LEFT | DOWN |RIGHT | >| |ZOOM -|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | Alt | Enter|Raise | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_RAISE] = KEYMAP(\
KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN ,\
KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) ,\
_______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) ,\
_______, _______, _______, _______, _______, KC_LALT, KC_ENT, _______, XXXXXXX, _______, _______, _______ \
),
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | ???? | Reset|Qwerty| | | | | | | | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | CAPS | | | | | | | Mute | Vol+ | Play | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | | | Prev | Vol- | Next | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | DYN | | | |
* `-----------------------------------------------------------------------------------'
*/
[_ADJUST] = KEYMAP(\
M(0), RESET, QWERTY, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,\
KC_CAPS, _______, _______, _______, _______, _______, _______, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,\
_______, _______, _______, _______, _______, _______, _______, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,\
_______, _______, _______, _______, _______, _______, _______, _______, MO(_DYN), _______, _______, _______ \
),
/* DYN: Macro Recording and Playback
* ,-----------------------------------------------------------------------------------.
* | | | | | | REC1 | REC2 | | | | | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | | | | PLAY1| PLAY2| | | | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | STOP | STOP | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_DYN]= KEYMAP(\
_______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, _______,\
_______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______,\
_______, _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, _______, _______, _______, _______, _______,\
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
)
};
void persistant_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
persistant_default_layer_set(1UL<<_QWERTY);
}
return false;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
}
return true;
}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
// These would trigger when you hit a key mapped as M(0)
case 0:
if (record->event.pressed) {
return MACRO(
// SENSITIVE
END
);
}
break;
case 1: // Word Select
if (record->event.pressed) {
return MACRO(
DOWN(KC_LCTL), DOWN(KC_RIGHT), UP(KC_RIGHT), DOWN(KC_LSFT), DOWN(KC_LEFT), UP(KC_LEFT), UP(KC_LSFT), UP(KC_LCTL),
END
);
}
}
return MACRO_NONE;
};

View File

@@ -0,0 +1,91 @@
# AJP10304 Custom JJ40 Layout
###Based on my Planck layout of the same name.
**Note:** In the tables below where there are two characters on a key,
the second is the output when shift is applied.
**Note:** The below tables assume a UK layout.
##### Main Qwerty Layer
* Tab: when held, operates as shift.
* Enter: when held, operates as shift.
* MENU: perform right-click
| | | | | | | | | | | | |
| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
| Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
| Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
| Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn |
##### Function Layer
Activated when `fn` held in the above `qwerty` layer.
| | | | | | | | | | | | |
| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
| Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | MENU | Alt | Ctrl | Fn |
##### Lower Layer
Activated when `Lower` is held in the above `qwerty` layer.
* Numbers are along the top row, their shifted counterparts are on row 2.
* WrdBks: `backspace` with `ctrl` applied. I.e. delete a word.
* WrdDel: `delete` with `ctrl` applied. I.e. forward delete a word.
| | | | | | | | | | | | |
| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
| ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
##### Raise Layer
Activated when `Raise` is held in the above `qwerty` layer.
* Preferred layer for typing brackets.
* Allows for cursor navigation to be used solely with the right hand.
* WRDSEL: Select the word where the cursor is.
* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
| | | | | | | | | | | | |
| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
| ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
| ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
| | | | { | } | |&#124;<| LEFT | DOWN |RIGHT |>&#124;|ZOOM -|
| | | | | | Alt | Enter |Raise | | | | |
##### Lower + Raise
Activated when `Lower` and `Raise` are held together the above `qwerty` layer.
* Audio controls in the same position as cursor keys from the `Raise` layer.
* ????: Runs a macro for outputting a text string. Do not use this store passwords.
* Reset: Enter bootloader for flashing firmware to the keyboard.
* CAPS: Toggle caps lock.
* DYN: Enter `DYN` layer.
| | | | | | | | | | | | |
| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
| ???? | Reset|Qwerty| | | | | | | | | Del |
| CAPS | | | | | | | Mute | Vol+ | Play | | |
| | | | | | | | Prev | Vol- | Next | | |
| | | | | | | | | DYN | | | |
##### DYN
Activated when `DYN` held along with `Lower` and `Raise`
Allows recording of macros. To start recording the macro, press either REC1 or REC2.
To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2.
| | | | | | | | | | | | |
| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
| | | | | | REC1 | REC2 | | | | | |
| | | | | | PLAY1| PLAY2| | | | | |
| | | | | | STOP | STOP | | | | | |
| | | | | | | | | | | | |
####Manual Flashing of hex file
`bootloadHID -r .build/jj40_ajp10304.hex`

View File

@@ -0,0 +1,5 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
AUDIO_ENABLE = no

View File

@@ -0,0 +1,24 @@
/* Copyright 2018 Alex Peters
*
* 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
#include "config_common.h"
// place overrides here
#endif

View File

@@ -0,0 +1,69 @@
#include "kbd66.h"
#define _MA 0
#define _GA 1
#define _FL 2
#define _AR 3
#define _LE 4
#define _LO 5
#define _UL 6
#define TRNS KC_TRNS
#define ______ KC_NO
#define trigger_time 400
#define LSHIFT OSM(MOD_LSFT)
#define SPACE LT(_AR, KC_SPC)
#define CAPS LT(_LE, KC_CAPS)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Main Layer
[_MA] = KEYMAP_ANSI(
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_MPLY, KC_BSPC, KC_PSCR,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
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,
LSHIFT, TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TRNS, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, SPACE, SPACE, KC_RALT, KC_RCTRL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
//Function Layer
[_FL] = KEYMAP_ANSI(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TRNS, RESET, KC_PGUP,
TRNS, KC_BTN1, KC_MS_U, KC_BTN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_PGDN,
TRNS, KC_MS_L, KC_MS_D, KC_MS_R, TRNS, TG(_GA), TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_VOLD, KC_VOLU, KC_MUTE, TRNS, TRNS, KC_WH_U,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_WH_L, KC_WH_D, KC_WH_R),
//Arrow keys layer (space bar)
[_AR] = KEYMAP_ANSI(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, M(0), TRNS, TRNS, TRNS),
//LED control layer (caps)
[_LE] = KEYMAP_ANSI(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, BL_TOGG, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, BL_INC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, BL_DEC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
//Game layer (fn + g)
[_GA] = KEYMAP_ANSI(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
KC_CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
KC_LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, KC_SPC, KC_SPC, TRNS, TRNS, MO(_FL), TRNS, TRNS, TRNS),
};
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("AdminF123!");
}
break;
}
return MACRO_NONE;
};

View File

@@ -0,0 +1,3 @@
# Maartenwut's KBD66 layout
This is Maartenwut's layout, which is really similar to Maartenwut's Tada68 layout.

View File

@@ -23,7 +23,7 @@ Not yet implemented:
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
For the full Quantum feature list, see [the parent readme.md](/docs/README.md).
## Building

View File

@@ -26,18 +26,18 @@ If you want to perform this customization, these parts may be helpful.
| Reset cables | 2 | Sparkfun | PRT-09140 |
The board and connections are shown here
![](images/controller_board.jpg)
![controller board](https://i.imgur.com/2ZPMwvZ.jpg)
The Teensy mounting detail can be seen here.
I used a socket for prototyping.
![](images/teensy_detail.jpg)
![teensy detail](https://i.imgur.com/HrkGUjc.jpg)
Since the proper mounting of the Teensy board places the reset button in a tight space, I added a 2-pin header to the reset and ground pins on the edge of the board.
Shorting these two pins together will reset the board.
I also put female to male header jumper cables on these so they could be accessed outside the enclosure.
The exterior cables can be seen here.
![](images/exterior_reset.jpg)
![exterior reset](https://i.imgur.com/JNoxI40.jpg)
## Keymaps
@@ -52,7 +52,3 @@ To build with the default keymap, run `make default` while in the
This keymap contains a dvorak implementation as well as media and symbol layers.
Run `make dvorak` while in the `kinesis_stapelberg` working directory.
![controller board](https://i.imgur.com/2ZPMwvZ.jpg)
![exterior reset](https://i.imgur.com/JNoxI40.jpg)
![teensy detail](https://i.imgur.com/HrkGUjc.jpg)

View File

@@ -33,7 +33,7 @@ A [keymap](keymaps/winkeyless) for the winkeyless version of the PCB are also pr
### Custom keymaps
To define your own keymap, copy one of the [existing keymap](keymaps) folders and give it the name of your keymap. Then check the [keymap documentation](https://docs.qmk.fm/Keymap.html) for details on how to modify the keymap.
To define your own keymap, copy one of the [existing keymap](keymaps) folders and give it the name of your keymap. Then check the [keymap documentation](https://docs.qmk.fm/faq_keymap.html) for details on how to modify the keymap.
To make it easy to define keymaps for the different versions of the PCB two macros are provided.

View File

@@ -44,7 +44,7 @@ If everything worked correctly you will see a file:
lets_split_rev2_YOUR_KEYMAP_NAME.hex
```
For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md.
For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/docs/faq_keymap.md) in the main readme.md.
### Let's split 1.0
If you have a first generation Let's Split you will need to use the revision 1 code. To do so, use `rev1` in all your commands instead.

View File

@@ -0,0 +1,8 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// place overrides here
#endif

View File

@@ -0,0 +1,197 @@
#include "lfk78.h"
#include "issi.h"
#include "lighting.h"
#include "action_layer.h"
#include "process_tap_dance.h"
//Define a shorter 'transparent' key code to make the keymaps more compact
#define KC_TR KC_TRNS
enum keymap_layout {
VANILLA = 0, // matches MF68 layout
CS_GO, // 0x08
FUNC, // 0x10
SETTINGS, // 0x20
};
enum {
TD_ESC_FUNC = 0,
TD_ESC_CTRL,
TD_SPC_SPAM
};
bool spam_space = false;
// {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
// {0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
// {0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
// {0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
// {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
// Layer Mask Red Green Blue
{0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
{0x00000002, 0xFFFFFFFE, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
{0x00000004, 0xFFFFFFFC, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
{0x00000008, 0xFFFFFFE8, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap BASE: (Base Layer) Default Layer
* ,---------. ,------------------------------------------------------------. ,---------.
* |Vol-|Vol+| |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
* |---------| |------------------------------------------------------------| |---------|
* | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del|PgDn|
* |---------| |------------------------------------------------------------| `---------'
* | F5 | F6 | |Control | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |---------| |------------------------------------------------------------| ,----.
* | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift | | Up |
* |---------| |-------------------------------------------------------------------------.
* | F9 | F10| |Func|Alt |Cmd | Space |Cmd |Alt |Func | |Lft| Dn |Rig |
* `---------' `------------------------------------------------------' `-------------'
*/
[VANILLA] = SPLIT_SHIFT_KEYMAP(
KC_VOLD, KC_VOLU, KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, LALT(KC_F5), KC_PGUP,
KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
KC_F5, KC_F6, TD(TD_ESC_FUNC), 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_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(CS_GO), KC_UP,
KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
[CS_GO] = SPLIT_SHIFT_KEYMAP(
KC_TR, KC_TR, KC_GESC, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_FN0, KC_TR,
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
KC_TR, KC_TR, KC_LCTL, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR,
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
/* Keymap FUNCTION: Function Layer
* ,---------. ,-------------------------------------------------------------. ,---------.
* | V- | V+ | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
* |---------| |-------------------------------------------------------------| |---------|
* | | | |Tab | |PgU| | | | | | Up| | | | | | | Del|End |
* |---------| |-------------------------------------------------------------| `---------'
* | | | |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
* |---------| |-------------------------------------------------------------| ,----.
* | | | |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
* |---------| |--------------------------------------------------------------------------.
* | | F10| |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
* `---------' `------------------------------------------------------' `-------------'
*/
[FUNC] = SPLIT_SHIFT_KEYMAP(
KC_TR, KC_TR, 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, TO(CS_GO), KC_HOME,
KC_TR, KC_TR, KC_NO,KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_END,
KC_TR, KC_TR, KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO,
KC_TR, KC_TR, KC_TR, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_NO, KC_TR,
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
/* Keymap SETTINGS: Settings Layer
* ,---------. ,-----------------------------------------------------------. ,-------------.
* | | | |FN0 |BL0|BL1|BL2|BL3| | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
* |---------| |-----------------------------------------------------------| |-------------|
* | | | |Debug| | | | | | | | | | | | |RGBTst| |RGB Mode|Val-|
* |---------| |-----------------------------------------------------------| `-------------'
* | | | |LayrClr|Hz+|MS+| | | | | | | | | | RST |
* |---------| |-----------------------------------------------------------| ,----.
* | | | |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
* |---------| |------------------------------------------------------------------------.
* | | | | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
* `---------' `------------------------------------------------------' `--------------'
*/
[SETTINGS] = SPLIT_SHIFT_KEYMAP(
KC_NO, KC_NO, KC_FN0,KC_FN3,KC_FN4,KC_FN5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
KC_NO, KC_NO, DEBUG, 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, RGB_MOD, RGB_VAD,
KC_NO, KC_NO, KC_FN0, KC_FN6,KC_FN8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
KC_NO, KC_NO, KC_FN10, KC_FN7,KC_FN9, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN0, KC_NO, RGB_HUI,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_FN0, RGB_SAD, RGB_HUD, RGB_SAI),
};
void tap_space_spam_finished(qk_tap_dance_state_t *state, void *user_data) {
if(get_mods() & (MOD_BIT(KC_LGUI))){
return;
}
if(state->pressed){
spam_space = true;
}
register_code(KC_SPC);
unregister_code(KC_SPC);
}
void tap_space_spam_reset(qk_tap_dance_state_t *state, void *user_data) {
spam_space = false;
unregister_code(KC_SPC);
}
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
if(state->pressed){
layer_on(FUNC);
}else{
register_code(KC_ESC);
unregister_code(KC_ESC);
}
}
void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
layer_off(FUNC);
}
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
[TD_SPC_SPAM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_space_spam_finished, tap_space_spam_reset),
};
const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
ACTION_FUNCTION(LFK_LED_TEST), // FN2 - cycle through LEDs for testing
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN3 - set base layer to 0 and save
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN4 - set base layer to 1 and save
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN5 - set base layer to 2 and save
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN6 - Increase Freq of audio click
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN7 - Decrease Freq of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN8 - Increase length of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN9 - Decrease length of audio click
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN10 - Toggle audio click
ACTION_FUNCTION(LFK_LED_TEST), // FN11 - cycle through LEDs for testing
ACTION_FUNCTION(LFK_DEBUG_SETTINGS), // FN12 - prints LED and click settings to HID
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
}
return MACRO_NONE;
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
if(spam_space && !(get_mods() & (MOD_BIT(KC_LGUI)))){
register_code(KC_SPC);
unregister_code(KC_SPC);
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if((layer_state & (1 << CS_GO)) && (keycode == 44)){
if(get_mods() & (MOD_BIT(KC_LGUI))){
return false;
}
}
return true;
}
void led_set_user(uint8_t usb_led) {
}

View File

@@ -0,0 +1 @@
# The default keymap for bluepad

View File

@@ -0,0 +1,53 @@
# 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 = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Disable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable RGB underlight
RGBLIGHT_CUSTOM_DRIVER = no # RGB code is implemented in lefkeyboards, not WS2812
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
# #
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
# #
# # Set to B, C or D
# LFK_REV = D
# ifeq ($(LFK_REV), B)
# MCU = atmega32u4
# else
# MCU = at90usb1286
# endif
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"

View File

@@ -19,8 +19,9 @@ RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not q
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
ifndef QUANTUM_DIR
include ../../../../Makefile
@@ -34,6 +35,10 @@ ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
ifeq ($(strip $(CAPSLOCK_LED)), yes)
TMK_COMMON_DEFS += -DCAPSLOCK_LED
endif
# Override the LFK78 hardware version:
#
# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight

View File

@@ -0,0 +1,8 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// place overrides here
#endif

View File

@@ -0,0 +1,125 @@
#include "lfk78.h"
#include "issi.h"
#include "lighting.h"
#include "action_layer.h"
//Define a shorter 'transparent' key code to make the keymaps more compact
#define KC_TR KC_TRNS
enum keymap_layout {
VANILLA = 0, // matches MF68 layout
FUNC, // 0x02
SETTINGS, // 0x04
};
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
// Layer Mask Red Green Blue
{0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
{0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
{0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[VANILLA] = ISO_KEYMAP(
/* Keymap VANILLA: (Base Layer) Default Layer
* ,---------. ,------------------------------------------------------------. ,---------.
* | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backspa| | Ins|PgUp|
* |---------| |------------------------------------------------------------| |---------|
* | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret| | Del|PgDn|
* |---------| |--------------------------------------------------------. | `---------'
* | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | |
* |---------| |-----------------------------------------------------------| ,----.
* | F7 | F8 | |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |---------| |-------------------------------------------------------------------------.
* | F9 | F10| |Ctrl|Win |Alt | Space |Alt |Ctrl|Func | |Lft| Dn |Rig |
* `---------' `------------------------------------------------------' `-------------'
*/
KC_F1, KC_F2, KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
KC_F3, KC_F4, 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_ENT, KC_DEL, KC_PGDN,
KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS,
KC_F7, KC_F8, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap FUNCTION: Function Layer
* ,---------. ,-------------------------------------------------------------. ,---------.
* | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | Ins|Home|
* |---------| |-------------------------------------------------------------| |---------|
* | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End |
* |---------| |-------------------------------------------------------------| `---------'
* | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | |
* |---------| |-------------------------------------------------------------| ,----.
* | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
* |---------| |--------------------------------------------------------------------------.
* | | | |Ctrl|Win |Alt | PgD |Alt |Func |CTRL | |Lft| Dn |Rig |
* `---------' `------------------------------------------------------' `-------------'
*/
[FUNC] = KEYMAP(
KC_TR, KC_TR, 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_TR, KC_HOME,
KC_TR, KC_TR, KC_NO,KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_END,
KC_TR, KC_TR, KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_NO,
KC_TR, KC_TR, KC_TR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR,
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
/* Keymap SETTINGS: Settings Layer
* ,---------. ,-------------------------------------------------------------. ,-------------.
* | | | |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
* |---------| |-------------------------------------------------------------| |-------------|
* | | | |MuMode | | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
* |---------| |-------------------------------------------------------------| `-------------'
* | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST |
* |---------| |-------------------------------------------------------------| ,----.
* | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+|
* |---------| |-------------------------------------------------------------------------.
* | | | | | | | | | | | |Sat-|Hue-|Sat+|
* `---------' `--------------------------------------------------------' `--------------'
*/
[SETTINGS] = KEYMAP(
KC_NO, KC_NO, KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI,
KC_NO, KC_NO, MU_MOD, 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, RGB_MOD, RGB_VAD,
KC_NO, KC_NO, AU_TOG, KC_FN1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
KC_NO, KC_NO, KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SAD, RGB_HUD, RGB_SAI),
};
const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
}
return MACRO_NONE;
};
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
eeconfig_update_default_layer(1);
default_layer_set(1);
}
}
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) {
}

View File

@@ -0,0 +1 @@
# The default keymap for bluepad

View File

@@ -0,0 +1,53 @@
# 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 = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
# #
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
# #
# # Set to B, C or D
# LFK_REV = D
# ifeq ($(LFK_REV), B)
# MCU = atmega32u4
# else
# MCU = at90usb1286
# endif
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"

View File

@@ -0,0 +1,8 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// place overrides here
#endif

View File

@@ -0,0 +1,123 @@
#include "lfk78.h"
#include "issi.h"
#include "lighting.h"
#include "action_layer.h"
//Define a shorter 'transparent' key code to make the keymaps more compact
#define KC_TR KC_TRNS
enum keymap_layout {
VANILLA = 0, // matches MF68 layout
FUNC, // 0x02
SETTINGS, // 0x04
};
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
// Layer Mask Red Green Blue
{0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
{0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
{0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[VANILLA] = SPLIT_BS_KEYMAP(
/* Keymap VANILLA: (Base Layer) Default Layer
* ,---------. ,------------------------------------------------------------. ,---------.
* | F1 | F2 | |Esc~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = | / | ` | | Ins|PgUp|
* |---------| |------------------------------------------------------------| |---------|
* | F3 | F4 | |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backsp| | Del|PgDn|
* |---------| |------------------------------------------------------------| `---------'
* | F5 | F6 | |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |---------| |------------------------------------------------------------| ,----.
* | F7 | F8 | |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |---------| |-------------------------------------------------------------------------.
* | F9 | F10| |Ctrl|Alt |Cmd | Space |Cmd |Ctrl|Func | |Lft| Dn |Rig |
* `---------' `------------------------------------------------------' `-------------'
*/
KC_F1, KC_F2, 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_BSLS, KC_GRV, KC_INS, KC_PGUP,
KC_F3, KC_F4, 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_DEL, KC_PGDN,
KC_F5, KC_F6, 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_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_F9, KC_F10, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap FUNCTION: Function Layer
* ,---------. ,-------------------------------------------------------------. ,---------.
* | | | | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Ins |Del | | Ins|Home|
* |---------| |-------------------------------------------------------------| |---------|
* | | | |Tab |Hom| Up|End|PgU| | | | | | | | | | | Del|End |
* |---------| |-------------------------------------------------------------| `---------'
* | | | |MO(FUNC)|Lft|Dn |Rig|PgD| |Lft|Dwn| Up|Rgt| | | |
* |---------| |-------------------------------------------------------------| ,----.
* | | | |Shift | | | | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
* |---------| |--------------------------------------------------------------------------.
* | | | |Ctrl|Alt |Cmd | Enter |Alt |Func |CTRL | |Lft| Dn |Rig |
* `---------' `------------------------------------------------------' `-------------'
*/
[FUNC] = SPLIT_BS_KEYMAP(
KC_TR, KC_TR, 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_INS, KC_DEL, KC_TR, KC_HOME,
KC_TR, KC_TR, KC_NO,KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_END,
KC_TR, KC_TR, KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_NO,
KC_TR, KC_TR, KC_TR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR,
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_ENT, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
/* Keymap SETTINGS: Settings Layer
* ,---------. ,-------------------------------------------------------------. ,-------------.
* | | | |LayClr| | | | | | | | | | |BL-|BL+| | | |RGB Tog |Val+|
* |---------| |-------------------------------------------------------------| |-------------|
* | | | |MuMode | | | | | | | | | | | | |BLTogl| |RGB Mode|Val-|
* |---------| |-------------------------------------------------------------| `-------------'
* | | | |AudTgl |Hz+|MS+| | | | | | | | | | RST |
* |---------| |-------------------------------------------------------------| ,----.
* | | | |ClickTgl |Hz-|MS-| | | | |MuTgl| | | |Layer Clr | |Hue+|
* |---------| |-------------------------------------------------------------------------.
* | | | | | | | | | | | |Sat-|Hue-|Sat+|
* `---------' `--------------------------------------------------------' `--------------'
*/
[SETTINGS] = SPLIT_BS_KEYMAP(
KC_NO, KC_NO, KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, KC_NO, KC_NO, RGB_TOG, RGB_VAI,
KC_NO, KC_NO, MU_MOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_TOGG, RGB_MOD, RGB_VAD,
KC_NO, KC_NO, AU_TOG, KC_FN1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
KC_NO, KC_NO, KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SAD, RGB_HUD, RGB_SAI),
};
const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
}
return MACRO_NONE;
};
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
eeconfig_update_default_layer(1);
default_layer_set(1);
}
}
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) {
}

View File

@@ -0,0 +1 @@
# The split bs keymap for LFK78

View File

@@ -0,0 +1,47 @@
# 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 = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
ifeq ($(strip $(CAPSLOCK_LED)), yes)
TMK_COMMON_DEFS += -DCAPSLOCK_LED
endif
# Override the LFK78 hardware version:
#
# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
# C-H - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
# J - at90usb646, C6 audio, ISSI device 0 is backlight, 4 is RGB
# LFK_REV = J

View File

@@ -200,7 +200,15 @@ void reset_keyboard_kb(){
void led_set_kb(uint8_t usb_led)
{
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
#ifdef ISSI_ENABLE
#ifdef CAPSLOCK_LED
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
activateLED(0, 3, 7, 255);
}else{
activateLED(0, 3, 7, 0);
}
#endif // CAPSLOCK_LED
#endif // ISS_ENABLE
led_set_user(usb_led);
}

View File

@@ -91,7 +91,7 @@ void click(uint16_t freq, uint16_t duration);
{ k90, k91, k92, k93, k94, k95, k96, k97, }, \
}
#else
/* RevC/D Keymap */
/* RevC+ Keymap */
// This a shortcut to help you visually see your layout.
/*
* ,---------. ,-----------------------------------------------------------------------. ,---------.
@@ -122,6 +122,20 @@ void click(uint16_t freq, uint16_t duration);
{k51, k52, k53, k54, k55, KC_NO, KC_NO, KC_NO, k59, KC_NO, KC_NO, KC_NO, k5D, k5E, k5F, k5G, k5H, k5I} \
}
#define SPLIT_BS_KEYMAP( \
k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k3G, k1H, k1I, \
k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, \
k41, k42, k43, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4H, \
k51, k52, k53, k54, k55, k59, k5D, k5E, k5F, k5G, k5H, k5I \
) { \
{k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I}, \
{k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I}, \
{k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G, KC_NO, KC_NO}, \
{k41, k42, k43, KC_NO, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, KC_NO, k4H, KC_NO}, \
{k51, k52, k53, k54, k55, KC_NO, KC_NO, KC_NO, k59, KC_NO, KC_NO, KC_NO, k5D, k5E, k5F, k5G, k5H, k5I} \
}
#define SPLIT_SHIFT_KEYMAP( \
k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, \
k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, \

View File

@@ -0,0 +1,8 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// place overrides here
#endif

View File

@@ -0,0 +1,223 @@
#include "lfk87.h"
#include "issi.h"
#include "lighting.h"
#include "action_layer.h"
#include "process_tap_dance.h"
//Define a shorter 'transparent' key code to make the keymaps more compact
#define KC_TR KC_TRNS
enum keymap_layout {
VANILLA = 0, // matches MF68 layout
DEFAULT_WKL, // 0x02 Function in CapsLock location, gui key disabled
DEFAULT_OSX, // 0x04 Function in CapsLock location, gui/alt swapped for OSX
CS_GO, // 0x08 Function in CapsLock location, gui/alt swapped for OSX
FUNC, // 0x10
SETTINGS, // 0x20
};
enum {
TD_ESC_FUNC = 0,
};
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
// Layer Mask Red Green Blue
{0x00000000, 0xFFFFFFF8, {0x00, 0xFF, 0x00}}, // base layers (VANILLA, DEFAULT_WKL, DEFAULT_OSX) - green
{0x00000008, 0xFFFFFFF8, {0x07FF, 0x07FF, 0x0000}}, // CSGO layer - orange
{0x00000010, 0xFFFFFFF0, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
{0x00000020, 0xFFFFFFE0, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
{0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[VANILLA] = KEYMAP(
/* Keymap VANILLA: (Base Layer) Default Layer
* ,-----------------------------------------------------------------------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
* |-----------------------------------------------------------| |--------------|
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
* |-----------------------------------------------------------| |--------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
* |-----------------------------------------------------------| `--------------'
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------| ,----.
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |-----------------------------------------------------------| ,-------------.
* |Ctrl|Gui |Alt | Space |ALT |GUI |CTRL |Func| |Lft| Dn |Rig |
* `-----------------------------------------------------------' `-------------'
*/
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DELETE, KC_END, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC), MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap DEFAULT_TKL: (Base Layer) Default Layer
* ,-----------------------------------------------------------------------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
* |-----------------------------------------------------------| |--------------|
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
* |-----------------------------------------------------------| |--------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
* |-----------------------------------------------------------| `--------------'
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------| ,----.
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |-----------------------------------------------------------| ,-------------.
* |Ctrl| |Alt | Space |ALT | |CTRL |Func| |Lft| Dn |Rig |
* `-----------------------------------------------------------' `-------------'
*/
[DEFAULT_WKL] = KEYMAP(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
KC_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_DELETE, KC_END, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(FUNC), KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap DEFAULT_OSX: (Base Layer) Default Layer
* ,-----------------------------------------------------------------------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
* |-----------------------------------------------------------| |--------------|
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
* |-----------------------------------------------------------| |--------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
* |-----------------------------------------------------------| `--------------'
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------| ,----.
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |-----------------------------------------------------------| ,-------------.
* |Ctrl| Opt |Cmd | Space |Cmd |Opt |CTRL |Func| |Lft| Dn |Rig |
* `-----------------------------------------------------------' `-------------'
*/
[DEFAULT_OSX] = KEYMAP(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_SLCK, KC_PAUS, LALT(KC_F5), \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DELETE, KC_END, KC_PGDN, \
TD(TD_ESC_FUNC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, MO(FUNC),MO(SETTINGS), KC_LEFT, KC_DOWN, KC_RGHT),
[CS_GO] = KEYMAP(
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_FN0, KC_TR, KC_TR, \
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
KC_LCTL, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, \
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
/* Keymap FUNCTION: Function Layer
* ,-------------------------------------------------------------. ,--------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
* |-------------------------------------------------------------| |--------------|
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
* |-------------------------------------------------------------| |--------------|
* |Tab | |PgU| | | | | | Up| | | | | | | | | |
* |-------------------------------------------------------------| `--------------'
* |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
* |-------------------------------------------------------------| ,----.
* |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
* |-------------------------------------------------------------' ,-------------.
* |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
* `------------------------------------------------------' `-------------'
*/
[FUNC] = KEYMAP(
KC_ESC, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PSCR, KC_SLCK, KC_PAUS, \
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_DEL, TO(CS_GO), KC_TR, KC_TR, \
KC_NO,KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_TR, KC_TR, \
KC_TR, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, \
KC_TR, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR, \
KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
/* Keymap SETTINGS: Settings Layer
* ,-----------------------------------------------------------. ,-------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
* |-------------------------------------------------------------| |--------------|
* |LayClr| | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
* |-----------------------------------------------------------| |-------------|
* |Debug| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
* |-----------------------------------------------------------| `-------------'
* |AU_TOG |Hz+|MS+| | | | | | | | | | RST |
* |-----------------------------------------------------------| ,----.
* |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
* |------------------------------------------------------------------------.
* | | | | Print Debug | | | | |Sat-|Hue-|Sat+|
* `------------------------------------------------------' `--------------'
*/
[SETTINGS] = KEYMAP(
KC_FN13, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, KC_NO, KC_NO, KC_NO,
KC_FN0,KC_FN3,KC_FN4,KC_FN5, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, KC_NO,
MU_MOD, 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_FN2, RGB_MOD, RGB_VAD, KC_NO,
AU_TOG, KC_FN6,KC_FN8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
KC_FN10, KC_FN7,KC_FN9, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_FN0, RGB_HUI,
KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_NO, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
};
void tap_esc_func_finished(qk_tap_dance_state_t *state, void *user_data) {
if(state->pressed){
layer_on(FUNC);
}else{
register_code(KC_ESC);
unregister_code(KC_ESC);
}
}
void tap_esc_func_reset(qk_tap_dance_state_t *state, void *user_data) {
layer_off(FUNC);
}
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_ESC_FUNC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_esc_func_finished, tap_esc_func_reset),
};
const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
ACTION_FUNCTION(LFK_ESC_TILDE), // FN1 - esc+shift = ~, else escape
ACTION_FUNCTION(LFK_LED_TEST), // FN2 - cycle through LEDs for testing
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, VANILLA), // FN3 - set base layer to 0 and save
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, DEFAULT_WKL), // FN4 - set base layer to 1 and save
ACTION_FUNCTION_OPT(LFK_SET_DEFAULT_LAYER, DEFAULT_OSX), // FN5 - set base layer to 2 and save
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN6 - Increase Freq of audio click
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN7 - Decrease Freq of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN8 - Increase length of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN9 - Decrease length of audio click
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN10 - Toggle audio click
ACTION_FUNCTION(LFK_LED_TEST), // FN11 - cycle through LEDs for testing
ACTION_FUNCTION(LFK_DEBUG_SETTINGS), // FN12 - prints LED and click settings to HID
ACTION_FUNCTION(LFK_PLAY_ONEUP),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
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) {
if((layer_state & (1 << CS_GO)) && (keycode == 44)){
if(get_mods() & (MOD_BIT(KC_LGUI))){
return false;
}
}
return true;
}
void led_set_user(uint8_t usb_led) {
}

View File

@@ -0,0 +1 @@
# The default keymap for LFK87

View File

@@ -0,0 +1,53 @@
# 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 = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Disable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable RGB underlight
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
# #
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
# #
# # Set to B, C or D
# LFK_REV = D
# ifeq ($(LFK_REV), B)
# MCU = atmega32u4
# else
# MCU = at90usb1286
# endif
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"

View File

@@ -0,0 +1,8 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// place overrides here
#endif

View File

@@ -0,0 +1,133 @@
#include "lfk87.h"
#include "issi.h"
#include "lighting.h"
#include "action_layer.h"
//Define a shorter 'transparent' key code to make the keymaps more compact
#define KC_TR KC_TRNS
enum keymap_layout {
VANILLA = 0, // matches MF68 layout
FUNC, // 0x08
SETTINGS, // 0x10
};
// Colors of the layer indicator LED
// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
const Layer_Info layer_info[] = {
// Layer Mask Red Green Blue
{0x00000000, 0xFFFFFFFF, {0x00, 0x00, 0x00}}, // base layers - off
{0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0xFF}}, // function layer - blue
{0x00000004, 0xFFFFFFFC, {0xFF, 0x00, 0xFF}}, // settings layer - magenta
{0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[VANILLA] = KEYMAP(
/* Keymap VANILLA: (Base Layer) Default Layer
* ,-----------------------------------------------------------------------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12| |Prnt|ScLk|Paus|
* |-----------------------------------------------------------| |--------------|
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| - | = |Backsp | | Ins|Home|PgUp|
* |-----------------------------------------------------------| |--------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | Del| End|PgDn|
* |-----------------------------------------------------------| `--------------'
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------| ,----.
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up |
* |-----------------------------------------------------------| ,-------------.
* |Ctrl|Gui |Alt | Space |ALT |GUI |Func|CTRL | |Lft| Dn |Rig |
* `-----------------------------------------------------------' `-------------'
*/
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, LGUI(KC_D), KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
KC_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_DELETE, KC_END, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(FUNC), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap FUNCTION: Function Layer
* ,-------------------------------------------------------------. ,--------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
* |-------------------------------------------------------------| |--------------|
* | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | | | | |
* |-------------------------------------------------------------| |--------------|
* |Tab | |PgU| | | | | | Up| | | | | | | | | |
* |-------------------------------------------------------------| `--------------'
* |Control|Hme|PgD|End| | | |Lft|Dwn|Rgt| | | |
* |-------------------------------------------------------------| ,----.
* |Shift | |Del| | | | |Mute|V- |V+ | |TG(SETTINGS)| | Up |
* |-------------------------------------------------------------' ,-------------.
* |Func|Win |Alt | PgD |Alt |Ctrl |Func | |Lft| Dn |Rig |
* `------------------------------------------------------' `-------------'
*/
[FUNC] = KEYMAP(
KC_ESC, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_PSCR, KC_SLCK, KC_PAUS, \
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_DEL, KC_TR, KC_TR, KC_TR, \
KC_NO,KC_NO, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TR, KC_TR, KC_TR, \
KC_TR, KC_HOME, KC_PGDN, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, \
KC_TR, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, TG(SETTINGS), KC_TR, \
KC_TR, KC_TR, KC_TR, KC_PGDN, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR),
/* Keymap SETTINGS: Settings Layer
* ,-----------------------------------------------------------. ,-------------.
* |Esc |f1| f2| f3| f4| | f5| f6| f7| f8| | f9|f10|f11|f12 | |Prnt|ScLk|Paus|
* |-------------------------------------------------------------| |--------------|
* |FN0 | | | | | | | | | | |BL-|BL+|BL Togl| |RGB Tog |Val+|
* |-----------------------------------------------------------| |-------------|
* |MuMode| | | | | | | | | | | | |LEDTst| |RGB Mode|Val-|
* |-----------------------------------------------------------| `-------------'
* |AudTgl |Hz+|MS+| | | | | | | | | | RST |
* |-----------------------------------------------------------| ,----.
* |ClickTgl|Hz-|MS-| | | | | | | | |Layer Clr | |Hue+|
* |--------------------------------------------------------------------------.
* | | | | | | | | | |Sat-|Hue-|Sat+|
* `----------------------------------------------------------------------------'
*/
[SETTINGS] = KEYMAP(
KC_FN0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, KC_NO, KC_NO, KC_NO,
KC_FN0,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_DEC, BL_INC, BL_TOGG, RGB_TOG, RGB_VAI, KC_NO,
MU_MOD, 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_FN2, RGB_MOD, RGB_VAD, KC_NO,
AU_TOG, KC_F1,KC_FN3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET,
KC_FN5, KC_FN2,KC_FN4, KC_NO, KC_NO, KC_NO, KC_NO, MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI,
KC_NO, KC_NO, KC_NO, KC_FN12, KC_NO, KC_NO, KC_NO, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
};
const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLEAR), // FN0 - reset layers
ACTION_FUNCTION(LFK_CLICK_FREQ_HIGHER), // FN1 - Increase Freq of audio click
ACTION_FUNCTION(LFK_CLICK_FREQ_LOWER), // FN2 - Decrease Freq of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_LONGER), // FN3 - Increase length of audio click
ACTION_FUNCTION(LFK_CLICK_TIME_SHORTER), // FN4 - Decrease length of audio click
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
}
return MACRO_NONE;
};
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
eeconfig_update_default_layer(1);
default_layer_set(1);
}
}
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) {
}

View File

@@ -0,0 +1,54 @@
# 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 = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable RGB underlight
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
# Override the LFK87 hardware version.
#
# A - Green PCB. at90usb1286 Only 3 exist
# B - We don't talk about RevB
# C-D - Black PCB. at90usb646 First public release
#
# LFK_REV = C
# ifeq ($(LFK_REV), A)
# MCU = at90usb1286
# OPT_DEFS += -DBOOTLOADER_SIZE=8192
# else
# MCU = at90usb646
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
# endif
# OPT_DEFS += -DLFK_TKL_REV_$(LFK_REV)

View File

@@ -0,0 +1,151 @@
/*
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"
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER LFKeyboards
#define PRODUCT LFKPad 21
#define DESCRIPTION QMK keyboard firmware for LFKPad LFK_REV_STRING
#define DIODE_DIRECTION COL2ROW
#define MATRIX_ROWS 6
#define MATRIX_COLS 4
#define MATRIX_ROW_PINS { D5, F4, F6, F7, C7, C6}
#define MATRIX_COL_PINS { F1, F0, D4, D6}
#define UNUSED_PINS { }
#define RGBLED_NUM 28 // Number of LEDs
#define RGB_DI_PIN C7 // Have to set it to something to get the ws2812 code to compile
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#define TAPPING_TERM 200
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* 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

View File

@@ -0,0 +1,8 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// place overrides here
#endif

View File

@@ -0,0 +1,52 @@
#include "lfkpad.h"
#include "issi.h"
#include "lighting.h"
#include "action_layer.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP( /* Base */
KC_ESC, KC_TAB, KC_PEQL, MO(1), \
KC_LNUM, KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, KC_PPLS, \
KC_P4, KC_P5, KC_P6, \
KC_P1, KC_P2, KC_P3, KC_PENT, \
KC_P0, KC_PDOT),
[1] = KEYMAP( /* RGB */
RGB_SAI, RGB_VAI, RGB_HUI, KC_TRNS, \
RGB_SAD, RGB_VAD, RGB_HUD, KC_TRNS, \
RGB_M_X, RGB_M_G, RGB_MOD, RGB_RMOD, \
RGB_M_SW, RGB_M_SN, RGB_M_K, \
RGB_M_P, RGB_M_B, RGB_M_R, RGB_TOG, \
KC_NO, KC_NO),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
}
return MACRO_NONE;
};
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
eeconfig_update_default_layer(1);
default_layer_set(1);
}
}
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) {
}

View File

@@ -0,0 +1 @@
# The default keymap LFKPad 21

View File

@@ -0,0 +1,53 @@
# 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 = no # 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 = no # 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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
endif
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
# #
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
# #
# # Set to B, C or D
# LFK_REV = D
# ifeq ($(LFK_REV), B)
# MCU = atmega32u4
# else
# MCU = at90usb1286
# endif
# OPT_DEFS += -DLFK_REV_$(LFK_REV)
# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"

View File

@@ -0,0 +1,176 @@
#include <avr/sfr_defs.h>
#include <avr/timer_avr.h>
#include <avr/wdt.h>
#include "lfkpad.h"
#include "keymap.h"
#include "issi.h"
#include "TWIlib.h"
#include "lighting.h"
#include "debug.h"
#include "quantum.h"
uint16_t click_hz = CLICK_HZ;
uint16_t click_time = CLICK_MS;
uint8_t click_toggle = CLICK_ENABLED;
void matrix_init_kb(void)
{
matrix_init_user();
#ifndef AUDIO_ENABLE
// If we're not using the audio pin, drive it low
sbi(DDRC, 6);
cbi(PORTC, 6);
#endif
#ifdef ISSI_ENABLE
issi_init();
#endif
#ifdef WATCHDOG_ENABLE
// This is done after turning the layer LED red, if we're caught in a loop
// we should get a flashing red light
wdt_enable(WDTO_500MS);
#endif
}
void matrix_scan_kb(void)
{
#ifdef WATCHDOG_ENABLE
wdt_reset();
#endif
#ifdef ISSI_ENABLE
// switch/underglow lighting update
static uint32_t issi_device = 0;
static uint32_t twi_last_ready = 0;
if(twi_last_ready > 1000){
// Its been way too long since the last ISSI update, reset the I2C bus and start again
dprintf("TWI failed to recover, TWI re-init\n");
twi_last_ready = 0;
TWIInit();
force_issi_refresh();
}
if(isTWIReady()){
twi_last_ready = 0;
// If the i2c bus is available, kick off the issi update, alternate between devices
update_issi(issi_device, issi_device);
if(issi_device){
issi_device = 0;
}else{
issi_device = 3;
}
}else{
twi_last_ready++;
}
#endif
matrix_scan_user();
}
void click(uint16_t freq, uint16_t duration){
#ifdef AUDIO_ENABLE
if(freq >= 100 && freq <= 20000 && duration < 100){
play_note(freq, 10);
for (uint16_t i = 0; i < duration; i++){
_delay_ms(1);
}
stop_all_notes();
}
#endif
}
bool process_record_kb(uint16_t keycode, keyrecord_t* record)
{
if (click_toggle && record->event.pressed){
click(click_hz, click_time);
}
if (keycode == RESET) {
reset_keyboard_kb();
} else {
}
return process_record_user(keycode, record);
}
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
{
#ifdef AUDIO_ENABLE
int8_t sign = 1;
#endif
if(id == LFK_ESC_TILDE){
// Send ~ on shift-esc
void (*method)(uint8_t) = (event->event.pressed) ? &add_key : &del_key;
uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
if(layer_state == 0){
method(shifted ? KC_GRAVE : KC_ESCAPE);
}else{
method(shifted ? KC_ESCAPE : KC_GRAVE);
}
send_keyboard_report();
}else if(event->event.pressed){
switch(id){
case LFK_SET_DEFAULT_LAYER:
// set/save the current base layer to eeprom, falls through to LFK_CLEAR
eeconfig_update_default_layer(1UL << opt);
default_layer_set(1UL << opt);
case LFK_CLEAR:
// Go back to default layer
layer_clear();
break;
#ifdef AUDIO_ENABLE
case LFK_CLICK_FREQ_LOWER:
sign = -1; // continue to next statement
case LFK_CLICK_FREQ_HIGHER:
click_hz += sign * 100;
click(click_hz, click_time);
break;
case LFK_CLICK_TOGGLE:
if(click_toggle){
click_toggle = 0;
click(4000, 100);
click(1000, 100);
}else{
click_toggle = 1;
click(1000, 100);
click(4000, 100);
}
break;
case LFK_CLICK_TIME_SHORTER:
sign = -1; // continue to next statement
case LFK_CLICK_TIME_LONGER:
click_time += sign;
click(click_hz, click_time);
break;
#endif
}
}
}
void reset_keyboard_kb(){
#ifdef WATCHDOG_ENABLE
MCUSR = 0;
wdt_disable();
wdt_reset();
#endif
reset_keyboard();
}
void led_set_kb(uint8_t usb_led)
{
led_set_user(usb_led);
}
// LFK lighting info
const uint8_t rgb_matrices[] = {0, 1};
const uint8_t rgb_sequence[] = {
32, 1, 2, 3,
31, 30, 5, 6,
28, 27, 7, 8,
17, 18, 9,
19, 21, 11, 12,
22, 14,
16, 26,
4, 25,
13, 24,
20
};

View File

@@ -0,0 +1,73 @@
#ifndef LFKPAD_H
#define LFKPAD_H
/* if the kb.h file exists (because we're running from qmkbuilder) include it */
#if __has_include("kb.h")
#include "kb.h"
#endif
#include "quantum.h"
#include "matrix.h"
#include <avr/sfr_defs.h>
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
typedef struct RGB_Color {
uint16_t red;
uint16_t green;
uint16_t blue;
} RGB_Color;
typedef struct Layer_Info {
uint32_t layer;
uint32_t mask;
RGB_Color color;
} Layer_Info;
extern const uint32_t layer_count;
extern const Layer_Info layer_info[];
enum action_functions {
LFK_CLEAR = 0, // Resets all layers
LFK_ESC_TILDE, // esc+lshift = ~
LFK_SET_DEFAULT_LAYER, // changes and saves current base layer to eeprom
LFK_CLICK_TOGGLE, // Adjusts click duration
LFK_CLICK_FREQ_HIGHER, // Adjusts click frequency
LFK_CLICK_FREQ_LOWER, // Adjusts click frequency
LFK_CLICK_TIME_LONGER, // Adjusts click duration
LFK_CLICK_TIME_SHORTER, // Adjusts click duration
LFK_DEBUG_SETTINGS, // prints LED and click settings to HID
LFK_LED_TEST // cycles through switch and RGB LEDs
};
#define CLICK_HZ 500
#define CLICK_MS 2
#define CLICK_ENABLED 0
void reset_keyboard_kb(void);
void click(uint16_t freq, uint16_t duration);
#define KEYMAP( \
k00, k01, k02, k03,\
k10, k11, k12, k13,\
k20, k21, k22, k23,\
k30, k31, k32,\
k40, k41, k42, k43,\
k50, k52\
) { \
{ k00, k01, k02, k03 }, \
{ k10, k11, k12, k13 }, \
{ k20, k21, k22, k23 }, \
{ k30, k31, k32, KC_NO }, \
{ k40, k41, k42, k43 }, \
{ k50, KC_NO, k52, KC_NO } \
}
#endif //LFKPAD_H

Some files were not shown because too many files have changed in this diff Show More