Compare commits

...
53 Commits
Author SHA1 Message Date
Drashna Jaelre 3261c408e4 Add support for TAP_CODE_DELAY to Hold-Tap keys (#5400)
* Add support for TAP_CODE_DELAY to Hold-Tap keys

* Better handling for tap code delay and caps version
2019-07-22 20:23:57 -07:00
Drashna Jaelre d41961c9ed [Keymap] Drashna's Feature madness (#6128)
* Fix my Tap Dance issues after I broke them

* Cleanup and organization of userspace documentation

As well as some additional cleanup of functions due to review of documentation.

* Enable Tapdance on Glow and remove more animations

* Revert to Eager PR debouncing

* Add better check for startup animation

* Move where RGB Matrix defines are listed

* Limit RGB Matrix max val

* Update keyboard for Iris Rev 3 conflicts

* Enable encoder support on planck ez

* Remove is_master check from corne\'s OLED code

* Overhaul OLED screens for my Corne

* One last removal

* Show RGB valu On both sides

* Updates for OLED display info

* Fix compile issues for rgb config

* Disabled Space Cadet for all drashna keymaps

* Fix OLED Screen configs

* Minor OLED Tweaks

* Revert some Iris changes

* Fix song include

* Handle MAKE macro for the Corne boards better

* Add super hacky-hack for eeconfig initialization

* Add audio support for Fractal since Elite Cs support it

* Add defines for keycode steps

* Add White layout

* Update Corne RGB info

* Add fun effects to layer indication for RGB Matrix enabled boards

* Use proper define for product name detection

* Update formatting

* Use custom timeout mechanism for OLED timeout

* Fix up OLED screen HSV code for new HSV structure

* Better handle turning off RGB Matrix when sleeping

* Disable MultiSplash Animation

* Change Iris back to using serial

* Why was RGB disabled?!?!?!

* Limit val in rgb_matrix_layer_helper function

* Remove EECONFIG setting for RGB matrix
2019-07-22 20:22:33 -07:00
840b9090a0 Adding personal keymaps (#6384)
* initial commit

* migrated the actual keymap to this keyboard

* added the actual Tanuki keymap

* Added QMK DFU bootloader support

* TuCZnak's keymaps - final

* Update keyboards/tanuki/keymaps/tucznak/config.h

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/ut472/keymaps/tucznak/config.h

Co-Authored-By: Drashna Jaelre <[email protected]>

* Apply suggestions from code review

Co-Authored-By: noroadsleft <[email protected]>
2019-07-22 16:32:47 -07:00
XScorpion2 40b0ddd425 Sol Rev 2 Keyboard (#6389)
* Basic Rev 2 implementation

* Updated LED defines and added Extra encoder support

* Fixed rgb pin assignment

* Physically accurate LED positions

* Single Color Band scrolling left to right effects

* Spirals, Pinwheels, and Documentation....Oh My!

* Spiral effect band thickness adjustments

* Fixing animation spin directions

* Full hand LED positions

* Basic Rev 2 implementation

Updated LED defines and added Extra encoder support

Fixed rgb pin assignment

Physically accurate LED positions

Full hand LED positions

Moving rev2 folder

* RGB Center Point LED position update

* Fixing led config commas

* Fixing led config commas

* fix enter key

* fix enter

* Small changes to default

* update default

* typo fix

* update default

* Fixing defines & led config, turned full hand & extra encoders into rules.mk feature

* Refactored rules.mk to have a post_rules.mk

* Forgot to offset the matrix to led map due to the edge led additions

* Updated LED flags and fixed my keymap

* Update keymap.c

include speed controls for RGB

* Fixing more rules.mk and adding keymap like encoders functionality

* Sol Rev 2 Implementation

* Minor fixes

* Keymap fixes

* Fix Colemak, add lock keys
2019-07-22 10:43:52 -07:00
Collin Diekvossandnoroadsleft 17ff9cf554 New Keyboard: ZJ68 (#6378)
* added zj68 keyboard

* Suggested changes

* Suggested changes

* Suggested changes

* Requested changes

* Update keyboards/zj68/rules.mk

Co-Authored-By: noroadsleft <[email protected]>
2019-07-22 10:17:11 -07:00
MechMerlin d3ebf903c9 [Keyboard] Add Unikorn 60 tsangan_hhkb layout (#6390)
* fix default keymap to not have Q in the 1 position.

* add tsangan hhkb layout

* add a tsangan default keymap

* clean up the default keymap

* add qmk configurator support for new layout
2019-07-22 02:20:20 -07:00
George Petri f1c89280d5 [Keymap] Update keymap for keebio/quefrency 65% version (#6388)
* minor keymap changes

* minor keymap changes update readme

* update rules.mk

* add rgb

* add add arrows in hjkl

* removed backslashes

* fix missing comma

* spacing fix

* minor cleanup

* add r layer

* impl navigation layer

* moved backspace nearby

* updated readme
2019-07-22 02:14:43 -07:00
Sid Carter 4602361095 [Keymap] Switch Iris keymap from workman to colemak (#6385)
* via support and colemak layout

* figures tap and hold parts don't work vith via enabled - so those are commented out for now
2019-07-22 02:13:38 -07:00
Michael Pishchagin 28f53462d0 [Keyboard] Backport two fixes from TMK: usb-usb converter (#6383)
* usb_usb: Order of init prevents uneeded bus reset
https://github.com/tmk/tmk_keyboard/commit/7c228967a405b04d58bb06e619de8d1d7bb3c15b#diff-deed77fb597e3a0019ce59fc1d09e260

* usb_usb: Fix startup block bug
https://github.com/tmk/tmk_keyboard/commit/c2ce617a363f3b9d43aa81f98e70d58f928931f4#diff-deed77fb597e3a0019ce59fc1d09e260
2019-07-22 02:07:28 -07:00
Luke Wesley-Holleyandnoroadsleft 4532caf5f2 [Keyboard] KBP V60 Type R Added ISO default (#6372)
* [Layout] KBP V60 Type R ISO default

* Remove ifdef

* Apply suggestions from code review

@noroadsleft I've accepted your suggestions. Tried locally any everything works as expected.

Thanks again - this if my first keyboard and first time looking at/ using/ contributing to qmk so I appreciate the feedback 👍

Co-Authored-By: noroadsleft <[email protected]>
2019-07-22 02:06:06 -07:00
noroadsleft e08e6c11e3 [Keyboard] Fix QMK Configurator bug with Wilba Tech Zeal60 LAYOUT_60_all (#6387)
info.json file had the wrong name for the JSON key; the macro that is normally named LAYOUT_all by convention is named LAYOUT_60_all on the Zeal60.

Bug flagged by drashna for flight505 on QMK Discord.
2019-07-22 02:03:19 -07:00
bffbb4b42d Refactoring wilba.tech PCBs, updating Rama Works U80-A (#6272)
* Added WT65-B, WT75-B, minor fixes

* Update keyboards/wilba_tech/wt65_b/config.h

Co-Authored-By: Drashna Jaelre <[email protected]>

* Update keyboards/wilba_tech/wt65_b/readme.md

Co-Authored-By: fauxpark <[email protected]>

* Update keyboards/wilba_tech/wt75_b/config.h

Co-Authored-By: Drashna Jaelre <[email protected]>

* Change DEBOUNCING_DELAY to DEBOUNCE

* Change DEBOUNCING_DELAY to DEBOUNCE

* Move Zeal60/Zeal65 files to keyboards/wilba_tech

* Change DEBOUNCING_DELAY to DEBOUNCE

* Refactoring zeal60 code to wilba_tech

* Moved Rama Works PCBs to wilba_tech

* Rename Rama Works files

* Cleanup info.json

* Cleanup readme.md

* Cleanup USB device strings

* U80-A RGB matrix, IS31FL3731 driver changes

* Fixed #include from keyboards/zeal60
2019-07-21 07:46:22 -04:00
noroadsleft d686c0ea43 [Keyboard] Snagpad Configurator bugfix and readme refactor (#6381)
* Update snagpad.h

White-space changes only. Making this file easier to read.

* Update info.json

Refactor:

- add labels
- debug linting (one key object per line)
- reorder keys for LAYOUT_numpad_5x4 (fixes QMK Configurator assigning keys to incorrect positions)

* Update readme.md

Refactor to conform to QMK template.

Updated link to The Board Podcast (old link was Error 404).
2019-07-20 13:49:28 -07:00
trinity1561 b3cdc7ef70 [Keyboard] Update space65.c to fix caps lock LED (#6375) 2019-07-20 13:37:42 -07:00
Sid Carter cf2ffadbcd [Keymap] Add Colemak to existing fc660c keymap (#6374)
* consistent enums

* add colemak to another layer for fun

* update readme

* consistent enums

* add colemak to another layer for fun

* update readme
2019-07-20 13:36:14 -07:00
Joel Challis 0da743d80b [Keyboard] Refactor handwired/splittest to support multiple boards (#6373)
* Refactor splittest to support multiple dev boards

* Refactor splittest to support multiple dev boards - revert change to number of RGB led

* Refactor splittest to support multiple dev boards - update docs

* Refactor splittest to support multiple dev boards - correct docs

* Refactor splittest to support multiple dev boards - update teensy master logic
2019-07-20 13:35:30 -07:00
MechMerlinandfauxpark 7afae46ea6 [Keyboard] Grid 600 Type 05 "PRESS" Cover Module (#6368)
* add grid600 type 5 press cover module

* Update keyboards/grid600/press/keymaps/default/keymap.c

Co-Authored-By: fauxpark <[email protected]>

* remove unused custom keycode enum
2019-07-20 13:30:38 -07:00
jotix c644299820 [Keyboard] leds in default keymap (#6357) 2019-07-20 13:25:20 -07:00
Konstantin Đorđevićandfauxpark a2e91ebec9 Update IS_COMMAND definitions to use MOD_MASK_SHIFT (#6348)
* Update IS_COMMAND definition in templates to use MOD_MASK_SHIFT

* Update IS_COMMAND in docs

* Update IS_COMMAND default definition in tmk_core

* Update table in Command docs based on suggestion

Co-Authored-By: fauxpark <[email protected]>
2019-07-20 13:21:40 -07:00
Danny a40dbf94e8 Merge pull request #6264 from zvecr/split_master_check
Allow board to override split keyboard master check
2019-07-20 15:13:01 -04:00
Danny 1c0a7ad6c2 Fix Numbrero Handwired make example in readme (#6379)
Fix Numbrero Handwired make example in readme
2019-07-20 15:09:13 -04:00
noroadsleft 6b1db7da23 Fix Numbrero Handwired make example in readme 2019-07-20 11:06:18 -07:00
Drashna JaelreandMechMerlin 001a6c24ae [Docs] Clarify Zadig usage in FAQ Docs (#6360)
* Rewrite Zadig section to be more clear

* Wordsmithing

Co-Authored-By: MechMerlin <[email protected]>
2019-07-19 13:23:16 -07:00
noroadsleft b1fc3f35c6 Melody96 Configurator updates and minor refactoring (#6365)
* Add Configurator layout data for LAYOUT_hotswap

* Add LAYOUT_std60_split_num0

Requested by 李小安#9728 on QMK Discord.

Standard 60% ANSI layout for the alphanumeric region, with a split-0 Numpad.

Includes a sample keymap.

* Update Docs links on readme

* Change melody96.h to use #pragma once include guard

* Change config.h to use #pragma once include guard

* Add readme for default_std60_split_num0 keymap
2019-07-19 10:39:20 -07:00
Konstantin Đorđević e040028f1b Change xprintf() calls in rgblight.c to dprintf() (#6363) 2019-07-19 08:47:04 -07:00
fauxpark d417b0cc7d Tidy up ALF X1.1 (#6367)
* Tidy up ALF X1.1

* Correct x positions

* 4 spaces

* Remove a stray TRNS key
2019-07-18 22:05:25 -07:00
mechmerlin b12b26946d simple readme fix 2019-07-18 21:16:30 -07:00
trinity1561 918fb7f8da Print Screen and Pause placement swap (#5981)
* Update x11.h

The original json file that was given by the designer was incorrect.  The Print Screen and Pause button is swapped.

* Update space65.c

Fixing the Caps Lock LED.

* Revert "Update space65.c"

This reverts commit 1f5de1abaefadd2e54259999a29bab501da5f67a.
2019-07-18 20:04:01 -07:00
jotix 455f15528c Jotix (#6355)
* add unicode_map

* add unicode_map

* numpad change
2019-07-18 19:27:09 -07:00
Joao Maia 00c6892b3f [Keyboard] Add 6macro keyboard (#6362)
* Initial commit for 6macro firmware

* Updated layout documentation

* Removed unused commented code
2019-07-18 12:31:40 -07:00
Fred Silberberg 171f7c561b Add more layouts for the ergodash (#6336) 2019-07-18 07:45:48 -07:00
fauxpark 5b4187ad1b Correct backlight on state docs (#6358)
* Correct backlight on state docs

* Reword to make it less confusing
2019-07-18 07:45:00 -07:00
Ethan Madden d5b01bd34b Add prime_e keymap (#6350) 2019-07-18 06:55:31 -07:00
jshuf 1650ba00f1 Allow userspace the opportunity to handle keycodes 2019-07-17 12:38:08 -07:00
dsanchezseco f9d47ebe2f cleanup and start sound (#6353) 2019-07-17 09:24:49 -07:00
fauxpark 3895b4b868 Extend maximum number of backlight levels to 31 (#6351) 2019-07-16 21:58:29 -07:00
Daniel Schindler a8647f0d27 Add model01 keymap. Change kinesis keeymap. 2019-07-16 15:02:48 -07:00
Konstantin Đorđević 6c7d173ad7 Remove unnecessary IS_COMMAND definitions from a couple of boards 2019-07-16 14:18:26 -07:00
Konstantin Đorđević 65906f679d Use led_set_kb instead of led_set_user in melody96.c 2019-07-16 14:13:08 -07:00
fauxpark 6af77551c6 Remove more commented out MCUs 2019-07-16 13:47:43 -07:00
Salicylic-acid3 4747d974aa [Keyboard] Add keyboard Naked48 (#6330)
* Add Naked48

*  Comment reflected
2019-07-16 09:39:39 -07:00
Drashna Jaelre e5d2cb8f98 Fix Preprocessor check for Leader Keys 2019-07-16 09:27:33 -07:00
Drashna Jaelre f6c7e11426 Remove the need to specify NUM_OF_ENCODERS for the Encoder feature (#6328)
* Remove the need to set NUM_OF_ENCODERS

Instead, calculate the size of the array, and use that instead

* Add hack for split common support

* Remove NUM_OF_ENCODERS from keyboard config

Can be reverted, if needed
2019-07-16 01:40:54 -07:00
Sidney Bovet 97a3f806c4 [Keymap] Fix advanced keymap readme and macro function (#6342) 2019-07-16 01:37:35 -07:00
Drashna Jaelre c44fc68297 Allow Combo feature to be enabled/disabled live (#6318)
* Add ability to enable/disable combos

* Update documentation for Combo feature

* Change keycodes for appeasement

* Simplify combo_toggle function

* Update names

* Update combo docs to use tables
2019-07-16 01:37:19 -07:00
Joel Challis 5fa0a274ea Align ARM i2c_readReg with AVR (#6314)
* Align arm i2c_readReg with avr

* Align arm i2c_readReg with avr - fix cannonkeys
2019-07-16 01:36:23 -07:00
Joel Challis 4e375aa1f5 Add ARM I2Cv1 support to i2c_master (#6262)
* Add ARM I2Cv1 support to i2c_master

* Add I2Cv1 docs
2019-07-16 01:30:53 -07:00
Drashna Jaelre f859375284 Expand bootloader target to support most AVR boards (#6255)
* Update the :bootloader target to pass along correct hardware info

* Update make scripts to properly grab the settings (a big thanks to @yanfali)

* Remove LUFA debug warnings
2019-07-16 01:28:23 -07:00
Drashna JaelreandKonstantin Đorđević f6651424a0 Make Caps Lock delay more reasonable (#6199)
* Make Caps Lock delay more reasonable

* Update documentation

* Update docs/config_options.md

Co-Authored-By: Konstantin Đorđević <[email protected]>

* Update docs/config_options.md

Co-Authored-By: Konstantin Đorđević <[email protected]>
2019-07-16 01:21:52 -07:00
Joel Challis 29e9caa82b Configure Vagrant to use qmk_base_container (#6194)
* Initial conversion of vagrant to use qmkfm/base_container

* Fix vagrant when using docker provider

* Workaround for VirtualBox VM restarts

* Generalise Vagrant docs slightly and add FAQ
2019-07-16 01:20:34 -07:00
fauxpark a32f7e1a25 Store backlight breathing state in EEPROM (#6105)
* Store backlight breathing state in EEPROM

* Reduce backlight_config.level from 6 bits to 4 (max 15 "on" levels)

* Error out if BACKLIGHT_LEVELS is > 15

* Remove mention of default backlight pin in rules.mk template

* Remove pointless comment
2019-07-16 00:56:36 -07:00
XScorpion2andDrashna Jaelre e2dfb787da Adding rgb matrix speed into eeprom storage. (#5965)
Zeroing out spd in eeconfig_init_quantum

Switched to block read & update

Update tmk_core/common/eeconfig.h

Co-Authored-By: Drashna Jaelre <[email protected]>

Fixing init compile error

Update eeconfig.c

Dead / Missing API cleanup

alignment
2019-07-16 00:40:43 -07:00
zvecr 05990c9bda Small fix to allow board to override split keyboard master check 2019-07-05 18:45:57 +01:00
388 changed files with 10154 additions and 2992 deletions

No files matched your search

Vendored
+21 -10
View File
@@ -52,26 +52,37 @@ Vagrant.configure(2) do |config|
end end
# Docker provider pulls from hub.docker.com respecting docker.image if # Docker provider pulls from hub.docker.com respecting docker.image if
# config.vm.box is nil. Note that this bind-mounts from the current dir to # config.vm.box is nil. In this case, we adhoc build util/vagrant/Dockerfile.
# Note that this bind-mounts from the current dir to
# /vagrant in the guest, so unless your UID is 1000 to match vagrant in the # /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
# image, you'll need to: chmod -R a+rw . # image, you'll need to: chmod -R a+rw .
config.vm.provider "docker" do |docker, override| config.vm.provider "docker" do |docker, override|
override.vm.box = nil override.vm.box = nil
docker.image = "jesselang/debian-vagrant:stretch" docker.build_dir = "util/vagrant"
docker.has_ssh = true docker.has_ssh = true
end end
# This script ensures the required packages for AVR programming are installed # Unless we are running the docker container directly
# It also ensures the system always gets the latest updates when powered on # 1. run container detached on vm
# If this causes issues you can run a 'vagrant destroy' and then # 2. attach on 'vagrant ssh'
# add a # before ,run: (or change "always" to "once") and run 'vagrant up' to get a working ["virtualbox", "vmware_workstation", "vmware_fusion"].each do |type|
# non-updated box and then attempt to troubleshoot or open a Github issue config.vm.provider type do |virt, override|
config.vm.provision "shell", inline: "/vagrant/util/qmk_install.sh", run: "always" override.vm.provision "docker" do |d|
d.run "qmkfm/base_container",
cmd: "tail -f /dev/null",
args: "--privileged -v /dev:/dev -v '/vagrant:/vagrant'"
end
override.vm.provision "shell", inline: <<-SHELL
echo 'docker restart qmkfm-base_container && exec docker exec -it qmkfm-base_container /bin/bash -l' >> ~vagrant/.bashrc
SHELL
end
end
config.vm.post_up_message = <<-EOT config.vm.post_up_message = <<-EOT
Log into the VM using 'vagrant ssh'. QMK directory synchronized with host is Log into the environment using 'vagrant ssh'. QMK directory synchronized with
located at /vagrant host is located at /vagrant
To compile the .hex files use make command inside this directory, e.g. To compile the .hex files use make command inside this directory, e.g.
cd /vagrant cd /vagrant
make <keyboard>:default make <keyboard>:default
+3 -3
View File
@@ -89,7 +89,7 @@ This is a C header file that is one of the first things included, and will persi
* mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap * mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
* `#define LOCKING_RESYNC_ENABLE` * `#define LOCKING_RESYNC_ENABLE`
* tries to keep switch state consistent with keyboard LED state * tries to keep switch state consistent with keyboard LED state
* `#define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))` * `#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)`
* key combination that allows the use of magic commands (useful for debugging) * key combination that allows the use of magic commands (useful for debugging)
* `#define USB_MAX_POWER_CONSUMPTION` * `#define USB_MAX_POWER_CONSUMPTION`
* sets the maximum power (in mA) over USB for the device (default: 500) * sets the maximum power (in mA) over USB for the device (default: 500)
@@ -171,8 +171,8 @@ If you define these options you will enable the associated feature, which may in
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined. * how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
* `#define TAP_CODE_DELAY 100` * `#define TAP_CODE_DELAY 100`
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. * Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
* `#define TAP_HOLD_CAPS_DELAY 200` * `#define TAP_HOLD_CAPS_DELAY 80`
* Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPSLOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 200ms if not defined. * Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPSLOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
## RGB Light Configuration ## RGB Light Configuration
+4 -6
View File
@@ -49,15 +49,13 @@ Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices m
## Unknown Device for DFU Bootloader ## Unknown Device for DFU Bootloader
If you're using Windows to flash your keyboard, and you are running into issues, check the Device Manager. If you see an "Unknown Device" when the keyboard is in "bootloader mode", then you may have a driver issue. Issues encountered when flashing keyboards on Windows are most often due to having the wrong drivers installed for the bootloader.
Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue. Re-running the installation script for MSYS2 may help (eg run `util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue. Alternatively, you can download and run the [`qmk_driver_installer`](https://github.com/qmk/qmk_driver_installer) package.
If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUSB` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again. If that doesn't work, try all of the options, until one works. If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, and run it on the system. Then, you will need to reset your board into bootloader mode. After that, locate the device in question. If the device doesn't show up in the list (or nothing shows up in the list), you may need to enable the `List all devices` option in the `Options` menu.
?> There isn't a best option for which driver should be used here. Some options work better on some systems than others. libUSB and WinUSB seem to be the best options here. From here, you will need to know what type of controller the board is using. You may see it listed in the Device Manager as `ATmega32U4` device (which is an AVR board), or an `STM32` device (Which is an ARM board). For AVR boards, use `libusb-win32` for the driver. For ARM boards, use the `WinUSB` driver. Once the correct driver type has been selected, click on the `Replace Driver` button, unplug your board, plug it back in, and reset it again.
If the bootloader doesn't show up in the list for devices, you may need to enable the "List all devices" option in the `Options` menu, and then find the bootloader in question.
## WINAVR is Obsolete ## WINAVR is Obsolete
+5 -3
View File
@@ -65,7 +65,7 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------| |---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this| |`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information | |`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) | |`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 31 excluding off) |
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) | |`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported | |`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds | |`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
@@ -73,8 +73,10 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
## Backlight On State ## Backlight On State
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *low*. Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *high*.
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case you must `#define BACKLIGHT_ON_STATE 1`, so that when the transistor is on, the pin is driven *high* instead. Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case, when the transistor is on, the pin is driven *low* instead.
This functionality is configured at the keyboard level with the `BACKLIGHT_ON_STATE` define.
## Multiple backlight pins ## Multiple backlight pins
+23 -9
View File
@@ -59,19 +59,12 @@ void process_combo_event(uint8_t combo_index, bool pressed) {
switch(combo_index) { switch(combo_index) {
case ZC_COPY: case ZC_COPY:
if (pressed) { if (pressed) {
register_code(KC_LCTL); tap_code16(LCTL(KC_C));
register_code(KC_C);
unregister_code(KC_C);
unregister_code(KC_LCTL);
} }
break; break;
case XV_PASTE: case XV_PASTE:
if (pressed) { if (pressed) {
register_code(KC_LCTL); tap_code16(LCTL(KC_V));
register_code(KC_V);
unregister_code(KC_V);
unregister_code(KC_LCTL);
} }
break; break;
} }
@@ -87,3 +80,24 @@ If you're using long combos, or even longer combos, you may run into issues with
In this case, you can add either `#define EXTRA_LONG_COMBOS` or `#define EXTRA_EXTRA_LONG_COMBOS` in your `config.h` file. In this case, you can add either `#define EXTRA_LONG_COMBOS` or `#define EXTRA_EXTRA_LONG_COMBOS` in your `config.h` file.
You may also be able to enable action keys by defining `COMBO_ALLOW_ACTION_KEYS`. You may also be able to enable action keys by defining `COMBO_ALLOW_ACTION_KEYS`.
## Keycodes
You can enable, disable and toggle the Combo feature on the fly. This is useful if you need to disable them temporarily, such as for a game.
|Keycode |Description |
|----------|---------------------------------|
|`CMB_ON` |Turns on Combo feature |
|`CMB_OFF` |Turns off Combo feature |
|`CMB_TOG` |Toggles Combo feature on and off |
## User callbacks
In addition to the keycodes, there are a few functions that you can use to set the status, or check it:
|Function |Description |
|-----------|--------------------------------------------------------------------|
| `combo_enable()` | Enables the combo feature |
| `combo_disable()` | Disables the combo feature, and clears the combo buffer |
| `combo_toggle()` | Toggles the state of the combo feature |
| `is_combo_enabled()` | Returns the status of the combo feature state (true or false) |
+33 -33
View File
@@ -16,36 +16,36 @@ To use Command, hold down the key combination defined by the `IS_COMMAND()` macr
If you would like to change the key assignments for Command, `#define` these in your `config.h` at either the keyboard or keymap level. All keycode assignments here must omit the `KC_` prefix. If you would like to change the key assignments for Command, `#define` these in your `config.h` at either the keyboard or keymap level. All keycode assignments here must omit the `KC_` prefix.
|Define |Default |Description | |Define |Default |Description |
|------------------------------------|---------------------------------------------------------------------------|------------------------------------------------| |------------------------------------|--------------------------------|------------------------------------------------|
|`IS_COMMAND()` |<code>(get_mods() == (MOD_BIT(KC_LSHIFT) &#124; MOD_BIT(KC_RSHIFT)))</code>|The key combination to activate Command | |`IS_COMMAND()` |`(get_mods() == MOD_MASK_SHIFT)`|The key combination to activate Command |
|`MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS` |`true` |Set default layer with the Function row | |`MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS` |`true` |Set default layer with the Function row |
|`MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS` |`true` |Set default layer with the number keys | |`MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS` |`true` |Set default layer with the number keys |
|`MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM`|`false` |Set default layer with `MAGIC_KEY_LAYER0..9` | |`MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM`|`false` |Set default layer with `MAGIC_KEY_LAYER0..9` |
|`MAGIC_KEY_DEBUG` |`D` |Toggle debugging over serial | |`MAGIC_KEY_DEBUG` |`D` |Toggle debugging over serial |
|`MAGIC_KEY_DEBUG_MATRIX` |`X` |Toggle key matrix debugging | |`MAGIC_KEY_DEBUG_MATRIX` |`X` |Toggle key matrix debugging |
|`MAGIC_KEY_DEBUG_KBD` |`K` |Toggle keyboard debugging | |`MAGIC_KEY_DEBUG_KBD` |`K` |Toggle keyboard debugging |
|`MAGIC_KEY_DEBUG_MOUSE` |`M` |Toggle mouse debugging | |`MAGIC_KEY_DEBUG_MOUSE` |`M` |Toggle mouse debugging |
|`MAGIC_KEY_CONSOLE` |`C` |Enable the Command console | |`MAGIC_KEY_CONSOLE` |`C` |Enable the Command console |
|`MAGIC_KEY_VERSION` |`V` |Print the running QMK version to the console | |`MAGIC_KEY_VERSION` |`V` |Print the running QMK version to the console |
|`MAGIC_KEY_STATUS` |`S` |Print the current keyboard status to the console| |`MAGIC_KEY_STATUS` |`S` |Print the current keyboard status to the console|
|`MAGIC_KEY_HELP` |`H` |Print Command help to the console | |`MAGIC_KEY_HELP` |`H` |Print Command help to the console |
|`MAGIC_KEY_HELP_ALT` |`SLASH` |Print Command help to the console (alternate) | |`MAGIC_KEY_HELP_ALT` |`SLASH` |Print Command help to the console (alternate) |
|`MAGIC_KEY_LAYER0` |`0` |Make layer 0 the default layer | |`MAGIC_KEY_LAYER0` |`0` |Make layer 0 the default layer |
|`MAGIC_KEY_LAYER0_ALT` |`GRAVE` |Make layer 0 the default layer (alternate) | |`MAGIC_KEY_LAYER0_ALT` |`GRAVE` |Make layer 0 the default layer (alternate) |
|`MAGIC_KEY_LAYER1` |`1` |Make layer 1 the default layer | |`MAGIC_KEY_LAYER1` |`1` |Make layer 1 the default layer |
|`MAGIC_KEY_LAYER2` |`2` |Make layer 2 the default layer | |`MAGIC_KEY_LAYER2` |`2` |Make layer 2 the default layer |
|`MAGIC_KEY_LAYER3` |`3` |Make layer 3 the default layer | |`MAGIC_KEY_LAYER3` |`3` |Make layer 3 the default layer |
|`MAGIC_KEY_LAYER4` |`4` |Make layer 4 the default layer | |`MAGIC_KEY_LAYER4` |`4` |Make layer 4 the default layer |
|`MAGIC_KEY_LAYER5` |`5` |Make layer 5 the default layer | |`MAGIC_KEY_LAYER5` |`5` |Make layer 5 the default layer |
|`MAGIC_KEY_LAYER6` |`6` |Make layer 6 the default layer | |`MAGIC_KEY_LAYER6` |`6` |Make layer 6 the default layer |
|`MAGIC_KEY_LAYER7` |`7` |Make layer 7 the default layer | |`MAGIC_KEY_LAYER7` |`7` |Make layer 7 the default layer |
|`MAGIC_KEY_LAYER8` |`8` |Make layer 8 the default layer | |`MAGIC_KEY_LAYER8` |`8` |Make layer 8 the default layer |
|`MAGIC_KEY_LAYER9` |`9` |Make layer 9 the default layer | |`MAGIC_KEY_LAYER9` |`9` |Make layer 9 the default layer |
|`MAGIC_KEY_BOOTLOADER` |`B` |Jump to bootloader | |`MAGIC_KEY_BOOTLOADER` |`B` |Jump to bootloader |
|`MAGIC_KEY_BOOTLOADER_ALT` |`ESC` |Jump to bootloader (alternate) | |`MAGIC_KEY_BOOTLOADER_ALT` |`ESC` |Jump to bootloader (alternate) |
|`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed | |`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed |
|`MAGIC_KEY_EEPROM` |`E` |Print stored EEPROM config to the console | |`MAGIC_KEY_EEPROM` |`E` |Print stored EEPROM config to the console |
|`MAGIC_KEY_EEPROM_CLEAR` |`BSPACE` |Clear the EEPROM | |`MAGIC_KEY_EEPROM_CLEAR` |`BSPACE` |Clear the EEPROM |
|`MAGIC_KEY_NKRO` |`N` |Toggle N-Key Rollover (NKRO) | |`MAGIC_KEY_NKRO` |`N` |Toggle N-Key Rollover (NKRO) |
|`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping | |`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping |
-1
View File
@@ -6,7 +6,6 @@ Basic encoders are supported by adding this to your `rules.mk`:
and this to your `config.h`: and this to your `config.h`:
#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B12 } #define ENCODERS_PAD_A { B12 }
#define ENCODERS_PAD_B { B13 } #define ENCODERS_PAD_B { B13 }
+41 -5
View File
@@ -1,16 +1,20 @@
# Vagrant Quick Start # Vagrant Quick Start
This project includes a Vagrantfile that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter. This project includes a `Vagrantfile` that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
## Requirements ## Requirements
Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion). Using the `Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as a supported provider installed:
*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest` * [VirtualBox](https://www.virtualbox.org/) (Version at least 5.0.12)
* Sold as 'the most accessible platform to use Vagrant'
* [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware)
* The (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion
* [Docker](https://www.docker.com/)
Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below. Other than having Vagrant, a suitable provider installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start an environment (either a virtual machine or container) that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
# Flashing the Firmware ## Flashing the Firmware
The "easy" way to flash the firmware is using a tool from your host OS: The "easy" way to flash the firmware is using a tool from your host OS:
@@ -19,3 +23,35 @@ The "easy" way to flash the firmware is using a tool from your host OS:
* [Atmel FLIP](http://www.atmel.com/tools/flip.aspx) * [Atmel FLIP](http://www.atmel.com/tools/flip.aspx)
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version. If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
## Vagrantfile Overview
The development environment is configured to run the QMK Docker image, `qmkfm/base_container`. This not only ensures predictability between systems, it also mirrors the CI environment.
## FAQ
### Why am I seeing issues under Virtualbox?
Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:**
```console
vagrant plugin install vagrant-vbguest
```
### How do I remove an existing environment?
Finished with your environment? From anywhere inside the folder where you checked out this project, Execute:
```console
vagrant destory
```
### What if I want to use Docker directly?
Want to benefit from the Vagrant workflow without a virtual machine? The Vagrantfile is configured to bypass running a virtual machine, and run the container directly. Execute the following when bringing up the environment to force the use of Docker:
```console
vagrant up --provider=docker
```
### How do I access the virtual machine instead of the Docker container?
Execute the following to bypass the `vagrant` user booting directly to the official qmk builder image:
```console
vagrant ssh -c 'sudo -i'
```
+18 -2
View File
@@ -73,7 +73,22 @@ STM32 MCUs allows a variety of pins to be configured as I2C pins depending on th
| `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` | | `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` |
| `I2C1_BANK` (deprecated) | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superceded by `I2C1_SCL_BANK`, `I2C1_SDA_BANK` | `GPIOB` | | `I2C1_BANK` (deprecated) | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superceded by `I2C1_SCL_BANK`, `I2C1_SDA_BANK` | `GPIOB` |
STM32 MCUs allow for different timing parameters when configuring I2C. These can be modified using the following parameters, using https://www.st.com/en/embedded-software/stsw-stm32126.html as a reference: The ChibiOS I2C driver configuration depends on STM32 MCU:
STM32F1xx, STM32F2xx, STM32F4xx, STM32L0xx and STM32L1xx use I2Cv1;
STM32F0xx, STM32F3xx, STM32F7xx and STM32L4xx use I2Cv2;
#### I2Cv1
STM32 MCUs allow for different clock and duty parameters when configuring I2Cv1. These can be modified using the following parameters, using <https://www.playembedded.org/blog/stm32-i2c-chibios/#I2Cv1_configuration_structure> as a reference:
| Variable | Default |
|--------------------|------------------|
| `I2C1_OPMODE` | `OPMODE_I2C` |
| `I2C1_CLOCK_SPEED` | `100000` |
| `I2C1_DUTY_CYCLE` | `STD_DUTY_CYCLE` |
#### I2Cv2
STM32 MCUs allow for different timing parameters when configuring I2Cv2. These can be modified using the following parameters, using <https://www.st.com/en/embedded-software/stsw-stm32126.html> as a reference:
| Variable | Default | | Variable | Default |
|-----------------------|---------| |-----------------------|---------|
@@ -83,13 +98,14 @@ STM32 MCUs allow for different timing parameters when configuring I2C. These can
| `I2C1_TIMINGR_SCLH` | `15U` | | `I2C1_TIMINGR_SCLH` | `15U` |
| `I2C1_TIMINGR_SCLL` | `21U` | | `I2C1_TIMINGR_SCLL` | `21U` |
STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2C mode. See the respective datasheet for the appropriate values for your MCU. STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2Cv2 mode. See the respective datasheet for the appropriate values for your MCU.
| Variable | Default | | Variable | Default |
|---------------------|---------| |---------------------|---------|
| `I2C1_SCL_PAL_MODE` | `4` | | `I2C1_SCL_PAL_MODE` | `4` |
| `I2C1_SDA_PAL_MODE` | `4` | | `I2C1_SDA_PAL_MODE` | `4` |
#### Other
You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function: You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:
```C ```C
+13 -2
View File
@@ -33,11 +33,17 @@
static uint8_t i2c_address; static uint8_t i2c_address;
static const I2CConfig i2cconfig = { static const I2CConfig i2cconfig = {
#ifdef USE_I2CV1
I2C1_OPMODE,
I2C1_CLOCK_SPEED,
I2C1_DUTY_CYCLE,
#else
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) |
STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) |
STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL),
0, 0,
0 0
#endif
}; };
static i2c_status_t chibios_to_qmk(const msg_t* status) { static i2c_status_t chibios_to_qmk(const msg_t* status) {
@@ -61,8 +67,13 @@ void i2c_init(void)
chThdSleepMilliseconds(10); chThdSleepMilliseconds(10);
#ifdef USE_I2CV1
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
#else
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
#endif
//i2cInit(); //This is invoked by halInit() so no need to redo it. //i2cInit(); //This is invoked by halInit() so no need to redo it.
} }
@@ -106,11 +117,11 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data,
return chibios_to_qmk(&status); return chibios_to_qmk(&status);
} }
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout) i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{ {
i2c_address = devaddr; i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig); i2cStart(&I2C_DRIVER, &i2cconfig);
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout)); msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), &regaddr, 1, data, length, MS2ST(timeout));
return chibios_to_qmk(&status); return chibios_to_qmk(&status);
} }
+42 -24
View File
@@ -22,10 +22,16 @@
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that * Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file. * STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
*/ */
#pragma once
#include "ch.h" #include "ch.h"
#include <hal.h> #include <hal.h>
#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
#define USE_I2CV1
#endif
#ifdef I2C1_BANK #ifdef I2C1_BANK
#define I2C1_SCL_BANK I2C1_BANK #define I2C1_SCL_BANK I2C1_BANK
#define I2C1_SDA_BANK I2C1_BANK #define I2C1_SDA_BANK I2C1_BANK
@@ -46,30 +52,42 @@
#define I2C1_SDA 7 #define I2C1_SDA 7
#endif #endif
// The default PAL alternate modes are used to signal that the pins are used for I2C #ifdef USE_I2CV1
#ifndef I2C1_SCL_PAL_MODE #ifndef I2C1_OPMODE
#define I2C1_SCL_PAL_MODE 4 #define I2C1_OPMODE OPMODE_I2C
#endif #endif
#ifndef I2C1_SDA_PAL_MODE #ifndef I2C1_CLOCK_SPEED
#define I2C1_SDA_PAL_MODE 4 #define I2C1_CLOCK_SPEED 100000 /* 400000 */
#endif #endif
#ifndef I2C1_DUTY_CYCLE
#define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
#endif
#else
// The default PAL alternate modes are used to signal that the pins are used for I2C
#ifndef I2C1_SCL_PAL_MODE
#define I2C1_SCL_PAL_MODE 4
#endif
#ifndef I2C1_SDA_PAL_MODE
#define I2C1_SDA_PAL_MODE 4
#endif
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock // The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html // For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
#ifndef I2C1_TIMINGR_PRESC #ifndef I2C1_TIMINGR_PRESC
#define I2C1_TIMINGR_PRESC 15U #define I2C1_TIMINGR_PRESC 15U
#endif #endif
#ifndef I2C1_TIMINGR_SCLDEL #ifndef I2C1_TIMINGR_SCLDEL
#define I2C1_TIMINGR_SCLDEL 4U #define I2C1_TIMINGR_SCLDEL 4U
#endif #endif
#ifndef I2C1_TIMINGR_SDADEL #ifndef I2C1_TIMINGR_SDADEL
#define I2C1_TIMINGR_SDADEL 2U #define I2C1_TIMINGR_SDADEL 2U
#endif #endif
#ifndef I2C1_TIMINGR_SCLH #ifndef I2C1_TIMINGR_SCLH
#define I2C1_TIMINGR_SCLH 15U #define I2C1_TIMINGR_SCLH 15U
#endif #endif
#ifndef I2C1_TIMINGR_SCLL #ifndef I2C1_TIMINGR_SCLL
#define I2C1_TIMINGR_SCLL 21U #define I2C1_TIMINGR_SCLL 21U
#endif
#endif #endif
#ifndef I2C_DRIVER #ifndef I2C_DRIVER
@@ -88,5 +106,5 @@ i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length,
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout); i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length); i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout); i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
void i2c_stop(void); void i2c_stop(void);
+17 -19
View File
@@ -71,10 +71,10 @@ uint8_t g_twi_transfer_buffer[20];
// buffers and the transfers in IS31FL3731_write_pwm_buffer() but it's // buffers and the transfers in IS31FL3731_write_pwm_buffer() but it's
// probably not worth the extra complexity. // probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][144]; uint8_t g_pwm_buffer[DRIVER_COUNT][144];
bool g_pwm_buffer_update_required = false; bool g_pwm_buffer_update_required[DRIVER_COUNT] = { false };
uint8_t g_led_control_registers[DRIVER_COUNT][18] = { { 0 }, { 0 } }; uint8_t g_led_control_registers[DRIVER_COUNT][18] = { { 0 }, { 0 } };
bool g_led_control_registers_update_required = false; bool g_led_control_registers_update_required[DRIVER_COUNT] = { false };
// This is the bit pattern in the LED control registers // This is the bit pattern in the LED control registers
// (for matrix A, add one to register for matrix B) // (for matrix A, add one to register for matrix B)
@@ -204,7 +204,7 @@ void IS31FL3731_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
g_pwm_buffer[led.driver][led.r - 0x24] = red; g_pwm_buffer[led.driver][led.r - 0x24] = red;
g_pwm_buffer[led.driver][led.g - 0x24] = green; g_pwm_buffer[led.driver][led.g - 0x24] = green;
g_pwm_buffer[led.driver][led.b - 0x24] = blue; g_pwm_buffer[led.driver][led.b - 0x24] = blue;
g_pwm_buffer_update_required = true; g_pwm_buffer_update_required[led.driver] = true;
} }
} }
@@ -220,12 +220,12 @@ void IS31FL3731_set_led_control_register( uint8_t index, bool red, bool green, b
{ {
is31_led led = g_is31_leds[index]; is31_led led = g_is31_leds[index];
uint8_t control_register_r = (led.r - 0x24) / 8; uint8_t control_register_r = (led.r - 0x24) / 8;
uint8_t control_register_g = (led.g - 0x24) / 8; uint8_t control_register_g = (led.g - 0x24) / 8;
uint8_t control_register_b = (led.b - 0x24) / 8; uint8_t control_register_b = (led.b - 0x24) / 8;
uint8_t bit_r = (led.r - 0x24) % 8; uint8_t bit_r = (led.r - 0x24) % 8;
uint8_t bit_g = (led.g - 0x24) % 8; uint8_t bit_g = (led.g - 0x24) % 8;
uint8_t bit_b = (led.b - 0x24) % 8; uint8_t bit_b = (led.b - 0x24) % 8;
if ( red ) { if ( red ) {
g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r); g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r);
@@ -243,28 +243,26 @@ void IS31FL3731_set_led_control_register( uint8_t index, bool red, bool green, b
g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b); g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
} }
g_led_control_registers_update_required = true; g_led_control_registers_update_required[led.driver] = true;
} }
void IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 ) void IS31FL3731_update_pwm_buffers( uint8_t addr, uint8_t index )
{ {
if ( g_pwm_buffer_update_required ) if ( g_pwm_buffer_update_required[index] )
{ {
IS31FL3731_write_pwm_buffer( addr1, g_pwm_buffer[0] ); IS31FL3731_write_pwm_buffer( addr, g_pwm_buffer[index] );
IS31FL3731_write_pwm_buffer( addr2, g_pwm_buffer[1] );
} }
g_pwm_buffer_update_required = false; g_pwm_buffer_update_required[index] = false;
} }
void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) void IS31FL3731_update_led_control_registers( uint8_t addr, uint8_t index )
{ {
if ( g_led_control_registers_update_required ) if ( g_led_control_registers_update_required[index] )
{ {
for ( int i=0; i<18; i++ ) for ( int i=0; i<18; i++ )
{ {
IS31FL3731_write_register(addr1, i, g_led_control_registers[0][i] ); IS31FL3731_write_register( addr, i, g_led_control_registers[index][i] );
IS31FL3731_write_register(addr2, i, g_led_control_registers[1][i] );
} }
} }
} }
+2 -2
View File
@@ -44,8 +44,8 @@ void IS31FL3731_set_led_control_register( uint8_t index, bool red, bool green, b
// (eg. from a timer interrupt). // (eg. from a timer interrupt).
// Call this while idle (in between matrix scans). // Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer. // If the buffer is dirty, it will update the driver with the buffer.
void IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 ); void IS31FL3731_update_pwm_buffers( uint8_t addr, uint8_t index );
void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 ); void IS31FL3731_update_led_control_registers( uint8_t addr, uint8_t index );
#define C1_1 0x24 #define C1_1 0x24
#define C1_2 0x25 #define C1_2 0x25
-6
View File
@@ -125,11 +125,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/* 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 */ /* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true //#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true //#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
@@ -239,7 +234,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define BOOTMAGIC_LITE_ROW 0 // #define BOOTMAGIC_LITE_ROW 0
// #define BOOTMAGIC_LITE_COLUMN 0 // #define BOOTMAGIC_LITE_COLUMN 0
#define NUMBER_OF_ENCODERS 3
#define ENCODERS_PAD_A { B2, B3, D5 } #define ENCODERS_PAD_A { B2, B3, D5 }
#define ENCODERS_PAD_B { B1, B7, B4 } #define ENCODERS_PAD_B { B1, B7, B4 }
#define ENCODER_RESOLUTION 2 #define ENCODER_RESOLUTION 2
+109 -100
View File
@@ -1,103 +1,112 @@
{ {
"keyboard_name": "QMK80", "keyboard_name": "x11",
"url": "", "url": "",
"maintainer": "qmk", "maintainer": "qmk",
"width": 18.25, "width": 18.25,
"height": 6.5, "height": 6.5,
"layouts": { "layouts": {
"LAYOUT": { "LAYOUT": {
"key_count": 88, "key_count": 88,
"layout": [ "layout": [
{"label":"K00", "x":0, "y":0}, {"label":"K00", "x":0, "y":0},
{"label":"K01", "x":2, "y":0}, {"label":"K01", "x":2, "y":0},
{"label":"K02", "x":3, "y":0}, {"label":"K02", "x":3, "y":0},
{"label":"K03", "x":4, "y":0}, {"label":"K03", "x":4, "y":0},
{"label":"K04", "x":5, "y":0}, {"label":"K04", "x":5, "y":0},
{"label":"K05", "x":6.5, "y":0}, {"label":"K05", "x":6.5, "y":0},
{"label":"K06", "x":7.5, "y":0}, {"label":"K06", "x":7.5, "y":0},
{"label":"K07", "x":8.5, "y":0}, {"label":"K07", "x":8.5, "y":0},
{"label":"K08", "x":9.5, "y":0}, {"label":"K08", "x":9.5, "y":0},
{"label":"K09", "x":11, "y":0}, {"label":"K09", "x":11, "y":0},
{"label":"K0A", "x":12, "y":0}, {"label":"K0A", "x":12, "y":0},
{"label":"K0B", "x":13, "y":0}, {"label":"K0B", "x":13, "y":0},
{"label":"K0C", "x":14, "y":0}, {"label":"K0C", "x":14, "y":0},
{"label":"K60", "x":15.25, "y":0},
{"label":"K61", "x":16.25, "y":0}, {"label":"K62", "x":15.25, "y":0},
{"label":"K62", "x":17.25, "y":0}, {"label":"K61", "x":16.25, "y":0},
{"label":"K10", "x":0, "y":1.5}, {"label":"K60", "x":17.25, "y":0},
{"label":"K11", "x":1, "y":1.5},
{"label":"K12", "x":2, "y":1.5}, {"label":"K10", "x":0, "y":1.5},
{"label":"K13", "x":3, "y":1.5}, {"label":"K11", "x":1, "y":1.5},
{"label":"K14", "x":4, "y":1.5}, {"label":"K12", "x":2, "y":1.5},
{"label":"K15", "x":5, "y":1.5}, {"label":"K13", "x":3, "y":1.5},
{"label":"K16", "x":6, "y":1.5}, {"label":"K14", "x":4, "y":1.5},
{"label":"K17", "x":7, "y":1.5}, {"label":"K15", "x":5, "y":1.5},
{"label":"K18", "x":8, "y":1.5}, {"label":"K16", "x":6, "y":1.5},
{"label":"K19", "x":9, "y":1.5}, {"label":"K17", "x":7, "y":1.5},
{"label":"K1A", "x":10, "y":1.5}, {"label":"K18", "x":8, "y":1.5},
{"label":"K1B", "x":11, "y":1.5}, {"label":"K19", "x":9, "y":1.5},
{"label":"K1C", "x":12, "y":1.5}, {"label":"K1A", "x":10, "y":1.5},
{"label":"K5A", "x":13, "y":1.5, "w":2}, {"label":"K1B", "x":11, "y":1.5},
{"label":"K63", "x":15.25, "y":1.5}, {"label":"K1C", "x":12, "y":1.5},
{"label":"K65", "x":16.25, "y":1.5}, {"label":"K5A", "x":13, "y":1.5, "w":2},
{"label":"K67", "x":17.25, "y":1.5},
{"label":"K20", "x":0, "y":2.5, "w":1.5}, {"label":"K63", "x":15.25, "y":1.5},
{"label":"K21", "x":1.5, "y":2.5}, {"label":"K65", "x":16.25, "y":1.5},
{"label":"K22", "x":2.5, "y":2.5}, {"label":"K67", "x":17.25, "y":1.5},
{"label":"K23", "x":3.5, "y":2.5},
{"label":"K24", "x":4.5, "y":2.5}, {"label":"K20", "x":0, "y":2.5, "w":1.5},
{"label":"K25", "x":5.5, "y":2.5}, {"label":"K21", "x":1.5, "y":2.5},
{"label":"K26", "x":6.5, "y":2.5}, {"label":"K22", "x":2.5, "y":2.5},
{"label":"K27", "x":7.5, "y":2.5}, {"label":"K23", "x":3.5, "y":2.5},
{"label":"K28", "x":8.5, "y":2.5}, {"label":"K24", "x":4.5, "y":2.5},
{"label":"K29", "x":9.5, "y":2.5}, {"label":"K25", "x":5.5, "y":2.5},
{"label":"K2A", "x":10.5, "y":2.5}, {"label":"K26", "x":6.5, "y":2.5},
{"label":"K2B", "x":11.5, "y":2.5}, {"label":"K27", "x":7.5, "y":2.5},
{"label":"K2C", "x":12.5, "y":2.5}, {"label":"K28", "x":8.5, "y":2.5},
{"label":"K4C", "x":13.5, "y":2.5, "w":1.5}, {"label":"K29", "x":9.5, "y":2.5},
{"label":"K64", "x":15.25, "y":2.5}, {"label":"K2A", "x":10.5, "y":2.5},
{"label":"K66", "x":16.25, "y":2.5}, {"label":"K2B", "x":11.5, "y":2.5},
{"label":"K68", "x":17.25, "y":2.5}, {"label":"K2C", "x":12.5, "y":2.5},
{"label":"K30", "x":0, "y":3.5, "w":1.75}, {"label":"K4C", "x":13.5, "y":2.5, "w":1.5},
{"label":"K31", "x":1.75, "y":3.5},
{"label":"K32", "x":2.75, "y":3.5}, {"label":"K64", "x":15.25, "y":2.5},
{"label":"K33", "x":3.75, "y":3.5}, {"label":"K66", "x":16.25, "y":2.5},
{"label":"K34", "x":4.75, "y":3.5}, {"label":"K68", "x":17.25, "y":2.5},
{"label":"K35", "x":5.75, "y":3.5},
{"label":"K36", "x":6.75, "y":3.5}, {"label":"K30", "x":0, "y":3.5, "w":1.75},
{"label":"K37", "x":7.75, "y":3.5}, {"label":"K31", "x":1.75, "y":3.5},
{"label":"K38", "x":8.75, "y":3.5}, {"label":"K32", "x":2.75, "y":3.5},
{"label":"K39", "x":9.75, "y":3.5}, {"label":"K33", "x":3.75, "y":3.5},
{"label":"K3A", "x":10.75, "y":3.5}, {"label":"K34", "x":4.75, "y":3.5},
{"label":"K3B", "x":11.75, "y":3.5}, {"label":"K35", "x":5.75, "y":3.5},
{"label":"K3C", "x":12.75, "y":3.5, "w":2.25}, {"label":"K36", "x":6.75, "y":3.5},
{"label":"K40", "x":0, "y":4.5, "w":2.25}, {"label":"K37", "x":7.75, "y":3.5},
{"label":"K41", "x":2.25, "y":4.5}, {"label":"K38", "x":8.75, "y":3.5},
{"label":"K42", "x":3.25, "y":4.5}, {"label":"K39", "x":9.75, "y":3.5},
{"label":"K43", "x":4.25, "y":4.5}, {"label":"K3A", "x":10.75, "y":3.5},
{"label":"K44", "x":5.25, "y":4.5}, {"label":"K3B", "x":11.75, "y":3.5},
{"label":"K45", "x":6.25, "y":4.5}, {"label":"K3C", "x":12.75, "y":3.5, "w":2.25},
{"label":"K46", "x":7.25, "y":4.5},
{"label":"K47", "x":8.25, "y":4.5}, {"label":"K40", "x":0, "y":4.5, "w":2.25},
{"label":"K48", "x":9.25, "y":4.5}, {"label":"K41", "x":2.25, "y":4.5},
{"label":"K49", "x":10.25, "y":4.5}, {"label":"K42", "x":3.25, "y":4.5},
{"label":"K4A", "x":11.25, "y":4.5}, {"label":"K43", "x":4.25, "y":4.5},
{"label":"K4B", "x":12.25, "y":4.5, "w":1.75}, {"label":"K44", "x":5.25, "y":4.5},
{"label":"K69", "x":14, "y":4.5}, {"label":"K45", "x":6.25, "y":4.5},
{"label":"K58", "x":16.25, "y":4.5}, {"label":"K46", "x":7.25, "y":4.5},
{"label":"K50", "x":0, "y":5.5, "w":1.25}, {"label":"K47", "x":8.25, "y":4.5},
{"label":"K51", "x":1.25, "y":5.5, "w":1.25}, {"label":"K48", "x":9.25, "y":4.5},
{"label":"K52", "x":2.5, "y":5.5, "w":1.25}, {"label":"K49", "x":10.25, "y":4.5},
{"label":"K53", "x":3.75, "y":5.5, "w":6.25}, {"label":"K4A", "x":11.25, "y":4.5},
{"label":"K54", "x":10, "y":5.5, "w":1.25}, {"label":"K4B", "x":12.25, "y":4.5, "w":1.75},
{"label":"K55", "x":11.25, "y":5.5, "w":1.25}, {"label":"K69", "x":14, "y":4.5},
{"label":"K56", "x":12.5, "y":5.5, "w":1.25},
{"label":"K57", "x":13.75, "y":5.5, "w":1.25}, {"label":"K58", "x":16.25, "y":4.5},
{"label":"K6A", "x":15.25, "y":5.5},
{"label":"K59", "x":16.25, "y":5.5}, {"label":"K50", "x":0, "y":5.5, "w":1.25},
{"label":"K6B", "x":17.25, "y":5.5} {"label":"K51", "x":1.25, "y":5.5, "w":1.25},
] {"label":"K52", "x":2.5, "y":5.5, "w":1.25},
} {"label":"K53", "x":3.75, "y":5.5, "w":6.25},
{"label":"K54", "x":10, "y":5.5, "w":1.25},
{"label":"K55", "x":11.25, "y":5.5, "w":1.25},
{"label":"K56", "x":12.5, "y":5.5, "w":1.25},
{"label":"K57", "x":13.75, "y":5.5, "w":1.25},
{"label":"K6A", "x":15.25, "y":5.5},
{"label":"K59", "x":16.25, "y":5.5},
{"label":"K6B", "x":17.25, "y":5.5}
]
} }
} }
}
+17 -58
View File
@@ -15,64 +15,23 @@
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
// Defines the keycodes used by our macros in process_record_user
enum custom_keycodes {
QMKBEST = SAFE_RANGE,
QMKURL
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( \ [0] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_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_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, 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, MO(1), KC_UP, KC_LCTL, \
KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
[1] = LAYOUT( \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_MPLY, KC_MSTP, RGB_TOG, RGB_MOD, \
RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_VAD, RGB_SAD \
),
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_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, MO(1), KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPLY, KC_MSTP,
RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
}; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QMKBEST:
if (record->event.pressed) {
// when keycode QMKBEST is pressed
SEND_STRING("QMK is the best thing ever!");
} else {
// when keycode QMKBEST is released
}
break;
case QMKURL:
if (record->event.pressed) {
// when keycode QMKURL is pressed
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
} else {
// when keycode QMKURL is released
}
break;
}
return true;
}
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void led_set_user(uint8_t usb_led) {
}
+30 -29
View File
@@ -16,48 +16,49 @@
#include "x11.h" #include "x11.h"
void matrix_init_kb(void) { void matrix_init_kb(void) {
// put your keyboard start-up code here // put your keyboard start-up code here
// runs once when the firmware starts up // runs once when the firmware starts up
setPinOutput(C6);
setPinOutput(E6); setPinOutput(C6);
setPinOutput(C7); setPinOutput(E6);
matrix_init_user(); setPinOutput(C7);
matrix_init_user();
} }
void matrix_scan_kb(void) { void matrix_scan_kb(void) {
// put your looping keyboard code here // put your looping keyboard code here
// runs every cycle (a lot) // runs every cycle (a lot)
matrix_scan_user(); matrix_scan_user();
} }
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// put your per-action keyboard code here // put your per-action keyboard code here
// runs for every action, just before processing by the firmware // runs for every action, just before processing by the firmware
return process_record_user(keycode, record); return process_record_user(keycode, record);
} }
void led_set_kb(uint8_t usb_led) { void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
writePinLow(C6); writePinLow(C6);
} else { } else {
writePinHigh(C6); writePinHigh(C6);
} }
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) { if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
writePinLow(E6); writePinLow(E6);
} else { } else {
writePinHigh(E6); writePinHigh(E6);
} }
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) { if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
writePinLow(C7); writePinLow(C7);
} else { } else {
writePinHigh(C7); writePinHigh(C7);
} }
led_set_user(usb_led); led_set_user(usb_led);
} }
+13 -13
View File
@@ -26,18 +26,18 @@
* represents the switch matrix. * represents the switch matrix.
*/ */
#define LAYOUT( \ #define LAYOUT( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K60, K61, K62, \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K62, K61, K60, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K5A, K63, K65, K67, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K5A, K63, K65, K67, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K4C, K64, K66, K68, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K4C, K64, K66, K68, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K69, K58, \ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K69, K58, \
K50, K51, K52, K53, K54, K55, K56, K57, K6A, K59, K6B \ K50, K51, K52, K53, K54, K55, K56, K57, K6A, K59, K6B \
) { \ ) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C }, \ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \
{ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, KC_NO, KC_NO }, \ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, KC_NO, KC_NO }, \
{ K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, KC_NO }, \ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, KC_NO }, \
} }
+1 -3
View File
@@ -26,7 +26,6 @@
#define MATRIX_ROW_PINS { A3, B8, B9, B1 } #define MATRIX_ROW_PINS { A3, B8, B9, B1 }
#define MATRIX_COL_PINS { A7, A8, B2, B10 } #define MATRIX_COL_PINS { A7, A8, B2, B10 }
#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B13 } #define ENCODERS_PAD_A { B13 }
#define ENCODERS_PAD_B { B14 } #define ENCODERS_PAD_B { B14 }
@@ -142,7 +141,7 @@
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */ #define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* default 3V ERM vibration motor voltage and library*/ /* default 3V ERM vibration motor voltage and library*/
#if FB_ERM_LRA == 0 #if FB_ERM_LRA == 0
#define RATED_VOLTAGE 3 #define RATED_VOLTAGE 3
#define V_RMS 2.3 #define V_RMS 2.3
#define V_PEAK 3.30 #define V_PEAK 3.30
@@ -193,4 +192,3 @@
#define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYPRESSES
#define SOLENOID_PIN A14 #define SOLENOID_PIN A14
-1
View File
@@ -1,5 +1,4 @@
# MCU name # MCU name
#MCU = at90usb1286
MCU = atmega32u4 MCU = atmega32u4
# Processor frequency. # Processor frequency.
-1
View File
@@ -39,7 +39,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define BACKLIGHT_BREATHING #define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6 #define BREATHING_PERIOD 6
#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B9 } #define ENCODERS_PAD_A { B9 }
#define ENCODERS_PAD_B { B8 } #define ENCODERS_PAD_B { B8 }
@@ -35,7 +35,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { B3, B4, A0, A2, A4, A3 } #define MATRIX_ROW_PINS { B3, B4, A0, A2, A4, A3 }
#define DIODE_DIRECTION COL2ROW #define DIODE_DIRECTION COL2ROW
#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B9 } #define ENCODERS_PAD_A { B9 }
#define ENCODERS_PAD_B { B8 } #define ENCODERS_PAD_B { B8 }
@@ -110,11 +110,11 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data,
return chibios_to_qmk(status); return chibios_to_qmk(status);
} }
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout) i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{ {
i2c_address = devaddr; i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig); i2cStart(&I2C_DRIVER, &i2cconfig);
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout)); msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), &regaddr, 1, data, length, MS2ST(timeout));
return chibios_to_qmk(status); return chibios_to_qmk(status);
} }
@@ -17,8 +17,8 @@
#include "tmk_core/common/eeprom.h" #include "tmk_core/common/eeprom.h"
// HACK // HACK
#include "keyboards/zeal60/zeal60_api.h" // Temporary hack #include "keyboards/wilba_tech/via_api.h" // Temporary hack
#include "keyboards/zeal60/zeal60_keycodes.h" // Temporary hack #include "keyboards/wilba_tech/via_keycodes.h" // Temporary hack
/* Artificial delay added to get media keys to work in the encoder*/ /* Artificial delay added to get media keys to work in the encoder*/
@@ -72,7 +72,7 @@ void eeprom_set_valid(bool valid)
void eeprom_reset(void) void eeprom_reset(void)
{ {
// Set the Zeal60 specific EEPROM state as invalid. // Set the VIA specific EEPROM state as invalid.
eeprom_set_valid(false); eeprom_set_valid(false);
// Set the TMK/QMK EEPROM state as invalid. // Set the TMK/QMK EEPROM state as invalid.
eeconfig_disable(); eeconfig_disable();
+3 -3
View File
@@ -12,8 +12,8 @@
#include "tmk_core/common/eeprom.h" #include "tmk_core/common/eeprom.h"
// HACK // HACK
#include "keyboards/zeal60/zeal60_api.h" // Temporary hack #include "keyboards/wilba_tech/via_api.h" // Temporary hack
#include "keyboards/zeal60/zeal60_keycodes.h" // Temporary hack #include "keyboards/wilba_tech/via_keycodes.h" // Temporary hack
backlight_config_t kb_backlight_config = { backlight_config_t kb_backlight_config = {
@@ -162,7 +162,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
} }
#endif //DYNAMIC_KEYMAP_ENABLE #endif //DYNAMIC_KEYMAP_ENABLE
return true; return process_record_user(keycode, record);;
} }
@@ -74,8 +74,6 @@ static bool matrix_is_mod = false;
* This supports two cascaded hubs and four keyboards * This supports two cascaded hubs and four keyboards
*/ */
USB usb_host; USB usb_host;
USBHub hub1(&usb_host);
USBHub hub2(&usb_host);
HIDBoot<HID_PROTOCOL_KEYBOARD> kbd1(&usb_host); HIDBoot<HID_PROTOCOL_KEYBOARD> kbd1(&usb_host);
HIDBoot<HID_PROTOCOL_KEYBOARD> kbd2(&usb_host); HIDBoot<HID_PROTOCOL_KEYBOARD> kbd2(&usb_host);
HIDBoot<HID_PROTOCOL_KEYBOARD> kbd3(&usb_host); HIDBoot<HID_PROTOCOL_KEYBOARD> kbd3(&usb_host);
@@ -84,6 +82,8 @@ KBDReportParser kbd_parser1;
KBDReportParser kbd_parser2; KBDReportParser kbd_parser2;
KBDReportParser kbd_parser3; KBDReportParser kbd_parser3;
KBDReportParser kbd_parser4; KBDReportParser kbd_parser4;
USBHub hub1(&usb_host);
USBHub hub2(&usb_host);
extern "C" extern "C"
@@ -252,10 +252,10 @@ extern "C"
void led_set(uint8_t usb_led) void led_set(uint8_t usb_led)
{ {
kbd1.SetReport(0, 0, 2, 0, 1, &usb_led); if (kbd1.isReady()) kbd1.SetReport(0, 0, 2, 0, 1, &usb_led);
kbd2.SetReport(0, 0, 2, 0, 1, &usb_led); if (kbd2.isReady()) kbd2.SetReport(0, 0, 2, 0, 1, &usb_led);
kbd3.SetReport(0, 0, 2, 0, 1, &usb_led); if (kbd3.isReady()) kbd3.SetReport(0, 0, 2, 0, 1, &usb_led);
kbd4.SetReport(0, 0, 2, 0, 1, &usb_led); if (kbd4.isReady()) kbd4.SetReport(0, 0, 2, 0, 1, &usb_led);
led_set_kb(usb_led); led_set_kb(usb_led);
} }
+19 -40
View File
@@ -20,7 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once #pragma once
/* Select hand configuration */ /* Select hand configuration */
// #define MASTER_LEFT // #define MASTER_LEFT
@@ -36,52 +35,31 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define TAPPING_TERM 100 // #define TAPPING_TERM 100
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
# undef RGBLED_NUM # undef RGBLED_NUM
# define RGBLED_NUM 27 # define RGBLED_NUM 27
# define RGBLIGHT_HUE_STEP 8 # define RGBLIGHT_HUE_STEP 8
# define RGBLIGHT_SAT_STEP 8 # define RGBLIGHT_SAT_STEP 8
# define RGBLIGHT_VAL_STEP 8 # define RGBLIGHT_VAL_STEP 5
# define RGBLIGHT_LIMIT_VAL 100 # define RGBLIGHT_LIMIT_VAL 150
#endif #endif
#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_KEYPRESSES // reacts to keypresses
# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
// # define DISABLE_RGB_MATRIX_ALPHAS_MODS // # define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
# define DISABLE_RGB_MATRIX_BREATHING # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
# define DISABLE_RGB_MATRIX_CYCLE_ALL # define RGB_MATRIX_HUE_STEP 8
# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT # define RGB_MATRIX_SAT_STEP 8
# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN # define RGB_MATRIX_VAL_STEP 5
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN # define RGB_MATRIX_SPD_STEP 10
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# define DISABLE_RGB_MATRIX_DUAL_BEACON
# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
// # define DISABLE_RGB_MATRIX_RAINDROPS
// # define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
// # define DISABLE_RGB_MATRIX_DIGITAL_RAIN
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
# define DISABLE_RGB_MATRIX_SPLASH
// # define DISABLE_RGB_MATRIX_MULTISPLASH
# define DISABLE_RGB_MATRIX_SOLID_SPLASH
# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif #endif
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE
# define B6_AUDIO # define B6_AUDIO
// #define NO_MUSIC_MODE // #define NO_MUSIC_MODE
#endif #endif
@@ -92,4 +70,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define OLED_FONT_WIDTH 5 // #define OLED_FONT_WIDTH 5
// #define OLED_FONT_HEIGHT 7 // #define OLED_FONT_HEIGHT 7
#define OLED_DISABLE_TIMEOUT
#define TAPPING_TERM_PER_KEY #define TAPPING_TERM_PER_KEY
+178 -125
View File
@@ -2,17 +2,16 @@
#include "drashna.h" #include "drashna.h"
extern keymap_config_t keymap_config; extern keymap_config_t keymap_config;
extern uint8_t is_master; extern uint8_t is_master;
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings // Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config; extern rgblight_config_t rgblight_config;
#endif #endif
enum crkbd_keycodes { enum crkbd_keycodes { RGBRST = NEW_SAFE_RANGE };
RGBRST = NEW_SAFE_RANGE
};
// clang-format off
#define LAYOUT_crkbd_base( \ #define LAYOUT_crkbd_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
@@ -103,60 +102,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_NUKE, _______, _______, TG_MODS, _______ _______, KC_NUKE, _______, _______, TG_MODS, _______
) )
}; };
// clang-format on
void matrix_init_keymap(void) {
#ifndef CONVERT_TO_PROTON_C
setPinOutput(D5);
writePinHigh(D5);
setPinOutput(B0);
writePinHigh(B0);
#endif
}
#ifdef OLED_DRIVER_ENABLE #ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) { oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
if (is_master) { uint16_t oled_timer;
return OLED_ROTATION_270;
} else {
return rotation;
}
}
void render_crkbd_logo(void) { char keylog_str[5] = {};
static const char PROGMEM crkbd_logo[] = { uint8_t keylogs_str_idx = 0;
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, uint16_t log_timer = 0;
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
0};
oled_write_P(crkbd_logo, false);
}
#define KEYLOG_LEN (int)(32 / OLED_FONT_WIDTH) const char code_to_name[60] = {' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
char keylog_str[KEYLOG_LEN] = {};
uint8_t keylogs_str_idx = 0;
uint16_t log_timer = 0;
const char code_to_name[60] = {
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
'#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
void add_keylog(uint16_t keycode) { void add_keylog(uint16_t keycode) {
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
(keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; } keycode = keycode & 0xFF;
}
for (uint8_t i = KEYLOG_LEN - 1; i > 0; i--) { for (uint8_t i = 4; i > 0; i--) {
keylog_str[i] = keylog_str[i - 1]; keylog_str[i] = keylog_str[i - 1];
} }
if (keycode < 60) { if (keycode < 60) {
keylog_str[0] = code_to_name[keycode]; keylog_str[0] = code_to_name[keycode];
} }
keylog_str[KEYLOG_LEN] = 0; keylog_str[5] = 0;
log_timer = timer_read(); log_timer = timer_read();
} }
@@ -167,94 +136,153 @@ void update_log(void) {
} }
} }
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) { add_keylog(keycode); } if (record->event.pressed) {
add_keylog(keycode);
oled_timer = timer_read();
}
return true; return true;
} }
void render_status(void) { void render_rgb_status(void) {
oled_write_ln("RGB:", false);
static char temp[20] = {0};
snprintf(temp, sizeof(temp) + 1, "M:%3dH:%3dS:%3dV:%3d", rgb_matrix_config.mode, rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v);
oled_write(temp, false);
}
oled_write_P(PSTR("Layer"), false); void render_status_main(void) {
switch (biton32(layer_state)) { /* Show Keyboard Layout */
case 0: oled_write("Lyout", false);
oled_write_P(PSTR("Base "), false);
break;
case _RAISE:
oled_write_P(PSTR("Raise"), false);
break;
case _LOWER:
oled_write_P(PSTR("Lower"), false);
break;
case _ADJUST:
oled_write_P(PSTR("Adjst"), false);
break;
default:
oled_write_P(PSTR("Unkn "), false);
break;
}
oled_write_P(PSTR("Lyout"), false);
switch (biton32(default_layer_state)) { switch (biton32(default_layer_state)) {
case _QWERTY: case _QWERTY:
oled_write_P(PSTR("QWRTY"), false); oled_write(" QRTY", false);
break; break;
case _COLEMAK: case _COLEMAK:
oled_write_P(PSTR("COLMK"), false); oled_write(" COLE", false);
break; break;
case _DVORAK: case _DVORAK:
oled_write_P(PSTR("DVRAK"), false); oled_write(" DVRK", false);
break; break;
case _WORKMAN: case _WORKMAN:
oled_write_P(PSTR("WRKMN"), false); oled_write(" WKMN", false);
break; break;
case _NORMAN: case _NORMAN:
oled_write_P(PSTR("NORMN"), false); oled_write(" NORM", false);
break; break;
case _MALTRON: case _MALTRON:
oled_write_P(PSTR("MLTRN"), false); oled_write(" MLTN", false);
break; break;
case _EUCALYN: case _EUCALYN:
oled_write_P(PSTR("ECLYN"), false); oled_write(" ECLN", false);
break; break;
case _CARPLAX: case _CARPLAX:
oled_write_P(PSTR("CRPLX"), false); oled_write(" CRPX", false);
break; break;
} }
uint8_t modifiers = get_mods(); /* Show Lock Status (only work on master side) */
uint8_t one_shot = get_oneshot_mods();
oled_write_P(PSTR("Mods:"), false);
oled_write_P( (modifiers & MOD_MASK_SHIFT || one_shot & MOD_MASK_SHIFT) ? PSTR(" SFT ") : PSTR(" "), false);
oled_write_P( (modifiers & MOD_MASK_CTRL || one_shot & MOD_MASK_CTRL ) ? PSTR(" CTL ") : PSTR(" "), false);
oled_write_P( (modifiers & MOD_MASK_ALT || one_shot & MOD_MASK_ALT ) ? PSTR(" ALT ") : PSTR(" "), false);
oled_write_P( (modifiers & MOD_MASK_GUI || one_shot & MOD_MASK_GUI ) ? PSTR(" GUI ") : PSTR(" "), false);
oled_write_P(PSTR("BTMGK"), false);
if (keymap_config.swap_lalt_lgui) {
oled_write_P(PSTR(" Mac "), false);
} else {
oled_write_P(PSTR(" Win "), false);
}
uint8_t led_usb_state = host_keyboard_leds(); uint8_t led_usb_state = host_keyboard_leds();
oled_write_P(PSTR("Lock:"), false); oled_write("Lock:", false);
oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK) ? PSTR(" NUM ") : PSTR(" "), false); oled_write(" ", false);
oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK) ? PSTR(" CAPS") : PSTR(" "), false); oled_write_ln("NUM", led_usb_state & (1 << USB_LED_NUM_LOCK));
oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR(" SCRL") : PSTR(" "), false); oled_write(" ", false);
oled_write("CAPS", led_usb_state & (1 << USB_LED_CAPS_LOCK));
oled_write(" ", false);
oled_write("SCRL", led_usb_state & (1 << USB_LED_SCROLL_LOCK));
/* Show Alt-Gui Swap options */
oled_write("BTMGK", false);
oled_write(" ", false);
oled_write_ln("Win", !keymap_config.swap_lalt_lgui);
oled_write(" ", false);
oled_write_ln("Mac", keymap_config.swap_lalt_lgui);
# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
/* Show RGB Options */
render_rgb_status();
# endif
oled_write(keylog_str, false); oled_write(keylog_str, false);
} }
void render_status_secondary(void) {
/* Show Keyboard Layout */
oled_write("Lyout", false);
switch (biton32(default_layer_state)) {
case _QWERTY:
oled_write(" QRTY", false);
break;
case _COLEMAK:
oled_write(" COLE", false);
break;
case _DVORAK:
oled_write(" DVRK", false);
break;
case _WORKMAN:
oled_write(" WKMN", false);
break;
case _NORMAN:
oled_write(" NORM", false);
break;
case _MALTRON:
oled_write(" MLTN", false);
break;
case _EUCALYN:
oled_write(" ECLN", false);
break;
case _CARPLAX:
oled_write(" CRPX", false);
break;
}
/* Show Activate layer */
oled_write("Layer", false);
switch (biton32(layer_state)) {
case _RAISE:
oled_write("Raise", false);
break;
case _LOWER:
oled_write("Lower", false);
break;
case _ADJUST:
oled_write("Adjst", false);
break;
default:
oled_write("Dflt ", false);
break;
}
/* Show Mod */
uint8_t modifiers = get_mods() | get_oneshot_mods();
oled_write("Mods:", false);
oled_write(" ", false);
oled_write_ln("SFT", (modifiers & MOD_MASK_SHIFT));
oled_write(" ", false);
oled_write_ln("CTL", (modifiers & MOD_MASK_CTRL));
oled_write(" ", false);
oled_write_ln("ALT", (modifiers & MOD_MASK_ALT));
oled_write(" ", false);
oled_write_ln("GUI", (modifiers & MOD_MASK_GUI));
# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
render_rgb_status();
# endif
/* Show logged Keys */
oled_write(keylog_str, false);
}
void oled_task_user(void) { void oled_task_user(void) {
if (timer_elapsed(oled_timer) > 60000) {
oled_off();
return;
}
if (is_master) { if (is_master) {
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc) render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else { } else {
render_crkbd_logo(); render_status_secondary();
oled_scroll_left(); // Turns on scrolling
} }
} }
@@ -272,57 +300,82 @@ uint16_t get_tapping_term(uint16_t keycode) {
#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE
static bool is_suspended;
static bool rgb_matrix_enabled;
void suspend_power_down_keymap(void) { void suspend_power_down_keymap(void) {
rgb_matrix_set_suspend_state(true); rgb_matrix_set_suspend_state(true);
if (!is_suspended) {
is_suspended = true;
rgb_matrix_enabled = (bool)rgb_matrix_config.enable;
rgb_matrix_disable_noeeprom();
}
} }
void suspend_wakeup_init_keymap(void) { void suspend_wakeup_init_keymap(void) {
rgb_matrix_set_suspend_state(false); rgb_matrix_set_suspend_state(false);
is_suspended = false;
if (rgb_matrix_enabled) {
rgb_matrix_enable_noeeprom();
}
} }
void rgb_matrix_indicators_user(void) { void rgb_matrix_indicators_user(void) {
if ( userspace_config.rgb_layer_change && if (userspace_config.rgb_layer_change &&
#ifdef RGB_DISABLE_WHEN_USB_SUSPENDED # ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
!g_suspend_state && !g_suspend_state &&
#endif # endif
#if defined(RGBLIGHT_ENABLE) # if defined(RGBLIGHT_ENABLE)
(!rgblight_config.enable && rgb_matrix_config.enable) (!rgblight_config.enable && rgb_matrix_config.enable)
#else # else
rgb_matrix_config.enable rgb_matrix_config.enable
#endif # endif
) { ) {
switch (biton32(layer_state)) { switch (biton32(layer_state)) {
case _MODS:
rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
case _GAMEPAD: case _GAMEPAD:
rgb_matrix_layer_helper(0xFF, 0x80, 0x00, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _DIABLO: case _DIABLO:
rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _RAISE: case _RAISE:
rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_YELLOW, 1, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _LOWER: case _LOWER:
rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_GREEN, 1, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _ADJUST: case _ADJUST:
rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
default: break;
default: {
bool mods_enabled = IS_LAYER_ON(_MODS);
switch (biton32(default_layer_state)) { switch (biton32(default_layer_state)) {
case _QWERTY: case _QWERTY:
rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _COLEMAK: case _COLEMAK:
rgb_matrix_layer_helper(0xFF, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_MAGENTA, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _DVORAK: case _DVORAK:
rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _WORKMAN: case _WORKMAN:
rgb_matrix_layer_helper(0xD9, 0xA5, 0x21, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_GOLDENROD, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _NORMAN: case _NORMAN:
rgb_matrix_layer_helper(0xFF, 0x7C, 0x4D, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_CORAL, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _MALTRON: case _MALTRON:
rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_YELLOW, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _EUCALYN: case _EUCALYN:
rgb_matrix_layer_helper(0xFF, 0x80, 0xBF, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_PINK, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
case _CARPLAX: case _CARPLAX:
rgb_matrix_layer_helper(0x00, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break; rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
} }
break;
}
} }
} }
} }
-5
View File
@@ -16,7 +16,6 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing SWAP_HANDS_ENABLE = no # Enable one-hand typing
RGBLIGHT_STARTUP_ANIMATION = yes
RGB_MATRIX_ENABLE = WS2812 RGB_MATRIX_ENABLE = WS2812
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
@@ -25,7 +24,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
BOOTLOADER = qmk-dfu BOOTLOADER = qmk-dfu
OLED_DRIVER_ENABLE = yes OLED_DRIVER_ENABLE = yes
ifneq ($(strip $(OLED_DRIVER_ENABLE)), yes)
RGB_MATRIX_SPLIT_RIGHT=yes
endif
+363 -10
View File
@@ -1,13 +1,366 @@
{ {
"keyboard_name": "ErgoDash rev2", "keyboard_name": "ErgoDash rev1.2",
"url": "", "url": "",
"maintainer": "qmk", "maintainer": "qmk",
"width": 18, "width": 19,
"height": 6.25, "height": 8.375,
"layouts": { "layouts": {
"LAYOUT": { "LAYOUT_4key": {
"key_count": 70, "layout": [
"layout": [{"label":"L00", "x":0, "y":0.375}, {"label":"L01", "x":1, "y":0.375}, {"label":"L02", "x":2, "y":0.125}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0.125}, {"label":"L05", "x":5, "y":0.25}, {"label":"L06", "x":6, "y":0.75}, {"label":"R00", "x":11, "y":0.75}, {"label":"R01", "x":12, "y":0.25}, {"label":"R02", "x":13, "y":0.125}, {"label":"R03", "x":14, "y":0}, {"label":"R04", "x":15, "y":0.125}, {"label":"R05", "x":16, "y":0.375}, {"label":"R06", "x":17, "y":0.375}, {"label":"L10", "x":0, "y":1.375}, {"label":"L11", "x":1, "y":1.375}, {"label":"L12", "x":2, "y":1.125}, {"label":"L13", "x":3, "y":1}, {"label":"L14", "x":4, "y":1.125}, {"label":"L15", "x":5, "y":1.25}, {"label":"L16", "x":6, "y":1.75}, {"label":"R10", "x":11, "y":1.75}, {"label":"R11", "x":12, "y":1.25}, {"label":"R12", "x":13, "y":1.125}, {"label":"R13", "x":14, "y":1}, {"label":"R14", "x":15, "y":1.125}, {"label":"R15", "x":16, "y":1.375}, {"label":"R16", "x":17, "y":1.375}, {"label":"L20", "x":0, "y":2.375}, {"label":"L21", "x":1, "y":2.375}, {"label":"L22", "x":2, "y":2.125}, {"label":"L23", "x":3, "y":2}, {"label":"L24", "x":4, "y":2.125}, {"label":"L25", "x":5, "y":2.25}, {"label":"L26", "x":6, "y":2.75}, {"label":"R20", "x":11, "y":2.75}, {"label":"R21", "x":12, "y":2.25}, {"label":"R22", "x":13, "y":2.125}, {"label":"R23", "x":14, "y":2}, {"label":"R24", "x":15, "y":2.125}, {"label":"R25", "x":16, "y":2.375}, {"label":"R26", "x":17, "y":2.375}, {"label":"L30", "x":0, "y":3.375}, {"label":"L31", "x":1, "y":3.375}, {"label":"L32", "x":2, "y":3.125}, {"label":"L33", "x":3, "y":3}, {"label":"L34", "x":4, "y":3.125}, {"label":"L35", "x":5, "y":3.25}, {"label":"L36", "x":6.5, "y":4.25}, {"label":"R30", "x":10.5, "y":4.25}, {"label":"R31", "x":12, "y":3.25}, {"label":"R32", "x":13, "y":3.125}, {"label":"R33", "x":14, "y":3}, {"label":"R34", "x":15, "y":3.125}, {"label":"R35", "x":16, "y":3.375}, {"label":"R36", "x":17, "y":3.375}, {"label":"L40", "x":0, "y":4.375}, {"label":"L41", "x":1, "y":4.375}, {"label":"L42", "x":2, "y":4.125}, {"label":"L43", "x":3, "y":4}, {"label":"L44", "x":5.5, "y":5.25}, {"label":"L45", "x":6.5, "y":5.25}, {"label":"L46", "x":7.5, "y":4.25, "h":2}, {"label":"R40", "x":9.5, "y":4.25, "h":2}, {"label":"R41", "x":10.5, "y":5.25}, {"label":"R42", "x":11.5, "y":5.25}, {"label":"R43", "x":14, "y":4}, {"label":"R44", "x":15, "y":4.125}, {"label":"R45", "x":16, "y":4.375}, {"label":"R46", "x":17, "y":4.375}] {"y": 0.375, "x": 0.5, "label": "L00"},
{"y": 0.375, "x": 1.5, "label": "L01"},
{"y": 0.125, "x": 2.5, "label": "L02"},
{"y": 0, "x": 3.5, "label": "L03"},
{"y": 0.125, "x": 4.5, "label": "L04"},
{"y": 0.25, "x": 5.5, "label": "L05"},
{"y": 0.75, "x": 6.5, "label": "L06"},
{"y": 0.75, "x": 12, "label": "R00"},
{"y": 0.25, "x": 13, "label": "R01"},
{"y": 0.125, "x": 14, "label": "R02"},
{"y": 0, "x": 15, "label": "R03"},
{"y": 0.125, "x": 16, "label": "R04"},
{"y": 0.375, "x": 17, "label": "R05"},
{"y": 0.375, "x": 18, "label": "R06"},
{"y": 1.375, "x": 0.5, "label": "L10"},
{"y": 1.375, "x": 1.5, "label": "L11"},
{"y": 1.125, "x": 2.5, "label": "L12"},
{"y": 1, "x": 3.5, "label": "L13"},
{"y": 1.125, "x": 4.5, "label": "L14"},
{"y": 1.25, "x": 5.5, "label": "L15"},
{"y": 1.75, "x": 6.5, "label": "L16"},
{"y": 1.75, "x": 12, "label": "R10"},
{"y": 1.25, "x": 13, "label": "R11"},
{"y": 1.125, "x": 14, "label": "R12"},
{"y": 1, "x": 15, "label": "R13"},
{"y": 1.125, "x": 16, "label": "R14"},
{"y": 1.375, "x": 17, "label": "R15"},
{"y": 1.375, "x": 18, "label": "R16"},
{"y": 2.375, "x": 0.5, "label": "L20"},
{"y": 2.375, "x": 1.5, "label": "L21"},
{"y": 2.125, "x": 2.5, "label": "L22"},
{"y": 2, "x": 3.5, "label": "L23"},
{"y": 2.125, "x": 4.5, "label": "L24"},
{"y": 2.25, "x": 5.5, "label": "L25"},
{"y": 2.75, "x": 6.5, "label": "L26"},
{"y": 2.75, "x": 12, "label": "R20"},
{"y": 2.25, "x": 13, "label": "R21"},
{"y": 2.125, "x": 14, "label": "R22"},
{"y": 2, "x": 15, "label": "R23"},
{"y": 2.125, "x": 16, "label": "R24"},
{"y": 2.375, "x": 17, "label": "R25"},
{"y": 2.375, "x": 18, "label": "R26"},
{"y": 3.375, "x": 0.5, "label": "L30"},
{"y": 3.375, "x": 1.5, "label": "L31"},
{"y": 3.125, "x": 2.5, "label": "L32"},
{"y": 3, "x": 3.5, "label": "L33"},
{"y": 3.125, "x": 4.5, "label": "L34"},
{"y": 3.25, "x": 5.5, "label": "L35"},
{"y": 4, "x": 6.5, "label": "L36"},
{"y": 4, "x": 12, "label": "R30"},
{"y": 3.25, "x": 13, "label": "R31"},
{"y": 3.125, "x": 14, "label": "R32"},
{"y": 3, "x": 15, "label": "R33"},
{"y": 3.125, "x": 16, "label": "R34"},
{"y": 3.375, "x": 17, "label": "R35"},
{"y": 3.375, "x": 18, "label": "R36"},
{"y": 4.375, "x": 0.5, "label": "L40"},
{"y": 4.375, "x": 1.5, "label": "L41"},
{"y": 4.125, "x": 2.5, "label": "L42"},
{"y": 4, "x": 3.5, "label": "L43"},
{"y": 5, "x": 5.5, "label": "L44"},
{"y": 5, "x": 6.5, "label": "L45"},
{"h": 2, "y": 4, "x": 7.5, "label": "L46"},
{"h": 2, "y": 4, "x": 11, "label": "R40"},
{"y": 5, "x": 12, "label": "R41"},
{"y": 5, "x": 13, "label": "R42"},
{"y": 4, "x": 15, "label": "R43"},
{"y": 4.125, "x": 16, "label": "R44"},
{"y": 4.375, "x": 17, "label": "R45"},
{"y": 4.375, "x": 18, "label": "R46"}]
},
"LAYOUT_4key_2u_inner": {
"layout": [
{"y": 0.375, "x": 0.5, "label": "L00"},
{"y": 0.375, "x": 1.5, "label": "L01"},
{"y": 0.125, "x": 2.5, "label": "L02"},
{"y": 0, "x": 3.5, "label": "L03"},
{"y": 0.125, "x": 4.5, "label": "L04"},
{"y": 0.25, "x": 5.5, "label": "L05"},
{"y": 0.75, "x": 6.5, "label": "L06"},
{"y": 0.75, "x": 12, "label": "R00"},
{"y": 0.25, "x": 13, "label": "R01"},
{"y": 0.125, "x": 14, "label": "R02"},
{"y": 0, "x": 15, "label": "R03"},
{"y": 0.125, "x": 16, "label": "R04"},
{"y": 0.375, "x": 17, "label": "R05"},
{"y": 0.375, "x": 18, "label": "R06"},
{"y": 1.375, "x": 0.5, "label": "L10"},
{"y": 1.375, "x": 1.5, "label": "L11"},
{"y": 1.125, "x": 2.5, "label": "L12"},
{"y": 1, "x": 3.5, "label": "L13"},
{"y": 1.125, "x": 4.5, "label": "L14"},
{"y": 1.25, "x": 5.5, "label": "L15"},
{"y": 1.75, "x": 6.5, "label": "L16"},
{"y": 1.75, "x": 12, "label": "R10"},
{"y": 1.25, "x": 13, "label": "R11"},
{"y": 1.125, "x": 14, "label": "R12"},
{"y": 1, "x": 15, "label": "R13"},
{"y": 1.125, "x": 16, "label": "R14"},
{"y": 1.375, "x": 17, "label": "R15"},
{"y": 1.375, "x": 18, "label": "R16"},
{"y": 2.375, "x": 0.5, "label": "L20"},
{"y": 2.375, "x": 1.5, "label": "L21"},
{"y": 2.125, "x": 2.5, "label": "L22"},
{"y": 2, "x": 3.5, "label": "L23"},
{"y": 2.125, "x": 4.5, "label": "L24"},
{"y": 2.25, "x": 5.5, "label": "L25"},
{"y": 2.75, "x": 6.5, "label": "L26"},
{"y": 2.75, "x": 12, "label": "R20"},
{"y": 2.25, "x": 13, "label": "R21"},
{"y": 2.125, "x": 14, "label": "R22"},
{"y": 2, "x": 15, "label": "R23"},
{"y": 2.125, "x": 16, "label": "R24"},
{"y": 2.375, "x": 17, "label": "R25"},
{"y": 2.375, "x": 18, "label": "R26"},
{"y": 3.375, "x": 0.5, "label": "L30"},
{"y": 3.375, "x": 1.5, "label": "L31"},
{"y": 3.125, "x": 2.5, "label": "L32"},
{"y": 3, "x": 3.5, "label": "L33"},
{"y": 3.125, "x": 4.5, "label": "L34"},
{"y": 3.25, "x": 5.5, "label": "L35"},
{"y": 4, "x": 7.5, "label": "L36"},
{"y": 4, "x": 11, "label": "R30"},
{"y": 3.25, "x": 13, "label": "R31"},
{"y": 3.125, "x": 14, "label": "R32"},
{"y": 3, "x": 15, "label": "R33"},
{"y": 3.125, "x": 16, "label": "R34"},
{"y": 3.375, "x": 17, "label": "R35"},
{"y": 3.375, "x": 18, "label": "R36"},
{"y": 4.375, "x": 0.5, "label": "L40"},
{"y": 4.375, "x": 1.5, "label": "L41"},
{"y": 4.125, "x": 2.5, "label": "L42"},
{"y": 4, "x": 3.5, "label": "L43"},
{"y": 5, "x": 5.5, "label": "L44"},
{"h": 2, "y": 4, "x": 6.5, "label": "L45"},
{"y": 5, "x": 7.5, "label": "L46"},
{"y": 5, "x": 11, "label": "R40"},
{"h": 2, "y": 4, "x": 12, "label": "R41"},
{"y": 5, "x": 13, "label": "R42"},
{"y": 4, "x": 15, "label": "R43"},
{"y": 4.125, "x": 16, "label": "R44"},
{"y": 4.375, "x": 17, "label": "R45"},
{"y": 4.375, "x": 18, "label": "R46"}]
},
"LAYOUT_3key_2us": {
"layout": [
{"y": 0.375, "x": 0.5, "label": "L00"},
{"y": 0.375, "x": 1.5, "label": "L01"},
{"y": 0.125, "x": 2.5, "label": "L02"},
{"y": 0, "x": 3.5, "label": "L03"},
{"y": 0.125, "x": 4.5, "label": "L04"},
{"y": 0.25, "x": 5.5, "label": "L05"},
{"y": 0.75, "x": 6.5, "label": "L06"},
{"y": 0.75, "x": 12, "label": "R00"},
{"y": 0.25, "x": 13, "label": "R01"},
{"y": 0.125, "x": 14, "label": "R02"},
{"y": 0, "x": 15, "label": "R03"},
{"y": 0.125, "x": 16, "label": "R04"},
{"y": 0.375, "x": 17, "label": "R05"},
{"y": 0.375, "x": 18, "label": "R06"},
{"y": 1.375, "x": 0.5, "label": "L10"},
{"y": 1.375, "x": 1.5, "label": "L11"},
{"y": 1.125, "x": 2.5, "label": "L12"},
{"y": 1, "x": 3.5, "label": "L13"},
{"y": 1.125, "x": 4.5, "label": "L14"},
{"y": 1.25, "x": 5.5, "label": "L15"},
{"y": 1.75, "x": 6.5, "label": "L16"},
{"y": 1.75, "x": 12, "label": "R10"},
{"y": 1.25, "x": 13, "label": "R11"},
{"y": 1.125, "x": 14, "label": "R12"},
{"y": 1, "x": 15, "label": "R13"},
{"y": 1.125, "x": 16, "label": "R14"},
{"y": 1.375, "x": 17, "label": "R15"},
{"y": 1.375, "x": 18, "label": "R16"},
{"y": 2.375, "x": 0.5, "label": "L20"},
{"y": 2.375, "x": 1.5, "label": "L21"},
{"y": 2.125, "x": 2.5, "label": "L22"},
{"y": 2, "x": 3.5, "label": "L23"},
{"y": 2.125, "x": 4.5, "label": "L24"},
{"y": 2.25, "x": 5.5, "label": "L25"},
{"y": 2.75, "x": 6.5, "label": "L26"},
{"y": 2.75, "x": 12, "label": "R20"},
{"y": 2.25, "x": 13, "label": "R21"},
{"y": 2.125, "x": 14, "label": "R22"},
{"y": 2, "x": 15, "label": "R23"},
{"y": 2.125, "x": 16, "label": "R24"},
{"y": 2.375, "x": 17, "label": "R25"},
{"y": 2.375, "x": 18, "label": "R26"},
{"y": 3.375, "x": 0.5, "label": "L30"},
{"y": 3.375, "x": 1.5, "label": "L31"},
{"y": 3.125, "x": 2.5, "label": "L32"},
{"y": 3, "x": 3.5, "label": "L33"},
{"y": 3.125, "x": 4.5, "label": "L34"},
{"y": 3.25, "x": 5.5, "label": "L35"},
{"y": 3.25, "x": 13, "label": "R31"},
{"y": 3.125, "x": 14, "label": "R32"},
{"y": 3, "x": 15, "label": "R33"},
{"y": 3.125, "x": 16, "label": "R34"},
{"y": 3.375, "x": 17, "label": "R35"},
{"y": 3.375, "x": 18, "label": "R36"},
{"y": 4.375, "x": 0.5, "label": "L40"},
{"y": 4.375, "x": 1.5, "label": "L41"},
{"y": 4.125, "x": 2.5, "label": "L42"},
{"y": 4, "x": 3.5, "label": "L43"},
{"y": 5, "x": 5.5, "label": "L44"},
{"h": 2, "y": 4, "x": 6.5, "label": "L45"},
{"h": 2, "y": 4, "x": 7.5, "label": "L46"},
{"h": 2, "y": 4, "x": 11, "label": "R40"},
{"h": 2, "y": 4, "x": 12, "label": "R41"},
{"y": 5, "x": 13, "label": "R42"},
{"y": 4, "x": 15, "label": "R43"},
{"y": 4.125, "x": 16, "label": "R44"},
{"y": 4.375, "x": 17, "label": "R45"},
{"y": 4.375, "x": 18, "label": "R46"}]
},
"LAYOUT_3key_1us": {
"layout": [
{"y": 0.375, "x": 0.5, "label": "L00"},
{"y": 0.375, "x": 1.5, "label": "L01"},
{"y": 0.125, "x": 2.5, "label": "L02"},
{"y": 0, "x": 3.5, "label": "L03"},
{"y": 0.125, "x": 4.5, "label": "L04"},
{"y": 0.25, "x": 5.5, "label": "L05"},
{"y": 0.75, "x": 6.5, "label": "L06"},
{"y": 0.75, "x": 12, "label": "R00"},
{"y": 0.25, "x": 13, "label": "R01"},
{"y": 0.125, "x": 14, "label": "R02"},
{"y": 0, "x": 15, "label": "R03"},
{"y": 0.125, "x": 16, "label": "R04"},
{"y": 0.375, "x": 17, "label": "R05"},
{"y": 0.375, "x": 18, "label": "R06"},
{"y": 1.375, "x": 0.5, "label": "L10"},
{"y": 1.375, "x": 1.5, "label": "L11"},
{"y": 1.125, "x": 2.5, "label": "L12"},
{"y": 1, "x": 3.5, "label": "L13"},
{"y": 1.125, "x": 4.5, "label": "L14"},
{"y": 1.25, "x": 5.5, "label": "L15"},
{"y": 1.75, "x": 6.5, "label": "L16"},
{"y": 1.75, "x": 12, "label": "R10"},
{"y": 1.25, "x": 13, "label": "R11"},
{"y": 1.125, "x": 14, "label": "R12"},
{"y": 1, "x": 15, "label": "R13"},
{"y": 1.125, "x": 16, "label": "R14"},
{"y": 1.375, "x": 17, "label": "R15"},
{"y": 1.375, "x": 18, "label": "R16"},
{"y": 2.375, "x": 0.5, "label": "L20"},
{"y": 2.375, "x": 1.5, "label": "L21"},
{"y": 2.125, "x": 2.5, "label": "L22"},
{"y": 2, "x": 3.5, "label": "L23"},
{"y": 2.125, "x": 4.5, "label": "L24"},
{"y": 2.25, "x": 5.5, "label": "L25"},
{"y": 2.75, "x": 6.5, "label": "L26"},
{"y": 2.75, "x": 12, "label": "R20"},
{"y": 2.25, "x": 13, "label": "R21"},
{"y": 2.125, "x": 14, "label": "R22"},
{"y": 2, "x": 15, "label": "R23"},
{"y": 2.125, "x": 16, "label": "R24"},
{"y": 2.375, "x": 17, "label": "R25"},
{"y": 2.375, "x": 18, "label": "R26"},
{"y": 3.375, "x": 0.5, "label": "L30"},
{"y": 3.375, "x": 1.5, "label": "L31"},
{"y": 3.125, "x": 2.5, "label": "L32"},
{"y": 3, "x": 3.5, "label": "L33"},
{"y": 3.125, "x": 4.5, "label": "L34"},
{"y": 3.25, "x": 5.5, "label": "L35"},
{"y": 4, "x": 6.5, "label": "L36"},
{"y": 4, "x": 12, "label": "R30"},
{"y": 3.25, "x": 13, "label": "R31"},
{"y": 3.125, "x": 14, "label": "R32"},
{"y": 3, "x": 15, "label": "R33"},
{"y": 3.125, "x": 16, "label": "R34"},
{"y": 3.375, "x": 17, "label": "R35"},
{"y": 3.375, "x": 18, "label": "R36"},
{"y": 4.375, "x": 0.5, "label": "L40"},
{"y": 4.375, "x": 1.5, "label": "L41"},
{"y": 4.125, "x": 2.5, "label": "L42"},
{"y": 4, "x": 3.5, "label": "L43"},
{"y": 5, "x": 5.5, "label": "L44"},
{"y": 5, "x": 6.5, "label": "L45"},
{"y": 5, "x": 12, "label": "R41"},
{"y": 5, "x": 13, "label": "R42"},
{"y": 4, "x": 15, "label": "R43"},
{"y": 4.125, "x": 16, "label": "R44"},
{"y": 4.375, "x": 17, "label": "R45"},
{"y": 4.375, "x": 18, "label": "R46"}]
},
"LAYOUT_2key": {
"layout": [
{"y": 0.375, "x": 0.5, "label": "L00"},
{"y": 0.375, "x": 1.5, "label": "L01"},
{"y": 0.125, "x": 2.5, "label": "L02"},
{"y": 0, "x": 3.5, "label": "L03"},
{"y": 0.125, "x": 4.5, "label": "L04"},
{"y": 0.25, "x": 5.5, "label": "L05"},
{"y": 0.75, "x": 6.5, "label": "L06"},
{"y": 0.75, "x": 12, "label": "R00"},
{"y": 0.25, "x": 13, "label": "R01"},
{"y": 0.125, "x": 14, "label": "R02"},
{"y": 0, "x": 15, "label": "R03"},
{"y": 0.125, "x": 16, "label": "R04"},
{"y": 0.375, "x": 17, "label": "R05"},
{"y": 0.375, "x": 18, "label": "R06"},
{"y": 1.375, "x": 0.5, "label": "L10"},
{"y": 1.375, "x": 1.5, "label": "L11"},
{"y": 1.125, "x": 2.5, "label": "L12"},
{"y": 1, "x": 3.5, "label": "L13"},
{"y": 1.125, "x": 4.5, "label": "L14"},
{"y": 1.25, "x": 5.5, "label": "L15"},
{"y": 1.75, "x": 6.5, "label": "L16"},
{"y": 1.75, "x": 12, "label": "R10"},
{"y": 1.25, "x": 13, "label": "R11"},
{"y": 1.125, "x": 14, "label": "R12"},
{"y": 1, "x": 15, "label": "R13"},
{"y": 1.125, "x": 16, "label": "R14"},
{"y": 1.375, "x": 17, "label": "R15"},
{"y": 1.375, "x": 18, "label": "R16"},
{"y": 2.375, "x": 0.5, "label": "L20"},
{"y": 2.375, "x": 1.5, "label": "L21"},
{"y": 2.125, "x": 2.5, "label": "L22"},
{"y": 2, "x": 3.5, "label": "L23"},
{"y": 2.125, "x": 4.5, "label": "L24"},
{"y": 2.25, "x": 5.5, "label": "L25"},
{"y": 2.75, "x": 6.5, "label": "L26"},
{"y": 2.75, "x": 12, "label": "R20"},
{"y": 2.25, "x": 13, "label": "R21"},
{"y": 2.125, "x": 14, "label": "R22"},
{"y": 2, "x": 15, "label": "R23"},
{"y": 2.125, "x": 16, "label": "R24"},
{"y": 2.375, "x": 17, "label": "R25"},
{"y": 2.375, "x": 18, "label": "R26"},
{"y": 3.375, "x": 0.5, "label": "L30"},
{"y": 3.375, "x": 1.5, "label": "L31"},
{"y": 3.125, "x": 2.5, "label": "L32"},
{"y": 3, "x": 3.5, "label": "L33"},
{"y": 3.125, "x": 4.5, "label": "L34"},
{"y": 3.25, "x": 5.5, "label": "L35"},
{"y": 3.25, "x": 13, "label": "R31"},
{"y": 3.125, "x": 14, "label": "R32"},
{"y": 3, "x": 15, "label": "R33"},
{"y": 3.125, "x": 16, "label": "R34"},
{"y": 3.375, "x": 17, "label": "R35"},
{"y": 3.375, "x": 18, "label": "R36"},
{"y": 4.375, "x": 0.5, "label": "L40"},
{"y": 4.375, "x": 1.5, "label": "L41"},
{"y": 4.125, "x": 2.5, "label": "L42"},
{"y": 4, "x": 3.5, "label": "L43"},
{"y": 5, "x": 5.5, "label": "L44"},
{"h": 2, "y": 4, "x": 6.5, "label": "L45"},
{"h": 2, "y": 4, "x": 12, "label": "R41"},
{"y": 5, "x": 13, "label": "R42"},
{"y": 4, "x": 15, "label": "R43"},
{"y": 4.125, "x": 16, "label": "R44"},
{"y": 4.375, "x": 17, "label": "R45"},
{"y": 4.375, "x": 18, "label": "R46"}]
}
} }
}
} }
+124 -39
View File
@@ -10,8 +10,8 @@
#ifdef USE_I2C #ifdef USE_I2C
#include <stddef.h> #include <stddef.h>
#ifdef __AVR__ #ifdef __AVR__
#include <avr/io.h> #include <avr/io.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#endif #endif
#endif #endif
@@ -20,47 +20,132 @@
#ifndef FLIP_HALF #ifndef FLIP_HALF
// Standard Keymap // Standard Keymap
// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left) // (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
#define LAYOUT( \ #define LAYOUT_4key( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \ L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
) \ ) \
{ \ { \
{ L00, L01, L02, L03, L04, L05, L06 }, \ { L00, L01, L02, L03, L04, L05, L06 }, \
{ L10, L11, L12, L13, L14, L15, L16 }, \ { L10, L11, L12, L13, L14, L15, L16 }, \
{ L20, L21, L22, L23, L24, L25, L26 }, \ { L20, L21, L22, L23, L24, L25, L26 }, \
{ L30, L31, L32, L33, L34, L35, L36 }, \ { L30, L31, L32, L33, L34, L35, L36 }, \
{ L40, L41, L42, L43, L44, L45, L46 }, \ { L40, L41, L42, L43, L44, L45, L46 }, \
{ R06, R05, R04, R03, R02, R01, R00 }, \ { R06, R05, R04, R03, R02, R01, R00 }, \
{ R16, R15, R14, R13, R12, R11, R10 }, \ { R16, R15, R14, R13, R12, R11, R10 }, \
{ R26, R25, R24, R23, R22, R21, R20 }, \ { R26, R25, R24, R23, R22, R21, R20 }, \
{ R36, R35, R34, R33, R32, R31, R30 }, \ { R36, R35, R34, R33, R32, R31, R30 }, \
{ R46, R45, R44, R43, R42, R41, R40 } \ { R46, R45, R44, R43, R42, R41, R40 } \
} }
// Just defined for configurator support, the matrix is identical to LAYOUT_4key
#define LAYOUT_4key_2u_inner( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
) \
{ \
{ L00, L01, L02, L03, L04, L05, L06 }, \
{ L10, L11, L12, L13, L14, L15, L16 }, \
{ L20, L21, L22, L23, L24, L25, L26 }, \
{ L30, L31, L32, L33, L34, L35, L36 }, \
{ L40, L41, L42, L43, L44, L45, L46 }, \
{ R06, R05, R04, R03, R02, R01, R00 }, \
{ R16, R15, R14, R13, R12, R11, R10 }, \
{ R26, R25, R24, R23, R22, R21, R20 }, \
{ R36, R35, R34, R33, R32, R31, R30 }, \
{ R46, R45, R44, R43, R42, R41, R40 } \
}
#define LAYOUT_3key_2us( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
L30, L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
) \
{ \
{ L00, L01, L02, L03, L04, L05, L06 }, \
{ L10, L11, L12, L13, L14, L15, L16 }, \
{ L20, L21, L22, L23, L24, L25, L26 }, \
{ L30, L31, L32, L33, L34, L35, KC_NO }, \
{ L40, L41, L42, L43, L44, L45, L46 }, \
{ R06, R05, R04, R03, R02, R01, R00 }, \
{ R16, R15, R14, R13, R12, R11, R10 }, \
{ R26, R25, R24, R23, R22, R21, R20 }, \
{ R36, R35, R34, R33, R32, R31, KC_NO }, \
{ R46, R45, R44, R43, R42, R41, R40 } \
}
#define LAYOUT_3key_1us( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, L45, R41, R42, R43, R44, R45, R46 \
) \
{ \
{ L00, L01, L02, L03, L04, L05, L06 }, \
{ L10, L11, L12, L13, L14, L15, L16 }, \
{ L20, L21, L22, L23, L24, L25, L26 }, \
{ L30, L31, L32, L33, L34, L35, L36 }, \
{ L40, L41, L42, L43, L44, L45, KC_NO }, \
{ R06, R05, R04, R03, R02, R01, R00 }, \
{ R16, R15, R14, R13, R12, R11, R10 }, \
{ R26, R25, R24, R23, R22, R21, R20 }, \
{ R36, R35, R34, R33, R32, R31, R30 }, \
{ R46, R45, R44, R43, R42, R41, KC_NO } \
}
#define LAYOUT_2key( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
L30, L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, L45, R41, R42, R43, R44, R45, R46 \
) \
{ \
{ L00, L01, L02, L03, L04, L05, L06 }, \
{ L10, L11, L12, L13, L14, L15, L16 }, \
{ L20, L21, L22, L23, L24, L25, L26 }, \
{ L30, L31, L32, L33, L34, L35, KC_NO }, \
{ L40, L41, L42, L43, L44, L45, KC_NO }, \
{ R06, R05, R04, R03, R02, R01, R00 }, \
{ R16, R15, R14, R13, R12, R11, R10 }, \
{ R26, R25, R24, R23, R22, R21, R20 }, \
{ R36, R35, R34, R33, R32, R31, KC_NO }, \
{ R46, R45, R44, R43, R42, R41, KC_NO } \
}
#define LAYOUT LAYOUT_4key
#else #else
// Keymap with right side flipped // Keymap with right side flipped
// (TRRS jack on both halves are to the right) // (TRRS jack on both halves are to the right)
#define LAYOUT( \ #define LAYOUT( \
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \ L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
) \ ) \
{ \ { \
{ L00, L01, L02, L03, L04, L05, L06 }, \ { L00, L01, L02, L03, L04, L05, L06 }, \
{ L10, L11, L12, L13, L14, L15, L16 }, \ { L10, L11, L12, L13, L14, L15, L16 }, \
{ L20, L21, L22, L23, L24, L25, L26 }, \ { L20, L21, L22, L23, L24, L25, L26 }, \
{ L30, L31, L32, L33, L34, L35, L36 }, \ { L30, L31, L32, L33, L34, L35, L36 }, \
{ L40, L41, L42, L43, L44, L45, L46 }, \ { L40, L41, L42, L43, L44, L45, L46 }, \
{ R00, R01, R02, R03, R04, R05, R06 }, \ { R00, R01, R02, R03, R04, R05, R06 }, \
{ R10, R11, R12, R13, R14, R15, R16 }, \ { R10, R11, R12, R13, R14, R15, R16 }, \
{ R20, R21, R22, R23, R24, R25, R26 }, \ { R20, R21, R22, R23, R24, R25, R26 }, \
{ R30, R31, R32, R33, R34, R35, R36 }, \ { R30, R31, R32, R33, R34, R35, R36 }, \
{ R40, R41, R42, R43, R44, R45, R46 } \ { R40, R41, R42, R43, R44, R45, R46 } \
} }
#endif #endif
#endif #endif
@@ -6,3 +6,4 @@ Emulates original keymap with modifications for:
- Grave key(s) - Grave key(s)
- Reset on the function layer - Reset on the function layer
- Mouse keys ala Tada68 - Mouse keys ala Tada68
- A layer for playing with Colemak
+61 -10
View File
@@ -16,6 +16,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
enum siroleo_layers
{
_QWERTY,
_COLEMAK,
_FNM
};
enum siroleo_keycodes
{
QWERTY = SAFE_RANGE,
COLEMAK
};
#define FNM MO(_FNM)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* BASE layer: Default Layer /* BASE layer: Default Layer
* ,--------------------------------------------------------------------------------------------------. * ,--------------------------------------------------------------------------------------------------.
@@ -30,12 +45,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Alt | Gui | Space | Fn | Ctrl | Alt | Left| Down|Right| * | Ctrl | Alt | Gui | Space | Fn | Ctrl | Alt | Left| Down|Right|
* `--------------------------------------------------------------------------------------------------´ * `--------------------------------------------------------------------------------------------------´
*/ */
[0] = LAYOUT( [_QWERTY] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_GRV, 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_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, 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_GRV ,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_GRV , 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_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, MO(1),KC_RCTL,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, FNM,KC_RCTL,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT
),
/* Colemak Layer
* ,--------------------------------------------------------------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace | | ` |
* |-----------------------------------------------------------------------------------------+ +-----+
* | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | | Del |
* |-----------------------------------------------------------------------------------------+ +-----+
* | ` | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
* |--------------------------------------------------------------------------------------------+
* | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Up |
* +--------------------------------------------------------------------------------------------+-----+
* | Ctrl | Alt | Gui | Space | Fn | Ctrl | Alt | Left| Down|Right|
* `--------------------------------------------------------------------------------------------------´
*/
[_COLEMAK] = LAYOUT(
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_GRV,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL,
KC_GRV , KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O ,KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT,KC_SLSH,KC_RSFT, KC_UP,
KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, FNM,KC_RCTL,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT
), ),
/* FN layer /* FN layer
* ,--------------------------------------------------------------------------------------------------. * ,--------------------------------------------------------------------------------------------------.
@@ -50,11 +85,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | Reset | | | | | | MsL | MsD | MsR | * | | Reset | | | | | | MsL | MsD | MsR |
* `--------------------------------------------------------------------------------------------------´ * `--------------------------------------------------------------------------------------------------´
*/ */
[1] = LAYOUT( [_FNM] = LAYOUT(
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_MUTE, KC_VOLU, 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_MUTE, KC_VOLU,
_______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______,_______,_______, KC_VOLD, _______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______,_______, RESET, KC_VOLD,
_______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,KC_PGUP,_______,_______, _______, _______,_______,_______, QWERTY,COLEMAK,_______,_______,_______,KC_HOME,KC_PGUP,_______,_______, _______,
_______,_______,_______,_______,_______,_______,_______,_______,KC_END, KC_PGDN,_______,KC_BTN1, KC_MS_U, _______,_______,_______,_______,_______,_______,_______,_______,KC_END, KC_PGDN,_______,KC_BTN1, KC_MS_U,
_______, RESET,_______, _______, MO(1), _______,_______, KC_MS_L,KC_MS_D,KC_MS_R _______,_______,_______, _______, _______,_______,_______, KC_MS_L,KC_MS_D,KC_MS_R
) )
}; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
return false;
}
return true;
}
+2 -1
View File
@@ -9,7 +9,7 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "drashna.h" #include "drashna.h"
// clang-format off
#define LAYOUT_gergo_base( \ #define LAYOUT_gergo_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
@@ -111,3 +111,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
), ),
*/ */
// clang-format on
+3 -2
View File
@@ -19,6 +19,7 @@ void matrix_init_kb(void) {
// put your keyboard start-up code here // put your keyboard start-up code here
// runs once when the firmware starts up // runs once when the firmware starts up
setPinOutput(E6);
matrix_init_user(); matrix_init_user();
} }
@@ -39,9 +40,9 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
void led_set_kb(uint8_t usb_led) { void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
writePinHigh(E6);
} else {
writePinLow(E6); writePinLow(E6);
} else {
writePinHigh(E6);
} }
led_set_user(usb_led); led_set_user(usb_led);
+78
View File
@@ -0,0 +1,78 @@
/*
Copyright 2019 mechmerlin
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x7539
#define DEVICE_VER 0x0005
#define MANUFACTURER Grid
#define PRODUCT PRESS
#define DESCRIPTION Top module for Grid 600
/* key matrix size */
#define MATRIX_ROWS 1
#define MATRIX_COLS 4
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { F0 }
#define MATRIX_COL_PINS { F1, F4, F5, F6 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define RGB_DI_PIN B6
#ifdef RGB_DI_PIN
#define RGBLED_NUM 4
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
#define RGBLIGHT_ANIMATIONS
/*== customize breathing effect ==*/
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
#define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
/*==== use exp() and sin() ====*/
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
#define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
+12
View File
@@ -0,0 +1,12 @@
{
"keyboard_name": "Grid 600 Type 05 PRESS Cover Module",
"url": "",
"maintainer": "qmk",
"width": 4,
"height": 1,
"layouts": {
"LAYOUT": {
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}]
}
}
}
@@ -1,4 +1,4 @@
/* Copyright 2018 amnesia0287 /* Copyright 2019 mechmerlin
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -0,0 +1,34 @@
/* Copyright 2019 mechmerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_G, KC_R, KC_I, KC_D
),
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void led_set_user(uint8_t usb_led) {
}
@@ -0,0 +1 @@
# The default keymap for grid
+16
View File
@@ -0,0 +1,16 @@
/* Copyright 2019 mechmerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "press.h"
+32
View File
@@ -0,0 +1,32 @@
/* Copyright 2019 mechmerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
K00, K01, K02, K03 \
) { \
{ K00, K01, K02, K03 } \
}
+18
View File
@@ -0,0 +1,18 @@
# Grid 600 Type 05 "PRESS" Cover Module
Cover module for Grid 600 Keyboard with 4 keys.
Code for the module was originally located at [gridishere's QMK fork](https://github.com/gridishere/qmk_firmware/tree/master/keyboards/grid/gridmod5).
Please keep in mind that this is actually a separate keyboard from the one installed in the Grid 600.
Functionality such as layer changes and light modifications triggered on one PCB will not affect the other.
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
Hardware Supported: Grid 600 Type 05 "PRESS" cover module.
Hardware Availability: [zFrontier](https://en.zfrontier.com/products/grid600s)
Make example for this keyboard (after setting up your build environment):
make grid600/press:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+80
View File
@@ -0,0 +1,80 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = atmel-dfu
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# 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 = lite # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+7
View File
@@ -0,0 +1,7 @@
# Grid 600 Cover Modules
The Grid 600 is a tray mount 60% case supporting most standard 60% PCBs.
A unique feature of the Grid 600 is that it has five different cover modules that not only include USB C pass through, but also have functions such as RGB or additional macro keys.
This is a collection of some of the programmable modules available for this enclosure.
-1
View File
@@ -44,7 +44,6 @@
#define MATRIX_COL_PINS { B8, B2, B10, A0, A1, A2, B0, A3, B1, A6, A7, B12, C13, B11, B9 } #define MATRIX_COL_PINS { B8, B2, B10, A0, A1, A2, B0, A3, B1, A6, A7, B12, C13, B11, B9 }
#define UNUSED_PINS #define UNUSED_PINS
#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B13 } #define ENCODERS_PAD_A { B13 }
#define ENCODERS_PAD_B { B14 } #define ENCODERS_PAD_B { B14 }
-7
View File
@@ -111,13 +111,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/* 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 */ /* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true //#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true //#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+16
View File
@@ -0,0 +1,16 @@
/* Copyright 2019 joaofbmaia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "6macro.h"
+35
View File
@@ -0,0 +1,35 @@
/* Copyright 2019 joaofbmaia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
k00, k01, k02, \
k10, k11, k12 \
) \
{ \
{ k00, k01, k02 }, \
{ k10, k11, k12 }, \
}
+70
View File
@@ -0,0 +1,70 @@
/*
Copyright 2019 joaofbmaia
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0037
#define DEVICE_VER 0x0001
#define MANUFACTURER joaofbmaia
#define PRODUCT 6macro
#define DESCRIPTION 6macro
/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 3
/* pinout - DON'T CHANGE */
#define MATRIX_ROW_PINS { B3, B4 }
#define MATRIX_COL_PINS { B0, B1, B2 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
#define RGB_DI_PIN D2
#define RGBLED_NUM 10
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
// /*== all animations enable ==*/
// #define RGBLIGHT_ANIMATIONS
// /*== or choose animations ==*/
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
// #define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
// #define RGBLIGHT_EFFECT_RGB_TEST
// #define RGBLIGHT_EFFECT_ALTERNATING
// /*== customize breathing effect ==*/
// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
// /*==== use exp() and sin() ====*/
// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
+13
View File
@@ -0,0 +1,13 @@
{
"keyboard_name": "6macro",
"url": "",
"maintainer": "joaofbmaia",
"width": 3,
"height": 2,
"layouts": {
"LAYOUT": {
"layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}]
}
}
}
@@ -0,0 +1,18 @@
/* Copyright 2019 joaofbmaia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
@@ -0,0 +1,56 @@
/* Copyright 2019 joaofbmaia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* LAYER 0
* ,-----------------------.
* | F13 | F14 | F15/FN| Hold for FN
* |-------+-------+-------|
* | F16 | F17 | F18 |
* `-------+-------+-------'
*/
[0] = LAYOUT(
KC_F13, KC_F14, LT(1, KC_F15), \
KC_F16, KC_F17, KC_F18 \
),
/* LAYER 1
* ,-----------------------.
* |RGB_TOG|RGBMOD+| |
* |-------+-------+-------|
* |RGBHUE+|RGBBRI+|Spec FN| Hold along with previous to access special funtions (RESET)
* `-------+-------+-------'
*/
[1] = LAYOUT(
RGB_TOG, RGB_MOD, KC_TRNS, \
RGB_HUI, RGB_VAI, MO(2) \
),
/* LAYER 2
* ,-----------------------.
* | RESET |RGBMOD-| |
* |-------+-------+-------|
* |RGBHUE-|RGBBRI-| |
* `-------+-------+-------'
*/
[2] = LAYOUT(
RESET, RGB_RMOD, KC_NO, \
RGB_HUD, RGB_VAD, KC_TRNS \
)
};
@@ -0,0 +1,15 @@
Layer 0:
![Layer 0](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer0_default.png)
Layer 1:
![Layer 1](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer1.png)
Layer 2:
![Layer 2](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer2.png)
# Default 6macro Layout
This is the default layout. Layer 0 is mappped to function keys 13-18. Top right key switches to layer above when held. Upper layers are for RGB control.
@@ -0,0 +1,18 @@
/* Copyright 2019 joaofbmaia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
@@ -0,0 +1,56 @@
/* Copyright 2019 joaofbmaia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* LAYER 0
* ,-----------------------.
* | ESC | ~ | SPC/FN| Hold for FN
* |-------+-------+-------|
* | C | Z | X |
* `-------+-------+-------'
*/
[0] = LAYOUT(
KC_ESC, KC_GRAVE, LT(1, KC_SPC), \
KC_C, KC_Z, KC_X \
),
/* LAYER 1
* ,-----------------------.
* |RGB_TOG|RGBMOD+| |
* |-------+-------+-------|
* |RGBHUE+|RGBBRI+|Spec FN| Hold along with previous to access special funtions (RESET)
* `-------+-------+-------'
*/
[1] = LAYOUT(
RGB_TOG, RGB_MOD, KC_TRNS, \
RGB_HUI, RGB_VAI, MO(2) \
),
/* LAYER 2
* ,-----------------------.
* | RESET |RGBMOD-| |
* |-------+-------+-------|
* |RGBHUE-|RGBBRI-| |
* `-------+-------+-------'
*/
[2] = LAYOUT(
RESET, RGB_RMOD, KC_NO, \
RGB_HUD, RGB_VAD, KC_TRNS \
)
};
@@ -0,0 +1,15 @@
Layer 0:
![Layer 0](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer0_osu.png)
Layer 1:
![Layer 1](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer1.png)
Layer 2:
![Layer 2](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer2.png)
# OSU 6macro Layout
This layout is for the game OSU. Layer 0 is mappped as shown above. Top right key switches to layer above when held. Upper layers are for RGB control.
+15
View File
@@ -0,0 +1,15 @@
# 6macro
![6macro photo](https://raw.githubusercontent.com/joaofbmaia/6macro/master/photo.jpg)
![6macro photo with RGB](https://raw.githubusercontent.com/joaofbmaia/6macro/master/photo_rgb.jpg)
This is a 6-key keyboard intended for macros or as a dedicated controller for games with few bindings.
Keyboard Maintainer: [joaofbmaia](https://github.com/joaofbmaia)
Hardware: https://github.com/joaofbmaia/6macro
Make example for this keyboard (after setting up your build environment):
make handwired/6macro:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+81
View File
@@ -0,0 +1,81 @@
# MCU name
MCU = atmega32u2
# 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
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = atmel-dfu
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# 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
#RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+1 -2
View File
@@ -52,10 +52,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCE 5 #define DEBOUNCE 5
/* Set up rotary encoder */ /* Set up rotary encoder */
#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { F1 } #define ENCODERS_PAD_A { F1 }
#define ENCODERS_PAD_B { F0 } #define ENCODERS_PAD_B { F0 }
#define ENCODER_RESOLUTION 2 #define ENCODER_RESOLUTION 2
/* Set delay for tap_code on rotary encoder */ /* Set delay for tap_code on rotary encoder */
#define TAP_CODE_DELAY 10 #define TAP_CODE_DELAY 10
@@ -13,11 +13,14 @@ extern keymap_config_t keymap_config;
#define _QWERTY 0 #define _QWERTY 0
#define _LOWER 1 #define _LOWER 1
#define _RAISE 2 #define _RAISE 2
#define _ADJUST 3
#define LOWER MO(_LOWER) #define LOWER MO(_LOWER)
#define RAISE MO(_RAISE) #define RAISE MO(_RAISE)
static bool is_ctl_pressed;
static bool is_esc_pressed;
static bool is_bspc_pressed;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty /* Qwerty
@@ -73,20 +76,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
), ),
/* Adjust */
[_ADJUST] = LAYOUT_ortho_4x12 (
_______, RESET, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
}; };
uint32_t layer_state_set_user(uint32_t state) { uint32_t layer_state_set_user(uint32_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); #ifdef JOTANCK_LEDS
switch (biton32(state)) {
case _LOWER:
writePinHigh(JOTANCK_LED1);
writePinLow(JOTANCK_LED2);
break;
case _RAISE:
writePinLow(JOTANCK_LED1);
writePinHigh(JOTANCK_LED2);
break;
default:
writePinLow(JOTANCK_LED1);
writePinLow(JOTANCK_LED2);
break;
};
#endif
return state;
} }
void matrix_init_user(void) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LCTL:
is_ctl_pressed = record->event.pressed;
break;
case KC_ESC:
is_esc_pressed = record->event.pressed;
break;
case KC_BSPC:
is_bspc_pressed = record->event.pressed;
break;
};
return true;
}
void matrix_scan_user(void) {
if (is_ctl_pressed && is_esc_pressed && is_bspc_pressed) {
reset_keyboard();
}
} }
+2
View File
@@ -35,4 +35,6 @@ Make example for this keyboard (after setting up your build environment):
![Default Keymap](https://i.imgur.com/xh7Dmd7.png) ![Default Keymap](https://i.imgur.com/xh7Dmd7.png)
To reset the keyboard press Ctrl+Esc+BackSpace
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+1 -1
View File
@@ -8,6 +8,6 @@ Hardware Availability: The Board Podcast Slack
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
make handwired/numbrero/numbrero:default make handwired/numbrero:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-7
View File
@@ -33,12 +33,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROWS 2 #define MATRIX_ROWS 2
#define MATRIX_COLS 1 #define MATRIX_COLS 1
// wiring of each half
#define MATRIX_ROW_PINS { B3 }
#define MATRIX_COL_PINS { B6 }
#define SPLIT_HAND_PIN F6
#define SOFT_SERIAL_PIN D1
/* define if matrix has ghost */ /* define if matrix has ghost */
//#define MATRIX_HAS_GHOST //#define MATRIX_HAS_GHOST
@@ -51,7 +45,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_RESYNC_ENABLE #define LOCKING_RESYNC_ENABLE
/* ws2812 RGB LED */ /* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS #define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 12 #define RGBLED_NUM 12
#define RGBLED_SPLIT { 6, 6 } #define RGBLED_SPLIT { 6, 6 }
@@ -0,0 +1,28 @@
/* Copyright 2019
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
// wiring of each half
#define MATRIX_ROW_PINS { B3 }
#define MATRIX_COL_PINS { B6 }
#define SPLIT_HAND_PIN F6
#define SOFT_SERIAL_PIN D1
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
@@ -0,0 +1,11 @@
# Pro Micro splittest
To trigger keypress, short together pins *B3* and *B6* (marked on the PCB as *14* and *10*).
## Wiring
- Add switches to both Pro Micros across B3 and B6 pins
- Add pull-up resistor to left side between VCC and F6
- Add pull-down resistors to right side between GND and F6
- Connect the following pins on both sides together: D0, D1, GND, VCC
- Add I2C 4.7kOhm resistors between D0 and VCC, and D1 and VCC
- Wire Di of RGB strip for each half to D3
@@ -0,0 +1,58 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = caterina
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+4 -10
View File
@@ -4,7 +4,10 @@ Split Tester
A two-switch tester built using two Pro Micros, mainly intended to test RGB on split keyboards. Seen here: https://www.instagram.com/p/BvCPNzynwrV/ A two-switch tester built using two Pro Micros, mainly intended to test RGB on split keyboards. Seen here: https://www.instagram.com/p/BvCPNzynwrV/
Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
Hardware Supported: Pro Micro Hardware Supported: Pro Micro, Teensy 2.0
Hardware Availability:
**See each individual board for pin infomation**
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
@@ -15,12 +18,3 @@ Example of flashing this keyboard:
make handwired/splittest:default:avrdude make handwired/splittest:default:avrdude
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
Wiring
------
- Add switches to both Pro Micros across B3 and B6 pins
- Add pull-up resistor to left side between VCC and F6
- Add pull-down resistors to right side between GND and F6
- Connect the following pins on both sides together: D0, D1, GND, VCC
- Add I2C 4.7kOhm resistors between D0 and VCC, and D1 and VCC
- Wire Di of RGB strip for each half to D2
+2 -44
View File
@@ -1,47 +1,3 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Build Options # Build Options
# change to "no" to disable the options, or define them in the Makefile in # change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically # the appropriate keymap folder that will get included automatically
@@ -63,3 +19,5 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
SPLIT_KEYBOARD = yes SPLIT_KEYBOARD = yes
DEFAULT_FOLDER = handwired/splittest/promicro
@@ -0,0 +1,31 @@
/* Copyright 2019
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
// wiring of each half
#define MATRIX_ROW_PINS { F5 }
#define MATRIX_COL_PINS { F7 }
#define SPLIT_HAND_PIN F0
#define SOFT_SERIAL_PIN D1
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
// required for teensy slave otherwise it "locks up" during startup
#define NO_USB_STARTUP_CHECK
@@ -0,0 +1,11 @@
# Teensy 2.0 splittest
To trigger keypress, short together pins *F5* and *F7*
## Wiring
- Add switches to both Teensy 2s across F5 and F7 pins
- Add pull-up resistor to left side between VCC and F0
- Add pull-down resistors to right side between GND and F0
- Connect the following pins on both sides together: D0, D1, GND, VCC
- Add I2C 4.7kOhm resistors between D0 and VCC, and D1 and VCC
- Wire Di of RGB strip for each half to D3
@@ -0,0 +1,58 @@
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# atmega32a bootloadHID
BOOTLOADER = halfkay
# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
@@ -0,0 +1,14 @@
#include QMK_KEYBOARD_H
bool is_keyboard_master(void) {
// TODO: replace this override once USB host detection is implemented
// SPLIT_HAND_PIN Combined with MASTER_LEFT or MASTER_RIGHT, gives a crude
// way to force teensy to run as slave/master
setPinInput(SPLIT_HAND_PIN);
#if defined(MASTER_RIGHT)
return !readPin(SPLIT_HAND_PIN);
#else
return readPin(SPLIT_HAND_PIN);
#endif
}
+2 -2
View File
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
+2 -2
View File
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
+2 -2
View File
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
+2 -2
View File
@@ -1,6 +1,6 @@
# project specific files # project specific files
SRC = keyboards/zeal60/zeal60.c \ SRC = keyboards/wilba_tech/wt_main.c \
keyboards/zeal60/rgb_backlight.c \ keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/issi/is31fl3733.c \ drivers/issi/is31fl3733.c \
quantum/color.c \ quantum/color.c \
drivers/arm/i2c_master.c drivers/arm/i2c_master.c
+2 -2
View File
@@ -18,8 +18,8 @@
#define XXX KC_NO #define XXX KC_NO
#include "quantum.h" #include "quantum.h"
#include "../../zeal60/rgb_backlight_keycodes.h" #include "../../wilba_tech/wt_rgb_backlight_keycodes.h"
#include "../../zeal60/zeal60_keycodes.h" #include "../../wilba_tech/via_keycodes.h"
// This a shortcut to help you visually see your layout. // This a shortcut to help you visually see your layout.
+1 -2
View File
@@ -1,5 +1,4 @@
# MCU name # MCU name
#MCU = at90usb1287
MCU = atmega32u4 MCU = atmega32u4
# Processor frequency. # Processor frequency.
@@ -64,4 +63,4 @@ API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
DEFAULT_FOLDER = ivy/rev1 DEFAULT_FOLDER = ivy/rev1
-5
View File
@@ -107,11 +107,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/* 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 */ /* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true //#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true //#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-1
View File
@@ -38,7 +38,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ E6, B4, B2 } \ { E6, B4, B2 } \
} }
#define NUMBER_OF_ENCODERS 2
#define ENCODERS_PAD_A { D1, F5 } #define ENCODERS_PAD_A { D1, F5 }
#define ENCODERS_PAD_B { D0, F6 } #define ENCODERS_PAD_B { D0, F6 }
+1 -1
View File
@@ -11,7 +11,7 @@
#endif #endif
#include "quantum.h" #include "quantum.h"
#include "../../zeal60/zeal60_keycodes.h" #include "../../wilba_tech/via_keycodes.h"
// Used to create a keymap using only KC_ prefixed keys // Used to create a keymap using only KC_ prefixed keys
#define LAYOUT_kc( \ #define LAYOUT_kc( \
+27 -22
View File
@@ -19,8 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Use I2C or Serial, not both */ /* Use I2C or Serial, not both */
// #define USE_SERIAL #define USE_SERIAL
#define USE_I2C // #define USE_I2C
/* Select hand configuration */ /* Select hand configuration */
@@ -29,33 +29,38 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EE_HANDS #define EE_HANDS
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
# undef RGBLED_NUM # undef RGBLED_NUM
# define RGBLED_NUM 18 // Number of LEDs # define RGBLED_NUM 18 // Number of LEDs
# define RGBLED_SPLIT { 9, 9 } # undef RGBLED_SPLIT
# define RGBLIGHT_HUE_STEP 12 # define RGBLED_SPLIT { 9, 9 }
# define RGBLIGHT_SAT_STEP 12 # define RGBLIGHT_HUE_STEP 8
# define RGBLIGHT_VAL_STEP 12 # define RGBLIGHT_SAT_STEP 8
# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 # define RGBLIGHT_VAL_STEP 8
# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 # define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
# define RGBLIGHT_LIMIT_VAL 225 # define RGBLIGHT_LIMIT_VAL 225
#endif // RGBLIGHT_ENABLE #endif // RGBLIGHT_ENABLE
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE
# define C6_AUDIO # define C6_AUDIO
# ifdef RGBLIGHT_ENABLE # ifdef RGBLIGHT_ENABLE
# define NO_MUSIC_MODE # define NO_MUSIC_MODE
# endif //RGBLIGHT_ENABLE # endif // RGBLIGHT_ENABLE
#endif //AUDIO_ENABLE #endif // AUDIO_ENABLE
#define QMK_ESC_OUTPUT F6 // usually COL #ifndef KEYBOARD_keebio_iris_rev3
#define QMK_ESC_INPUT D7 // usually ROW # define QMK_ESC_OUTPUT F6 // usually COL
#define QMK_LED B0 # define QMK_ESC_INPUT D7 // usually ROW
#define QMK_SPEAKER C6 # define QMK_LED B0
# define QMK_SPEAKER C6
#endif
#undef PRODUCT #undef PRODUCT
#ifdef KEYBOARD_keebio_iris_rev2 #ifdef KEYBOARD_keebio_iris_rev2
# define PRODUCT Drashna Hacked Iris Rev.2 # define PRODUCT Drashna Hacked Iris Rev .2
#elif defined(KEYBOARD_keebio_iris_rev3)
# define PRODUCT Drashna Hacked Iris Rev .3
#endif #endif
#define SHFT_LED1 6 #define SHFT_LED1 6
@@ -2,7 +2,7 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#include "drashna.h" #include "drashna.h"
// clang-format off
#define LAYOUT_iris_base( \ #define LAYOUT_iris_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
@@ -110,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
) )
}; };
// clang-format on
void matrix_init_keymap(void) { void matrix_init_keymap(void) {
#ifndef CONVERT_TO_PROTON_C #ifndef CONVERT_TO_PROTON_C
@@ -122,13 +122,12 @@ void matrix_init_keymap(void) {
#endif #endif
} }
void keyboard_post_init_keymap(void) { void keyboard_post_init_keymap(void) {
#if BACKLIGHT_ENABLE #if BACKLIGHT_ENABLE
backlight_enable(); backlight_enable();
backlight_level(5); backlight_level(5);
#ifdef BACKLIGHT_BREATHING # ifdef BACKLIGHT_BREATHING
breathing_enable(); breathing_enable();
#endif # endif
#endif #endif
} }
@@ -14,6 +14,6 @@ SPACE_CADET_ENABLE = no
INDICATOR_LIGHTS = no INDICATOR_LIGHTS = no
MACROS_ENABLED = no MACROS_ENABLED = no
RGBLIGHT_TWINKLE = no RGBLIGHT_TWINKLE = no
RGBLIGHT_STARTUP_ANIMATION = yes RGBLIGHT_STARTUP_ANIMATION = no
BOOTLOADER = qmk-dfu BOOTLOADER = qmk-dfu
+16 -16
View File
@@ -4,7 +4,7 @@ extern keymap_config_t keymap_config;
enum layer_names { enum layer_names {
_QWERTY, _QWERTY,
_WORKMAN, _COLEMAK,
_LOWER, _LOWER,
_RAISE, _RAISE,
_ADJUST _ADJUST
@@ -12,7 +12,7 @@ enum layer_names {
enum custom_keycodes { enum custom_keycodes {
QWERTY = SAFE_RANGE, QWERTY = SAFE_RANGE,
WORKMAN, COLEMAK,
LOWER, LOWER,
RAISE RAISE
}; };
@@ -24,8 +24,8 @@ enum custom_keycodes {
#define KC_RST RESET #define KC_RST RESET
#define KC_BL_S BL_STEP #define KC_BL_S BL_STEP
// left control as a left key too - makes perfect sense // left shift as a left key too - makes perfect sense
#define KC_LECL LCTL_T(KC_LEFT) #define KC_LESF LSFT_T(KC_LEFT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -36,23 +36,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----| |----+----+----+----+----+----| //|----+----+----+----+----+----| |----+----+----+----+----+----|
TAB , Q , W , E , R , T , Y , U , I , O , P ,BSLS, TAB , Q , W , E , R , T , Y , U , I , O , P ,BSLS,
//|----+----+----+----+----+----| |----+----+----+----+----+----| //|----+----+----+----+----+----| |----+----+----+----+----+----|
LSFT, A , S , D , F , G , H , J , K , L ,SCLN,QUOT, LCTL, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
LECL, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,RGHT, LESF, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,RGHT,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
LGUI,LOWR,ENT , SPC ,RASE,RALT LGUI,LOWR,ENT , SPC ,RASE,RALT
// `----+----+----' `----+----+----' // `----+----+----' `----+----+----'
), ),
[_WORKMAN] = LAYOUT_kc( [_COLEMAK] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
GESC, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC, GESC, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
//|----+----+----+----+----+----| |----+----+----+----+----+----| //|----+----+----+----+----+----| |----+----+----+----+----+----|
TAB , Q , D , R , W , B , J , F , U , P ,SCLN,BSLS, TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,BSLS,
//|----+----+----+----+----+----| |----+----+----+----+----+----| //|----+----+----+----+----+----| |----+----+----+----+----+----|
LSFT, A , S , H , T , G , Y , N , E , O ,I ,QUOT, LCTL, A , R , S , T , D , H , N , E , I , O ,QUOT,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
LECL, Z , X , M , C , V ,LBRC, RBRC, K , L ,COMM,DOT ,SLSH,RGHT, LESF, Z , X , C , V , B ,LBRC, RBRC, K , M ,COMM,DOT ,SLSH,RGHT,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
LGUI,LOWR,ENT , SPC ,RASE,RALT LGUI,LOWR,ENT , SPC ,RASE,RALT
// `----+----+----' `----+----+----' // `----+----+----' `----+----+----'
@@ -60,13 +60,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LOWER] = LAYOUT_kc( [_LOWER] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,DEL , GRV ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,DEL ,
//|----+----+----+----+----+----| |----+----+----+----+----+----| //|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , , ,BTN1, , , , , , , , , , , ,BTN1, , , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----| //|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , MS_L,MS_D,MS_U,MS_R, , , , , , , , , MS_L,MS_D,MS_U,MS_R, , ,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
, , , , , UP , , , , , , , , , , , , , , UP , , ,DOWN, , , , , ,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
, , , , , , , , , ,
// `----+----+----' `----+----+----' // `----+----+----' `----+----+----'
@@ -80,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----| |----+----+----+----+----+----| //|----+----+----+----+----+----| |----+----+----+----+----+----|
,MPLY,VOLD,MNXT, ,LPRN, RPRN,MINS,EQL , , , , ,MPLY,VOLD,MNXT, ,LPRN, RPRN,MINS,EQL , , , ,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
, , , , , , , ,DOWN, , , , , , , , , , , , , , , , , , , ,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
, , , , , , , , , ,
// `----+----+----' `----+----+----' // `----+----+----' `----+----+----'
@@ -88,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = LAYOUT( [_ADJUST] = LAYOUT(
//,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
_______, _______, _______, _______, _______, QWERTY, WORKMAN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
@@ -113,9 +113,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
set_single_persistent_default_layer(_QWERTY); set_single_persistent_default_layer(_QWERTY);
} }
return false; return false;
case WORKMAN: case COLEMAK:
if (record->event.pressed) { if (record->event.pressed) {
set_single_persistent_default_layer(_WORKMAN); set_single_persistent_default_layer(_COLEMAK);
} }
return false; return false;
case LOWER: case LOWER:
@@ -3,9 +3,10 @@
![My Iris Rev3](https://i.imgur.com/7oXacel.jpg) ![My Iris Rev3](https://i.imgur.com/7oXacel.jpg)
- mouse keys enabled - mouse keys enabled
- includes a QWERTY and a WORKMAN layout now - includes a QWERTY and a COLEMAK layout now
- keys that I need, while removing keys that I don't - keys that I need, while removing keys that I don't
- more updates with the layout coming soon - more updates with the layout coming soon
- the enter needs to move elsewhere, not yet sure where - the enter needs to move elsewhere, not yet sure where
- support for VIA Configurator
See keymap.c for layouts See keymap.c for layouts
@@ -1,3 +1,8 @@
RGBLIGHT_ENABLE = yes RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes BACKLIGHT_ENABLE = yes
MOUSEKEY_ENABLE = yes MOUSEKEY_ENABLE = yes
# VIA Support - Comment these 3 lines out to disable
# RAW_ENABLE = yes
# DYNAMIC_KEYMAP_ENABLE = yes
# SRC += keyboards/wilba_tech/wt_main.c
-1
View File
@@ -41,7 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define QMK_LED B0 #define QMK_LED B0
#define QMK_SPEAKER C6 #define QMK_SPEAKER C6
#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B5 } #define ENCODERS_PAD_A { B5 }
#define ENCODERS_PAD_B { B7 } #define ENCODERS_PAD_B { B7 }
@@ -21,4 +21,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once #pragma once
#define USE_I2C #undef RGBLIGHT_ANIMATIONS
@@ -2,43 +2,90 @@
extern keymap_config_t keymap_config; 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 _BASE 0 #define _BASE 0
#define _FN1 1 #define _L 1
#define _R 2
enum custom_keycodes { enum custom_keycodes {
QWERTY = SAFE_RANGE, QWERTY = SAFE_RANGE,
}; };
#define KC_TL LCTL(KC_PGUP)
#define KC_TR LCTL(KC_PGDN)
#define KC_TC LCTL(KC_W)
#define KC_TRO LCTL(LSFT(KC_T))
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_65( [_BASE] = LAYOUT_65(
// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
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_DEL, KC_HOME,\ KC_GRV ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 , KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSPC ,KC_DEL ,KC_MINS ,KC_EQL ,KC_HOME,
// ├────────┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┘ ┌───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────────┼────────┤ // ├────────┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┘ ┌───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────────┼────────┤
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_LBRC ,KC_RBRC ,KC_BSLS ,KC_END ,
// ├─────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┐ └─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┼────────┤ // ├─────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┐ └─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┼────────┤
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,\ KC_ESC ,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, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, _______, KC_PGDN,\ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT, _______ ,KC_PGDN ,
// ├──────────┬──────────┴┬───────┴──┬─────┴─────┬──┴────────┴────────┤ ├────────┴────────┴────┬───┴────┬───┴────┬───┴────┬────────┬────────┼────────┤ // ├──────────┬──────────┴┬───────┴──┬─────┴─────┬──┴────────┴────────┤ ├────────┴────────┴────┬───┴────┬───┴────┬───┴────┬────────┬────────┼────────┤
KC_LCTL, KC_LGUI, KC_LALT, MO(_FN1), KC_SPC, KC_SPC ,_______, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT KC_CAPS ,KC_LCTL ,KC_LALT ,MO(_L) ,KC_SPC , KC_SPC ,_______ ,KC_LGUI ,TG(_R) ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
// └──────────┴───────────┴──────────┴───────────┴────────────────────┘ └──────────────────────┴────────┴────────┴────────┴────────┴────────┴────────┘ // └──────────┴───────────┴──────────┴───────────┴────────────────────┘ └──────────────────────┴────────┴────────┴────────┴────────┴────────┴────────┘
), ),
[_FN1] = LAYOUT_65( [_L] = LAYOUT_65(
// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
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_BSPC, KC_DEL, KC_INS, \ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 , KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,_______ ,_______ ,_______ ,_______ ,KC_INS ,
// ├────────┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┘ ┌───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────────┼────────┤ // ├────────┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┘ ┌───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS,\ _______ ,KC_F11 ,KC_F12 ,_______ ,_______ ,_______ , _______ ,KC_MINS ,KC_EQL ,_______ ,_______ ,_______ ,_______ ,_______, KC_PAUS ,
// ├─────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┐ └─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┼────────┤ // ├─────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┐ └─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT ,_______ ,_______ ,_______ ,_______ ,
// ├───────────────┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┐ └─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴───────────────────┼────────┤ // ├───────────────┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┐ └─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴───────────────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,KC_PGDN ,KC_PGUP ,KC_HOME ,KC_END ,_______ ,_______ ,_______ ,
// ├──────────┬──────────┴┬───────┴──┬─────┴─────┬──┴────────┴────────┤ ├────────┴────────┴────┬───┴────┬───┴────┬───┴────┬────────┬────────┼────────┤ // ├──────────┬──────────┴┬───────┴──┬─────┴─────┬──┴────────┴────────┤ ├────────┴────────┴────┬───┴────┬───┴────┬───┴────┬────────┬────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______
// └──────────┴───────────┴──────────┴───────────┴────────────────────┘ └──────────────────────┴────────┴────────┴────────┴────────┴────────┴────────┘
),
[_R] = LAYOUT_65(
// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
// ├────────┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┘ ┌───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────┬───┴────────┼────────┤
_______ ,KC_TL ,KC_TR ,KC_TC ,KC_TRO ,_______ , _______ ,KC_TL , KC_TR , KC_TC , KC_TRO ,_______ ,_______ ,_______, _______ ,
// ├─────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┐ └─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┼────────┤
_______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT ,_______ , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT ,_______ ,_______ ,_______ ,_______ ,
// ├───────────────┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┐ └─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴─────┬──┴───────────────────┼────────┤
_______ ,KC_PGDN ,KC_PGUP ,KC_HOME ,KC_END ,_______ , _______ ,KC_PGDN ,KC_PGUP ,KC_HOME ,KC_END ,_______ ,_______ ,_______ ,
// ├──────────┬──────────┴┬───────┴──┬─────┴─────┬──┴────────┴────────┤ ├────────┴────────┴────┬───┴────┬───┴────┬───┴────┬────────┬────────┼────────┤
_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______
// └──────────┴───────────┴──────────┴───────────┴────────────────────┘ └──────────────────────┴────────┴────────┴────────┴────────┴────────┴────────┘ // └──────────┴───────────┴──────────┴───────────┴────────────────────┘ └──────────────────────┴────────┴────────┴────────┴────────┴────────┴────────┘
) )
}; };
void keyboard_post_init_user(void) {
rgblight_sethsv_noeeprom(HSV_BLUE);
}
void update_led(void) {
switch (biton32(layer_state)) {
case _BASE:
rgblight_sethsv_noeeprom(HSV_BLUE);
break;
case _L:
rgblight_sethsv_noeeprom(HSV_CORAL);
break;
case _R:
rgblight_sethsv_noeeprom(HSV_MAGENTA);
break;
}
if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
rgblight_sethsv_range(HSV_WHITE,0,4);
rgblight_sethsv_range(HSV_WHITE,12,16);
}
}
uint32_t layer_state_set_user(uint32_t state) {
update_led();
return state;
}
void led_set_user(uint8_t usb_led) {
update_led();
}
@@ -1,48 +1,64 @@
# George Petri's Quefrency 65 layout # George Petri's Quefrency 65 layout
``` ```
make keebio/quefrency:georgepetri make keebio/quefrency/rev1:georgepetri
``` ```
Based on the default querty layout with minor tweaks. Querty layout with minor changes and dedicated navigation layer.
The position of the arrow keys in a line in the bottom right.
The backspace key is 1u and to the left of the delete key.
Grave, pause and insert are on the function layer.
### Base Layer ### Base Layer
``` ```
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│ ESC ││ 1 ││ 2 ││ 3 ││ 4 ││ 5 ││ 6 │ │ 7 ││ 8 ││ 9 ││ 0 ││ MINS││ EQL ││ BSPC││ DEL ││ HOME│ │ GRV ││ 1 ││ 2 ││ 3 ││ 4 ││ 5 ││ 6 │ │ 7 ││ 8 ││ 9 ││ 0 ││ BSPC││ DEL ││ MINS││ EQL ││ HOME│
└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘
┌──────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────────┐┌──────┐ ┌──────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────────┐┌──────┐
│ TAB ││ Q ││ W ││ E ││ R ││ T │ │ Y ││ U ││ I ││ O ││ P ││ LBRC││ RBRC││ BSLS ││ END │ │ TAB ││ Q ││ W ││ E ││ R ││ T │ │ Y ││ U ││ I ││ O ││ P ││ LBRC││ RBRC││ BSLS ││ END │
└──────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────────┘└──────┘ └──────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────────┘└──────┘
┌────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────┐┌──────┐ ┌────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────┐┌──────┐
│ CAPS ││ A ││ S ││ D ││ F ││ G │ │ H ││ J ││ K ││ L ││ SCLN││ QUOT││ ENT ││ PGUP│ │ ESC ││ A ││ S ││ D ││ F ││ G │ │ H ││ J ││ K ││ L ││ SCLN││ QUOT││ ENT ││ PGUP│
└────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└────────────────┘└──────┘ └────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└────────────────┘└──────┘
┌────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────────┐┌──────┐ ┌────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────────┐┌──────┐
│ LSFT ││ Z ││ X ││ C ││ V ││ B │ │ N ││ M ││ COMM││ DOT ││ SLSH││ RSFT ││ PGDN│ │ LSFT ││ Z ││ X ││ C ││ V ││ B │ │ N ││ M ││ COMM││ DOT ││ SLSH││ RSFT ││ PGDN│
└────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└────────────────────┘└──────┘ └────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└────────────────────┘└──────┘
┌────────┐┌────────┐┌────────┐┌────────┐┌────────────────┐ ┌────────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌────────┐┌────────┐┌────────┐┌────────┐┌────────────────┐ ┌────────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│ LCTL ││ LGUI ││ LALT ││MO(_FN1)││ SPC │ │ SPC ││ RALT││ RCTL││ LEFT││ DOWN││ UP ││ RGHT│ │ CAPS ││ LCTL ││ LALT ││MO(_L) ││ SPC │ │ SPC ││ LGUI││TG(_R)││ LEFT││ DOWN││ UP ││ RGHT│
└────────┘└────────┘└────────┘└────────┘└────────────────┘ └────────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └────────┘└────────┘└────────┘└────────┘└────────────────┘ └────────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘
``` ```
### Function ### Raise
``` ```
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│ GRV ││ F1 ││ F2 ││ F3 ││ F4 ││ F5 ││ F6 │ │ F7 ││ F8 ││ F9 ││ F10 ││ F11 ││ F12 ││ BSPC││ DEL ││ INS │ │ ││ F1 ││ F2 ││ F3 ││ F4 ││ F5 ││ F6 │ │ F7 ││ F8 ││ F9 ││ F10 ││ F11 ││ F12 ││ BSPC││ DEL ││ INS │
└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘
┌──────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────────┐┌──────┐ ┌──────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────────┐┌──────┐
│ ││ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ ││ ││ ││ PAUS│ │ ││ F1 ││ F12 ││ ││ ││ │ │ ││ MINS││ EQL ││ ││ ││ ││ ││ ││ PAUS│
└──────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────────┘└──────┘ └──────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────────┘└──────┘
┌────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────┐┌──────┐ ┌────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────┐┌──────┐
│ ││ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ │ │ LEFT││ DOWN││ UP ││ RGHT││ ││ ││ ││ │
└────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└────────────────┘└──────┘ └────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└────────────────┘└──────┘
┌────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────────┐┌──────┐ ┌────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────────┐┌──────┐
│ ││ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ │ │ ││ PGDN││ PGUP││ HOME││ END ││ ││ │
└────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└────────────────────┘└──────┘ └────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└────────────────────┘└──────┘
┌────────┐┌────────┐┌────────┐┌────────┐┌────────────────┐ ┌────────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌────────┐┌────────┐┌────────┐┌────────┐┌────────────────┐ ┌────────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ ││ │
└────────┘└────────┘└────────┘└────────┘└────────────────┘ └────────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └────────┘└────────┘└────────┘└────────┘└────────────────┘ └────────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘
``` ```
### Lower
```
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│ ││ ││ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ ││ ││ ││ │
└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘
┌──────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────────┐┌──────┐
│ ││ TAB_L││ TAB_R││ TAB_C││ TAB_R││ │ │ ││ TAB_L││ TAB_R││ TAB_C││ TAB_R││ ││ ││ ││ │
└──────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────────┘└──────┘
┌────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────┐┌──────┐
│ ││ LEFT││ DOWN││ UP ││ RGHT││ │ │ LEFT││ DOWN││ UP ││ RGHT││ ││ ││ ││ │
└────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└──────┘└────────────────┘└──────┘
┌────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐ ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌────────────────────┐┌──────┐
│ ││ PGDN││ PGUP││ HOME││ END ││ │ │ ││ PGDN││ PGUP││ HOME││ END ││ ││ │
└────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘ └──────┘└──────┘└──────┘└──────┘└──────┘└────────────────────┘└──────┘
┌────────┐┌────────┐┌────────┐┌────────┐┌────────────────┐ ┌────────────────────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐
│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ ││ ││ │
└────────┘└────────┘└────────┘└────────┘└────────────────┘ └────────────────────┘└──────┘└──────┘└──────┘└──────┘└──────┘└──────┘
```
@@ -0,0 +1 @@
EXTRAKEY_ENABLE = no
+18 -18
View File
@@ -8,38 +8,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[QWERTZ] = LAYOUT( [QWERTZ] = LAYOUT(
_______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8, _______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
_______,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , _______,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , KC_ESC ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , KC_TAB ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
DE_HASH,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , DE_PIPE,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
DE_TILD,DE_PIPE,DE_BSLS,DE_GRV, _______,_______,_______,_______,
KC_RCTL,KC_LALT, KC_RCTL,KC_LALT,
KC_HOME, KC_HOME,
KC_LSFT,MO(MOD),KC_BSPC , KC_SPC ,KC_LSFT,KC_BSPC ,
KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR,KC_SLCK,KC_PAUS,KC_FN0 ,RESET, KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR,KC_SLCK,KC_PAUS,KC_FN0 ,RESET,
KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_AUDIO_MUTE, KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,DE_SS ,
KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,DE_EQL , KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,DE_AE ,
KC_H ,KC_J ,KC_K ,KC_L ,DE_SLSH,DE_QUOT, KC_H ,KC_J ,KC_K ,KC_L ,DE_SLSH,DE_OE ,
KC_N ,KC_M ,DE_COMM,DE_DOT ,DE_MINS,DE_PLUS, KC_N ,KC_M ,DE_COMM,DE_DOT ,DE_MINS,DE_UE ,
DE_AE ,DE_OE, DE_UE, DE_SS, _______,_______,_______,_______,
KC_LGUI,KC_LCTL, KC_LGUI,KC_LCTL,
KC_END , KC_END ,
KC_DEL,KC_ENTER ,KC_SPC KC_DEL,MO(MOD),KC_ENTER
), ),
[MOD] = LAYOUT( [MOD] = LAYOUT(
_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
_______,DE_AT ,DE_EURO,DE_LBRC,DE_RBRC,_______, DE_CIRC,DE_QUOT,DE_DQOT,DE_LCBR,DE_RCBR,DE_GRV ,
_______,DE_EXLM,DE_DLR ,DE_LPRN,DE_RPRN,_______, DE_TILD,DE_EXLM,DE_DLR ,DE_LPRN,DE_RPRN,DE_AMPR,
_______,DE_CIRC,DE_AMPR,DE_LCBR,DE_RCBR,_______, DE_BSLS,DE_HASH,DE_LESS,DE_LBRC,DE_RBRC,DE_MORE,
_______,_______,DE_LESS,DE_MORE, _______,_______,_______,_______,
_______,_______, _______,_______,
_______, _______,
_______,_______,_______, _______,_______,_______,
_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
_______,KC_PGDOWN,KC_PGUP,_______,_______,DE_PERC, KC_HOME,KC_PGDN,KC_PGUP,KC_END ,DE_EQL ,DE_PERC,
KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,DE_QST ,DE_DQOT, KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,DE_QST ,DE_ASTR,
_______,_______,DE_SCLN,DE_COLN,DE_UNDS,DE_ASTR, DE_AT ,DE_EURO,DE_SCLN,DE_COLN,DE_UNDS,DE_PLUS,
_______,_______,_______,_______, _______,_______,_______,_______,
_______,_______, _______,_______,
_______, _______,
+1 -1
View File
@@ -1 +1 @@
# The default keymap for kinesis-advantage This is a german keymap for the Kinesis Advantage.
-1
View File
@@ -43,7 +43,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCE 5 #define DEBOUNCE 5
/* Rotary encoders */ /* Rotary encoders */
#define NUMBER_OF_ENCODERS 2
#define ENCODERS_PAD_A { D2, F6 } #define ENCODERS_PAD_A { D2, F6 }
#define ENCODERS_PAD_B { D3, F5 } #define ENCODERS_PAD_B { D3, F5 }
#define ENCODER_RESOLUTION 4 #define ENCODER_RESOLUTION 4
Loaded 100 of 388 files, more files were not shown because too many files have changed in this diff. Show more