mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-08-06 06:54:58 +00:00
Compare commits
41 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
11eaccdbce | ||
![]() |
13ad650136 | ||
![]() |
2ad2b73d68 | ||
![]() |
3e698a54ea | ||
![]() |
6d78d45ca1 | ||
![]() |
c9159effc0 | ||
![]() |
7749f4590f | ||
![]() |
5b7260fc53 | ||
![]() |
afb4a43677 | ||
![]() |
ca9262ca3d | ||
![]() |
0f2108c905 | ||
![]() |
45dca4bc40 | ||
![]() |
3f96ba0113 | ||
![]() |
2fb14845d5 | ||
![]() |
21bc230dfd | ||
![]() |
42c9fd2625 | ||
![]() |
4e5f921496 | ||
![]() |
dee2faf387 | ||
![]() |
a5b43b35fe | ||
![]() |
57678238a9 | ||
![]() |
8ad561c8f0 | ||
![]() |
58670ef4b7 | ||
![]() |
fd0f78254d | ||
![]() |
04de0533b8 | ||
![]() |
368de26996 | ||
![]() |
161afe2e54 | ||
![]() |
ff3369ac5d | ||
![]() |
59b2be6200 | ||
![]() |
b3d6426aa9 | ||
![]() |
d0da43fbdc | ||
![]() |
7d4955b2c4 | ||
![]() |
d115abfd8d | ||
![]() |
d6b7ca04f2 | ||
![]() |
0677e64655 | ||
![]() |
20130e010b | ||
![]() |
86a7687a87 | ||
![]() |
538874f90f | ||
![]() |
8a330b33ff | ||
![]() |
6d0dc910d9 | ||
![]() |
106de349fb | ||
![]() |
59dc31a737 |
5
.github/ISSUE_TEMPLATE/blank.md
vendored
Normal file
5
.github/ISSUE_TEMPLATE/blank.md
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
name: Blank issue
|
||||
about: If you're 100% sure that you don't need one of the other issue templates, use this one instead.
|
||||
|
||||
---
|
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve the QMK Firmware
|
||||
---
|
||||
<!-- Provide a general summary of the bug in the Title above -->
|
||||
|
||||
<!-- This template is entirely option and can be removed, but is here to help both you and us. -->
|
||||
<!-- This text and anything on lines wrapped like this one will not show up in the final text. This text is to help us and you. -->
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
<!-- A clear and concise description of what the bug is. -->
|
||||
|
||||
**System Information**
|
||||
- Keyboard:
|
||||
- Revision (if applicable):
|
||||
- Operating System:
|
||||
- avr-gcc version:
|
||||
<!-- Run `avr-gcc --version` to find out -->
|
||||
- arm gcc version:
|
||||
<!-- Run `arm-none-eabi-gcc --version` to find out -->
|
||||
- QMK Firmware version:
|
||||
<!-- You can run `git describe --abbrev=0 --tags` to find this out -->
|
||||
- Any keyboard related software installed?
|
||||
- [ ] Auto Hot Key
|
||||
- [ ] Karabiner
|
||||
- [ ] Other
|
||||
|
||||
**Additional context**
|
||||
|
||||
<!-- Add any other context about the problem here. -->
|
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest a new feature or changes to existing features
|
||||
---
|
||||
<!--- Provide a general summary of the changes you want in the Title above -->
|
||||
|
||||
<!-- This template is entirely option and can be removed, but is here to help both you and us. -->
|
||||
<!-- This text and anything on lines wrapped like this one will not show up in the final text. This text is to help us and you. -->
|
||||
|
||||
## Feature Request Type
|
||||
|
||||
- [ ] Core Functionality
|
||||
- [ ] Add-on hardware support (e.g. audio, RGB, OLED screen, etc.)
|
||||
- [ ] Alteration (enhancement/optimization) of existing Feature(s)
|
||||
- [ ] New behavior
|
||||
|
||||
## Description
|
||||
|
||||
<!-- A few sentences describing what it is that you'd like to see. Additional information (such as links to spec sheets, licensing info, other related issues or PR's, etc) would be helpful. -->
|
9
.github/ISSUE_TEMPLATE/other_issues.md
vendored
Normal file
9
.github/ISSUE_TEMPLATE/other_issues.md
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
name: Other issues
|
||||
about: Anything else that doesn't fall into the above categories.
|
||||
---
|
||||
<!--- Provide a general summary of the changes you want in the Title above -->
|
||||
|
||||
<!-- This text and anything on lines wrapped like this one will not show up in the final text. This text is to help us and you. -->
|
||||
|
||||
<!-- Please check https://docs.qmk.fm/#/support for additional resources first. If that doesn't answer your question, check the bug report option, as that may be more appropriate. -->
|
32
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
32
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<!--- Provide a general summary of your changes in the Title above -->
|
||||
|
||||
<!--- This template is entirely option and can be removed, but is here to help both you and us. -->
|
||||
<!--- This text and anything on lines wrapped like this one will not show up in the final text. This text is to help us and you. -->
|
||||
|
||||
## Description
|
||||
<!--- Describe your changes in detail -->
|
||||
|
||||
## Types of changes
|
||||
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
|
||||
- [ ] Core
|
||||
- [ ] Bugfix
|
||||
- [ ] New Feature
|
||||
- [ ] Enhancement/Optimization
|
||||
- [ ] Keyboard (addition or update)
|
||||
- [ ] Keymap/Layout/Userspace (addition or update)
|
||||
- [ ] Documentation
|
||||
|
||||
|
||||
## Issues Fixed or Closed by this PR
|
||||
|
||||
*
|
||||
|
||||
## Checklist:
|
||||
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
|
||||
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
|
||||
- [ ] My code follows the code style of this project.
|
||||
- [ ] My change requires a change to the documentation.
|
||||
- [ ] I have updated the documentation accordingly.
|
||||
- [ ] I have read the **CONTRIBUTING** document. (https://docs.qmk.fm/#/contributing)
|
||||
- [ ] I have added tests to cover my changes.
|
||||
- [ ] I have tested the changes and verified that they work and don't break anything (as well as I can manage).
|
41
Dockerfile
41
Dockerfile
@@ -1,28 +1,29 @@
|
||||
FROM debian:jessie
|
||||
MAINTAINER Erik Dasque <erik@frenchguys.com>
|
||||
FROM debian
|
||||
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y build-essential \
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
avr-libc \
|
||||
avrdude \
|
||||
binutils-arm-none-eabi \
|
||||
binutils-avr \
|
||||
build-essential \
|
||||
dfu-programmer \
|
||||
dfu-util \
|
||||
gcc \
|
||||
gcc-arm-none-eabi \
|
||||
gcc-avr \
|
||||
git \
|
||||
libnewlib-arm-none-eabi \
|
||||
software-properties-common \
|
||||
unzip \
|
||||
wget \
|
||||
zip \
|
||||
gcc-avr \
|
||||
binutils-avr \
|
||||
avr-libc \
|
||||
dfu-programmer \
|
||||
dfu-util \
|
||||
gcc-arm-none-eabi \
|
||||
binutils-arm-none-eabi \
|
||||
libnewlib-arm-none-eabi \
|
||||
git \
|
||||
software-properties-common \
|
||||
avrdude \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV keyboard=ergodox
|
||||
ENV subproject=ez
|
||||
ENV keymap=default
|
||||
ENV KEYBOARD=ergodox_ez
|
||||
ENV KEYMAP=default
|
||||
|
||||
VOLUME /qmk
|
||||
WORKDIR /qmk
|
||||
CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap}
|
||||
VOLUME /qmk_firmware
|
||||
WORKDIR /qmk_firmware
|
||||
COPY . .
|
||||
|
||||
CMD make $KEYBOARD:$KEYMAP
|
||||
|
@@ -43,6 +43,7 @@
|
||||
|
||||
* [Features](features.md)
|
||||
* [Basic Keycodes](keycodes_basic.md)
|
||||
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
|
||||
* [Quantum Keycodes](quantum_keycodes.md)
|
||||
* [Advanced Keycodes](feature_advanced_keycodes.md)
|
||||
* [Audio](feature_audio.md)
|
||||
@@ -74,7 +75,6 @@
|
||||
* [Thermal Printer](feature_thermal_printer.md)
|
||||
* [Unicode](feature_unicode.md)
|
||||
* [Userspace](feature_userspace.md)
|
||||
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
|
||||
|
||||
* For Makers and Modders
|
||||
* [Hand Wiring Guide](hand_wire.md)
|
||||
@@ -88,6 +88,7 @@
|
||||
|
||||
* Other Topics
|
||||
* [Using Eclipse with QMK](eclipse.md)
|
||||
* [Support](support.md)
|
||||
|
||||
* QMK Internals (In Progress)
|
||||
* [Defines](internals_defines.md)
|
||||
|
@@ -43,6 +43,7 @@
|
||||
|
||||
* [Features](features.md)
|
||||
* [Basic Keycodes](keycodes_basic.md)
|
||||
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
|
||||
* [Quantum Keycodes](quantum_keycodes.md)
|
||||
* [Advanced Keycodes](feature_advanced_keycodes.md)
|
||||
* [Audio](feature_audio.md)
|
||||
@@ -74,7 +75,6 @@
|
||||
* [Thermal Printer](feature_thermal_printer.md)
|
||||
* [Unicode](feature_unicode.md)
|
||||
* [Userspace](feature_userspace.md)
|
||||
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
|
||||
|
||||
* For Makers and Modders
|
||||
* [Hand Wiring Guide](hand_wire.md)
|
||||
@@ -88,6 +88,7 @@
|
||||
|
||||
* Other Topics
|
||||
* [Using Eclipse with QMK](eclipse.md)
|
||||
* [Support](support.md)
|
||||
|
||||
* QMK Internals (In Progress)
|
||||
* [Defines](internals_defines.md)
|
||||
|
@@ -123,24 +123,27 @@ If you have trouble and want to ask for help, it is useful to generate a *Win_Ch
|
||||
|
||||
## Docker
|
||||
|
||||
If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following command at the root of the QMK folder to build a keyboard/keymap:
|
||||
|
||||
If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker CE](https://docs.docker.com/install/#supported-platforms), run the following command from the `qmk_firmware` directory to build a keyboard/keymap:
|
||||
```bash
|
||||
# You'll run this every time you want to build a keymap
|
||||
# modify the keymap and keyboard assignment to compile what you want
|
||||
# defaults are ergodox/default
|
||||
util/docker_build.sh keyboard:keymap
|
||||
# For example: util/docker_build.sh ergodox_ez:steno
|
||||
```
|
||||
This will compile the targeted keyboard/keymap and leave the resulting `.hex` or `.bin` file in the QMK directory for you to flash. If `:keymap` is omitted, the `default` keymap is used. Note that the parameter format is the same as when building with `make`.
|
||||
|
||||
docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware
|
||||
You can also start the script without any parameters, in which case it will ask you to input the build parameters one by one, which you may find easier to use:
|
||||
```bash
|
||||
util/docker_build.sh
|
||||
# Reads parameters as input (leave blank for defaults)
|
||||
```
|
||||
|
||||
On Windows Docker seems to have issues with the VOLUME tag in Dockerfile, and `$('pwd')` won't print a Windows compliant path; use full path instead, like this:
|
||||
|
||||
There is also support for building _and_ flashing the keyboard straight from Docker by specifying the `target` as well:
|
||||
```bash
|
||||
docker run -e keymap=default -e keyboard=ergodox_ez --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
|
||||
|
||||
util/docker_build.sh keyboard:keymap:target
|
||||
# For example: util/docker_build.sh planck/rev6:default:dfu-util
|
||||
```
|
||||
If you're on Linux, this should work out of the box. On Windows and macOS, it requires [Docker Machine](http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos/) to be running. This is tedious to set up, so it's not recommended; use QMK Toolbox instead.
|
||||
|
||||
This will compile the targeted keyboard/keymap and leave it in your QMK directory for you to flash.
|
||||
!> Docker for Windows requires [Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v) to be enabled. This means that it cannot work on versions of Windows which don't have Hyper-V, such as Windows 7, Windows 8 and **Windows 10 Home**.
|
||||
|
||||
## Vagrant
|
||||
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [vagrant guide](getting_started_vagrant.md).
|
||||
|
263
docs/keycode.txt
263
docs/keycode.txt
@@ -1,263 +0,0 @@
|
||||
Keycode Symbol Table
|
||||
====================
|
||||
Keycodes are defined in `common/keycode.h`.
|
||||
Range of 00-A4 and E0-E7 are identical with HID Usage:
|
||||
<http://www.usb.org/developers/hidpage/Hut1_12v2.pdf>
|
||||
Virtual keycodes are defined out of above range to support special actions.
|
||||
|
||||
|
||||
Keycode Symbol Short name Description
|
||||
--------------------------------------------------------------------------------
|
||||
KC_NO 00 Reserved (no event indicated)
|
||||
KC_ROLL_OVER 01 Keyboard ErrorRollOver
|
||||
KC_POST_FAIL 02 Keyboard POSTFail
|
||||
KC_UNDEFINED 03 Keyboard ErrorUndefined
|
||||
KC_A 04 Keyboard a and A
|
||||
KC_B 05 Keyboard b and B
|
||||
KC_C 06 Keyboard c and C
|
||||
KC_D 07 Keyboard d and D
|
||||
KC_E 08 Keyboard e and E
|
||||
KC_F 09 Keyboard f and F
|
||||
KC_G 0A Keyboard g and G
|
||||
KC_H 0B Keyboard h and H
|
||||
KC_I 0C Keyboard i and I
|
||||
KC_J 0D Keyboard j and J
|
||||
KC_K 0E Keyboard k and K
|
||||
KC_L 0F Keyboard l and L
|
||||
KC_M 10 Keyboard m and M
|
||||
KC_N 11 Keyboard n and N
|
||||
KC_O 12 Keyboard o and O
|
||||
KC_P 13 Keyboard p and P
|
||||
KC_Q 14 Keyboard q and Q
|
||||
KC_R 15 Keyboard r and R
|
||||
KC_S 16 Keyboard s and S
|
||||
KC_T 17 Keyboard t and T
|
||||
KC_U 18 Keyboard u and U
|
||||
KC_V 19 Keyboard v and V
|
||||
KC_W 1A Keyboard w and W
|
||||
KC_X 1B Keyboard x and X
|
||||
KC_Y 1C Keyboard y and Y
|
||||
KC_Z 1D Keyboard z and Z
|
||||
KC_1 1E Keyboard 1 and !
|
||||
KC_2 1F Keyboard 2 and @
|
||||
KC_3 20 Keyboard 3 and #
|
||||
KC_4 21 Keyboard 4 and $
|
||||
KC_5 22 Keyboard 5 and %
|
||||
KC_6 23 Keyboard 6 and ^
|
||||
KC_7 24 Keyboard 7 and &
|
||||
KC_8 25 Keyboard 8 and *
|
||||
KC_9 26 Keyboard 9 and (
|
||||
KC_0 27 Keyboard 0 and )
|
||||
KC_ENTER KC_ENT 28 Keyboard Return (ENTER)
|
||||
KC_ESCAPE KC_ESC 29 Keyboard ESCAPE
|
||||
KC_BSPACE KC_BSPC 2A Keyboard DELETE (Backspace)
|
||||
KC_TAB 2B Keyboard Tab
|
||||
KC_SPACE KC_SPC 2C Keyboard Spacebar
|
||||
KC_MINUS KC_MINS 2D Keyboard - and (underscore)
|
||||
KC_EQUAL KC_EQL 2E Keyboard = and +
|
||||
KC_LBRACKET KC_LBRC 2F Keyboard [ and {
|
||||
KC_RBRACKET KC_RBRC 30 Keyboard ] and }
|
||||
KC_BSLASH KC_BSLS 31 Keyboard \ and |
|
||||
KC_NONUS_HASH KC_NUHS 32 Keyboard Non-US # and ~
|
||||
KC_SCOLON KC_SCLN 33 Keyboard ; and :
|
||||
KC_QUOTE KC_QUOT 34 Keyboard ‘ and “
|
||||
KC_GRAVE KC_GRV 35 Keyboard Grave Accent and Tilde
|
||||
KC_COMMA KC_COMM 36 Keyboard , and <
|
||||
KC_DOT 37 Keyboard . and >
|
||||
KC_SLASH KC_SLSH 38 Keyboard / and ?
|
||||
KC_CAPSLOCK KC_CAPS 39 Keyboard Caps Lock
|
||||
KC_F1 3A Keyboard F1
|
||||
KC_F2 3B Keyboard F2
|
||||
KC_F3 3C Keyboard F3
|
||||
KC_F4 3D Keyboard F4
|
||||
KC_F5 3E Keyboard F5
|
||||
KC_F6 3F Keyboard F6
|
||||
KC_F7 40 Keyboard F7
|
||||
KC_F8 41 Keyboard F8
|
||||
KC_F9 42 Keyboard F9
|
||||
KC_F10 43 Keyboard F10
|
||||
KC_F11 44 Keyboard F11
|
||||
KC_F12 45 Keyboard F12
|
||||
KC_PSCREEN KC_PSCR 46 Keyboard PrintScreen
|
||||
KC_SCROLLLOCK KC_SLCK 47 Keyboard Scroll Lock
|
||||
KC_PAUSE KC_PAUS 48 Keyboard Pause
|
||||
KC_INSERT KC_INS 49 Keyboard Insert
|
||||
KC_HOME 4A Keyboard Home
|
||||
KC_PGUP 4B Keyboard PageUp
|
||||
KC_DELETE KC_DEL 4C Keyboard Delete Forward
|
||||
KC_END 4D Keyboard End
|
||||
KC_PGDOWN KC_PGDN 4E Keyboard PageDown
|
||||
KC_RIGHT KC_RGHT 4F Keyboard RightArrow
|
||||
KC_LEFT 50 Keyboard LeftArrow
|
||||
KC_DOWN 51 Keyboard DownArrow
|
||||
KC_UP 52 Keyboard UpArrow
|
||||
KC_NUMLOCK KC_NLCK 53 Keypad Num Lock and Clear
|
||||
KC_KP_SLASH KC_PSLS 54 Keypad /
|
||||
KC_KP_ASTERISK KC_PAST 55 Keypad *
|
||||
KC_KP_MINUS KC_PMNS 56 Keypad -
|
||||
KC_KP_PLUS KC_PPLS 57 Keypad +
|
||||
KC_KP_ENTER KC_PENT 58 Keypad ENTER
|
||||
KC_KP_1 KC_P1 59 Keypad 1 and End
|
||||
KC_KP_2 KC_P2 5A Keypad 2 and Down Arrow
|
||||
KC_KP_3 KC_P3 5B Keypad 3 and PageDn
|
||||
KC_KP_4 KC_P4 5C Keypad 4 and Left Arrow
|
||||
KC_KP_5 KC_P5 5D Keypad 5
|
||||
KC_KP_6 KC_P6 5E Keypad 6 and Right Arrow
|
||||
KC_KP_7 KC_P7 5F Keypad 7 and Home
|
||||
KC_KP_8 KC_P8 60 Keypad 8 and Up Arrow
|
||||
KC_KP_9 KC_P9 61 Keypad 9 and PageUp
|
||||
KC_KP_0 KC_P0 62 Keypad 0 and Insert
|
||||
KC_KP_DOT KC_PDOT 63 Keypad . and Delete
|
||||
KC_NONUS_BSLASH KC_NUBS 64 Keyboard Non-US \ and |
|
||||
KC_APPLICATION KC_APP 65 Keyboard Application
|
||||
KC_POWER 66 Keyboard Power
|
||||
KC_KP_EQUAL KC_PEQL 67 Keypad =
|
||||
KC_F13 68 Keyboard F13
|
||||
KC_F14 69 Keyboard F14
|
||||
KC_F15 6A Keyboard F15
|
||||
KC_F16 6B Keyboard F16
|
||||
KC_F17 6C Keyboard F17
|
||||
KC_F18 6D Keyboard F18
|
||||
KC_F19 6E Keyboard F19
|
||||
KC_F20 6F Keyboard F20
|
||||
KC_F21 70 Keyboard F21
|
||||
KC_F22 71 Keyboard F22
|
||||
KC_F23 72 Keyboard F23
|
||||
KC_F24 73 Keyboard F24
|
||||
KC_EXECUTE 74 Keyboard Execute
|
||||
KC_HELP 75 Keyboard Help
|
||||
KC_MENU 76 Keyboard Menu
|
||||
KC_SELECT 77 Keyboard Select
|
||||
KC_STOP 78 Keyboard Stop
|
||||
KC_AGAIN 79 Keyboard Again
|
||||
KC_UNDO 7A Keyboard Undo
|
||||
KC_CUT 7B Keyboard Cut
|
||||
KC_COPY 7C Keyboard Copy
|
||||
KC_PASTE 7D Keyboard Paste
|
||||
KC_FIND 7E Keyboard Find
|
||||
KC__MUTE 7F Keyboard Mute
|
||||
KC__VOLUP 80 Keyboard Volume Up
|
||||
KC__VOLDOWN 81 Keyboard Volume Down
|
||||
KC_LOCKING_CAPS 82 Keyboard Locking Caps Lock
|
||||
KC_LOCKING_NUM 83 Keyboard Locking Num Lock
|
||||
KC_LOCKING_SCROLL 84 Keyboard Locking Scroll Lock
|
||||
KC_KP_COMMA KC_PCMM 85 Keypad Comma
|
||||
KC_KP_EQUAL_AS400 86 Keypad Equal Sign
|
||||
KC_INT1 KC_RO 87 Keyboard International115
|
||||
KC_INT2 KC_KANA 88 Keyboard International216
|
||||
KC_INT3 KC_JYEN 89 Keyboard International317
|
||||
KC_INT4 KC_HENK 8A Keyboard International418
|
||||
KC_INT5 KC_MHEN 8B Keyboard International519
|
||||
KC_INT6 8C Keyboard International620
|
||||
KC_INT7 8D Keyboard International721
|
||||
KC_INT8 8E Keyboard International822
|
||||
KC_INT9 8F Keyboard International922
|
||||
KC_LANG1 90 Keyboard LANG125
|
||||
KC_LANG2 91 Keyboard LANG226
|
||||
KC_LANG3 92 Keyboard LANG330
|
||||
KC_LANG4 93 Keyboard LANG431
|
||||
KC_LANG5 94 Keyboard LANG532
|
||||
KC_LANG6 95 Keyboard LANG68
|
||||
KC_LANG7 96 Keyboard LANG78
|
||||
KC_LANG8 97 Keyboard LANG88
|
||||
KC_LANG9 98 Keyboard LANG98
|
||||
KC_ALT_ERASE 99 Keyboard Alternate Erase
|
||||
KC_SYSREQ 9A Keyboard SysReq/Attention
|
||||
KC_CANCEL 9B Keyboard Cancel
|
||||
KC_CLEAR 9C Keyboard Clear
|
||||
KC_PRIOR 9D Keyboard Prior
|
||||
KC_RETURN 9E Keyboard Return
|
||||
KC_SEPARATOR 9F Keyboard Separator
|
||||
KC_OUT A0 Keyboard Out
|
||||
KC_OPER A1 Keyboard Oper
|
||||
KC_CLEAR_AGAIN A2 Keyboard Clear/Again
|
||||
KC_CRSEL A3 Keyboard CrSel/Props
|
||||
KC_EXSEL A4 Keyboard ExSel
|
||||
/* Modifiers */
|
||||
KC_LCTRL KC_LCTL E0 Keyboard LeftControl
|
||||
KC_LSHIFT KC_LSFT E1 Keyboard LeftShift
|
||||
KC_LALT E2 Keyboard LeftAlt
|
||||
KC_LGUI E3 Keyboard Left GUI(Windows/Apple/Meta key)
|
||||
KC_RCTRL KC_RCTL E4 Keyboard RightControl
|
||||
KC_RSHIFT KC_RSFT E5 Keyboard RightShift
|
||||
KC_RALT E6 Keyboard RightAlt
|
||||
KC_RGUI E7 Keyboard Right GUI(Windows/Apple/Meta key)
|
||||
|
||||
/*
|
||||
* Virtual keycodes
|
||||
*/
|
||||
/* System Control */
|
||||
KC_SYSTEM_POWER KC_PWR System Power Down
|
||||
KC_SYSTEM_SLEEP KC_SLEP System Sleep
|
||||
KC_SYSTEM_WAKE KC_WAKE System Wake
|
||||
/* Consumer Page */
|
||||
KC_AUDIO_MUTE KC_MUTE
|
||||
KC_AUDIO_VOL_UP KC_VOLU
|
||||
KC_AUDIO_VOL_DOWN KC_VOLD
|
||||
KC_MEDIA_NEXT_TRACK KC_MNXT
|
||||
KC_MEDIA_PREV_TRACK KC_MPRV
|
||||
KC_MEDIA_STOP KC_MSTP
|
||||
KC_MEDIA_PLAY_PAUSE KC_MPLY
|
||||
KC_MEDIA_SELECT KC_MSEL
|
||||
KC_MAIL KC_MAIL
|
||||
KC_CALCULATOR KC_CALC
|
||||
KC_MY_COMPUTER KC_MYCM
|
||||
KC_WWW_SEARCH KC_WSCH
|
||||
KC_WWW_HOME KC_WHOM
|
||||
KC_WWW_BACK KC_WBAK
|
||||
KC_WWW_FORWARD KC_WFWD
|
||||
KC_WWW_STOP KC_WSTP
|
||||
KC_WWW_REFRESH KC_WREF
|
||||
KC_WWW_FAVORITES KC_WFAV
|
||||
KC_BRIGHTNESS_UP KC_BRIU
|
||||
KC_BRIGHTNESS_DOWN KC_BRID
|
||||
/* Mousekey */
|
||||
KC_MS_UP KC_MS_U Mouse Cursor Up
|
||||
KC_MS_DOWN KC_MS_D Mouse Cursor Down
|
||||
KC_MS_LEFT KC_MS_L Mouse Cursor Left
|
||||
KC_MS_RIGHT KC_MS_R Mouse Cursor Right
|
||||
KC_MS_BTN1 KC_BTN1 Mouse Button 1
|
||||
KC_MS_BTN2 KC_BTN2 Mouse Button 2
|
||||
KC_MS_BTN3 KC_BTN3 Mouse Button 3
|
||||
KC_MS_BTN4 KC_BTN4 Mouse Button 4
|
||||
KC_MS_BTN5 KC_BTN5 Mouse Button 5
|
||||
KC_MS_WH_UP KC_WH_U Mouse Wheel Up
|
||||
KC_MS_WH_DOWN KC_WH_D Mouse Wheel Down
|
||||
KC_MS_WH_LEFT KC_WH_L Mouse Wheel Left
|
||||
KC_MS_WH_RIGHT KC_WH_R Mouse Wheel Right
|
||||
KC_MS_ACCEL0 KC_ACL0 Mouse Acceleration 0
|
||||
KC_MS_ACCEL1 KC_ACL1 Mouse Acceleration 1
|
||||
KC_MS_ACCEL2 KC_ACL2 Mouse Acceleration 2
|
||||
/* Fn key */
|
||||
KC_FN0
|
||||
KC_FN1
|
||||
KC_FN2
|
||||
KC_FN3
|
||||
KC_FN4
|
||||
KC_FN5
|
||||
KC_FN6
|
||||
KC_FN7
|
||||
KC_FN8
|
||||
KC_FN9
|
||||
KC_FN10
|
||||
KC_FN11
|
||||
KC_FN12
|
||||
KC_FN13
|
||||
KC_FN14
|
||||
KC_FN15
|
||||
KC_FN16
|
||||
KC_FN17
|
||||
KC_FN18
|
||||
KC_FN19
|
||||
KC_FN20
|
||||
KC_FN21
|
||||
KC_FN22
|
||||
KC_FN23
|
||||
KC_FN24
|
||||
KC_FN25
|
||||
KC_FN26
|
||||
KC_FN27
|
||||
KC_FN28
|
||||
KC_FN29
|
||||
KC_FN30
|
||||
KC_FN31
|
43
docs/support.md
Normal file
43
docs/support.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Support
|
||||
|
||||
If you need help with something, the best place to get quick support is going to be on our [Discord Server](https://discord.gg/Uq7gcHh). There is usually somebody online, and there are a bunch of very helpful people there.
|
||||
|
||||
Don't forget to read our [Code of Conduct](https://qmk.fm/coc/).
|
||||
|
||||
## Help! I don't know where to start!
|
||||
|
||||
If this is the case, then you should start with our [Newbs Guide](https://docs.qmk.fm/#/newbs). There is a lot of great info there, and that should cover everything you need to get started.
|
||||
|
||||
If that's an issue, hop onto the [QMK Configurator](https://config.qmk.fm), as that will handle a majority of what you need there.
|
||||
|
||||
## Help! I'm having issues flashing!
|
||||
|
||||
First, head to the [Compiling/Flashing FAQ Page](https://docs.qmk.fm/#/faq_build). There is a good deal of info there, and you'll find a bunch of solutions to common issues there.
|
||||
|
||||
## Help, I have an issue that isn't covered by the links above
|
||||
|
||||
Okay, that's fine. Then please check the [open issues in our GitHub](https://github.com/qmk/qmk_firmware/issues) to see if somebody is experiencing the same thing (make sure it's not just similar, but actually the same).
|
||||
|
||||
If you can't find anything, then please open a [new issue](https://github.com/qmk/qmk_firmware/issues/new)!
|
||||
|
||||
## What if I found a bug?
|
||||
|
||||
Then please open an [issue](https://github.com/qmk/qmk_firmware/issues/new), and if you know how to fix it, open up a Pull Request on GitHub with the fix.
|
||||
|
||||
## But `git` and `GitHub` are intimidating!
|
||||
|
||||
Don't worry, we have some pretty nice [Guidelines](https://docs.qmk.fm/#/newbs_best_practices) on how to start using `git` and GitHub to make things easier to develop.
|
||||
|
||||
Additionally, you can find additional `git` and GitHub related links [here](https://docs.qmk.fm/#/newbs_learn_more_resources).
|
||||
|
||||
## I have a Keyboard that I want to add support for
|
||||
|
||||
Awesome! Open up a Pull Request for it. We'll review the code, and merge it!
|
||||
|
||||
### What if I want to do brand it with `QMK`?
|
||||
|
||||
That's amazing! We would love to assist you with that!
|
||||
|
||||
In fact, we have a [whole page](https://qmk.fm/powered/) dedicated to adding QMK Branding to your page and keyboard. This covers pretty much everything you need (knowledge and images) to officially support QMK.
|
||||
|
||||
If you have any questions about this, open an issue or head to [Discord](https://discord.gg/Uq7gcHh).
|
@@ -18,34 +18,26 @@
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_60_ansi(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
KC_EQL, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
|
||||
KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H,
|
||||
KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
|
||||
KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC,
|
||||
KC_RALT, KC_RGUI, MO(1), KC_LCTL
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LCTL
|
||||
),
|
||||
|
||||
[1] = LAYOUT_60_ansi(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
|
||||
KC_F11, KC_F12, KC_DEL, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN,
|
||||
KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
|
||||
KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,
|
||||
KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,
|
||||
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
|
||||
KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS
|
||||
),
|
||||
|
||||
[2] = LAYOUT_60_ansi(
|
||||
KC_TRNS, 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, BL_TOGG, BL_INC, BL_DEC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI,
|
||||
RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
KC_TRNS, 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,
|
||||
BL_TOGG, BL_INC, BL_DEC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
192
keyboards/40percentclub/i75/config.h
Normal file
192
keyboards/40percentclub/i75/config.h
Normal file
@@ -0,0 +1,192 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 0x0A0C
|
||||
#define DEVICE_VER 0x0175
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT i75
|
||||
#define DESCRIPTION i75 15x5 ortholinear keyboard
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP1 H
|
||||
//#define MAGIC_KEY_HELP2 SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
|
||||
/*
|
||||
* HD44780 LCD Display Configuration
|
||||
*/
|
||||
/*
|
||||
#define LCD_LINES 2 //< number of visible lines of the display
|
||||
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||
|
||||
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||
|
||||
#if LCD_IO_MODE
|
||||
#define LCD_PORT PORTB //< port for the LCD lines
|
||||
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||
#define LCD_RS_PIN 3 //< pin for RS line
|
||||
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||
#define LCD_RW_PIN 2 //< pin for RW line
|
||||
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||
#define LCD_E_PIN 1 //< pin for Enable line
|
||||
#endif
|
||||
*/
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
// #define BOOTMAGIC_LITE_COLUMN 0
|
43
keyboards/40percentclub/i75/i75.c
Normal file
43
keyboards/40percentclub/i75/i75.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 "i75.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||
// put your per-action keyboard code here
|
||||
// runs for every action, just before processing by the firmware
|
||||
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
|
||||
led_set_user(usb_led);
|
||||
}
|
24
keyboards/40percentclub/i75/i75.h
Normal file
24
keyboards/40percentclub/i75/i75.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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"
|
||||
|
||||
#ifdef KEYBOARD_40percentclub_i75_promicro
|
||||
#include "promicro.h"
|
||||
#elif KEYBOARD_40percentclub_i75_teensy2
|
||||
#include "teensy2.h"
|
||||
#endif
|
12
keyboards/40percentclub/i75/info.json
Normal file
12
keyboards/40percentclub/i75/info.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"keyboard_name": "i75",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 15,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_5x15": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
|
||||
}
|
||||
}
|
||||
}
|
19
keyboards/40percentclub/i75/keymaps/default/config.h
Normal file
19
keyboards/40percentclub/i75/keymaps/default/config.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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
|
||||
|
||||
// place overrides here
|
66
keyboards/40percentclub/i75/keymaps/default/keymap.c
Normal file
66
keyboards/40percentclub/i75/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,66 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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
|
||||
|
||||
// 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] = {
|
||||
[0] = LAYOUT_ortho_5x15( \
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, \
|
||||
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_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_RSFT, KC_UP, KC_PGDN, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
};
|
||||
|
||||
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) {
|
||||
|
||||
}
|
1
keyboards/40percentclub/i75/keymaps/default/readme.md
Normal file
1
keyboards/40percentclub/i75/keymaps/default/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# The default keymap for i75
|
40
keyboards/40percentclub/i75/promicro/config.h
Normal file
40
keyboards/40percentclub/i75/promicro/config.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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"
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 9
|
||||
#define MATRIX_COLS 9
|
||||
|
||||
/*
|
||||
* 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 { B4, E6, D7, C6, D4, D0, D1, D2, D3 }
|
||||
#define MATRIX_COL_PINS { B5, B6, B2, B3, B1, F7, F6, F5, F4 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||
#define DIODE_DIRECTION COL2ROW
|
16
keyboards/40percentclub/i75/promicro/promicro.c
Normal file
16
keyboards/40percentclub/i75/promicro/promicro.c
Normal file
@@ -0,0 +1,16 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 "i75.h"
|
47
keyboards/40percentclub/i75/promicro/promicro.h
Normal file
47
keyboards/40percentclub/i75/promicro/promicro.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 "i75.h"
|
||||
#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_ortho_5x15( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, \
|
||||
K33, K34, K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \
|
||||
K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, K64, K65, \
|
||||
K66, K67, K68, K70, K71, K72, K73, K74, K75, K76, K77, K78, K80, K81, K82 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
|
||||
{ K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
|
||||
{ K60, K61, K62, K63, K64, K65, K66, K67, K68 }, \
|
||||
{ K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
|
||||
{ K80, K81, K82 } \
|
||||
}
|
58
keyboards/40percentclub/i75/promicro/rules.mk
Normal file
58
keyboards/40percentclub/i75/promicro/rules.mk
Normal file
@@ -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
|
28
keyboards/40percentclub/i75/readme.md
Normal file
28
keyboards/40percentclub/i75/readme.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# i75
|
||||
|
||||

|
||||
===
|
||||
|
||||
5x15 grid layout, multiple controllers supported
|
||||
- Pro Micro
|
||||
- PJRC Teensy 2.0
|
||||
- PJRC Teensy LC/3.2 (**NB: Not currently ported**)
|
||||
|
||||
The matrix is a 9x9 grid. This uses all of the available pins on the Pro Micro. The other controllers have pins left over. The serial pins and pins connected to LEDs were avoided if possible.
|
||||
|
||||
* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/i75_ProMicro)
|
||||
|
||||
Keyboard Maintainer: QMK Community
|
||||
Hardware Supported: i75 PCB
|
||||
Hardware Availability: [i75 project on 40% Keyboards](http://www.40percent.club/2016/11/i75.html)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make 40percentclub/i75:default
|
||||
|
||||
If you would like to use one of the alternative controllers:
|
||||
|
||||
make 40percentclub/i75/promicro:default
|
||||
make 40percentclub/i75/teensy2: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).
|
23
keyboards/40percentclub/i75/rules.mk
Normal file
23
keyboards/40percentclub/i75/rules.mk
Normal file
@@ -0,0 +1,23 @@
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
# 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 on B7 by default
|
||||
RGBLIGHT_ENABLE = no # 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)
|
||||
|
||||
LAYOUTS = ortho_5x15
|
||||
DEFAULT_FOLDER = 40percentclub/i75/promicro
|
40
keyboards/40percentclub/i75/teensy2/config.h
Normal file
40
keyboards/40percentclub/i75/teensy2/config.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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"
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 9
|
||||
#define MATRIX_COLS 9
|
||||
|
||||
/*
|
||||
* 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 { D3, D2, D1, D0, B7, B3, B2, B1, B0 }
|
||||
#define MATRIX_COL_PINS { C6, C7, D6, D7, B5, B6, F7, F6, F5 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||
#define DIODE_DIRECTION COL2ROW
|
58
keyboards/40percentclub/i75/teensy2/rules.mk
Normal file
58
keyboards/40percentclub/i75/teensy2/rules.mk
Normal file
@@ -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
|
16
keyboards/40percentclub/i75/teensy2/teensy2.c
Normal file
16
keyboards/40percentclub/i75/teensy2/teensy2.c
Normal file
@@ -0,0 +1,16 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 "i75.h"
|
47
keyboards/40percentclub/i75/teensy2/teensy2.h
Normal file
47
keyboards/40percentclub/i75/teensy2/teensy2.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 "i75.h"
|
||||
#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_ortho_5x15( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, \
|
||||
K16, K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, \
|
||||
K33, K34, K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \
|
||||
K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, K64, K65, \
|
||||
K66, K67, K68, K70, K71, K72, K73, K74, K75, K76, K77, K78, K80, K81, K82 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
|
||||
{ K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
|
||||
{ K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
|
||||
{ K60, K61, K62, K63, K64, K65, K66, K67, K68 }, \
|
||||
{ K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
|
||||
{ K80, K81, K82 } \
|
||||
}
|
221
keyboards/40percentclub/nori/config.h
Normal file
221
keyboards/40percentclub/nori/config.h
Normal file
@@ -0,0 +1,221 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 0x0A0C
|
||||
#define DEVICE_VER 0x0444
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The nori Keyboard
|
||||
#define DESCRIPTION A modular compact keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/*
|
||||
* 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 { D3, D2, D1, D0 }
|
||||
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D4, C6, D7, E6 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
#define BACKLIGHT_PIN B5
|
||||
//#define BACKLIGHT_BREATHING
|
||||
#define BACKLIGHT_LEVELS 3
|
||||
|
||||
// enable RGB underglow
|
||||
#define RGB_DI_PIN B4
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 10
|
||||
#define RGBLIGHT_HUE_STEP 8
|
||||
#define RGBLIGHT_SAT_STEP 8
|
||||
#define RGBLIGHT_VAL_STEP 8
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP1 H
|
||||
//#define MAGIC_KEY_HELP2 SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0_ALT1 ESC
|
||||
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER PAUSE
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
|
||||
/*
|
||||
* HD44780 LCD Display Configuration
|
||||
*/
|
||||
/*
|
||||
#define LCD_LINES 2 //< number of visible lines of the display
|
||||
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||
|
||||
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||
|
||||
#if LCD_IO_MODE
|
||||
#define LCD_PORT PORTB //< port for the LCD lines
|
||||
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||
#define LCD_RS_PIN 3 //< pin for RS line
|
||||
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||
#define LCD_RW_PIN 2 //< pin for RW line
|
||||
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||
#define LCD_E_PIN 1 //< pin for Enable line
|
||||
#endif
|
||||
*/
|
117
keyboards/40percentclub/nori/info.json
Normal file
117
keyboards/40percentclub/nori/info.json
Normal file
@@ -0,0 +1,117 @@
|
||||
{
|
||||
"keyboard_name": "nori",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 12,
|
||||
"height": 4,
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"key_count": 16,
|
||||
"layout": [
|
||||
{ "w": 1, "x": 0, "y": 0 },
|
||||
{ "w": 1, "x": 1, "y": 0 },
|
||||
{ "w": 1, "x": 2, "y": 0 },
|
||||
{ "w": 1, "x": 3, "y": 0 },
|
||||
{ "w": 1, "x": 0, "y": 1 },
|
||||
{ "w": 1, "x": 1, "y": 1 },
|
||||
{ "w": 1, "x": 2, "y": 1 },
|
||||
{ "w": 1, "x": 3, "y": 1 },
|
||||
{ "w": 1, "x": 0, "y": 2 },
|
||||
{ "w": 1, "x": 1, "y": 2 },
|
||||
{ "w": 1, "x": 2, "y": 2 },
|
||||
{ "w": 1, "x": 3, "y": 2 },
|
||||
{ "w": 1, "x": 0, "y": 3 },
|
||||
{ "w": 1, "x": 1, "y": 3 },
|
||||
{ "w": 1, "x": 2, "y": 3 },
|
||||
{ "w": 1, "x": 3, "y": 3 } ]
|
||||
},
|
||||
"LAYOUT_ortho_4x8": {
|
||||
"key_count": 32,
|
||||
"layout": [
|
||||
{ "w": 1, "x": 0, "y": 0 },
|
||||
{ "w": 1, "x": 1, "y": 0 },
|
||||
{ "w": 1, "x": 2, "y": 0 },
|
||||
{ "w": 1, "x": 3, "y": 0 },
|
||||
{ "w": 1, "x": 4, "y": 0 },
|
||||
{ "w": 1, "x": 5, "y": 0 },
|
||||
{ "w": 1, "x": 6, "y": 0 },
|
||||
{ "w": 1, "x": 7, "y": 0 },
|
||||
{ "w": 1, "x": 0, "y": 1 },
|
||||
{ "w": 1, "x": 1, "y": 1 },
|
||||
{ "w": 1, "x": 2, "y": 1 },
|
||||
{ "w": 1, "x": 3, "y": 1 },
|
||||
{ "w": 1, "x": 4, "y": 1 },
|
||||
{ "w": 1, "x": 5, "y": 1 },
|
||||
{ "w": 1, "x": 6, "y": 1 },
|
||||
{ "w": 1, "x": 7, "y": 1 },
|
||||
{ "w": 1, "x": 0, "y": 2 },
|
||||
{ "w": 1, "x": 1, "y": 2 },
|
||||
{ "w": 1, "x": 2, "y": 2 },
|
||||
{ "w": 1, "x": 3, "y": 2 },
|
||||
{ "w": 1, "x": 4, "y": 2 },
|
||||
{ "w": 1, "x": 5, "y": 2 },
|
||||
{ "w": 1, "x": 6, "y": 2 },
|
||||
{ "w": 1, "x": 7, "y": 2 },
|
||||
{ "w": 1, "x": 0, "y": 3 },
|
||||
{ "w": 1, "x": 1, "y": 3 },
|
||||
{ "w": 1, "x": 2, "y": 3 },
|
||||
{ "w": 1, "x": 3, "y": 3 },
|
||||
{ "w": 1, "x": 4, "y": 3 },
|
||||
{ "w": 1, "x": 5, "y": 3 },
|
||||
{ "w": 1, "x": 6, "y": 3 },
|
||||
{ "w": 1, "x": 7, "y": 3 } ]
|
||||
},
|
||||
"LAYOUT_ortho_4x12": {
|
||||
"key_count": 48,
|
||||
"layout": [
|
||||
{ "w": 1, "x": 0, "y": 0 },
|
||||
{ "w": 1, "x": 1, "y": 0 },
|
||||
{ "w": 1, "x": 2, "y": 0 },
|
||||
{ "w": 1, "x": 3, "y": 0 },
|
||||
{ "w": 1, "x": 4, "y": 0 },
|
||||
{ "w": 1, "x": 5, "y": 0 },
|
||||
{ "w": 1, "x": 6, "y": 0 },
|
||||
{ "w": 1, "x": 7, "y": 0 },
|
||||
{ "w": 1, "x": 8, "y": 0 },
|
||||
{ "w": 1, "x": 9, "y": 0 },
|
||||
{ "w": 1, "x": 10, "y": 0 },
|
||||
{ "w": 1, "x": 11, "y": 0 },
|
||||
{ "w": 1, "x": 0, "y": 1 },
|
||||
{ "w": 1, "x": 1, "y": 1 },
|
||||
{ "w": 1, "x": 2, "y": 1 },
|
||||
{ "w": 1, "x": 3, "y": 1 },
|
||||
{ "w": 1, "x": 4, "y": 1 },
|
||||
{ "w": 1, "x": 5, "y": 1 },
|
||||
{ "w": 1, "x": 6, "y": 1 },
|
||||
{ "w": 1, "x": 7, "y": 1 },
|
||||
{ "w": 1, "x": 8, "y": 1 },
|
||||
{ "w": 1, "x": 9, "y": 1 },
|
||||
{ "w": 1, "x": 10, "y": 1 },
|
||||
{ "w": 1, "x": 11, "y": 1 },
|
||||
{ "w": 1, "x": 0, "y": 2 },
|
||||
{ "w": 1, "x": 1, "y": 2 },
|
||||
{ "w": 1, "x": 2, "y": 2 },
|
||||
{ "w": 1, "x": 3, "y": 2 },
|
||||
{ "w": 1, "x": 4, "y": 2 },
|
||||
{ "w": 1, "x": 5, "y": 2 },
|
||||
{ "w": 1, "x": 6, "y": 2 },
|
||||
{ "w": 1, "x": 7, "y": 2 },
|
||||
{ "w": 1, "x": 8, "y": 2 },
|
||||
{ "w": 1, "x": 9, "y": 2 },
|
||||
{ "w": 1, "x": 10, "y": 2 },
|
||||
{ "w": 1, "x": 11, "y": 2 },
|
||||
{ "w": 1, "x": 0, "y": 3 },
|
||||
{ "w": 1, "x": 1, "y": 3 },
|
||||
{ "w": 1, "x": 2, "y": 3 },
|
||||
{ "w": 1, "x": 3, "y": 3 },
|
||||
{ "w": 1, "x": 4, "y": 3 },
|
||||
{ "w": 1, "x": 5, "y": 3 },
|
||||
{ "w": 1, "x": 6, "y": 3 },
|
||||
{ "w": 1, "x": 7, "y": 3 },
|
||||
{ "w": 1, "x": 8, "y": 3 },
|
||||
{ "w": 1, "x": 9, "y": 3 },
|
||||
{ "w": 1, "x": 10, "y": 3 },
|
||||
{ "w": 1, "x": 11, "y": 3 } ]
|
||||
}
|
||||
}
|
||||
}
|
23
keyboards/40percentclub/nori/keymaps/default/config.h
Normal file
23
keyboards/40percentclub/nori/keymaps/default/config.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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
|
||||
|
||||
// place overrides here
|
||||
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
||||
SONG(COLEMAK_SOUND), \
|
||||
SONG(DVORAK_SOUND) \
|
||||
}
|
159
keyboards/40percentclub/nori/keymaps/default/keymap.c
Normal file
159
keyboards/40percentclub/nori/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,159 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
#define _QWERTY 0
|
||||
#define _COLEMAK 1
|
||||
#define _DVORAK 2
|
||||
#define _LOWER 3
|
||||
#define _RAISE 4
|
||||
#define _ADJUST 16
|
||||
|
||||
enum custom_keycodes {
|
||||
QWERTY = SAFE_RANGE,
|
||||
COLEMAK,
|
||||
DVORAK,
|
||||
};
|
||||
|
||||
#define LOWER MO(_LOWER)
|
||||
#define RAISE MO(_RAISE)
|
||||
#define ADJUST MO(_ADJUST)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Qwerty
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_ortho_4x12(
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
||||
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
|
||||
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Colemak
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | R | S | T | D | H | N | E | I | O | ' |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = LAYOUT_ortho_4x12( \
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
|
||||
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
|
||||
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Dvorak
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_DVORAK] = LAYOUT_ortho_4x12( \
|
||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
|
||||
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
|
||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
|
||||
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_LOWER] = LAYOUT_ortho_4x12( \
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_RAISE] = LAYOUT_ortho_4x12( \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
/* Adjust (Lower + Raise)
|
||||
* ,-----------------------------------------------------------------------------------.
|
||||
* | | Reset| | | | | | | | | | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------|
|
||||
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | |
|
||||
* `-----------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_ortho_4x12( \
|
||||
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
|
||||
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
)
|
||||
|
||||
|
||||
};
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
|
||||
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;
|
||||
case DVORAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_DVORAK);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
1
keyboards/40percentclub/nori/keymaps/default/readme.md
Normal file
1
keyboards/40percentclub/nori/keymaps/default/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# The default keymap
|
21
keyboards/40percentclub/nori/keymaps/macro/config.h
Normal file
21
keyboards/40percentclub/nori/keymaps/macro/config.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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
|
||||
|
||||
// place overrides here
|
||||
#undef RGBLED_NUM
|
||||
#define RGBLED_NUM 4
|
41
keyboards/40percentclub/nori/keymaps/macro/keymap.c
Normal file
41
keyboards/40percentclub/nori/keymaps/macro/keymap.c
Normal file
@@ -0,0 +1,41 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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_ortho_4x4( /* Base */
|
||||
KC_INT1, KC_INT2, KC_INT3, KC_INT5, \
|
||||
KC_F13, KC_F14, KC_F15, KC_F16, \
|
||||
KC_F17, KC_F18, KC_F19, KC_F20, \
|
||||
KC_F21, KC_F22, KC_F23, KC_F24 \
|
||||
),
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
1
keyboards/40percentclub/nori/keymaps/macro/readme.md
Normal file
1
keyboards/40percentclub/nori/keymaps/macro/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# The default single board macro keymap for nori
|
43
keyboards/40percentclub/nori/nori.c
Normal file
43
keyboards/40percentclub/nori/nori.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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 "nori.h"
|
||||
|
||||
void matrix_init_kb(void) {
|
||||
// put your keyboard start-up code here
|
||||
// runs once when the firmware starts up
|
||||
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
void matrix_scan_kb(void) {
|
||||
// put your looping keyboard code here
|
||||
// runs every cycle (a lot)
|
||||
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||
// put your per-action keyboard code here
|
||||
// runs for every action, just before processing by the firmware
|
||||
|
||||
return process_record_user(keycode, record);
|
||||
}
|
||||
|
||||
void led_set_kb(uint8_t usb_led) {
|
||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
||||
|
||||
led_set_user(usb_led);
|
||||
}
|
69
keyboards/40percentclub/nori/nori.h
Normal file
69
keyboards/40percentclub/nori/nori.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/* Copyright 2018
|
||||
*
|
||||
* 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"
|
||||
#define ___ KC_NO
|
||||
|
||||
#define LAYOUT_ortho_4x4( \
|
||||
K00, K01, K02, K03, \
|
||||
K10, K11, K12, K13, \
|
||||
K20, K21, K22, K23, \
|
||||
K30, K31, K32, K33 \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, ___, ___, ___, ___, ___, ___, ___, ___ }, \
|
||||
{ K10, K11, K12, K13, ___, ___, ___, ___, ___, ___, ___, ___ }, \
|
||||
{ K20, K21, K22, K23, ___, ___, ___, ___, ___, ___, ___, ___ }, \
|
||||
{ K30, K31, K32, K33, ___, ___, ___, ___, ___, ___, ___, ___ } \
|
||||
}
|
||||
#define LAYOUT_ortho_4x8( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, \
|
||||
K30, K31, K32, K33, K34, K35, K36, K37\
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, ___, ___, ___, ___ }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, ___, ___, ___, ___ }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, ___, ___, ___, ___ }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K35, K37, ___, ___, ___, ___ } \
|
||||
}
|
||||
#define LAYOUT_ortho_4x12( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, \
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b \
|
||||
) \
|
||||
{ \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b } \
|
||||
}
|
||||
|
||||
#define LAYOUT_kc_ortho_4x12( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, \
|
||||
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b \
|
||||
) \
|
||||
{ \
|
||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0a, KC_##K0b }, \
|
||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1a, KC_##K1b }, \
|
||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2a, KC_##K2b }, \
|
||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b } \
|
||||
}
|
18
keyboards/40percentclub/nori/readme.md
Normal file
18
keyboards/40percentclub/nori/readme.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# nori
|
||||
|
||||

|
||||
===
|
||||
|
||||
A 4x12 matrix using 3 modular 4x4 matrix boards and powered by a Pro Micro.
|
||||
|
||||
this one is using a Pro Micro. The Pro Micro has less data pins available so only 3 boards can be connected instead of 4. There are 2 pins left over, I used one (B5) for a backlight circuit like on a Gherkin. The other data pin (B4) is left for possible use with a WS2812B strip.
|
||||
|
||||
Keyboard Maintainer: QMK Community
|
||||
Hardware Supported: nori PCB
|
||||
Hardware Availability: [nori project on 40% Keyboards](https://www.40percent.club/2018/10/nori.html)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make 40percentclub/nori: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).
|
82
keyboards/40percentclub/nori/rules.mk
Normal file
82
keyboards/40percentclub/nori/rules.mk
Normal file
@@ -0,0 +1,82 @@
|
||||
# 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
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = lite # 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 = yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
|
||||
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)
|
||||
|
||||
LAYOUTS = ortho_4x4 ortho_4x8 ortho_4x12
|
@@ -94,16 +94,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
|
||||
K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
|
||||
K31, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \
|
||||
K30, K40, K50, K60, K70, K00, K20 \
|
||||
K30, K40, K50, K60, K00, K10, K20 \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||
{ KC_NO, K11, K12, K13, K14, K15, K16, K17 }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
|
||||
{ K20, K21, KC_NO, K23, K24, K25, KC_NO, K27 }, \
|
||||
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
|
||||
{ K40, KC_NO, K42, K43, K44, K45, K46, K47 }, \
|
||||
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
|
||||
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
|
||||
{ K70, K71, K72, K73, K74, K75, K76, K77 } \
|
||||
{ KC_NO, K71, K72, K73, K74, K75, K76, K77 } \
|
||||
}
|
||||
|
||||
#define LAYOUT_kc( \
|
||||
|
@@ -1,31 +1,32 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum keyboard_layers {
|
||||
_BL = 0, // Base Layer
|
||||
_FL // Function Layer
|
||||
};
|
||||
|
||||
// Custom #defined keycodes (shorter macros for readability)
|
||||
#define KC_CTES CTL_T(KC_ESC)
|
||||
#define KC_RSUP RSFT_T(KC_UP)
|
||||
#define KC_FNDN LT(_FL, KC_DOWN)
|
||||
#define KC_RGLT RCMD_T(KC_LEFT)
|
||||
#define KC_RCRT RCTL_T(KC_RIGHT)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* 0: qwerty */
|
||||
LAYOUT_all(
|
||||
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_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,
|
||||
CTL_T(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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_UP), _______,
|
||||
MO(1), KC_LALT, KC_LGUI, KC_SPC, _______, RGUI_T(KC_LEFT), RALT_T(KC_DOWN), LT(2, KC_RIGHT)
|
||||
[_BL] = LAYOUT_aek_103(
|
||||
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_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_CTES, 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_RSUP,
|
||||
MO(_FL), KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_FNDN, KC_RCRT
|
||||
),
|
||||
/* 1: fn1 */
|
||||
LAYOUT_all(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_PGDOWN, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
/* 2: fn2 */
|
||||
LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
|
||||
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
|
||||
_______, _______, _______, DEBUG, _______, _______, _______, _______, _______, _______, KC_SCROLLLOCK, KC_PAUSE, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
}
|
||||
;
|
||||
[_FL] = LAYOUT_aek_103(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||
_______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {};
|
||||
|
@@ -2,5 +2,5 @@
|
||||
"keyboard_name": "IBM 5291",
|
||||
"keyboard_folder": "converter/5291",
|
||||
"url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard",
|
||||
"maintainer": "listofoptions",
|
||||
"maintainer": "listofoptions"
|
||||
}
|
||||
|
120
keyboards/converter/palm_usb/config.h
Normal file
120
keyboards/converter/palm_usb/config.h
Normal file
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* This code makes use of cy384's Arduino USB HID adapter for the Palm Portable
|
||||
Keyboard, released under the BSD licence */
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#define CUSTOM_MATRIX 2
|
||||
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0001
|
||||
#define DEVICE_VER 0x0100
|
||||
#define MANUFACTURER QMK
|
||||
#define PRODUCT Stowaway converter
|
||||
#define DESCRIPTION USB converter for Stowaway keyboard
|
||||
|
||||
// IO pins to serial
|
||||
// https://deskthority.net/wiki/Arduino_Pro_Micro for pin lookup
|
||||
#define VCC_PIN D1 // pro micro 2
|
||||
#define RX_PIN D0 //pro micro 3 , was 8 on cy384
|
||||
#define RTS_PIN C6 // 5 //[ was D4 // 4 on the cy384
|
||||
#define DCD_PIN E6 //7
|
||||
|
||||
// if using the particular arduino pinout of CY384
|
||||
#ifdef CY384
|
||||
#define GND_PIN D7 //6
|
||||
#define PULLDOWN_PIN B1 // 15
|
||||
#endif
|
||||
|
||||
#ifndef HANDSPRING
|
||||
// Set to 1 for Handspring or to disable RTS/DCD based handshake.
|
||||
#define HANDSPRING 0
|
||||
#endif
|
||||
|
||||
#define MAXDROP 10 // check if keyboard is connected every X polling cycles
|
||||
#define SLEEP_TIMEOUT 500000 // check keyboard/reset this many millis
|
||||
|
||||
|
||||
#define MATRIX_ROWS 12
|
||||
#define MATRIX_COLS 8
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
)
|
||||
|
||||
|
||||
/* Serial(USART) configuration
|
||||
* asynchronous, negative logic, 9600baud, no flow control
|
||||
* 1-start bit, 8-data bit, non parity, 1-stop bit
|
||||
*/
|
||||
#define SERIAL_SOFT_BAUD 9600
|
||||
#define SERIAL_SOFT_PARITY_NONE
|
||||
#define SERIAL_SOFT_BIT_ORDER_LSB
|
||||
#if (HANDSPRING == 0)
|
||||
#define SERIAL_SOFT_LOGIC_NEGATIVE //RS232 logic
|
||||
#endif
|
||||
/* RXD Port */
|
||||
#define SERIAL_SOFT_RXD_ENABLE
|
||||
|
||||
// we are using Pro micro pin 3 / D0 as serial
|
||||
#define SERIAL_SOFT_RXD_DDR DDRD
|
||||
#define SERIAL_SOFT_RXD_PORT PORTD
|
||||
#define SERIAL_SOFT_RXD_PIN PIND
|
||||
#define SERIAL_SOFT_RXD_BIT 0
|
||||
#define SERIAL_SOFT_RXD_VECT INT0_vect
|
||||
|
||||
/* RXD Interupt */
|
||||
#define SERIAL_SOFT_RXD_INIT() do { \
|
||||
/* pin configuration: input with pull-up */ \
|
||||
SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
|
||||
SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
|
||||
/* enable interrupt: INT0(rising edge) */ \
|
||||
EICRA |= ((1<<ISC01)|(1<<ISC00)); \
|
||||
EIMSK |= (1<<INT0); \
|
||||
sei(); \
|
||||
} while (0)
|
||||
#define SERIAL_SOFT_RXD_INT_ENTER()
|
||||
#define SERIAL_SOFT_RXD_INT_EXIT() do { \
|
||||
/* clear interrupt flag */ \
|
||||
EIFR = (1<<INTF0); \
|
||||
} while (0)
|
||||
#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
|
||||
|
||||
/* TXD Port */
|
||||
#define SERIAL_SOFT_TXD_ENABLE
|
||||
#define SERIAL_SOFT_TXD_DDR DDRD
|
||||
#define SERIAL_SOFT_TXD_PORT PORTD
|
||||
#define SERIAL_SOFT_TXD_PIN PIND
|
||||
#define SERIAL_SOFT_TXD_BIT 3
|
||||
#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
|
||||
#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
|
||||
#define SERIAL_SOFT_TXD_INIT() do { \
|
||||
/* pin configuration: output */ \
|
||||
SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
|
||||
/* idle */ \
|
||||
SERIAL_SOFT_TXD_ON(); \
|
||||
} while (0)
|
||||
|
||||
|
398
keyboards/converter/palm_usb/matrix.c
Normal file
398
keyboards/converter/palm_usb/matrix.c
Normal file
@@ -0,0 +1,398 @@
|
||||
/*
|
||||
Copyright 2018 milestogo
|
||||
with elements Copyright 2014 cy384 under a modified BSD license
|
||||
building on qmk structure Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "protocol/serial.h"
|
||||
#include "timer.h"
|
||||
#include "pincontrol.h"
|
||||
|
||||
|
||||
/*
|
||||
* Matrix Array usage:
|
||||
*
|
||||
* ROW: 12(4bits)
|
||||
* COL: 8(3bits)
|
||||
*
|
||||
* +---------+
|
||||
* 0|00 ... 07|
|
||||
* 1|00 ... 07|
|
||||
* :| ... |
|
||||
* :| ... |
|
||||
* A| |
|
||||
* B| |
|
||||
* +---------+
|
||||
*/
|
||||
static uint8_t matrix[MATRIX_ROWS];
|
||||
|
||||
|
||||
// we're going to need a sleep timer
|
||||
static uint16_t last_activity ;
|
||||
// and a byte to track duplicate up events signalling all keys up.
|
||||
static uint16_t last_upKey ;
|
||||
// serial device can disconnect. Check every MAXDROP characters.
|
||||
static uint16_t disconnect_counter = 0;
|
||||
|
||||
|
||||
// bitmath masks.
|
||||
#define KEY_MASK 0b10000000
|
||||
#define COL_MASK 0b00000111
|
||||
#define ROW_MASK 0b01111000
|
||||
|
||||
|
||||
#define ROW(code) (( code & ROW_MASK ) >>3)
|
||||
#define COL(code) ((code & COL_MASK) )
|
||||
#define KEYUP(code) ((code & KEY_MASK) >>7 )
|
||||
|
||||
static bool is_modified = false;
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_kb(void) {
|
||||
matrix_init_user();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_kb(void) {
|
||||
matrix_scan_user();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
inline
|
||||
uint8_t matrix_rows(void)
|
||||
{
|
||||
return MATRIX_ROWS;
|
||||
}
|
||||
|
||||
inline
|
||||
uint8_t matrix_cols(void)
|
||||
{
|
||||
return MATRIX_COLS;
|
||||
}
|
||||
|
||||
|
||||
void pins_init(void) {
|
||||
// set pins for pullups, Rts , power &etc.
|
||||
|
||||
//print ("pins setup\n");
|
||||
pinMode(VCC_PIN, PinDirectionOutput);
|
||||
digitalWrite(VCC_PIN, PinLevelLow);
|
||||
|
||||
#if ( HANDSPRING == 0)
|
||||
|
||||
#ifdef CY835
|
||||
pinMode(GND_PIN, PinDirectionOutput);
|
||||
digitalWrite(GND_PIN, PinLevelLow);
|
||||
|
||||
pinMode(PULLDOWN_PIN, PinDirectionOutput);
|
||||
digitalWrite(PULLDOWN_PIN, PinLevelLow);
|
||||
#endif
|
||||
|
||||
pinMode(DCD_PIN, PinDirectionInput);
|
||||
pinMode(RTS_PIN, PinDirectionInput);
|
||||
#endif
|
||||
|
||||
/* check that the other side isn't powered up.
|
||||
test=digitalRead(DCD_PIN);
|
||||
xprintf("b%02X:", test);
|
||||
test=digitalRead(RTS_PIN);
|
||||
xprintf("%02X\n", test);
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
uint8_t rts_reset(void) {
|
||||
static uint8_t firstread ;
|
||||
/* bounce RTS so device knows it is rebooted */
|
||||
|
||||
// On boot, we keep rts as input, then switch roles here
|
||||
// on leaving sleep, we toggle the same way
|
||||
|
||||
firstread=digitalRead(RTS_PIN);
|
||||
// printf("r%02X:", firstread);
|
||||
|
||||
pinMode(RTS_PIN, PinDirectionOutput);
|
||||
|
||||
if (firstread == PinLevelHigh) {
|
||||
digitalWrite(RTS_PIN, PinLevelLow);
|
||||
}
|
||||
_delay_ms(10);
|
||||
digitalWrite(RTS_PIN, PinLevelHigh);
|
||||
|
||||
|
||||
/* the future is Arm
|
||||
if (palReadPad(RTS_PIN_IOPRT) == PinLevelLow)
|
||||
{
|
||||
_delay_ms(10);
|
||||
palSetPadMode(RTS_PINn_IOPORT, PinDirectionOutput_PUSHPULL);
|
||||
palSetPad(RTS_PORT, RTS_PIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
palSetPadMode(RTS_PIN_RTS_PORT, PinDirectionOutput_PUSHPULL);
|
||||
palSetPad(RTS_PORT, RTS_PIN);
|
||||
palClearPad(RTS_PORT, RTS_PIN);
|
||||
_delay_ms(10);
|
||||
palSetPad(RTS_PORT, RTS_PIN);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
_delay_ms(5);
|
||||
//print("rts\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t get_serial_byte(void) {
|
||||
static uint8_t code;
|
||||
while(1) {
|
||||
code = serial_recv();
|
||||
if (code) {
|
||||
debug_hex(code); debug(" ");
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t palm_handshake(void) {
|
||||
// assumes something has seen DCD go high, we've toggled RTS
|
||||
// and we now need to verify handshake.
|
||||
// listen for up to 4 packets before giving up.
|
||||
// usually I get the sequence FF FA FD
|
||||
static uint8_t codeA=0;
|
||||
|
||||
for (uint8_t i=0; i < 5; i++) {
|
||||
codeA=get_serial_byte();
|
||||
if ( 0xFA == codeA) {
|
||||
if( 0xFD == get_serial_byte()) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t palm_reset(void) {
|
||||
print("@");
|
||||
rts_reset(); // shouldn't need to power cycle.
|
||||
|
||||
if ( palm_handshake() ) {
|
||||
last_activity = timer_read();
|
||||
return 1;
|
||||
} else {
|
||||
print("failed reset");
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint8_t handspring_handshake(void) {
|
||||
// should be sent 15 ms after power up.
|
||||
// listen for up to 4 packets before giving up.
|
||||
static uint8_t codeA=0;
|
||||
|
||||
for (uint8_t i=0; i < 5; i++) {
|
||||
codeA=get_serial_byte();
|
||||
if ( 0xF9 == codeA) {
|
||||
if( 0xFB == get_serial_byte()) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t handspring_reset(void) {
|
||||
digitalWrite(VCC_PIN, PinLevelLow);
|
||||
_delay_ms(5);
|
||||
digitalWrite(VCC_PIN, PinLevelHigh);
|
||||
|
||||
if ( handspring_handshake() ) {
|
||||
last_activity = timer_read();
|
||||
disconnect_counter=0;
|
||||
return 1;
|
||||
} else {
|
||||
print("-HSreset");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void matrix_init(void)
|
||||
{
|
||||
debug_enable = true;
|
||||
//debug_matrix =true;
|
||||
|
||||
serial_init(); // arguments all #defined
|
||||
|
||||
#if (HANDSPRING == 0)
|
||||
pins_init(); // set all inputs and outputs.
|
||||
#endif
|
||||
|
||||
print("power up\n");
|
||||
digitalWrite(VCC_PIN, PinLevelHigh);
|
||||
|
||||
// wait for DCD strobe from keyboard - it will do this
|
||||
// up to 3 times, then the board needs the RTS toggled to try again
|
||||
|
||||
#if ( HANDSPRING == 1)
|
||||
if ( handspring_handshake() ) {
|
||||
last_activity = timer_read();
|
||||
} else {
|
||||
print("failed handshake");
|
||||
_delay_ms(1000);
|
||||
//BUG /should/ power cycle or toggle RTS & reset, but this usually works.
|
||||
}
|
||||
|
||||
#else /// Palm / HP device with DCD
|
||||
while( digitalRead(DCD_PIN) != PinLevelHigh ) {;}
|
||||
print("dcd\n");
|
||||
|
||||
rts_reset(); // at this point the keyboard should think all is well.
|
||||
|
||||
if ( palm_handshake() ) {
|
||||
last_activity = timer_read();
|
||||
} else {
|
||||
print("failed handshake");
|
||||
_delay_ms(1000);
|
||||
//BUG /should/ power cycle or toggle RTS & reset, but this usually works.
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
|
||||
|
||||
matrix_init_quantum();
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
uint8_t code;
|
||||
code = serial_recv();
|
||||
if (!code) {
|
||||
/*
|
||||
disconnect_counter ++;
|
||||
if (disconnect_counter > MAXDROP) {
|
||||
// set all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
|
||||
}
|
||||
*/
|
||||
// check if the keyboard is asleep.
|
||||
if (timer_elapsed(last_activity) > SLEEP_TIMEOUT) {
|
||||
#if(HANDSPRING ==0 )
|
||||
palm_reset();
|
||||
#else
|
||||
handspring_reset();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
last_activity = timer_read();
|
||||
disconnect_counter=0; // if we are getting serial data, we're connected.
|
||||
|
||||
debug_hex(code); debug(" ");
|
||||
|
||||
|
||||
switch (code) {
|
||||
case 0xFD: // unexpected reset byte 2
|
||||
print("rstD ");
|
||||
return 0;
|
||||
case 0xFA: // unexpected reset
|
||||
print("rstA ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (KEYUP(code)) {
|
||||
if (code == last_upKey) {
|
||||
// all keys are not pressed.
|
||||
// Manual says to disable all modifiers left open now.
|
||||
// but that could defeat sticky keys.
|
||||
// BUG? dropping this byte.
|
||||
last_upKey=0;
|
||||
return 0;
|
||||
}
|
||||
// release
|
||||
if (matrix_is_on(ROW(code), COL(code))) {
|
||||
matrix[ROW(code)] &= ~(1<<COL(code));
|
||||
last_upKey=code;
|
||||
}
|
||||
} else {
|
||||
// press
|
||||
if (!matrix_is_on(ROW(code), COL(code))) {
|
||||
matrix[ROW(code)] |= (1<<COL(code));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
matrix_scan_quantum();
|
||||
return code;
|
||||
}
|
||||
|
||||
bool matrix_is_modified(void)
|
||||
{
|
||||
return is_modified;
|
||||
}
|
||||
|
||||
inline
|
||||
bool matrix_has_ghost(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
inline
|
||||
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||
{
|
||||
return (matrix[row] & (1<<col));
|
||||
}
|
||||
|
||||
inline
|
||||
uint8_t matrix_get_row(uint8_t row)
|
||||
{
|
||||
return matrix[row];
|
||||
}
|
||||
|
||||
void matrix_print(void)
|
||||
{
|
||||
print("\nr/c 01234567\n");
|
||||
for (uint8_t row = 0; row < matrix_rows(); row++) {
|
||||
phex(row); print(": ");
|
||||
pbin_reverse(matrix_get_row(row));
|
||||
print("\n");
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_key_count(void)
|
||||
{
|
||||
uint8_t count = 0;
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
count += bitpop(matrix[i]);
|
||||
}
|
||||
return count;
|
||||
}
|
96
keyboards/converter/palm_usb/readme.md
Normal file
96
keyboards/converter/palm_usb/readme.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# Stowaway Serial keyboard to USB protocol converter
|
||||
|
||||
A converter for Palm Pilot era Stowaway serial keyboards.
|
||||
|
||||
Makes extensive use of the code from [cy384](https://github.com/cy384/ppk_usb). Ported to QMK by [milestogo](https://github.com/milestogo).
|
||||
|
||||
Hardware Supported: See hardware section below
|
||||
Hardware Availability: self-built
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make converter/palm_usb/stowaway: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).
|
||||
|
||||
|
||||
## Hardware
|
||||
|
||||
Target MCU is ATMega32u4 but other USB capable AVRs should also work.
|
||||
|
||||
cy843 has a very specific way of wiring in order to fit all pins in sequence. It breaks
|
||||
qmk because the Arduino softserial library uses different pins from QMK.
|
||||
|
||||
I've wired the pro micro hardware as follows.
|
||||
|
||||
Label| TX0,RX1,GND,GND,2 ,3 ,4 ,5 ,6 ,7
|
||||
Palm | , , * ,GND,VCC,RX ,NC ,RTS,nc ,DCD
|
||||
MCU | ,D1 ,D0 , ,C6 , ,E6
|
||||
|
||||
\* The RX line from the keyboard should be conected to a ~10K ohm pull down resistor to ground.
|
||||
RX --|--3
|
||||
10K
|
||||
|
|
||||
GND
|
||||
|
||||
|
||||
Power management is not implemented yet, this just reboots the keyboard frequently.
|
||||
|
||||
### Keyboards:
|
||||
|
||||
Think Outside Stowaway Keyboards
|
||||
There are at least 5 different versions of these keyboards out there.
|
||||
|
||||
Group 1: Palm 3, Palm 5 & HP Journada 540, and Compaq iPaq keyboards. These share
|
||||
the same RTS protocol, but with different pinouts for each device.
|
||||
|
||||
Group 2: Handspring keyboards. These don't do handshaking protocol, and use TTL signal.
|
||||
Set HANDSPRING to 1 in config.h
|
||||
|
||||
Group 3: IRDA models. Untested but theoretically serial.
|
||||
|
||||
### Connectors
|
||||
|
||||
See https://github.com/cy384/ppk_usb for wiring & sample 3d printable sockets.
|
||||
|
||||
Only Palm3 wiring has been tested.
|
||||
RXD pin is output from keyboard to MCU's RX.
|
||||
|
||||
Viewed from left to right with the keyboard in typing position.
|
||||
|
||||
Palm3: [NC, VCC, RXD, RTS, NC, NC, DCD, NC, NC, GND]
|
||||
Palm5: [NC, VCC, RXD, RTS, NC, NC, DCD, NC, NC, GND] (same order, different connector)
|
||||
Handspring: [VCC/TXD, NC, NC, NC, GND, NC, NC, RXD]
|
||||
Journada: [NC, NC, NC, GND, NC, RTS, NC, DTR/VCC, RXD, DCD, NC] [GND-IN, VCC-IN]
|
||||
Ipaq: [NC, NC, DTR/VCC, NC, NC, RTS, NC, RXD, DCD, GND, NC, NC]
|
||||
|
||||
### Protocol
|
||||
|
||||
Signal: Asynchronous, Negative logic, 9600baud, No Flow control
|
||||
Frame format: 1-Start bit, 8-Data bits, No-Parity, 1-Stop bit
|
||||
|
||||
AVR USART engine expects positive logic while stowaway keyboard signal is negative.
|
||||
To use AVR UART engine you need external inverter in front of RX and TX pin.
|
||||
Otherwise you can software serial routine to communicate the keyboard.
|
||||
|
||||
This converter uses software method, you doesn't need any inverter part.
|
||||
|
||||
|
||||
Commands From System To Keyboard
|
||||
none
|
||||
|
||||
Commands From Keyboard To System
|
||||
|
||||
0xFA Reset/Ready Response(followed by 0xFD)
|
||||
|
||||
References
|
||||
|
||||
* http://www.splorp.com/pdf/stowawayhwref.pdf
|
||||
|
||||
### Todo
|
||||
- Test on anything but a palm 3 model keyboard.
|
||||
- Change all of the soft serial to match the new Helix based code so that it is easier
|
||||
to switch pins.
|
||||
- The driver should check for a keyboard that pressed the delete key then disconnected.
|
||||
Check every MAXDROP scans that the keyboard is there, and if not, clear the matrix.
|
||||
Not implemented yet, since matrix scan is so much faster than serial.
|
46
keyboards/converter/palm_usb/rules.mk
Normal file
46
keyboards/converter/palm_usb/rules.mk
Normal file
@@ -0,0 +1,46 @@
|
||||
MCU = atmega32u4 # Teensy 2.0
|
||||
F_CPU = 16000000
|
||||
ARCH = AVR8
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
UNICODEMAP_ENABLE = no
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
CUSTOM_MATRIX = yes
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
#HARDWARE_SERIAL = yes
|
||||
|
||||
SRC += matrix.c
|
||||
|
||||
ifdef HARDWARE_SERIAL
|
||||
# untested with palm_usb
|
||||
SRC += protocol/serial_uart.c
|
||||
OPT_DEFS += -DHARDWARE_SERIAL
|
||||
else
|
||||
SRC += protocol/serial_soft.c
|
||||
endif
|
||||
|
||||
DEFAULT_FOLDER = converter/palm_usb/stowaway
|
||||
|
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
Copyright 2018 milestogo
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layers {
|
||||
_QWERTY=0,
|
||||
_CDH,
|
||||
_FN
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BACK, APP0,
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, APP1,
|
||||
CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, APP2,
|
||||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, APP3,
|
||||
LCTL, FN, LALT, CMD, SPACE,SPACE,GRAVE,DONE, DEL, LEFT, DOWN, RIGHT
|
||||
|
||||
*/
|
||||
[_QWERTY] = LAYOUT( /* Base */
|
||||
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_ESC,
|
||||
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, TG(_CDH),
|
||||
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||
KC_LCTL, MO(_FN), KC_LALT, KC_LGUI, KC_SPACE,KC_SPACE,KC_GRAVE,KC_RGUI, KC_DEL, KC_LEFT,KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
[_CDH] = LAYOUT( /* Base */
|
||||
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_ESC,
|
||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, _______,
|
||||
KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGUP,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||
KC_LCTL, MO(_FN), KC_LALT, KC_LGUI, KC_SPACE,KC_SPACE,KC_GRAVE,KC_RGUI, KC_DEL, KC_LEFT,KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
||||
[_FN] = LAYOUT( // FN Key
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
};
|
0
keyboards/converter/palm_usb/stowaway/rules.mk
Normal file
0
keyboards/converter/palm_usb/stowaway/rules.mk
Normal file
53
keyboards/converter/palm_usb/stowaway/stowaway.h
Normal file
53
keyboards/converter/palm_usb/stowaway/stowaway.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
Copyright 2018 milestogo
|
||||
|
||||
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"
|
||||
|
||||
|
||||
/* Stowaway Keyboard
|
||||
based on matrix from http://www.splorp.com/pdf/stowawayhwref.pdf
|
||||
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BACK APP0,
|
||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, APP1,
|
||||
CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, APP2,
|
||||
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, APP3,
|
||||
LCTL, FN, LALT, CMD, SPACE,SPACE,GRAVE,DONE, DEL, LEFT, DOWN, RIGHT
|
||||
|
||||
*/
|
||||
#define LAYOUT( \
|
||||
K000, K001, K002, K004, K005, K006, K007, K064, K065, K066, K060, K061, K062, K063,\
|
||||
K031, K011, K012, K013, K014, K015, K016, K074, K075, K076, K077, K070, K071, K072, K073,\
|
||||
K030, K021, K022, K023, K024, K025, K026, K084, K085, K086, K087, K080, K081, K082,\
|
||||
K110, K003, K020, K054, K055, K056, K057, K094, K095, K096, K090, K111, K091, K092,\
|
||||
K032, K042, K043, K010, K027, K067, K017, K097, K100, K101, K102, K103 \
|
||||
) { \
|
||||
{ K000, K001, K002 , K003, K004, K005, K006, K007 }, \
|
||||
{ K010, K011, K012 , K013, K014, K015, K016, K017 }, \
|
||||
{ K020, K021, K022 , K023, K024, K025, K026, K027 }, \
|
||||
{ K030, K031, K032 , KC_NO,KC_NO, KC_NO,KC_NO, KC_NO }, \
|
||||
{ KC_NO, KC_NO, K042 , K043, KC_NO, KC_NO,KC_NO, KC_NO }, \
|
||||
{ KC_NO, KC_NO, KC_NO, KC_NO,K054, K055, K056, K057 }, \
|
||||
{ K060, K061, K062 , K063, K064, K065, K066, K067 }, \
|
||||
{ K070, K071, K072 , K073, K074, K075, K076, K077 }, \
|
||||
{ K080, K081, K082 , KC_NO,K084, K085, K086, K087 }, \
|
||||
{ K090, K091, K092 , KC_NO,K094, K095, K096, K097 }, \
|
||||
{ K100, K101, K102 , K103, KC_NO, KC_NO,KC_NO, KC_NO }, \
|
||||
{ K110, K111, KC_NO, KC_NO,KC_NO, KC_NO,KC_NO, KC_NO } \
|
||||
}
|
||||
|
@@ -34,7 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
#define TAPPING_FORCE_HOLD
|
||||
#define TAPPING_TERM 150
|
||||
#define TAPPING_TERM 250
|
||||
|
||||
#undef RGBLED_NUM
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
|
@@ -7,6 +7,7 @@
|
||||
#ifdef SSD1306OLED
|
||||
#include "ssd1306.h"
|
||||
#endif
|
||||
#include "oled_helper.h"
|
||||
|
||||
extern keymap_config_t keymap_config;
|
||||
|
||||
@@ -21,27 +22,35 @@ extern uint8_t is_master;
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
#define _QWERTY 0
|
||||
#define _LOWER 3
|
||||
#define _RAISE 4
|
||||
#define _ADJUST 16
|
||||
enum layer_number {
|
||||
_BASE = 0,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST,
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
LOWER = SAFE_RANGE,
|
||||
RAISE,
|
||||
ADJUST,
|
||||
KANJI,
|
||||
RGBRST
|
||||
};
|
||||
|
||||
#define KC______ KC_TRNS
|
||||
#define KC_XXXXX KC_NO
|
||||
#define KC_KANJI KC_GRV
|
||||
enum tapdances{
|
||||
TD_CODO = 0,
|
||||
// TD_MNUB,
|
||||
};
|
||||
|
||||
// Layer Mode aliases
|
||||
#define KC_LOWER LOWER
|
||||
#define KC_RAISE RAISE
|
||||
|
||||
#define KC_RST RESET
|
||||
#define KC______ KC_TRNS
|
||||
#define KC_XXXXX KC_NO
|
||||
#define KC_KANJI KANJI
|
||||
|
||||
#define KC_RST RESET
|
||||
#define KC_LRST RGBRST
|
||||
#define KC_LTOG RGB_TOG
|
||||
#define KC_LHUI RGB_HUI
|
||||
@@ -51,31 +60,41 @@ enum custom_keycodes {
|
||||
#define KC_LVAI RGB_VAI
|
||||
#define KC_LVAD RGB_VAD
|
||||
#define KC_LMOD RGB_MOD
|
||||
|
||||
#define KC_KNRM AG_NORM
|
||||
#define KC_KSWP AG_SWAP
|
||||
#define KC_GUAP LALT_T(KC_APP)
|
||||
|
||||
#define KC_TBSF LSFT_T(KC_TAB)
|
||||
// #define KC_SPSF LSFT_T(KC_SPC)
|
||||
#define KC_ALAP LALT_T(KC_APP)
|
||||
|
||||
#define KC_CODO TD(TD_CODO)
|
||||
// #define KC_MNUB TD(TD_MNUB)
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_CODO] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_DOT),
|
||||
// [TD_MNUB] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, LSFT(KC_RO)),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT_kc( \
|
||||
[_BASE] = LAYOUT_kc( \
|
||||
//,-----------------------------------------. ,-----------------------------------------.
|
||||
ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
|
||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||
LSFT, A, S, D, F, G, H, J, K, L, UP, ENT,\
|
||||
TBSF, A, S, D, F, G, H, J, K, L, UP, ENT,\
|
||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||
LCTRL, Z, X, C, V, B, N, M, COMM, LEFT, DOWN, RGHT,\
|
||||
LCTRL, Z, X, C, V, B, N, M, CODO, LEFT, DOWN, RGHT,\
|
||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||
LGUI, LOWER, BSPC, SPC, RAISE, GUAP \
|
||||
LGUI, LOWER, BSPC, SPC, RAISE, ALAP \
|
||||
//`--------------------' `--------------------'
|
||||
),
|
||||
|
||||
[_LOWER] = LAYOUT_kc( \
|
||||
//,-----------------------------------------. ,-----------------------------------------.
|
||||
TAB, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
|
||||
_____, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
|
||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||
_____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
|
||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||
_____, F11, F12, XXXXX, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
|
||||
_____, F11, F12, TAB, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
|
||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||
_____, _____, DEL, _____, _____, APP \
|
||||
//`--------------------' `--------------------'
|
||||
@@ -83,11 +102,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_RAISE] = LAYOUT_kc( \
|
||||
//,-----------------------------------------. ,-----------------------------------------.
|
||||
_____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, XXXXX,\
|
||||
_____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, PSLS,\
|
||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 4, 5, 6, QUOT, XXXXX,\
|
||||
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, QUOT, 4, 5, 6, PPLS, PAST,\
|
||||
//|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, XXXXX,\
|
||||
_____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, PMNS,\
|
||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||
_____, _____, BSPC, _____, _____, LALT \
|
||||
//`--------------------' `--------------------'
|
||||
@@ -95,152 +114,182 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_ADJUST] = LAYOUT_kc( \
|
||||
//,-----------------------------------------. ,-----------------------------------------.
|
||||
_____, RST, LRST, KNRM, KSWP,XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
|
||||
_____, RST, LRST, KNRM, KSWP, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
|
||||
//|------+-------+------+------+------+-----| |------+------+------+------+------+------|
|
||||
_____, LTOG, LHUI, LSAI, LVAI,XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
|
||||
_____, LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
|
||||
//|------+-------+------+------+------+-----| |------+------+------+------+------+------|
|
||||
_____, LMOD, LHUD, LSAD, LVAD,XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
|
||||
_____, LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
|
||||
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
|
||||
_____, _____, XXXXX, _____, _____, XXXXX \
|
||||
//`--------------------' `--------------------'
|
||||
)
|
||||
};
|
||||
|
||||
int RGB_current_mode;
|
||||
#define L_BASE _BASE
|
||||
#define L_LOWER (1<<_LOWER)
|
||||
#define L_RAISE (1<<_RAISE)
|
||||
#define L_ADJUST (1<<_ADJUST)
|
||||
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
|
||||
|
||||
// Setting ADJUST layer RGB back to default
|
||||
static inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
||||
layer_on(layer3);
|
||||
} else {
|
||||
layer_off(layer3);
|
||||
#ifdef SSD1306OLED
|
||||
typedef struct {
|
||||
uint8_t state;
|
||||
char name[8];
|
||||
}LAYER_DISPLAY_NAME;
|
||||
|
||||
#define LAYER_DISPLAY_MAX 5
|
||||
const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
|
||||
{L_BASE, "Base"},
|
||||
{L_BASE + 1, "Base"},
|
||||
{L_LOWER, "Lower"},
|
||||
{L_RAISE, "Raise"},
|
||||
{L_ADJUST_TRI, "Adjust"}
|
||||
};
|
||||
|
||||
static inline const char* get_leyer_status(void) {
|
||||
|
||||
for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
|
||||
if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
|
||||
|
||||
return layer_display_name[i].name;
|
||||
} else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
|
||||
|
||||
return layer_display_name[i].name;
|
||||
}
|
||||
}
|
||||
|
||||
return "?";
|
||||
}
|
||||
|
||||
static char layer_status_buf[24] = "Layer state ready.\n";
|
||||
static inline void update_keymap_status(void) {
|
||||
|
||||
snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
|
||||
keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
|
||||
}
|
||||
|
||||
static inline void render_keymap_status(struct CharacterMatrix *matrix) {
|
||||
|
||||
matrix_write(matrix, layer_status_buf);
|
||||
}
|
||||
|
||||
#define UPDATE_KEYMAP_STATUS() update_keymap_status()
|
||||
#define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
|
||||
|
||||
#else
|
||||
|
||||
#define UPDATE_KEYMAP_STATUS()
|
||||
#define RENDER_KEYMAP_STATUS(a)
|
||||
|
||||
#endif
|
||||
|
||||
static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||
|
||||
pressed ? layer_on(layer1) : layer_off(layer1);
|
||||
IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
|
||||
}
|
||||
|
||||
int RGB_current_mode;
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
|
||||
UPDATE_KEY_STATUS(keycode, record);
|
||||
|
||||
bool result = false;
|
||||
switch (keycode) {
|
||||
case LOWER:
|
||||
update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
|
||||
break;
|
||||
case RAISE:
|
||||
update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
|
||||
break;
|
||||
case KANJI:
|
||||
if (record->event.pressed) {
|
||||
if (keymap_config.swap_lalt_lgui == false) {
|
||||
register_code(KC_LANG2);
|
||||
} else {
|
||||
SEND_STRING(SS_LALT("`"));
|
||||
}
|
||||
} else {
|
||||
unregister_code(KC_LANG2);
|
||||
}
|
||||
break;
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
case RGB_MOD:
|
||||
if (record->event.pressed) {
|
||||
rgblight_mode(RGB_current_mode);
|
||||
rgblight_step();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
case RGBRST:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_update_rgblight_default();
|
||||
rgblight_enable();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
|
||||
UPDATE_KEYMAP_STATUS();
|
||||
return result;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
#endif
|
||||
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
#endif
|
||||
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
}
|
||||
|
||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
|
||||
#ifdef SSD1306OLED
|
||||
|
||||
|
||||
// When add source files to SRC in rules.mk, you can use functions.
|
||||
const char *read_layer_state(void);
|
||||
const char *read_logo(void);
|
||||
void set_keylog(uint16_t keycode, keyrecord_t *record);
|
||||
const char *read_keylog(void);
|
||||
const char *read_keylogs(void);
|
||||
|
||||
// const char *read_mode_icon(bool swap);
|
||||
// const char *read_host_led_state(void);
|
||||
// void set_timelog(void);
|
||||
// const char *read_timelog(void);
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
const char *read_rgb_info(void);
|
||||
#define RENDER_RGB_INFO(m) matrix_write_ln(m, (const char*)read_rgb_info())
|
||||
#else
|
||||
#define RENDER_RGB_INFO(m)
|
||||
#endif
|
||||
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
iota_gfx_task();
|
||||
iota_gfx_task(); // this is what updates the display continuously
|
||||
}
|
||||
|
||||
static inline void matrix_render_user(struct CharacterMatrix *matrix) {
|
||||
if (is_master) {
|
||||
// If you want to change the display of OLED, you need to change here
|
||||
matrix_write_ln(matrix, read_layer_state());
|
||||
matrix_write_ln(matrix, read_keylog());
|
||||
RENDER_RGB_INFO(matrix);
|
||||
// matrix_write_ln(matrix, read_keylogs());
|
||||
// matrix_write_ln(matrix, read_host_led_state());
|
||||
|
||||
// matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
|
||||
// matrix_write_ln(matrix, read_timelog());
|
||||
} else {
|
||||
matrix_write(matrix, read_logo());
|
||||
}
|
||||
}
|
||||
|
||||
static inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
|
||||
static inline void matrix_update(struct CharacterMatrix *dest,
|
||||
const struct CharacterMatrix *source) {
|
||||
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||
dest->dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void render_status(struct CharacterMatrix *matrix) {
|
||||
|
||||
UPDATE_LED_STATUS();
|
||||
RENDER_LED_STATUS(matrix);
|
||||
RENDER_KEYMAP_STATUS(matrix);
|
||||
UPDATE_LOCK_STATUS();
|
||||
RENDER_LOCK_STATUS(matrix);
|
||||
RENDER_KEY_STATUS(matrix);
|
||||
}
|
||||
|
||||
void iota_gfx_task_user(void) {
|
||||
struct CharacterMatrix matrix;
|
||||
|
||||
#if DEBUG_TO_SCREEN
|
||||
if (debug_enable) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
matrix_clear(&matrix);
|
||||
matrix_render_user(&matrix);
|
||||
if (is_master) {
|
||||
render_status(&matrix);
|
||||
} else {
|
||||
RENDER_LOGO(&matrix);
|
||||
}
|
||||
|
||||
matrix_update(&display, &matrix);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
#ifdef SSD1306OLED
|
||||
if (record->event.pressed) {
|
||||
set_keylog(keycode, record);
|
||||
// set_timelog();
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (keycode) {
|
||||
case LOWER:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_LOWER);
|
||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||
} else {
|
||||
layer_off(_LOWER);
|
||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
break;
|
||||
case RAISE:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_RAISE);
|
||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||
} else {
|
||||
layer_off(_RAISE);
|
||||
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
break;
|
||||
case ADJUST:
|
||||
if (record->event.pressed) {
|
||||
layer_on(_ADJUST);
|
||||
} else {
|
||||
layer_off(_ADJUST);
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
case RGB_MOD:
|
||||
if (record->event.pressed) {
|
||||
rgblight_mode(RGB_current_mode);
|
||||
rgblight_step();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
case RGBRST:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_update_rgblight_default();
|
||||
rgblight_enable();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
83
keyboards/crkbd/keymaps/like_jis/oled_helper.c
Normal file
83
keyboards/crkbd/keymaps/like_jis/oled_helper.c
Normal file
@@ -0,0 +1,83 @@
|
||||
#ifdef SSD1306OLED
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "ssd1306.h"
|
||||
|
||||
void render_logo(struct CharacterMatrix *matrix) {
|
||||
|
||||
const char logo_buf[]={
|
||||
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
|
||||
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
|
||||
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
|
||||
0};
|
||||
|
||||
matrix_write(matrix, logo_buf);
|
||||
}
|
||||
|
||||
static char keylog_buf[24] = "Key state ready.";
|
||||
const char code_to_name[60] = {
|
||||
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
|
||||
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
|
||||
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
||||
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
|
||||
'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
|
||||
' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
|
||||
|
||||
void update_key_status(uint16_t keycode, keyrecord_t *record) {
|
||||
|
||||
if (!record->event.pressed) return;
|
||||
|
||||
char name = (keycode < 60) ? code_to_name[keycode] : ' ';
|
||||
snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c",
|
||||
record->event.key.row, record->event.key.col,
|
||||
(uint16_t)keycode, name);
|
||||
}
|
||||
|
||||
void render_key_status(struct CharacterMatrix *matrix) {
|
||||
|
||||
matrix_write(matrix, keylog_buf);
|
||||
}
|
||||
|
||||
static char lock_buf[24] = "Lock state ready.\n";
|
||||
void update_lock_status(void) {
|
||||
|
||||
uint8_t leds = host_keyboard_leds();
|
||||
char *num_lock = (leds & (1<<USB_LED_NUM_LOCK)) ? "Num" : "";
|
||||
char *caps_lock = (leds & (1<<USB_LED_CAPS_LOCK)) ? "Caps" : "";
|
||||
char *scrl_lock = (leds & (1<<USB_LED_SCROLL_LOCK)) ? "Scrn" : "";
|
||||
snprintf(lock_buf, sizeof(lock_buf) - 1, "Lock:%s %s %s\n",
|
||||
num_lock, caps_lock, scrl_lock);
|
||||
}
|
||||
|
||||
void render_lock_status(struct CharacterMatrix *matrix) {
|
||||
|
||||
matrix_write(matrix, lock_buf);
|
||||
}
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
extern rgblight_config_t rgblight_config;
|
||||
|
||||
static char led_buf[24] = "LED state ready.\n";
|
||||
rgblight_config_t rgblight_config_bak;
|
||||
void update_led_status(void) {
|
||||
|
||||
if (rgblight_config_bak.enable != rgblight_config.enable ||
|
||||
rgblight_config_bak.mode != rgblight_config.mode ||
|
||||
rgblight_config_bak.hue != rgblight_config.hue ||
|
||||
rgblight_config_bak.sat != rgblight_config.sat ||
|
||||
rgblight_config_bak.val != rgblight_config.val
|
||||
) {
|
||||
snprintf(led_buf, sizeof(led_buf) - 1, "LED%c:%2d hsv:%2d %2d %2d\n",
|
||||
rgblight_config.enable ? '*' : '.', (uint8_t)rgblight_config.mode,
|
||||
(uint8_t)(rgblight_config.hue / RGBLIGHT_HUE_STEP),
|
||||
(uint8_t)(rgblight_config.sat / RGBLIGHT_SAT_STEP),
|
||||
(uint8_t)(rgblight_config.val / RGBLIGHT_VAL_STEP));
|
||||
rgblight_config_bak = rgblight_config;
|
||||
}
|
||||
}
|
||||
|
||||
void render_led_status(struct CharacterMatrix *matrix) {
|
||||
|
||||
matrix_write(matrix, led_buf);
|
||||
}
|
||||
#endif
|
||||
#endif
|
35
keyboards/crkbd/keymaps/like_jis/oled_helper.h
Normal file
35
keyboards/crkbd/keymaps/like_jis/oled_helper.h
Normal file
@@ -0,0 +1,35 @@
|
||||
#ifdef SSD1306OLED
|
||||
|
||||
void render_logo(struct CharacterMatrix *matrix);
|
||||
void update_key_status(uint16_t keycode, keyrecord_t *record);
|
||||
void render_key_status(struct CharacterMatrix *matrix);
|
||||
void update_lock_status(void);
|
||||
void render_lock_status(struct CharacterMatrix *matrix);
|
||||
|
||||
#define RENDER_LOGO(a) render_logo(a)
|
||||
#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
|
||||
#define RENDER_KEY_STATUS(a) render_key_status(a)
|
||||
#define UPDATE_LOCK_STATUS() update_lock_status()
|
||||
#define RENDER_LOCK_STATUS(a) render_lock_status(a)
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
void update_led_status(void);
|
||||
void render_led_status(struct CharacterMatrix *matrix);
|
||||
#define UPDATE_LED_STATUS() update_led_status()
|
||||
#define RENDER_LED_STATUS(a) render_led_status(a)
|
||||
#else
|
||||
#define UPDATE_LED_STATUS()
|
||||
#define RENDER_LED_STATUS(a)
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define RENDER_LOGO(a)
|
||||
#define UPDATE_KEY_STATUS(a, b)
|
||||
#define RENDER_KEY_STATUS(a)
|
||||
#define UPDATE_LOCK_STATUS()
|
||||
#define RENDER_LOCK_STATUS(a)
|
||||
#define UPDATE_LED_STATUS()
|
||||
#define RENDER_LED_STATUS(a)
|
||||
|
||||
#endif
|
@@ -14,18 +14,19 @@ MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||
SWAP_HANDS_ENABLE = no # Enable one-hand typing
|
||||
TAP_DANCE_ENABLE = yes
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
Link_Time_Optimization = yes # if firmware size over limit, try this option
|
||||
|
||||
ifeq ($(strip $(Link_Time_Optimization)),yes)
|
||||
EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
|
||||
endif
|
||||
|
||||
# If you want to change the display of OLED, you need to change here
|
||||
SRC += ./lib/glcdfont.c \
|
||||
./lib/rgb_state_reader.c \
|
||||
./lib/layer_state_reader.c \
|
||||
./lib/logo_reader.c \
|
||||
./lib/keylogger.c \
|
||||
# ./lib/mode_icon_reader.c \
|
||||
# ./lib/host_led_state_reader.c \
|
||||
# ./lib/timelogger.c \
|
||||
oled_helper.c \
|
||||
|
@@ -1,67 +0,0 @@
|
||||
#ifndef DICHOTEMY_H
|
||||
#define DICHOTEMY_H
|
||||
|
||||
#include "quantum.h"
|
||||
#include "matrix.h"
|
||||
#include "backlight.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#define red_led_off PORTF |= (1<<5)
|
||||
#define red_led_on PORTF &= ~(1<<5)
|
||||
#define blu_led_off PORTF |= (1<<4)
|
||||
#define blu_led_on PORTF &= ~(1<<4)
|
||||
#define grn_led_off PORTD |= (1<<1)
|
||||
#define grn_led_on PORTD &= ~(1<<1)
|
||||
|
||||
#define set_led_off red_led_off; grn_led_off; blu_led_off
|
||||
#define set_led_red red_led_on; grn_led_off; blu_led_off
|
||||
#define set_led_blue red_led_off; grn_led_off; blu_led_on
|
||||
#define set_led_green red_led_off; grn_led_on; blu_led_off
|
||||
#define set_led_yellow red_led_on; grn_led_on; blu_led_off
|
||||
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
|
||||
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
|
||||
#define set_led_white red_led_on; grn_led_on; blu_led_on
|
||||
|
||||
/*
|
||||
#define LED_B 5
|
||||
#define LED_R 6
|
||||
#define LED_G 7
|
||||
|
||||
#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
|
||||
|
||||
#define red_led_on PORTF |= (1<<LED_R)
|
||||
#define red_led_off PORTF &= ~(1<<LED_R)
|
||||
#define grn_led_on PORTF |= (1<<LED_G)
|
||||
#define grn_led_off PORTF &= ~(1<<LED_G)
|
||||
#define blu_led_on PORTF |= (1<<LED_B)
|
||||
#define blu_led_off PORTF &= ~(1<<LED_B)
|
||||
|
||||
#define set_led_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
|
||||
#define set_led_red PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
|
||||
#define set_led_blue PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
|
||||
#define set_led_green PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
|
||||
#define set_led_yellow PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
|
||||
#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
|
||||
#define set_led_cyan PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
|
||||
#define set_led_white PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
|
||||
*/
|
||||
|
||||
// This a shortcut to help you visually see your layout.
|
||||
// The first section contains all of the arguements
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
|
||||
k33, k34, k35, k36, k37, k38, \
|
||||
k43, k44, k45, k46, k47, k48 \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B }, \
|
||||
{ KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, KC_NO }, \
|
||||
{ KC_NO, KC_NO, KC_NO, k43, k44, k45, k46, k47, k48, KC_NO, KC_NO, KC_NO } \
|
||||
}
|
||||
|
||||
#endif
|
@@ -1,394 +0,0 @@
|
||||
// this is the style you want to emulate.
|
||||
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "pointing_device.h"
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum dichotemy_layers
|
||||
{
|
||||
_BS,
|
||||
_SF,
|
||||
_NM,
|
||||
_NS,
|
||||
_MS
|
||||
};
|
||||
|
||||
#define LONGPRESS_COUNT 4
|
||||
|
||||
enum dichotemy_keycodes
|
||||
{
|
||||
CK_1G = SAFE_RANGE,
|
||||
CK_BSPE,
|
||||
CK_QE,
|
||||
CK_TE, //these 4 CK_XXXX keys are special "alternate long-press" keys controlled with unique timers. Make sure you understand them before you mess with them.
|
||||
NS_HYPH,
|
||||
NS_EQU,
|
||||
NUMKEY,
|
||||
SFTKEY,
|
||||
MOUSE,
|
||||
MS_BTN1,
|
||||
MS_BTN2
|
||||
//MS_BTN3
|
||||
};
|
||||
|
||||
// Macro definitions for readability
|
||||
enum dichotemy_macros
|
||||
{
|
||||
VOLU,
|
||||
VOLD,
|
||||
ESCM
|
||||
};
|
||||
|
||||
#define LONGPRESS_DELAY 150
|
||||
#define MAX_TOGGLE_LENGTH 300
|
||||
#define TAPPING_TOGGLE 1
|
||||
|
||||
// Fillers to make layering more clear
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_BS] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
|
||||
CK_TE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
NUMKEY, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CK_QE,
|
||||
SFTKEY, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOUSE,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_RCTL,
|
||||
KC_LBRC, KC_LPRN, KC_QUOT, KC_SPC, KC_RPRN, KC_RBRC
|
||||
),
|
||||
|
||||
[_SF] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, NS_HYPH, KC_UNDS, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, KC_LABK, _______, _______, KC_RABK, _______
|
||||
),
|
||||
|
||||
[_NM] = LAYOUT( /* Number layout, basically the main function layer */
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
_______, CK_1G, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, CK_BSPE,
|
||||
_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_NS] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, NS_EQU, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_MS] = LAYOUT( /* Mouse layer, including buttons for clicking. */
|
||||
_______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
|
||||
_______, _______, _______, _______, KC_UP, _______,
|
||||
_______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
static uint16_t special_timers[LONGPRESS_COUNT] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
|
||||
static bool special_key_states[LONGPRESS_COUNT] = {0,0,0,0};
|
||||
|
||||
static uint16_t shift_timer;
|
||||
static uint16_t num_timer;
|
||||
static uint16_t mouse_timer;
|
||||
|
||||
static bool shift_singular_key = false;
|
||||
static bool number_singular_key = false;
|
||||
static bool mouse_singular_key = false;
|
||||
|
||||
static bool shift_held = false;
|
||||
static bool shift_suspended = false;
|
||||
report_mouse_t currentReport = {};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
|
||||
//uint8_t layer;
|
||||
//layer = biton32(layer_state); // get the current layer //Or don't, I didn't use it.
|
||||
|
||||
//custom layer handling for tri_layer,
|
||||
switch (keycode) {
|
||||
case NUMKEY:
|
||||
if (record->event.pressed) {
|
||||
num_timer = timer_read();
|
||||
number_singular_key = true;
|
||||
layer_invert(_NM);
|
||||
} else {
|
||||
if (timer_elapsed(num_timer) < MAX_TOGGLE_LENGTH && number_singular_key) {
|
||||
//do nothing, the layer has already been inverted
|
||||
} else {
|
||||
layer_invert(_NM);
|
||||
}
|
||||
}
|
||||
update_tri_layer(_NM, _SF, _NS);
|
||||
return false;
|
||||
break;
|
||||
//SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
|
||||
case SFTKEY:
|
||||
if (record->event.pressed) {
|
||||
shift_held = true;
|
||||
shift_suspended = false;
|
||||
shift_timer = timer_read();
|
||||
shift_singular_key = true;
|
||||
layer_on(_SF);
|
||||
register_code(KC_LSFT);
|
||||
} else {
|
||||
shift_held = false;
|
||||
if (timer_elapsed(shift_timer) < MAX_TOGGLE_LENGTH && shift_singular_key) {
|
||||
//this was basically a toggle, so activate/deactivate caps lock.
|
||||
SEND_STRING(SS_TAP(X_CAPSLOCK));
|
||||
}
|
||||
layer_off(_SF);
|
||||
unregister_code(KC_LSFT);
|
||||
}
|
||||
update_tri_layer(_NM, _SF, _NS);
|
||||
return false;
|
||||
break;
|
||||
//MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
|
||||
case MOUSE:
|
||||
if (record->event.pressed) {
|
||||
mouse_timer = timer_read();
|
||||
mouse_singular_key = true;
|
||||
layer_invert(_MS);
|
||||
} else {
|
||||
if (timer_elapsed(mouse_timer) < MAX_TOGGLE_LENGTH && number_singular_key){
|
||||
//do nothing, it was a toggle (and it's already been toggled)
|
||||
} else {
|
||||
layer_invert(_MS);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
//Custom macros for strange keys with different long-tap behavior
|
||||
case CK_1G:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
shift_singular_key = false;
|
||||
number_singular_key = false;
|
||||
mouse_singular_key = false;
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_1G-SAFE_RANGE] = timer_read();
|
||||
} else {
|
||||
if (special_key_states[CK_1G-SAFE_RANGE]){
|
||||
//key was activated after longpress_delay, need to close those keycodes
|
||||
special_key_states[CK_1G-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_GRAVE);
|
||||
} else {
|
||||
//key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_1));
|
||||
}
|
||||
special_timers[CK_1G-SAFE_RANGE] = 0xFFFF;
|
||||
}
|
||||
break;
|
||||
case CK_BSPE:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
shift_singular_key = false;
|
||||
number_singular_key = false;
|
||||
mouse_singular_key = false;
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_BSPE-SAFE_RANGE] = timer_read();
|
||||
} else {
|
||||
if (special_key_states[CK_BSPE-SAFE_RANGE]){
|
||||
//key was activated after longpress_delay, need to close those keycodes
|
||||
special_key_states[CK_BSPE-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_ENTER);
|
||||
} else {
|
||||
//key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_BSLASH));
|
||||
}
|
||||
special_timers[CK_BSPE-SAFE_RANGE] = 0xFFFF;
|
||||
}
|
||||
break;
|
||||
case CK_QE:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
shift_singular_key = false;
|
||||
number_singular_key = false;
|
||||
mouse_singular_key = false;
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_QE-SAFE_RANGE] = timer_read();
|
||||
} else {
|
||||
if (special_key_states[CK_QE-SAFE_RANGE]){
|
||||
//key was activated after longpress_delay, need to close those keycodes
|
||||
special_key_states[CK_QE-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_ENTER);
|
||||
} else {
|
||||
//key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_QUOTE));
|
||||
}
|
||||
special_timers[CK_QE-SAFE_RANGE] = 0xFFFF;
|
||||
}
|
||||
break;
|
||||
case CK_TE:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_TE-SAFE_RANGE] = timer_read();
|
||||
} else {
|
||||
if (special_key_states[CK_TE-SAFE_RANGE]){
|
||||
//key was activated after longpress_delay, need to close those keycodes
|
||||
special_key_states[CK_TE-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_ENTER);
|
||||
} else {
|
||||
//key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_TAB));
|
||||
}
|
||||
special_timers[CK_TE-SAFE_RANGE] = 0xFFFF;
|
||||
}
|
||||
break;
|
||||
//No-shift keys, they unregister the KC_LSFT code so they can send
|
||||
//unshifted values - but they don't change the bool. if any other
|
||||
//key is pressed and the bool is set, KC_LSFT is registered again.
|
||||
case NS_HYPH:
|
||||
if (record->event.pressed) {
|
||||
shift_suspended = true;
|
||||
unregister_code(KC_LSFT);
|
||||
register_code(KC_MINS);
|
||||
} else {
|
||||
unregister_code(KC_MINS);
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NS_EQU:
|
||||
if (record->event.pressed) {
|
||||
shift_suspended = true;
|
||||
unregister_code(KC_LSFT);
|
||||
register_code(KC_EQUAL);
|
||||
} else {
|
||||
unregister_code(KC_EQUAL);
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
//mouse buttons, for 1-3, to update the mouse report:
|
||||
case MS_BTN1:
|
||||
currentReport = pointing_device_get_report();
|
||||
if (record->event.pressed) {
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
//update mouse report here
|
||||
currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
|
||||
} else {
|
||||
//update mouse report here
|
||||
currentReport.buttons &= ~MOUSE_BTN1;
|
||||
}
|
||||
pointing_device_set_report(currentReport);
|
||||
break;
|
||||
case MS_BTN2:
|
||||
currentReport = pointing_device_get_report();
|
||||
if (record->event.pressed) {
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
//update mouse report here
|
||||
currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
|
||||
} else {
|
||||
//update mouse report here
|
||||
}
|
||||
pointing_device_set_report(currentReport);
|
||||
break;
|
||||
//there is a case for button 3, but that's handled in dichotemy.c, and this is being
|
||||
//disabled to avoid any conflict.
|
||||
/*case MS_BTN3:
|
||||
currentReport = pointing_device_get_report();
|
||||
if (record->event.pressed) {
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
//update mouse report here
|
||||
currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN2 is a const defined in report.h
|
||||
} else {
|
||||
//update mouse report here
|
||||
}
|
||||
pointing_device_set_report(currentReport);
|
||||
break;*/
|
||||
|
||||
//If any other key was pressed during the layer mod hold period,
|
||||
//then the layer mod was used momentarily, and should block latching
|
||||
//Additionally, if NS_ keys are in use, then shift may be held (but is
|
||||
//disabled for the unshifted keycodes to be send. Check the bool and
|
||||
//register shift as necessary.
|
||||
default:
|
||||
if (shift_held){
|
||||
register_code(KC_LSFT);
|
||||
}
|
||||
shift_singular_key = false;
|
||||
number_singular_key = false;
|
||||
mouse_singular_key = false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
|
||||
if (timer_elapsed(special_timers[i]) >= LONGPRESS_DELAY && !special_key_states[i]){
|
||||
switch (i + SAFE_RANGE){
|
||||
case CK_1G:
|
||||
register_code(KC_GRAVE);
|
||||
break;
|
||||
case CK_BSPE:
|
||||
register_code(KC_ENTER);
|
||||
break;
|
||||
case CK_QE:
|
||||
register_code(KC_ENTER);
|
||||
break;
|
||||
case CK_TE:
|
||||
register_code(KC_ESCAPE);
|
||||
break;
|
||||
}
|
||||
special_key_states[i] = 1;
|
||||
}
|
||||
}
|
||||
switch (layer) {
|
||||
case _BS:
|
||||
set_led_off;
|
||||
break;
|
||||
case _NM:
|
||||
set_led_blue;
|
||||
break;
|
||||
case _SF:
|
||||
set_led_red;
|
||||
break;
|
||||
case _NS:
|
||||
set_led_green;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
8
keyboards/dichotemy/config.h → keyboards/dichotomy/config.h
Normal file → Executable file
8
keyboards/dichotemy/config.h → keyboards/dichotomy/config.h
Normal file → Executable file
@@ -24,10 +24,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0xACC7
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER unknown
|
||||
#define PRODUCT Dichotemy
|
||||
#define DESCRIPTION q.m.k. keyboard firmware for Dichotemy
|
||||
#define DEVICE_VER 0x0002
|
||||
#define MANUFACTURER Broekhuijsen
|
||||
#define PRODUCT Dichotomy
|
||||
#define DESCRIPTION q.m.k. keyboard firmware for Dichotomy
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
27
keyboards/dichotemy/dichotemy.c → keyboards/dichotomy/dichotomy.c
Normal file → Executable file
27
keyboards/dichotemy/dichotemy.c → keyboards/dichotomy/dichotomy.c
Normal file → Executable file
@@ -1,13 +1,11 @@
|
||||
#include "dichotemy.h"
|
||||
#include "pointing_device.h"
|
||||
#include "report.h"
|
||||
#include "dichotomy.h"
|
||||
|
||||
void uart_init(void) {
|
||||
SERIAL_UART_INIT();
|
||||
}
|
||||
|
||||
void pointing_device_task(void){
|
||||
report_mouse_t currentReport = {};
|
||||
/*report_mouse_t currentReport = {};
|
||||
SERIAL_UART_INIT();
|
||||
uint32_t timeout = 0;
|
||||
|
||||
@@ -25,28 +23,31 @@ void pointing_device_task(void){
|
||||
while(!SERIAL_UART_RXD_PRESENT){
|
||||
timeout++;
|
||||
if (timeout > 10000){
|
||||
xprintf("\r\nTIMED OUT");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
xprintf("\r\nGOT DATA for %d",i);
|
||||
uart_data[i] = SERIAL_UART_DATA;
|
||||
}
|
||||
|
||||
//check for the end packet, bits 1-4 are movement and scroll
|
||||
//but bit 5 has bits 0-3 for the scroll button state
|
||||
//check for the end packet, bytes 1-4 are movement and scroll
|
||||
//but byte 5 has bits 0-3 for the scroll button state
|
||||
//(1000 if pressed, 0000 if not) and bits 4-7 are always 1
|
||||
//We can use this to verify the report sent properly.
|
||||
if (uart_data[4] == 0x0F || uart_data[4] == 0x8F)
|
||||
{
|
||||
xprintf("\r\nREQUESTED MOUSE, RECEIVED %i, %i, %i, %i, %i",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4]);
|
||||
currentReport = pointing_device_get_report();
|
||||
//shifting and transferring the info to the mouse report varaible
|
||||
//mouseReport.x = 127 max -127 min
|
||||
currentReport.x = uart_data[0];
|
||||
currentReport.x = (int8_t) uart_data[0];
|
||||
//mouseReport.y = 127 max -127 min
|
||||
currentReport.y = uart_data[1];
|
||||
currentReport.y = (int8_t) uart_data[1];
|
||||
//mouseReport.v = 127 max -127 min (scroll vertical)
|
||||
currentReport.v = uart_data[2];
|
||||
currentReport.v = (int8_t) uart_data[2];
|
||||
//mouseReport.h = 127 max -127 min (scroll horizontal)
|
||||
currentReport.h = uart_data[3];
|
||||
currentReport.h = (int8_t) uart_data[3];
|
||||
//mouseReport.buttons = 0x31 max (bitmask for mouse buttons 1-5) 0x00 min
|
||||
//mouse buttons 1 and 2 are handled by the keymap, but not 3
|
||||
if (uart_data[4] == 0x0F) { //then 3 is not pressed
|
||||
@@ -55,7 +56,9 @@ void pointing_device_task(void){
|
||||
currentReport.buttons |= MOUSE_BTN3;
|
||||
}
|
||||
pointing_device_set_report(currentReport);
|
||||
}
|
||||
} else {
|
||||
xprintf("\r\nRequested packet, data 4 was %d",uart_data[4]);
|
||||
}*/
|
||||
pointing_device_send();
|
||||
}
|
||||
|
46
keyboards/dichotomy/dichotomy.h
Executable file
46
keyboards/dichotomy/dichotomy.h
Executable file
@@ -0,0 +1,46 @@
|
||||
#ifndef DICHOTOMY_H
|
||||
#define DICHOTOMY_H
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "report.h"
|
||||
#include "pointing_device.h"
|
||||
#include "quantum.h"
|
||||
#include "matrix.h"
|
||||
#include "backlight.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#define red_led_off() PORTF |= (1<<6)
|
||||
#define red_led_on() PORTF &= ~(1<<6)
|
||||
#define blu_led_off() PORTF |= (1<<5)
|
||||
#define blu_led_on() PORTF &= ~(1<<5)
|
||||
#define grn_led_off() PORTD |= (1<<1)
|
||||
#define grn_led_on() PORTD &= ~(1<<1)
|
||||
|
||||
#define set_led_off() red_led_off(); grn_led_off(); blu_led_off()
|
||||
#define set_led_red() red_led_on(); grn_led_off(); blu_led_off()
|
||||
#define set_led_blue() red_led_off(); grn_led_off(); blu_led_on()
|
||||
#define set_led_green() red_led_off(); grn_led_on(); blu_led_off()
|
||||
#define set_led_yellow() red_led_on(); grn_led_on(); blu_led_off()
|
||||
#define set_led_magenta() red_led_on(); grn_led_off(); blu_led_on()
|
||||
#define set_led_cyan() red_led_off(); grn_led_on(); blu_led_on()
|
||||
#define set_led_white() red_led_on(); grn_led_on(); blu_led_on()
|
||||
|
||||
// This a shortcut to help you visually see your layout.
|
||||
// The first section contains all of the arguements
|
||||
// The second converts the arguments into a two-dimensional array
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
|
||||
k33, k34, k35, k36, k37, k38, \
|
||||
k42, k43, k44, k45, k46, k47, k48, k49 \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B }, \
|
||||
{ KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, KC_NO }, \
|
||||
{ KC_NO, KC_NO, k42, k43, k44, k45, k46, k47, k48, k49, KC_NO, KC_NO } \
|
||||
}
|
||||
|
||||
#endif
|
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"keyboard_name": "Dichotemy",
|
||||
"keyboard_name": "Dichotomy",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 13,
|
506
keyboards/dichotomy/keymaps/default/keymap.c
Executable file
506
keyboards/dichotomy/keymaps/default/keymap.c
Executable file
@@ -0,0 +1,506 @@
|
||||
// this is the style you want to emulate.
|
||||
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
|
||||
|
||||
#include "dichotomy.h"
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum dichotomy_layers {
|
||||
_BS,
|
||||
_SF,
|
||||
_NM,
|
||||
_NS,
|
||||
_MS
|
||||
};
|
||||
|
||||
#define LONGPRESS_COUNT 4
|
||||
|
||||
enum dichotomy_keycodes
|
||||
{
|
||||
CK_1G = SAFE_RANGE,
|
||||
CK_BSPE,
|
||||
CK_QE,
|
||||
CK_TE, //these 4 CK_XXXX keys are special "alternate long-press" keys controlled with unique timers. Make sure you understand them before you mess with them.
|
||||
NS_HYPH,
|
||||
NS_EQU,
|
||||
NUMKEY,
|
||||
SFTKEY,
|
||||
MOUKEY,
|
||||
MS_BTN1,
|
||||
MS_BTN2,
|
||||
MS_BTN3
|
||||
};
|
||||
|
||||
#define CUSTOM_LONGPRESS 150
|
||||
#define CUSTOM_TOGGLE_TIME 300
|
||||
|
||||
#define RED_BRIGHTNESS 3
|
||||
#define GREEN_BRIGHTNESS 2
|
||||
#define BLUE_BRIGHTNESS 2
|
||||
|
||||
// Fillers to make layering more clear
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BS] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
|
||||
CK_TE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
NUMKEY, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CK_QE,
|
||||
SFTKEY, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOUKEY,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_RCTL,
|
||||
MS_BTN3, KC_LBRC, KC_LPRN, KC_SPC, KC_SPC, KC_RPRN, KC_RBRC, MS_BTN3
|
||||
),
|
||||
|
||||
[_SF] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, NS_HYPH, KC_UNDS, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, KC_LABK, _______, _______, KC_RABK, _______, _______
|
||||
),
|
||||
|
||||
[_NM] = LAYOUT( /* Number layout, basically the main function layer */
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
_______, CK_1G, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, CK_BSPE,
|
||||
_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_NS] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, NS_EQU, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[_MS] = LAYOUT( /* Mouse layer, including buttons for clicking. */
|
||||
_______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
|
||||
_______, _______, _______, _______, KC_UP, _______,
|
||||
_______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
static uint16_t special_timers[LONGPRESS_COUNT] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
|
||||
static bool special_key_states[LONGPRESS_COUNT] = {0,0,0,0};
|
||||
static bool special_key_pressed[LONGPRESS_COUNT] = {0,0,0,0};
|
||||
|
||||
static uint16_t shift_timer;
|
||||
static uint16_t num_timer;
|
||||
static uint16_t mouse_timer;
|
||||
|
||||
static uint8_t red_timer;
|
||||
static uint8_t green_timer;
|
||||
static uint8_t blue_timer;
|
||||
|
||||
static bool shift_singular_key = false;
|
||||
static bool number_singular_key = false;
|
||||
static bool mouse_singular_key = false;
|
||||
static bool capsLED = false;
|
||||
static bool shiftLED = false;
|
||||
static bool numLED = false;
|
||||
static bool mouseLED = false;
|
||||
|
||||
static bool shift_held = false;
|
||||
static bool shift_suspended = false;
|
||||
report_mouse_t currentReport = {};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
//uint8_t layer;
|
||||
//layer = biton32(layer_state); // get the current layer //Or don't, I didn't use it.
|
||||
bool returnVal = true; //this is to determine if more key processing is needed.
|
||||
|
||||
//custom layer handling for tri_layer,
|
||||
switch (keycode) {
|
||||
case NUMKEY:
|
||||
if (record->event.pressed) {
|
||||
num_timer = timer_read();
|
||||
number_singular_key = true;
|
||||
layer_invert(_NM);
|
||||
numLED = !numLED;
|
||||
} else {
|
||||
if (timer_elapsed(num_timer) < CUSTOM_TOGGLE_TIME && number_singular_key) {
|
||||
//do nothing, the layer has already been inverted
|
||||
} else {
|
||||
layer_invert(_NM);
|
||||
numLED = !numLED;
|
||||
}
|
||||
}
|
||||
update_tri_layer(_NM, _SF, _NS);
|
||||
returnVal = false;
|
||||
break;
|
||||
//SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
|
||||
case SFTKEY:
|
||||
if (record->event.pressed) {
|
||||
shift_held = true;
|
||||
shiftLED = true;
|
||||
shift_suspended = false;
|
||||
shift_timer = timer_read();
|
||||
shift_singular_key = true;
|
||||
layer_on(_SF);
|
||||
register_code(KC_LSFT);
|
||||
} else {
|
||||
shift_held = false;
|
||||
shiftLED = false;
|
||||
if (timer_elapsed(shift_timer) < CUSTOM_TOGGLE_TIME && shift_singular_key) {
|
||||
//this was basically a toggle, so activate/deactivate caps lock.
|
||||
SEND_STRING(SS_TAP(X_CAPSLOCK));
|
||||
capsLED = !capsLED;
|
||||
}
|
||||
layer_off(_SF);
|
||||
unregister_code(KC_LSFT);
|
||||
}
|
||||
update_tri_layer(_NM, _SF, _NS);
|
||||
returnVal = false;
|
||||
break;
|
||||
//MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
|
||||
case MOUKEY:
|
||||
if (record->event.pressed) {
|
||||
mouse_timer = timer_read();
|
||||
mouse_singular_key = true;
|
||||
layer_invert(_MS);
|
||||
mouseLED = !mouseLED;
|
||||
} else {
|
||||
if (timer_elapsed(mouse_timer) < CUSTOM_TOGGLE_TIME && mouse_singular_key){
|
||||
//do nothing, it was a toggle (and it's already been toggled)
|
||||
} else {
|
||||
layer_invert(_MS);
|
||||
mouseLED = !mouseLED;
|
||||
}
|
||||
}
|
||||
returnVal = false;
|
||||
break;
|
||||
//Custom macros for strange keys with different long-tap behavior
|
||||
case CK_1G:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_1G-SAFE_RANGE] = timer_read();
|
||||
special_key_pressed[CK_1G-SAFE_RANGE] = 1;
|
||||
} else {
|
||||
if (special_key_states[CK_1G-SAFE_RANGE]){
|
||||
//key was activated after custom_longpress, need to close those keycodes
|
||||
special_key_states[CK_1G-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_GRAVE);
|
||||
} else {
|
||||
if (special_key_pressed[CK_1G-SAFE_RANGE]){
|
||||
//key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_1));
|
||||
special_key_pressed[CK_1G-SAFE_RANGE] = 0;
|
||||
} else {
|
||||
//the short key was already sent, because another key was pressed.
|
||||
//Do nothing.
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
returnVal = false;
|
||||
break;
|
||||
case CK_BSPE:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_BSPE-SAFE_RANGE] = timer_read();
|
||||
special_key_pressed[CK_BSPE-SAFE_RANGE] = 1;
|
||||
} else {
|
||||
if (special_key_states[CK_BSPE-SAFE_RANGE]){
|
||||
//key was activated after custom_longpress, need to close those keycodes
|
||||
special_key_states[CK_BSPE-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_ENTER);
|
||||
} else {
|
||||
if (special_key_pressed[CK_BSPE-SAFE_RANGE]){
|
||||
//key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_BSLASH));
|
||||
special_key_pressed[CK_BSPE-SAFE_RANGE] = 0;
|
||||
} else {
|
||||
//the short key was already sent, because another key was pressed.
|
||||
//Do nothing.
|
||||
}
|
||||
}
|
||||
}
|
||||
returnVal = false;
|
||||
break;
|
||||
case CK_QE:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_QE-SAFE_RANGE] = timer_read();
|
||||
special_key_pressed[CK_QE-SAFE_RANGE] = 1;
|
||||
} else {
|
||||
if (special_key_states[CK_QE-SAFE_RANGE]){
|
||||
//key was activated after custom_longpress, need to close those keycodes
|
||||
special_key_states[CK_QE-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_ENTER);
|
||||
} else {
|
||||
if (special_key_pressed[CK_QE-SAFE_RANGE]){
|
||||
//the long-press key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_QUOTE));
|
||||
special_key_pressed[CK_QE-SAFE_RANGE] = 0;
|
||||
} else {
|
||||
//the short key was already sent, because another key was pressed.
|
||||
//Do nothing.
|
||||
}
|
||||
}
|
||||
}
|
||||
returnVal = false;
|
||||
break;
|
||||
case CK_TE:
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
if (record->event.pressed) {
|
||||
special_timers[CK_TE-SAFE_RANGE] = timer_read();
|
||||
special_key_pressed[CK_TE-SAFE_RANGE] = 1;
|
||||
} else {
|
||||
if (special_key_states[CK_TE-SAFE_RANGE]){
|
||||
//key was activated after custom_longpress, need to close those keycodes
|
||||
special_key_states[CK_TE-SAFE_RANGE] = 0;
|
||||
unregister_code(KC_ESCAPE);
|
||||
} else {
|
||||
if (special_key_pressed[CK_TE-SAFE_RANGE]){
|
||||
//the long-press key was not activated, return macro activating proper, pre-long-tap key
|
||||
SEND_STRING(SS_TAP(X_TAB));
|
||||
special_key_pressed[CK_TE-SAFE_RANGE] = 0;
|
||||
} else {
|
||||
//the short key was already sent, because another key was pressed.
|
||||
//Do nothing.
|
||||
}
|
||||
}
|
||||
}
|
||||
returnVal = false;
|
||||
break;
|
||||
//No-shift keys, they unregister the KC_LSFT code so they can send
|
||||
//unshifted values - but they don't change the bool. if any other
|
||||
//key is pressed and the bool is set, KC_LSFT is registered again.
|
||||
case NS_HYPH:
|
||||
if (record->event.pressed) {
|
||||
shift_suspended = true;
|
||||
unregister_code(KC_LSFT);
|
||||
register_code(KC_MINS);
|
||||
} else {
|
||||
unregister_code(KC_MINS);
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
}
|
||||
returnVal = false;
|
||||
break;
|
||||
case NS_EQU:
|
||||
if (record->event.pressed) {
|
||||
shift_suspended = true;
|
||||
unregister_code(KC_LSFT);
|
||||
register_code(KC_EQUAL);
|
||||
} else {
|
||||
unregister_code(KC_EQUAL);
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
}
|
||||
returnVal = false;
|
||||
break;
|
||||
|
||||
//mouse buttons, for 1-3, to update the mouse report:
|
||||
case MS_BTN1:
|
||||
currentReport = pointing_device_get_report();
|
||||
if (record->event.pressed) {
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
//update mouse report here
|
||||
currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
|
||||
} else {
|
||||
//update mouse report here
|
||||
currentReport.buttons &= ~MOUSE_BTN1;
|
||||
}
|
||||
pointing_device_set_report(currentReport);
|
||||
returnVal = false;
|
||||
break;
|
||||
case MS_BTN2:
|
||||
currentReport = pointing_device_get_report();
|
||||
if (record->event.pressed) {
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
//update mouse report here
|
||||
currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
|
||||
} else {
|
||||
//update mouse report here
|
||||
currentReport.buttons &= ~MOUSE_BTN2;
|
||||
}
|
||||
pointing_device_set_report(currentReport);
|
||||
returnVal = false;
|
||||
break;
|
||||
case MS_BTN3:
|
||||
currentReport = pointing_device_get_report();
|
||||
if (record->event.pressed) {
|
||||
if (shift_held && shift_suspended){
|
||||
register_code(KC_LSFT);
|
||||
shift_suspended = false;
|
||||
}
|
||||
//update mouse report here
|
||||
currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN3 is a const defined in report.h
|
||||
} else {
|
||||
//update mouse report here
|
||||
currentReport.buttons &= ~MOUSE_BTN3;
|
||||
}
|
||||
pointing_device_set_report(currentReport);
|
||||
returnVal = false;
|
||||
break;
|
||||
//Additionally, if NS_ keys are in use, then shift may be held (but is
|
||||
//disabled for the unshifted keycodes to be send. Check the bool and
|
||||
//register shift as necessary.
|
||||
default:
|
||||
if (shift_held){
|
||||
register_code(KC_LSFT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
switch (keycode){
|
||||
case KC_BSPC:
|
||||
case KC_NO:
|
||||
case NUMKEY:
|
||||
case SFTKEY:
|
||||
case MOUKEY:
|
||||
//don't want to reset single key variables
|
||||
break;
|
||||
default:
|
||||
//If any other key was pressed during the layer mod hold period,
|
||||
//then the layer mod was used momentarily, and should block latching
|
||||
shift_singular_key = false;
|
||||
number_singular_key = false;
|
||||
mouse_singular_key = false;
|
||||
break;
|
||||
}
|
||||
switch (keycode){
|
||||
case KC_BSPC:
|
||||
case KC_NO:
|
||||
case NUMKEY:
|
||||
case SFTKEY:
|
||||
case MOUKEY:
|
||||
case MOUSE_BTN1:
|
||||
case MOUSE_BTN2:
|
||||
case MOUSE_BTN3:
|
||||
case KC_LCTL:
|
||||
case KC_LALT:
|
||||
case KC_LGUI:
|
||||
case KC_RCTL:
|
||||
case KC_RALT:
|
||||
case KC_RGUI:
|
||||
case CK_1G:
|
||||
case CK_BSPE:
|
||||
case CK_QE:
|
||||
case CK_TE:
|
||||
//Do nothing, don't want to trigger the timer key rollover
|
||||
break;
|
||||
default:
|
||||
//Now we're checking to see if any of the special timer keys are pressed
|
||||
//if so, we need to activate their short-press features
|
||||
if (record->event.pressed) {
|
||||
for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
|
||||
if ((!special_key_states[i]) && special_key_pressed[i]){
|
||||
switch (i + SAFE_RANGE){
|
||||
case CK_1G:
|
||||
SEND_STRING(SS_TAP(X_1));
|
||||
break;
|
||||
case CK_BSPE:
|
||||
SEND_STRING(SS_TAP(X_BSLASH));
|
||||
break;
|
||||
case CK_QE:
|
||||
SEND_STRING(SS_TAP(X_QUOTE));
|
||||
break;
|
||||
case CK_TE:
|
||||
SEND_STRING(SS_TAP(X_TAB));
|
||||
break;
|
||||
}
|
||||
special_key_pressed[i] = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//do nothing, we don't want to trigger short presses on key releases.
|
||||
}
|
||||
break;
|
||||
}
|
||||
return returnVal;
|
||||
};
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
//uint8_t layer = biton32(layer_state);
|
||||
for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
|
||||
if ((timer_elapsed(special_timers[i]) >= CUSTOM_LONGPRESS) && (!special_key_states[i]) && special_key_pressed[i]){
|
||||
switch (i + SAFE_RANGE){
|
||||
case CK_1G:
|
||||
register_code(KC_GRAVE);
|
||||
break;
|
||||
case CK_BSPE:
|
||||
register_code(KC_ENTER);
|
||||
break;
|
||||
case CK_QE:
|
||||
register_code(KC_ENTER);
|
||||
break;
|
||||
case CK_TE:
|
||||
register_code(KC_ESCAPE);
|
||||
break;
|
||||
}
|
||||
special_key_pressed[i] = 0;
|
||||
special_key_states[i] = 1;
|
||||
}
|
||||
}
|
||||
if (shiftLED || capsLED){
|
||||
red_timer++;
|
||||
if (red_timer < RED_BRIGHTNESS){
|
||||
red_led_on();
|
||||
} else {
|
||||
red_timer = 0;
|
||||
red_led_off();
|
||||
}
|
||||
} else {
|
||||
red_timer = 0;
|
||||
red_led_off();
|
||||
}
|
||||
if (numLED){
|
||||
green_timer++;
|
||||
if (green_timer < GREEN_BRIGHTNESS){
|
||||
grn_led_on();
|
||||
} else {
|
||||
green_timer = 0;
|
||||
grn_led_off();
|
||||
}
|
||||
} else {
|
||||
green_timer = 0;
|
||||
grn_led_off();
|
||||
}
|
||||
if (mouseLED){
|
||||
blue_timer++;
|
||||
if (blue_timer < BLUE_BRIGHTNESS){
|
||||
blu_led_on();
|
||||
} else {
|
||||
blue_timer = 0;
|
||||
blu_led_off();
|
||||
}
|
||||
} else {
|
||||
blue_timer = 0;
|
||||
blu_led_off();
|
||||
}
|
||||
};
|
78
keyboards/dichotemy/matrix.c → keyboards/dichotomy/matrix.c
Normal file → Executable file
78
keyboards/dichotemy/matrix.c → keyboards/dichotomy/matrix.c
Normal file → Executable file
@@ -26,6 +26,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "timer.h"
|
||||
#include "dichotomy.h"
|
||||
#include "pointing_device.h"
|
||||
#include "report.h"
|
||||
|
||||
#if (MATRIX_COLS <= 8)
|
||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||
@@ -45,11 +48,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#endif
|
||||
|
||||
#define MAIN_ROWMASK 0xFFF0;
|
||||
#define LOWER_ROWMASK 0x1F80;
|
||||
#define LOWER_ROWMASK 0x3FC0;
|
||||
|
||||
/* matrix state(1:on, 0:off) */
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_quantum(void) {
|
||||
matrix_init_kb();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_scan_quantum(void) {
|
||||
matrix_scan_kb();
|
||||
}
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_kb(void) {
|
||||
matrix_init_user();
|
||||
@@ -79,13 +92,16 @@ uint8_t matrix_cols(void) {
|
||||
}
|
||||
|
||||
void matrix_init(void) {
|
||||
|
||||
DDRF |= (1<<6);
|
||||
DDRF |= (1<<5);
|
||||
DDRD |= (1<<1);
|
||||
matrix_init_quantum();
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
SERIAL_UART_INIT();
|
||||
//xprintf("\r\nTRYING TO SCAN");
|
||||
|
||||
uint32_t timeout = 0;
|
||||
|
||||
@@ -93,25 +109,35 @@ uint8_t matrix_scan(void)
|
||||
SERIAL_UART_DATA = 's';
|
||||
|
||||
//trust the external keystates entirely, erase the last data
|
||||
uint8_t uart_data[7] = {0};
|
||||
uint8_t uart_data[11] = {0};
|
||||
|
||||
//there are 10 bytes corresponding to 10 columns, and an end byte
|
||||
for (uint8_t i = 0; i < 7; i++) {
|
||||
for (uint8_t i = 0; i < 11; i++) {
|
||||
//wait for the serial data, timeout if it's been too long
|
||||
//this only happened in testing with a loose wire, but does no
|
||||
//harm to leave it in here
|
||||
while(!SERIAL_UART_RXD_PRESENT){
|
||||
timeout++;
|
||||
if (timeout > 10000){
|
||||
xprintf("\r\nTime out in keyboard.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
uart_data[i] = SERIAL_UART_DATA;
|
||||
}
|
||||
|
||||
//check for the end packet, the key state bytes use the LSBs, so 0xE0
|
||||
//will only show up here if the correct bytes were recieved
|
||||
if (uart_data[6] == 0x96) { //this is an arbitrary binary checksum (10010110)
|
||||
uint8_t checksum = 0x00;
|
||||
for (uint8_t z=0; z<10; z++){
|
||||
checksum = checksum^uart_data[z];
|
||||
}
|
||||
checksum = checksum ^ (uart_data[10] & 0xF0);
|
||||
// Smash the checksum from 1 byte into 4 bits
|
||||
checksum = (checksum ^ ((checksum & 0xF0)>>4)) & 0x0F;
|
||||
//xprintf("\r\nGOT RAW PACKET: \r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4],uart_data[5],uart_data[6],uart_data[7],uart_data[8],uart_data[9],uart_data[10],checksum);
|
||||
if ((uart_data[10] & 0x0F) == checksum) { //this is an arbitrary binary checksum (1001) (that would be 0x9.)
|
||||
//xprintf("\r\nGOT PACKET: \r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4],uart_data[5]);
|
||||
//shifting and transferring the keystates to the QMK matrix variable
|
||||
//bits 1-12 are row 1, 13-24 are row 2, 25-36 are row 3,
|
||||
//bits 37-42 are row 4 (only 6 wide, 1-3 are 0, and 10-12 are 0)
|
||||
@@ -121,15 +147,49 @@ uint8_t matrix_scan(void)
|
||||
matrix[1] = ((uint16_t) uart_data[1] << 12) | ((uint16_t) uart_data[2] << 4);
|
||||
matrix[2] = (((uint16_t) uart_data[3] << 8) | ((uint16_t) uart_data[4])) & MAIN_ROWMASK;
|
||||
matrix[3] = (((uint16_t) uart_data[4] << 9) | ((uint16_t) uart_data[5] << 1)) & LOWER_ROWMASK;
|
||||
matrix[4] = ((uint16_t) uart_data[5] << 7) & LOWER_ROWMASK;
|
||||
matrix[4] = (((uint16_t) uart_data[5] << 7) | ((uart_data[10] & 1<<7) ? 1:0) << 13 | ((uart_data[10] & 1<<6) ? 1:0) << 6) & LOWER_ROWMASK;
|
||||
/* OK, TURNS OUT THAT WAS A BAD ASSUMPTION */
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
//I've unpacked these into the mirror image of what QMK expects them to be, so...
|
||||
matrix[i] = ((matrix[i] * 0x0802LU & 0x22110LU) | (matrix[i] * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
|
||||
/*uint8_t halfOne = (matrix[i]>>8);
|
||||
uint8_t halfTwo = (matrix[i] & 0xFF);
|
||||
halfOne = ((halfOne * 0x0802LU & 0x22110LU) | (halfOne * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
|
||||
halfTwo = ((halfTwo * 0x0802LU & 0x22110LU) | (halfTwo * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
|
||||
matrix[i] = ((halfTwo<<8) & halfOne);*/
|
||||
//matrix[i] = ((matrix[i] * 0x0802LU & 0x22110LU) | (matrix[i] * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
|
||||
matrix[i] = bitrev16(matrix[i]);
|
||||
//bithack mirror! Doesn't make any sense, but works - and efficiently.
|
||||
}
|
||||
}
|
||||
//if (uart_data[6]!=0 || uart_data[7]!=0){
|
||||
//if (maxCount<101){
|
||||
// xprintf("\r\nMouse data: x=%d, y=%d",(int8_t)uart_data[6],(int8_t)uart_data[7]);
|
||||
//}
|
||||
report_mouse_t currentReport = {};
|
||||
//check for the end packet, bytes 1-4 are movement and scroll
|
||||
//but byte 5 has bits 0-3 for the scroll button state
|
||||
//(1000 if pressed, 0000 if not) and bits 4-7 are always 1
|
||||
//We can use this to verify the report sent properly.
|
||||
|
||||
currentReport = pointing_device_get_report();
|
||||
//shifting and transferring the info to the mouse report varaible
|
||||
//mouseReport.x = 127 max -127 min
|
||||
currentReport.x = (int8_t) uart_data[6];
|
||||
//mouseReport.y = 127 max -127 min
|
||||
currentReport.y = (int8_t) uart_data[7];
|
||||
//mouseReport.v = 127 max -127 min (scroll vertical)
|
||||
currentReport.v = (int8_t) uart_data[8];
|
||||
//mouseReport.h = 127 max -127 min (scroll horizontal)
|
||||
currentReport.h = (int8_t) uart_data[9];
|
||||
/*
|
||||
currentReport.x = 0;
|
||||
currentReport.y = 0;
|
||||
currentReport.v = 0;
|
||||
currentReport.h = 0;*/
|
||||
pointing_device_set_report(currentReport);
|
||||
} else {
|
||||
//xprintf("\r\nRequested packet, data 10 was %d but checksum was %d",(uart_data[10] & 0x0F), (checksum & 0x0F));
|
||||
}
|
||||
//matrix_print();
|
||||
|
||||
matrix_scan_quantum();
|
||||
return 1;
|
2
keyboards/dichotemy/readme.md → keyboards/dichotomy/readme.md
Normal file → Executable file
2
keyboards/dichotemy/readme.md → keyboards/dichotomy/readme.md
Normal file → Executable file
@@ -1,4 +1,4 @@
|
||||
Dichotemy Keyboard Firmware
|
||||
Dichotomy Keyboard Firmware
|
||||
======================
|
||||
|
||||
These configuration files were based off the Mitosis keyboard. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves - it also receives mouse pointer information from the keyboard halves, which is implemented through a new feature, "Pointing Device". The matrix.c file contains the code to poll the external microcontroller for the key matrix, and the keymap.c file contains similar code to obtain the mouse report. As long as the relavant functions in these files are not changed, all other QMK features are supported.
|
16
keyboards/dichotemy/rules.mk → keyboards/dichotomy/rules.mk
Normal file → Executable file
16
keyboards/dichotemy/rules.mk → keyboards/dichotomy/rules.mk
Normal file → Executable file
@@ -1,6 +1,6 @@
|
||||
|
||||
OPT_DEFS += -DDICHOTEMY_PROMICRO
|
||||
DICHOTEMY_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
||||
OPT_DEFS += -DDICHOTOMY_PROMICRO
|
||||
DICHOTOMY_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
|
||||
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
|
||||
|
||||
# # project specific files
|
||||
@@ -24,6 +24,8 @@ MCU = atmega32u4
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
@@ -43,10 +45,10 @@ ARCH = AVR8
|
||||
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
|
||||
# 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
|
||||
@@ -72,4 +74,4 @@ UNICODE_ENABLE = YES # Unicode
|
||||
USB = /dev/ttyACM0
|
||||
|
||||
#upload: build
|
||||
# $(DICHOTEMY_UPLOAD_COMMAND)
|
||||
# $(DICHOTOMY_UPLOAD_COMMAND)
|
@@ -332,5 +332,31 @@
|
||||
{ k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
|
||||
}
|
||||
|
||||
/* LAYOUT_60_tsangan_hhkb
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
||||
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
|
||||
* │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
|
||||
* │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
|
||||
* ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
|
||||
* │40 │41 │43 │46 (7u) │4b │4d │4e │
|
||||
* └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
|
||||
*/
|
||||
#define LAYOUT_60_tsangan_hhkb( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
|
||||
k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
|
||||
k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
|
||||
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
|
||||
k40, k41, k43, k46, k4b, k4d, k4e \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
|
||||
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
|
||||
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
|
||||
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
|
||||
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, KC_NO, k4b, KC_NO, k4d, k4e } \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -52,6 +52,10 @@
|
||||
"LAYOUT_60_b_iso": {
|
||||
"key_count": 67,
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"#", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}]
|
||||
},
|
||||
"LAYOUT_60_tsangan_hhkb": {
|
||||
"key_count": 62,
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,25 +1,30 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum keyboard_layers {
|
||||
_BL = 0, // Base Layer
|
||||
_FL // Function Layer
|
||||
};
|
||||
|
||||
// Custom #defined keycodes (shorter macros for readability)
|
||||
#define KC_CTES CTL_T(KC_ESC)
|
||||
#define KC_RSUP RSFT_T(KC_UP)
|
||||
#define KC_FNLT LT(_FL, KC_LEFT)
|
||||
#define KC_RADN RALT_T(KC_DOWN)
|
||||
#define KC_RCRT RCTL_T(KC_RIGHT)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
LAYOUT_60_ansi(
|
||||
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_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,
|
||||
CTL_T(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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_UP),
|
||||
MO(1), KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, RGUI_T(KC_LEFT), RALT_T(KC_DOWN), LT(2, KC_RIGHT)
|
||||
[_BL] = LAYOUT_60_ansi(
|
||||
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_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_CTES, 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_RSUP,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_FNLT, KC_RADN, KC_RCRT
|
||||
),
|
||||
LAYOUT_60_ansi(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
|
||||
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_PGDN, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
LAYOUT_60_ansi(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
|
||||
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SCROLLLOCK, KC_PAUSE, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
[_FL] = LAYOUT_60_ansi(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
|
||||
_______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
30
keyboards/dz60/keymaps/crd_tsangan/keymap.c
Normal file
30
keyboards/dz60/keymaps/crd_tsangan/keymap.c
Normal file
@@ -0,0 +1,30 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum keyboard_layers {
|
||||
_BL = 0, // Base Layer
|
||||
_FL // Function Layer
|
||||
};
|
||||
|
||||
// Custom #defined keycodes (shorter macros for readability)
|
||||
#define KC_CTES CTL_T(KC_ESC)
|
||||
#define KC_RSUP RSFT_T(KC_UP)
|
||||
#define KC_RGLT RGUI_T(KC_LEFT)
|
||||
#define KC_RADN RALT_T(KC_DOWN)
|
||||
#define KC_RCRT RCTL_T(KC_RIGHT)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BL] = LAYOUT_60_tsangan_hhkb(
|
||||
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_BSLS, KC_ESC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||
KC_CTES, 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_RSUP, MO(_FL),
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_RADN, KC_RCRT
|
||||
),
|
||||
[_FL] = LAYOUT_60_tsangan_hhkb(
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET,
|
||||
_______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, KC_DEL,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
@@ -33,28 +33,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | |ace | End | | PgDn | | |
|
||||
* `--------------------' `----------------------'
|
||||
*/
|
||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||
// Otherwise, it needs KC_*
|
||||
[BASE] = LAYOUT_ergodox( // layer 0 : default
|
||||
// left hand
|
||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
||||
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
||||
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||
ALT_T(KC_APP), KC_LGUI,
|
||||
KC_HOME,
|
||||
KC_SPC,KC_BSPC,KC_END,
|
||||
// right hand
|
||||
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
|
||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||
KC_LALT, CTL_T(KC_ESC),
|
||||
KC_PGUP,
|
||||
KC_PGDN,KC_TAB, KC_ENT
|
||||
),
|
||||
[BASE] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
||||
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
||||
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||
LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
|
||||
ALT_T(KC_APP), KC_LGUI,
|
||||
KC_HOME,
|
||||
KC_SPC, KC_BSPC, KC_END,
|
||||
// right hand
|
||||
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
|
||||
MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||
KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
|
||||
KC_LALT, CTL_T(KC_ESC),
|
||||
KC_PGUP,
|
||||
KC_PGDN, KC_TAB, KC_ENT
|
||||
),
|
||||
/* Keymap 1: Symbol Layer
|
||||
*
|
||||
* ,---------------------------------------------------. ,--------------------------------------------------.
|
||||
@@ -76,26 +74,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// SYMBOLS
|
||||
[SYMB] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||
EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||
RGB_MOD,KC_TRNS,
|
||||
KC_TRNS,
|
||||
RGB_VAD,RGB_VAI,KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||
RGB_TOG, RGB_SLD,
|
||||
KC_TRNS,
|
||||
KC_TRNS, RGB_HUD, RGB_HUI
|
||||
// left hand
|
||||
VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||
KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
|
||||
KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
|
||||
KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
|
||||
EPRM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
RGB_MOD, KC_TRNS,
|
||||
KC_TRNS,
|
||||
RGB_VAD, RGB_VAI, KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||
KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||
RGB_TOG, RGB_SLD,
|
||||
KC_TRNS,
|
||||
KC_TRNS, RGB_HUD, RGB_HUI
|
||||
),
|
||||
/* Keymap 2: Media and mouse keys
|
||||
*
|
||||
@@ -118,25 +115,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
// MEDIA AND MOUSE
|
||||
[MDIA] = LAYOUT_ergodox(
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_WBAK
|
||||
// left hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
// right hand
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS,
|
||||
KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_WBAK
|
||||
),
|
||||
};
|
||||
|
||||
|
2
keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore
vendored
Normal file
2
keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
package-lock.json
|
82
keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
Normal file
82
keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
Set any config.h overrides for your specific keymap here.
|
||||
See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
/* Keyboard Settings */
|
||||
#undef TAPPING_TERM
|
||||
#define TAPPING_TERM 150
|
||||
|
||||
#undef DEBOUNCE
|
||||
#define DEBOUNCE 10
|
||||
|
||||
#undef IGNORE_MOD_TAP_INTERRUPT
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
|
||||
#undef FORCE_NKRO
|
||||
#define FORCE_NKRO
|
||||
|
||||
/* This isn't defined by default, so there is no need to undefine it first. */
|
||||
#define LEADER_TIMEOUT 500
|
||||
#define PERMISSIVE_HOLD
|
||||
#define QMK_KEYS_PER_SCAN 4
|
||||
|
||||
|
||||
// RGB Lights
|
||||
#undef RGBLIGHT_HUE_STEP
|
||||
#define RGBLIGHT_HUE_STEP 24
|
||||
|
||||
#undef RGBLIGHT_SAT_STEP
|
||||
#define RGBLIGHT_SAT_STEP 24
|
||||
|
||||
#undef RGBLIGHT_VAL_STEP
|
||||
#define RGBLIGHT_VAL_STEP 24
|
||||
|
||||
#undef RGBLIGHT_BRI_STEP
|
||||
#define RGBLIGHT_BRI_STEP 24
|
||||
|
||||
#undef RGBLIGHT_LIMIT_VAL
|
||||
#define RGBLIGHT_LIMIT_VAL 255
|
||||
|
||||
/* This isn't defined by default, so there is no need to undefine it first. */
|
||||
#define RGBLIGHT_SLEEP
|
||||
|
||||
|
||||
// Mouse
|
||||
#undef MOUSEKEY_INTERVAL
|
||||
#define MOUSEKEY_INTERVAL 10
|
||||
|
||||
#undef MOUSEKEY_DELAY
|
||||
#define MOUSEKEY_DELAY 15
|
||||
|
||||
#undef MOUSEKEY_MAX_SPEED
|
||||
#define MOUSEKEY_MAX_SPEED 15
|
||||
|
||||
#undef MOUSEKEY_TIME_TO_MAX
|
||||
#define MOUSEKEY_TIME_TO_MAX 150
|
||||
|
||||
#undef MOUSEKEY_WHEEL_MAX_SPEED
|
||||
#define MOUSEKEY_WHEEL_MAX_SPEED 15
|
||||
|
||||
#undef MOUSEKEY_WHEEL_TIME_TO_MAX
|
||||
#define MOUSEKEY_WHEEL_TIME_TO_MAX 150
|
||||
|
||||
|
||||
/* This is defined only if CONSOLE_ENABLE is set to "yes" */
|
||||
// #undef NO_DEBUG
|
||||
// #define NO_DEBUG
|
||||
|
||||
// #undef NO_PRINT
|
||||
// #define NO_PRINT
|
||||
|
||||
/* For COMBO only*/
|
||||
// #define COMBO_COUNT 1
|
||||
// #define COMBO_TERM 200
|
||||
|
||||
/* For tap toggle */
|
||||
// #define TAPPING_TOGGLE 2
|
||||
// #define ONESHOT_TAP_TOGGLE 2
|
||||
// #define ONESHOT_TIMEOUT 300
|
||||
|
@@ -0,0 +1 @@
|
||||
https://i.imgur.com/fKX0Zbs.png
|
@@ -0,0 +1 @@
|
||||
https://i.imgur.com/giAc3M9.jpg
|
13
keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
Normal file
13
keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
Normal file
@@ -0,0 +1,13 @@
|
||||
let gulp = require('gulp');
|
||||
let run = require('gulp-run-command').default;
|
||||
|
||||
|
||||
gulp.task('clean', run('rm -rf ../../../../.build'));
|
||||
|
||||
gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak', {
|
||||
ignoreErrors: true
|
||||
}));
|
||||
|
||||
gulp.task('watch', ['build'], () => {
|
||||
gulp.watch(['keymap.c', 'config.h', 'rules.mk'], ['build']);
|
||||
});
|
781
keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
Normal file
781
keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
Normal file
@@ -0,0 +1,781 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "keymap_dvorak.h"
|
||||
#include "sendstring_dvorak.h"
|
||||
#include "keymap_plover.h"
|
||||
#include "keymap_plover_dvorak.h"
|
||||
|
||||
|
||||
#define SCTL(kc) LSFT(LCTL(kc))
|
||||
|
||||
// Layers
|
||||
enum layers {
|
||||
DVORAK_US = 0,
|
||||
PLOVER_US,
|
||||
GAMING_US,
|
||||
ARROWS_US,
|
||||
MOUSE_US,
|
||||
NUMPAD_US,
|
||||
LAYERS_US,
|
||||
DVORAK_DV,
|
||||
PLOVER_DV,
|
||||
GAMING_DV,
|
||||
ARROWS_DV,
|
||||
MOUSE_DV,
|
||||
NUMPAD_DV,
|
||||
LAYERS_DV,
|
||||
MEDIA_FN,
|
||||
HYPER_FN,
|
||||
MEH_FN,
|
||||
MEH_FN_PLUS,
|
||||
FIRMWARE
|
||||
};
|
||||
|
||||
int CAPS_LOCK = 0;
|
||||
int NUM_LOCK = 0;
|
||||
int SCROLL_LOCK = 0;
|
||||
|
||||
enum tap_dances {
|
||||
TD_ESC_CAPS = 0
|
||||
};
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CLCK)
|
||||
};
|
||||
|
||||
|
||||
enum custom_keycodes {
|
||||
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||||
RGB_GREEN // to set default RGB layer as green once
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
|
||||
* |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
|
||||
* | 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | 14 | 15 | 16 | 17 | 18 | 19 |------| |------| 52 | 53 | 54 | 55 | 56 | 57 |
|
||||
* |--------+------+------+------+------+------| 26 | | 58 |------+------+------+------+------+--------|
|
||||
* | 20 | 21 | 22 | 23 | 24 | 25 | | | | 59 | 60 | 61 | 62 | 63 | 64 |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | 27 | 28 | 29 | 30 | 31 | | 65 | 66 | 67 | 68 | 69 |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | 32 | 33 | | 70 | 71 |
|
||||
* ,------+------+------| |------+------+------.
|
||||
* | | | 34 | | 72 | | |
|
||||
* | 35 | 36 |------| |------| 74 | 75 |
|
||||
* | | | 37 | | 73 | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
[DVORAK_US] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
KC_ESC, KC_LABK, KC_LCBR, KC_LBRC, KC_LPRN, KC_EXLM, KC_AMPR,
|
||||
KC_TAB, KC_QUOT, SCMD_T(KC_COMM), MEH_T(KC_DOT), ALL_T(KC_P), KC_Y, KC_AT,
|
||||
KC_EQL, CTL_T(KC_A), SFT_T(KC_O), LT(NUMPAD_US, KC_E), LT(ARROWS_US, KC_U), KC_I,
|
||||
KC_BSLS, ALGR_T(KC_SCLN), ALT_T(KC_Q), LT(MEDIA_FN, KC_J), GUI_T(KC_K), KC_X, KC_PERC,
|
||||
MO(MEH_FN), TG(LAYERS_US), KC_CIRC, KC_PLUS, KC_COLN,
|
||||
|
||||
// left thumb
|
||||
KC_LEFT, KC_RGHT,
|
||||
KC_HOME,
|
||||
KC_SPC, KC_BSPC, KC_END,
|
||||
|
||||
// right hand
|
||||
KC_PIPE, KC_QUES, KC_RPRN, KC_RBRC, KC_RCBR, KC_RABK, KC_ASTR,
|
||||
KC_HASH, KC_F, ALL_T(KC_G), MEH_T(KC_C), SCMD_T(KC_R), KC_L, KC_SLSH,
|
||||
KC_D, LT(MOUSE_US, KC_H), LT(HYPER_FN, KC_T), SFT_T(KC_N), CTL_T(KC_S), KC_MINS,
|
||||
KC_DLR, KC_B, GUI_T(KC_M), LT(MEDIA_FN, KC_W), ALT_T(KC_V), ALGR_T(KC_Z), KC_GRV,
|
||||
KC_DQUO, KC_UNDS, KC_TILD, TG(DVORAK_DV), MO(MEH_FN_PLUS),
|
||||
|
||||
// right thumb
|
||||
KC_UP, KC_DOWN,
|
||||
KC_PGUP,
|
||||
KC_PGDN, KC_DEL, KC_ENT
|
||||
),
|
||||
|
||||
[PLOVER_US] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
|
||||
KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PV_NUM,
|
||||
KC_TAB, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
|
||||
KC_CLCK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
|
||||
MO(MEH_FN), TG(LAYERS_US), PV_NUM, PV_NUM, PV_NUM,
|
||||
|
||||
// left thumb
|
||||
KC_SPACE, KC_BSPACE,
|
||||
KC_HOME,
|
||||
PV_A, PV_O, KC_END,
|
||||
|
||||
// right hand
|
||||
KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
|
||||
PV_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
|
||||
PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
|
||||
PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
|
||||
PV_NUM, PV_NUM, PV_NUM, PV_NUM, MO(MEH_FN_PLUS),
|
||||
|
||||
// right thumb
|
||||
KC_DELETE, KC_ENTER,
|
||||
KC_PGUP,
|
||||
KC_PGDOWN, PV_E, PV_U
|
||||
),
|
||||
|
||||
[GAMING_US] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
KC_ESCAPE, GUI_T(KC_MINS), KC_I, KC_O, KC_P, ALGR_T(KC_EQL), KC_T,
|
||||
KC_TAB, KC_LALT, KC_Q, KC_W, KC_E, ALL_T(KC_R), KC_G,
|
||||
LT(MOUSE_US, KC_GRV), KC_LCTRL, KC_A, KC_S, KC_D, MEH_T(KC_F),
|
||||
KC_BSLS, KC_LSHIFT, KC_Z, KC_X, KC_C, SCMD_T(KC_V), KC_M,
|
||||
MO(MEH_FN), TG(LAYERS_US), KC_COMM, KC_DOT, KC_LBRC,
|
||||
|
||||
// left thumb
|
||||
MO(MEDIA_FN), KC_NLCK,
|
||||
KC_SCLN,
|
||||
KC_SPACE, KC_ENTER, KC_BSPACE,
|
||||
|
||||
// right hand
|
||||
KC_QUOT, KC_Y, KC_K, KC_U, KC_KP_7, KC_KP_8, KC_KP_9,
|
||||
KC_MS_WH_UP, KC_H, KC_J, KC_L, KC_KP_4, KC_KP_2, KC_KP_6,
|
||||
KC_B, KC_MS_UP, KC_N, KC_KP_1, KC_KP_5, KC_KP_3,
|
||||
KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, KC_SLASH,
|
||||
KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
|
||||
|
||||
// right thumb
|
||||
KC_MS_BTN5, MO(HYPER_FN),
|
||||
KC_MS_BTN4,
|
||||
KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
|
||||
),
|
||||
|
||||
[ARROWS_US] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
|
||||
XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_HOME,
|
||||
KC_SPACE, KC_BSPACE, KC_END,
|
||||
|
||||
// right hand
|
||||
LGUI(KC_X), XXXXXXX, LCTL(KC_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
LGUI(KC_C), XXXXXXX, LCTL(KC_C), KC_UP, SCTL(KC_C), LCTL(KC_Z), LGUI(KC_Z),
|
||||
KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
|
||||
LGUI(KC_V), XXXXXXX, LCTL(KC_V), KC_MS_WH_DOWN, SCTL(KC_V), LCTL(KC_Y), SGUI(KC_Z),
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_PGUP,
|
||||
KC_PGDOWN, KC_DELETE, KC_ENTER
|
||||
),
|
||||
|
||||
[MOUSE_US] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(KC_X), XXXXXXX, LGUI(KC_X),
|
||||
LGUI(KC_Z), LCTL(KC_Z), SCTL(KC_C), KC_MS_UP, LCTL(KC_C), KC_MS_BTN4, LGUI(KC_C),
|
||||
KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
|
||||
LGUI(KC_Z), LCTL(KC_Y), SCTL(KC_V), KC_MS_WH_DOWN, LCTL(KC_V), KC_MS_BTN5, LGUI(KC_V),
|
||||
KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
|
||||
XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, KC_MS_ACCEL0
|
||||
),
|
||||
|
||||
[NUMPAD_US] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
|
||||
_______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
|
||||
XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_HOME,
|
||||
KC_SPACE, KC_BSPACE, KC_END,
|
||||
|
||||
// right hand
|
||||
KC_X, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
|
||||
KC_O, KC_I, KC_1, KC_2, KC_3, KC_SLSH, KC_PERC,
|
||||
KC_M, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
|
||||
KC_L, KC_J, KC_7, KC_8, KC_9, KC_ASTR, KC_CIRC,
|
||||
KC_DOT, KC_0, KC_COMM, KC_UNDS, KC_BSLS,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_PGUP,
|
||||
KC_PGDOWN, KC_DELETE, KC_ENTER
|
||||
),
|
||||
|
||||
[LAYERS_US] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, TO(DVORAK_US), TO(PLOVER_US), TO(GAMING_US), XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX
|
||||
),
|
||||
|
||||
[DVORAK_DV] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
KC_ESC, DV_LABK, DV_LCBR, DV_LBRC, DV_LPRN, DV_EXLM, DV_AMPR,
|
||||
KC_TAB, DV_QUOT, SCMD_T(DV_COMM), MEH_T(DV_DOT), ALL_T(DV_P), DV_Y, DV_AT,
|
||||
DV_EQL, CTL_T(DV_A), SFT_T(DV_O), LT(NUMPAD_DV, DV_E), LT(ARROWS_DV, DV_U), DV_I,
|
||||
DV_BSLS, ALGR_T(DV_SCLN), ALT_T(DV_Q), LT(MEDIA_FN, DV_J), GUI_T(DV_K), DV_X, DV_PERC,
|
||||
MO(MEH_FN), TG(LAYERS_DV), DV_CIRC, DV_PLUS, DV_COLN,
|
||||
|
||||
// left thumb
|
||||
KC_LEFT, KC_RGHT,
|
||||
KC_HOME,
|
||||
KC_SPC, KC_BSPC, KC_END,
|
||||
|
||||
// right hand
|
||||
DV_PIPE, DV_QUES, DV_RPRN, DV_RBRC, DV_RCBR, DV_RABK, DV_ASTR,
|
||||
DV_HASH, DV_F, ALL_T(DV_G), MEH_T(DV_C), SCMD_T(DV_R), DV_L, DV_SLSH,
|
||||
DV_D, LT(MOUSE_DV, DV_H), LT(HYPER_FN, DV_T), SFT_T(DV_N), CTL_T(DV_S), DV_MINS,
|
||||
DV_DLR, DV_B, GUI_T(DV_M), LT(MEDIA_FN, DV_W), ALT_T(DV_V), ALGR_T(DV_Z), DV_GRV,
|
||||
DV_DQUO, DV_UNDS, DV_TILD, _______, MO(MEH_FN_PLUS),
|
||||
|
||||
// right thumb
|
||||
KC_UP, KC_DOWN,
|
||||
KC_PGUP,
|
||||
KC_PGDN, KC_DEL, KC_ENT
|
||||
),
|
||||
|
||||
[PLOVER_DV] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
|
||||
KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PD_NUM,
|
||||
KC_TAB, PD_LS, PD_LT, PD_LP, PD_LH, PD_STAR,
|
||||
KC_CLCK, PD_LS, PD_LK, PD_LW, PD_LR, PD_STAR, PD_STAR,
|
||||
MO(MEH_FN), TG(LAYERS_DV), PD_NUM, PD_NUM, PD_NUM,
|
||||
|
||||
// left thumb
|
||||
KC_SPACE, KC_BSPACE,
|
||||
KC_HOME,
|
||||
PD_A, PD_O, KC_END,
|
||||
|
||||
// right hand
|
||||
KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
|
||||
PD_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
|
||||
PD_STAR, PD_RF, PD_RP, PD_RL, PD_RT, PD_RD,
|
||||
PD_STAR, PD_STAR, PD_RR, PD_RB, PD_RG, PD_RS, PD_RZ,
|
||||
PD_NUM, PD_NUM, PD_NUM, PD_NUM, MO(MEH_FN_PLUS),
|
||||
|
||||
// right thumb
|
||||
KC_DELETE, KC_ENTER,
|
||||
KC_PGUP,
|
||||
KC_PGDOWN, PD_E, PD_U
|
||||
),
|
||||
|
||||
[GAMING_DV] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
KC_ESCAPE, GUI_T(DV_MINS), DV_I, DV_O, DV_P, ALGR_T(DV_EQL), DV_T,
|
||||
KC_TAB, KC_LALT, DV_Q, DV_W, DV_E, ALL_T(DV_R), DV_G,
|
||||
LT(MOUSE_DV, DV_GRV), KC_LCTRL, DV_A, DV_S, DV_D, MEH_T(DV_F),
|
||||
DV_BSLS, KC_LSHIFT, DV_Z, DV_X, DV_C, SCMD_T(DV_V), DV_M,
|
||||
MO(MEH_FN), TG(LAYERS_DV), DV_COMM, DV_DOT, DV_LBRC,
|
||||
|
||||
// left thumb
|
||||
MO(MEDIA_FN), KC_NLCK,
|
||||
DV_SCLN,
|
||||
KC_SPACE, KC_ENTER, KC_BSPACE,
|
||||
|
||||
// right hand
|
||||
DV_QUOT, DV_Y, DV_K, DV_U, KC_KP_7, KC_KP_8, KC_KP_9,
|
||||
KC_MS_WH_UP, DV_H, DV_J, DV_L, KC_KP_4, KC_KP_2, KC_KP_6,
|
||||
DV_B, KC_MS_UP, DV_N, KC_KP_1, KC_KP_5, KC_KP_3,
|
||||
KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, DV_SLSH,
|
||||
DV_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
|
||||
|
||||
// right thumb
|
||||
KC_MS_BTN5, MO(HYPER_FN),
|
||||
KC_MS_BTN4,
|
||||
KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
|
||||
),
|
||||
|
||||
[ARROWS_DV] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
|
||||
XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_HOME,
|
||||
KC_SPACE, KC_BSPACE, KC_END,
|
||||
|
||||
// right hand
|
||||
LGUI(DV_X), XXXXXXX, LCTL(DV_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
LGUI(DV_C), XXXXXXX, LCTL(DV_C), KC_UP, SCTL(DV_C), LCTL(DV_Z), LGUI(DV_Z),
|
||||
KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
|
||||
LGUI(DV_V), XXXXXXX, LCTL(DV_V), KC_MS_WH_DOWN, SCTL(DV_V), LCTL(DV_Y), SGUI(DV_Z),
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_PGUP,
|
||||
KC_PGDOWN, KC_DELETE, KC_ENTER
|
||||
),
|
||||
|
||||
[MOUSE_DV] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(DV_X), XXXXXXX, LGUI(DV_X),
|
||||
LGUI(DV_Z), LCTL(DV_Z), SCTL(DV_C), KC_MS_UP, LCTL(DV_C), KC_MS_BTN4, LGUI(DV_C),
|
||||
KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
|
||||
LGUI(DV_Z), LCTL(DV_Y), SCTL(DV_V), KC_MS_WH_DOWN, LCTL(DV_V), KC_MS_BTN5, LGUI(DV_V),
|
||||
KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
|
||||
XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, KC_MS_ACCEL0
|
||||
),
|
||||
|
||||
[NUMPAD_DV] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
|
||||
_______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
|
||||
XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_HOME,
|
||||
KC_SPACE, KC_BSPACE, KC_END,
|
||||
|
||||
// right hand
|
||||
DV_X, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F,
|
||||
DV_O, DV_I, DV_1, DV_2, DV_3, DV_SLSH, DV_PERC,
|
||||
DV_M, DV_4, DV_5, DV_6, DV_PLUS, DV_MINS,
|
||||
DV_L, DV_J, DV_7, DV_8, DV_9, DV_ASTR, DV_CIRC,
|
||||
DV_DOT, DV_0, DV_COMM, DV_UNDS, DV_BSLS,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
KC_PGUP,
|
||||
KC_PGDOWN, KC_DELETE, KC_ENTER
|
||||
),
|
||||
|
||||
[LAYERS_DV] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, TO(DVORAK_DV), TO(PLOVER_DV), TO(GAMING_DV), XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX
|
||||
),
|
||||
|
||||
[MEDIA_FN] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, RGB_TOG, XXXXXXX, KC_MAIL, KC_FIND, KC_WWW_REFRESH,
|
||||
KC_MEDIA_PREV_TRACK, KC_F9, KC_F7, KC_F5, KC_F3, KC_F1, KC_WWW_HOME,
|
||||
KC_PAUSE, KC_F19, KC_F17, KC_F15, KC_F13, KC_F11,
|
||||
RGB_HUD, XXXXXXX, XXXXXXX, _______, KC_F23, KC_F21, KC_WWW_BACK,
|
||||
RGB_VAD, KC_CLCK, KC_PSCREEN, XXXXXXX, MO(FIRMWARE),
|
||||
|
||||
// left thumb
|
||||
_______, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, KC_MEDIA_EJECT,
|
||||
|
||||
// right hand
|
||||
KC_WWW_FAVORITES, KC_MY_COMPUTER, KC_CALCULATOR, XXXXXXX, RGB_MOD, RGB_M_P, KC_AUDIO_VOL_UP,
|
||||
KC_WWW_SEARCH, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, KC_MEDIA_NEXT_TRACK,
|
||||
KC_F12, KC_F14, KC_F16, KC_F18, KC_F20, KC_MEDIA_PLAY_PAUSE,
|
||||
KC_WWW_FORWARD, KC_F22, KC_F24, _______, XXXXXXX, XXXXXXX, RGB_HUI,
|
||||
KC_SYSTEM_POWER, XXXXXXX, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, RGB_VAI,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
RGB_GREEN, XXXXXXX, XXXXXXX
|
||||
),
|
||||
|
||||
[HYPER_FN] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), XXXXXXX,
|
||||
XXXXXXX, HYPR(KC_F6), HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), XXXXXXX,
|
||||
XXXXXXX, HYPR(KC_F11), HYPR(KC_F12), HYPR(KC_F13), HYPR(KC_F14), HYPR(KC_F15),
|
||||
XXXXXXX, HYPR(KC_F16), HYPR(KC_F17), HYPR(KC_F18), HYPR(KC_F19), HYPR(KC_F20), XXXXXXX,
|
||||
XXXXXXX, HYPR(KC_F21), HYPR(KC_F22), HYPR(KC_F23), HYPR(KC_F24),
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, _______,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX
|
||||
),
|
||||
|
||||
[MEH_FN] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
LCA(KC_F11), LCA(KC_F9), LCA(KC_F7), LCA(KC_F5), LCA(KC_F3), LCA(KC_F1), XXXXXXX,
|
||||
LCAG(KC_F11), LCAG(KC_F9), LCAG(KC_F7), LCAG(KC_F5), LCAG(KC_F3), LCAG(KC_F1), XXXXXXX,
|
||||
MEH(KC_F11), MEH(KC_F9), MEH(KC_F7), MEH(KC_F5), MEH(KC_F3), MEH(KC_F1),
|
||||
SGUI(KC_F11), SGUI(KC_F9), SGUI(KC_F7), SGUI(KC_F5), SGUI(KC_F3), SGUI(KC_F1), XXXXXXX,
|
||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, LCA(KC_F2), LCA(KC_F4), LCA(KC_F6), LCA(KC_F8), LCA(KC_F10), LCA(KC_F12),
|
||||
XXXXXXX, LCAG(KC_F2), LCAG(KC_F4), LCAG(KC_F6), LCAG(KC_F8), LCAG(KC_F10), LCAG(KC_F12),
|
||||
MEH(KC_F2), MEH(KC_F4), MEH(KC_F6), MEH(KC_F8), MEH(KC_F10), MEH(KC_F12),
|
||||
XXXXXXX, SGUI(KC_F2), SGUI(KC_F4), SGUI(KC_F6), SGUI(KC_F8), SGUI(KC_F10), SGUI(KC_F12),
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX
|
||||
),
|
||||
|
||||
[MEH_FN_PLUS] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
LCA(KC_F23), LCA(KC_F21), LCA(KC_F19), LCA(KC_F17), LCA(KC_F15), LCA(KC_F13), XXXXXXX,
|
||||
LCAG(KC_F23), LCAG(KC_F21), LCAG(KC_F19), LCAG(KC_F17), LCAG(KC_F15), LCAG(KC_F13), XXXXXXX,
|
||||
MEH(KC_F23), MEH(KC_F21), MEH(KC_F19), MEH(KC_F17), MEH(KC_F15), MEH(KC_F13),
|
||||
SGUI(KC_F23), SGUI(KC_F21), SGUI(KC_F19), SGUI(KC_F17), SGUI(KC_F15), SGUI(KC_F13), XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, LCA(KC_F14), LCA(KC_F16), LCA(KC_F18), LCA(KC_F20), LCA(KC_F22), LCA(KC_F24),
|
||||
XXXXXXX, LCAG(KC_F14), LCAG(KC_F16), LCAG(KC_F18), LCAG(KC_F20), LCAG(KC_F22), LCAG(KC_F24),
|
||||
MEH(KC_F14), MEH(KC_F16), MEH(KC_F18), MEH(KC_F20), MEH(KC_F22), MEH(KC_F24),
|
||||
XXXXXXX, SGUI(KC_F14), SGUI(KC_F16), SGUI(KC_F18), SGUI(KC_F20), SGUI(KC_F22), SGUI(KC_F24),
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX
|
||||
),
|
||||
|
||||
[FIRMWARE] = LAYOUT_ergodox(
|
||||
// left hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
||||
|
||||
// left thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
RESET, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right hand
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
|
||||
// right thumb
|
||||
XXXXXXX, XXXXXXX,
|
||||
XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, EEP_RST
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case RGB_GREEN:
|
||||
if (record->event.pressed) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
rgblight_enable();
|
||||
rgblight_mode(1);
|
||||
rgblight_sethsv_red();
|
||||
#endif
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
case KC_CLCK:
|
||||
if (record->event.pressed) {
|
||||
if (!(CAPS_LOCK)) {
|
||||
ergodox_right_led_1_on();
|
||||
CAPS_LOCK = 1;
|
||||
} else {
|
||||
ergodox_right_led_1_off();
|
||||
CAPS_LOCK = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
case KC_NLCK:
|
||||
if (record->event.pressed) {
|
||||
if (!(NUM_LOCK)) {
|
||||
ergodox_right_led_2_on();
|
||||
NUM_LOCK = 1;
|
||||
} else {
|
||||
ergodox_right_led_2_off();
|
||||
NUM_LOCK = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
case KC_SLCK:
|
||||
if (record->event.pressed) {
|
||||
if (!(SCROLL_LOCK)) {
|
||||
ergodox_right_led_3_on();
|
||||
SCROLL_LOCK = 1;
|
||||
} else {
|
||||
ergodox_right_led_3_off();
|
||||
SCROLL_LOCK = 0;
|
||||
}
|
||||
}
|
||||
|
||||
case KC_MS_WH_LEFT:
|
||||
if (record->event.pressed) {
|
||||
if (SCROLL_LOCK) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
case KC_MS_WH_UP:
|
||||
if (record->event.pressed) {
|
||||
if (SCROLL_LOCK) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
case KC_MS_WH_DOWN:
|
||||
if (record->event.pressed) {
|
||||
if (SCROLL_LOCK) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
case KC_MS_WH_RIGHT:
|
||||
if (record->event.pressed) {
|
||||
if (SCROLL_LOCK) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
uint8_t layer = biton32(state);
|
||||
|
||||
switch (layer) {
|
||||
case DVORAK_US:
|
||||
rgblight_sethsv_noeeprom_red();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
|
||||
|
||||
break;
|
||||
|
||||
case PLOVER_US:
|
||||
rgblight_sethsv_noeeprom_red();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
|
||||
|
||||
break;
|
||||
|
||||
case GAMING_US:
|
||||
rgblight_sethsv_noeeprom_red();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
|
||||
|
||||
break;
|
||||
|
||||
case ARROWS_US:
|
||||
rgblight_sethsv_noeeprom_blue();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case MOUSE_US:
|
||||
rgblight_sethsv_noeeprom_blue();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case NUMPAD_US:
|
||||
rgblight_sethsv_noeeprom_blue();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case LAYERS_US:
|
||||
rgblight_sethsv_noeeprom_cyan();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case DVORAK_DV:
|
||||
rgblight_sethsv_noeeprom_green();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
|
||||
break;
|
||||
|
||||
case PLOVER_DV:
|
||||
rgblight_sethsv_noeeprom_green();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
|
||||
|
||||
break;
|
||||
|
||||
case GAMING_DV:
|
||||
rgblight_sethsv_noeeprom_green();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
|
||||
|
||||
break;
|
||||
|
||||
case ARROWS_DV:
|
||||
rgblight_sethsv_noeeprom_blue();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case MOUSE_DV:
|
||||
rgblight_sethsv_noeeprom_blue();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case NUMPAD_DV:
|
||||
rgblight_sethsv_noeeprom_blue();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case LAYERS_DV:
|
||||
rgblight_sethsv_noeeprom_cyan();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case MEDIA_FN:
|
||||
rgblight_sethsv_noeeprom_yellow();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case HYPER_FN:
|
||||
rgblight_sethsv_noeeprom_magenta();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
case MEH_FN:
|
||||
rgblight_sethsv_noeeprom_magenta();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 4);
|
||||
|
||||
break;
|
||||
|
||||
case MEH_FN_PLUS:
|
||||
rgblight_sethsv_noeeprom_magenta();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 5);
|
||||
|
||||
break;
|
||||
|
||||
case FIRMWARE:
|
||||
rgblight_sethsv_noeeprom_pink();
|
||||
rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return state;
|
||||
};
|
15
keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json
Normal file
15
keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "hacker_dvorak",
|
||||
"version": "1.0.0",
|
||||
"description": "Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.",
|
||||
"main": "gulpfile.js",
|
||||
"scripts": {
|
||||
"test": "test"
|
||||
},
|
||||
"author": "SalchiPapa",
|
||||
"license": "GPL-2.0",
|
||||
"dependencies": {
|
||||
"gulp": "^3.9.1",
|
||||
"gulp-run-command": "0.0.9"
|
||||
}
|
||||
}
|
62
keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
Normal file
62
keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# [Ergodox EZ Hacker Dvorak Layout](https://configure.ergodox-ez.com/layouts/Wadz/latest/0)
|
||||
|
||||
Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.
|
||||
|
||||
## Setup
|
||||
|
||||
Configure your OS keyboard layout to US, or the keymap will be incorrect.
|
||||
|
||||
## Limitations
|
||||
|
||||
I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome some limitations of the Ergodox EZ [graphical configurator](https://configure.ergodox-ez.com/layouts/default/latest/0)), however I will defer that, until more progress is made to the new [configurator](https://medium.com/the-ergo/the-configurator-is-out-of-beta-e107aec80cae).
|
||||
|
||||
## Layers
|
||||
|
||||
1. Dvorak
|
||||
* US Dvorak layout.
|
||||
* All symbols (including shifted symbols).
|
||||
* All modifier are dual keys positioned near the home row.
|
||||
2. Querty
|
||||
* Used to overcome the limitation pointed above, when your OS layout is set to Dvorak instead of US, this way you can use
|
||||
Standard Dvorak (available by default on all the main operating systems) on other normal keybdoards and Hacker Dvorak on
|
||||
the Ergodox EZ Shine at the same time, without changing back and forth tho OS layout.
|
||||
3. Gaming
|
||||
* Still in development.
|
||||
* Left side is mainly "normal" Qwerty.
|
||||
* Right side is mainly for movement, either using the mouse, the arrow keys, the number pad or the `H`, `J`, `K`, `L` as direction keys.
|
||||
4. Arrows
|
||||
* Arrow keys navigation.
|
||||
* All modifier keys.
|
||||
* Common text edititng shortcuts (doesn't work for MacOS).
|
||||
5. Mouse
|
||||
* Mouse navigation.
|
||||
* All modifier keys.
|
||||
* Common text edititng shortcuts (doesn't work for MacOS).
|
||||
6. Numpad
|
||||
* ATM style numpad.
|
||||
* All modifier keys.
|
||||
* Letters from `A` to `F` for hexadecimal numbers (`B` is also used for binary numeric literals in most programming
|
||||
languages, ie. `0b11001`).
|
||||
* `X` for hexadecimal numeric literals in most programming languages, ie. `0xbeef`.
|
||||
* `O` for octal numeric literals in most programming languages, ie `0o123`.
|
||||
* `J` for complex numeric literals in Python, ie. `3j`.
|
||||
* `I` and `M` for complex Julia numeric literals, ie. `3im`.
|
||||
* Common symbols for mathematical operations.
|
||||
7. Hyper Fn
|
||||
* Useful for custom global shortcuts.
|
||||
8. Media Fn
|
||||
* Media keys.
|
||||
* Function keys.
|
||||
* EZ Shine keys.
|
||||
9. Meh Fn
|
||||
* Useful for custom application shortcuts.
|
||||
10. Meh Fn +
|
||||
* Useful for custom standard shortcuts.
|
||||
|
||||
## To Do
|
||||
|
||||
Add images.
|
||||
|
||||
***
|
||||
|
||||
Please comment below if you have any ideas or suggestions. If you have used this layout or used it as a base, I'd love to hear about your experience!
|
35
keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
Normal file
35
keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
Normal file
@@ -0,0 +1,35 @@
|
||||
# Set any rules.mk overrides for your specific keymap here.
|
||||
# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
TAP_DANCE_ENABLE = yes
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700b).
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450b).
|
||||
SLEEP_LED_ENABLE = yes # Turn off leds when computer is sleeping.
|
||||
KEY_LOCK_ENABLE = yes # (+1730b)
|
||||
RGBLIGHT_ENABLE = yes
|
||||
LEADER_ENABLE = yes
|
||||
|
||||
|
||||
UNICODE_ENABLE = no # For Unicode.
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SWAP_HANDS_ENABLE = no # Allow swapping hands of keyboard.
|
||||
|
||||
|
||||
# This are by default off:
|
||||
# CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
# API_SYSEX_ENABLE = no
|
||||
# MIDI_ENABLE = no
|
||||
# UNICODEMAP_ENABLE = no
|
||||
# BLUETOOTH_ENABLE = no
|
||||
# AUDIO_ENABLE = no
|
||||
# FAUXCLICKY_ENABLE = no
|
||||
# VARIABLE_TRACE = no
|
||||
# BACKLIGHT_ENABLE = no
|
||||
# RGB_MATRIX_ENABLE = no
|
||||
# COMBO_ENABLE = no
|
||||
|
||||
|
||||
# This don't need argument:
|
||||
# CUSTOM_MATRIX # Custom matrix file for the ErgoDox EZ
|
||||
# SPLIT_KEYBOARD
|
1
keyboards/hadron/ver3/keymaps/ishtob/config.h
Normal file
1
keyboards/hadron/ver3/keymaps/ishtob/config.h
Normal file
@@ -0,0 +1 @@
|
||||
#pragma once
|
229
keyboards/hadron/ver3/keymaps/ishtob/keymap.c
Normal file
229
keyboards/hadron/ver3/keymaps/ishtob/keymap.c
Normal file
@@ -0,0 +1,229 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "ishtob.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* Qwerty
|
||||
* ,------+------+------+------+------+------------------------------------------------.
|
||||
* | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DEL |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||
* | Tab | Q | W | E | R | T | 7 | 8 | 9 | Y | U | I | O | P | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | LCTL | A | S | D | F | G | 4 | 5 | 6 | H | J | K | L | ;/Nav|Ctl/Et|
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | 1 | 2 | 3 | N | M | , | . | / | - |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Esc | Ctrl | GUI | Alt |Lower |Space | 0 | . | = |Space |Raise | Alt | NumL | App | Del |
|
||||
* `--------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_QWERTY] = LAYOUT_wrapper(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
||||
KC_TAB, _________________QWERTY_L1_________________, KC_P7, KC_P8, KC_P9, _________________QWERTY_R1_________________, KC_BSPC, \
|
||||
KC_CAPS, _________________QWERTY_L2_________________, KC_P4, KC_P5, KC_P6, _________________QWERTY_R2_________________, CTL_ENT, \
|
||||
KC_LSFT, _________________QWERTY_L3_________________, KC_P1, KC_P2, KC_P3, _________________QWERTY_R3_________________, LT_RAI(KC_MINS), \
|
||||
KC_ESC, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL \
|
||||
),
|
||||
|
||||
/* Colemak
|
||||
* ,------+------+------+------+------+------------------------------------------------.
|
||||
* | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | 0 | - |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||
* | Tab | Q | W | F | P | G | 7 | 8 | 9 | J | L | U | Y | ; | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
|
||||
* | CAPS | A | R | S | T | D | 4 | 5 | 6 | H | N | E | I | O |Ctl/Et|
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Shift| Z | X | C | V | B | 1 | 2 | 3 | K | M | , | . | / | - |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Esc | Ctrl | GUI | Alt |Lower |Space | 0 | . | = |Space |Raise | Alt | NumL | App | Del |
|
||||
* `--------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_COLEMAK] = LAYOUT_wrapper(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
||||
KC_TAB, _________________COLEMAK_L1________________, KC_P7, KC_P8, KC_P9, _________________COLEMAK_R1________________, KC_BSPC, \
|
||||
KC_LCTRL, _________________COLEMAK_L2________________, KC_P4, KC_P5, KC_P6, _________________COLEMAK_R2________________, CTL_ENT, \
|
||||
KC_LSFT, _________________COLEMAK_L3________________, KC_P1, KC_P2, KC_P3, _________________COLEMAK_R3________________, LT_RAI(KC_MINS), \
|
||||
KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL \
|
||||
),
|
||||
|
||||
/* Dvorak
|
||||
* ,------+------+------+------+------+------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||
* | Tab | " | , | . | P | Y | 7 | 8 | 9 | F | G | C | R | L | Bksp |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
|
||||
* | Esc | A | O | E | U | I | 4 | 5 | 6 | D | H | T | N | S | / |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Shift| ; | Q | J | K | X | 1 | 2 | 3 | B | M | W | V | Z |Ctl/Et|
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | Esc | Ctrl | GUI | Alt |Lower |Space | 0 | . | = |Space |Raise | Alt | NumL | App | Del |
|
||||
* `--------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_DVORAK] = LAYOUT_wrapper(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
|
||||
KC_TAB, _________________DVORAK_L1_________________, KC_P7, KC_P8, KC_P9, _________________DVORAK_R1_________________, KC_BSPC, \
|
||||
KC_LCTL, _________________DVORAK_L2_________________, KC_P4, KC_P5, KC_P6, _________________DVORAK_R2_________________, CTL_ENT, \
|
||||
KC_LSFT, _________________DVORAK_L3_________________, KC_P1, KC_P2, KC_P3, _________________DVORAK_R3_________________, LT_RAI(KC_MINS), \
|
||||
KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL \
|
||||
),
|
||||
|
||||
/* Lower
|
||||
* ,------+------+------+------+------+------------------------------------------------.
|
||||
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||
* | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
|
||||
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | _ | + | { | } | | |
|
||||
* |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `--------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_LOWER] = LAYOUT_wrapper(
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE, \
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12,S(KC_NUHS),S(KC_NUBS),_______,_______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
/* Raise
|
||||
* ,------+------+------+------+------+------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Del |
|
||||
* |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
|
||||
* | Del | F1 | F2 | F3 | F4 | F5 | | | | F6 | - | = | [ | ] | \ |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO # |ISO / | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* `--------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_RAISE] = LAYOUT_wrapper(
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
|
||||
),
|
||||
|
||||
/* Mouse Layer (semi-col)
|
||||
* ,------+------+------+------+------+------------------------------------------------.
|
||||
* | ACCL0| ACCL1| ACCL2| | | | | | | | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||
* | | | | | | | | | Home | Wh_Up| WHL_L| M_Up | WHL_R| Macro| |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | End | Wh_Dn| M_Lft| M_Dn | M_Rt | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | BTN2 | BTN3 | BTN4 | BTN5 | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | BTN1 | | | | BTN1 | | | | | |
|
||||
* `--------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_MOUSECURSOR] = LAYOUT_wrapper(
|
||||
KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, M_EMAIL,M_EMAIL2, _______, _______, _______, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R, P_MPASS, P_META, \
|
||||
_______, _______, _______, _______, O_RTQ6H, _______, _______, _______, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, O_DAYRN, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, \
|
||||
_______, _______, _______, _______, _______, KC_BTN1, _______, _______, _______, KC_BTN1, _______, _______, _______, P_CITRIX, O_AUTODC \
|
||||
),
|
||||
|
||||
/* Adjust (Lower + Raise)
|
||||
* ,------+------+------+------+------+------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
|
||||
* | Reset|RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | | | | Del |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | |Aud on|Audoff|AGnorm| | | |AGswap|Qwerty|Colemk| | | |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | |Voice-|Voice+|Mus on|Musoff| | | | | | | | BL + |BL ST |BL TG |
|
||||
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* `--------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
[_ADJUST] = LAYOUT_wrapper(
|
||||
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
|
||||
RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, KC_DEL, \
|
||||
_______, MAGIC_TOGGLE_NKRO, _______, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______, \
|
||||
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_RST, CK_DOWN, CK_UP, CK_TOGG\
|
||||
)
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
|
||||
|
||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case QWERTY:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_QWERTY);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case COLEMAK:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_COLEMAK);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case LOWER:
|
||||
if (record->event.pressed) {
|
||||
//not sure how to have keyboard check mode and set it to a variable, so my work around
|
||||
//uses another variable that would be set to true after the first time a reactive key is pressed.
|
||||
layer_on(_LOWER);
|
||||
} else {
|
||||
layer_off(_LOWER);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case RAISE:
|
||||
if (record->event.pressed) {
|
||||
//not sure how to have keyboard check mode and set it to a variable, so my work around
|
||||
//uses another variable that would be set to true after the first time a reactive key is pressed.
|
||||
layer_on(_RAISE);
|
||||
} else {
|
||||
layer_off(_RAISE);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case BACKLIT:
|
||||
if (record->event.pressed) {
|
||||
register_code(KC_RSFT);
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
backlight_step();
|
||||
#endif
|
||||
} else {
|
||||
unregister_code(KC_RSFT);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool music_mask_user(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
case RAISE:
|
||||
case LOWER:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void matrix_init_keymap(void) {
|
||||
}
|
||||
|
||||
|
||||
void matrix_scan_keymap(void) {
|
||||
}
|
||||
|
2
keyboards/hadron/ver3/keymaps/ishtob/readme.md
Normal file
2
keyboards/hadron/ver3/keymaps/ishtob/readme.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# The Default Hadron Layout
|
||||
|
@@ -1 +0,0 @@
|
||||
#include "MS_sculpt_mobile.h"
|
@@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_USER_H
|
||||
#define CONFIG_USER_H
|
||||
|
||||
#include "../../../MS_sculpt_mobile/config.h"
|
||||
|
||||
// place overrides here
|
||||
|
||||
#endif
|
@@ -1 +0,0 @@
|
||||
# The default keymap for microsoft-sculpt-mobile
|
@@ -1 +0,0 @@
|
||||
# A more programmer oriented keymap for microsoft-sculpt-mobile
|
@@ -1,58 +0,0 @@
|
||||
|
||||
This is a way to take a Microsoft ergonomic bluetooth keyboard, and make it
|
||||
into a hard-wired keyboard running QMK.
|
||||
|
||||
The keyboard is known under several different names:
|
||||
Mobile Bluetooth 5000, Mobile 6000, Sculpt mobile, and Asus rebranded
|
||||
|
||||
I had a stack of them,since they're cheap on ebay, travel well, and are just ergo enough.
|
||||
|
||||
The ribbon cable is 1mm pitch, which is hard to hand solder. I bought a cheap set of
|
||||
"pitch adapter" boards https://www.amazon.com/Double-Sided-0-4mm-1-0-Adapter-60mmx38mm/dp/B00OK42118
|
||||
|
||||
Cut the original ribbon cable sockets off the bluetooth board using a razor, they're hard to desolder.
|
||||
They're also allow the cable to be inserted on top or bottom.
|
||||
|
||||
If I was going to do it again, I'd make the MCU connection come out the top of the keyboard
|
||||
and avoid the wires dangling out the bottom.
|
||||
|
||||
As I was debugging the matrix, I started to get random failures. In desparation I tried a second MCU,
|
||||
but had the same problems. It turns out that the ribbon cable connections can get worn. Shave a
|
||||
half millimeter off the end of the ribbon cable & the errors go away.
|
||||
|
||||
My method for discovering the matrix was to set up a KEYMAP macro that included all pins.
|
||||
See MATRIX_TESTING_KEYMAP if you need it. Then set up a keymap that has all printable symbols
|
||||
in the first 4 rows. test each key & record output. Then switch the printable symbols to the
|
||||
bottom 4 rows & repeat. This was enough to show the matrix.
|
||||
|
||||
|
||||
The full original keymap for the sculpt is
|
||||
A B C D E F G H --->
|
||||
0 b n m , . /
|
||||
1 g h "
|
||||
2 7 8 9 0 Del PgUp
|
||||
3 p [ ] \
|
||||
4 y u i o
|
||||
5 ~ - += j k l ; 5
|
||||
6 a s d q w e, Up left
|
||||
7 F7 F8 F9 F10 F11 F12 f
|
||||
|
||||
-----> I J K L M N O P Q R
|
||||
0 Caps FN
|
||||
1 Vol+ mute Rctl vol- pgdn LCTL
|
||||
2 Rshift LShift
|
||||
3 Ralt LAlt
|
||||
4 LGUI
|
||||
5 6 bakspc 1 2 3 4 F4 F5 F6
|
||||
6 Down right spc F1 F2 F3 tab
|
||||
7 r t z x c v enter Esc
|
||||
|
||||
This works with 18 cols + 8 rows on a Teensy++, or Arm based Teensy.
|
||||
|
||||
The Astar mini has all pins exposed , so you can do 18x8
|
||||
If you want a speaker, LEDs &etc, you'll need to free up a pin. I recommend joining columns
|
||||
R and L to the same pin.
|
||||
|
||||
Building - add ASTAR=1 to the compile line or leave out for teensy2++
|
||||
|
||||
|
59
keyboards/handwired/dactyl_manuform/4x5/info.json
Normal file
59
keyboards/handwired/dactyl_manuform/4x5/info.json
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"keyboard_name": "Dactyl Manuform 4x5",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 15,
|
||||
"height": 7,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"R00", "x":10, "y":0},
|
||||
{"label":"R01", "x":11, "y":0},
|
||||
{"label":"R02", "x":12, "y":0},
|
||||
{"label":"R03", "x":13, "y":0},
|
||||
{"label":"R04", "x":14, "y":0},
|
||||
{"label":"L10", "x":0, "y":1},
|
||||
{"label":"L11", "x":1, "y":1},
|
||||
{"label":"L12", "x":2, "y":1},
|
||||
{"label":"L13", "x":3, "y":1},
|
||||
{"label":"L14", "x":4, "y":1},
|
||||
{"label":"R10", "x":10, "y":1},
|
||||
{"label":"R11", "x":11, "y":1},
|
||||
{"label":"R12", "x":12, "y":1},
|
||||
{"label":"R13", "x":13, "y":1},
|
||||
{"label":"R14", "x":14, "y":1},
|
||||
{"label":"L20", "x":0, "y":2},
|
||||
{"label":"L21", "x":1, "y":2},
|
||||
{"label":"L22", "x":2, "y":2},
|
||||
{"label":"L23", "x":3, "y":2},
|
||||
{"label":"L24", "x":4, "y":2},
|
||||
{"label":"R20", "x":10, "y":2},
|
||||
{"label":"R21", "x":11, "y":2},
|
||||
{"label":"R22", "x":12, "y":2},
|
||||
{"label":"R23", "x":13, "y":2},
|
||||
{"label":"R24", "x":14, "y":2},
|
||||
{"label":"L31", "x":1, "y":3},
|
||||
{"label":"L32", "x":2, "y":3},
|
||||
{"label":"R32", "x":12, "y":3},
|
||||
{"label":"R33", "x":13, "y":3},
|
||||
{"label":"L33", "x":3, "y":4},
|
||||
{"label":"L34", "x":4, "y":4},
|
||||
{"label":"R30", "x":10, "y":4},
|
||||
{"label":"R31", "x":11, "y":4},
|
||||
{"label":"L44", "x":5, "y":5},
|
||||
{"label":"L43", "x":6, "y":5},
|
||||
{"label":"R41", "x":8, "y":5},
|
||||
{"label":"R40", "x":9, "y":5},
|
||||
{"label":"L42", "x":5, "y":6},
|
||||
{"label":"L41", "x":6, "y":6},
|
||||
{"label":"R43", "x":8, "y":6},
|
||||
{"label":"R42", "x":9, "y":6}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
65
keyboards/handwired/dactyl_manuform/4x6/info.json
Normal file
65
keyboards/handwired/dactyl_manuform/4x6/info.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"keyboard_name": "Dactyl Manuform 4x6",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 17,
|
||||
"height": 7,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"R00", "x":11, "y":0},
|
||||
{"label":"R01", "x":12, "y":0},
|
||||
{"label":"R02", "x":13, "y":0},
|
||||
{"label":"R03", "x":14, "y":0},
|
||||
{"label":"R04", "x":15, "y":0},
|
||||
{"label":"R05", "x":16, "y":0},
|
||||
{"label":"L10", "x":0, "y":1},
|
||||
{"label":"L11", "x":1, "y":1},
|
||||
{"label":"L12", "x":2, "y":1},
|
||||
{"label":"L13", "x":3, "y":1},
|
||||
{"label":"L14", "x":4, "y":1},
|
||||
{"label":"L15", "x":5, "y":1},
|
||||
{"label":"R10", "x":11, "y":1},
|
||||
{"label":"R11", "x":12, "y":1},
|
||||
{"label":"R12", "x":13, "y":1},
|
||||
{"label":"R13", "x":14, "y":1},
|
||||
{"label":"R14", "x":15, "y":1},
|
||||
{"label":"R15", "x":16, "y":1},
|
||||
{"label":"L20", "x":0, "y":2},
|
||||
{"label":"L21", "x":1, "y":2},
|
||||
{"label":"L22", "x":2, "y":2},
|
||||
{"label":"L23", "x":3, "y":2},
|
||||
{"label":"L24", "x":4, "y":2},
|
||||
{"label":"L25", "x":5, "y":2},
|
||||
{"label":"R20", "x":11, "y":2},
|
||||
{"label":"R21", "x":12, "y":2},
|
||||
{"label":"R22", "x":13, "y":2},
|
||||
{"label":"R23", "x":14, "y":2},
|
||||
{"label":"R24", "x":15, "y":2},
|
||||
{"label":"R25", "x":16, "y":2},
|
||||
{"label":"L32", "x":2, "y":3},
|
||||
{"label":"L33", "x":3, "y":3},
|
||||
{"label":"R32", "x":13, "y":3},
|
||||
{"label":"R33", "x":14, "y":3},
|
||||
{"label":"L34", "x":4, "y":4},
|
||||
{"label":"L35", "x":5, "y":4},
|
||||
{"label":"R30", "x":11, "y":4},
|
||||
{"label":"R31", "x":12, "y":4},
|
||||
{"label":"L44", "x":6, "y":5},
|
||||
{"label":"L45", "x":7, "y":5},
|
||||
{"label":"R40", "x":9, "y":5},
|
||||
{"label":"R41", "x":10, "y":5},
|
||||
{"label":"L42", "x":6, "y":6},
|
||||
{"label":"L43", "x":7, "y":6},
|
||||
{"label":"R42", "x":9, "y":6},
|
||||
{"label":"R43", "x":10, "y":6}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
77
keyboards/handwired/dactyl_manuform/5x6/info.json
Normal file
77
keyboards/handwired/dactyl_manuform/5x6/info.json
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"keyboard_name": "Dactyl Manuform 5x6",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 17,
|
||||
"height": 8,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"R00", "x":11, "y":0},
|
||||
{"label":"R01", "x":12, "y":0},
|
||||
{"label":"R02", "x":13, "y":0},
|
||||
{"label":"R03", "x":14, "y":0},
|
||||
{"label":"R04", "x":15, "y":0},
|
||||
{"label":"R05", "x":16, "y":0},
|
||||
{"label":"L10", "x":0, "y":1},
|
||||
{"label":"L11", "x":1, "y":1},
|
||||
{"label":"L12", "x":2, "y":1},
|
||||
{"label":"L13", "x":3, "y":1},
|
||||
{"label":"L14", "x":4, "y":1},
|
||||
{"label":"L15", "x":5, "y":1},
|
||||
{"label":"R10", "x":11, "y":1},
|
||||
{"label":"R11", "x":12, "y":1},
|
||||
{"label":"R12", "x":13, "y":1},
|
||||
{"label":"R13", "x":14, "y":1},
|
||||
{"label":"R14", "x":15, "y":1},
|
||||
{"label":"R15", "x":16, "y":1},
|
||||
{"label":"L20", "x":0, "y":2},
|
||||
{"label":"L21", "x":1, "y":2},
|
||||
{"label":"L22", "x":2, "y":2},
|
||||
{"label":"L23", "x":3, "y":2},
|
||||
{"label":"L24", "x":4, "y":2},
|
||||
{"label":"L25", "x":5, "y":2},
|
||||
{"label":"R20", "x":11, "y":2},
|
||||
{"label":"R21", "x":12, "y":2},
|
||||
{"label":"R22", "x":13, "y":2},
|
||||
{"label":"R23", "x":14, "y":2},
|
||||
{"label":"R24", "x":15, "y":2},
|
||||
{"label":"R25", "x":16, "y":2},
|
||||
{"label":"L30", "x":0, "y":3},
|
||||
{"label":"L31", "x":1, "y":3},
|
||||
{"label":"L32", "x":2, "y":3},
|
||||
{"label":"L33", "x":3, "y":3},
|
||||
{"label":"L34", "x":4, "y":3},
|
||||
{"label":"L35", "x":5, "y":3},
|
||||
{"label":"R30", "x":11, "y":3},
|
||||
{"label":"R31", "x":12, "y":3},
|
||||
{"label":"R32", "x":13, "y":3},
|
||||
{"label":"R33", "x":14, "y":3},
|
||||
{"label":"R34", "x":15, "y":3},
|
||||
{"label":"R35", "x":16, "y":3},
|
||||
{"label":"L42", "x":2, "y":4},
|
||||
{"label":"L43", "x":3, "y":4},
|
||||
{"label":"R42", "x":13, "y":4},
|
||||
{"label":"R43", "x":14, "y":4},
|
||||
{"label":"L44", "x":4, "y":5},
|
||||
{"label":"L45", "x":5, "y":5},
|
||||
{"label":"R40", "x":11, "y":5},
|
||||
{"label":"R41", "x":12, "y":5},
|
||||
{"label":"L54", "x":6, "y":6},
|
||||
{"label":"L55", "x":7, "y":6},
|
||||
{"label":"R50", "x":9, "y":6},
|
||||
{"label":"R51", "x":10, "y":6},
|
||||
{"label":"L52", "x":6, "y":7},
|
||||
{"label":"L53", "x":7, "y":7},
|
||||
{"label":"R52", "x":9, "y":7},
|
||||
{"label":"R53", "x":10, "y":7}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
87
keyboards/handwired/dactyl_manuform/5x7/info.json
Normal file
87
keyboards/handwired/dactyl_manuform/5x7/info.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"keyboard_name": "Dactyl Manuform 5x7",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 17,
|
||||
"height": 16,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"L11", "x":0, "y":0},
|
||||
{"label":"L12", "x":1, "y":0},
|
||||
{"label":"L13", "x":2, "y":0},
|
||||
{"label":"L14", "x":3, "y":0},
|
||||
{"label":"L15", "x":4, "y":0},
|
||||
{"label":"L16", "x":5, "y":0},
|
||||
{"label":"L17", "x":6, "y":0},
|
||||
{"label":"L21", "x":0, "y":1},
|
||||
{"label":"L22", "x":1, "y":1},
|
||||
{"label":"L23", "x":2, "y":1},
|
||||
{"label":"L24", "x":3, "y":1},
|
||||
{"label":"L25", "x":4, "y":1},
|
||||
{"label":"L26", "x":5, "y":1},
|
||||
{"label":"L27", "x":6, "y":1},
|
||||
{"label":"L31", "x":0, "y":2},
|
||||
{"label":"L32", "x":1, "y":2},
|
||||
{"label":"L33", "x":2, "y":2},
|
||||
{"label":"L34", "x":3, "y":2},
|
||||
{"label":"L35", "x":4, "y":2},
|
||||
{"label":"L36", "x":5, "y":2},
|
||||
{"label":"L37", "x":6, "y":2},
|
||||
{"label":"L41", "x":0, "y":3},
|
||||
{"label":"L42", "x":1, "y":3},
|
||||
{"label":"L43", "x":2, "y":3},
|
||||
{"label":"L44", "x":3, "y":3},
|
||||
{"label":"L45", "x":4, "y":3},
|
||||
{"label":"L46", "x":5, "y":3},
|
||||
{"label":"L51", "x":0, "y":4},
|
||||
{"label":"L52", "x":1, "y":4},
|
||||
{"label":"L53", "x":2, "y":4},
|
||||
{"label":"L54", "x":3, "y":4},
|
||||
{"label":"L55", "x":4, "y":5},
|
||||
{"label":"L56", "x":5, "y":5},
|
||||
{"label":"L65", "x":6, "y":6},
|
||||
{"label":"L66", "x":7, "y":6},
|
||||
{"label":"L63", "x":6, "y":7},
|
||||
{"label":"L64", "x":7, "y":7},
|
||||
{"label":"R11", "x":10, "y":0},
|
||||
{"label":"R12", "x":11, "y":0},
|
||||
{"label":"R13", "x":12, "y":0},
|
||||
{"label":"R14", "x":13, "y":0},
|
||||
{"label":"R15", "x":14, "y":0},
|
||||
{"label":"R16", "x":15, "y":0},
|
||||
{"label":"R17", "x":16, "y":0},
|
||||
{"label":"R21", "x":10, "y":1},
|
||||
{"label":"R22", "x":11, "y":1},
|
||||
{"label":"R23", "x":12, "y":1},
|
||||
{"label":"R24", "x":13, "y":1},
|
||||
{"label":"R25", "x":14, "y":1},
|
||||
{"label":"R26", "x":15, "y":1},
|
||||
{"label":"R27", "x":16, "y":1},
|
||||
{"label":"R31", "x":10, "y":2},
|
||||
{"label":"R32", "x":11, "y":2},
|
||||
{"label":"R33", "x":12, "y":2},
|
||||
{"label":"R34", "x":13, "y":2},
|
||||
{"label":"R35", "x":14, "y":2},
|
||||
{"label":"R36", "x":15, "y":2},
|
||||
{"label":"R37", "x":16, "y":2},
|
||||
{"label":"R42", "x":11, "y":3},
|
||||
{"label":"R43", "x":12, "y":3},
|
||||
{"label":"R44", "x":13, "y":3},
|
||||
{"label":"R45", "x":14, "y":3},
|
||||
{"label":"R46", "x":15, "y":3},
|
||||
{"label":"R47", "x":16, "y":3},
|
||||
{"label":"R54", "x":13, "y":4},
|
||||
{"label":"R55", "x":14, "y":4},
|
||||
{"label":"R56", "x":15, "y":4},
|
||||
{"label":"R57", "x":16, "y":4},
|
||||
{"label":"R52", "x":11, "y":5},
|
||||
{"label":"R53", "x":12, "y":5},
|
||||
{"label":"R62", "x":9, "y":6},
|
||||
{"label":"R63", "x":10, "y":6},
|
||||
{"label":"R64", "x":9, "y":7},
|
||||
{"label":"R65", "x":10, "y":7}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
89
keyboards/handwired/dactyl_manuform/6x6/info.json
Normal file
89
keyboards/handwired/dactyl_manuform/6x6/info.json
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"keyboard_name": "Dactyl Manuform 6x6",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 17,
|
||||
"height": 9,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"L00", "x":0, "y":0},
|
||||
{"label":"L01", "x":1, "y":0},
|
||||
{"label":"L02", "x":2, "y":0},
|
||||
{"label":"L03", "x":3, "y":0},
|
||||
{"label":"L04", "x":4, "y":0},
|
||||
{"label":"L05", "x":5, "y":0},
|
||||
{"label":"R00", "x":11, "y":0},
|
||||
{"label":"R01", "x":12, "y":0},
|
||||
{"label":"R02", "x":13, "y":0},
|
||||
{"label":"R03", "x":14, "y":0},
|
||||
{"label":"R04", "x":15, "y":0},
|
||||
{"label":"R05", "x":16, "y":0},
|
||||
{"label":"L10", "x":0, "y":1},
|
||||
{"label":"L11", "x":1, "y":1},
|
||||
{"label":"L12", "x":2, "y":1},
|
||||
{"label":"L13", "x":3, "y":1},
|
||||
{"label":"L14", "x":4, "y":1},
|
||||
{"label":"L15", "x":5, "y":1},
|
||||
{"label":"R10", "x":11, "y":1},
|
||||
{"label":"R11", "x":12, "y":1},
|
||||
{"label":"R12", "x":13, "y":1},
|
||||
{"label":"R13", "x":14, "y":1},
|
||||
{"label":"R14", "x":15, "y":1},
|
||||
{"label":"R15", "x":16, "y":1},
|
||||
{"label":"L20", "x":0, "y":2},
|
||||
{"label":"L21", "x":1, "y":2},
|
||||
{"label":"L22", "x":2, "y":2},
|
||||
{"label":"L23", "x":3, "y":2},
|
||||
{"label":"L24", "x":4, "y":2},
|
||||
{"label":"L25", "x":5, "y":2},
|
||||
{"label":"R20", "x":11, "y":2},
|
||||
{"label":"R21", "x":12, "y":2},
|
||||
{"label":"R22", "x":13, "y":2},
|
||||
{"label":"R23", "x":14, "y":2},
|
||||
{"label":"R24", "x":15, "y":2},
|
||||
{"label":"R25", "x":16, "y":2},
|
||||
{"label":"L30", "x":0, "y":3},
|
||||
{"label":"L31", "x":1, "y":3},
|
||||
{"label":"L32", "x":2, "y":3},
|
||||
{"label":"L33", "x":3, "y":3},
|
||||
{"label":"L34", "x":4, "y":3},
|
||||
{"label":"L35", "x":5, "y":3},
|
||||
{"label":"R30", "x":11, "y":3},
|
||||
{"label":"R31", "x":12, "y":3},
|
||||
{"label":"R32", "x":13, "y":3},
|
||||
{"label":"R33", "x":14, "y":3},
|
||||
{"label":"R34", "x":15, "y":3},
|
||||
{"label":"R35", "x":16, "y":3},
|
||||
{"label":"L40", "x":0, "y":4},
|
||||
{"label":"L41", "x":1, "y":4},
|
||||
{"label":"L42", "x":2, "y":4},
|
||||
{"label":"L43", "x":3, "y":4},
|
||||
{"label":"L44", "x":4, "y":4},
|
||||
{"label":"L45", "x":5, "y":4},
|
||||
{"label":"R40", "x":11, "y":4},
|
||||
{"label":"R41", "x":12, "y":4},
|
||||
{"label":"R42", "x":13, "y":4},
|
||||
{"label":"R43", "x":14, "y":4},
|
||||
{"label":"R44", "x":15, "y":4},
|
||||
{"label":"R45", "x":16, "y":4},
|
||||
{"label":"L52", "x":2, "y":5},
|
||||
{"label":"L53", "x":3, "y":5},
|
||||
{"label":"R52", "x":13, "y":5},
|
||||
{"label":"R53", "x":14, "y":5},
|
||||
{"label":"L54", "x":4, "y":6},
|
||||
{"label":"L55", "x":5, "y":6},
|
||||
{"label":"R50", "x":11, "y":6},
|
||||
{"label":"R51", "x":12, "y":6},
|
||||
{"label":"L64", "x":6, "y":7},
|
||||
{"label":"L65", "x":7, "y":7},
|
||||
{"label":"R60", "x":9, "y":7},
|
||||
{"label":"R61", "x":10, "y":7},
|
||||
{"label":"L62", "x":6, "y":8},
|
||||
{"label":"L63", "x":7, "y":8},
|
||||
{"label":"R62", "x":9, "y":8},
|
||||
{"label":"R63", "x":10, "y":8}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,28 +0,0 @@
|
||||
fivethirteen keyboard firmware
|
||||
======================
|
||||
|
||||
## Quantum MK Firmware
|
||||
|
||||
For the full Quantum feature list, see [the parent readme.md](/doc/README.md).
|
||||
|
||||
## Building
|
||||
|
||||
Download or clone the whole firmware and navigate to the keyboards/handwired/fivethirteen folder.
|
||||
Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
|
||||
the Teensy Loader to program your .hex file.
|
||||
|
||||
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||
|
||||
### Default
|
||||
|
||||
To build with the default keymap, simply run `make`.
|
||||
|
||||
### Other Keymaps
|
||||
|
||||
To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
|
||||
|
||||
```
|
||||
$ make keymap=[default|jack|<name>]
|
||||
```
|
||||
|
||||
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
|
@@ -3,19 +3,19 @@
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define KEYMAP( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, \
|
||||
k40, k41, k42, k43, k44, k46, k47, k48, k49, k410, k411, k412 \
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, \
|
||||
k40, k41, k42, k43, k44, k46, k47, k48, k49, k410, k411, k412 \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012 }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112 }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212 }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 }, \
|
||||
{ k40, k41, k42, k43, k44, KC_NO, k46, k47, k48, k49, k410, k411, k412 } \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012 }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112 }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212 }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 }, \
|
||||
{ k40, k41, k42, k43, k44, KC_NO, k46, k47, k48, k49, k410, k411, k412 } \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
77
keyboards/handwired/fivethirteen/info.json
Normal file
77
keyboards/handwired/fivethirteen/info.json
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"keyboard_name": "fivethirteen",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 13,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"Esc", "x":0, "y":0},
|
||||
{"label":"1", "x":1, "y":0},
|
||||
{"label":"2", "x":2, "y":0},
|
||||
{"label":"3", "x":3, "y":0},
|
||||
{"label":"4", "x":4, "y":0},
|
||||
{"label":"5", "x":5, "y":0},
|
||||
{"label":"6", "x":6, "y":0},
|
||||
{"label":"7", "x":7, "y":0},
|
||||
{"label":"8", "x":8, "y":0},
|
||||
{"label":"9", "x":9, "y":0},
|
||||
{"label":"0", "x":10, "y":0},
|
||||
{"label":"-", "x":11, "y":0},
|
||||
{"label":"=", "x":12, "y":0},
|
||||
{"label":"Tab", "x":0, "y":1},
|
||||
{"label":"Q", "x":1, "y":1},
|
||||
{"label":"W", "x":2, "y":1},
|
||||
{"label":"E", "x":3, "y":1},
|
||||
{"label":"R", "x":4, "y":1},
|
||||
{"label":"T", "x":5, "y":1},
|
||||
{"label":"Y", "x":6, "y":1},
|
||||
{"label":"U", "x":7, "y":1},
|
||||
{"label":"I", "x":8, "y":1},
|
||||
{"label":"O", "x":9, "y":1},
|
||||
{"label":"P", "x":10, "y":1},
|
||||
{"label":"[", "x":11, "y":1},
|
||||
{"label":"]", "x":12, "y":1},
|
||||
{"label":"Ctrl/Esc", "x":0, "y":2},
|
||||
{"label":"A", "x":1, "y":2},
|
||||
{"label":"S", "x":2, "y":2},
|
||||
{"label":"D", "x":3, "y":2},
|
||||
{"label":"F", "x":4, "y":2},
|
||||
{"label":"G", "x":5, "y":2},
|
||||
{"label":"H", "x":6, "y":2},
|
||||
{"label":"J", "x":7, "y":2},
|
||||
{"label":"K", "x":8, "y":2},
|
||||
{"label":"L", "x":9, "y":2},
|
||||
{"label":";", "x":10, "y":2},
|
||||
{"label":"'", "x":11, "y":2},
|
||||
{"label":"Enter", "x":12, "y":2},
|
||||
{"label":"Shift", "x":0, "y":3},
|
||||
{"label":"Z", "x":1, "y":3},
|
||||
{"label":"X", "x":2, "y":3},
|
||||
{"label":"C", "x":3, "y":3},
|
||||
{"label":"V", "x":4, "y":3},
|
||||
{"label":"B", "x":5, "y":3},
|
||||
{"label":"N", "x":6, "y":3},
|
||||
{"label":"M", "x":7, "y":3},
|
||||
{"label":",", "x":8, "y":3},
|
||||
{"label":".", "x":9, "y":3},
|
||||
{"label":"/", "x":10, "y":3},
|
||||
{"label":"Up", "x":11, "y":3},
|
||||
{"label":"\\", "x":12, "y":3},
|
||||
{"label":"MO(MOS)", "x":0, "y":4},
|
||||
{"label":"Ctrl", "x":1, "y":4},
|
||||
{"label":"Alt", "x":2, "y":4},
|
||||
{"label":"GUI", "x":3, "y":4},
|
||||
{"label":"MO(HDN)", "x":4, "y":4},
|
||||
{"label":"Space", "x":5, "y":4, "w":2},
|
||||
{"label":"Shift/Backspace", "x":7, "y":4},
|
||||
{"label":"MO(OSY)", "x":8, "y":4},
|
||||
{"label":"MO(HDN)", "x":9, "y":4},
|
||||
{"label":"Left", "x":10, "y":4},
|
||||
{"label":"Down", "x":11, "y":4},
|
||||
{"label":"Right", "x":12, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,6 +1,4 @@
|
||||
#include "fivethirteen.h"
|
||||
|
||||
#define _______ KC_TRNS
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#define HDN 1
|
||||
#define OSY 2
|
||||
@@ -9,28 +7,28 @@
|
||||
#define SFT_BSP SFT_T(KC_BSPC)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = KEYMAP(
|
||||
[0] = 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_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, \
|
||||
CTL_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_BSLS, \
|
||||
MO(MOS), KC_LCTL, KC_LALT, KC_LGUI, MO(HDN), KC_SPC , SFT_BSP, MO(OSY), MO(HDN), KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
[HDN] = KEYMAP(
|
||||
[HDN] = LAYOUT(
|
||||
_______, 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, \
|
||||
_______, KC_TILD, KC_GRV, KC_BSLS, KC_PIPE, KC_MINS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TILD, KC_GRV, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, KC_PGUP, _______, \
|
||||
_______, _______, _______, _______, _______, KC_UNDS , KC_DEL, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
),
|
||||
[OSY] = KEYMAP(
|
||||
[OSY] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
[MOS] = KEYMAP(
|
||||
[MOS] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, \
|
||||
@@ -38,12 +36,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
12
keyboards/handwired/fivethirteen/readme.md
Normal file
12
keyboards/handwired/fivethirteen/readme.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# fivethirteen
|
||||
|
||||
A handwired 5x13 ortholinear keyboard with a 2U space bar.
|
||||
|
||||
Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
|
||||
Hardware Supported: fivethirteen handwired
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make handwired/fivethirteen: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).
|
@@ -77,7 +77,7 @@ inline void frenchdev_led_all_set(uint8_t n)
|
||||
frenchdev_led_3_set(n);
|
||||
}
|
||||
|
||||
#define KEYMAP( \
|
||||
#define LAYOUT( \
|
||||
\
|
||||
k01, k02, k03, k04, k05, k06, k09, k0a, k0b, k0c, k0d, k0e, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
|
||||
|
114
keyboards/handwired/frenchdev/info.json
Normal file
114
keyboards/handwired/frenchdev/info.json
Normal file
@@ -0,0 +1,114 @@
|
||||
{
|
||||
"keyboard_name": "",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"bootloader": "",
|
||||
"width": 20,
|
||||
"height": 8,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"F1", "x":1, "y":0.9},
|
||||
{"label":"F2", "x":2, "y":0.3},
|
||||
{"label":"F3", "x":3, "y":0},
|
||||
{"label":"F4", "x":4, "y":0.4},
|
||||
{"label":"F5", "x":5, "y":0.5},
|
||||
{"label":"F6", "x":6, "y":0.5},
|
||||
{"label":"F7", "x":13, "y":0.5},
|
||||
{"label":"F8", "x":14, "y":0.5},
|
||||
{"label":"F9", "x":15, "y":0.4},
|
||||
{"label":"F10", "x":16, "y":0},
|
||||
{"label":"F11", "x":17, "y":0.3},
|
||||
{"label":"F12", "x":18, "y":0.9},
|
||||
|
||||
{"label":"Esc", "x":0, "y":1.9},
|
||||
{"label":"\"", "x":1, "y":1.9},
|
||||
{"label":"\u00ab", "x":2, "y":1.3},
|
||||
{"label":"\u00bb", "x":3, "y":1},
|
||||
{"label":"(", "x":4, "y":1.4},
|
||||
{"label":")", "x":5, "y":1.5},
|
||||
{"label":"\u00a8", "x":6, "y":1.5},
|
||||
{"label":"^", "x":13, "y":1.5},
|
||||
{"label":"@", "x":14, "y":1.5},
|
||||
{"label":"+", "x":15, "y":1.4},
|
||||
{"label":"-", "x":16, "y":1},
|
||||
{"label":"/", "x":17, "y":1.3},
|
||||
{"label":"*", "x":18, "y":1.9},
|
||||
{"label":"Backspace", "x":19, "y":1.9},
|
||||
|
||||
{"label":"Tab", "x":0, "y":2.9},
|
||||
{"label":"B", "x":1, "y":2.9},
|
||||
{"label":"É", "x":2, "y":2.3},
|
||||
{"label":"P", "x":3, "y":2},
|
||||
{"label":"O", "x":4, "y":2.4},
|
||||
{"label":"È", "x":5, "y":2.5},
|
||||
{"label":"_", "x":6, "y":2.5},
|
||||
{"label":"=", "x":13, "y":2.5},
|
||||
{"label":"K", "x":14, "y":2.5},
|
||||
{"label":"V", "x":15, "y":2.4},
|
||||
{"label":"D", "x":16, "y":2},
|
||||
{"label":"L", "x":17, "y":2.3},
|
||||
{"label":"J", "x":18, "y":2.9},
|
||||
{"label":"Enter", "x":19, "y":2.9},
|
||||
|
||||
{"label":"`", "x":0, "y":3.9},
|
||||
{"label":"A", "x":1, "y":3.9},
|
||||
{"label":"U", "x":2, "y":3.3},
|
||||
{"label":"E", "x":3, "y":3},
|
||||
{"label":"I", "x":4, "y":3.4},
|
||||
{"label":"F", "x":5, "y":3.5},
|
||||
{"label":";", "x":6, "y":3.5},
|
||||
{"label":"!", "x":13, "y":3.5},
|
||||
{"label":"C", "x":14, "y":3.5},
|
||||
{"label":"T", "x":15, "y":3.4},
|
||||
{"label":"S", "x":16, "y":3},
|
||||
{"label":"R", "x":17, "y":3.3},
|
||||
{"label":"N", "x":18, "y":3.9},
|
||||
{"label":"'", "x":19, "y":3.9},
|
||||
|
||||
{"label":"Shift", "x":0, "y":4.9},
|
||||
{"label":"Z", "x":1, "y":4.9},
|
||||
{"label":"À", "x":2, "y":4.3},
|
||||
{"label":"Y", "x":3, "y":4},
|
||||
{"label":"X", "x":4, "y":4.4},
|
||||
{"label":"]", "x":5, "y":4.5},
|
||||
{"label":"Shift/Space", "x":6.5, "y":5},
|
||||
{"label":"Ctrl/Backspace", "x":7.5, "y":5},
|
||||
{"label":"Layer 2/Insert", "x":8.5, "y":5},
|
||||
{"label":"Layer 2 Lock", "x":10.5, "y":5},
|
||||
{"label":"Ctrl/Delete", "x":11.5, "y":5},
|
||||
{"label":"Shift/Space", "x":12.5, "y":5},
|
||||
{"label":"M", "x":14, "y":4.5},
|
||||
{"label":"G", "x":15, "y":4.4},
|
||||
{"label":"Up", "x":16, "y":4},
|
||||
{"label":"H", "x":17, "y":4.3},
|
||||
{"label":"Q", "x":18, "y":4.9},
|
||||
{"label":"Shift", "x":19, "y":4.9},
|
||||
|
||||
{"label":"Ctrl", "x":0, "y":5.9},
|
||||
{"label":"GUI", "x":1, "y":5.9},
|
||||
{"label":"Keypad /", "x":2, "y":5.3},
|
||||
{"label":".", "x":3, "y":5},
|
||||
{"label":",", "x":4, "y":5.4},
|
||||
{"label":"Space", "x":5, "y":5.5},
|
||||
{"label":"Layer 1/Space", "x":6.5, "y":6},
|
||||
{"label":"Alt", "x":7.5, "y":6},
|
||||
{"label":"Caps Lock", "x":11.5, "y":6},
|
||||
{"label":"Layer 1/Space", "x":12.5, "y":6},
|
||||
{"label":"Space", "x":14, "y":5.5},
|
||||
{"label":"Left", "x":15, "y":5.4},
|
||||
{"label":"Down", "x":16, "y":5},
|
||||
{"label":"Right", "x":17, "y":5.3},
|
||||
{"label":":", "x":18, "y":5.9},
|
||||
{"label":"Ctrl", "x":19, "y":5.9},
|
||||
|
||||
{"label":"Left Pedal 1", "x":2.25, "y":7.5, "w":1.5, "h":2},
|
||||
{"label":"Left Pedal 2", "x":3.75, "y":7.5, "w":1.5, "h":2},
|
||||
{"label":"Left Pedal 3", "x":5.25, "y":7.5, "w":1.5, "h":2},
|
||||
{"label":"Right Pedal 1", "x":13.25, "y":7.5, "w":1.5, "h":2},
|
||||
{"label":"Right Pedal 2", "x":14.75, "y":7.5, "w":1.5, "h":2},
|
||||
{"label":"Right Pedal 3", "x":16.25, "y":7.5, "w":1.5, "h":2}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user