aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/info.yml2
-rw-r--r--.vscode/settings.json3
-rw-r--r--common_features.mk13
-rw-r--r--docs/feature_debounce_type.md146
-rw-r--r--docs/ja/api_development_environment.md8
-rw-r--r--docs/ja/api_development_overview.md49
-rw-r--r--docs/ja/api_docs.md73
-rw-r--r--docs/ja/api_overview.md20
-rw-r--r--docs/ja/faq_build.md2
-rw-r--r--docs/ja/faq_general.md2
-rw-r--r--docs/ja/faq_keymap.md2
-rw-r--r--docs/ja/feature_split_keyboard.md4
-rw-r--r--docs/ja/how_a_matrix_works.md2
-rw-r--r--docs/ja/quantum_keycodes.md20
-rw-r--r--docs/ja/reference_configurator_support.md202
-rw-r--r--docs/ja/reference_glossary.md173
-rw-r--r--docs/ja/reference_info_json.md78
-rw-r--r--docs/ja/serial_driver.md75
-rw-r--r--docs/ja/support.md22
-rw-r--r--docs/ja/syllabus.md75
-rw-r--r--docs/ja/translating.md60
-rw-r--r--docs/pr_checklist.md69
-rw-r--r--keyboards/boardsource/4x12/keymaps/via/keymap.c36
-rw-r--r--keyboards/boardsource/4x12/keymaps/via/readme.md5
-rw-r--r--keyboards/boardsource/4x12/keymaps/via/rules.mk1
-rw-r--r--keyboards/converter/adb_usb/adb_usb.h2
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h3
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c123
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md7
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk3
-rw-r--r--keyboards/handwired/swiftrax/pandamic/config.h52
-rw-r--r--keyboards/handwired/swiftrax/pandamic/info.json12
-rw-r--r--keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c49
-rw-r--r--keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c46
-rw-r--r--keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk1
-rw-r--r--keyboards/handwired/swiftrax/pandamic/pandamic.c16
-rw-r--r--keyboards/handwired/swiftrax/pandamic/pandamic.h40
-rw-r--r--keyboards/handwired/swiftrax/pandamic/readme.md13
-rw-r--r--keyboards/handwired/swiftrax/pandamic/rules.mk23
-rw-r--r--keyboards/jj40/config.h4
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/config.h44
-rw-r--r--keyboards/kbdfans/maja_soldered/info.json81
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/keymaps/default/keymap.c43
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/keymaps/via/keymap.c43
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/keymaps/via/rules.mk2
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/maja_soldered.c29
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/maja_soldered.h19
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/readme.md14
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/rules.mk22
-rw-r--r--keyboards/lazydesigners/bolt/via/keymap.c43
-rw-r--r--keyboards/lazydesigners/bolt/via/rules.mk2
-rw-r--r--keyboards/maartenwut/solheim68/config.h143
-rw-r--r--keyboards/maartenwut/solheim68/info.json397
-rw-r--r--keyboards/maartenwut/solheim68/keymaps/default/keymap.c31
-rw-r--r--keyboards/maartenwut/solheim68/keymaps/default/readme.md1
-rw-r--r--keyboards/maartenwut/solheim68/readme.md17
-rw-r--r--keyboards/maartenwut/solheim68/rules.mk22
-rw-r--r--keyboards/maartenwut/solheim68/solheim68.c16
-rw-r--r--keyboards/maartenwut/solheim68/solheim68.h102
-rw-r--r--keyboards/marksard/leftover30/config.h138
-rw-r--r--keyboards/marksard/leftover30/info.json198
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/config.h24
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/keymap.c162
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/readme.md1
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/rules.mk1
-rw-r--r--keyboards/marksard/leftover30/leftover30.c37
-rw-r--r--keyboards/marksard/leftover30/leftover30.h45
-rw-r--r--keyboards/marksard/leftover30/readme.md17
-rw-r--r--keyboards/marksard/leftover30/rules.mk22
-rw-r--r--keyboards/marksard/rhymestone/common/glcdfont.c233
-rw-r--r--keyboards/marksard/rhymestone/common/oled_helper.c87
-rw-r--r--keyboards/marksard/rhymestone/common/oled_helper.h32
-rw-r--r--keyboards/marksard/rhymestone/info.json213
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/config.h27
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/keymap.c226
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/rules.mk9
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c76
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md3
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk7
-rw-r--r--keyboards/marksard/rhymestone/readme.md18
-rw-r--r--keyboards/marksard/rhymestone/rev1/config.h152
-rw-r--r--keyboards/marksard/rhymestone/rev1/rev1.c108
-rw-r--r--keyboards/marksard/rhymestone/rev1/rev1.h89
-rw-r--r--keyboards/marksard/rhymestone/rev1/rules.mk0
-rw-r--r--keyboards/marksard/rhymestone/rules.mk27
-rw-r--r--keyboards/planck/keymaps/gitdrik/config.h56
-rw-r--r--keyboards/planck/keymaps/gitdrik/keymap.c231
-rw-r--r--keyboards/planck/keymaps/gitdrik/readme.md1
-rw-r--r--keyboards/planck/keymaps/gitdrik/rules.mk3
-rw-r--r--keyboards/plume/plume65/config.h137
-rw-r--r--keyboards/plume/plume65/info.json376
-rw-r--r--keyboards/plume/plume65/keymaps/default/keymap.c33
-rw-r--r--keyboards/plume/plume65/keymaps/default/readme.md1
-rw-r--r--keyboards/plume/plume65/keymaps/via/keymap.c45
-rw-r--r--keyboards/plume/plume65/keymaps/via/rules.mk1
-rw-r--r--keyboards/plume/plume65/plume65.c16
-rw-r--r--keyboards/plume/plume65/plume65.h103
-rw-r--r--keyboards/plume/plume65/readme.md16
-rw-r--r--keyboards/plume/plume65/rules.mk22
-rw-r--r--keyboards/redox_w/keymaps/danielo515/keymap.c65
-rw-r--r--quantum/debounce/readme.md28
-rw-r--r--quantum/debounce/sym_defer_g.c (renamed from quantum/debounce/sym_g.c)0
-rw-r--r--quantum/debounce/sym_defer_pk.c (renamed from quantum/debounce/sym_pk.c)0
-rw-r--r--quantum/debounce/sym_eager_pk.c (renamed from quantum/debounce/eager_pk.c)0
-rw-r--r--quantum/debounce/sym_eager_pr.c (renamed from quantum/debounce/eager_pr.c)0
-rw-r--r--quantum/keymap_extras/keymap_canadian_multilingual.h4
-rw-r--r--users/danielo515/combo.c44
-rw-r--r--users/danielo515/config.h4
-rw-r--r--users/danielo515/process_records.c247
-rw-r--r--users/danielo515/process_records.h94
-rw-r--r--users/stanrc85/rgblight_layers.c38
-rw-r--r--users/stanrc85/rules.mk18
-rw-r--r--users/stanrc85/stanrc85.c36
-rw-r--r--users/stanrc85/startup_fanfare.c43
114 files changed, 5843 insertions, 378 deletions
diff --git a/.github/workflows/info.yml b/.github/workflows/info.yml
index 7551c127e..bb3a50847 100644
--- a/.github/workflows/info.yml
+++ b/.github/workflows/info.yml
@@ -16,7 +16,7 @@ jobs:
16 with: 16 with:
17 fetch-depth: 0 17 fetch-depth: 0
18 18
19 - uses: trilom/file-changes-action@v1.2.3 19 - uses: trilom/file-changes-action@v1.2.4
20 id: file_changes 20 id: file_changes
21 with: 21 with:
22 output: '\n' 22 output: '\n'
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 9aa546a78..775b3df17 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -16,7 +16,8 @@
16 "*.hpp": "cpp", 16 "*.hpp": "cpp",
17 "xstddef": "c", 17 "xstddef": "c",
18 "type_traits": "c", 18 "type_traits": "c",
19 "utility": "c" 19 "utility": "c",
20 "ranges": "c"
20 }, 21 },
21 "[markdown]": { 22 "[markdown]": {
22 "editor.trimAutoWhitespace": false, 23 "editor.trimAutoWhitespace": false,
diff --git a/common_features.mk b/common_features.mk
index 1f110d081..ed6908f4b 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -397,9 +397,20 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
397 endif 397 endif
398endif 398endif
399 399
400# Support for translating old names to new names:
401ifeq ($(strip $(DEBOUNCE_TYPE)),sym_g)
402 DEBOUNCE_TYPE:=sym_defer_g
403else ifeq ($(strip $(DEBOUNCE_TYPE)),eager_pk)
404 DEBOUNCE_TYPE:=sym_eager_pk
405else ifeq ($(strip $(DEBOUNCE_TYPE)),sym_pk)
406 DEBOUNCE_TYPE:=sym_defer_pk
407else ifeq ($(strip $(DEBOUNCE_TYPE)),eager_pr)
408 DEBOUNCE_TYPE:=sym_eager_pr
409endif
410
400DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce 411DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
401# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually. 412# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
402DEBOUNCE_TYPE?= sym_g 413DEBOUNCE_TYPE?= sym_defer_g
403ifneq ($(strip $(DEBOUNCE_TYPE)), custom) 414ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
404 QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c 415 QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
405endif 416endif
diff --git a/docs/feature_debounce_type.md b/docs/feature_debounce_type.md
index 65b4ea1e5..83ebafe60 100644
--- a/docs/feature_debounce_type.md
+++ b/docs/feature_debounce_type.md
@@ -1,43 +1,151 @@
1# Debounce algorithm 1# Contact bounce / contact chatter
2 2
3QMK supports multiple debounce algorithms through its debounce API. 3Mechanical switches often don't have a clean single transition between pressed and unpressed states.
4
5In an ideal world, when you press a switch, you would expect the digital pin to see something like this:
6(X axis showing time
7```
8voltage +----------------------
9 ^ |
10 | |
11 | ------------------+
12 ----> time
13```
14
15However in the real world you will actually see contact bounce, which will look like multiple 1->0 and 0->1 transitions,
16until the value finally settles.
17```
18 +-+ +--+ +-------------
19 | | | | |
20 | | | | |
21+-----------------+ +-+ +-+
22```
23The time it takes for the switch to settle might vary with switch type, age, and even pressing technique.
24
25If the device chooses not to mitigate contact bounce, then often actions that happen when the switch is pressed are repeated
26multiple times.
27
28There are many ways to handle contact bounce ("Debouncing"). Some include employing additional hardware, for example an RC filter,
29while there are various ways to do debouncing in software too, often called debounce algorithms. This page discusses software
30debouncing methods available in QMK.
31
32While technically not considered contact bounce/contact chatter, some switch technologies are susceptible to noise, meaning,
33while the key is not changing state, sometimes short random 0->1 or 1->0 transitions might be read by the digital circuit, for example:
34```
35 +-+
36 | |
37 | |
38+-----------------+ +--------------------
39```
40
41Many debounce methods (but not all) will also make the device resistant to noise. If you are working with a technology that is
42susceptible to noise, you must choose a debounce method that will also mitigate noise for you.
43
44## Types of debounce algorithms
4 45
5The logic for which debounce method called is below. It checks various defines that you have set in rules.mk 461) Unit of time: Timestamp (milliseconds) vs Cycles (scans)
47 * Debounce algorithms often have a 'debounce time' parameter, that specifies the maximum settling time of the switch contacts.
48 This time might be measured in various units:
49 * Cycles-based debouncing waits n cycles (scans), decreasing count by one each matrix_scan
50 * Timestamp-based debouncing stores the millisecond timestamp a change occurred, and does substraction to figure out time elapsed.
51 * Timestamp-based debouncing is usually superior, especially in the case of noise-resistant devices because settling times of physical
52 switches is specified in units of time, and should not depend on the matrix scan-rate of the keyboard.
53 * Cycles-based debouncing is sometimes considered inferior, because the settling time that it is able to compensate for depends on the
54 performance of the matrix scanning code. If you use cycles-based debouncing, and you significantly improve the performance of your scanning
55 code, you might end up with less effective debouncing. A situation in which cycles-based debouncing might be preferable is when
56 noise is present, and the scanning algorithm is slow, or variable speed. Even if your debounce algorithm is fundamentally noise-resistant,
57 if the scanning is slow, and you are using a timestamp-based algorithm, you might end up making a debouncing decision based on only two
58 sampled values, which will limit the noise-resistance of the algorithm.
59 * Currently all built-in debounce algorithms support timestamp-based debouncing only. In the future we might
60 implement cycles-based debouncing, and it will be selectable via a ```config.h``` macro.
61
622) Symmetric vs Asymmetric
63 * Symmetric - apply the same debouncing algorithm, to both key-up and key-down events.
64 * Recommended naming convention: ```sym_*```
65 * Asymmetric - apply different debouncing algorithms to key-down and key-up events. E.g. Eager key-down, Defer key-up.
66 * Recommended naming convention: ```asym_*``` followed by details of the type of algorithm in use, in order, for key-down and then key-up
67
683) Eager vs Defer
69 * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
70 * Eager algorithms are not noise-resistant.
71 * Recommended naming conventions:
72 * ```sym_eager_*```
73 * ```asym_eager_*_*```: key-down is using eager algorithm
74 * ```asym_*_eager_*```: key-up is using eager algorithm
75 * Defer - wait for no changes for DEBOUNCE ms before reporting change.
76 * Defer algorithms are noise-resistant
77 * Recommended naming conventions:
78 * ```sym_defer_*```
79 * ```asym_defer_*_*```: key-down is using eager algorithm
80 * ```asym_*_defer_*```: key-up is using eager algorithm
81
824) Global vs Per-Key vs Per-Row
83 * Global - one timer for all keys. Any key change state affects global timer
84 * Recommended naming convention: ```*_g```
85 * Per-key - one timer per key
86 * Recommended naming convention: ```*_pk```
87 * Per-row - one timer per row
88 * Recommended naming convention: ```*_pr```
89 * Per-key and per-row algorithms consume more resources (in terms of performance,
90 and ram usage), but fast typists might prefer them over global.
91
92## Debounce algorithms supported by QMK
93
94QMK supports multiple debounce algorithms through its debounce API.
95The logic for which debounce method called is below. It checks various defines that you have set in ```rules.mk```
6 96
7``` 97```
8DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce 98DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
9DEBOUNCE_TYPE?= sym_g 99DEBOUNCE_TYPE?= sym_defer_g
10ifneq ($(strip $(DEBOUNCE_TYPE)), custom) 100ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
11 QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c 101 QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
12endif 102endif
13``` 103```
14 104
15# Debounce selection 105### Debounce selection
16 106
17| DEBOUNCE_TYPE | Description | What else is needed | 107| DEBOUNCE_TYPE | Description | What else is needed |
18| ------------- | --------------------------------------------------- | ----------------------------- | 108| ------------- | --------------------------------------------------- | ----------------------------- |
19| Not defined | Use the default algorithm, currently sym_g | Nothing | 109| Not defined | Use the default algorithm, currently sym_defer_g | Nothing |
20| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions | 110| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
21| anything_else | Use another algorithm from quantum/debounce/* | Nothing | 111| Anything Else | Use another algorithm from quantum/debounce/* | Nothing |
22 112
23**Regarding split keyboards**: 113**Regarding split keyboards**:
24The debounce code is compatible with split keyboards. 114The debounce code is compatible with split keyboards.
25 115
26# Use your own debouncing code 116### Selecting an included debouncing method
27* Set ```DEBOUNCE_TYPE = custom```. 117Keyboards may select one of the already implemented debounce methods, by adding to ```rules.mk``` the following line:
28* Add ```SRC += debounce.c``` 118```
119DEBOUNCE_TYPE = <name of algorithm>
120```
121Where name of algorithm is one of:
122* ```sym_defer_g``` - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occurred, all input changes are pushed.
123 * This is the current default algorithm. This is the highest performance algorithm with lowest memory usage, and it's also noise-resistant.
124* ```sym_eager_pr``` - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row.
125For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
126appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
127* ```sym_eager_pk``` - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
128* ```sym_defer_pk``` - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key status change is pushed.
129
130### A couple algorithms that could be implemented in the future:
131* ```sym_defer_pr```
132* ```sym_eager_g```
133* ```asym_eager_defer_pk```
134
135### Use your own debouncing code
136You have the option to implement you own debouncing algorithm. To do this:
137* Set ```DEBOUNCE_TYPE = custom``` in ```rules.mk```.
138* Add ```SRC += debounce.c``` in ```rules.mk```
29* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples. 139* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
30* Debouncing occurs after every raw matrix scan. 140* Debouncing occurs after every raw matrix scan.
31* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly. 141* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
142* If the algorithm might be applicable to other keyboards, please consider adding it to ```quantum/debounce```
32 143
33# Changing between included debouncing methods 144### Old names
34You can either use your own code, by including your own debounce.c, or switch to another included one. 145The following old names for existing algorithms will continue to be supported, however it is recommended to use the new names instead.
35Included debounce methods are:
36* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row.
37For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
38appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
39* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
40* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occured, all input changes are pushed.
41* sym_pk - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occured on that key, the key status change is pushed.
42 146
147* sym_g - old name for sym_defer_g
148* eager_pk - old name for sym_eager_pk
149* sym_pk - old name for sym_defer_pk
150* eager_pr - old name for sym_eager_pr
43 151
diff --git a/docs/ja/api_development_environment.md b/docs/ja/api_development_environment.md
new file mode 100644
index 000000000..8dce1ba2f
--- /dev/null
+++ b/docs/ja/api_development_environment.md
@@ -0,0 +1,8 @@
1# 開発環境ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—
2
3<!---
4 original document: 0.9.50:docs/api_development_environment.md
5 git diff 0.9.50 HEAD -- docs/api_development_environment.md | cat
6-->
7
8開発環境をセットアップã™ã‚‹ã«ã¯ã€[qmk_web_stack](https://github.com/qmk/qmk_web_stack) ã«è¡Œã£ã¦ãã ã•ã„。
diff --git a/docs/ja/api_development_overview.md b/docs/ja/api_development_overview.md
new file mode 100644
index 000000000..0612507b4
--- /dev/null
+++ b/docs/ja/api_development_overview.md
@@ -0,0 +1,49 @@
1# QMK コンパイラ開発ガイド
2
3<!---
4 original document: 0.9.50:docs/api_development_overview.md
5 git diff 0.9.50 HEAD -- docs/api_development_overview.md | cat
6-->
7
8ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€é–‹ç™ºè€…ã« QMK コンパイラを紹介ã—よã†ã¨æ€ã„ã¾ã™ã€‚コードを読ã¾ãªã‘れã°ãªã‚‰ãªã„よã†ãªæ ¸å¿ƒã¨ãªã‚‹è©³ç´°ã«ç«‹ã¡å…¥ã£ã¦èª¿ã¹ã‚‹ã“ã¨ã¯ã—ã¾ã›ã‚“。ã“ã“ã§å¾—られるもã®ã¯ã€ã‚³ãƒ¼ãƒ‰ã‚’読んã§ç†è§£ã‚’æ·±ã‚ã‚‹ãŸã‚ã®ãƒ•レームワークã§ã™ã€‚
9
10# 概è¦
11
12QMK Compile API ã¯ã€ã„ãã¤ã‹ã®å¯å‹•部分ã‹ã‚‰ã§ãã¦ã„ã¾ã™:
13
14![構造図](https://raw.githubusercontent.com/qmk/qmk_api/master/docs/architecture.svg)
15
16API クライアント㯠API ã‚µãƒ¼ãƒ“ã‚¹ã¨æŽ’ä»–çš„ã«ã‚„りã¨ã‚Šã‚’ã—ã¾ã™ã€‚ã“ã“ã§ã‚¸ãƒ§ãƒ–をサブミットã—ã€çŠ¶æ…‹ã‚’èª¿ã¹ã€çµæžœã‚’ダウンロードã—ã¾ã™ã€‚API サービスã¯ã‚³ãƒ³ãƒ‘イルジョブを [Redis Queue](https://python-rq.org) ã«æŒ¿å…¥ã—ã€ãれらã®ã‚¸ãƒ§ãƒ–ã®çµæžœã«ã¤ã„㦠RQ 㨠S3 ã®ä¸¡æ–¹ã‚’調ã¹ã¾ã™ã€‚
17
18ワーカー㯠RQ ã‹ã‚‰æ–°ã—ã„コンパイルジョブをå–り出ã—ã€ã‚½ãƒ¼ã‚¹ã¨ãƒã‚¤ãƒŠãƒªã‚’ S3 互æ›ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã‚¨ãƒ³ã‚¸ãƒ³ã«ã‚¢ãƒƒãƒ—ロードã—ã¾ã™ã€‚
19
20# ワーカー
21
22QMK コンパイラワーカーã¯å®Ÿéš›ã®ãƒ“ルド作業ã«è²¬ä»»ã‚’æŒã¡ã¾ã™ã€‚ワーカー㯠RQ ã‹ã‚‰ã‚¸ãƒ§ãƒ–ã‚’å–り出ã—ã€ã‚¸ãƒ§ãƒ–を完了ã™ã‚‹ãŸã‚ã«ã„ãã¤ã‹ã®äº‹ã‚’行ã„ã¾ã™:
23
24* æ–°ã—ã„ qmk_firmware ã®ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã‚’作æˆã™ã‚‹
25* 指定ã•れãŸãƒ¬ã‚¤ãƒ¤ãƒ¼ã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’使ã£ã¦ `keymap.c` をビルドã™ã‚‹
26* ファームウェアをビルドã™ã‚‹
27* ソースã®ã‚³ãƒ”ーを zip å½¢å¼ã§åœ§ç¸®ã™ã‚‹
28* ファームウェアã€ã‚½ãƒ¼ã‚¹ã® zip ファイルã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãƒ•ァイルを S3 ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹
29* ジョブã®çŠ¶æ…‹ã‚’ RQ ã«é€ä¿¡ã™ã‚‹
30
31# API サービス
32
33API ã‚µãƒ¼ãƒ“ã‚¹ã¯æ¯”較的å˜ç´”㪠Flask アプリケーションã§ã™ã€‚ç†è§£ã—ã¦ãŠãã¹ãã“ã¨ãŒå¹¾ã¤ã‹ã‚りã¾ã™ã€‚
34
35## @app.route('/v1/compile', methods=['POST'])
36
37ã“れ㯠API ã®ä¸»ãªã‚¨ãƒ³ãƒˆãƒªãƒ¼ãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚クライアントã¨ã®ã‚„りã¨ã‚Šã¯ã“ã“ã‹ã‚‰é–‹å§‹ã•れã¾ã™ã€‚クライアントã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’表㙠JSON ドキュメントを POST ã—ã€API ã¯ã‚³ãƒ³ãƒ‘イルジョブをサブミットã™ã‚‹å‰ã«ã„ãらã‹ã®(ã¨ã¦ã‚‚)åŸºæœ¬çš„ãªæ¤œè¨¼ã‚’行ã„ã¾ã™ã€‚
38
39## @app.route('/v1/compile/&lt;string:job_id&gt;', methods=['GET'])
40
41ã“ã‚Œã¯æœ€ã‚‚よã呼ã°ã‚Œã‚‹ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚ジョブã®è©³ç´°ãŒ redis ã‹ã‚‰åˆ©ç”¨å¯èƒ½ã§ã‚れã°ãれをå–り出ã—ã€ãã†ã§ãªã‘れ㰠S3 ã‹ã‚‰ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れãŸã‚¸ãƒ§ãƒ–ã®è©³ç´°ã‚’å–り出ã—ã¾ã™ã€‚
42
43## @app.route('/v1/compile/&lt;string:job_id&gt;/download', methods=['GET'])
44
45ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã‚ˆã‚Šãƒ¦ãƒ¼ã‚¶ã¯ã‚³ãƒ³ãƒ‘イルã•れãŸãƒ•ァームウェアファイルをダウンロードã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
46
47## @app.route('/v1/compile/&lt;string:job_id&gt;/source', methods=['GET'])
48
49ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã‚ˆã‚Šãƒ¦ãƒ¼ã‚¶ã¯ãƒ•ァームウェアã®ã‚½ãƒ¼ã‚¹ã‚’ダウンロードã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
diff --git a/docs/ja/api_docs.md b/docs/ja/api_docs.md
new file mode 100644
index 000000000..b483c045e
--- /dev/null
+++ b/docs/ja/api_docs.md
@@ -0,0 +1,73 @@
1# QMK API
2
3<!---
4 original document: 0.9.50:docs/api_docs.md
5 git diff 0.9.50 HEAD -- docs/api_docs.md | cat
6-->
7
8ã“ã®ãƒšãƒ¼ã‚¸ã¯ QMK API ã®ä½¿ã„方を説明ã—ã¾ã™ã€‚ã‚‚ã—ã‚ãªãŸãŒã‚¢ãƒ—リケーション開発者ã§ã‚れã°ã€å…¨ã¦ã® [QMK](https://qmk.fm) キーボードã®ãƒ•ァームウェアをコンパイルã™ã‚‹ãŸã‚ã«ã€ã“ã® API を使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚
9
10## 概è¦
11
12ã“ã®ã‚µãƒ¼ãƒ“スã¯ã€ã‚«ã‚¹ã‚¿ãƒ ã‚­ãƒ¼ãƒžãƒƒãƒ—をコンパイルã™ã‚‹ãŸã‚ã®éžåŒæœŸ API ã§ã™ã€‚API 㫠何らã‹ã® JSON ã‚’ POST ã—ã€å®šæœŸçš„ã«çŠ¶æ…‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã€ãƒ•ァームウェアã®ã‚³ãƒ³ãƒ‘イルãŒå®Œäº†ã—ã¦ã„れã°ã€çµæžœã®ãƒ•ァームウェアã¨(ã‚‚ã—希望ã™ã‚Œã°)ãã®ãƒ•ァームウェアã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’ダウンロードã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
13
14#### JSON ペイロードã®ä¾‹:
15
16```json
17{
18 "keyboard": "clueboard/66/rev2",
19 "keymap": "my_awesome_keymap",
20 "layout": "LAYOUT_all",
21 "layers": [
22 ["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_GRV","KC_BSPC","KC_PGUP","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_LBRC","KC_RBRC","KC_BSLS","KC_PGDN","KC_CAPS","KC_A","KC_S","KC_D","KC_F","KC_G","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_NUHS","KC_ENT","KC_LSFT","KC_NUBS","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_RO","KC_RSFT","KC_UP","KC_LCTL","KC_LGUI","KC_LALT","KC_MHEN","KC_SPC","KC_SPC","KC_HENK","KC_RALT","KC_RCTL","MO(1)","KC_LEFT","KC_DOWN","KC_RIGHT"],
23 ["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_TRNS","KC_DEL","BL_STEP","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_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(2)","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_PGUP","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(1)","KC_LEFT","KC_PGDN","KC_RGHT"],
24 ["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","RESET","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(2)","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(1)","KC_TRNS","KC_TRNS","KC_TRNS"]
25 ]
26}
27```
28
29ã”覧ã®ã¨ãŠã‚Šã€ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã«ã¯ãƒ•ァームウェアを作æˆãŠã‚ˆã³ç”Ÿæˆã™ã‚‹ãŸã‚ã«å¿…è¦ãªã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å…¨ã¦ã®å´é¢ã‚’記述ã—ã¾ã™ã€‚å„レイヤー㯠QMK キーコードã®1ã¤ã®ãƒªã‚¹ãƒˆã§ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã® `LAYOUT` マクロã¨åŒã˜é•·ã•ã§ã™ã€‚ã‚‚ã—キーボードãŒè¤‡æ•°ã® `LAYOUT` マクロをサãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã€ã©ã®ãƒžã‚¯ãƒ­ã‚’使ã†ã‹ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
30
31## コンパイルジョブã®ã‚µãƒ–ミット
32
33キーマップをファームウェアã«ã‚³ãƒ³ãƒ‘イルã™ã‚‹ã«ã¯ã€å˜ç´”ã« JSON ã‚’ `/v1/compile` エンドãƒã‚¤ãƒ³ãƒˆã« POST ã—ã¾ã™ã€‚以下ã®ä¾‹ã§ã¯ã€JSON ペイロードを `json_data` ã¨ã„ã†åå‰ã®ãƒ•ァイルã«é…ç½®ã—ã¦ã„ã¾ã™ã€‚
34
35```
36$ curl -H "Content-Type: application/json" -X POST -d "$(< json_data)" http://api.qmk.fm/v1/compile
37{
38 "enqueued": true,
39 "job_id": "ea1514b3-bdfc-4a7b-9b5c-08752684f7f6"
40}
41```
42
43## 状態ã®ãƒã‚§ãƒƒã‚¯
44
45キーマップをサブミットã—ãŸå¾Œã§ã€ç°¡å˜ãª HTTP GET 呼ã³å‡ºã—を使ã£ã¦çŠ¶æ…‹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
46
47```
48$ curl http://api.qmk.fm/v1/compile/ea1514b3-bdfc-4a7b-9b5c-08752684f7f6
49{
50 "created_at": "Sat, 19 Aug 2017 21:39:12 GMT",
51 "enqueued_at": "Sat, 19 Aug 2017 21:39:12 GMT",
52 "id": "f5f9b992-73b4-479b-8236-df1deb37c163",
53 "status": "running",
54 "result": null
55}
56```
57
58ã“れã¯ã€ã‚¸ãƒ§ãƒ–をキューã«å…¥ã‚Œã‚‹ã“ã¨ã«æˆåŠŸã—ã€ç¾åœ¨å®Ÿè¡Œä¸­ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚5ã¤ã®çŠ¶æ…‹ãŒã‚りãˆã¾ã™:
59
60* **failed**: ãªã‚“らã‹ã®ç†ç”±ã§ã‚³ãƒ³ãƒ‘イルサービスãŒå¤±æ•—ã—ã¾ã—ãŸã€‚
61* **finished**: コンパイルãŒå®Œäº†ã—ã€çµæžœã‚’見るã«ã¯ `result` ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
62* **queued**: キーマップã¯ã‚³ãƒ³ãƒ‘イルサーãƒãŒåˆ©ç”¨å¯èƒ½ã«ãªã‚‹ã®ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚
63* **running**: コンパイルãŒé€²è¡Œä¸­ã§ã€ã¾ã‚‚ãªã完了ã™ã‚‹ã¯ãšã§ã™ã€‚
64* **unknown**: 深刻ãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã€[ãƒã‚°ã‚’報告](https://github.com/qmk/qmk_compiler/issues)ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
65
66## 完了ã—ãŸçµæžœã‚’検証
67
68コンパイルジョブãŒå®Œäº†ã—ãŸã‚‰ã€`result` キーをãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚ã“ã®ã‚­ãƒ¼ã®å€¤ã¯å¹¾ã¤ã‹ã®æƒ…報をå«ã‚€ãƒãƒƒã‚·ãƒ¥ã§ã™:
69
70* `firmware_binary_url`: 書ãè¾¼ã¿å¯èƒ½ãªãƒ•ァームウェア㮠URL ã®ãƒªã‚¹ãƒˆ
71* `firmware_keymap_url`: `keymap.c` ã® URL ã®ãƒªã‚¹ãƒˆ
72* `firmware_source_url`: ファームウェアã®å®Œå…¨ãªã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã® URL ã®ãƒªã‚¹ãƒˆ
73* `output`: ã“ã®ã‚³ãƒ³ãƒ‘イルジョブ㮠stdout 㨠stderr。エラーã¯ã“ã“ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
diff --git a/docs/ja/api_overview.md b/docs/ja/api_overview.md
new file mode 100644
index 000000000..18b8eae10
--- /dev/null
+++ b/docs/ja/api_overview.md
@@ -0,0 +1,20 @@
1# QMK API
2
3<!---
4 original document: 0.9.50:docs/api_overview.md
5 git diff 0.9.50 HEAD -- docs/api_overview.md | cat
6-->
7
8QMK API ã¯ã€Web 㨠GUI ツール㌠[QMK](http://qmk.fm/) ã«ã‚ˆã£ã¦ã‚µãƒãƒ¼ãƒˆã•れるキーボード用ã®ä»»æ„ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—をコンパイルã™ã‚‹ãŸã‚ã«ä½¿ã†ã“ã¨ãŒã§ãã‚‹ã€éžåŒæœŸ API ã‚’æä¾›ã—ã¾ã™ã€‚標準ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—テンプレートã¯ã€C コードã®ã‚µãƒãƒ¼ãƒˆã‚’å¿…è¦ã¨ã—ãªã„å…¨ã¦ã® QMK キーコードをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚キーボードã®ãƒ¡ãƒ³ãƒ†ãƒŠã¯ç‹¬è‡ªã®ã‚«ã‚¹ã‚¿ãƒ ãƒ†ãƒ³ãƒ—レートをæä¾›ã—ã¦ã€ã‚ˆã‚Šå¤šãã®æ©Ÿèƒ½ã‚’実ç¾ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
9
10## アプリケーション開発者
11
12ã‚‚ã—ã‚ãªãŸãŒã‚¢ãƒ—リケーションã§ã“ã® API を使ã†ã“ã¨ã«èˆˆå‘³ãŒã‚るアプリケーション開発者ã§ã‚れã°ã€[API ã®ä½¿ç”¨](ja/api_docs.md) ã«è¡Œãã¹ãã§ã™ã€‚
13
14## キーボードã®ãƒ¡ãƒ³ãƒ†ãƒŠ
15
16ã‚‚ã— QMK Compiler API ã§ã®ã‚ãªãŸã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚µãƒãƒ¼ãƒˆã‚’強化ã—ãŸã„å ´åˆã¯ã€[キーボードサãƒãƒ¼ãƒˆ](ja/reference_configurator_support.md) ã®ç¯€ã«è¡Œãã¹ãã§ã™ã€‚
17
18## ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰é–‹ç™ºè€…
19
20ã‚‚ã— API 自体ã«å–り組むã“ã¨ã«èˆˆå‘³ãŒã‚ã‚‹å ´åˆã¯ã€[開発環境](ja/api_development_environment.md)ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã‹ã‚‰å§‹ã‚ã€ãれã‹ã‚‰ [API ã®ãƒãƒƒã‚­ãƒ³ã‚°](ja/api_development_overview.md) を調ã¹ã‚‹ã¹ãã§ã™ã€‚
diff --git a/docs/ja/faq_build.md b/docs/ja/faq_build.md
index 97e1bd8cf..62c36f249 100644
--- a/docs/ja/faq_build.md
+++ b/docs/ja/faq_build.md
@@ -145,4 +145,4 @@ ARM ベースã®ãƒãƒƒãƒ—上ã§ã® EEPROM ã®å‹•作ã«ã‚ˆã£ã¦ã€ä¿å­˜ã•れã
145[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) を使ã£ã¦ eeprom ã®ãƒªã‚»ãƒƒãƒˆã‚’強制ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’書ã込んã å¾Œã§ã€é€šå¸¸ã®ãƒ•ァームウェアを書ã込むã¨ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒ_通常_ ã®å‹•作順åºã«å¾©å…ƒã•れã¾ã™ã€‚ 145[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) を使ã£ã¦ eeprom ã®ãƒªã‚»ãƒƒãƒˆã‚’強制ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’書ã込んã å¾Œã§ã€é€šå¸¸ã®ãƒ•ァームウェアを書ã込むã¨ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒ_通常_ ã®å‹•作順åºã«å¾©å…ƒã•れã¾ã™ã€‚
146[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin) 146[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
147 147
148ã„ãšã‚Œã‹ã®å½¢å¼ã§ãƒ–ãƒ¼ãƒˆãƒžã‚¸ãƒƒã‚¯ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ã“れも実行ã§ãã‚‹ã¯ãšã§ã™ (実行方法ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€[ブートマジックドキュメント](feature_bootmagic.md)ã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰æƒ…報を見ã¦ãã ã•ã„)。 148ã„ãšã‚Œã‹ã®å½¢å¼ã§ãƒ–ãƒ¼ãƒˆãƒžã‚¸ãƒƒã‚¯ãŒæœ‰åйã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ã“れも実行ã§ãã‚‹ã¯ãšã§ã™ (実行方法ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€[ブートマジックドキュメント](ja/feature_bootmagic.md)ã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰æƒ…報を見ã¦ãã ã•ã„)。
diff --git a/docs/ja/faq_general.md b/docs/ja/faq_general.md
index a365e380b..83d1a557b 100644
--- a/docs/ja/faq_general.md
+++ b/docs/ja/faq_general.md
@@ -51,7 +51,7 @@ OKã€å•題ã‚りã¾ã›ã‚“。[GitHub ã§ issue ã‚’é–‹ã](https://github.com/qmk
51 51
52TMK 㯠[Jun Wako](https://github.com/tmk) ã«ã‚ˆã£ã¦è¨­è¨ˆã•れ実装ã•れã¾ã—ãŸã€‚QMK 㯠[Jack Humbert](https://github.com/jackhumbert) ã® Planck 用 TMK ã®ãƒ•ォークã¨ã—ã¦å§‹ã¾ã‚Šã¾ã—ãŸã€‚ã—ã°ã‚‰ãã—ã¦ã€Jack ã®ãƒ•ォーク㯠TMK ã‹ã‚‰ã‹ãªã‚Šåˆ†å²ã—ã€2015å¹´ã« Jack ã¯ãƒ•ォークを QMK ã«åå‰ã‚’変ãˆã‚‹ã“ã¨ã«ã—ã¾ã—ãŸã€‚ 52TMK 㯠[Jun Wako](https://github.com/tmk) ã«ã‚ˆã£ã¦è¨­è¨ˆã•れ実装ã•れã¾ã—ãŸã€‚QMK 㯠[Jack Humbert](https://github.com/jackhumbert) ã® Planck 用 TMK ã®ãƒ•ォークã¨ã—ã¦å§‹ã¾ã‚Šã¾ã—ãŸã€‚ã—ã°ã‚‰ãã—ã¦ã€Jack ã®ãƒ•ォーク㯠TMK ã‹ã‚‰ã‹ãªã‚Šåˆ†å²ã—ã€2015å¹´ã« Jack ã¯ãƒ•ォークを QMK ã«åå‰ã‚’変ãˆã‚‹ã“ã¨ã«ã—ã¾ã—ãŸã€‚
53 53
54技術的ãªè¦³ç‚¹ã‹ã‚‰ã€QMK ã¯å¹¾ã¤ã‹ã®æ–°ã—ã„æ©Ÿèƒ½ã‚’追加ã—㟠TMK ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚最も注目ã™ã¹ãã“ã¨ã¯ã€QMK ã¯åˆ©ç”¨å¯èƒ½ãªã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®æ•°ã‚’増やã—ã€`S()`ã€`LCTL()` ãŠã‚ˆã³ `MO()` ãªã©ã®é«˜åº¦ãªæ©Ÿèƒ½ã‚’実装ã™ã‚‹ãŸã‚ã«ã“れらを使ã£ã¦ã„ã¾ã™ã€‚[キーコード](keycodes.md)ã§ã“れらã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚ 54技術的ãªè¦³ç‚¹ã‹ã‚‰ã€QMK ã¯å¹¾ã¤ã‹ã®æ–°ã—ã„æ©Ÿèƒ½ã‚’追加ã—㟠TMK ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚最も注目ã™ã¹ãã“ã¨ã¯ã€QMK ã¯åˆ©ç”¨å¯èƒ½ãªã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®æ•°ã‚’増やã—ã€`S()`ã€`LCTL()` ãŠã‚ˆã³ `MO()` ãªã©ã®é«˜åº¦ãªæ©Ÿèƒ½ã‚’実装ã™ã‚‹ãŸã‚ã«ã“れらを使ã£ã¦ã„ã¾ã™ã€‚[キーコード](ja/keycodes.md)ã§ã“れらã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚
55 55
56プロジェクトã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ç®¡ç†ã®è¦³ç‚¹ã‹ã‚‰ã€TMK ã¯å…¬å¼ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹å…¨ã¦ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’自分ã§ç®¡ç†ã—ã¦ãŠã‚Šã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ã‚µãƒãƒ¼ãƒˆã‚‚å°‘ã—å—ã‘ã¦ã„ã¾ã™ã€‚ä»–ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ç”¨ã«åˆ¥å€‹ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒç¶­æŒã™ã‚‹ãƒ•ォークãŒå­˜åœ¨ã™ã‚‹ã‹ã€ä½œæˆã§ãã¾ã™ã€‚デフォルトã§ã¯å°‘æ•°ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ã¿ãŒæä¾›ã•れるãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ã¯ä¸€èˆ¬çš„ã«ãŠäº’ã„ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—を共有ã—ã¾ã›ã‚“。QMK ã¯é›†ä¸­ç®¡ç†ã•れãŸãƒªãƒã‚¸ãƒˆãƒªã‚’介ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¨ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ä¸¡æ–¹ã‚’共有ã™ã‚‹ã“ã¨ã‚’奨励ã—ã¦ãŠã‚Šã€å“è³ªåŸºæº–ã«æº–æ‹ ã™ã‚‹å…¨ã¦ã®ãƒ—ルリクエストをå—ã‘付ã‘ã¾ã™ã€‚ã“れらã¯ã»ã¨ã‚“ã©ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã§ç®¡ç†ã•れã¾ã™ãŒã€å¿…è¦ãªå ´åˆã¯ QMK ãƒãƒ¼ãƒ ã‚‚支æ´ã—ã¾ã™ã€‚ 56プロジェクトã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ç®¡ç†ã®è¦³ç‚¹ã‹ã‚‰ã€TMK ã¯å…¬å¼ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹å…¨ã¦ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’自分ã§ç®¡ç†ã—ã¦ãŠã‚Šã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ã‚µãƒãƒ¼ãƒˆã‚‚å°‘ã—å—ã‘ã¦ã„ã¾ã™ã€‚ä»–ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ç”¨ã«åˆ¥å€‹ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒç¶­æŒã™ã‚‹ãƒ•ォークãŒå­˜åœ¨ã™ã‚‹ã‹ã€ä½œæˆã§ãã¾ã™ã€‚デフォルトã§ã¯å°‘æ•°ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ã¿ãŒæä¾›ã•れるãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ã¯ä¸€èˆ¬çš„ã«ãŠäº’ã„ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—を共有ã—ã¾ã›ã‚“。QMK ã¯é›†ä¸­ç®¡ç†ã•れãŸãƒªãƒã‚¸ãƒˆãƒªã‚’介ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¨ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ä¸¡æ–¹ã‚’共有ã™ã‚‹ã“ã¨ã‚’奨励ã—ã¦ãŠã‚Šã€å“è³ªåŸºæº–ã«æº–æ‹ ã™ã‚‹å…¨ã¦ã®ãƒ—ルリクエストをå—ã‘付ã‘ã¾ã™ã€‚ã“れらã¯ã»ã¨ã‚“ã©ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã§ç®¡ç†ã•れã¾ã™ãŒã€å¿…è¦ãªå ´åˆã¯ QMK ãƒãƒ¼ãƒ ã‚‚支æ´ã—ã¾ã™ã€‚
57 57
diff --git a/docs/ja/faq_keymap.md b/docs/ja/faq_keymap.md
index 2726e1872..311ebe0e4 100644
--- a/docs/ja/faq_keymap.md
+++ b/docs/ja/faq_keymap.md
@@ -128,7 +128,7 @@ https://github.com/tekezo/Karabiner/issues/403
128 128
129## å˜ä¸€ã®ã‚­ãƒ¼ã§ã® Esc ã¨<code>&#96;</code> 129## å˜ä¸€ã®ã‚­ãƒ¼ã§ã® Esc ã¨<code>&#96;</code>
130 130
131[Grave Escape](feature_grave_esc.md) 機能を見ã¦ãã ã•ã„。 131[Grave Escape](ja/feature_grave_esc.md) 機能を見ã¦ãã ã•ã„。
132 132
133## Mac OSX ã§ã® Eject 133## Mac OSX ã§ã® Eject
134`KC_EJCT` キーコード㯠OSX ã§å‹•作ã—ã¾ã™ã€‚https://github.com/tmk/tmk_keyboard/issues/250 134`KC_EJCT` キーコード㯠OSX ã§å‹•作ã—ã¾ã™ã€‚https://github.com/tmk/tmk_keyboard/issues/250
diff --git a/docs/ja/feature_split_keyboard.md b/docs/ja/feature_split_keyboard.md
index 74b62310f..1efc98e40 100644
--- a/docs/ja/feature_split_keyboard.md
+++ b/docs/ja/feature_split_keyboard.md
@@ -20,12 +20,12 @@ QMK ファームウェアã«ã¯ã€ä»»æ„ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã§ä½¿ç”¨å¯èƒ½ãªä¸€è
20 20
21| Transport | AVR | ARM | 21| Transport | AVR | ARM |
22|------------------------------|--------------------|--------------------| 22|------------------------------|--------------------|--------------------|
23| ['serial'](serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> | 23| ['serial'](ja/serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
24| I2C | :heavy_check_mark: | | 24| I2C | :heavy_check_mark: | |
25 25
26注æ„: 26注æ„:
27 27
281. ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã¨ã‚½ãƒ•トウェアã®ä¸¡æ–¹ã®åˆ¶é™ã¯ã€[ドライãƒãƒ¼ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ](serial_driver.md)ã®ä¸­ã§èª¬æ˜Žã•れã¾ã™ã€‚ 281. ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã¨ã‚½ãƒ•トウェアã®ä¸¡æ–¹ã®åˆ¶é™ã¯ã€[ドライãƒãƒ¼ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ](ja/serial_driver.md)ã®ä¸­ã§èª¬æ˜Žã•れã¾ã™ã€‚
29 29
30## ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢è¨­å®š 30## ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢è¨­å®š
31 31
diff --git a/docs/ja/how_a_matrix_works.md b/docs/ja/how_a_matrix_works.md
index ff4fbb115..b6ded186b 100644
--- a/docs/ja/how_a_matrix_works.md
+++ b/docs/ja/how_a_matrix_works.md
@@ -101,4 +101,4 @@
101- [Deskthority ã®è¨˜äº‹](https://deskthority.net/wiki/Keyboard_matrix) 101- [Deskthority ã®è¨˜äº‹](https://deskthority.net/wiki/Keyboard_matrix)
102- [Dave Dribin ã«ã‚ˆã‚‹ Keyboard Matrix Help (2000)](https://www.dribin.org/dave/keyboard/one_html/) 102- [Dave Dribin ã«ã‚ˆã‚‹ Keyboard Matrix Help (2000)](https://www.dribin.org/dave/keyboard/one_html/)
103- [PCBheaven ã«ã‚ˆã‚‹ How Key Matrices Works](http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) (アニメーションã®ä¾‹) 103- [PCBheaven ã«ã‚ˆã‚‹ How Key Matrices Works](http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) (アニメーションã®ä¾‹)
104- [キーボードã®ä»•組㿠- QMK ドキュメント](how_keyboards_work.md) 104- [キーボードã®ä»•組㿠- QMK ドキュメント](ja/how_keyboards_work.md)
diff --git a/docs/ja/quantum_keycodes.md b/docs/ja/quantum_keycodes.md
new file mode 100644
index 000000000..ffcc49446
--- /dev/null
+++ b/docs/ja/quantum_keycodes.md
@@ -0,0 +1,20 @@
1# Quantum キーコード
2
3<!---
4 original document: 0.9.55:docs/quantum_keycodes.md
5 git diff 0.9.55 HEAD -- docs/quantum_keycodes.md | cat
6-->
7
8Quantum キーコードã«ã‚ˆã‚Šã€ã‚«ã‚¹ã‚¿ãƒ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’定義ã™ã‚‹ã“ã¨ãªãã€åŸºæœ¬çš„ãªã‚‚ã®ãŒæä¾›ã™ã‚‹ã‚‚ã®ã‚ˆã‚Šç°¡å˜ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—をカスタマイズã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
9
10quantum 内ã®å…¨ã¦ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã¯ `0x0000` 㨠`0xFFFF` ã®é–“ã®æ•°å€¤ã§ã™ã€‚`keymap.c` ã®ä¸­ã§ã¯ã€é–¢æ•°ã‚„ãã®ä»–ã®ç‰¹åˆ¥ãªå ´åˆãŒã‚るよã†ã«è¦‹ãˆã¾ã™ãŒã€æœ€çµ‚çš„ã«ã¯ C プリプロセッサã«ã‚ˆã£ã¦ãれらã¯å˜ä¸€ã®4ãƒã‚¤ãƒˆæ•´æ•°ã«å¤‰æ›ã•れã¾ã™ã€‚QMK ã¯æ¨™æº–çš„ãªã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®ãŸã‚ã« `0x0000` ã‹ã‚‰ `0x00FF` を予約ã—ã¦ã„ã¾ã™ã€‚ã“れらã¯ã€`KC_A`ã€`KC_1` ãŠã‚ˆã³ `KC_LCTL` ã®ã‚ˆã†ãªã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã§ã€USB HID 仕様ã§å®šç¾©ã•れãŸåŸºæœ¬çš„ãªã‚­ãƒ¼ã§ã™ã€‚
11
12ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€é«˜åº¦ãª quantum 機能を実装ã™ã‚‹ãŸã‚ã«ä½¿ã‚れる `0x00FF` 㨠`0xFFFF` ã®é–“ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’説明ã—ã¾ã™ã€‚独自ã®ã‚«ã‚¹ã‚¿ãƒ ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’定義ã™ã‚‹å ´åˆã¯ã€ãれらもã“ã®ç¯„囲ã«é…ç½®ã•れã¾ã™ã€‚
13
14## QMK キーコード :id=qmk-keycodes
15
16| キー | エイリアス | 説明 |
17|----------------|------------|--------------------------------------------------------|
18| `RESET` | | 書ãè¾¼ã¿ã®ãŸã‚ã«ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’ bootloader モードã«ã™ã‚‹ |
19| `DEBUG` | | デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ |
20| `EEPROM_RESET` | `EEP_RST` | キーボード㮠EEPROM (永続化メモリ) ã‚’å†åˆæœŸåŒ–ã™ã‚‹ |
diff --git a/docs/ja/reference_configurator_support.md b/docs/ja/reference_configurator_support.md
new file mode 100644
index 000000000..0151731e9
--- /dev/null
+++ b/docs/ja/reference_configurator_support.md
@@ -0,0 +1,202 @@
1# QMK Configurator ã§ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚µãƒãƒ¼ãƒˆ
2
3<!---
4 original document: 0.9.46:docs/reference_configurator_support.md
5 git diff 0.9.46 HEAD -- docs/reference_configurator_support.md | cat
6-->
7
8ã“ã®ãƒšãƒ¼ã‚¸ã¯ [QMK Configurator](https://config.qmk.fm/) ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’é©åˆ‡ã«ã‚µãƒãƒ¼ãƒˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚
9
10
11## Configurator ãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’ç†è§£ã™ã‚‹æ–¹æ³•
12
13Configurator ãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’ã©ã®ã‚ˆã†ã«ç†è§£ã™ã‚‹ã‹ã‚’ç†è§£ã™ã‚‹ã«ã¯ã€æœ€åˆã«ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãƒžã‚¯ãƒ­ã‚’ç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®æ¼”ç¿’ã§ã¯ã€17キーã®ãƒ†ãƒ³ã‚­ãƒ¼ PCB を想定ã—ã¾ã™ã€‚ã“れを `numpad` ã¨å‘¼ã³ã¾ã™ã€‚
14
15```
16|---------------|
17|NLk| / | * | - |
18|---+---+---+---|
19|7 |8 |9 | + |
20|---+---+---| |
21|4 |5 |6 | |
22|---+---+---+---|
23|1 |2 |3 |Ent|
24|-------+---| |
25|0 | . | |
26|---------------|
27```
28
29?> レイアウトマクロã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€[QMK ã®ç†è§£: マトリックススキャン](ja/understanding_qmk.md?id=matrix-scanning) 㨠[QMK ã®ç†è§£: マトリックスã‹ã‚‰ç‰©ç†ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã¸ã®ãƒžãƒƒãƒ—](ja/understanding_qmk.md?id=matrix-to-physical-layout-map) を見ã¦ãã ã•ã„。
30
31Configurator ã® API ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã® `.h` ファイルを `qmk_firmware/keyboards/<keyboard>/<keyboard>.h` ã‹ã‚‰èª­ã¿å–りã¾ã™ã€‚numpad ã®å ´åˆã€ã“ã®ãƒ•ァイル㯠`qmk_firmware/keyboards/numpad/numpad.h` ã§ã™:
32
33```c
34#pragma once
35
36#define LAYOUT( \
37 k00, k01, k02, k03, \
38 k10, k11, k12, k13, \
39 k20, k21, k22, \
40 k30, k31, k32, k33, \
41 k40, k42 \
42 ) { \
43 { k00, k01, k02, k03 }, \
44 { k10, k11, k12, k13 }, \
45 { k20, k21, k22, KC_NO }, \
46 { k30, k31, k32, k33 }, \
47 { k40, KC_NO, k42, KC_NO } \
48}
49```
50
51QMK 㯠`KC_NO` を使ã£ã¦ã€ã‚¹ã‚¤ãƒƒãƒãƒžãƒˆãƒªãƒƒã‚¯ã‚¹å†…ã®ã‚¹ã‚¤ãƒƒãƒãŒãªã„場所を指定ã—ã¾ã™ã€‚デãƒãƒƒã‚°ãŒå¿…è¦ãªå ´åˆã«ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’読ã¿ã‚„ã™ãã™ã‚‹ãŸã‚ã«ã€`XXX`ã€`___`ã€`____` を略記ã¨ã—ã¦ä½¿ã†ã“ã¨ã‚‚ã‚りã¾ã™ã€‚通常㯠`.h` ファイルã®å…ˆé ­è¿‘ãã§å®šç¾©ã•れã¾ã™:
52
53```c
54#pragma once
55
56#define XXX KC_NO
57
58#define LAYOUT( \
59 k00, k01, k02, k03, \
60 k10, k11, k12, k13, \
61 k20, k21, k22, \
62 k30, k31, k32, k33, \
63 k40, k42 \
64 ) { \
65 { k00, k01, k02, k03 }, \
66 { k10, k11, k12, k13 }, \
67 { k20, k21, k22, XXX }, \
68 { k30, k31, k32, k33 }, \
69 { k40, XXX, k42, XXX } \
70}
71```
72
73!> ã“ã®ä½¿ç”¨æ–¹æ³•ã¯ã‚­ãƒ¼ãƒžãƒƒãƒ—マクロã¨ç•°ãªã‚Šã¾ã™ã€‚キーマップマクロã¯ã»ã¨ã‚“ã©å¸¸ã«`KC_NO`ã«ã¤ã„ã¦ã¯`XXXXXXX` (7ã¤ã®å¤§æ–‡å­—ã® X) ã‚’ã€`KC_TRNS` ã«ã¤ã„ã¦ã¯ `_______` (7ã¤ã®ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢)を使ã„ã¾ã™ã€‚
74
75!> ãƒ¦ãƒ¼ã‚¶ã®æ··ä¹±ã‚’防ããŸã‚ã«ã€`KC_NO` を使ã†ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
76
77レイアウトマクロã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«17個ã®ã‚­ãƒ¼ãŒã‚りã€4列ãれãžã‚ŒãŒ5行ã«é…ç½®ã•れã¦ã„ã‚‹ã“ã¨ã‚’ Configurator ã«ä¼ãˆã¾ã™ã€‚スイッãƒã®ä½ç½®ã¯ã€0ã‹ã‚‰å§‹ã¾ã‚‹ `k<row><column>` ã¨ã„ã†åå‰ãŒä»˜ã‘られã¦ã„ã¾ã™ã€‚キーマップã‹ã‚‰ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’å—ã‘å–る上部セクションã¨ã€ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹å†…ã®å„キーã®ä½ç½®ã‚’指定ã™ã‚‹ä¸‹éƒ¨ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¨ãŒä¸€è‡´ã™ã‚‹é™ã‚Šã€åå‰è‡ªä½“ã¯å®Ÿéš›ã«ã¯å•題ã§ã¯ã‚りã¾ã›ã‚“。
78
79物ç†çš„ãªã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ä¼¼ãŸå½¢ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’表示ã™ã‚‹ã«ã¯ã€ãれãžã‚Œã®ã‚­ãƒ¼ã®ç‰©ç†çš„ãªä½ç½®ã¨ã‚µã‚¤ã‚ºã‚’スイッãƒãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã«çµã³ã¤ã‘ã‚‹ã“ã¨ã‚’ Configurator ã«ä¼ãˆã‚‹ JSON ファイルを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
80
81## JSON ファイルã®ãƒ“ルド
82
83JSON ファイルをビルドã™ã‚‹æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€[Keyboard Layout Editor](http://www.keyboard-layout-editor.com/) ("KLE") ã§ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’作æˆã™ã‚‹ã“ã¨ã§ã™ã€‚ã“ã® Raw Data ã‚’ QMK tool ã«å…¥ã‚Œã¦ã€Configurator ãŒèª­ã¿å‡ºã—ã¦ä½¿ç”¨ã™ã‚‹ JSON ファイルã«å¤‰æ›ã—ã¾ã™ã€‚KLE 㯠numpad レイアウトをデフォルトã§é–‹ããŸã‚ã€Getting Started ã®èª¬æ˜Žã‚’削除ã—ã€æ®‹ã‚Šã‚’使ã„ã¾ã™ã€‚
84
85ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãŒæœ›ã¿é€šã‚Šã®ã‚‚ã®ã«ãªã£ãŸã‚‰ã€KLE ã® Raw Data タブã«ç§»å‹•ã—ã€å†…容をコピーã—ã¾ã™:
86
87```
88["Num Lock","/","*","-"],
89["7\nHome","8\n↑","9\nPgUp",{h:2},"+"],
90["4\nâ†","5","6\n→"],
91["1\nEnd","2\n↓","3\nPgDn",{h:2},"Enter"],
92[{w:2},"0\nIns",".\nDel"]
93```
94
95ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’ JSON ã«å¤‰æ›ã™ã‚‹ã«ã¯ã€[QMK KLE-JSON Converter](https://qmk.fm/converter/) ã«ç§»å‹•ã—ã€Raw Data ã‚’ Input フィールド ã«è²¼ã‚Šä»˜ã‘ã€Convert ボタンをクリックã—ã¾ã™ã€‚ã—ã°ã‚‰ãã™ã‚‹ã¨ã€JSON データ㌠Output フィールドã«è¡¨ç¤ºã•れã¾ã™ã€‚内容を新ã—ã„テキストドキュメントã«ã‚³ãƒ”ーã—ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã« `info.json` ã¨ã„ã†åå‰ã‚’付ã‘ã€`numpad.h` ã‚’å«ã‚€åŒã˜ãƒ•ォルダã«ä¿å­˜ã—ã¾ã™ã€‚
96
97`keyboard_name` オブジェクトを使ã£ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®åå‰ã‚’設定ã—ã¾ã™ã€‚説明ã®ãŸã‚ã«ã€å„キーã®ã‚ªãƒ–ジェクトをå„行ã«é…ç½®ã—ã¾ã™ã€‚ã“れã¯ãƒ•ァイルを人間ãŒèª­ã¿ã‚„ã™ã„ã‚‚ã®ã«ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã€Configurator ã®æ©Ÿèƒ½ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。
98
99```json
100{
101 "keyboard_name": "Numpad",
102 "url": "",
103 "maintainer": "qmk",
104 "tags": {
105 "form_factor": "numpad"
106 },
107 "width": 4,
108 "height": 5,
109 "layouts": {
110 "LAYOUT": {
111 "layout": [
112 {"label":"Num Lock", "x":0, "y":0},
113 {"label":"/", "x":1, "y":0},
114 {"label":"*", "x":2, "y":0},
115 {"label":"-", "x":3, "y":0},
116 {"label":"7", "x":0, "y":1},
117 {"label":"8", "x":1, "y":1},
118 {"label":"9", "x":2, "y":1},
119 {"label":"+", "x":3, "y":1, "h":2},
120 {"label":"4", "x":0, "y":2},
121 {"label":"5", "x":1, "y":2},
122 {"label":"6", "x":2, "y":2},
123 {"label":"1", "x":0, "y":3},
124 {"label":"2", "x":1, "y":3},
125 {"label":"3", "x":2, "y":3},
126 {"label":"Enter", "x":3, "y":3, "h":2},
127 {"label":"0", "x":0, "y":4, "w":2},
128 {"label":".", "x":2, "y":4}
129 ]
130 }
131 }
132}
133```
134
135`layouts` オブジェクトã«ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ç‰©ç†ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’表ã™ãƒ‡ãƒ¼ã‚¿ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“ã®ã‚ªãƒ–ジェクトã«ã¯ `LAYOUT` ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã‚りã€ã“ã®ã‚ªãƒ–ジェクトå㯠`numpad.h` ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãƒžã‚¯ãƒ­ã®åå‰ã¨ä¸€è‡´ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚`LAYOUT` オブジェクト自体ã«ã¯ `layout` ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã‚りã¾ã™ã€‚ã“ã®ã‚ªãƒ–ジェクトã«ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ç‰©ç†ã‚­ãƒ¼ã”ã¨ã« 1ã¤ã® JSON オブジェクトãŒä»¥ä¸‹ã®å½¢å¼ã§å«ã¾ã‚Œã¦ã„ã¾ã™:
136
137```
138 キーã®åå‰ã€‚Configurator ã§ã¯è¡¨ç¤ºã•れã¾ã›ã‚“。
139 |
140 | キーボードã®å·¦ç«¯ã‹ã‚‰ã®ã‚­ãƒ¼å˜ä½ã§ã®
141 | | キー㮠X 軸ã®ä½ç½®ã€‚
142 | |
143 | | キーボードã®ä¸Šç«¯(奥å´)ã‹ã‚‰ã®ã‚­ãƒ¼å˜ä½ã§ã®
144 | | | キー㮠Y 軸ä½ç½®ã€‚
145 ↓ ↓ ↓
146{"label":"Num Lock", "x":0, "y":0},
147```
148
149一部ã®ã‚ªãƒ–ジェクトã«ã¯ã€ãれãžã‚Œã‚­ãƒ¼ã®å¹…ã¨é«˜ã•を表㙠`"w"` 属性キー㨠`"h"` 属性キーãŒã‚りã¾ã™ã€‚
150
151?> `info.json` ファイルã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€[`info.json` å½¢å¼](ja/reference_info_json.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
152
153
154## Configurator ãŒã‚­ãƒ¼ã‚’プログラムã™ã‚‹æ–¹æ³•
155
156Configurator ã® API ã¯ã€æŒ‡å®šã•れãŸãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãƒžã‚¯ãƒ­ã¨ JSON ファイルを使ã£ã¦ã€ç‰¹å®šã®ã‚­ãƒ¼ã«é–¢é€£ä»˜ã‘られãŸå„ãƒ“ã‚¸ãƒ¥ã‚¢ãƒ«ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é †ç•ªã«æŒã¤ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒ“ジュアル表ç¾ã‚’作æˆã—ã¾ã™:
157
158| レイアウトマクロã®ã‚­ãƒ¼ | 使用ã•れる JSON オブジェクト |
159:---: | :----
160| k00 | {"label":"Num Lock", "x":0, "y":0} |
161| k01 | {"label":"/", "x":1, "y":0} |
162| k02 | {"label":"*", "x":2, "y":0} |
163| k03 | {"label":"-", "x":3, "y":0} |
164| k10 | {"label":"7", "x":0, "y":1} |
165| k11 | {"label":"8", "x":1, "y":1} |
166| k12 | {"label":"9", "x":2, "y":1} |
167| k13 | {"label":"+", "x":3, "y":1, "h":2} |
168| k20 | {"label":"4", "x":0, "y":2} |
169| k21 | {"label":"5", "x":1, "y":2} |
170| k22 | {"label":"6", "x":2, "y":2} |
171| k30 | {"label":"1", "x":0, "y":3} |
172| k31 | {"label":"2", "x":1, "y":3} |
173| k32 | {"label":"3", "x":2, "y":3} |
174| k33 | {"label":"Enter", "x":3, "y":3, "h":2} |
175| k40 | {"label":"0", "x":0, "y":4, "w":2} |
176| k42 | {"label":".", "x":2, "y":4} |
177
178ユーザ㌠Configurator ã§å·¦ä¸Šã®ã‚­ãƒ¼ã‚’é¸æŠžã—ã€Num Lock を割り当ã¦ã‚‹ã¨ã€Configurator ã¯æœ€åˆã®ã‚­ãƒ¼ã¨ã—㦠`KC_NLCK` ã‚’æŒã¤ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã€åŒæ§˜ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—ãŒä½œæˆã•れã¾ã™ã€‚`label` キーã¯ä½¿ã‚れã¾ã›ã‚“; ãれら㯠`info.json` ファイルをデãƒãƒƒã‚°ã™ã‚‹æ™‚ã«ç‰¹å®šã®ã‚­ãƒ¼ã‚’識別ã™ã‚‹ãŸã‚ã®ãƒ¦ãƒ¼ã‚¶ã®å‚ç…§ã®ãŸã‚ã ã‘ã®ã‚‚ã®ã§ã™ã€‚
179
180
181## å•題ã¨å±é™º
182
183ç¾åœ¨ã®ã¨ã“ã‚ã€Configurator ã¯ã‚­ãƒ¼ã®å›žè»¢ã¾ãŸã¯ ISO Enter ãªã©ã®é•·æ–¹å½¢ã§ã¯ãªã„キーをサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。ã•らã«ã€"行"ã‹ã‚‰åž‚ç›´æ–¹å‘ã«ãšã‚Œã¦ã„るキーã€&mdash; é¡•è‘—ãªä¾‹ã¨ã—㦠[TKC1800](https://github.com/qmk/qmk_firmware/tree/4ac48a61a66206beaf2fdd5f2939d8bbedd0004c/keyboards/tkc1800/) ã®ã‚ˆã†ãª1800レイアウト上ã®çŸ¢å°ã‚­ãƒ¼ &mdash; ã¯ã€ `info.json` ãƒ•ã‚¡ã‚¤ãƒ«ã®æä¾›è€…ã«ã‚ˆã£ã¦èª¿æ•´ã•れã¦ã„ãªã„å ´åˆã¯ã€KLE-to-JSON コンãƒãƒ¼ã‚¿ã‚’æ··ä¹±ã•ã›ã¾ã™ã€‚
184
185### 回é¿ç­–
186
187#### 長方形ã§ã¯ãªã„キー
188
189ISO Enter キーã«ã¤ã„ã¦ã¯ã€QMK custom ã¯å¹… 1.25uã€é«˜ã• 2u ã®é•·æ–¹å½¢ã®ã‚­ãƒ¼ã¨ã—ã¦è¡¨ç¤ºã—ã€å³ç«¯ãŒè‹±æ•°å­—キーブロックã®å³ç«¯ã«æƒã†ã‚ˆã†ã«é…ç½®ã•れã¾ã™ã€‚
190
191![](https://i.imgur.com/JKngtTw.png)
192*QMK Configurator ã«ã‚ˆã£ã¦æç”»ã•れる標準 ISO レイアウトã®60%キーボード。*
193
194#### 垂直方å‘ã«ãšã‚ŒãŸã‚­ãƒ¼
195
196垂直方å‘ã«ãšã‚ŒãŸã‚­ãƒ¼ã«ã¤ã„ã¦ã¯ã€ãšã‚Œã¦ã„ãªã„ã‹ã®ã‚ˆã†ã« KLE ã§é…ç½®ã—ã€å¤‰æ›ã•れ㟠JSON ファイルã§å¿…è¦ã«å¿œã˜ã¦ Y 値を編集ã—ã¾ã™ã€‚
197
198![](https://i.imgur.com/fmDvDzR.png)
199*矢å°ã‚­ãƒ¼ã«é©ç”¨ã•れる垂直方å‘ã®ãšã‚Œã®ãªã„ã€Keyboard Layout Editor ã§æç”»ã•れãŸ1800レイアウトã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã€‚*
200
201![](https://i.imgur.com/8beYMBR.png)
202*キーボード㮠JSON ファイルã§çŸ¢å°ã‚­ãƒ¼ã‚’垂直方å‘ã«ãšã‚‰ã™ãŸã‚ã«å¿…è¦ãªå¤‰æ›´ã‚’示ã™ã€Unix ã® diff ファイル。*
diff --git a/docs/ja/reference_glossary.md b/docs/ja/reference_glossary.md
new file mode 100644
index 000000000..19791206f
--- /dev/null
+++ b/docs/ja/reference_glossary.md
@@ -0,0 +1,173 @@
1# QMK 用語集
2
3<!---
4 original document: 0.9.46:docs/reference_glossary.md
5 git diff 0.9.46 HEAD -- docs/reference_glossary.md | cat
6-->
7
8## ARM
9Atmelã€Cypressã€Kinetisã€NXPã€STã€TI ãªã©å¤šãã®ä¼æ¥­ãŒç”Ÿç”£ã™ã‚‹ 32 ビット MCU ã®ãƒ©ã‚¤ãƒ³ã€‚
10
11## AVR
12[Atmel](http://www.microchip.com/) ãŒç”Ÿç”£ã™ã‚‹ 8 ビット MCU ã®ãƒ©ã‚¤ãƒ³ã€‚AVR 㯠TMK ãŒã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãŸå…ƒã®ãƒ—ラットフォームã§ã—ãŸã€‚
13
14## AZERTY
15標準的㪠Français (フランス) ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€‚ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æœ€åˆã®6ã¤ã®ã‚­ãƒ¼ã‹ã‚‰å‘½åã•れã¾ã—ãŸã€‚
16
17## ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆ
18キーボードã®ãƒ©ã‚¤ãƒˆã®ç·ç§°ã€‚ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆãŒä¸€èˆ¬çš„ã§ã™ãŒã€ãれã ã‘ã§ã¯ãªãã€ã‚­ãƒ¼ã‚­ãƒ£ãƒƒãƒ—ã‚ã‚‹ã„ã¯ã‚¹ã‚¤ãƒƒãƒã‚’通ã—ã¦å…‰ã‚‹ LED ã®é…列。
19
20## Bluetooth
21短è·é›¢ã®ãƒ”アツーピア無線プロトコル。キーボード用ã®ã‚‚ã£ã¨ã‚‚一般的ãªãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ãƒ—ロトコル。
22
23## ブートローダ
24MCU ã®ä¿è­·é ˜åŸŸã«æ›¸ãè¾¼ã¾ã‚Œã‚‹ç‰¹åˆ¥ãªãƒ—ログラムã§ã€MCU ãŒç‹¬è‡ªã®ãƒ•ァームウェアを通常㯠USB 経由ã§ã‚¢ãƒƒãƒ—グレードã§ãるよã†ã«ã—ã¾ã™ã€‚
25
26## ブートマジック
27よãã‚るキーã®äº¤æ›ã‚ã‚‹ã„ã¯ç„¡åŠ¹åŒ–ãªã©ã€æ§˜ã€…ãªã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æŒ™å‹•ã®å¤‰æ›´ã‚’ãã®å ´ã§å®Ÿè¡Œã§ãる機能。
28
29## C
30システムコードã«é©ã—ãŸä½Žãƒ¬ãƒ™ãƒ«ãƒ—ログラミング言語。QMK ã®ã»ã¨ã‚“ã©ã®ã‚³ãƒ¼ãƒ‰ã¯ C ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚
31
32## Colemak
33人気ãŒå‡ºå§‹ã‚ã¦ã„る代替キーボードレイアウト。
34
35## コンパイル
36人間ãŒèª­ã‚るコードを MCU ãŒå®Ÿè¡Œã§ãるマシンコードã«å¤‰æ›ã™ã‚‹ãƒ—ロセス。
37
38## Dvorak
391930年代㫠Dr. August Dvorak ã«ã‚ˆã£ã¦é–‹ç™ºã•れãŸä»£æ›¿ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€‚Dvorak Simplified Keyboard ã®çŸ­ç¸®å½¢ã€‚
40
41## 動的マクロ
42キーボードã«è¨˜éŒ²ã•れãŸãƒžã‚¯ãƒ­ã§ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒ—ラグを抜ãã‹ã€ã‚³ãƒ³ãƒ”ュータをå†èµ·å‹•ã™ã‚‹ã¨å¤±ã‚れã¾ã™ã€‚
43
44* [動的マクロドキュメント](ja/feature_dynamic_macros.md)
45
46## Eclipse
47多ãã® C 開発者ã«äººæ°—ã®ã‚ã‚‹ IDE。
48
49* [Eclipse セットアップ手順](ja/other_eclipse.md)
50
51## ファームウェア
52MCU を制御ã™ã‚‹ã‚½ãƒ•トウェア
53
54## git
55コマンドラインã§ä½¿ç”¨ã•れるãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚½ãƒ•トウェア
56
57## GitHub
58QMK プロジェクトã®ã»ã¨ã‚“ã©ã‚’ホストã™ã‚‹ Web サイト。gitã€èª²é¡Œç®¡ç†ã€ãŠã‚ˆã³ QMK ã®å®Ÿè¡Œã«å½¹ç«‹ã¤ãã®ä»–ã®æ©Ÿèƒ½ã‚’çµ±åˆã—ã¦æä¾›ã—ã¾ã™ã€‚
59
60## ISP
61インシステムプログラミング。外部ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã¨ JTAG ピンを使ã£ã¦ AVR ãƒãƒƒãƒ—をプログラミングã™ã‚‹æ–¹æ³•。
62
63## hid_listen
64キーボードã‹ã‚‰ãƒ‡ãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ä¿¡ã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ェース。[QMK Flasher](https://github.com/qmk/qmk_flasher) ã‚ã‚‹ã„㯠[PJRC ã® hid_listen](https://www.pjrc.com/teensy/hid_listen.html) を使ã£ã¦ã“れらã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚
65
66## キーコード
67特定ã®ã‚­ãƒ¼ã‚’表ã™2ãƒã‚¤ãƒˆã®æ•°å€¤ã€‚`0x00`-`0xFF` ã¯[基本キーコード](ja/keycodes_basic.md)ã«ä½¿ã‚れã€`0x100`-`0xFFFF` 㯠[Quantum キーコード](ja/quantum_keycodes.md) ã«ä½¿ã‚れã¾ã™ã€‚
68
69## キーダウン
70ã‚­ãƒ¼ãŒæŠ¼ã•ã‚ŒãŸæ™‚ã«ç™ºç”Ÿã—ã€ã‚­ãƒ¼ãŒæ”¾ã•れるå‰ã«å®Œäº†ã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆã€‚
71
72## キーアップ
73ã‚­ãƒ¼ãŒæ”¾ã•ã‚ŒãŸæ™‚ã«ç™ºç”Ÿã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆã€‚
74
75## キーマップ
76物ç†çš„ãªã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã«ãƒžãƒƒãƒ—ã•れãŸã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®é…åˆ—ã€‚ã‚­ãƒ¼ã®æŠ¼ä¸‹ãŠã‚ˆã³ãƒªãƒªãƒ¼ã‚¹æ™‚ã«å‡¦ç†ã•れã¾ã™ã€‚
77
78## レイヤー
791ã¤ã®ã‚­ãƒ¼ãŒè¤‡æ•°ã®ç›®çš„ã‚’æžœãŸã™ãŸã‚ã«ä½¿ã‚れる抽象化。最上ä½ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ¬ã‚¤ãƒ¤ãƒ¼ãŒå„ªå…ˆã•れã¾ã™ã€‚
80
81## リーダーキー
82リーダーキーã«ç¶šã‘ã¦1, 2 ã‚ã‚‹ã„ã¯3ã¤ã®ã‚­ãƒ¼ã‚’タップã™ã‚‹ã“ã¨ã§ã€ã‚­ãƒ¼ã®æŠ¼ä¸‹ã‚ã‚‹ã„ã¯ä»–ã® quantum 機能をアクティブã«ã™ã‚‹æ©Ÿèƒ½ã€‚
83
84* [リーダーキードキュメント](ja/feature_leader_key.md)
85
86## LED
87発光ダイオード。キーボードã®è¡¨ç¤ºã«ä½¿ã‚れる最も一般的ãªãƒ‡ãƒã‚¤ã‚¹ã€‚
88
89## Make
90å…¨ã¦ã®ã‚½ãƒ¼ã‚¹ãƒ•ァイルをコンパイルã™ã‚‹ãŸã‚ã«ä½¿ã‚れるソフトウェアパッケージ。キーボードファームウェアをコンパイルã™ã‚‹ãŸã‚ã«ã€æ§˜ã€…ãªã‚ªãƒ—ションを指定ã—㦠`make` を実行ã—ã¾ã™ã€‚
91
92## マトリックス
93MCU ãŒã‚ˆã‚Šå°‘ãªã„ピン数ã§ã‚­ãƒ¼æŠ¼ä¸‹ã‚’検出ã§ãるよã†ã«ã™ã‚‹åˆ—ã¨è¡Œã®é…線パターン。マトリックスã«ã¯å¤šãã®å ´åˆã€NKRO ã‚’å¯èƒ½ã«ã™ã‚‹ãŸã‚ã®ãƒ€ã‚¤ã‚ªãƒ¼ãƒ‰ãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™ã€‚
94
95## マクロ
96å˜ä¸€ã®ã‚­ãƒ¼ã®ã¿ã‚’押ã—ãŸå¾Œã§ã€è¤‡æ•°ã®ã‚­ãƒ¼æŠ¼ä¸‹ã‚¤ãƒ™ãƒ³ãƒˆ (HID レãƒãƒ¼ãƒˆ) ã‚’é€ä¿¡ã§ãる機能。
97
98* [マクロドキュメント](ja/feature_macros.md)
99
100## MCU
101マイクロコントロールユニット。キーボードを動ã‹ã™ãƒ—ロセッサ。
102
103## モディファイア
104別ã®ã‚­ãƒ¼ã‚’入力ã™ã‚‹é–“押ã—ãŸã¾ã¾ã«ã—ã¦ã€ãã®ã‚­ãƒ¼ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’変更ã™ã‚‹ã‚­ãƒ¼ã€‚例ã¨ã—ã¦ã€Ctrlã€Alt ãŠã‚ˆã³ Shift ãŒã‚りã¾ã™ã€‚
105(訳注:モディファイヤã€ãƒ¢ãƒ‡ã‚£ãƒ•ァイヤキーã€ä¿®é£¾ã‚­ãƒ¼ãªã©ã€è¨³èªžãŒçµ±ä¸€ã•れã¦ã„ã¾ã›ã‚“ãŒåŒã˜ã‚‚ã®ã§ã™)
106
107## マウスキー
108キーボードã‹ã‚‰ãƒžã‚¦ã‚¹ã‚«ãƒ¼ã‚½ãƒ«ã‚’制御ã—ã€ã‚¯ãƒªãƒƒã‚¯ã§ãる機能。
109
110* [マウスキードキュメント](ja/feature_mouse_keys.md)
111
112## N キーロールオーãƒãƒ¼ (NKRO)
113一度ã«ä»»æ„ã®æ•°ã®ã‚­ãƒ¼ã®æŠ¼ä¸‹ã‚’é€ä¿¡ã§ãるキーボードã«å½“ã¦ã¯ã¾ã‚‹ç”¨èªžã€‚
114
115## ワンショットモディファイア
116別ã®ã‚­ãƒ¼ãŒæ”¾ã•れるã¾ã§æŠ¼ã•れã¦ã„ã‚‹ã‹ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ãƒ¢ãƒ‡ã‚£ãƒ•ァイア。キーを押ã—ã¦ã„ã‚‹é–“ã« mod を押ã—ç¶šã‘ã‚‹ã®ã§ã¯ãªãã€mod を押ã—ã¦ã‹ã‚‰ã‚­ãƒ¼ã‚’押ã™ã“ã¨ãŒã§ãã¾ã™ã€‚スティッキーキーã¾ãŸã¯ãƒ‡ãƒƒãƒ‰ã‚­ãƒ¼ã¨ã‚‚呼ã³ã¾ã™ã€‚
117
118## ProMicro
119低コスト㮠AVR 開発ボード。ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã¯ ebay ã§éžå¸¸ã«å®‰ä¾¡(5ドル未満)ã«è¦‹ã¤ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ãŒã€å¤šãã®å ´åˆ pro micro ã®æ›¸ãè¾¼ã¿ã«è‹¦åŠ´ã—ã¾ã™ã€‚
120
121## プルリクエスト
122QMK ã«ã‚³ãƒ¼ãƒ‰ã‚’é€ä¿¡ã™ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆã€‚å…¨ã¦ã®ãƒ¦ãƒ¼ã‚¶ãŒå€‹äººã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ãƒ—ルリクエストをé€ä¿¡ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚
123
124## QWERTY
125標準ã®è‹±èªžã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€‚多ãã®å ´åˆã€ä»–ã®è¨€èªžã®æ¨™æº–レイアウトã¸ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã€‚ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æœ€åˆã®6文字ã‹ã‚‰å‘½åã•れã¾ã—ãŸã€‚
126
127## QWERTZ
128標準的㪠Deutsche (ドイツ語) ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€‚ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æœ€åˆã®6文字ã‹ã‚‰å‘½åã•れã¾ã—ãŸã€‚
129
130## ロールオーãƒãƒ¼
131ã‚­ãƒ¼ãŒæ—¢ã«æŠ¼ã•れã¦ã„ã‚‹é–“ã«ã‚­ãƒ¼ã‚’押ã™ã“ã¨ã‚’指ã™ç”¨èªžã€‚ä¼¼ãŸã‚‚ã®ã« 2KROã€6KROã€NKRO ãŒå«ã¾ã‚Œã¾ã™ã€‚
132
133## スキャンコード
134å˜ä¸€ã®ã‚­ãƒ¼ã‚’表㙠USB 経由㮠HID レãƒãƒ¼ãƒˆã®ä¸€éƒ¨ã¨ã—ã¦é€ä¿¡ã•れる1ãƒã‚¤ãƒˆã®æ•°å€¤ã€‚ã“れらã®å€¤ã¯ã€[USB-IF](http://www.usb.org/) ãŒç™ºè¡Œã™ã‚‹ [HID Usage Tables](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf) ã«è¨˜è¼‰ã•れã¦ã„ã¾ã™ã€‚
135
136## スペースカデットシフト
137å·¦ã¾ãŸã¯å³ shift ã‚’1回以上タップã™ã‚‹ã“ã¨ã§ã€æ§˜ã€…ãªã‚¿ã‚¤ãƒ—ã®æ‹¬å¼§ã‚’入力ã§ãる特別㪠shift キーã®ã‚»ãƒƒãƒˆã€‚
138
139* [スペースカデットシフトドキュメント](ja/feature_space_cadet_shift.md)
140
141## タップ
142キーを押ã—ã¦æ”¾ã™ã€‚状æ³ã«ã‚ˆã£ã¦ã¯ã‚­ãƒ¼ãƒ€ã‚¦ãƒ³ã‚¤ãƒ™ãƒ³ãƒˆã¨ã‚­ãƒ¼ã‚¢ãƒƒãƒ—イベントを区別ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ãŒã€ã‚¿ãƒƒãƒ—ã¯å¸¸ã«ä¸¡æ–¹ã‚’ä¸€åº¦ã«æŒ‡ã—ã¾ã™ã€‚
143
144## タップダンス
145押ã™å›žæ•°ã«åŸºã¥ã„ã¦ã€åŒã˜ã‚­ãƒ¼ã«è¤‡æ•°ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’割り当ã¦ã‚‹ã“ã¨ãŒã§ãる機能。
146
147* [タップダンスドキュメント](ja/feature_tap_dance.md)
148
149## Teensy
150手é…ç·šã§ã®çµ„ã¿ç«‹ã¦ã«ã‚ˆã用ã„られる低コスト㮠AVR 開発ボード。halfkay ブートローダã«ã‚ˆã£ã¦æ›¸ãè¾¼ã¿ãŒéžå¸¸ã«ç°¡å˜ã«ãªã‚‹ãŸã‚ã«ã€æ•°ãƒ‰ãƒ«é«˜ã„ã«ã‚‚ã‹ã‹ã‚ら㚠teensy ãŒã—ã°ã—ã°é¸æŠžã•れã¾ã™ã€‚
151
152## アンダーライト
153キーボードã®ä¸‹å´ã‚’照ら㙠LED ã®ç·ç§°ã€‚ã“れら㮠LED ã¯é€šå¸¸ PCB ã®åº•é¢ã‹ã‚‰ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒç½®ã‹ã‚Œã¦ã„る表é¢ã«å‘ã‘ã¦ç…§ã‚‰ã—ã¾ã™ã€‚
154
155## ユニコード
156å¤§è¦æ¨¡ãªã‚³ãƒ³ãƒ”ュータã®ä¸–界ã§ã¯ã€ãƒ¦ãƒ‹ã‚³ãƒ¼ãƒ‰ã¯ä»»æ„ã®è¨€èªžã§æ–‡å­—を表ç¾ã™ã‚‹ãŸã‚ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰æ–¹å¼ã®ã‚»ãƒƒãƒˆã§ã™ã€‚QMK ã«é–¢ã—ã¦ã¯ã€æ§˜ã€…㪠OS スキームを使ã£ã¦ã‚¹ã‚­ãƒ£ãƒ³ã‚³ãƒ¼ãƒ‰ã®ä»£ã‚りã«ãƒ¦ãƒ‹ã‚³ãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚
157
158* [ユニコードドキュメント](ja/feature_unicode.md)
159
160## å˜ä½“テスト
161QMK ã«å¯¾ã—ã¦è‡ªå‹•テストを実行ã™ã‚‹ãŸã‚ã®ãƒ•レームワーク。å˜ä½“テストã¯ã€å¤‰æ›´ãŒä½•も壊ã•ãªã„ã“ã¨ã‚’確信ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚
162
163* [å˜ä½“テストドキュメント](ja/unit_testing.md)
164
165## USB
166ユニãƒãƒ¼ã‚µãƒ«ã‚·ãƒªã‚¢ãƒ«ãƒã‚¹ã€‚ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ç”¨ã®æœ€ã‚‚ä¸€èˆ¬çš„ãªæœ‰ç·šã‚¤ãƒ³ã‚¿ãƒ•ェース。
167
168## USB ホスト (ã‚ã‚‹ã„ã¯å˜ã«ãƒ›ã‚¹ãƒˆ)
169USB ホストã¯ã€ã‚ãªãŸã®ã‚³ãƒ³ãƒ”ュータã€ã¾ãŸã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒå·®ã—è¾¼ã¾ã‚Œã¦ã„るデãƒã‚¤ã‚¹ã®ã“ã¨ã§ã™ã€‚
170
171# 探ã—ã¦ã„る用語ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã‹ï¼Ÿ
172
173質å•ã«ã¤ã„ã¦ã® [issue ã‚’é–‹ã„ã¦](https://github.com/qmk/qmk_firmware/issues) ã€è³ªå•ã—ãŸç”¨èªžã«ã¤ã„ã¦ã“ã“ã«è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã•らã«è‰¯ã„ã®ã¯ã€å®šç¾©ã«ã¤ã„ã¦ã®ãƒ—ルリクエストを開ãã“ã¨ã§ã™ã€‚:)
diff --git a/docs/ja/reference_info_json.md b/docs/ja/reference_info_json.md
new file mode 100644
index 000000000..708f7c19a
--- /dev/null
+++ b/docs/ja/reference_info_json.md
@@ -0,0 +1,78 @@
1# `info.json`
2
3<!---
4 original document: 0.9.46:docs/reference_info_json.md
5 git diff 0.9.46 HEAD -- docs/reference_info_json.md | cat
6-->
7
8ã“ã®ãƒ•ァイル㯠[QMK API](https://github.com/qmk/qmk_api) ã«ã‚ˆã£ã¦ä½¿ã‚れã¾ã™ã€‚ã“ã®ãƒ•ァイル㯠[QMK Configurator](https://config.qmk.fm/) ãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ç”»åƒã‚’表示ã™ã‚‹ãŸã‚ã«å¿…è¦ãªæƒ…報をå«ã‚“ã§ã„ã¾ã™ã€‚ã“ã“ã«ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
9
10ã“ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’指定ã™ã‚‹ãŸã‚ã«ã€`qmk_firmware/keyboards/<name>` ã®ä¸‹ã®å…¨ã¦ã®ãƒ¬ãƒ™ãƒ«ã§ `info.json` を作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れらã®ãƒ•ァイルã¯çµåˆã•れã€ã‚ˆã‚Šå…·ä½“çš„ãªãƒ•ァイルãŒãã†ã§ã¯ãªã„ファイルã®ã‚­ãƒ¼ã‚’上書ãã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿æƒ…報を複製ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。例ãˆã°ã€`qmk_firmware/keyboards/clueboard/info.json` 㯠`manufacturer` ãŠã‚ˆã³ `maintainer` を指定ã—ã€`qmk_firmware/keyboards/clueboard/66/info.json` 㯠Clueboard 66% ã«ã¤ã„ã¦ã®ã‚ˆã‚Šå…·ä½“çš„ãªæƒ…報を指定ã—ã¾ã™ã€‚
11
12## `info.json` ã®å½¢å¼
13
14`info.json` ファイルã¯è¨­å®šå¯èƒ½ãªä»¥ä¸‹ã®ã‚­ãƒ¼ã‚’æŒã¤ JSON å½¢å¼ã®è¾žæ›¸ã§ã™ã€‚å…¨ã¦ã‚’設定ã™ã‚‹å¿…è¦ã¯ãªãã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«é©ç”¨ã™ã‚‹ã‚­ãƒ¼ã ã‘を設定ã—ã¾ã™ã€‚
15
16* `keyboard_name`
17 * キーボードを説明ã™ã‚‹è‡ªç”±å½¢å¼ã®ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列。
18 * 例: `Clueboard 66%`
19* `url`
20 * キーボードã®è£½å“ページã€[QMK.fm/keyboards](https://qmk.fm/keyboards) ã®ãƒšãƒ¼ã‚¸ã€ã‚ã‚‹ã„ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«é–¢ã™ã‚‹æƒ…報を説明ã™ã‚‹ä»–ã®ãƒšãƒ¼ã‚¸ã® URL。
21* `maintainer`
22 * メンテナ㮠GitHub ã®ãƒ¦ãƒ¼ã‚¶åã€ã‚ã‚‹ã„ã¯ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒç®¡ç†ã™ã‚‹ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å ´åˆã¯ `qmk`
23* `width`
24 * キーå˜ä½ã§ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å¹…
25* `height`
26 * キーå˜ä½ã§ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®é«˜ã•
27* `layouts`
28 * 物ç†çš„ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆè¡¨ç¾ã€‚詳細ã¯ä»¥ä¸‹ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¦ãã ã•ã„。
29
30### レイアウトã®å½¢å¼
31
32`info.json` ファイル内ã®è¾žæ›¸ã® `layouts` 部分ã¯ã€å¹¾ã¤ã‹ã®å…¥ã‚Œå­ã«ãªã£ãŸè¾žæ›¸ã‚’å«ã¿ã¾ã™ã€‚外å´ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã¯ QMK ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãƒžã‚¯ãƒ­ã§æ§‹æˆã•れã¾ã™ã€‚例ãˆã°ã€`LAYOUT_ansi` ã‚ã‚‹ã„㯠`LAYOUT_iso`。å„レイアウトマクロ内ã«ã¯ã€`width`〠`height`ã€`key_count` ã®ã‚­ãƒ¼ãŒã‚りã¾ã™ã€‚ã“れらã¯è‡ªæ˜Žã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
33
34* `width`
35 * オプション: キーå˜ä½ã§ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®å¹…
36* `height`
37 * オプション: キーå˜ä½ã§ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®é«˜ã•
38* `key_count`
39 * **å¿…é ˆ**: ã“ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®ã‚­ãƒ¼ã®æ•°
40* `layout`
41 * 物ç†ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’説明ã™ã‚‹ã‚­ãƒ¼è¾žæ›¸ã®ãƒªã‚¹ãƒˆã€‚è©³ç´°ã¯æ¬¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’見ã¦ãã ã•ã„。
42
43### キー辞書形å¼
44
45レイアウトã®å„キー辞書ã¯ã€ã‚­ãƒ¼ã®ç‰©ç†ãƒ—ロパティを記述ã—ã¾ã™ã€‚<http://keyboard-layout-editor.com> ã® Raw Code ã«ç²¾é€šã—ã¦ã„ã‚‹å ´åˆã€å¤šãã®æ¦‚念ãŒåŒã˜ã§ã‚ã‚‹ã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã™ã€‚å¯èƒ½ãªé™ã‚ŠåŒã˜ã‚­ãƒ¼åã¨ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®é¸æŠžã‚’å†åˆ©ç”¨ã—ã¾ã™ãŒã€keyboard-layout-editor ã¨ã¯ç•°ãªã£ã¦å„キーã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ã§ã€å‰ã®ã‚­ãƒ¼ã‹ã‚‰ãƒ—ロパティを継承ã—ã¾ã›ã‚“。
46
47å…¨ã¦ã®ã‚­ãƒ¼ã®ä½ç½®ã¨å›žè»¢ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å·¦ä¸Šã¨ã€å„キーã®å·¦ä¸Šã‚’基準ã«ã—ã¦æŒ‡å®šã•れã¾ã™ã€‚
48
49* `x`
50 * **å¿…é ˆ**: 水平軸ã§ã®ã‚­ãƒ¼ã®çµ¶å¯¾ä½ç½®(キーå˜ä½)。
51* `y`
52 * **å¿…é ˆ**: 垂直軸ã§ã®ã‚­ãƒ¼ã®çµ¶å¯¾ä½ç½®(キーå˜ä½)。
53* `w`
54 * キーå˜ä½ã§ã®ã‚­ãƒ¼ã®å¹…。`ks` ãŒæŒ‡å®šã•れãŸå ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚デフォルト: `1`
55* `h`
56 * キーå˜ä½ã§ã®ã‚­ãƒ¼ã®é«˜ã•。`ks` ãŒæŒ‡å®šã•れãŸå ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚デフォルト: `1`
57* `r`
58 * キーを回転ã•ã›ã‚‹æ™‚計回りã®è§’度。
59* `rx`
60 * キーを回転ã•ã›ã‚‹ç‚¹ã®æ°´å¹³è»¸ã«ãŠã‘る絶対ä½ç½®ã€‚デフォルト: `x`
61* `ry`
62 * キーを回転ã•ã›ã‚‹ç‚¹ã®åž‚直軸ã«ãŠã‘る絶対ä½ç½®ã€‚デフォルト: `y`
63* `ks`
64 * キー形状: キーå˜ä½ã§é ‚点を列挙ã™ã‚‹ã“ã¨ã§ãƒãƒªã‚´ãƒ³ã‚’定義ã—ã¾ã™ã€‚
65 * **é‡è¦**: ã“れらã¯ã‚­ãƒ¼ã®å·¦ä¸Šã‹ã‚‰ã®ç›¸å¯¾ä½ç½®ã§ã€çµ¶å¯¾ä½ç½®ã§ã¯ã‚りã¾ã›ã‚“。
66 * ISO Enter ã®ä¾‹: `[ [0,0], [1.5,0], [1.5,2], [0.25,2], [0.25,1], [0,1], [0,0] ]`
67* `label`
68 * マトリックス内ã®ã“ã®ä½ç½®ã«ã¤ã‘ã‚‹åå‰ã€‚
69 * ã“れã¯é€šå¸¸ PCB 上ã§ã“ã®ä½ç½®ã«ã‚·ãƒ«ã‚¯ã‚¹ã‚¯ãƒªãƒ¼ãƒ³å°åˆ·ã•れるもã®ã¨åŒã˜åå‰ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
70
71## メタデータã¯ã©ã®ã‚ˆã†ã«å…¬é–‹ã•れã¾ã™ã‹ï¼Ÿ
72
73ã“ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã¯ä¸»ã«2ã¤ã®æ–¹æ³•ã§ä½¿ã‚れã¾ã™:
74
75* Web ベース㮠configurator ãŒå‹•的㫠UI を生æˆã§ãるよã†ã«ã™ã‚‹ã€‚
76* æ–°ã—ã„ `make keyboard:keymap:qmk` ターゲットをサãƒãƒ¼ãƒˆã™ã‚‹ã€‚ã“れã¯ã€ã“ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’ファームウェアã«ãƒãƒ³ãƒ‰ãƒ«ã—㦠QMK Toolbox をよりスマートã«ã—ã¾ã™ã€‚
77
78Configurator ã®ä½œæˆè€…ã¯ã€JSON API ã®ä½¿ç”¨ã«é–¢ã™ã‚‹è©³ç´°ã«ã¤ã„ã¦ã€[QMK Compiler](https://docs.api.qmk.fm/using-the-api) ドキュメントをå‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
diff --git a/docs/ja/serial_driver.md b/docs/ja/serial_driver.md
new file mode 100644
index 000000000..72071f4f7
--- /dev/null
+++ b/docs/ja/serial_driver.md
@@ -0,0 +1,75 @@
1# 'シリアル' ドライãƒ
2
3<!---
4 original document: 0.9.51:docs/serial_drive.md
5 git diff 0.9.51 HEAD -- docs/serial_drive.md | cat
6-->
7
8ã“ã®ãƒ‰ãƒ©ã‚¤ãƒã¯[分割キーボード](ja/feature_split_keyboard.md) 機能ã«ä½¿ã„ã¾ã™ã€‚
9
10?> ã“ã®æ–‡ç« ã§ã®ã‚·ãƒªã‚¢ãƒ«ã¯ã€UART/USART/RS485/RS232 è¦æ ¼ã®å®Ÿè£…ã§ã¯ãªãã€**一度ã«1ãƒ“ãƒƒãƒˆã®æƒ…報をé€ä¿¡ã™ã‚‹ã‚‚ã®**ã¨ã—ã¦èª­ã¾ã‚Œã‚‹ã¹ãã§ã™ã€‚
11
12ã“ã®ã‚«ãƒ†ã‚´ãƒªã®å…¨ã¦ã®ãƒ‰ãƒ©ã‚¤ãƒã«ã¯ä»¥ä¸‹ã®ç‰¹å¾´ãŒã‚りã¾ã™:
13* 1本ã®ç·šä¸Šã§ãƒ‡ãƒ¼ã‚¿ã¨ä¿¡å·ã‚’æä¾›
14* シングルマスタã€ã‚·ãƒ³ã‚°ãƒ«ã‚¹ãƒ¬ãƒ¼ãƒ–ã«é™å®š
15
16## サãƒãƒ¼ãƒˆã•れるドライãƒã®ç¨®é¡ž
17
18| | AVR | ARM |
19|-------------------|--------------------|--------------------|
20| bit bang | :heavy_check_mark: | :heavy_check_mark: |
21| USART Half-duplex | | :heavy_check_mark: |
22
23## ドライãƒè¨­å®š
24
25### Bitbang
26デフォルトã®ãƒ‰ãƒ©ã‚¤ãƒã€‚設定ãŒãªã„å ´åˆã¯ã“ã®ãƒ‰ãƒ©ã‚¤ãƒãŒæƒ³å®šã•れã¾ã™ã€‚設定ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’ rules.mk ã«è¿½åŠ ã—ã¾ã™:
27
28```make
29SERIAL_DRIVER = bitbang
30```
31
32config.h を介ã—ã¦ãƒ‰ãƒ©ã‚¤ãƒã‚’設定ã—ã¾ã™:
33```c
34#define SOFT_SERIAL_PIN D0 // ã¾ãŸã¯ D1, D2, D3, E6
35#define SELECT_SOFT_SERIAL_SPEED 1 // ã¾ãŸã¯ 0, 2, 3, 4, 5
36 // 0: ç´„ 189kbps (実験目的ã®ã¿)
37 // 1: 約 137kbps (デフォルト)
38 // 2: ç´„ 75kbps
39 // 3: ç´„ 39kbps
40 // 4: ç´„ 26kbps
41 // 5: ç´„ 20kbps
42```
43
44#### ARM
45
46!> bitbang ドライãƒã¯ bitbang WS2812 ドライãƒã¨æŽ¥ç¶šã®å•題ãŒã‚りã¾ã™
47
48上記ã®ä¸€èˆ¬çš„ãªã‚ªãƒ—ションã«åŠ ãˆã¦ã€halconf.h ã§ `PAL_USE_CALLBACKS` 機能もオンã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
49
50### USART Half-duplex
51通信㌠USART ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ‡ãƒã‚¤ã‚¹ã«é€ä¿¡ã•れる STM32 ボードãŒå¯¾è±¡ã§ã™ã€‚ã“れã«ã‚ˆã‚Šé«˜é€Ÿã§æ­£ç¢ºãªã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’æä¾›ã§ãã‚‹ã“ã¨ãŒåˆ©ç‚¹ã§ã™ã€‚ã“ã®ãƒ‰ãƒ©ã‚¤ãƒã® `SOFT_SERIAL_PIN` ã¯ã€è¨­å®šã•れ㟠USART TX ピンã§ã™ã€‚**TX ピンã«é©åˆ‡ãªãƒ—ルアップ抵抗ãŒå¿…è¦ã§ã™**。設定ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’ rules.mk ã«è¿½åŠ ã—ã¾ã™:
52
53```make
54SERIAL_DRIVER = usart
55```
56
57config.h を介ã—ã¦ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚’設定ã—ã¾ã™:
58```c
59#define SOFT_SERIAL_PIN B6 // USART TX ピン
60#define SELECT_SOFT_SERIAL_SPEED 1 // ã¾ãŸã¯ 0, 2, 3, 4, 5
61 // 0: 約 460800 ボー
62 // 1: 約 230400 ボー (デフォルト)
63 // 2: 約 115200 ボー
64 // 3: 約 57600 ボー
65 // 4: 約 38400 ボー
66 // 5: 約 19200 ボー
67#define SERIAL_USART_DRIVER SD1 // TX ピン㮠USART ドライãƒã€‚デフォルト㯠SD1
68#define SERIAL_USART_TX_PAL_MODE 7 // 「代替機能〠ピン。MCU ã®é©åˆ‡ãªå€¤ã«ã¤ã„ã¦ã¯ã€ãれãžã‚Œã®ãƒ‡ãƒ¼ã‚¿ã‚·ãƒ¼ãƒˆã‚’見ã¦ãã ã•ã„。デフォルト㯠7
69```
70
71ã¾ãŸã€ChibiOS `SERIAL` 機能を有効ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™:
72* キーボード㮠halconf.h: `#define HAL_USE_SERIAL TRUE`
73* キーボード㮠mcuconf.h: `#define STM32_SERIAL_USE_USARTn TRUE` (ã“ã“ã§ã€'n' 㯠MCU ã§é¸æŠžã—㟠USART ã®ãƒšãƒªãƒ•ェラル番å·ã¨ä¸€è‡´)
74
75å¿…è¦ãªæ§‹æˆã¯ã€`UART` 周辺機器ã§ã¯ãªãã€`SERIAL` 周辺機器ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
diff --git a/docs/ja/support.md b/docs/ja/support.md
new file mode 100644
index 000000000..01c2d41d1
--- /dev/null
+++ b/docs/ja/support.md
@@ -0,0 +1,22 @@
1# 助ã‘ã‚’å¾—ã‚‹
2
3<!---
4 original document: 0.9.51:docs/support.md
5 git diff 0.9.51 HEAD -- docs/support.md | cat
6-->
7
8QMK ã«é–¢ã—ã¦åŠ©ã‘ã‚’å¾—ã‚‹ãŸã‚ã®å¤šãã®ãƒªã‚½ãƒ¼ã‚¹ãŒã‚りã¾ã™ã€‚
9
10コミュニティスペースã«å‚加ã™ã‚‹å‰ã«[行動è¦ç¯„](https://qmk.fm/coc/)を読んã§ãã ã•ã„。
11
12## リアルタイムãƒãƒ£ãƒƒãƒˆ
13
14何ã‹ã«ã¤ã„ã¦åŠ©ã‘ãŒå¿…è¦ãªå ´åˆã¯ã€è¿…速ãªã‚µãƒãƒ¼ãƒˆã‚’å—ã‘ã‚‹ãŸã‚ã®æœ€è‰¯ã®å ´æ‰€ã¯ã€[Discord Server](https://discord.gg/Uq7gcHh) ã§ã™ã€‚通常ã¯èª°ã‹ãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã€éžå¸¸ã«åŠ©ã‘ã«ãªã‚‹å¤šãã®äººãŒã„ã¾ã™ã€‚
15
16## OLKB Subreddit
17
18å…¬å¼ã® QMK フォーラム㯠[reddit.com](https://reddit.com) ã® [/r/olkb](https://reddit.com/r/olkb) ã§ã™ã€‚
19
20## GitHub Issues
21
22[GitHub ã§ issue](https://github.com/qmk/qmk_firmware/issues) ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã™ã€‚issue ã¯é•·æœŸçš„ãªè­°è«–ã‚ã‚‹ã„ã¯ãƒ‡ãƒãƒƒã‚°ã‚’å¿…è¦ã¨ã™ã‚‹å ´åˆã¯ã€ç‰¹ã«ä¾¿åˆ©ã§ã™ã€‚
diff --git a/docs/ja/syllabus.md b/docs/ja/syllabus.md
new file mode 100644
index 000000000..14e743ee9
--- /dev/null
+++ b/docs/ja/syllabus.md
@@ -0,0 +1,75 @@
1# QMK シラãƒã‚¹
2
3<!---
4 original document: 0.9.51:docs/syllabus.md
5 git diff 0.9.51 HEAD -- docs/syllabus.md | cat
6-->
7
8ã“ã®ãƒšãƒ¼ã‚¸ã¯æœ€åˆã«åŸºæœ¬ã‚’紹介ã—ã€ãã—ã¦ã€QMK ã«ç¿’熟ã™ã‚‹ãŸã‚ã«å¿…è¦ãªå…¨ã¦ã®æ¦‚念をç†è§£ã™ã‚‹ã‚ˆã†ã«å°Žãã“ã¨ã§ã€QMK ã®çŸ¥è­˜ã‚’構築ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚
9
10# åˆç´šãƒˆãƒ”ック
11
12ä»–ã«ä½•も読んã§ã„ãªã„å ´åˆã¯ã€ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’読んã§ãã ã•ã„。[QMK åˆå¿ƒè€…ガイド](ja/newbs.md)を読ã¿çµ‚ã‚ã‚‹ã¨ã€åŸºæœ¬çš„ãªã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã€ãれをコンパイルã—ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ›¸ãè¾¼ã¿ã§ãるよã†ã«ãªã£ã¦ã„ã‚‹ã¯ãšã§ã™ã€‚残りã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã“れらã®åŸºæœ¬çš„ãªçŸ¥è­˜ã‚’具体的ã«è‚‰ä»˜ã‘ã—ã¾ã™ã€‚
13
14* **QMK Tools ã®ä½¿ã„方を学ã¶**
15 * [QMK åˆå¿ƒè€…ガイド](ja/newbs.md)
16 * [CLI](ja/cli.md)
17 * [Git](ja/newbs_git_best_practices.md)
18* **キーマップã«ã¤ã„ã¦å­¦ã¶**
19 * [レイヤー](ja/feature_layers.md)
20 * [キーコード](ja/keycodes.md)
21 * 使用ã§ãるキーコードã®å®Œå…¨ãªãƒªã‚¹ãƒˆã€‚中級ã¾ãŸã¯ä¸Šç´šãƒˆãƒ”ックã«ã‚る知識ãŒå¿…è¦ãªå ´åˆã‚‚ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
22* **IDE ã®è¨­å®š** - オプション
23 * [Eclipse](ja/other_eclipse.md)
24 * [VS Code](ja/other_vscode.md)
25
26# 中級トピック
27
28ã“れらã®ãƒˆãƒ”ックã§ã¯ã€QMK ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹å¹¾ã¤ã‹ã®æ©Ÿèƒ½ã«ã¤ã„ã¦æŽ˜ã‚Šä¸‹ã’ã¾ã™ã€‚ã“れらã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å…¨ã¦èª­ã‚€å¿…è¦ã¯ã‚りã¾ã›ã‚“ãŒã€ã“れらã®ä¸€éƒ¨ã‚’スキップã™ã‚‹ã¨ã€ä¸Šç´šãƒˆãƒ”ックã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ä¸€éƒ¨ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒæ„味をãªã•ãªããªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
29
30* **機能ã®è¨­å®šæ–¹æ³•ã‚’å­¦ã¶**
31 <!-- * Configuration Overview FIXME(skullydazed/anyone): write this document -->
32 * [オーディオ](ja/feature_audio.md)
33 * 電飾
34 * [ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆ](ja/feature_backlight.md)
35 * [LED マトリックス](ja/feature_led_matrix.md)
36 * [RGB ライト](ja/feature_rgblight.md)
37 * [RGB マトリックス](ja/feature_rgb_matrix.md)
38 * [タップホールド設定](ja/tap_hold.md)
39* **キーマップã«ã¤ã„ã¦ã•らã«å­¦ã¶**
40 * [キーマップ](ja/keymap.md)
41 * [カスタム関数ã¨ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰](ja/custom_quantum_functions.md)
42 * マクロ
43 * [動的マクロ](ja/feature_dynamic_macros.md)
44 * [コンパイル済ã¿ã®ãƒžã‚¯ãƒ­](ja/feature_macros.md)
45 * [タップダンス](ja/feature_tap_dance.md)
46 * [コンボ](ja/feature_combo.md)
47 * [ユーザスペース](ja/feature_userspace.md)
48
49# 上級トピック
50
51以下ã®å…¨ã¦ã¯å¤šãã®åŸºç¤ŽçŸ¥è­˜ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚é«˜åº¦ãªæ©Ÿèƒ½ã‚’使ã£ã¦ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã§ãã‚‹ã“ã¨ã«åŠ ãˆã¦ã€`config.h` 㨠`rules.mk` ã®ä¸¡æ–¹ã‚’使ã£ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚ªãƒ—ションを設定ã™ã‚‹ã“ã¨ã«æ…£ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
52
53* **QMK 内ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ä¿å®ˆ**
54 * [ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æ‰‹é…ç·š](ja/hand_wire.md)
55 * [キーボードガイドライン](ja/hardware_keyboard_guidelines.md)
56 * [info.json リファレンス](ja/reference_info_json.md)
57 * [デãƒã‚¦ãƒ³ã‚¹ API](ja/feature_debounce_type.md)
58* **é«˜åº¦ãªæ©Ÿèƒ½**
59 * [ユニコード](ja/feature_unicode.md)
60 * [API](ja/api_overview.md)
61 * [ブートマジック](ja/feature_bootmagic.md)
62* **ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢**
63 * [キーボードãŒã©ã®ã‚ˆã†ã«å‹•作ã™ã‚‹ã‹](ja/how_keyboards_work.md)
64 * [キーボードマトリックスã®ä»•組ã¿](ja/how_a_matrix_works.md)
65 * [分割キーボード](ja/feature_split_keyboard.md)
66 * [速記](ja/feature_stenography.md)
67 * [ãƒã‚¤ãƒ³ãƒ†ã‚£ãƒ³ã‚°ãƒ‡ãƒã‚¤ã‚¹](ja/feature_pointing_device.md)
68* **コア開発**
69 * [コーディングè¦ç´„](ja/coding_conventions_c.md)
70 * [äº’æ›æ€§ã®ã‚るマイクロコントローラ](ja/compatible_microcontrollers.md)
71 * [カスタムマトリックス](ja/custom_matrix.md)
72 * [QMK ã‚’ç†è§£ã™ã‚‹](ja/understanding_qmk.md)
73* **CLI 開発**
74 * [コーディングè¦ç´„](ja/coding_conventions_python.md)
75 * [CLI é–‹ç™ºã®æ¦‚è¦](ja/cli_development.md)
diff --git a/docs/ja/translating.md b/docs/ja/translating.md
new file mode 100644
index 000000000..f7a273308
--- /dev/null
+++ b/docs/ja/translating.md
@@ -0,0 +1,60 @@
1# QMK ドキュメントを翻訳ã™ã‚‹
2
3<!---
4 original document: 0.9.51:docs/translating.md
5 git diff 0.9.51 HEAD -- docs/translating.md | cat
6-->
7
8ルートフォルダ (`docs/`) ã«ã‚ã‚‹å…¨ã¦ã®ãƒ•ァイルã¯è‹±èªžã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ - ä»–ã®å…¨ã¦ã®è¨€èªžã¯ã€ISO 639-1 言語コードã¨ã€ãれã«ç¶šã`-`ã¨é–¢é€£ã™ã‚‹å›½ã‚³ãƒ¼ãƒ‰ã®ã‚µãƒ–フォルダã«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚[一般的ãªã‚‚ã®ã®ãƒªã‚¹ãƒˆã¯ã“ã“ã§è¦‹ã¤ã‹ã‚Šã¾ã™](https://www.andiamo.co.uk/resources/iso-language-codes/)。ã“ã®ãƒ•ォルダãŒå­˜åœ¨ã—ãªã„å ´åˆã€ä½œæˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚翻訳ã•れãŸå„ファイルã¯è‹±èªžãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨åŒã˜åå‰ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ãã†ã™ã‚‹ã“ã¨ã§ã€æ­£å¸¸ã«ãƒ•ォールãƒãƒƒã‚¯ã§ãã¾ã™ã€‚
9
10`_summary.md` ファイルã¯ã“ã®ãƒ•ォルダã®ä¸­ã«å­˜åœ¨ã—ã€å„ファイルã¸ã®ãƒªãƒ³ã‚¯ã®ãƒªã‚¹ãƒˆã€ç¿»è¨³ã•れãŸåå‰ã€è¨€èªžãƒ•ォルダã«ç¶šãリンクãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
11
12```markdown
13 * [QMK简介](zh-cn/getting_started_introduction.md)
14```
15
16ä»–ã® docs ページã¸ã®å…¨ã¦ã®ãƒªãƒ³ã‚¯ã«ã‚‚ã€è¨€èªžã®ãƒ•ォルダãŒå‰ã«ä»˜ã„ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã‚‚ã—リンクãŒãƒšãƒ¼ã‚¸ã®ç‰¹å®šã®éƒ¨åˆ†(例ãˆã°ã€ç‰¹å®šã®è¦‹å‡ºã—)ã¸ã®å ´åˆã€ä»¥ä¸‹ã®ã‚ˆã†ã«è¦‹å‡ºã—ã«è‹±èªžã® ID を使ã†å¿…è¦ãŒã‚りã¾ã™:
17
18```markdown
19[建立你的环境](zh-cn/newbs-getting-started.md#set-up-your-environment)
20
21## 建立你的环境 :id=set-up-your-environment
22```
23
24æ–°ã—ã„言語ã®ç¿»è¨³ãŒå®Œäº†ã—ãŸã‚‰ã€ä»¥ä¸‹ã®ãƒ•ァイルも修正ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™:
25
26* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
27å„行ã¯ã€[GitHub emoji shortcode](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md#country-flag) ã®å½¢å¼ã§å›½ãƒ•ラグã¨ã€ãれã«ç¶šã言語ã§è¡¨ã•れるåå‰ã‚’å«ã‚€å¿…è¦ãŒã‚りã¾ã™ã€‚
28
29 ```markdown
30 - [:cn: 中文](/zh-cn/)
31 ```
32
33* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
34`placeholder` 㨠`noData` ã®ä¸¡æ–¹ã®ã‚ªãƒ–ジェクトã¯ã€æ–‡å­—列ã§è¨€èªžãƒ•ォルダã®è¾žæ›¸ã‚¨ãƒ³ãƒˆãƒªãŒå¿…è¦ã§ã™:
35
36 ```js
37 '/zh-cn/': '没有结果!',
38 ```
39
40 サイドãƒãƒ¼ã®ã€ŒQMK ファームウェアã€ã®è¦‹å‡ºã—リンクを設定ã™ã‚‹ãŸã‚ã«ã€`nameLink` オブジェクトも以下ã®ã‚ˆã†ã«è¿½åŠ ã•れる必è¦ãŒã‚りã¾ã™:
41
42 ```js
43 '/zh-cn/': '/#/zh-cn/',
44 ```
45
46 ã¾ãŸã€`fallbackLanguages` リストã«è¨€èªžãƒ•ォルダを追加ã—ã¦ã€404 ã§ã¯ãªã英語ã«é©åˆ‡ã«ãƒ•ォールãƒãƒƒã‚¯ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„:
47
48 ```js
49 fallbackLanguages: [
50 // ...
51 'zh-cn',
52 // ...
53 ],
54 ```
55
56## 翻訳ã®ãƒ—レビュー
57
58ドキュメントã®ãƒ­ãƒ¼ã‚«ãƒ«ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’セットアップã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€[ドキュメントã®ãƒ—レビュー](ja/contributing.md#previewing-the-documentation)を見ã¦ãã ã•ã„ - å³ä¸Šã® "Translations" メニューã‹ã‚‰æ–°ã—ã„è¨€èªžã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã¯ãšã§ã™ã€‚
59
60ä½œæ¥­ã«æº€è¶³ã—ãŸã‚‰ã€é æ…®ãªãプルリクエストを開ã„ã¦ãã ã•ã„ï¼
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index 8755552b9..22e8a3fe1 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -1,39 +1,42 @@
1# PR checklists 1# PR checklists
2 2
3This is a non-exhaustive checklist of what the QMK collaborators will be checking when reviewing submitted PRs. 3This is a non-exhaustive checklist of what the QMK Collaborators will be checking when reviewing submitted PRs.
4 4
5If there are any inconsistencies with these recommendations, you're best off [creating an issue](https://github.com/qmk/qmk_firmware/issues/new) against this document, or getting in touch with a QMK Collaborator on Discord. 5If there are any inconsistencies with these recommendations, you're best off [creating an issue](https://github.com/qmk/qmk_firmware/issues/new) against this document, or getting in touch with a QMK Collaborator on [Discord](https://discord.gg/Uq7gcHh).
6 6
7## General PRs 7## General PRs
8 8
9- PR should be submitted using a non-`master` branch on the source repository 9- PR should be submitted using a non-`master` branch on the source repository
10 - This does not mean you target a different branch for your PR, rather that you're not working out of your own master branch 10 - this does not mean you target a different branch for your PR, rather that you're not working out of your own master branch
11 - If submitter _does_ use their own `master` branch, they'll be given a link to the ["how to git"](https://docs.qmk.fm/#/newbs_git_using_your_master_branch) page after merging -- (end of this document will contain the contents of the message) 11 - if submitter _does_ use their own `master` branch, they'll be given a link to the ["how to git"](https://docs.qmk.fm/#/newbs_git_using_your_master_branch) page after merging -- (end of this document will contain the contents of the message)
12- Newly-added directories and filenames must be lowercase 12- newly-added directories and filenames must be lowercase
13 - This rule may be relaxed if upstream sources originally had uppercase characters (e.g. ChibiOS, or imported files from other repositories etc.) 13 - this rule may be relaxed if upstream sources originally had uppercase characters (e.g. ChibiOS, or imported files from other repositories etc.)
14 - If there is enough justification (i.e. consistency with existing core files etc.) this can be relaxed 14 - if there is enough justification (i.e. consistency with existing core files etc.) this can be relaxed
15 - a board designer naming their keyboard with uppercase letters is not enough justification 15 - a board designer naming their keyboard with uppercase letters is not enough justification
16- Valid license headers on all `*.c` and `*.h` source files 16- valid license headers on all `*.c` and `*.h` source files
17 - GPL2/GPL3 recommended for consistency 17 - GPL2/GPL3 recommended for consistency
18 - Other licenses are permitted, however they must be GPL-compatible and must allow for redistribution. Using a different license will almost certainly delay a PR getting merged. 18 - other licenses are permitted, however they must be GPL-compatible and must allow for redistribution. Using a different license will almost certainly delay a PR getting merged.
19- QMK codebase "best practices" followed 19- QMK Codebase "best practices" followed
20 - This is not an exhaustive list, and will likely get amended as time goes by 20 - this is not an exhaustive list, and will likely get amended as time goes by
21 - `#pragma once` instead of `#ifndef` include guards in header files 21 - `#pragma once` instead of `#ifndef` include guards in header files
22 - No "old-school" GPIO/I2C/SPI functions used -- must use QMK abstractions unless justifiable (and laziness is not valid justification) 22 - no "old-school" GPIO/I2C/SPI functions used -- must use QMK abstractions unless justifiable (and laziness is not valid justification)
23 - Timing abstractions should be followed too: 23 - timing abstractions should be followed too:
24 - `wait_ms()` instead of `_delay_ms()` (remove `#include <util/delay.h>` too) 24 - `wait_ms()` instead of `_delay_ms()` (remove `#include <util/delay.h>` too)
25 - `timer_read()` and `timer_read32()` etc. -- see [timer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/timer.h) for the timing APIs 25 - `timer_read()` and `timer_read32()` etc. -- see [timer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/timer.h) for the timing APIs
26 - If you think a new abstraction is useful, you're encouraged to: 26 - if you think a new abstraction is useful, you're encouraged to:
27 - prototype it in your own keyboard until it's feature-complete 27 - prototype it in your own keyboard until it's feature-complete
28 - discuss it with QMK Collaborators on Discord 28 - discuss it with QMK Collaborators on Discord
29 - refactor it as a separate core change 29 - refactor it as a separate core change
30 - remove your specific copy in your board 30 - remove your specific copy in your board
31- rebase and fix all merge conflicts before opening the PR (in case you need help or advice, reach out to QMK Collaborators on Discord)
31 32
32## Core PRs 33## Keymap PRs
33 34
34- Must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline 35- `#include QMK_KEYBOARD_H` preferred to including specific board files
35- Other notes TBD 36- prefer layer `enum`s to `#define`s
36 - Core is a lot more subjective given the breadth of posted changes 37- require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE`
38- terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous
39- some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
37 40
38## Keyboard PRs 41## Keyboard PRs
39 42
@@ -48,12 +51,14 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
48 - standard template should be present 51 - standard template should be present
49 - flash command has `:flash` at end 52 - flash command has `:flash` at end
50 - valid hardware availability link (unless handwired) -- private groupbuys are okay, but one-off prototypes will be questioned. If open-source, a link to files should be provided. 53 - valid hardware availability link (unless handwired) -- private groupbuys are okay, but one-off prototypes will be questioned. If open-source, a link to files should be provided.
54 - clear instructions on how to reset the board into bootloader mode
55 - a picture about the keyboard and preferably about the PCB, too
51- `rules.mk` 56- `rules.mk`
52 - removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE` 57 - removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE`
53 - modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth` 58 - modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth`
54 - No `(-/+size)` comments related to enabling features 59 - no `(-/+size)` comments related to enabling features
55 - Remove the list of alternate bootloaders if one has been specified 60 - remove the list of alternate bootloaders if one has been specified
56 - No re-definitions of the default MCU parameters if same value, when compared to the equivalent MCU in [mcu_selection.mk](https://github.com/qmk/qmk_firmware/blob/master/quantum/mcu_selection.mk) 61 - no re-definitions of the default MCU parameters if same value, when compared to the equivalent MCU in [mcu_selection.mk](https://github.com/qmk/qmk_firmware/blob/master/quantum/mcu_selection.mk)
57- keyboard `config.h` 62- keyboard `config.h`
58 - don't repeat `MANUFACTURER` in the `PRODUCT` value 63 - don't repeat `MANUFACTURER` in the `PRODUCT` value
59 - no `#define DESCRIPTION` 64 - no `#define DESCRIPTION`
@@ -71,12 +76,12 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
71- `keyboard.h` 76- `keyboard.h`
72 - `#include "quantum.h"` appears at the top 77 - `#include "quantum.h"` appears at the top
73 - `LAYOUT` macros should use standard definitions if applicable 78 - `LAYOUT` macros should use standard definitions if applicable
74 - Use the Community Layout macro names where they apply (preferred above `LAYOUT`/`LAYOUT_all`) 79 - use the Community Layout macro names where they apply (preferred above `LAYOUT`/`LAYOUT_all`)
75- keymap `config.h` 80- keymap `config.h`
76 - no duplication of `rules.mk` or `config.h` from keyboard 81 - no duplication of `rules.mk` or `config.h` from keyboard
77- `keymaps/default/keymap.c` 82- `keymaps/default/keymap.c`
78 - `QMKBEST`/`QMKURL` removed (sheesh) 83 - `QMKBEST`/`QMKURL` removed (sheesh)
79 - If using `MO(_LOWER)` and `MO(_RAISE)` keycodes or equivalent, and the keymap has an adjust layer when holding both keys -- if the keymap has no "direct-to-adjust" keycode (such as `MO(_ADJUST)`) then you should prefer to write... 84 - if using `MO(_LOWER)` and `MO(_RAISE)` keycodes or equivalent, and the keymap has an adjust layer when holding both keys -- if the keymap has no "direct-to-adjust" keycode (such as `MO(_ADJUST)`) then you should prefer to write...
80 ``` 85 ```
81 layer_state_t layer_state_set_user(layer_state_t state) { 86 layer_state_t layer_state_set_user(layer_state_t state) {
82 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); 87 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
@@ -90,22 +95,20 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
90- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board 95- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
91 96
92Also, specific to ChibiOS: 97Also, specific to ChibiOS:
93- **Strong** preference to using existing ChibiOS board definitions. 98- **strong** preference to using existing ChibiOS board definitions.
94 - A lot of the time, an equivalent Nucleo board can be used with a different flash size or slightly different model in the same family 99 - a lot of the time, an equivalent Nucleo board can be used with a different flash size or slightly different model in the same family
95 - Example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk 100 - example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk
96 - QMK is migrating to not having custom board definitions if at all possible, due to the ongoing maintenance burden when upgrading ChibiOS 101 - QMK is migrating to not having custom board definitions if at all possible, due to the ongoing maintenance burden when upgrading ChibiOS
97- If a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`: 102- if a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`:
98 - see Arm/ChibiOS [early initialization](https://docs.qmk.fm/#/platformdev_chibios_earlyinit?id=board-init) 103 - see Arm/ChibiOS [early initialization](https://docs.qmk.fm/#/platformdev_chibios_earlyinit?id=board-init)
99 - `__early_init()` should be replaced by either `early_hardware_init_pre()` or `early_hardware_init_post()` as appropriate 104 - `__early_init()` should be replaced by either `early_hardware_init_pre()` or `early_hardware_init_post()` as appropriate
100 - `boardInit()` should be migrated to `board_init()` 105 - `boardInit()` should be migrated to `board_init()`
101 106
102## Keymap PRs 107## Core PRs
103 108
104- `#include QMK_KEYBOARD_H` preferred to including specific board files 109- must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
105- Prefer layer `enum`s to `#define`s 110- other notes TBD
106- Require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE` 111 - core is a lot more subjective given the breadth of posted changes
107- Terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous
108- Some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
109 112
110--- 113---
111 114
diff --git a/keyboards/boardsource/4x12/keymaps/via/keymap.c b/keyboards/boardsource/4x12/keymaps/via/keymap.c
new file mode 100644
index 000000000..d9a0c47a6
--- /dev/null
+++ b/keyboards/boardsource/4x12/keymaps/via/keymap.c
@@ -0,0 +1,36 @@
1#include QMK_KEYBOARD_H
2
3enum layers {
4 _MAIN,
5 _RAISE,
6 _LOWER,
7};
8
9// Readability keycodes
10#define LOWER MO(_LOWER)
11#define RAISE MO(_RAISE)
12
13const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
14
15 [_MAIN] = LAYOUT_ortho_4x12(
16 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
17 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
18 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
19 KC_PIPE, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
20 ),
21
22 [_RAISE] = LAYOUT_ortho_4x12(
23 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
24 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
25 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
26 RESET, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
27 ),
28
29 [_LOWER] = LAYOUT_ortho_4x12(
30 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
31 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
32 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
33 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
34 )
35
36};
diff --git a/keyboards/boardsource/4x12/keymaps/via/readme.md b/keyboards/boardsource/4x12/keymaps/via/readme.md
new file mode 100644
index 000000000..534633d45
--- /dev/null
+++ b/keyboards/boardsource/4x12/keymaps/via/readme.md
@@ -0,0 +1,5 @@
1# The via keymap for boardsource 4x12 ortholinear keybaoard
2
3This folder contains the [VIA](https://caniusevia.com/) configuration for the boardsource 4x12 ortholinear keybaoard
4
5Maintained by: [gwillad](https://github.com/gwillad)
diff --git a/keyboards/boardsource/4x12/keymaps/via/rules.mk b/keyboards/boardsource/4x12/keymaps/via/rules.mk
new file mode 100644
index 000000000..036bd6d1c
--- /dev/null
+++ b/keyboards/boardsource/4x12/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/converter/adb_usb/adb_usb.h b/keyboards/converter/adb_usb/adb_usb.h
index 8691adcc6..3db303b03 100644
--- a/keyboards/converter/adb_usb/adb_usb.h
+++ b/keyboards/converter/adb_usb/adb_usb.h
@@ -56,7 +56,7 @@ Ported to QMK by Peter Roe <pete@13bit.me>
56 { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO, }, \ 56 { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO, }, \
57 { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \ 57 { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \
58 { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO, }, \ 58 { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO, }, \
59 { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \ 59 { KC_NO, K51, K52, K53, K54, K55, K56, K57 }, \
60 { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO, }, \ 60 { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO, }, \
61 { K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \ 61 { K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \
62 { KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \ 62 { KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h b/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
index 6d69b0011..06c50e0a9 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
@@ -18,6 +18,9 @@
18#undef MOUSEKEY_WHEEL_INTERVAL 18#undef MOUSEKEY_WHEEL_INTERVAL
19#define MOUSEKEY_WHEEL_INTERVAL 50 19#define MOUSEKEY_WHEEL_INTERVAL 50
20 20
21#undef MK_COMBINED
22#define MK_COMBINED
23
21// /* Temporarily defining a tapping term that is ridiculous to see if i can tell if lt is working. */ 24// /* Temporarily defining a tapping term that is ridiculous to see if i can tell if lt is working. */
22// #undef TAPPING_TERM 25// #undef TAPPING_TERM
23// #define TAPPING_TERM 499 26// #define TAPPING_TERM 499
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c b/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
index c2960cfa1..e06d0b769 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
@@ -28,13 +28,17 @@
28 28
29enum custom_keycodes { 29enum custom_keycodes {
30 RGB_SLD = EZ_SAFE_RANGE, 30 RGB_SLD = EZ_SAFE_RANGE,
31 MS_WH_UP,
32 MS_WH_DOWN,
33 MS_WH_RIGHT,
34 MS_WH_LEFT,
31}; 35};
32 36
33// tapdance keycodes 37// tapdance keycodes
34enum td_keycodes { 38enum td_keycodes {
35 CTRL_TO12, 39 CTRL_TO12,
36 SHIFT_TO13, 40 SHIFT_TO13,
37 ALT_TO11 41 ALT_TO11,
38}; 42};
39 43
40// define a type containing as many tapdance states as you need 44// define a type containing as many tapdance states as you need
@@ -59,6 +63,7 @@ void altto11_reset (qk_tap_dance_state_t *state, void *user_data);
59void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data); 63void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data);
60void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data); 64void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data);
61 65
66
62const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 67const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63 [0] = LAYOUT_ergodox_pretty( 68 [0] = LAYOUT_ergodox_pretty(
64 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 69 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
@@ -162,9 +167,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
162 ), 167 ),
163 [10] = LAYOUT_ergodox_pretty( 168 [10] = LAYOUT_ergodox_pretty(
164 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, 169 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
165 KC_TRANSPARENT, KC_NO, KC_LGUI, KC_MS_BTN2, KC_NO, KC_NO, KC_TRANSPARENT, MT(MOD_RCTL, KC_A), KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_TRANSPARENT, 170 KC_TRANSPARENT, KC_NO, KC_LGUI, KC_MS_BTN2, KC_ACL2, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_TRANSPARENT,
166 KC_TRANSPARENT, TD(SHIFT_TO13), TD(CTRL_TO12), TD(ALT_TO11), KC_MS_BTN1, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_NO, KC_TRANSPARENT, 171 KC_TRANSPARENT, TD(SHIFT_TO13), TD(CTRL_TO12), TD(ALT_TO11), KC_MS_BTN1, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_NO, KC_TRANSPARENT,
167 KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, 172 KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_ACL0, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
168 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, 173 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
169 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, 174 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
170 KC_TRANSPARENT, KC_TRANSPARENT, 175 KC_TRANSPARENT, KC_TRANSPARENT,
@@ -182,9 +187,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
182 ), 187 ),
183 [12] = LAYOUT_ergodox_pretty( 188 [12] = LAYOUT_ergodox_pretty(
184 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, 189 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
185 KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT, 190 KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_ACL2, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT,
186 KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT, KC_NO, KC_TRANSPARENT, 191 KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT, KC_NO, KC_TRANSPARENT,
187 KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, 192 KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), MO(14), KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
188 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, 193 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
189 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, 194 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
190 KC_TRANSPARENT, KC_TRANSPARENT, 195 KC_TRANSPARENT, KC_TRANSPARENT,
@@ -200,16 +205,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
200 KC_TRANSPARENT, KC_TRANSPARENT, 205 KC_TRANSPARENT, KC_TRANSPARENT,
201 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TO(0) 206 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TO(0)
202 ), 207 ),
208 [14] = LAYOUT_ergodox_pretty(
209 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
210 KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT,
211 KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MS_WH_LEFT, MS_WH_DOWN, MS_WH_RIGHT, KC_NO, KC_TRANSPARENT,
212 KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
213 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
214 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
215 KC_TRANSPARENT, KC_TRANSPARENT,
216 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
217 ),
203}; 218};
204 219
205
206/* Commenting out for debug purposes */
207// bool process_record_user(uint16_t keycode, keyrecord_t *record) {
208// switch (keycode) {
209// }
210// return true;
211// }
212
213uint32_t layer_state_set_user(uint32_t state) { 220uint32_t layer_state_set_user(uint32_t state) {
214 uint8_t layer = biton32(state); 221 uint8_t layer = biton32(state);
215 ergodox_board_led_off(); 222 ergodox_board_led_off();
@@ -252,11 +259,31 @@ uint32_t layer_state_set_user(uint32_t state) {
252// determine the tapdance state to return 259// determine the tapdance state to return
253int cur_dance (qk_tap_dance_state_t *state) { 260int cur_dance (qk_tap_dance_state_t *state) {
254 if (state->count == 1) { 261 if (state->count == 1) {
255 if (state->interrupted || !state->pressed) { return SINGLE_TAP; } 262 if (state->interrupted && state->pressed && state->interrupting_keycode == KC_MS_BTN1) {return SINGLE_HOLD;}
263 if (state->interrupted && state->pressed && state->interrupting_keycode == 22273) {return SINGLE_HOLD;}
264 if (state->interrupted && state->pressed && state->interrupting_keycode == 22272) {return SINGLE_HOLD;}
265 if (state->interrupted && state->pressed && state->interrupting_keycode == KC_TAB) {return SINGLE_HOLD;}
266 else if (state->interrupted || !state->pressed) {
267 // if (state->interrupted) {
268 // print("interrupted\n");
269 // uprintf("Shift: %u\n", KC_LSHIFT);
270 // uprintf("Control: %u\n", KC_LCTRL);
271 // uprintf("%u\n",state->interrupting_keycode);
272 // }
273 return SINGLE_TAP;
274 }
256 else { return SINGLE_HOLD; } 275 else { return SINGLE_HOLD; }
257 } 276 }
258 else { return 2; } // any number higher than the maximum state value you return above 277 else { return 2; } // any number higher than the maximum state value you return above
259} 278}
279// /* Backup in case previous code is hard to piece together. */
280// int cur_dance (qk_tap_dance_state_t *state) {
281// if (state->count == 1) {
282// if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
283// else { return SINGLE_HOLD; }
284// }
285// else { return 2; } // any number higher than the maximum state value you return above
286// }
260 287
261void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data) { 288void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data) {
262 td_state = cur_dance(state); 289 td_state = cur_dance(state);
@@ -265,7 +292,14 @@ void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data) {
265 layer_on(12); 292 layer_on(12);
266 break; 293 break;
267 case SINGLE_HOLD: 294 case SINGLE_HOLD:
295 if (state->interrupted && (state->interrupting_keycode == 22273 || state->interrupting_keycode == 43)) {
296 register_mods(MOD_BIT(KC_LCTRL));
297 break;
298 }
268 register_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here 299 register_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
300 if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
301 register_code16(LCTL(KC_MS_BTN1));
302 }
269 break; 303 break;
270 } 304 }
271} 305}
@@ -275,7 +309,14 @@ void ctrlto12_reset (qk_tap_dance_state_t *state, void *user_data) {
275 case SINGLE_TAP: 309 case SINGLE_TAP:
276 break; 310 break;
277 case SINGLE_HOLD: 311 case SINGLE_HOLD:
312 if (state->interrupted && (state->interrupting_keycode == 22273 || state->interrupting_keycode == 43) ) {
313 unregister_mods(MOD_BIT(KC_LCTRL));
314 break;
315 }
278 unregister_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here 316 unregister_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
317 if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
318 unregister_code16(LCTL(KC_MS_BTN1));
319 }
279 break; 320 break;
280 } 321 }
281} 322}
@@ -287,7 +328,14 @@ void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data) {
287 layer_on(13); 328 layer_on(13);
288 break; 329 break;
289 case SINGLE_HOLD: 330 case SINGLE_HOLD:
331 if (state->interrupted && (state->interrupting_keycode == 22272 || state->interrupting_keycode == 43) ) {
332 register_mods(MOD_BIT(KC_LSHIFT));
333 break;
334 }
290 register_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here 335 register_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
336 if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
337 register_code16(LSFT(KC_MS_BTN1));
338 }
291 break; 339 break;
292 } 340 }
293} 341}
@@ -297,7 +345,14 @@ void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data) {
297 case SINGLE_TAP: 345 case SINGLE_TAP:
298 break; 346 break;
299 case SINGLE_HOLD: 347 case SINGLE_HOLD:
348 if (state->interrupted && (state->interrupting_keycode == 22272 || state->interrupting_keycode == 43) ) {
349 unregister_mods(MOD_BIT(KC_LSHIFT));
350 break;
351 }
300 unregister_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here 352 unregister_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
353 if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
354 unregister_code16(LSFT(KC_MS_BTN1));
355 }
301 break; 356 break;
302 } 357 }
303} 358}
@@ -310,6 +365,9 @@ void altto11_finished (qk_tap_dance_state_t *state, void *user_data) {
310 break; 365 break;
311 case SINGLE_HOLD: 366 case SINGLE_HOLD:
312 register_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here 367 register_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
368 if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
369 register_code16(LALT(KC_MS_BTN1));
370 }
313 break; 371 break;
314 } 372 }
315} 373}
@@ -320,6 +378,9 @@ void altto11_reset (qk_tap_dance_state_t *state, void *user_data) {
320 break; 378 break;
321 case SINGLE_HOLD: 379 case SINGLE_HOLD:
322 unregister_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here 380 unregister_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
381 if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
382 unregister_code16(LALT(KC_MS_BTN1));
383 }
323 break; 384 break;
324 } 385 }
325} 386}
@@ -328,7 +389,7 @@ void altto11_reset (qk_tap_dance_state_t *state, void *user_data) {
328qk_tap_dance_action_t tap_dance_actions[] = { 389qk_tap_dance_action_t tap_dance_actions[] = {
329 [CTRL_TO12] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlto12_finished, ctrlto12_reset), 390 [CTRL_TO12] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlto12_finished, ctrlto12_reset),
330 [SHIFT_TO13] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shiftto13_finished, shiftto13_reset), 391 [SHIFT_TO13] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shiftto13_finished, shiftto13_reset),
331 [ALT_TO11] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altto11_finished, altto11_reset) 392 [ALT_TO11] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altto11_finished, altto11_reset),
332}; 393};
333 394
334/* Debugging functions */ 395/* Debugging functions */
@@ -342,10 +403,32 @@ void keyboard_post_init_user(void) {
342} 403}
343 404
344bool process_record_user(uint16_t keycode, keyrecord_t *record) { 405bool process_record_user(uint16_t keycode, keyrecord_t *record) {
345 // If console is enabled, it will print the matrix position and status of each key pressed 406 // If console is enabled, it will print the matrix position and status of each key pressed
346// #ifdef CONSOLE_ENABLE 407 // #ifdef CONSOLE_ENABLE
347// uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); 408 // uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
348// #endif 409 // #endif
349 return true; 410 switch (keycode) {
411 case MS_WH_DOWN:
412 if (record->event.pressed) {
413 SEND_STRING(SS_TAP(X_MS_WH_DOWN));
414 }
415 break;
416 case MS_WH_UP:
417 if (record->event.pressed) {
418 SEND_STRING(SS_TAP(X_MS_WH_UP));
419 }
420 break;
421 case MS_WH_LEFT:
422 if (record->event.pressed) {
423 SEND_STRING(SS_TAP(X_MS_WH_LEFT));
424 }
425 break;
426 case MS_WH_RIGHT:
427 if (record->event.pressed) {
428 SEND_STRING(SS_TAP(X_MS_WH_RIGHT));
429 }
430 break;
431 }
432 return true;
350} 433}
351 434
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md b/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
index 5570d9881..ff3c8d142 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
@@ -1,7 +1,6 @@
1# The nathanvercaemert ErgoDox EZ configuration 1# The nathanvercaemert ErgoDox EZ configuration
2 2
3Centered around the home row and the use of mouse keys, this configuration focuses 3Centered around the home row and the use of mouse keys, this configuration focuses on minimal finger movement. No key is more than one unit away from the home row.
4on minimal finger movement. No key is more than one unit away from a finger on the home row.
5 4
6## Layers 5## Layers
7 6
@@ -20,7 +19,9 @@ on minimal finger movement. No key is more than one unit away from a finger on t
20 navigation layers. 19 navigation layers.
21* Navigation Layers 20* Navigation Layers
22 * From the Mouse Layer, taps to the left home row navigate to scroll keys, arrow keys, and page keys. 21 * From the Mouse Layer, taps to the left home row navigate to scroll keys, arrow keys, and page keys.
22* Notes on Acceleration
23 * Designated as "Slow" and "Fast" on the mouse layers (movement and scroll,) these keys can be held to allow for slow/precise or fast/efficient control.
23 24
24Here is the image of my keymap: 25Here is the image of my keymap:
25 26
26![Default](https://i.imgur.com/kXywQIq.png) \ No newline at end of file 27![Imgur Image](https://i.imgur.com/x6VgH9Z.png) \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk b/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
index 31c3fe3c7..0dadd4371 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
@@ -5,6 +5,5 @@ COMMAND_ENABLE = no
5RGBLIGHT_ENABLE = no 5RGBLIGHT_ENABLE = no
6TAP_DANCE_ENABLE=yes 6TAP_DANCE_ENABLE=yes
7 7
8 8# Debugging
9#Beginning debugging process for LT() and permissive hold
10CONSOLE_ENABLE = yes 9CONSOLE_ENABLE = yes
diff --git a/keyboards/handwired/swiftrax/pandamic/config.h b/keyboards/handwired/swiftrax/pandamic/config.h
new file mode 100644
index 000000000..0916bbf1c
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/config.h
@@ -0,0 +1,52 @@
1/*
2Copyright 2020 Swiftrax <swiftrax@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x04D8
24#define PRODUCT_ID 0xEB0E
25#define DEVICE_VER 0x0001
26#define MANUFACTURER Swiftrax
27#define PRODUCT Pandamic
28
29/* key matrix size */
30#define MATRIX_ROWS 10
31#define MATRIX_COLS 10
32
33// ROWS: Top to bottom, COLS: Left to right
34
35#define MATRIX_ROW_PINS { D1, D2, B5, B7, D3, D5, D6, D4, D7, B4 }
36#define MATRIX_COL_PINS { B6, C6, C7, F7, F6, F5, F4, F1, F0, D0 }
37
38#define ENCODERS_PAD_A { E6 }
39#define ENCODERS_PAD_B { B0 }
40
41
42/* COL2ROW or ROW2COL */
43#define DIODE_DIRECTION ROW2COL
44
45/* define if matrix has ghost */
46//#define MATRIX_HAS_GHOST
47
48/* Set 0 if debouncing isn't needed */
49#define DEBOUNCE 5
50
51/*EEPROM for via*/
52#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/handwired/swiftrax/pandamic/info.json b/keyboards/handwired/swiftrax/pandamic/info.json
new file mode 100644
index 000000000..4446a041d
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/info.json
@@ -0,0 +1,12 @@
1{
2 "keyboard_name": "Pandamic",
3 "url": "https://github.com/swiftrax",
4 "maintainer": "swiftrax",
5 "width": 20.75,
6 "height": 5.25,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":7.25, "y":0}, {"x":8.25, "y":0}, {"x":9.25, "y":0}, {"x":10.25, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":18.25, "y":0}, {"x":19.75, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1, "h":2}, {"x":4.25, "y":1, "w":1.5}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"x":10.75, "y":1}, {"x":11.75, "y":1}, {"x":12.75, "y":1}, {"x":13.75, "y":1}, {"x":14.75, "y":1}, {"x":15.75, "y":1}, {"x":16.75, "y":1}, {"x":17.75, "y":1, "w":1.5}, {"x":19.75, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":4.25, "y":2, "w":1.75}, {"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":15, "y":2}, {"x":16, "y":2}, {"x":17, "y":2, "w":2.25}, {"x":19.75, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3, "h":2}, {"x":4.25, "y":3, "w":1.25}, {"x":5.5, "y":3}, {"x":6.5, "y":3}, {"x":7.5, "y":3}, {"x":8.5, "y":3}, {"x":9.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3}, {"x":16.5, "y":3, "w":1.75}, {"x":18.5, "y":3.25}, {"x":19.75, "y":3}, {"x":0, "y":4, "w":2}, {"x":2, "y":4}, {"x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4, "w":1.25}, {"x":6.75, "y":4, "w":1.25}, {"x":8, "y":4, "w":6.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}, {"x":17.5, "y":4.25}, {"x":18.5, "y":4.25}, {"x":19.5, "y":4.25}]
10 }
11 }
12}
diff --git a/keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c b/keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c
new file mode 100644
index 000000000..11e770921
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
1/* Copyright 2020 swiftrax
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Each layer gets a name for readability, which is then used in the keymap matrix below.
19// The underscores don't mean anything - you can have a layer called STUFF or any other name.
20// Layer names don't all need to be of the same length, obviously, and you can also skip them
21// entirely and just use numbers.
22enum _layer {
23 _MA,
24 _FN
25};
26
27const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28
29[_MA] = LAYOUT(
30 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_MUTE,
31 KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
32 KC_P4, KC_P5, KC_P6, 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_END,
33 KC_P1, KC_P2, KC_P3, KC_PENT, KC_LSFT, MO(_FN), 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_HOME,
34 KC_P0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ),
35[_FN] = LAYOUT(
36 _______, _______, _______, _______, 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, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
40 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
41};
42
43void encoder_update_user(uint8_t index, bool clockwise) {
44 if (clockwise) {
45 tap_code(KC_VOLU);
46 } else {
47 tap_code(KC_VOLD);
48 }
49} \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c b/keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c
new file mode 100644
index 000000000..38e455bec
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
1/* Copyright 2020 swiftrax
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19
20[0] = LAYOUT(
21 KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_MUTE,
22 KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
23 KC_P4, KC_P5, KC_P6, 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_END,
24 KC_P1, KC_P2, KC_P3, KC_PENT, KC_LSFT, MO(1), 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_HOME,
25 KC_P0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ),
26[1] = LAYOUT(
27 _______, _______, _______, _______, 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, _______, _______, _______,
28 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
29 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
32[2] = LAYOUT(
33 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
34 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
35 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
38};
39
40void encoder_update_user(uint8_t index, bool clockwise) {
41 if (clockwise) {
42 tap_code(KC_VOLU);
43 } else {
44 tap_code(KC_VOLD);
45 }
46} \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk b/keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk
new file mode 100644
index 000000000..036bd6d1c
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/pandamic/pandamic.c b/keyboards/handwired/swiftrax/pandamic/pandamic.c
new file mode 100644
index 000000000..c718a3373
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/pandamic.c
@@ -0,0 +1,16 @@
1/* Copyright 2020 swiftrax
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "pandamic.h"
diff --git a/keyboards/handwired/swiftrax/pandamic/pandamic.h b/keyboards/handwired/swiftrax/pandamic/pandamic.h
new file mode 100644
index 000000000..9fbb78427
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/pandamic.h
@@ -0,0 +1,40 @@
1/* Copyright 2020 swiftrax
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19
20// readability
21#define XXX KC_NO
22
23#define LAYOUT( \
24 K000, K100, K001, K101, K002, K102, K003, K103, K004, K104, K005, K105, K006, K106, K007, K107, K008, K108, K009, K109,\
25 K200, K300, K201, K301, K202, K302, K203, K303, K204, K304, K205, K305, K206, K306, K207, K307, K208, K308, K309,\
26 K400, K500, K401, K402, K502, K403, K503, K404, K504, K405, K505, K406, K506, K407, K507, K508, K509,\
27 K600, K700, K601, K701, K602, K702, K603, K703, K604, K704, K605, K705, K606, K706, K607, K707, K608, K609, K709,\
28 K800, K801, K802, K902, K803, K805, K807, K907, K808, K908, K809, K909 \
29) { \
30 {K000, K001, K002, K003, K004, K005, K006, K007, K008, K009},\
31 {K100, K101, K102, K103, K104, K105, K106, K107, K108, K109},\
32 {K200, K201, K202, K203, K204, K205, K206, K207, K208, XXX},\
33 {K300, K301, K302, K303, K304, K305, K306, K307, K308, K309},\
34 {K400, K401, K402, K403, K404, K405, K406, K407, XXX, XXX},\
35 {K500, XXX, K502, K503, K504, K505, K506, K507, K508, K509},\
36 {K600, K601, K602, K603, K604, K605, K606, K607, K608, K609},\
37 {K700, K701, K702, K703, K704, K705, K706, K707, XXX, K709},\
38 {K800, K801, K802, K803, XXX, K805, XXX, K807, K808, K809},\
39 { XXX, XXX, K902, XXX, XXX, XXX, XXX, K907, K908, K909} \
40}
diff --git a/keyboards/handwired/swiftrax/pandamic/readme.md b/keyboards/handwired/swiftrax/pandamic/readme.md
new file mode 100644
index 000000000..227c2ebe1
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/readme.md
@@ -0,0 +1,13 @@
1# Pandamic
2
3A southpaw 65% mechanical keyboard with rotary encoder support
4
5* Keyboard Maintainer: [Swiftrax](https://github.com/swiftrax)
6* Hardware Supported: Pandamic
7* Hardware Availability: [GitHub.com](https://github.com/swiftrax/Pandamic)
8
9Make example for this keyboard (after setting up your build environment):
10
11 make handwired/swiftrax/pandamic:default
12
13See 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).
diff --git a/keyboards/handwired/swiftrax/pandamic/rules.mk b/keyboards/handwired/swiftrax/pandamic/rules.mk
new file mode 100644
index 000000000..f83e0a1fd
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/rules.mk
@@ -0,0 +1,23 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
23ENCODER_ENABLE = yes # Rotary Encoder
diff --git a/keyboards/jj40/config.h b/keyboards/jj40/config.h
index 9a1eadb78..0d168f2c0 100644
--- a/keyboards/jj40/config.h
+++ b/keyboards/jj40/config.h
@@ -16,8 +16,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16
17#include "config_common.h" 17#include "config_common.h"
18 18
19#define VENDOR_ID 0x20A0 19#define VENDOR_ID 0x4B50 // "KP"
20#define PRODUCT_ID 0x422D 20#define PRODUCT_ID 0x0040
21#define DEVICE_VER 0x0200 21#define DEVICE_VER 0x0200
22#define MANUFACTURER KPrepublic 22#define MANUFACTURER KPrepublic
23#define PRODUCT JJ40 23#define PRODUCT JJ40
diff --git a/keyboards/kbdfans/maja_soldered/config.h b/keyboards/kbdfans/maja_soldered/config.h
new file mode 100755
index 000000000..bc284893d
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/config.h
@@ -0,0 +1,44 @@
1/* Copyright 2020 dztech kbdfans
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "config_common.h"
19
20#define VENDOR_ID 0x4B42
21#define PRODUCT_ID 0x6069
22#define DEVICE_VER 0x0001
23#define MANUFACTURER KBDFANS
24#define PRODUCT MAJA_SOLDERED
25
26#define MATRIX_ROWS 5
27#define MATRIX_COLS 15
28#define MATRIX_ROW_PINS { F0, B6, D6, B4, D7 }
29#define MATRIX_COL_PINS { C6, C7, F7, F6, F5, F4, F1, B0, B1, B2, B3, B7, D2, D3, D5 }
30#define DIODE_DIRECTION COL2ROW
31
32#define DEBOUNCE 3
33
34/* number of backlight levels */
35#define BACKLIGHT_PIN B5
36#ifdef BACKLIGHT_PIN
37#define BACKLIGHT_LEVELS 3
38#endif
39
40/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
41#define LOCKING_SUPPORT_ENABLE
42
43/* Locking resynchronize hack */
44#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/kbdfans/maja_soldered/info.json b/keyboards/kbdfans/maja_soldered/info.json
new file mode 100644
index 000000000..b583282a9
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/info.json
@@ -0,0 +1,81 @@
1{
2 "keyboard_name": "MAJA_SOLDERED",
3 "url": "",
4 "maintainer": "DZTECH",
5 "width": 18.75,
6 "height": 5.5,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {"x": 0.75, "y": 0.25},
11 {"x": 1.75, "y": 0.25},
12 {"x": 2.75, "y": 0},
13 {"x": 3.75, "y": 0.25},
14 {"x": 4.75, "y": 0.25},
15 {"x": 5.75, "y": 0.25},
16 {"x": 6.75, "y": 0.25},
17 {"x": 8.75, "y": 0.25},
18 {"x": 9.75, "y": 0.25},
19 {"x": 10.75, "y": 0.25},
20 {"x": 11.75, "y": 0.25},
21 {"x": 12.75, "y": 0},
22 {"x": 13.75, "y": 0.25},
23 {"x": 14.75, "y": 0.25},
24 {"x": 15.75, "y": 0.25},
25 {"x": 17.75, "y": 0.25},
26 {"x": 0.5, "y": 1.25, "w": 1.5},
27 {"x": 2, "y": 1.25},
28 {"x": 3, "y": 1.25},
29 {"x": 4, "y": 1.25},
30 {"x": 5, "y": 1.25},
31 {"x": 6, "y": 1.25},
32 {"x": 8.5, "y": 1.25},
33 {"x": 9.5, "y": 1.25},
34 {"x": 10.5, "y": 1.25},
35 {"x": 11.5, "y": 1.25},
36 {"x": 12.5, "y": 1.25},
37 {"x": 13.5, "y": 1.25},
38 {"x": 14.5, "y": 1.25},
39 {"x": 15.5, "y": 1.25, "w": 1.5},
40 {"x": 17.75, "y": 1.25},
41 {"x": 0.25, "y": 2.25, "w": 1.75},
42 {"x": 2, "y": 2.25},
43 {"x": 3, "y": 2.25},
44 {"x": 4, "y": 2.25},
45 {"x": 5, "y": 2.25},
46 {"x": 6, "y": 2.25},
47 {"x": 9, "y": 2.25},
48 {"x": 10, "y": 2.25},
49 {"x": 11, "y": 2.25},
50 {"x": 12, "y": 2.25},
51 {"x": 13, "y": 2.25},
52 {"x": 14, "y": 2.25},
53 {"x": 15, "y": 2.25, "w": 2.25},
54 {"x": 17.75, "y": 2.25},
55 {"x": 0, "y": 3.25, "w": 2.25},
56 {"x": 2.25, "y": 3.25},
57 {"x": 3.25, "y": 3.25},
58 {"x": 4.25, "y": 3.25},
59 {"x": 5.25, "y": 3.25},
60 {"x": 6.25, "y": 3.25},
61 {"x": 8.25, "y": 3.25},
62 {"x": 9.25, "y": 3.25},
63 {"x": 10.25, "y": 3.25},
64 {"x": 11.25, "y": 3.25},
65 {"x": 12.25, "y": 3.25},
66 {"x": 13.25, "y": 3.25},
67 {"x": 14.25, "y": 3.25, "w": 2.25},
68 {"x": 16.75, "y": 3.5},
69 {"x": 0, "y": 4.25, "w": 1.5},
70 {"x": 3, "y": 4.25, "w": 1.5},
71 {"x": 4.5, "y": 4.25, "w": 2},
72 {"x": 6.5, "y": 4.25, "w": 1.25},
73 {"x": 8.25, "y": 4.25, "w": 2.75},
74 {"x": 11, "y": 4.25, "w": 1.5},
75 {"x": 15.75, "y": 4.5},
76 {"x": 16.75, "y": 4.5},
77 {"x": 17.75, "y": 4.5}
78 ]
79 }
80 }
81}
diff --git a/keyboards/kbdfans/maja_soldered/keymaps/default/keymap.c b/keyboards/kbdfans/maja_soldered/keymaps/default/keymap.c
new file mode 100755
index 000000000..a86004ef7
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
1/* Copyright 2020 dztech kbdfans
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19 [0] = LAYOUT( /* Base */
20 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_DEL, KC_HOME,
21 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_BSLASH, KC_PGUP,
22 CTL_T(KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
23 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
24 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
25 [1] = LAYOUT( /* FN */
26 KC_GESC, 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_TRNS,KC_HOME,
27 KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP,
28 CTL_T(KC_CAPS),RGB_SPI, RGB_SPD, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_PGDN,
29 KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE,
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
31 [2] = LAYOUT( /* FN */
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
34 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
35 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
37 [3] = LAYOUT( /* FN */
38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
39 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
40 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
41 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
42 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
43 };
diff --git a/keyboards/kbdfans/maja_soldered/keymaps/via/keymap.c b/keyboards/kbdfans/maja_soldered/keymaps/via/keymap.c
new file mode 100755
index 000000000..cf64bec4c
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/keymaps/via/keymap.c
@@ -0,0 +1,43 @@
1/* Copyright 2020 dztech kbdfans
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19 [0] = LAYOUT( /* Base */
20 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_DEL, KC_HOME,
21 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_BSLASH, KC_PGUP,
22 CTL_T(KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
23 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
24 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
25 [1] = LAYOUT( /* FN */
26 KC_GESC, 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_TRNS,KC_HOME,
27 KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP,
28 CTL_T(KC_CAPS),RGB_SPI, RGB_SPD, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_PGDN,
29 KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE,
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
31 [2] = LAYOUT(
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
34 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
35 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
37 [3] = LAYOUT(
38 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
39 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
40 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
41 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
42 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
43 };
diff --git a/keyboards/kbdfans/maja_soldered/keymaps/via/rules.mk b/keyboards/kbdfans/maja_soldered/keymaps/via/rules.mk
new file mode 100755
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
diff --git a/keyboards/kbdfans/maja_soldered/maja_soldered.c b/keyboards/kbdfans/maja_soldered/maja_soldered.c
new file mode 100755
index 000000000..1f0f48c4c
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/maja_soldered.c
@@ -0,0 +1,29 @@
1/* Copyright 2020 dztech kbdfans
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "maja_soldered.h"
17
18void matrix_init_kb(void) {
19 setPinOutput(D4);
20 matrix_init_user();
21}
22
23bool led_update_kb(led_t led_state) {
24 bool res = led_update_user(led_state);
25 if(res) {
26 writePin(D4, !led_state.caps_lock);
27 }
28 return res;
29}
diff --git a/keyboards/kbdfans/maja_soldered/maja_soldered.h b/keyboards/kbdfans/maja_soldered/maja_soldered.h
new file mode 100755
index 000000000..4834c2b74
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/maja_soldered.h
@@ -0,0 +1,19 @@
1#pragma once
2
3#include "quantum.h"
4
5#define XXX KC_NO
6
7#define LAYOUT( \
8 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K3E, K0E, \
9 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
10 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
11 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
12 K40, K42, K43, K45, K47, K49, K4C, K4D, K4E \
13) { \
14 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
15 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
16 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D, K2E }, \
17 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
18 { K40, XXX, K42, K43, XXX, K45, XXX, K47, XXX, K49, XXX, XXX, K4C, K4D, K4E } \
19}
diff --git a/keyboards/kbdfans/maja_soldered/readme.md b/keyboards/kbdfans/maja_soldered/readme.md
new file mode 100755
index 000000000..f19c1d740
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/readme.md
@@ -0,0 +1,14 @@
1# MAJA_SOLDERED
2
3![MAJA_SOLDERED](https://i.ibb.co/4Kq0wfp/20200816100310.png)
4![MAJA_SOLDERED](https://i.ibb.co/3vJM805/20200816100345.png)
5
6* Keyboard Maintainer: [DZTECH](https://github.com/moyi4681)
7* Hardware Supported: MAJA_SOLDERED
8* Hardware Availability: [KBDFans](https://kbdfans.cn/)
9
10Make example for this keyboard (after setting up your build environment):
11
12 make kbdfans/maja_soldered:default
13
14See 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).
diff --git a/keyboards/kbdfans/maja_soldered/rules.mk b/keyboards/kbdfans/maja_soldered/rules.mk
new file mode 100755
index 000000000..6cd4d9260
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = yes # USB Nkey Rollover
19BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
20BLUETOOTH_ENABLE = no # Enable Bluetooth
21AUDIO_ENABLE = no # Audio output
22NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/lazydesigners/bolt/via/keymap.c b/keyboards/lazydesigners/bolt/via/keymap.c
new file mode 100644
index 000000000..a977f9c38
--- /dev/null
+++ b/keyboards/lazydesigners/bolt/via/keymap.c
@@ -0,0 +1,43 @@
1/* Copyright 2020 LAZYDESIGNERS
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19 [0] = LAYOUT(
20 KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
21 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
22 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, MO(2),
23 KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
24 ),
25 [1] = LAYOUT(
26 RESET, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
27 KC_INS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
28 KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
29 KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO
30 ),
31 [2] = LAYOUT(
32 RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
33 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
34 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
35 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
36 ),
37 [3] = LAYOUT(
38 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
39 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
40 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
41 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
42 ),
43};
diff --git a/keyboards/lazydesigners/bolt/via/rules.mk b/keyboards/lazydesigners/bolt/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/lazydesigners/bolt/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
diff --git a/keyboards/maartenwut/solheim68/config.h b/keyboards/maartenwut/solheim68/config.h
new file mode 100644
index 000000000..cb2070e87
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/config.h
@@ -0,0 +1,143 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0x4705
23#define PRODUCT_ID 0x7BFF
24#define DEVICE_VER 0x0001
25#define MANUFACTURER Maartenwut
26#define PRODUCT Solheim68
27
28/* key matrix size */
29#define MATRIX_ROWS 5
30#define MATRIX_COLS 16
31
32/*
33 * Keyboard Matrix Assignments
34 *
35 * Change this to how you wired your keyboard
36 * COLS: AVR pins used for columns, left to right
37 * ROWS: AVR pins used for rows, top to bottom
38 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
39 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
40 *
41*/
42#define MATRIX_ROW_PINS {E6,B0,B1,B2,B3}
43#define MATRIX_COL_PINS {F0,F1,F4,F5,F6,F7,C7,C6,B6,B5,B4,D7,D6,D4,D5,D3}
44#define UNUSED_PINS {B7,D0,D1,D2}
45
46/* COL2ROW, ROW2COL*/
47#define DIODE_DIRECTION COL2ROW
48
49/*
50 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
51 */
52// #define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
53
54// #define BACKLIGHT_PIN B7
55// #define BACKLIGHT_BREATHING
56// #define BACKLIGHT_LEVELS 3
57
58// #define RGB_DI_PIN E2
59// #ifdef RGB_DI_PIN
60// #define RGBLED_NUM 16
61// #define RGBLIGHT_HUE_STEP 8
62// #define RGBLIGHT_SAT_STEP 8
63// #define RGBLIGHT_VAL_STEP 8
64// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
65// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
66// /*== all animations enable ==*/
67// #define RGBLIGHT_ANIMATIONS
68// /*== or choose animations ==*/
69// #define RGBLIGHT_EFFECT_BREATHING
70// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
71// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
72// #define RGBLIGHT_EFFECT_SNAKE
73// #define RGBLIGHT_EFFECT_KNIGHT
74// #define RGBLIGHT_EFFECT_CHRISTMAS
75// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
76// #define RGBLIGHT_EFFECT_RGB_TEST
77// #define RGBLIGHT_EFFECT_ALTERNATING
78// /*== customize breathing effect ==*/
79// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
80// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
81// /*==== use exp() and sin() ====*/
82// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
83// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
84// #endif
85
86/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
87#define DEBOUNCE 5
88
89/* define if matrix has ghost (lacks anti-ghosting diodes) */
90//#define MATRIX_HAS_GHOST
91
92/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
93#define LOCKING_SUPPORT_ENABLE
94/* Locking resynchronize hack */
95#define LOCKING_RESYNC_ENABLE
96
97/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
98 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
99 */
100// #define GRAVE_ESC_CTRL_OVERRIDE
101
102/*
103 * Force NKRO
104 *
105 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
106 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
107 * makefile for this to work.)
108 *
109 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
110 * until the next keyboard reset.
111 *
112 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
113 * fully operational during normal computer usage.
114 *
115 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
116 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
117 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
118 * power-up.
119 *
120 */
121//#define FORCE_NKRO
122
123/*
124 * Feature disable options
125 * These options are also useful to firmware size reduction.
126 */
127
128/* disable debug print */
129//#define NO_DEBUG
130
131/* disable print */
132//#define NO_PRINT
133
134/* disable action features */
135//#define NO_ACTION_LAYER
136//#define NO_ACTION_TAPPING
137//#define NO_ACTION_ONESHOT
138//#define NO_ACTION_MACRO
139//#define NO_ACTION_FUNCTION
140
141/* Bootmagic Lite key configuration */
142// #define BOOTMAGIC_LITE_ROW 0
143// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/maartenwut/solheim68/info.json b/keyboards/maartenwut/solheim68/info.json
new file mode 100644
index 000000000..14a4a36f5
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/info.json
@@ -0,0 +1,397 @@
1{
2 "keyboard_name": "Solheim68",
3 "url": "https://github.com/Maartenwut/solheim68",
4 "maintainer": "maartenwut",
5 "width": 17.25,
6 "height": 5,
7 "layouts": {
8 "LAYOUT_all": {
9 "layout": [
10 {"x":0, "y":0},
11 {"x":1, "y":0},
12 {"x":2, "y":0},
13 {"x":3, "y":0},
14 {"x":4, "y":0},
15 {"x":5, "y":0},
16 {"x":6, "y":0},
17 {"x":7, "y":0},
18 {"x":8, "y":0},
19 {"x":9, "y":0},
20 {"x":10, "y":0},
21 {"x":11, "y":0},
22 {"x":12, "y":0},
23 {"x":13, "y":0},
24 {"x":14, "y":0},
25 {"x":15.25, "y":0},
26 {"x":16.25, "y":0},
27
28 {"x":0, "y":1, "w":1.5},
29 {"x":1.5, "y":1},
30 {"x":2.5, "y":1},
31 {"x":3.5, "y":1},
32 {"x":4.5, "y":1},
33 {"x":5.5, "y":1},
34 {"x":6.5, "y":1},
35 {"x":7.5, "y":1},
36 {"x":8.5, "y":1},
37 {"x":9.5, "y":1},
38 {"x":10.5, "y":1},
39 {"x":11.5, "y":1},
40 {"x":12.5, "y":1},
41 {"x":13.5, "y":1, "w":1.5},
42 {"x":15.25, "y":1},
43 {"x":16.25, "y":1},
44
45 {"x":0, "y":2, "w":1.75},
46 {"x":1.75, "y":2},
47 {"x":2.75, "y":2},
48 {"x":3.75, "y":2},
49 {"x":4.75, "y":2},
50 {"x":5.75, "y":2},
51 {"x":6.75, "y":2},
52 {"x":7.75, "y":2},
53 {"x":8.75, "y":2},
54 {"x":9.75, "y":2},
55 {"x":10.75, "y":2},
56 {"x":11.75, "y":2},
57 {"x":12.75, "y":2},
58 {"x":13.75, "y":2, "w":1.25},
59
60 {"x":0, "y":3, "w":1.25},
61 {"x":1.25, "y":3},
62 {"x":2.25, "y":3},
63 {"x":3.25, "y":3},
64 {"x":4.25, "y":3},
65 {"x":5.25, "y":3},
66 {"x":6.25, "y":3},
67 {"x":7.25, "y":3},
68 {"x":8.25, "y":3},
69 {"x":9.25, "y":3},
70 {"x":10.25, "y":3},
71 {"x":11.25, "y":3},
72 {"x":12.25, "y":3, "w":1.75},
73 {"x":14, "y":3},
74 {"x":15.25, "y":3},
75
76 {"x":0, "y":4, "w":1.25},
77 {"x":1.25, "y":4, "w":1.25},
78 {"x":2.5, "y":4, "w":1.25},
79 {"x":3.75, "y":4, "w":6.25},
80 {"x":10, "y":4, "w":1.25},
81 {"x":11.25, "y":4, "w":1.25},
82 {"x":12.5, "y":4, "w":1.25},
83 {"x":14.25, "y":4},
84 {"x":15.25, "y":4},
85 {"x":16.25, "y":4}
86 ]
87 },
88 "LAYOUT_68_ansi": {
89 "layout": [
90 {"x":0, "y":0},
91 {"x":1, "y":0},
92 {"x":2, "y":0},
93 {"x":3, "y":0},
94 {"x":4, "y":0},
95 {"x":5, "y":0},
96 {"x":6, "y":0},
97 {"x":7, "y":0},
98 {"x":8, "y":0},
99 {"x":9, "y":0},
100 {"x":10, "y":0},
101 {"x":11, "y":0},
102 {"x":12, "y":0},
103 {"x":13, "y":0, "w":2},
104 {"x":15.25, "y":0},
105 {"x":16.25, "y":0},
106
107 {"x":0, "y":1, "w":1.5},
108 {"x":1.5, "y":1},
109 {"x":2.5, "y":1},
110 {"x":3.5, "y":1},
111 {"x":4.5, "y":1},
112 {"x":5.5, "y":1},
113 {"x":6.5, "y":1},
114 {"x":7.5, "y":1},
115 {"x":8.5, "y":1},
116 {"x":9.5, "y":1},
117 {"x":10.5, "y":1},
118 {"x":11.5, "y":1},
119 {"x":12.5, "y":1},
120 {"x":13.5, "y":1, "w":1.5},
121 {"x":15.25, "y":1},
122 {"x":16.25, "y":1},
123
124 {"x":0, "y":2, "w":1.75},
125 {"x":1.75, "y":2},
126 {"x":2.75, "y":2},
127 {"x":3.75, "y":2},
128 {"x":4.75, "y":2},
129 {"x":5.75, "y":2},
130 {"x":6.75, "y":2},
131 {"x":7.75, "y":2},
132 {"x":8.75, "y":2},
133 {"x":9.75, "y":2},
134 {"x":10.75, "y":2},
135 {"x":11.75, "y":2},
136 {"x":12.75, "y":2, "w":2.25},
137
138 {"x":0, "y":3, "w":2.25},
139 {"x":2.25, "y":3},
140 {"x":3.25, "y":3},
141 {"x":4.25, "y":3},
142 {"x":5.25, "y":3},
143 {"x":6.25, "y":3},
144 {"x":7.25, "y":3},
145 {"x":8.25, "y":3},
146 {"x":9.25, "y":3},
147 {"x":10.25, "y":3},
148 {"x":11.25, "y":3},
149 {"x":12.25, "y":3, "w":2.75},
150 {"x":15.25, "y":3},
151
152 {"x":0, "y":4, "w":1.25},
153 {"x":1.25, "y":4, "w":1.25},
154 {"x":2.5, "y":4, "w":1.25},
155 {"x":3.75, "y":4, "w":6.25},
156 {"x":10, "y":4, "w":1.25},
157 {"x":11.25, "y":4, "w":1.25},
158 {"x":12.5, "y":4, "w":1.25},
159 {"x":14.25, "y":4},
160 {"x":15.25, "y":4},
161 {"x":16.25, "y":4}
162 ]
163 },
164 "LAYOUT_68_iso": {
165 "layout": [
166 {"x":0, "y":0},
167 {"x":1, "y":0},
168 {"x":2, "y":0},
169 {"x":3, "y":0},
170 {"x":4, "y":0},
171 {"x":5, "y":0},
172 {"x":6, "y":0},
173 {"x":7, "y":0},
174 {"x":8, "y":0},
175 {"x":9, "y":0},
176 {"x":10, "y":0},
177 {"x":11, "y":0},
178 {"x":12, "y":0},
179 {"x":13, "y":0, "w":2},
180 {"x":15.25, "y":0},
181 {"x":16.25, "y":0},
182
183 {"x":0, "y":1, "w":1.5},
184 {"x":1.5, "y":1},
185 {"x":2.5, "y":1},
186 {"x":3.5, "y":1},
187 {"x":4.5, "y":1},
188 {"x":5.5, "y":1},
189 {"x":6.5, "y":1},
190 {"x":7.5, "y":1},
191 {"x":8.5, "y":1},
192 {"x":9.5, "y":1},
193 {"x":10.5, "y":1},
194 {"x":11.5, "y":1},
195 {"x":12.5, "y":1},
196 {"x":15.25, "y":1},
197 {"x":16.25, "y":1},
198
199 {"x":0, "y":2, "w":1.75},
200 {"x":1.75, "y":2},
201 {"x":2.75, "y":2},
202 {"x":3.75, "y":2},
203 {"x":4.75, "y":2},
204 {"x":5.75, "y":2},
205 {"x":6.75, "y":2},
206 {"x":7.75, "y":2},
207 {"x":8.75, "y":2},
208 {"x":9.75, "y":2},
209 {"x":10.75, "y":2},
210 {"x":11.75, "y":2},
211 {"x":12.75, "y":2},
212 {"x":13.75, "y":1, "w":1.25, "h":2},
213
214 {"x":0, "y":3, "w":1.25},
215 {"x":1.25, "y":3},
216 {"x":2.25, "y":3},
217 {"x":3.25, "y":3},
218 {"x":4.25, "y":3},
219 {"x":5.25, "y":3},
220 {"x":6.25, "y":3},
221 {"x":7.25, "y":3},
222 {"x":8.25, "y":3},
223 {"x":9.25, "y":3},
224 {"x":10.25, "y":3},
225 {"x":11.25, "y":3},
226 {"x":12.25, "y":3, "w":2.75},
227 {"x":15.25, "y":3},
228
229 {"x":0, "y":4, "w":1.25},
230 {"x":1.25, "y":4, "w":1.25},
231 {"x":2.5, "y":4, "w":1.25},
232 {"x":3.75, "y":4, "w":6.25},
233 {"x":10, "y":4, "w":1.25},
234 {"x":11.25, "y":4, "w":1.25},
235 {"x":12.5, "y":4, "w":1.25},
236 {"x":14.25, "y":4},
237 {"x":15.25, "y":4},
238 {"x":16.25, "y":4}
239 ]
240 },
241 "LAYOUT_68_ansi_split_rshift": {
242 "layout": [
243 {"x":0, "y":0},
244 {"x":1, "y":0},
245 {"x":2, "y":0},
246 {"x":3, "y":0},
247 {"x":4, "y":0},
248 {"x":5, "y":0},
249 {"x":6, "y":0},
250 {"x":7, "y":0},
251 {"x":8, "y":0},
252 {"x":9, "y":0},
253 {"x":10, "y":0},
254 {"x":11, "y":0},
255 {"x":12, "y":0},
256 {"x":13, "y":0, "w":2},
257 {"x":15.25, "y":0},
258 {"x":16.25, "y":0},
259
260 {"x":0, "y":1, "w":1.5},
261 {"x":1.5, "y":1},
262 {"x":2.5, "y":1},
263 {"x":3.5, "y":1},
264 {"x":4.5, "y":1},
265 {"x":5.5, "y":1},
266 {"x":6.5, "y":1},
267 {"x":7.5, "y":1},
268 {"x":8.5, "y":1},
269 {"x":9.5, "y":1},
270 {"x":10.5, "y":1},
271 {"x":11.5, "y":1},
272 {"x":12.5, "y":1},
273 {"x":13.5, "y":1, "w":1.5},
274 {"x":15.25, "y":1},
275 {"x":16.25, "y":1},
276
277 {"x":0, "y":2, "w":1.75},
278 {"x":1.75, "y":2},
279 {"x":2.75, "y":2},
280 {"x":3.75, "y":2},
281 {"x":4.75, "y":2},
282 {"x":5.75, "y":2},
283 {"x":6.75, "y":2},
284 {"x":7.75, "y":2},
285 {"x":8.75, "y":2},
286 {"x":9.75, "y":2},
287 {"x":10.75, "y":2},
288 {"x":11.75, "y":2},
289 {"x":12.75, "y":2, "w":2.25},
290
291 {"x":0, "y":3, "w":2.25},
292 {"x":2.25, "y":3},
293 {"x":3.25, "y":3},
294 {"x":4.25, "y":3},
295 {"x":5.25, "y":3},
296 {"x":6.25, "y":3},
297 {"x":7.25, "y":3},
298 {"x":8.25, "y":3},
299 {"x":9.25, "y":3},
300 {"x":10.25, "y":3},
301 {"x":11.25, "y":3},
302 {"x":12.25, "y":3, "w":1.75},
303 {"x":14, "y":3},
304 {"x":15.25, "y":3},
305
306 {"x":0, "y":4, "w":1.25},
307 {"x":1.25, "y":4, "w":1.25},
308 {"x":2.5, "y":4, "w":1.25},
309 {"x":3.75, "y":4, "w":6.25},
310 {"x":10, "y":4, "w":1.25},
311 {"x":11.25, "y":4, "w":1.25},
312 {"x":12.5, "y":4, "w":1.25},
313 {"x":14.25, "y":4},
314 {"x":15.25, "y":4},
315 {"x":16.25, "y":4}
316 ]
317 },
318 "LAYOUT_68_iso_split_rshift": {
319 "layout": [
320 {"x":0, "y":0},
321 {"x":1, "y":0},
322 {"x":2, "y":0},
323 {"x":3, "y":0},
324 {"x":4, "y":0},
325 {"x":5, "y":0},
326 {"x":6, "y":0},
327 {"x":7, "y":0},
328 {"x":8, "y":0},
329 {"x":9, "y":0},
330 {"x":10, "y":0},
331 {"x":11, "y":0},
332 {"x":12, "y":0},
333 {"x":13, "y":0, "w":2},
334 {"x":15.25, "y":0},
335 {"x":16.25, "y":0},
336
337 {"x":0, "y":1, "w":1.5},
338 {"x":1.5, "y":1},
339 {"x":2.5, "y":1},
340 {"x":3.5, "y":1},
341 {"x":4.5, "y":1},
342 {"x":5.5, "y":1},
343 {"x":6.5, "y":1},
344 {"x":7.5, "y":1},
345 {"x":8.5, "y":1},
346 {"x":9.5, "y":1},
347 {"x":10.5, "y":1},
348 {"x":11.5, "y":1},
349 {"x":12.5, "y":1},
350 {"x":15.25, "y":1},
351 {"x":16.25, "y":1},
352
353 {"x":0, "y":2, "w":1.75},
354 {"x":1.75, "y":2},
355 {"x":2.75, "y":2},
356 {"x":3.75, "y":2},
357 {"x":4.75, "y":2},
358 {"x":5.75, "y":2},
359 {"x":6.75, "y":2},
360 {"x":7.75, "y":2},
361 {"x":8.75, "y":2},
362 {"x":9.75, "y":2},
363 {"x":10.75, "y":2},
364 {"x":11.75, "y":2},
365 {"x":12.75, "y":2},
366 {"x":13.75, "y":1, "w":1.25, "h":2},
367
368 {"x":0, "y":3, "w":1.25},
369 {"x":1.25, "y":3},
370 {"x":2.25, "y":3},
371 {"x":3.25, "y":3},
372 {"x":4.25, "y":3},
373 {"x":5.25, "y":3},
374 {"x":6.25, "y":3},
375 {"x":7.25, "y":3},
376 {"x":8.25, "y":3},
377 {"x":9.25, "y":3},
378 {"x":10.25, "y":3},
379 {"x":11.25, "y":3},
380 {"x":12.25, "y":3, "w":1.75},
381 {"x":14, "y":3},
382 {"x":15.25, "y":3},
383
384 {"x":0, "y":4, "w":1.25},
385 {"x":1.25, "y":4, "w":1.25},
386 {"x":2.5, "y":4, "w":1.25},
387 {"x":3.75, "y":4, "w":6.25},
388 {"x":10, "y":4, "w":1.25},
389 {"x":11.25, "y":4, "w":1.25},
390 {"x":12.5, "y":4, "w":1.25},
391 {"x":14.25, "y":4},
392 {"x":15.25, "y":4},
393 {"x":16.25, "y":4}
394 ]
395 }
396 }
397} \ No newline at end of file
diff --git a/keyboards/maartenwut/solheim68/keymaps/default/keymap.c b/keyboards/maartenwut/solheim68/keymaps/default/keymap.c
new file mode 100644
index 000000000..728e8019a
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19 [0] = LAYOUT_all(
20 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC, KC_MPLY, KC_HOME,
21 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END,
22 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_BSLS, KC_ENT,
23 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
24 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
25 [1] = LAYOUT_all(
26 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_PSCR, KC_PGUP,
27 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN,
28 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
29 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
31};
diff --git a/keyboards/maartenwut/solheim68/keymaps/default/readme.md b/keyboards/maartenwut/solheim68/keymaps/default/readme.md
new file mode 100644
index 000000000..6e9745403
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/keymaps/default/readme.md
@@ -0,0 +1 @@
This is the default keymap for the Solheim68. \ No newline at end of file
diff --git a/keyboards/maartenwut/solheim68/readme.md b/keyboards/maartenwut/solheim68/readme.md
new file mode 100644
index 000000000..1cf0ee946
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/readme.md
@@ -0,0 +1,17 @@
1# Solheim68
2
3A replacement PCB for the VA68M (v2) with Mini-USB.
4
5* Keyboard Maintainer: [Maartenwut](https://github.com/Maartenwut)
6* Hardware Supported: Solheim68 PCB
7* Hardware Availability: [Open source on GitHub](https://github.com/Maartenwut/solheim68)
8
9Make example for this keyboard (after setting up your build environment):
10
11 make maartenwut/solheim68:default
12
13Flashing example for this keyboard:
14
15 make maartenwut/solheim68:default:flash
16
17See 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).
diff --git a/keyboards/maartenwut/solheim68/rules.mk b/keyboards/maartenwut/solheim68/rules.mk
new file mode 100644
index 000000000..a90eef1fc
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/maartenwut/solheim68/solheim68.c b/keyboards/maartenwut/solheim68/solheim68.c
new file mode 100644
index 000000000..27f90f4e8
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/solheim68.c
@@ -0,0 +1,16 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "solheim68.h"
diff --git a/keyboards/maartenwut/solheim68/solheim68.h b/keyboards/maartenwut/solheim68/solheim68.h
new file mode 100644
index 000000000..2f6339bd1
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/solheim68.h
@@ -0,0 +1,102 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19#define XXX KC_NO
20
21/* This a shortcut to help you visually see your layout.
22 *
23 * The first section contains all of the arguments representing the physical
24 * layout of the board and position of the keys.
25 *
26 * The second converts the arguments into a two-dimensional array which
27 * represents the switch matrix.
28 */
29#define LAYOUT_all( \
30 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k2e, k0d, k0e, k0f, \
31 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
32 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
33 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
34 k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
35) \
36{ \
37 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
38 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
39 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, XXX }, \
40 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, XXX }, \
41 { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
42}
43
44#define LAYOUT_68_ansi( \
45 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
46 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
47 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
48 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
49 k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
50) \
51{ \
52 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
53 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
54 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, XXX, XXX }, \
55 { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX, k3e, XXX }, \
56 { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
57}
58
59#define LAYOUT_68_iso( \
60 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
61 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, k1f, \
62 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
63 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
64 k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
65) \
66{ \
67 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
68 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e, k1f }, \
69 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, XXX, XXX }, \
70 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX, k3e, XXX }, \
71 { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
72}
73
74#define LAYOUT_68_ansi_split_rshift( \
75 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
76 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
77 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
78 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
79 k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
80) \
81{ \
82 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
83 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
84 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, XXX, XXX }, \
85 { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, XXX }, \
86 { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
87}
88
89#define LAYOUT_68_iso_split_rshift( \
90 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
91 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, k1f, \
92 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
93 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
94 k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
95) \
96{ \
97 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
98 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e, k1f }, \
99 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, XXX, XXX }, \
100 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, XXX }, \
101 { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
102}
diff --git a/keyboards/marksard/leftover30/config.h b/keyboards/marksard/leftover30/config.h
new file mode 100644
index 000000000..42c6c6287
--- /dev/null
+++ b/keyboards/marksard/leftover30/config.h
@@ -0,0 +1,138 @@
1/*
2Copyright 2020 marksard
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0xDFA8
25#define DEVICE_VER 0x0001
26#define MANUFACTURER marksard
27#define PRODUCT leftover30
28
29/* Encoder */
30#define ENCODERS_PAD_A { F4 }
31#define ENCODERS_PAD_B { F5 }
32// #define ENCODER_DIRECTION_FLIP
33
34/* key matrix size */
35#define MATRIX_ROWS 8
36#define MATRIX_COLS 5
37
38/*
39 * Keyboard Matrix Assignments
40 *
41 * Change this to how you wired your keyboard
42 * COLS: AVR pins used for columns, left to right
43 * ROWS: AVR pins used for rows, top to bottom
44 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
45 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
46 *
47 */
48#define MATRIX_ROW_PINS { B6, B2, F7, F6, B3, B1, D4, D0 }
49#define MATRIX_COL_PINS { B5, B4, E6, D7, C6 }
50#define UNUSED_PINS
51
52/* COL2ROW, ROW2COL*/
53#define DIODE_DIRECTION COL2ROW
54
55#define RGB_DI_PIN D3
56#ifdef RGB_DI_PIN
57 #define RGBLED_NUM 6
58 #define RGBLIGHT_HUE_STEP 8
59 #define RGBLIGHT_SAT_STEP 8
60 #define RGBLIGHT_VAL_STEP 8
61 #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
62 #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
63/*== all animations enable ==*/
64 #define RGBLIGHT_ANIMATIONS
65/*== or choose animations ==*/
66// #define RGBLIGHT_EFFECT_BREATHING
67// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
68// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
69// #define RGBLIGHT_EFFECT_SNAKE
70// #define RGBLIGHT_EFFECT_KNIGHT
71// #define RGBLIGHT_EFFECT_CHRISTMAS
72// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
73// #define RGBLIGHT_EFFECT_RGB_TEST
74// #define RGBLIGHT_EFFECT_ALTERNATING
75/*== customize breathing effect ==*/
76 /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
77 #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
78 /*==== use exp() and sin() ====*/
79 #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
80 #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
81#endif
82
83/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
84#define DEBOUNCE 5
85
86/* define if matrix has ghost (lacks anti-ghosting diodes) */
87//#define MATRIX_HAS_GHOST
88
89/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
90#define LOCKING_SUPPORT_ENABLE
91/* Locking resynchronize hack */
92#define LOCKING_RESYNC_ENABLE
93
94/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
95 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
96 */
97// #define GRAVE_ESC_CTRL_OVERRIDE
98
99/*
100 * Force NKRO
101 *
102 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
103 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
104 * makefile for this to work.)
105 *
106 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
107 * until the next keyboard reset.
108 *
109 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
110 * fully operational during normal computer usage.
111 *
112 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
113 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
114 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
115 * power-up.
116 *
117 */
118//#define FORCE_NKRO
119
120/*
121 * Feature disable options
122 * These options are also useful to firmware size reduction.
123 */
124
125/* disable debug print */
126//#define NO_DEBUG
127
128/* disable print */
129//#define NO_PRINT
130
131/* disable action features */
132//#define NO_ACTION_LAYER
133//#define NO_ACTION_TAPPING
134//#define NO_ACTION_ONESHOT
135
136/* disable these deprecated features by default */
137#define NO_ACTION_MACRO
138#define NO_ACTION_FUNCTION
diff --git a/keyboards/marksard/leftover30/info.json b/keyboards/marksard/leftover30/info.json
new file mode 100644
index 000000000..700d08d9d
--- /dev/null
+++ b/keyboards/marksard/leftover30/info.json
@@ -0,0 +1,198 @@
1{
2 "keyboard_name": "Leftover30",
3 "url": "https://github.com/marksard/Keyboards",
4 "maintainer": "marksard",
5 "width": 11.5,
6 "height": 4,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [
10 {
11 "label": "Q",
12 "x": 0.5,
13 "y": 0
14 },
15 {
16 "label": "W",
17 "x": 1.5,
18 "y": 0
19 },
20 {
21 "label": "E",
22 "x": 2.5,
23 "y": 0
24 },
25 {
26 "label": "R",
27 "x": 3.5,
28 "y": 0
29 },
30 {
31 "label": "T",
32 "x": 4.5,
33 "y": 0
34 },
35 {
36 "label": "Y",
37 "x": 5.5,
38 "y": 0
39 },
40 {
41 "label": "U",
42 "x": 6.5,
43 "y": 0
44 },
45 {
46 "label": "I",
47 "x": 7.5,
48 "y": 0
49 },
50 {
51 "label": "O",
52 "x": 8.5,
53 "y": 0
54 },
55 {
56 "label": "P",
57 "x": 9.5,
58 "y": 0
59 },
60 {
61 "label": "BS",
62 "x": 10.5,
63 "y": 0
64 },
65 {
66 "label": "A",
67 "x": 0.75,
68 "y": 1
69 },
70 {
71 "label": "S",
72 "x": 1.75,
73 "y": 1
74 },
75 {
76 "label": "D",
77 "x": 2.75,
78 "y": 1
79 },
80 {
81 "label": "F",
82 "x": 3.75,
83 "y": 1
84 },
85 {
86 "label": "G",
87 "x": 4.75,
88 "y": 1
89 },
90 {
91 "label": "H",
92 "x": 5.75,
93 "y": 1
94 },
95 {
96 "label": "J",
97 "x": 6.75,
98 "y": 1
99 },
100 {
101 "label": "K",
102 "x": 7.75,
103 "y": 1
104 },
105 {
106 "label": "L",
107 "x": 8.75,
108 "y": 1
109 },
110 {
111 "label": "Enter",
112 "x": 9.75,
113 "y": 1,
114 "w": 1.75
115 },
116 {
117 "label": "Z",
118 "x": 1.25,
119 "y": 2
120 },
121 {
122 "label": "X",
123 "x": 2.25,
124 "y": 2
125 },
126 {
127 "label": "C",
128 "x": 3.25,
129 "y": 2
130 },
131 {
132 "label": "V",
133 "x": 4.25,
134 "y": 2
135 },
136 {
137 "label": "B",
138 "x": 5.25,
139 "y": 2
140 },
141 {
142 "label": "N",
143 "x": 6.25,
144 "y": 2
145 },
146 {
147 "label": "M",
148 "x": 7.25,
149 "y": 2
150 },
151 {
152 "label": "<",
153 "x": 8.25,
154 "y": 2
155 },
156 {
157 "label": ">",
158 "x": 9.25,
159 "y": 2
160 },
161 {
162 "label": "?",
163 "x": 10.25,
164 "y": 2,
165 "w": 1.25
166 },
167 {
168 "label": "",
169 "x": 0,
170 "y": 3
171 },
172 {
173 "label": "Alt",
174 "x": 1.5,
175 "y": 3,
176 "w": 1.25
177 },
178 {
179 "label": "",
180 "x": 2.75,
181 "y": 3,
182 "w": 6.25
183 },
184 {
185 "label": "Fn1",
186 "x": 9,
187 "y": 3
188 },
189 {
190 "label": "Ctrl",
191 "x": 10,
192 "y": 3,
193 "w": 1.5
194 }
195 ]
196 }
197 }
198}
diff --git a/keyboards/marksard/leftover30/keymaps/default/config.h b/keyboards/marksard/leftover30/keymaps/default/config.h
new file mode 100644
index 000000000..8bffbbb3b
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/config.h
@@ -0,0 +1,24 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19// place overrides here
20#define TAPPING_TERM 200
21#define IGNORE_MOD_TAP_INTERRUPT
22
23#define TAPPING_LAYER_TERM 150 // Custom LT Tapping term
24#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/marksard/leftover30/keymaps/default/keymap.c b/keyboards/marksard/leftover30/keymaps/default/keymap.c
new file mode 100644
index 000000000..60751cd1c
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/keymap.c
@@ -0,0 +1,162 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layer_number {
19 _BASE,
20 _LOWER,
21 _RAISE,
22 _ADJUST,
23};
24
25enum custom_keycodes {
26 RGBRST = SAFE_RANGE,
27 LOWER,
28 RAISE,
29 KANJI,
30};
31
32// #define KC_ESAD LT(_ADJUST, KC_ESC)
33// #define KC_BSLO LT(_LOWER, KC_BSPC)
34#define KC_LOWR MO(_LOWER)
35#define KC_SPRA LT(_RAISE, KC_SPC)
36#define KC_AJST MO(_ADJUST)
37
38#define KC_Q_AL LALT_T(KC_Q)
39#define KC_A_CT LCTL_T(KC_A)
40#define KC_Z_SF LSFT_T(KC_Z)
41#define KC_X_AL LALT_T(KC_X)
42#define KC_ENSF RSFT_T(KC_ENT)
43#define KC_SLSF RSFT_T(KC_SLSH)
44
45#define KC_F1AL LALT_T(KC_F1)
46#define KC_F6CT LCTL_T(KC_F6)
47#define KC_11SF LSFT_T(KC_F11)
48#define KC_12AL LALT_T(KC_F12)
49#define KC_QUSF RCTL_T(KC_QUOT)
50#define KC_ROSF RSFT_T(KC_RO)
51
52const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
53 [_BASE] = LAYOUT_all(
54 //,-----------------------------------------------------------------------------------------------------------.
55 KC_Q_AL, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
56 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
57 KC_A_CT, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENSF,
58 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
59 KC_Z_SF, KC_X_AL, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSF,
60 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
61 KC_LCTL, KC_LGUI, KC_SPRA, KC_LOWR, KC_RCTL
62 //`-----------------------------------------------------------------------------------------------------------'
63 ),
64
65 [_LOWER] = LAYOUT_all(
66 //,-----------------------------------------------------------------------------------------------------------.
67 KC_F1AL, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_EQL, KC_JYEN, KC_LBRC, KC_RBRC, KC_BSLS,
68 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
69 KC_F6CT, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, KC_QUSF,
70 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
71 KC_11SF, KC_12AL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_GRV, KC_RO, KC_SLSH, KC_ROSF,
72 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
73 _______, _______, KC_AJST, _______, _______
74 //`-----------------------------------------------------------------------------------------------------------'
75 ),
76
77 [_RAISE] = LAYOUT_all(
78 //,-----------------------------------------------------------------------------------------------------------.
79 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
80 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
81 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______,
82 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
83 KC_LSFT, XXXXXXX, KC_ESC, KC_TAB, KANJI, KC_DEL, KC_COMM, KC_DOT, KC_BSLS, KC_ROSF,
84 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
85 _______, _______, _______, KC_AJST, _______
86 //`-----------------------------------------------------------------------------------------------------------'
87 ),
88
89 [_ADJUST] = LAYOUT_all(
90 //,-----------------------------------------------------------------------------------------------------------.
91 RESET, RGBRST, AG_NORM, AG_SWAP, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_INS, KC_PSCR,
92 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
93 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NLCK,
94 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
95 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, KC_CAPS,
96 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
97 _______, _______, _______, _______, KC_CAPS
98 //`-----------------------------------------------------------------------------------------------------------'
99 )
100};
101
102uint16_t get_tapping_term(uint16_t keycode) {
103 switch (keycode) {
104 case KC_SPRA:
105 return TAPPING_LAYER_TERM;
106 default:
107 return TAPPING_TERM;
108 }
109}
110
111bool process_record_user(uint16_t keycode, keyrecord_t *record) {
112
113 bool result = false;
114 switch (keycode) {
115 case KANJI:
116 if (record->event.pressed) {
117 register_code16(keymap_config.swap_lalt_lgui ? A(KC_GRV) : KC_LANG2);
118 } else {
119 unregister_code16(keymap_config.swap_lalt_lgui ? A(KC_GRV) : KC_LANG2);
120 }
121 break;
122#ifdef RGBLIGHT_ENABLE
123 case RGBRST:
124 if (record->event.pressed) {
125 eeconfig_update_rgblight_default();
126 rgblight_enable();
127 }
128 break;
129#endif
130 default:
131 result = true;
132 break;
133 }
134
135 return result;
136}
137
138void encoder_update_user(uint8_t index, bool clockwise) {
139 if (index == 0) {
140 if (IS_LAYER_ON(_ADJUST)) {
141 if (clockwise) {
142 rgblight_increase_hue_noeeprom();
143 } else {
144 rgblight_decrease_hue_noeeprom();
145 }
146 } else if (IS_LAYER_ON(_LOWER)) {
147 tap_code16((clockwise == true) ? LCTL(KC_Y) : LCTL(KC_Z));
148 } else if (IS_LAYER_ON(_RAISE)) {
149 tap_code16((clockwise == true) ? S(KC_DOWN) : S(KC_UP));
150 } else {
151 tap_code((clockwise == true) ? KC_WH_D : KC_WH_U);
152 }
153
154 }
155}
156
157// for exsample customize of LED inducator
158// bool led_update_user(led_t led_state) {
159// writePin(D2, IS_LAYER_ON(_LOWER));
160// writePin(D1, IS_LAYER_ON(_RAISE));
161// return false;
162// }
diff --git a/keyboards/marksard/leftover30/keymaps/default/readme.md b/keyboards/marksard/leftover30/keymaps/default/readme.md
new file mode 100644
index 000000000..05dcdc3d1
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for leftover30
diff --git a/keyboards/marksard/leftover30/keymaps/default/rules.mk b/keyboards/marksard/leftover30/keymaps/default/rules.mk
new file mode 100644
index 000000000..5af1ba853
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/rules.mk
@@ -0,0 +1 @@
ENCODER_ENABLE = yes
diff --git a/keyboards/marksard/leftover30/leftover30.c b/keyboards/marksard/leftover30/leftover30.c
new file mode 100644
index 000000000..df8152144
--- /dev/null
+++ b/keyboards/marksard/leftover30/leftover30.c
@@ -0,0 +1,37 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "leftover30.h"
18
19// Optional override functions below.
20// You can leave any or all of these undefined.
21// These are only required if you want to perform custom actions.
22
23void keyboard_pre_init_user(void) {
24 /* Set CAPSLOCK indicator pin as output */
25 setPinOutput(D1);
26 /* Set NUMLOCK indicator pin as output */
27 setPinOutput(D2);
28}
29
30bool led_update_kb(led_t led_state) {
31 bool res = led_update_user(led_state);
32 if(res) {
33 writePin(D2, led_state.num_lock);
34 writePin(D1, led_state.caps_lock);
35 }
36 return res;
37}
diff --git a/keyboards/marksard/leftover30/leftover30.h b/keyboards/marksard/leftover30/leftover30.h
new file mode 100644
index 000000000..901b9b570
--- /dev/null
+++ b/keyboards/marksard/leftover30/leftover30.h
@@ -0,0 +1,45 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21/* This is a shortcut to help you visually see your layout.
22 *
23 * The first section contains all of the arguments representing the physical
24 * layout of the board and position of the keys.
25 *
26 * The second converts the arguments into a two-dimensional array which
27 * represents the switch matrix.
28 */
29#define LAYOUT_all( \
30 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a,\
31 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19,\
32 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29,\
33 k30, k31, k32, k33, k34\
34) \
35{ \
36 { k09, k08, k07, k06, k05 }, \
37 { k19, k18, k17, k16, k15 }, \
38 { k29, k28, k27, k26, k25 }, \
39 { k0a, k34, k33, k32, k31 }, \
40\
41 { k04, k03, k02, k01, k00 }, \
42 { k14, k13, k12, k11, k10 }, \
43 { k24, k23, k22, k21, k20 }, \
44 { KC_NO, KC_NO, KC_NO, KC_NO, k30 } \
45}
diff --git a/keyboards/marksard/leftover30/readme.md b/keyboards/marksard/leftover30/readme.md
new file mode 100644
index 000000000..6fefb057f
--- /dev/null
+++ b/keyboards/marksard/leftover30/readme.md
@@ -0,0 +1,17 @@
1# leftover30
2
3![leftover30](https://raw.githubusercontent.com/marksard/Keyboards/master/_image/_leftover30.jpg)
4
5A 30% mini keyboard.
6
7* Keyboard Maintainer: [marksard](https://github.com/marksard)
8* Hardware Supported: LEFTOVER30 PCB (with Pro Micro)
9* Hardware Availability: [Mark's Garage](https://marksard.booth.pm/)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make marksard/leftover30:default
14
15See 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).
16
17[Build guide](https://github.com/marksard/Keyboards/blob/master/leftover30/documents/leftover30_buildguide.md)
diff --git a/keyboards/marksard/leftover30/rules.mk b/keyboards/marksard/leftover30/rules.mk
new file mode 100644
index 000000000..dd52fe113
--- /dev/null
+++ b/keyboards/marksard/leftover30/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = caterina
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/marksard/rhymestone/common/glcdfont.c b/keyboards/marksard/rhymestone/common/glcdfont.c
new file mode 100644
index 000000000..d9438aa5a
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/glcdfont.c
@@ -0,0 +1,233 @@
1// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
2// See gfxfont.h for newer custom bitmap font info.
3
4#include "progmem.h"
5
6// Standard ASCII 5x7 font
7
8static const unsigned char font[] PROGMEM = {
9 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
10 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
11 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
12 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
13 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
14 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
15 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
16 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
17 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
18 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
19 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
20 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
21 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
22 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
23 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
24 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
25 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
26 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
27 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
28 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
29 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
30 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
31 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
32 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
33 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
34 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
35 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
36 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
37 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
38 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
39 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
40 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
43 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
44 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
45 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
46 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
47 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
48 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
49 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
50 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
51 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
52 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
53 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
54 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
55 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
56 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
57 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
58 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
59 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
60 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
61 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
62 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
63 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
64 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
65 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
66 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
67 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
68 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
69 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
70 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
71 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
72 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
73 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
74 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
75 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
76 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
77 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
78 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
79 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
80 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
81 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
82 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
83 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
84 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
85 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
86 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
87 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
88 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
89 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
90 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
91 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
92 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
93 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
94 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
95 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
96 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
97 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
98 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
99 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
100 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
101 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
102 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
103 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
104 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
105 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
106 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
107 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
108 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
109 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
110 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
111 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
112 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
113 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
114 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
115 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
116 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
117 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
118 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
119 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
120 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
121 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
122 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
123 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
124 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
125 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
126 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
127 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
128 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
129 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
130 0x4C, 0x10, 0x10, 0x10, 0x7C, 0x00,
131 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
132 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
133 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
134 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
135 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
136 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
137 0x00, 0x00, 0xD8, 0xDE, 0xDE, 0xDE,
138 0x1E, 0x1E, 0x1E, 0x1E, 0xFE, 0xFE,
139 0xFE, 0xFE, 0x00, 0xF0, 0xFF, 0xFF,
140 0xFF, 0xE3, 0xE0, 0xE0, 0xE0, 0xE0,
141 0xE0, 0xE0, 0x00, 0x80, 0xE0, 0xE0,
142 0xE0, 0x00, 0x00, 0x00, 0x00, 0xE0,
143 0xE0, 0xE0, 0xE0, 0x00, 0xE0, 0xE0,
144 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
145 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
146 0xE0, 0xE0, 0xE0, 0x00, 0xC0, 0xE0,
147 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
148 0xE0, 0xE0, 0xE0, 0x00, 0x80, 0xE0,
149 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
150 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0xFC,
151 0xFC, 0xFC, 0xFC, 0xE0, 0xE0, 0x80,
152 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
153 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x00,
154 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
155 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x80,
156 0x00, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
157 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0x80, 0xFE, 0xFF, 0xFF, 0x7F, 0x0F,
170 0x0E, 0x0E, 0xCE, 0xFF, 0xFF, 0xFF,
171 0x7F, 0x80, 0xFE, 0xFF, 0xFF, 0x3F,
172 0x01, 0x01, 0x01, 0x81, 0xFF, 0xFF,
173 0xFF, 0x3F, 0xE0, 0xFF, 0xFF, 0xFF,
174 0x8F, 0x80, 0x80, 0x80, 0xF8, 0xFF,
175 0xFF, 0x7F, 0xC1, 0xFE, 0xFF, 0xFF,
176 0x1F, 0x01, 0x01, 0xE1, 0xFF, 0xFF,
177 0xFF, 0x0F, 0x01, 0x01, 0xF1, 0xFF,
178 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF,
179 0xFF, 0x9D, 0x9D, 0x9D, 0x9D, 0x9F,
180 0x9F, 0x9F, 0x1F, 0x80, 0x9F, 0x9F,
181 0x9F, 0x9F, 0x9D, 0x9D, 0xDD, 0xFD,
182 0xFD, 0xFD, 0x39, 0xC0, 0xFF, 0xFF,
183 0xFF, 0x9F, 0x81, 0x01, 0xF1, 0xFF,
184 0xFF, 0xFF, 0x87, 0x81, 0x81, 0x81,
185 0xF9, 0xFF, 0xFF, 0xFF, 0x03, 0xFC,
186 0xFF, 0xFF, 0x3F, 0x01, 0x01, 0x01,
187 0x01, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0,
188 0xFF, 0xFF, 0xFF, 0x9F, 0x9D, 0x9D,
189 0x9D, 0x9D, 0x9F, 0x9F, 0x1F, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
202 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
203 0x00, 0x07, 0x07, 0x07, 0x07, 0x00,
204 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
205 0x07, 0x60, 0x73, 0x77, 0x77, 0x77,
206 0x77, 0x77, 0x77, 0x7F, 0x7F, 0x7F,
207 0x1F, 0x00, 0x07, 0x07, 0x07, 0x07,
208 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
209 0x03, 0x00, 0x00, 0x00, 0x07, 0x07,
210 0x07, 0x01, 0x00, 0x07, 0x07, 0x07,
211 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
212 0x07, 0x00, 0x00, 0x07, 0x07, 0x07,
213 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
214 0x07, 0x03, 0x00, 0x03, 0x07, 0x07,
215 0x07, 0x07, 0x07, 0x00, 0x03, 0x07,
216 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
217 0x07, 0x07, 0x03, 0x00, 0x07, 0x07,
218 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
219 0x07, 0x07, 0x07, 0x07, 0x00, 0x03,
220 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
221 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
228 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233};
diff --git a/keyboards/marksard/rhymestone/common/oled_helper.c b/keyboards/marksard/rhymestone/common/oled_helper.c
new file mode 100644
index 000000000..537650025
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/oled_helper.c
@@ -0,0 +1,87 @@
1#ifdef OLED_DRIVER_ENABLE
2#include QMK_KEYBOARD_H
3#include <stdio.h>
4#include <string.h>
5
6void render_logo(void) {
7
8 static const char PROGMEM logo_buf[]={
9 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
10 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
11 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
12 0};
13
14 oled_write_P(logo_buf, false);
15}
16
17void render_lock_status(void) {
18
19 // Host Keyboard LED Status
20 led_t led_state = host_keyboard_led_state();
21
22 oled_write_P(PSTR("Lock:"), false);
23 if (led_state.num_lock) {
24 oled_write_P(PSTR("Num "), false);
25 }
26 if (led_state.caps_lock) {
27 oled_write_P(PSTR("Caps "), false);
28 }
29 if (led_state.scroll_lock) {
30 oled_write_P(PSTR("Scrl"), false);
31 }
32
33 oled_write_P(PSTR("\n"), false);
34}
35
36static char keylog_buf[24] = "Key state ready.\n";
37const char code_to_name[60] = {
38 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
39 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
40 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
41 '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
42 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
43 ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
44
45void update_key_status(uint16_t keycode, keyrecord_t *record) {
46
47 if (!record->event.pressed) return;
48
49 char name = (keycode < 60) ? code_to_name[keycode] : ' ';
50 snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c\n",
51 record->event.key.row, record->event.key.col,
52 (uint16_t)keycode, name);
53}
54
55void render_key_status(void) {
56
57 oled_write(keylog_buf, false);
58}
59
60#ifdef RGBLIGHT_ENABLE
61extern rgblight_config_t rgblight_config;
62
63static char led_buf[24] = "LED state ready.\n";
64rgblight_config_t rgblight_config_bak;
65void update_led_status(void) {
66
67 if (rgblight_config_bak.enable != rgblight_config.enable ||
68 rgblight_config_bak.mode != rgblight_config.mode ||
69 rgblight_config_bak.hue != rgblight_config.hue ||
70 rgblight_config_bak.sat != rgblight_config.sat ||
71 rgblight_config_bak.val != rgblight_config.val
72 ) {
73 snprintf(led_buf, sizeof(led_buf) - 1, "LED%c:%2d hsv:%2d %2d %2d\n",
74 rgblight_config.enable ? '*' : '.', (uint8_t)rgblight_config.mode,
75 (uint8_t)(rgblight_config.hue / RGBLIGHT_HUE_STEP),
76 (uint8_t)(rgblight_config.sat / RGBLIGHT_SAT_STEP),
77 (uint8_t)(rgblight_config.val / RGBLIGHT_VAL_STEP));
78 rgblight_config_bak = rgblight_config;
79 }
80}
81
82void render_led_status(void) {
83
84 oled_write(led_buf, false);
85}
86#endif
87#endif
diff --git a/keyboards/marksard/rhymestone/common/oled_helper.h b/keyboards/marksard/rhymestone/common/oled_helper.h
new file mode 100644
index 000000000..02f7b94fa
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/oled_helper.h
@@ -0,0 +1,32 @@
1#ifdef OLED_DRIVER_ENABLE
2
3void render_logo(void);
4void render_lock_status(void);
5void update_key_status(uint16_t keycode, keyrecord_t *record);
6void render_key_status(void);
7
8#define RENDER_LOGO() render_logo()
9#define RENDER_LOCK_STATUS() render_lock_status()
10#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
11#define RENDER_KEY_STATUS() render_key_status()
12
13#ifdef RGBLIGHT_ENABLE
14 void update_led_status(void);
15 void render_led_status(void);
16 #define UPDATE_LED_STATUS() update_led_status()
17 #define RENDER_LED_STATUS() render_led_status()
18#else
19 #define UPDATE_LED_STATUS()
20 #define RENDER_LED_STATUS()
21#endif
22
23#else
24
25#define RENDER_LOGO()
26#define RENDER_LOCK_STATUS()
27#define UPDATE_KEY_STATUS(a, b)
28#define RENDER_KEY_STATUS()
29#define UPDATE_LED_STATUS()
30#define RENDER_LED_STATUS()
31
32#endif
diff --git a/keyboards/marksard/rhymestone/info.json b/keyboards/marksard/rhymestone/info.json
new file mode 100644
index 000000000..2c1ba9b37
--- /dev/null
+++ b/keyboards/marksard/rhymestone/info.json
@@ -0,0 +1,213 @@
1{
2 "keyboard_name": "Rhymestone",
3 "url": "https://github.com/marksard/Keyboards",
4 "maintainer": "marksard",
5 "width": 11,
6 "height": 4,
7 "layouts": {
8 "LAYOUT_ortho_4x10": {
9 "layout": [
10 {
11 "label": "Q",
12 "x": 0,
13 "y": 0
14 },
15 {
16 "label": "W",
17 "x": 1,
18 "y": 0
19 },
20 {
21 "label": "E",
22 "x": 2,
23 "y": 0
24 },
25 {
26 "label": "R",
27 "x": 3,
28 "y": 0
29 },
30 {
31 "label": "T",
32 "x": 4,
33 "y": 0
34 },
35 {
36 "label": "Y",
37 "x": 6,
38 "y": 0
39 },
40 {
41 "label": "U",
42 "x": 7,
43 "y": 0
44 },
45 {
46 "label": "I",
47 "x": 8,
48 "y": 0
49 },
50 {
51 "label": "O",
52 "x": 9,
53 "y": 0
54 },
55 {
56 "label": "P",
57 "x": 10,
58 "y": 0
59 },
60 {
61 "label": "A",
62 "x": 0,
63 "y": 1
64 },
65 {
66 "label": "S",
67 "x": 1,
68 "y": 1
69 },
70 {
71 "label": "D",
72 "x": 2,
73 "y": 1
74 },
75 {
76 "label": "F",
77 "x": 3,
78 "y": 1
79 },
80 {
81 "label": "G",
82 "x": 4,
83 "y": 1
84 },
85 {
86 "label": "H",
87 "x": 6,
88 "y": 1
89 },
90 {
91 "label": "J",
92 "x": 7,
93 "y": 1
94 },
95 {
96 "label": "K",
97 "x": 8,
98 "y": 1
99 },
100 {
101 "label": "L",
102 "x": 9,
103 "y": 1
104 },
105 {
106 "label": "Enter",
107 "x": 10,
108 "y": 1
109 },
110 {
111 "label": "Z",
112 "x": 0,
113 "y": 2
114 },
115 {
116 "label": "X",
117 "x": 1,
118 "y": 2
119 },
120 {
121 "label": "C",
122 "x": 2,
123 "y": 2
124 },
125 {
126 "label": "V",
127 "x": 3,
128 "y": 2
129 },
130 {
131 "label": "B",
132 "x": 4,
133 "y": 2
134 },
135 {
136 "label": "N",
137 "x": 6,
138 "y": 2
139 },
140 {
141 "label": "M",
142 "x": 7,
143 "y": 2
144 },
145 {
146 "label": ",",
147 "x": 8,
148 "y": 2
149 },
150 {
151 "label": ".",
152 "x": 9,
153 "y": 2
154 },
155 {
156 "label": "/",
157 "x": 10,
158 "y": 2
159 },
160 {
161 "label": "Ctrl",
162 "x": 0,
163 "y": 3
164 },
165 {
166 "label": "Win",
167 "x": 1,
168 "y": 3
169 },
170 {
171 "label": "Alt",
172 "x": 2,
173 "y": 3
174 },
175 {
176 "label": "Lower",
177 "x": 3,
178 "y": 3
179 },
180 {
181 "label": "backspace",
182 "x": 4,
183 "y": 3
184 },
185 {
186 "label": "space",
187 "x": 6,
188 "y": 3
189 },
190 {
191 "label": "Upper",
192 "x": 7,
193 "y": 3
194 },
195 {
196 "label": "Alt",
197 "x": 8,
198 "y": 3
199 },
200 {
201 "label": "App",
202 "x": 9,
203 "y": 3
204 },
205 {
206 "label": "Ctrl",
207 "x": 10,
208 "y": 3
209 }
210 ]
211 }
212 }
213}
diff --git a/keyboards/marksard/rhymestone/keymaps/default/config.h b/keyboards/marksard/rhymestone/keymaps/default/config.h
new file mode 100644
index 000000000..95f2d039b
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/config.h
@@ -0,0 +1,27 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19// place overrides here
20
21// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
22// #define USE_HASHTWENTY
23
24// If you plug in the USB on the right side, please enable MASTER_RIGHT
25// #define MASTER_RIGHT
26
27#define OLED_FONT_H "keyboards/rhymestone/common/glcdfont.c"
diff --git a/keyboards/marksard/rhymestone/keymaps/default/keymap.c b/keyboards/marksard/rhymestone/keymaps/default/keymap.c
new file mode 100644
index 000000000..2d695f76b
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/keymap.c
@@ -0,0 +1,226 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17#include "./common/oled_helper.h"
18
19enum layer_number {
20 _BASE,
21 _LOWER,
22 _RAISE,
23 _ADJUST,
24};
25
26enum custom_keycodes {
27 LOWER = SAFE_RANGE,
28 RAISE,
29 ADJUST,
30 KANJI,
31 RGBRST
32};
33
34// Base layer mod tap
35#define KC_Z_SF LSFT_T(KC_Z)
36#define KC_SLSF RSFT_T(KC_SLSH)
37
38// Lower layer mod tap
39#define KC_11SF LSFT_T(KC_F11)
40#define KC_GRSF RSFT_T(KC_GRV)
41
42const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
43 [_BASE] = LAYOUT_ortho_4x10(
44 //,---------------------------------------------------------------------------------------------------.
45 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
46 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
47 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
48 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
49 KC_Z_SF, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSF,
50 //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
51 KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_RGUI, KC_APP, KC_RCTL
52 //,---------------------------------------------------------------------------------------------------.
53 ),
54
55 [_LOWER] = LAYOUT_ortho_4x10(
56 //,---------------------------------------------------------------------------------------------------.
57 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
58 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
59 KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, KC_QUOT,
60 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
61 KC_11SF, KC_F12, KC_ESC, KC_TAB, KANJI, KC_DEL, XXXXXXX, XXXXXXX, KC_RO, KC_GRSF,
62 //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
63 _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______
64 //,---------------------------------------------------------------------------------------------------.
65 ),
66
67 [_RAISE] = LAYOUT_ortho_4x10(
68 //,---------------------------------------------------------------------------------------------------.
69 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
70 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
71 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RSFT,
72 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
73 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_RO, KC_COMM, KC_DOT, KC_SLSF,
74 //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
75 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
76 //,---------------------------------------------------------------------------------------------------.
77 ),
78
79 [_ADJUST] = LAYOUT_ortho_4x10(
80 //,---------------------------------------------------------------------------------------------------.
81 RESET, RGBRST, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_PSCR,
82 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
83 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NLCK,
84 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
85 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX,
86 //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
87 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
88 //,---------------------------------------------------------------------------------------------------.
89 )
90};
91
92#define L_BASE _BASE
93#define L_LOWER (1<<_LOWER)
94#define L_RAISE (1<<_RAISE)
95#define L_ADJUST (1<<_ADJUST)
96#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
97
98#ifdef OLED_DRIVER_ENABLE
99#include <stdio.h>
100#include <string.h>
101
102typedef struct {
103 uint8_t state;
104 char name[8];
105}LAYER_DISPLAY_NAME;
106
107#define LAYER_DISPLAY_MAX 5
108const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
109 {L_BASE, "Base"},
110 {L_BASE + 1, "Base"},
111 {L_LOWER, "Lower"},
112 {L_RAISE, "Raise"},
113 {L_ADJUST_TRI, "Adjust"}
114};
115
116static inline const char* get_leyer_status(void) {
117
118 for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
119 if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
120
121 return layer_display_name[i].name;
122 } else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
123
124 return layer_display_name[i].name;
125 }
126 }
127
128 return "?";
129}
130
131static char layer_status_buf[24] = "Layer state ready.\n";
132static inline void update_keymap_status(void) {
133
134 snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
135 keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
136}
137
138static inline void render_keymap_status(void) {
139
140 oled_write(layer_status_buf, false);
141}
142
143#define UPDATE_KEYMAP_STATUS() update_keymap_status()
144
145static inline void render_status(void) {
146
147 UPDATE_LED_STATUS();
148 RENDER_LED_STATUS();
149 render_keymap_status();
150 RENDER_LOCK_STATUS();
151 RENDER_KEY_STATUS();
152}
153
154oled_rotation_t oled_init_user(oled_rotation_t rotation) {
155
156 if (is_keyboard_master())
157 return OLED_ROTATION_180; // flips the display 180 degrees if offhand
158 return rotation;
159}
160
161void oled_task_user(void) {
162
163 if (is_keyboard_master()) {
164 render_status();
165 } else {
166 render_logo();
167 }
168}
169
170#else
171
172#define UPDATE_KEYMAP_STATUS()
173
174#endif
175
176bool process_record_user(uint16_t keycode, keyrecord_t *record) {
177
178 UPDATE_KEY_STATUS(keycode, record);
179
180 bool result = false;
181 switch (keycode) {
182 case LOWER:
183 if (record->event.pressed) {
184 layer_on(_LOWER);
185 } else {
186 layer_off(_LOWER);
187 }
188
189 update_tri_layer(_LOWER, _RAISE, _ADJUST);
190 break;
191 case RAISE:
192 if (record->event.pressed) {
193 layer_on(_RAISE);
194 } else {
195 layer_off(_RAISE);
196 }
197
198 update_tri_layer(_LOWER, _RAISE, _ADJUST);
199 break;
200 case KANJI:
201 if (record->event.pressed) {
202 if (keymap_config.swap_lalt_lgui == false) {
203 register_code(KC_LANG2);
204 } else {
205 register_code16(A(KC_GRV));
206 }
207 } else {
208 unregister_code(KC_LANG2);
209 }
210 break;
211 #ifdef RGBLIGHT_ENABLE
212 case RGBRST:
213 if (record->event.pressed) {
214 eeconfig_update_rgblight_default();
215 rgblight_enable();
216 }
217 break;
218 #endif
219 default:
220 result = true;
221 break;
222 }
223
224 UPDATE_KEYMAP_STATUS();
225 return result;
226}
diff --git a/keyboards/marksard/rhymestone/keymaps/default/rules.mk b/keyboards/marksard/rhymestone/keymaps/default/rules.mk
new file mode 100644
index 000000000..c86cab8cc
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/rules.mk
@@ -0,0 +1,9 @@
1MOUSEKEY_ENABLE = yes # Mouse keys
2TAP_DANCE_ENABLE = no
3
4RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
5OLED_DRIVER_ENABLE = no
6LTO_ENABLE = yes
7
8# If you want to change the display of OLED, you need to change here
9SRC += ./common/oled_helper.c \
diff --git a/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c b/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c
new file mode 100644
index 000000000..1d4e78af8
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c
@@ -0,0 +1,76 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layer_number {
19 _BASE,
20 _ADJUST,
21};
22
23enum custom_keycodes {
24 LOWER = SAFE_RANGE,
25 ADJUST,
26 RGBRST
27};
28
29// Layer Mode aliases
30#define KC_LTAD LT(_ADJUST, KC_NO)
31
32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
33 [_BASE] = LAYOUT_ortho_4x10(
34 //,---------------------------------------------------------------------------------------------------.
35 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
36 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
37 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
38 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
39 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
40 //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
41 KC_LTAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
42 //,---------------------------------------------------------------------------------------------------.
43 ),
44
45 [_ADJUST] = LAYOUT_ortho_4x10(
46 //,---------------------------------------------------------------------------------------------------.
47 RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
48 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
49 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
50 //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
51 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
52 //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
53 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
54 //,---------------------------------------------------------------------------------------------------.
55 )
56};
57
58bool process_record_user(uint16_t keycode, keyrecord_t *record) {
59
60 bool result = false;
61 switch (keycode) {
62 #ifdef RGBLIGHT_ENABLE
63 case RGBRST:
64 if (record->event.pressed) {
65 eeconfig_update_rgblight_default();
66 rgblight_enable();
67 }
68 break;
69 #endif
70 default:
71 result = true;
72 break;
73 }
74
75 return result;
76}
diff --git a/keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md b/keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md
new file mode 100644
index 000000000..f85906a83
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md
@@ -0,0 +1,3 @@
1# The switch tester keymap for Rhymestone
2
3This keymap is Switch Tester and RGB_MATRIX Light demo.
diff --git a/keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk b/keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk
new file mode 100644
index 000000000..78824da30
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk
@@ -0,0 +1,7 @@
1MOUSEKEY_ENABLE = no # Mouse keys
2TAP_DANCE_ENABLE = no
3
4RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
5OLED_DRIVER_ENABLE = no
6LTO_ENABLE = yes
7RGB_MATRIX_ENABLE = WS2812
diff --git a/keyboards/marksard/rhymestone/readme.md b/keyboards/marksard/rhymestone/readme.md
new file mode 100644
index 000000000..721e8beb3
--- /dev/null
+++ b/keyboards/marksard/rhymestone/readme.md
@@ -0,0 +1,18 @@
1# Rhymestone
2
3![Rhymestone](https://github.com/marksard/Keyboards/blob/7950099e0679a6626dc9f77a70b8c6616d7030cf/_image/_rhymestone.jpg)
4
5This is 40 keys split Ortholinear keyboard.
6
7* Keyboard Maintainer: [marksard](https://github.com/marksard)
8* Hardware Supported: Rhymestone PCB (with Pro Micro)
9* Hardware Availability: [marksard keyboards](https://github.com/marksard/Keyboards/blob/master/rhymestone/)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make marksard/rhymestone:default
14
15See 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).
16
17[Build guide](https://github.com/marksard/Keyboards/blob/master/rhymestone/documents/rhymestone_buildguide.md)
18[Firmware](https://github.com/marksard/qmk_firmware/tree/my_customize/keyboards/rhymestone)
diff --git a/keyboards/marksard/rhymestone/rev1/config.h b/keyboards/marksard/rhymestone/rev1/config.h
new file mode 100644
index 000000000..9a1bf0a1d
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/config.h
@@ -0,0 +1,152 @@
1/*
2Copyright 2020 marksard
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0xDFA1
25#define DEVICE_VER 0x0020
26#define MANUFACTURER marksard
27#define PRODUCT Rhymestone
28
29/* key matrix size */
30#define MATRIX_ROWS 8
31#define MATRIX_COLS 5
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42 */
43#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
44#define MATRIX_COL_PINS { D4, C6, D7, E6, B4 }
45#define UNUSED_PINS
46
47/* COL2ROW, ROW2COL*/
48#define DIODE_DIRECTION COL2ROW
49
50/*
51 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
52 */
53#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6
54
55// #define BACKLIGHT_PIN B7
56// #define BACKLIGHT_BREATHING
57// #define BACKLIGHT_LEVELS 3
58
59#define RGB_DI_PIN D3
60
61#ifdef RGBLIGHT_ENABLE
62// #ifdef RGB_DI_PIN
63 #define RGBLED_NUM 40
64 #define RGBLED_SPLIT {20, 20}
65 #define RGBLIGHT_HUE_STEP 8
66 #define RGBLIGHT_SAT_STEP 8
67 #define RGBLIGHT_VAL_STEP 8
68 #define RGBLIGHT_LIMIT_VAL 150 /* The maximum brightness level */
69 #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
70/*== all animations enable ==*/
71// #define RGBLIGHT_ANIMATIONS
72/*== or choose animations ==*/
73// #define RGBLIGHT_EFFECT_BREATHING
74 #define RGBLIGHT_EFFECT_RAINBOW_MOOD
75 #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
76// #define RGBLIGHT_EFFECT_SNAKE
77 #define RGBLIGHT_EFFECT_KNIGHT
78// #define RGBLIGHT_EFFECT_CHRISTMAS
79 #define RGBLIGHT_EFFECT_STATIC_GRADIENT
80// #define RGBLIGHT_EFFECT_RGB_TEST
81// #define RGBLIGHT_EFFECT_ALTERNATING
82/*== customize breathing effect ==*/
83 /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
84 #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
85 /*==== use exp() and sin() ====*/
86 #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
87 #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
88#endif
89
90#ifdef RGB_MATRIX_ENABLE
91 #define RGBLED_NUM 40 // Number of LEDs
92 #define DRIVER_LED_TOTAL RGBLED_NUM
93 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses
94 // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
95 // #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
96 #define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
97 // #define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
98 // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
99 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
100 #define RGB_MATRIX_HUE_STEP 8
101 #define RGB_MATRIX_SAT_STEP 8
102 #define RGB_MATRIX_VAL_STEP 8
103 #define RGB_MATRIX_SPD_STEP 10
104
105// #define DISABLE_RGB_MATRIX_ALPHAS_MODS
106// #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
107// #define DISABLE_RGB_MATRIX_BREATHING
108// #define DISABLE_RGB_MATRIX_BAND_SAT
109// #define DISABLE_RGB_MATRIX_BAND_VAL
110// #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
111// #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
112// #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
113// #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
114// #define DISABLE_RGB_MATRIX_CYCLE_ALL
115// #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
116// #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
117// #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
118// #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
119// #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
120// #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
121// #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
122// #define DISABLE_RGB_MATRIX_DUAL_BEACON
123// #define DISABLE_RGB_MATRIX_RAINBOW_BEACON
124// #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
125// #define DISABLE_RGB_MATRIX_RAINDROPS
126// #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
127
128 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
129// #define DISABLE_RGB_MATRIX_TYPING_HEATMAP
130// #define DISABLE_RGB_MATRIX_DIGITAL_RAIN
131
132// #define RGB_MATRIX_KEYPRESSES // reacts to keypresses
133
134// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
135// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE
136// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
137// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
138// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
139// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
140// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
141// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
142
143// #define DISABLE_RGB_MATRIX_SPLASH
144// #define DISABLE_RGB_MATRIX_MULTISPLASH
145// #define DISABLE_RGB_MATRIX_SOLID_SPLASH
146// #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
147
148 #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_TYPING_HEATMAP
149#endif
150
151/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
152#define DEBOUNCE 5
diff --git a/keyboards/marksard/rhymestone/rev1/rev1.c b/keyboards/marksard/rhymestone/rev1/rev1.c
new file mode 100644
index 000000000..a4dadd55c
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/rev1.c
@@ -0,0 +1,108 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "rev1.h"
18
19// Optional override functions below.
20// You can leave any or all of these undefined.
21// These are only required if you want to perform custom actions.
22
23#ifdef RGB_MATRIX_ENABLE
24led_config_t g_led_config = { {
25 { 10, 11, 12, 13, 0 },
26 { 9, 18, 19, 14, 1 },
27 { 8, 17, 16, 15, 2 },
28 { 7, 6, 5, 4, 3 },
29 { 30, 31, 32, 33, 20 },
30 { 29, 38, 39, 34, 21 },
31 { 28, 37, 36, 35, 22 },
32 { 27, 26, 25, 24, 23 }
33}, {
34 { 100, 0 }, { 100, 21 }, { 100, 43 }, { 100, 64 },
35 { 75, 64 }, { 50, 64 }, { 25, 64 }, { 0, 64 },
36 { 0, 43 }, { 0, 21 }, { 0, 0 },
37 { 25, 0 }, { 50, 0 }, { 75, 0 },
38 { 75, 21 }, { 75, 43 },
39 { 50, 43 }, { 25, 43 },
40 { 25, 21 }, { 50, 21 },
41 { 125, 0 }, { 125, 21 }, { 125, 43 }, { 125, 64 },
42 { 150, 64 }, { 175, 64 }, { 200, 64 }, { 225, 64 },
43 { 225, 43 }, { 225, 21 }, { 225, 0 },
44 { 200, 0 }, { 175, 0 }, { 150, 0 },
45 { 150, 21 }, { 150, 43 },
46 { 175, 43 }, { 200, 43 },
47 { 200, 21 }, { 150, 21 }
48}, {
49 4, 4, 4, 1,
50 1, 1, 1, 1,
51 4, 4, 4, 4,
52 4, 4, 4, 4,
53 4, 4, 4, 4,
54 4, 4, 4, 1,
55 1, 1, 1, 1,
56 4, 4, 4, 4,
57 4, 4, 4, 4,
58 4, 4, 4, 4
59} };
60#endif
61
62__attribute__((weak))
63void matrix_init_user(void) {}
64
65void matrix_init_kb(void) {
66
67#ifdef RGB_MATRIX_ENABLE
68 // if (!is_keyboard_master()) {
69 // g_led_config = (led_config_t){ {
70 // { 30, 31, 32, 33, 20 },
71 // { 29, 38, 39, 34, 21 },
72 // { 28, 37, 36, 35, 22 },
73 // { 27, 26, 25, 24, 23 },
74 // { 10, 11, 12, 13, 0 },
75 // { 9, 18, 19, 14, 1 },
76 // { 8, 17, 16, 15, 2 },
77 // { 7, 6, 5, 4, 3 }
78 // }, {
79 // { 125, 0 }, { 125, 21 }, { 125, 43 }, { 125, 64 },
80 // { 150, 64 }, { 175, 64 }, { 200, 64 }, { 225, 64 },
81 // { 225, 43 }, { 225, 21 }, { 225, 0 },
82 // { 200, 0 }, { 175, 0 }, { 150, 0 },
83 // { 150, 21 }, { 150, 43 },
84 // { 175, 43 }, { 200, 43 },
85 // { 200, 21 }, { 150, 21 },
86 // { 100, 0 }, { 100, 21 }, { 100, 43 }, { 100, 64 },
87 // { 75, 64 }, { 50, 64 }, { 25, 64 }, { 0, 64 },
88 // { 0, 43 }, { 0, 21 }, { 0, 0 },
89 // { 25, 0 }, { 50, 0 }, { 75, 0 },
90 // { 75, 21 }, { 75, 43 },
91 // { 50, 43 }, { 25, 43 },
92 // { 25, 21 }, { 50, 21 }
93 // }, {
94 // 4, 4, 4, 1,
95 // 1, 1, 1, 1,
96 // 4, 4, 4, 4,
97 // 4, 4, 4, 4,
98 // 4, 4, 4, 4,
99 // 4, 4, 4, 1,
100 // 1, 1, 1, 1,
101 // 4, 4, 4, 4,
102 // 4, 4, 4, 4,
103 // 4, 4, 4, 4
104 // } };
105 // }
106#endif
107 matrix_init_user();
108}
diff --git a/keyboards/marksard/rhymestone/rev1/rev1.h b/keyboards/marksard/rhymestone/rev1/rev1.h
new file mode 100644
index 000000000..855e288df
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/rev1.h
@@ -0,0 +1,89 @@
1/* Copyright 2020 marksard
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21/* This is a shortcut to help you visually see your layout.
22 *
23 * The first section contains all of the arguments representing the physical
24 * layout of the board and position of the keys.
25 *
26 * The second converts the arguments into a two-dimensional array which
27 * represents the switch matrix.
28 */
29
30#ifndef FLIP_HALF
31// Standard Keymap
32// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
33#define LAYOUT_ortho_4x10( \
34 L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
35 L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
36 L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
37 L30, L31, L32, L33, L34, R30, R31, R32, R33, R34 \
38 ) \
39 { \
40 { L00, L01, L02, L03, L04 }, \
41 { L10, L11, L12, L13, L14 }, \
42 { L20, L21, L22, L23, L24 }, \
43 { L30, L31, L32, L33, L34 }, \
44 { R04, R03, R02, R01, R00 }, \
45 { R14, R13, R12, R11, R10 }, \
46 { R24, R23, R22, R21, R20 }, \
47 { R34, R33, R32, R31, R30 }, \
48 }
49#else
50// Keymap with right side flipped
51// (TRRS jack on both halves are to the right)
52#define LAYOUT_ortho_4x10( \
53 L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
54 L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
55 L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
56 L30, L31, L32, L33, L34, R30, R31, R32, R33, R34 \
57 ) \
58 { \
59 { L04, L03, L02, L01, L00 }, \
60 { L14, L13, L12, L11, L10 }, \
61 { L24, L23, L22, L21, L20 }, \
62 { L34, L33, L32, L31, L30 }, \
63 { R04, R03, R02, R01, R00 }, \
64 { R14, R13, R12, R11, R10 }, \
65 { R24, R23, R22, R21, R20 }, \
66 { R34, R33, R32, R31, R30 }, \
67 }
68#endif
69
70#ifdef USE_HASHTWENTY // The HashTwenty is Alpha version of The Rhymestone
71#undef LAYOUT_ortho_4x10
72// HashTwenty layout
73#define LAYOUT_ortho_4x10( \
74 L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
75 L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
76 L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
77 L30, L31, L32, L33, L34, R30, R31, R32, R33, R34 \
78 ) \
79 { \
80 { L04, L03, L02, L01, L00 }, \
81 { L14, L13, L12, L11, L10 }, \
82 { L24, L23, L22, L21, L20 }, \
83 { L34, L33, L32, L31, L30 }, \
84 { R00, R01, R02, R03, R04 }, \
85 { R10, R11, R12, R13, R14 }, \
86 { R20, R21, R22, R23, R24 }, \
87 { R30, R31, R32, R33, R34 }, \
88 }
89#endif
diff --git a/keyboards/marksard/rhymestone/rev1/rules.mk b/keyboards/marksard/rhymestone/rev1/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/rules.mk
diff --git a/keyboards/marksard/rhymestone/rules.mk b/keyboards/marksard/rhymestone/rules.mk
new file mode 100644
index 000000000..1f58665ef
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rules.mk
@@ -0,0 +1,27 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = caterina
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = no # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = yes # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
23SPLIT_KEYBOARD = yes
24
25DEFAULT_FOLDER = marksard/rhymestone/rev1
26
27LAYOUTS = ortho_4x10
diff --git a/keyboards/planck/keymaps/gitdrik/config.h b/keyboards/planck/keymaps/gitdrik/config.h
new file mode 100644
index 000000000..0acf06dc5
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/config.h
@@ -0,0 +1,56 @@
1/* Original code probably copyright 2015-2017 Jack Humbert
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17/* Passed along from planck default to Finnish SFS 5966 by gitdrik, 2020. */
18
19#pragma once
20
21#ifdef AUDIO_ENABLE
22 #define STARTUP_SONG SONG(PLANCK_SOUND)
23 // #define STARTUP_SONG SONG(NO_SOUND)
24
25 #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
26 SONG(COLEMAK_SOUND), \
27 SONG(DVORAK_SOUND) \
28 }
29#endif
30
31/*
32 * MIDI options
33 */
34
35/* Prevent use of disabled MIDI features in the keymap */
36//#define MIDI_ENABLE_STRICT 1
37
38/* enable basic MIDI features:
39 - MIDI notes can be sent when in Music mode is on
40*/
41
42#define MIDI_BASIC
43
44/* enable advanced MIDI features:
45 - MIDI notes can be added to the keymap
46 - Octave shift and transpose
47 - Virtual sustain, portamento, and modulation wheel
48 - etc.
49*/
50//#define MIDI_ADVANCED
51
52/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
53//#define MIDI_TONE_KEYCODE_OCTAVES 2
54
55// Most tactile encoders have detents every 4 stages
56#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/keymaps/gitdrik/keymap.c b/keyboards/planck/keymaps/gitdrik/keymap.c
new file mode 100644
index 000000000..bdaef2076
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/keymap.c
@@ -0,0 +1,231 @@
1/* Copyright 2015-2017 Jack Humbert
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17/* Modified from planck default to Finnish SFS 5966 by gitdrik, 2020. */
18
19#include QMK_KEYBOARD_H
20#include "muse.h"
21
22enum planck_layers {
23 _BASE,
24 _LEFT,
25 _RIGHT,
26 _LEFTER,
27 _RIGHTER
28};
29
30#define LEFT TT(_LEFT)
31#define RIGHT MO(_RIGHT)
32#define LEFTER MO(_LEFTER)
33#define RIGHTER MO(_RIGHTER)
34
35const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
36
37/* Base
38 * ,-----------------------------------------------------------------------------------.
39 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Ã… |
40 * |------+------+------+------+------+------+------+------+------+------+------+------|
41 * | Esc | A | S | D | F | G | H | J | K | L | Ö | Ä |
42 * |------+------+------+------+------+------+------+------+------+------+------+------|
43 * | Ctrl | Shift| X | C | V | B | N | M | , | . | Shift| Enter|
44 * |------+------+------+------+------+------+------+------+------+------+------+------|
45 * | Z | GUI | Alt |Left2 | Left |BkSpc | Spc |Right |Rghter| < | - | / |
46 * `-----------------------------------------------------------------------------------'
47 */
48[_BASE] = LAYOUT_planck_grid(
49 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
50 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
51 KC_LCTL, KC_LSFT, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_ENT ,
52 KC_Z, KC_LGUI, KC_LALT, LEFTER, LEFT, KC_BSPC, KC_SPC, RIGHT, RIGHTER, KC_NUBS, KC_SLSH, LSFT(KC_7)
53),
54
55/* Left
56 * ,-----------------------------------------------------------------------------------.
57 * | Tab | F10 | F9 | F8 | F7 | { | } | 7 | 8 | 9 | ^ | = |
58 * |------+------+------+------+------+------+------+------+------+------+------+------|
59 * | Esc | F11 | F6 | F5 | F4 | ( | ) | 4 | 5 | 6 | + | * |
60 * |------+------+------+------+------+------+------+------+------+------+------+------|
61 * | RCtrl| Shift| F3 | F2 | F1 | [ | ] | 1 | 2 | 3 | Shift| Enter|
62 * |------+------+------+------+------+------+------+------+------+------+------+------|
63 * | F12 | GUI | Alt |Lefter| Left |BkSpc | Spc |Right | 0 | , | - | / |
64 * `-----------------------------------------------------------------------------------'
65 */
66[_LEFT] = LAYOUT_planck_grid(
67 KC_TRNS, KC_F10, KC_F9, KC_F8, KC_F7, RALT(KC_7), RALT(KC_0), KC_7, KC_8, KC_9, LSFT(KC_RBRC), LSFT(KC_0),
68 KC_TRNS, KC_F11, KC_F6, KC_F5, KC_F4, LSFT(KC_8), LSFT(KC_9), KC_4, KC_5, KC_6, KC_PPLS, KC_PAST,
69 KC_RCTL, KC_TRNS, KC_F3, KC_F2, KC_F1, RALT(KC_8), RALT(KC_9), KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS,
70 KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_COMM, KC_PMNS, KC_PSLS
71),
72
73/* Right
74 * ,-----------------------------------------------------------------------------------.
75 * | Tab | ◌̄ | ◌̈ | â—ŒÌ | ◌̀ | ◌̃ | ◌̆ | Home | Up | End | Ins | PgUp |
76 * |------+------+------+------+------+------+------+------+------+------+------+------|
77 * | Esc | @ | $ | ° | & | # | % | Left | Down | Right| Del | PgDn |
78 * |------+------+------+------+------+------+------+------+------+------+------+------|
79 * | RCtrl| Shift| †| « | » | ‚ „ | ‰ |PlayPs| << | >> | Shift| Enter|
80 * |------+------+------+------+------+------+------+------+------+------+------+------|
81 * | “ | GUI | Alt |Lefter| |BkSpc | Spc |Right |Rghter| Vol- | Vol+ | Mute |
82 * `-----------------------------------------------------------------------------------'
83 */
84 [_RIGHT] = LAYOUT_planck_grid(
85 KC_TRNS, RALT(LSFT(KC_RBRC)), KC_RBRC, KC_EQL , LSFT(KC_EQL), RALT(KC_RBRC), RALT(KC_NUHS), KC_HOME, KC_UP, KC_END , KC_INS , KC_PGUP,
86 KC_TRNS, RALT(KC_2), RALT(KC_4), RALT(LSFT(KC_0)), LSFT(KC_6), LSFT(KC_3), LSFT(KC_5), KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_PGDN,
87 KC_RCTRL, KC_TRNS, RALT(LSFT(KC_2)), RALT(LSFT(KC_4)), RALT(LSFT(KC_3)), RALT(KC_6), RALT(KC_5), KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
88 RALT(LSFT(KC_5)), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE
89),
90
91/* Lefter
92 * ,-----------------------------------------------------------------------------------.
93 * | Tab | § ½ | " | € | | þ Þ | ¡ | ! | ı | œ Œ | ◌̛ ◌̉ | ◌̋ ◌̊ |
94 * |------+------+------+------+------+------+------+------+------+------+------+------|
95 * | Esc | É™ Æ | ß ẞ | ð à | ' | | | | ĸ | ◌̵ | ø Ø | æ Æ |
96 * |------+------+------+------+------+------+------+------+------+------+------+------|
97 * | Ctrl | Shift| × · | ◌̧ ◌̨ | | \ | ŋ Ŋ | µ — | ’ ‘ | ◌̣ ◌̇ | Shift| Enter|
98 * |------+------+------+------+------+------+------+------+------+------+------+------|
99 * | ʒ Ʒ | GUI | Alt |Lefter| | BkSpc| NbSp | |Rghter| | | – ◌̦ | ? |
100 * `-----------------------------------------------------------------------------------'
101 */
102 [_LEFTER] = LAYOUT_planck_grid(
103 KC_TRNS, KC_GRV, LSFT(KC_2), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(LSFT(KC_1)), LSFT(KC_1), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC),
104 KC_TRNS, RALT(KC_A),RALT(KC_S), RALT(KC_D), KC_NUHS, RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), RALT(KC_L), RALT(KC_SCLN), RALT(KC_QUOT),
105 KC_TRNS, KC_TRNS, RALT(KC_X), RALT(KC_EQL), RALT(KC_V), RALT(KC_MINS), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), KC_TRNS, KC_TRNS,
106 RALT(KC_Z),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_BSPC), RALT(KC_SPC), KC_TRNS, KC_TRNS, RALT(KC_NUBS), RALT(KC_SLSH), LSFT(KC_MINS)
107),
108
109/* Righter
110 * ,-----------------------------------------------------------------------------------.
111 * | | Reset| Debug| | | | |WheLft| MUp |WheRgt| MBt2 | WheUp|
112 * |------+------+------+------+------+------+------+------+------+------+------+------|
113 * | | MBt4 | MBt3 | MBt2 | MBt1 | | | MLeft| MDown|MRight| MBt1 | WheDn|
114 * |------+------+------+------+------+------+------+------+------+------+------+------|
115 * | | |MUSmod|Mus on|Musoff| | | MBt1 | MBt2 | MBt3 | | |
116 * |------+------+------+------+------+------+------+------+------+------+------+------|
117 * | | | | | | | | |Rghter|Light-|Light+| |
118 * `-----------------------------------------------------------------------------------'
119 */
120 [_RIGHTER] = LAYOUT_planck_grid(
121 KC_TRNS, RESET, DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, KC_WH_U,
122 KC_TRNS, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, KC_WH_D,
123 KC_TRNS, KC_TRNS, MU_MOD, MU_ON, MU_OFF, KC_NO, KC_NO, KC_BTN1, KC_BTN2, KC_BTN3, KC_TRNS, KC_TRNS,
124 KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_BRID, KC_BRIU, KC_NO
125),
126
127};
128
129#ifdef AUDIO_ENABLE
130 float plover_song[][2] = SONG(PLOVER_SOUND);
131 float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
132#endif
133
134bool muse_mode = false;
135uint8_t last_muse_note = 0;
136uint16_t muse_counter = 0;
137uint8_t muse_offset = 70;
138uint16_t muse_tempo = 50;
139
140void encoder_update(bool clockwise) {
141 if (muse_mode) {
142 if (IS_LAYER_ON(_RIGHT)) {
143 if (clockwise) {
144 muse_offset++;
145 } else {
146 muse_offset--;
147 }
148 } else {
149 if (clockwise) {
150 muse_tempo+=1;
151 } else {
152 muse_tempo-=1;
153 }
154 }
155 } else {
156 if (clockwise) {
157 #ifdef MOUSEKEY_ENABLE
158 tap_code(KC_MS_WH_DOWN);
159 #else
160 tap_code(KC_PGDN);
161 #endif
162 } else {
163 #ifdef MOUSEKEY_ENABLE
164 tap_code(KC_MS_WH_UP);
165 #else
166 tap_code(KC_PGUP);
167 #endif
168 }
169 }
170}
171
172void dip_switch_update_user(uint8_t index, bool active) {
173 switch (index) {
174 case 0: {
175#ifdef AUDIO_ENABLE
176 static bool play_sound = false;
177#endif
178 if (active) {
179#ifdef AUDIO_ENABLE
180 if (play_sound) { PLAY_SONG(plover_song); }
181#endif
182 layer_on(_LEFTER);
183 } else {
184#ifdef AUDIO_ENABLE
185 if (play_sound) { PLAY_SONG(plover_gb_song); }
186#endif
187 layer_off(_LEFTER);
188 }
189#ifdef AUDIO_ENABLE
190 play_sound = true;
191#endif
192 break;
193 }
194 case 1:
195 if (active) {
196 muse_mode = true;
197 } else {
198 muse_mode = false;
199 }
200 }
201}
202
203void matrix_scan_user(void) {
204#ifdef AUDIO_ENABLE
205 if (muse_mode) {
206 if (muse_counter == 0) {
207 uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
208 if (muse_note != last_muse_note) {
209 stop_note(compute_freq_for_midi_note(last_muse_note));
210 play_note(compute_freq_for_midi_note(muse_note), 0xF);
211 last_muse_note = muse_note;
212 }
213 }
214 muse_counter = (muse_counter + 1) % muse_tempo;
215 } else {
216 if (muse_counter) {
217 stop_all_notes();
218 muse_counter = 0;
219 }
220 }
221#endif
222}
223
224bool music_mask_user(uint16_t keycode) {
225 switch (keycode) {
226 case _LEFTER:
227 return false;
228 default:
229 return true;
230 }
231}
diff --git a/keyboards/planck/keymaps/gitdrik/readme.md b/keyboards/planck/keymaps/gitdrik/readme.md
new file mode 100644
index 000000000..f06456518
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/readme.md
@@ -0,0 +1 @@
# Finnish SFS 5966 layout by gitdrik 2020.
diff --git a/keyboards/planck/keymaps/gitdrik/rules.mk b/keyboards/planck/keymaps/gitdrik/rules.mk
new file mode 100644
index 000000000..67528de9c
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/rules.mk
@@ -0,0 +1,3 @@
1SRC += muse.c
2MOUSEKEY_ENABLE = yes
3AUDIO_ENABLE = yes
diff --git a/keyboards/plume/plume65/config.h b/keyboards/plume/plume65/config.h
new file mode 100644
index 000000000..2cd05e180
--- /dev/null
+++ b/keyboards/plume/plume65/config.h
@@ -0,0 +1,137 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0x5D66
23#define PRODUCT_ID 0x22CF
24#define DEVICE_VER 0x0001
25#define MANUFACTURER Plume Keyboards LLC
26#define PRODUCT Plume65
27
28/* key matrix size */
29#define MATRIX_ROWS 5
30#define MATRIX_COLS 15
31
32/*
33 * Keyboard Matrix Assignments
34 *
35 * Change this to how you wired your keyboard
36 * COLS: AVR pins used for columns, left to right
37 * ROWS: AVR pins used for rows, top to bottom
38 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
39 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
40 *
41*/
42#define MATRIX_ROW_PINS { D2, D5, E6, D0, D1 }
43#define MATRIX_COL_PINS { B7, F7, C7, C6, B6, F0, B5, F1, B4, F4, D7, F5, D6, F6, D4 }
44#define UNUSED_PINS { }
45
46/* COL2ROW, ROW2COL*/
47#define DIODE_DIRECTION COL2ROW
48
49 #define RGB_DI_PIN B0
50// #ifdef RGB_DI_PIN
51 #define RGBLED_NUM 10
52// #define RGBLIGHT_HUE_STEP 8
53// #define RGBLIGHT_SAT_STEP 8
54// #define RGBLIGHT_VAL_STEP 8
55// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
56// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
57// /*== all animations enable ==*/
58 #define RGBLIGHT_ANIMATIONS
59// /*== or choose animations ==*/
60// #define RGBLIGHT_EFFECT_BREATHING
61// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
62// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
63// #define RGBLIGHT_EFFECT_SNAKE
64// #define RGBLIGHT_EFFECT_KNIGHT
65// #define RGBLIGHT_EFFECT_CHRISTMAS
66// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
67// #define RGBLIGHT_EFFECT_RGB_TEST
68// #define RGBLIGHT_EFFECT_ALTERNATING
69// /*== customize breathing effect ==*/
70// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
71// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
72// /*==== use exp() and sin() ====*/
73// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
74// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
75// #endif
76
77/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
78#define DEBOUNCE 5
79
80/* define if matrix has ghost (lacks anti-ghosting diodes) */
81//#define MATRIX_HAS_GHOST
82
83/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
84#define LOCKING_SUPPORT_ENABLE
85/* Locking resynchronize hack */
86#define LOCKING_RESYNC_ENABLE
87
88/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
89 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
90 */
91// #define GRAVE_ESC_CTRL_OVERRIDE
92
93/*
94 * Force NKRO
95 *
96 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
97 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
98 * makefile for this to work.)
99 *
100 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
101 * until the next keyboard reset.
102 *
103 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
104 * fully operational during normal computer usage.
105 *
106 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
107 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
108 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
109 * power-up.
110 *
111 */
112//#define FORCE_NKRO
113
114/*
115 * Feature disable options
116 * These options are also useful to firmware size reduction.
117 */
118
119/* disable debug print */
120//#define NO_DEBUG
121
122/* disable print */
123//#define NO_PRINT
124
125/* disable action features */
126//#define NO_ACTION_LAYER
127//#define NO_ACTION_TAPPING
128//#define NO_ACTION_ONESHOT
129//#define NO_ACTION_MACRO
130//#define NO_ACTION_FUNCTION
131
132/* Bootmagic Lite key configuration */
133// #define BOOTMAGIC_LITE_ROW 0
134// #define BOOTMAGIC_LITE_COLUMN 0
135
136#define QMK_ESC_OUTPUT B7 // usually COL
137#define QMK_ESC_INPUT D2 // usually ROW
diff --git a/keyboards/plume/plume65/info.json b/keyboards/plume/plume65/info.json
new file mode 100644
index 000000000..941d911f3
--- /dev/null
+++ b/keyboards/plume/plume65/info.json
@@ -0,0 +1,376 @@
1{
2 "keyboard_name": "Plume65",
3 "url": "",
4 "maintainer": "maartenwut",
5 "width": 16,
6 "height": 5,
7 "layouts": {
8 "LAYOUT_iso": {
9 "layout": [
10 {"x":0, "y":0},
11 {"x":1, "y":0},
12 {"x":2, "y":0},
13 {"x":3, "y":0},
14 {"x":4, "y":0},
15 {"x":5, "y":0},
16 {"x":6, "y":0},
17 {"x":7, "y":0},
18 {"x":8, "y":0},
19 {"x":9, "y":0},
20 {"x":10, "y":0},
21 {"x":11, "y":0},
22 {"x":12, "y":0},
23 {"x":13, "y":0, "w":2},
24
25 {"x":0, "y":1, "w":1.5},
26 {"x":1.5, "y":1},
27 {"x":2.5, "y":1},
28 {"x":3.5, "y":1},
29 {"x":4.5, "y":1},
30 {"x":5.5, "y":1},
31 {"x":6.5, "y":1},
32 {"x":7.5, "y":1},
33 {"x":8.5, "y":1},
34 {"x":9.5, "y":1},
35 {"x":10.5, "y":1},
36 {"x":11.5, "y":1},
37 {"x":12.5, "y":1},
38 {"x":15, "y":1},
39
40 {"x":0, "y":2, "w":1.75},
41 {"x":1.75, "y":2},
42 {"x":2.75, "y":2},
43 {"x":3.75, "y":2},
44 {"x":4.75, "y":2},
45 {"x":5.75, "y":2},
46 {"x":6.75, "y":2},
47 {"x":7.75, "y":2},
48 {"x":8.75, "y":2},
49 {"x":9.75, "y":2},
50 {"x":10.75, "y":2},
51 {"x":11.75, "y":2},
52 {"x":12.75, "y":2},
53 {"x":13.75, "y":1, "w":1.25, "h":2},
54 {"x":15, "y":2},
55
56 {"x":0, "y":3, "w":1.25},
57 {"x":1.25, "y":3},
58 {"x":2.25, "y":3},
59 {"x":3.25, "y":3},
60 {"x":4.25, "y":3},
61 {"x":5.25, "y":3},
62 {"x":6.25, "y":3},
63 {"x":7.25, "y":3},
64 {"x":8.25, "y":3},
65 {"x":9.25, "y":3},
66 {"x":10.25, "y":3},
67 {"x":11.25, "y":3},
68 {"x":12.25, "y":3, "w":1.75},
69 {"x":14, "y":3},
70 {"x":15, "y":3},
71
72 {"x":0, "y":4, "w":1.5},
73 {"x":2.5, "y":4, "w":1.5},
74 {"x":4, "y":4, "w":7},
75 {"x":11, "y":4, "w":1.5},
76 {"x":13, "y":4},
77 {"x":14, "y":4},
78 {"x":15, "y":4}
79 ]
80 },
81 "LAYOUT_ansi": {
82 "layout": [
83 {"x":0, "y":0},
84 {"x":1, "y":0},
85 {"x":2, "y":0},
86 {"x":3, "y":0},
87 {"x":4, "y":0},
88 {"x":5, "y":0},
89 {"x":6, "y":0},
90 {"x":7, "y":0},
91 {"x":8, "y":0},
92 {"x":9, "y":0},
93 {"x":10, "y":0},
94 {"x":11, "y":0},
95 {"x":12, "y":0},
96 {"x":13, "y":0, "w":2},
97
98 {"x":0, "y":1, "w":1.5},
99 {"x":1.5, "y":1},
100 {"x":2.5, "y":1},
101 {"x":3.5, "y":1},
102 {"x":4.5, "y":1},
103 {"x":5.5, "y":1},
104 {"x":6.5, "y":1},
105 {"x":7.5, "y":1},
106 {"x":8.5, "y":1},
107 {"x":9.5, "y":1},
108 {"x":10.5, "y":1},
109 {"x":11.5, "y":1},
110 {"x":12.5, "y":1},
111 {"x":13.5, "y":1, "w":1.5},
112 {"x":15, "y":1},
113
114 {"x":0, "y":2, "w":1.75},
115 {"x":1.75, "y":2},
116 {"x":2.75, "y":2},
117 {"x":3.75, "y":2},
118 {"x":4.75, "y":2},
119 {"x":5.75, "y":2},
120 {"x":6.75, "y":2},
121 {"x":7.75, "y":2},
122 {"x":8.75, "y":2},
123 {"x":9.75, "y":2},
124 {"x":10.75, "y":2},
125 {"x":11.75, "y":2},
126 {"x":12.75, "y":2, "w":2.25},
127 {"x":15, "y":2},
128
129 {"x":0, "y":3, "w":2.25},
130 {"x":2.25, "y":3},
131 {"x":3.25, "y":3},
132 {"x":4.25, "y":3},
133 {"x":5.25, "y":3},
134 {"x":6.25, "y":3},
135 {"x":7.25, "y":3},
136 {"x":8.25, "y":3},
137 {"x":9.25, "y":3},
138 {"x":10.25, "y":3},
139 {"x":11.25, "y":3},
140 {"x":12.25, "y":3, "w":1.75},
141 {"x":14, "y":3},
142 {"x":15, "y":3},
143
144 {"x":0, "y":4, "w":1.5},
145 {"x":2.5, "y":4, "w":1.5},
146 {"x":4, "y":4, "w":7},
147 {"x":11, "y":4, "w":1.5},
148 {"x":13, "y":4},
149 {"x":14, "y":4},
150 {"x":15, "y":4}
151 ]
152 },
153 "LAYOUT_iso_split_bs": {
154 "layout": [
155 {"x":0, "y":0},
156 {"x":1, "y":0},
157 {"x":2, "y":0},
158 {"x":3, "y":0},
159 {"x":4, "y":0},
160 {"x":5, "y":0},
161 {"x":6, "y":0},
162 {"x":7, "y":0},
163 {"x":8, "y":0},
164 {"x":9, "y":0},
165 {"x":10, "y":0},
166 {"x":11, "y":0},
167 {"x":12, "y":0},
168 {"x":13, "y":0},
169 {"x":14, "y":0},
170
171 {"x":0, "y":1, "w":1.5},
172 {"x":1.5, "y":1},
173 {"x":2.5, "y":1},
174 {"x":3.5, "y":1},
175 {"x":4.5, "y":1},
176 {"x":5.5, "y":1},
177 {"x":6.5, "y":1},
178 {"x":7.5, "y":1},
179 {"x":8.5, "y":1},
180 {"x":9.5, "y":1},
181 {"x":10.5, "y":1},
182 {"x":11.5, "y":1},
183 {"x":12.5, "y":1},
184 {"x":15, "y":1},
185
186 {"x":0, "y":2, "w":1.75},
187 {"x":1.75, "y":2},
188 {"x":2.75, "y":2},
189 {"x":3.75, "y":2},
190 {"x":4.75, "y":2},
191 {"x":5.75, "y":2},
192 {"x":6.75, "y":2},
193 {"x":7.75, "y":2},
194 {"x":8.75, "y":2},
195 {"x":9.75, "y":2},
196 {"x":10.75, "y":2},
197 {"x":11.75, "y":2},
198 {"x":12.75, "y":2},
199 {"x":13.75, "y":1, "w":1.25, "h":2},
200 {"x":15, "y":2},
201
202 {"x":0, "y":3, "w":1.25},
203 {"x":1.25, "y":3},
204 {"x":2.25, "y":3},
205 {"x":3.25, "y":3},
206 {"x":4.25, "y":3},
207 {"x":5.25, "y":3},
208 {"x":6.25, "y":3},
209 {"x":7.25, "y":3},
210 {"x":8.25, "y":3},
211 {"x":9.25, "y":3},
212 {"x":10.25, "y":3},
213 {"x":11.25, "y":3},
214 {"x":12.25, "y":3, "w":1.75},
215 {"x":14, "y":3},
216 {"x":15, "y":3},
217
218 {"x":0, "y":4, "w":1.5},
219 {"x":2.5, "y":4, "w":1.5},
220 {"x":4, "y":4, "w":7},
221 {"x":11, "y":4, "w":1.5},
222 {"x":13, "y":4},
223 {"x":14, "y":4},
224 {"x":15, "y":4}
225 ]
226 },
227 "LAYOUT_ansi_split_bs": {
228 "layout": [
229 {"x":0, "y":0},
230 {"x":1, "y":0},
231 {"x":2, "y":0},
232 {"x":3, "y":0},
233 {"x":4, "y":0},
234 {"x":5, "y":0},
235 {"x":6, "y":0},
236 {"x":7, "y":0},
237 {"x":8, "y":0},
238 {"x":9, "y":0},
239 {"x":10, "y":0},
240 {"x":11, "y":0},
241 {"x":12, "y":0},
242 {"x":13, "y":0},
243 {"x":14, "y":0},
244
245 {"x":0, "y":1, "w":1.5},
246 {"x":1.5, "y":1},
247 {"x":2.5, "y":1},
248 {"x":3.5, "y":1},
249 {"x":4.5, "y":1},
250 {"x":5.5, "y":1},
251 {"x":6.5, "y":1},
252 {"x":7.5, "y":1},
253 {"x":8.5, "y":1},
254 {"x":9.5, "y":1},
255 {"x":10.5, "y":1},
256 {"x":11.5, "y":1},
257 {"x":12.5, "y":1},
258 {"x":13.5, "y":1, "w":1.5},
259 {"x":15, "y":1},
260
261 {"x":0, "y":2, "w":1.75},
262 {"x":1.75, "y":2},
263 {"x":2.75, "y":2},
264 {"x":3.75, "y":2},
265 {"x":4.75, "y":2},
266 {"x":5.75, "y":2},
267 {"x":6.75, "y":2},
268 {"x":7.75, "y":2},
269 {"x":8.75, "y":2},
270 {"x":9.75, "y":2},
271 {"x":10.75, "y":2},
272 {"x":11.75, "y":2},
273 {"x":12.75, "y":2, "w":2.25},
274 {"x":15, "y":2},
275
276 {"x":0, "y":3, "w":2.25},
277 {"x":2.25, "y":3},
278 {"x":3.25, "y":3},
279 {"x":4.25, "y":3},
280 {"x":5.25, "y":3},
281 {"x":6.25, "y":3},
282 {"x":7.25, "y":3},
283 {"x":8.25, "y":3},
284 {"x":9.25, "y":3},
285 {"x":10.25, "y":3},
286 {"x":11.25, "y":3},
287 {"x":12.25, "y":3, "w":1.75},
288 {"x":14, "y":3},
289 {"x":15, "y":3},
290
291 {"x":0, "y":4, "w":1.5},
292 {"x":2.5, "y":4, "w":1.5},
293 {"x":4, "y":4, "w":7},
294 {"x":11, "y":4, "w":1.5},
295 {"x":13, "y":4},
296 {"x":14, "y":4},
297 {"x":15, "y":4}
298 ]
299 },
300 "LAYOUT_all": {
301 "layout": [
302 {"x":0, "y":0},
303 {"x":1, "y":0},
304 {"x":2, "y":0},
305 {"x":3, "y":0},
306 {"x":4, "y":0},
307 {"x":5, "y":0},
308 {"x":6, "y":0},
309 {"x":7, "y":0},
310 {"x":8, "y":0},
311 {"x":9, "y":0},
312 {"x":10, "y":0},
313 {"x":11, "y":0},
314 {"x":12, "y":0},
315 {"x":13, "y":0},
316 {"x":14, "y":0},
317
318 {"x":0, "y":1, "w":1.5},
319 {"x":1.5, "y":1},
320 {"x":2.5, "y":1},
321 {"x":3.5, "y":1},
322 {"x":4.5, "y":1},
323 {"x":5.5, "y":1},
324 {"x":6.5, "y":1},
325 {"x":7.5, "y":1},
326 {"x":8.5, "y":1},
327 {"x":9.5, "y":1},
328 {"x":10.5, "y":1},
329 {"x":11.5, "y":1},
330 {"x":12.5, "y":1},
331 {"x":13.5, "y":1, "w":1.5},
332 {"x":15, "y":1},
333
334 {"x":0, "y":2, "w":1.75},
335 {"x":1.75, "y":2},
336 {"x":2.75, "y":2},
337 {"x":3.75, "y":2},
338 {"x":4.75, "y":2},
339 {"x":5.75, "y":2},
340 {"x":6.75, "y":2},
341 {"x":7.75, "y":2},
342 {"x":8.75, "y":2},
343 {"x":9.75, "y":2},
344 {"x":10.75, "y":2},
345 {"x":11.75, "y":2},
346 {"x":12.75, "y":2},
347 {"x":13.75, "y":2, "w":1.25},
348 {"x":15, "y":2},
349
350 {"x":0, "y":3, "w":1.25},
351 {"x":1.25, "y":3},
352 {"x":2.25, "y":3},
353 {"x":3.25, "y":3},
354 {"x":4.25, "y":3},
355 {"x":5.25, "y":3},
356 {"x":6.25, "y":3},
357 {"x":7.25, "y":3},
358 {"x":8.25, "y":3},
359 {"x":9.25, "y":3},
360 {"x":10.25, "y":3},
361 {"x":11.25, "y":3},
362 {"x":12.25, "y":3, "w":1.75},
363 {"x":14, "y":3},
364 {"x":15, "y":3},
365
366 {"x":0, "y":4, "w":1.5},
367 {"x":2.5, "y":4, "w":1.5},
368 {"x":4, "y":4, "w":7},
369 {"x":11, "y":4, "w":1.5},
370 {"x":13, "y":4},
371 {"x":14, "y":4},
372 {"x":15, "y":4}
373 ]
374 }
375 }
376}
diff --git a/keyboards/plume/plume65/keymaps/default/keymap.c b/keyboards/plume/plume65/keymaps/default/keymap.c
new file mode 100644
index 000000000..343c3b4f7
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19
20[0] = LAYOUT_ansi(
21 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,
22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
23 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,
24 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,
25 KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
26[1] = LAYOUT_ansi(
27 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
28 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
29 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, _______, _______, _______, _______, _______, _______)
32
33};
diff --git a/keyboards/plume/plume65/keymaps/default/readme.md b/keyboards/plume/plume65/keymaps/default/readme.md
new file mode 100644
index 000000000..33c50283a
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/default/readme.md
@@ -0,0 +1 @@
This is the default keymap for the Plume65.
diff --git a/keyboards/plume/plume65/keymaps/via/keymap.c b/keyboards/plume/plume65/keymaps/via/keymap.c
new file mode 100644
index 000000000..ed8e921c7
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/via/keymap.c
@@ -0,0 +1,45 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19
20[0] = LAYOUT_all(
21 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_BSPC,
22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
23 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_BSLS, KC_ENT, KC_PGUP,
24 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
25 KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
26[1] = LAYOUT_all(
27 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
28 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
29 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, _______, _______, _______, _______, _______, _______),
32[2] = LAYOUT_all(
33 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
34 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
35 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______),
38[3] = LAYOUT_all(
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
40 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
41 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, _______, _______, _______, _______, _______),
44
45};
diff --git a/keyboards/plume/plume65/keymaps/via/rules.mk b/keyboards/plume/plume65/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/plume/plume65/plume65.c b/keyboards/plume/plume65/plume65.c
new file mode 100644
index 000000000..d59f2289e
--- /dev/null
+++ b/keyboards/plume/plume65/plume65.c
@@ -0,0 +1,16 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "plume65.h"
diff --git a/keyboards/plume/plume65/plume65.h b/keyboards/plume/plume65/plume65.h
new file mode 100644
index 000000000..fa169a8bc
--- /dev/null
+++ b/keyboards/plume/plume65/plume65.h
@@ -0,0 +1,103 @@
1/* Copyright 2020 Dekkers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19#define XXX KC_NO
20
21/* This a shortcut to help you visually see your layout.
22 *
23 * The first section contains all of the arguments representing the physical
24 * layout of the board and position of the keys.
25 *
26 * The second converts the arguments into a two-dimensional array which
27 * represents the switch matrix.
28 */
29
30#define LAYOUT_ansi( \
31 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
32 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
33 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
34 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
35 k40, k42, k46, k4b, k4c, k4d, k4e \
36) \
37{ \
38 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, XXX }, \
39 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
40 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e }, \
41 { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
42 { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
43}
44
45#define LAYOUT_ansi_split_bs( \
46 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0d, \
47 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
48 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
49 k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
50 k40, k42, k46, k4b, k4c, k4d, k4e \
51) \
52{ \
53 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
54 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
55 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e }, \
56 { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
57 { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
58}
59
60#define LAYOUT_iso( \
61 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
62 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
63 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
64 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
65 k40, k42, k46, k4b, k4c, k4d, k4e \
66) \
67{ \
68 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, XXX }, \
69 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e }, \
70 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
71 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
72 { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
73}
74
75#define LAYOUT_iso_split_bs( \
76 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0d, \
77 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
78 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
79 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
80 k40, k42, k46, k4b, k4c, k4d, k4e \
81) \
82{ \
83 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
84 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e }, \
85 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
86 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
87 { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
88}
89
90#define LAYOUT_all( \
91 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0d, \
92 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
93 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
94 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
95 k40, k42, k46, k4b, k4c, k4d, k4e \
96) \
97{ \
98 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
99 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
100 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
101 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
102 { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
103}
diff --git a/keyboards/plume/plume65/readme.md b/keyboards/plume/plume65/readme.md
new file mode 100644
index 000000000..828477eaf
--- /dev/null
+++ b/keyboards/plume/plume65/readme.md
@@ -0,0 +1,16 @@
1# Plume65
2
3## Support
4* Keyboard Maintainer: [maartenwut](https://github.com/maartenwut)
5* Hardware Supported: Plume65
6* Hardware Availability: N/A
7
8Make example for this keyboard (after setting up your build environment):
9
10 make plume/plume65:default
11
12Flashing example for this keyboard:
13
14 make plume/plume65:default:flash
15
16See 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).
diff --git a/keyboards/plume/plume65/rules.mk b/keyboards/plume/plume65/rules.mk
new file mode 100644
index 000000000..dded09bb8
--- /dev/null
+++ b/keyboards/plume/plume65/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = qmk-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
21BLUETOOTH_ENABLE = no # Enable Bluetooth
22AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/redox_w/keymaps/danielo515/keymap.c b/keyboards/redox_w/keymaps/danielo515/keymap.c
index 2b37a4be3..c174c7cf3 100644
--- a/keyboards/redox_w/keymaps/danielo515/keymap.c
+++ b/keyboards/redox_w/keymaps/danielo515/keymap.c
@@ -22,56 +22,59 @@
22# define GUI OSM(MOD_LGUI) 22# define GUI OSM(MOD_LGUI)
23# define ENT_SYM LT(_SYMB, KC_ENT) 23# define ENT_SYM LT(_SYMB, KC_ENT)
24# define __S LT(_S,KC_S) 24# define __S LT(_S,KC_S)
25# define OSX_BACK LGUI(KC_GRV)
26// Which key do you use to enter a layer
27# define ENTRY _______
25 28
26 29
27const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 30const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28 31
29 [_QWERTY] = LAYOUT( 32 [_QWERTY] = LAYOUT(
30 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┠33 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
31 KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_DQUO , 34 KC_EQL ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_DQUO ,
32 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 35 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
33 KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,TD_PASTE, ALT_TAB ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,SFT_MINS, 36 KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,TD_PASTE, KC_INS ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,CMD_MINS,
34 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 37 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
35 SHIFT ,KC_A ,__S ,FN_D ,FN_F ,KC_G ,COPY_CUT, KC_UNDS ,HYPR_H ,ALT_J ,CTL_K ,KC_L ,TD_CLN ,CMD_QUOT, 38 KC_PIPE ,KC_A ,__S ,FN_D ,FN_F ,KC_G ,COPY_CUT, KC_UNDS ,HYPR_H ,ALT_J ,CTL_K ,KC_L ,TD_CLN ,SFT_QUOT,
36 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 39 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
37 KC_BSLS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DEL ,KC_PGDN , ALT_TAB ,AD_ESC ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_ASTR , 40 KC_BSLS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DEL ,KC_PLUS , ALT_TAB ,AD_ESC ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_ASTR ,
38 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ 41 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
39 CTL ,ALT ,KC_LEFT ,KC_RIGHT, GUI , SHIFT ,KC_BSPC , KC_LEAD ,NAV_SPC , ENT_SYM, KC_LBRC ,KC_RBRC ,KC_DOWN ,KC_UP 42 CTL ,ALT ,KC_LEFT ,KC_RIGHT, GUI , SHIFT ,KC_BSPC , KC_LEAD ,NAV_SPC , ENT_SYM, KC_LBRC ,KC_RBRC ,KC_DOWN ,KC_UP
40 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ 43 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
41 ), 44 ),
42 45
43 [_SYMB] = LAYOUT( 46 [_SYMB] = LAYOUT(
44 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┠47 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
45 _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 , 48 _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F12 ,
46 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 49 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
47 _______ ,KC_EXLM ,KC_DLR ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,KC_PSLS ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_PMNS , 50 _______ ,KC_EXLM ,KC_DLR ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,KC_PSLS ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_BSPC ,
48 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 51 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
49 _______ ,KC_AT ,KC_DLR , KC_LPRN, KC_RPRN,KC_GRV ,_______ , _______ ,KC_PAST ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_BSPC , 52 _______ ,KC_AT ,KC_DLR , KC_LPRN, KC_RPRN,KC_GRV ,_______ , _______ ,KC_PENT ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_PMNS ,
50 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 53 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
51 _______ ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,_______ ,_______ , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PENT ,XXXXXXX , 54 _______ ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,_______ ,_______ , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PSLS ,XXXXXXX ,
52 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ 55 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
53 _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_P0 , KC_P0 ,KC_PDOT ,KC_PENT ,XXXXXXX 56 _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , ENTRY , KC_P0 ,KC_PDOT ,KC_PAST ,XXXXXXX
54 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ 57 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
55 ), 58 ),
56 59
57 [_NAV] = LAYOUT( 60 [_NAV] = LAYOUT(
58 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┠61 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
59 _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ , 62 _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
60 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 63 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
61 XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX,SFT_LEFT,SFT_RIGHT,XXXXXXX ,XXXXXXX ,XXXXXXX , 64 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,SFT_LEFT_END,SFT_LEFT,SFT_RIGHT,SFT_RIGHT_END ,XXXXXXX ,KC_F12 ,
62 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 65 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
63 XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX , 66 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
64 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 67 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
65 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,KC_HOME ,CTL_LEFT,CTL_RIGHT,XXXXXXX,XXXXXXX ,XXXXXXX , 68 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,KC_HOME ,CTL_LEFT,CTL_RIGHT,KC_END,XXXXXXX ,XXXXXXX ,
66 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ 69 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
67 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,WIN_LEFT,WIN_RIGHT 70 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ , _______ ,_______ , _______ , ENTRY , KC_MUTE , KC_VOLD ,KC_VOLU ,WIN_LEFT,WIN_RIGHT
68 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ 71 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
69 ), 72 ),
70 [_ADJUST] = LAYOUT( 73 [_ADJUST] = LAYOUT(
71 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┠74 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
72 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , 75 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
73 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 76 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
74 XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_F12 , 77 XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
75 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 78 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
76 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , 79 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
77 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 80 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
@@ -84,26 +87,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
84 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┠87 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
85 XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 , 88 XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,
86 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 89 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
87 XXXXXXX ,XXXXXXX ,ALL_WIN ,EXPOSE ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , 90 XXXXXXX ,XXXXXXX ,ALL_WIN ,EXPOSE ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,KC_F4 ,KC_F5 ,KC_F6 ,XXXXXXX ,KC_F12 ,
88 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 91 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
89 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , 92 XXXXXXX ,XXXXXXX ,SAVE ,OSX_BACK ,ENTRY ,XXXXXXX ,XXXXXXX , XXXXXXX ,KC_PSCR ,KC_F1 ,KC_F2 ,KC_F3 ,XXXXXXX ,XXXXXXX ,
90 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 93 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
91 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , 94 XXXXXXX ,UNDO ,REDO ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
92 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ 95 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
93 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX 96 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , KC_PGUP ,KC_PGDOWN , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
94 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ 97 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
95 ), 98 ),
96 [_D] = LAYOUT( 99 [_D] = LAYOUT(
97 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┠100 //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
98 XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F12 , 101 XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_A ,KC_B ,KC_C ,KC_D ,KC_E ,KC_F ,
99 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 102 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
100 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,KC_PSLS ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_PMNS , 103 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,KC_LBRACKET ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_KP_MINUS ,
101 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 104 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
102 XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,KC_PAST ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_BSPC , 105 XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,KC_F5 ,KC_F2 ,XXXXXXX , _______ ,KC_RBRACKET ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_PAST ,
103 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 106 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
104 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PENT ,XXXXXXX , 107 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PSLS ,XXXXXXX ,
105 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ 108 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
106 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,_______ , KC_P0 , KC_P0 ,KC_PDOT ,KC_PENT ,XXXXXXX 109 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,_______ , KC_P0 , KC_COMMA ,KC_PDOT ,KC_PAST ,XXXXXXX
107 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ 110 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
108 ), 111 ),
109 [_S] = LAYOUT( 112 [_S] = LAYOUT(
@@ -114,9 +117,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
114 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 117 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
115 XXXXXXX ,XXXXXXX ,_______ ,KC_EQL ,F_ARROW ,KC_GRAVE,XXXXXXX , XXXXXXX ,KC_AMPR ,KC_LPRN ,KC_RPRN ,CLN_EQ ,KC_PLUS ,KC_PIPE , 118 XXXXXXX ,XXXXXXX ,_______ ,KC_EQL ,F_ARROW ,KC_GRAVE,XXXXXXX , XXXXXXX ,KC_AMPR ,KC_LPRN ,KC_RPRN ,CLN_EQ ,KC_PLUS ,KC_PIPE ,
116 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤ 119 //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
117 XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_CIRC ,KC_DLR ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,KC_EXLM ,KC_TILD ,KC_CIRC ,ARROW ,KC_BSLASH,IARROW , 120 XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_CIRC ,ARROW ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,KC_EXLM ,KC_TILD ,KC_CIRC ,ARROW ,KC_BSLASH,IARROW ,
118 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤ 121 //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
119 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , XXXXXXX ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX 122 XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , XXXXXXX ,ENTRY , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
120 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘ 123 //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
121 ) 124 )
122 125
diff --git a/quantum/debounce/readme.md b/quantum/debounce/readme.md
deleted file mode 100644
index f77f78c76..000000000
--- a/quantum/debounce/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
1Debounce algorithms belong in this folder.
2Here are a few ideas
3
41) Global vs Per-Key vs Per-Row
5 * Global - one timer for all keys. Any key change state affects global timer
6 * Per key - one timer per key
7 * Per row - one timer per row
8
92) Eager vs symmetric vs asymmetric
10 * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
11 * Symmetric - wait for no changes for DEBOUNCE ms before reporting change
12 * Asymmetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up.
13
143) Timestamp vs cycles
15 * old old old code waits n cycles, decreasing count by one each matrix_scan
16 * newer code stores the millisecond the change occurred, and does subraction to figure out time elapsed.
17 * Timestamps are superior, i don't think cycles will ever be used again once upgraded.
18
19The default algorithm is symmetric and global.
20Here are a few that could be implemented:
21
22sym_g.c
23sym_pk.c
24sym_pr.c
25sym_pr_cycles.c
26eager_g.c
27eager_pk.c
28eager_pr.c //could be used in ergo-dox!
diff --git a/quantum/debounce/sym_g.c b/quantum/debounce/sym_defer_g.c
index 3ed9055d2..3ed9055d2 100644
--- a/quantum/debounce/sym_g.c
+++ b/quantum/debounce/sym_defer_g.c
diff --git a/quantum/debounce/sym_pk.c b/quantum/debounce/sym_defer_pk.c
index f404cf9c4..f404cf9c4 100644
--- a/quantum/debounce/sym_pk.c
+++ b/quantum/debounce/sym_defer_pk.c
diff --git a/quantum/debounce/eager_pk.c b/quantum/debounce/sym_eager_pk.c
index 93a40ad44..93a40ad44 100644
--- a/quantum/debounce/eager_pk.c
+++ b/quantum/debounce/sym_eager_pk.c
diff --git a/quantum/debounce/eager_pr.c b/quantum/debounce/sym_eager_pr.c
index d12931fdd..d12931fdd 100644
--- a/quantum/debounce/eager_pr.c
+++ b/quantum/debounce/sym_eager_pr.c
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
index 20333fd6d..382e67ac9 100644
--- a/quantum/keymap_extras/keymap_canadian_multilingual.h
+++ b/quantum/keymap_extras/keymap_canadian_multilingual.h
@@ -151,8 +151,8 @@
151// Row 4 151// Row 4
152#define CA_LDAQ ALGR(CA_X) // « 152#define CA_LDAQ ALGR(CA_X) // «
153#define CA_RDAQ ALGR(CA_C) // » 153#define CA_RDAQ ALGR(CA_C) // »
154#define CA_LABK ALGR(CA_DOT) // < 154#define CA_LABK ALGR(CA_COMM) // <
155#define CA_RABK ALGR(CA_COMM) // > 155#define CA_RABK ALGR(CA_DOT) // >
156 156
157/* Right Ctrl symbols 157/* Right Ctrl symbols
158 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┠158 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
diff --git a/users/danielo515/combo.c b/users/danielo515/combo.c
index 1c8414377..b33cb838b 100644
--- a/users/danielo515/combo.c
+++ b/users/danielo515/combo.c
@@ -6,31 +6,39 @@ enum combos {
6 UI_COM, 6 UI_COM,
7 IO_COM, 7 IO_COM,
8 QW_COM, 8 QW_COM,
9 COM_SLS, 9 DOT_SLS,
10 COM_DOT, 10 COM_DOT,
11 M_COMM, 11 M_COMM,
12 N_M, 12 N_M,
13 OP_COM, 13 OP_COM,
14 M_CM_DOT,
14}; 15};
15 16
16const uint16_t PROGMEM ui_combo[] = {KC_U, KC_I, COMBO_END}; 17const uint16_t PROGMEM ui_combo[] = {KC_U, KC_I, COMBO_END};
17const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END}; 18const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
18const uint16_t PROGMEM yu_combo[] = {KC_Y, KC_U, COMBO_END}; 19const uint16_t PROGMEM yu_combo[] = {KC_Y, KC_U, COMBO_END};
19const uint16_t PROGMEM io_combo[] = {KC_I, KC_O, COMBO_END}; 20const uint16_t PROGMEM io_combo[] = {KC_I, KC_O, COMBO_END};
20const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END}; 21const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
21const uint16_t PROGMEM com_sls[] = {KC_COMMA, KC_SLSH, COMBO_END}; 22const uint16_t PROGMEM dot_sls[] = {KC_DOT, KC_SLSH, COMBO_END};
22const uint16_t PROGMEM com_dot[] = {KC_COMMA, KC_DOT, COMBO_END}; 23const uint16_t PROGMEM com_dot[] = {KC_COMMA, KC_DOT, COMBO_END};
23const uint16_t PROGMEM m_comm[] = {KC_M,KC_COMMA, COMBO_END}; 24const uint16_t PROGMEM m_comm[] = {KC_M, KC_COMMA, COMBO_END};
24const uint16_t PROGMEM n_m[] = {KC_N, KC_M,COMBO_END}; 25const uint16_t PROGMEM n_m[] = {KC_N, KC_M, COMBO_END};
26const uint16_t PROGMEM o_p_combo[] = {KC_O, KC_P, COMBO_END};
27const uint16_t PROGMEM m_cm_dot_combo[] = {KC_M, KC_COMMA, KC_DOT, COMBO_END};
25 28
26combo_t key_combos[COMBO_COUNT] = { 29combo_t key_combos[COMBO_COUNT] = {
27 [JK_ESC] = COMBO(jk_combo, KC_ESC), 30 [JK_ESC] = COMBO(jk_combo, KC_ESC),
28 [YU_COM] = COMBO(yu_combo, KC_CIRC), 31 [YU_COM] = COMBO(yu_combo, KC_AMPR),
29 [UI_COM] = COMBO(ui_combo, KC_DLR), 32 [UI_COM] = COMBO(ui_combo, KC_CIRC),
30 [IO_COM] = COMBO(io_combo, KC_TILD), 33 [IO_COM] = COMBO(io_combo, KC_TILD),
34 [DOT_SLS] = COMBO(dot_sls, KC_EXLM),
35 [COM_DOT] = COMBO(com_dot, KC_QUES),
36 [N_M] = COMBO(n_m, KC_DLR),
37 [OP_COM] = COMBO(o_p_combo, KC_HASH),
38 // m + , = {
39 [M_COMM] = COMBO(m_comm, KC_LCBR),
40 // m + , + . = }
41 // [M_CM_DOT] = COMBO(m_cm_dot_combo, KC_RCBR),
42 // Right hand side combos
31 [QW_COM] = COMBO(qw_combo, KC_AT), 43 [QW_COM] = COMBO(qw_combo, KC_AT),
32 [COM_SLS] = COMBO(com_sls, KC_QUES),
33 [COM_DOT] = COMBO(com_dot, KC_QUES),
34 [M_COMM] = COMBO(m_comm, KC_ESC),
35 [N_M] = COMBO(n_m, KC_DLR),
36}; 44};
diff --git a/users/danielo515/config.h b/users/danielo515/config.h
index fb2472645..d7efcd536 100644
--- a/users/danielo515/config.h
+++ b/users/danielo515/config.h
@@ -1,8 +1,8 @@
1#pragma once 1#pragma once
2 2
3#if defined(COMBO_ENABLE) 3#if defined(COMBO_ENABLE)
4 #define COMBO_COUNT 9 4# define COMBO_COUNT 11
5 #define COMBO_TERM 40 5# define COMBO_TERM 25
6#endif // !COMBO_ENABLE 6#endif // !COMBO_ENABLE
7// Timeout settings for leader key 7// Timeout settings for leader key
8#undef LEADER_TIMEOUT 8#undef LEADER_TIMEOUT
diff --git a/users/danielo515/process_records.c b/users/danielo515/process_records.c
index b1a8b9255..22a46789a 100644
--- a/users/danielo515/process_records.c
+++ b/users/danielo515/process_records.c
@@ -4,11 +4,11 @@ extern bool onMac;
4// ======== INCREMENTAL MACROS STUFF ============= 4// ======== INCREMENTAL MACROS STUFF =============
5#define MAX_INCREMENTAL_MACRO 20 5#define MAX_INCREMENTAL_MACRO 20
6#define TAP_ROTATION_TIMEOUT 400 6#define TAP_ROTATION_TIMEOUT 400
7uint16_t latest_kc = 0; 7uint16_t latest_kc = 0;
8uint16_t latest_rotation = 0; 8uint16_t latest_rotation = 0;
9int key_count = 0; 9int key_count = 0;
10 10
11const char incremental_macros[][MAX_INCREMENTAL_MACRO] = { "String1"SS_TAP(X_HOME)"X-", "String2"SS_TAP(X_HOME) }; 11const char incremental_macros[][MAX_INCREMENTAL_MACRO] = {"String1" SS_TAP(X_HOME) "X-", "String2" SS_TAP(X_HOME)};
12 12
13bool process_incremental_macro(uint16_t kc) { 13bool process_incremental_macro(uint16_t kc) {
14 if (kc < INC_MACROS_START || kc > INC_MACROS_END) { 14 if (kc < INC_MACROS_START || kc > INC_MACROS_END) {
@@ -44,124 +44,157 @@ void refresh_incremental_macros(uint16_t kc) {
44} 44}
45// Send control or GUI depending if we are on windows or mac 45// Send control or GUI depending if we are on windows or mac
46bool CMD(uint16_t kc) { 46bool CMD(uint16_t kc) {
47 if(onMac){ tap_code16(LGUI(kc)); } else { tap_code16(LCTL(kc)); } 47 if (onMac) {
48 tap_code16(LGUI(kc));
49 } else {
50 tap_code16(LCTL(kc));
51 }
48 return false; 52 return false;
49} 53}
50 54
51bool process_record_user(uint16_t keycode, keyrecord_t *record) { 55bool process_record_user(uint16_t keycode, keyrecord_t *record) {
52 bool pressed = record->event.pressed; 56 bool pressed = record->event.pressed;
53 if(pressed){ 57 if (pressed) {
54 refresh_incremental_macros(keycode); 58 refresh_incremental_macros(keycode);
55 if(process_incremental_macro(keycode)){ 59 if (process_incremental_macro(keycode)) {
56 return false; 60 return false;
57 } 61 }
58 switch (keycode) { 62 switch (keycode) {
59 case MAC_TGL: 63 case MAC_TGL:
60 onMac = !onMac; 64 onMac = !onMac;
61 onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC"); 65 onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC");
62 return false; 66 return false;
63 } 67 }
64 } 68 }
65 69
66 switch (keycode) { 70 switch (keycode) {
67 case QWERTY: 71 case QWERTY:
68 if (record->event.pressed) { 72 if (record->event.pressed) {
69 #ifdef AUDIO_ENABLE 73#ifdef AUDIO_ENABLE
70 PLAY_SONG(tone_qwerty); 74 PLAY_SONG(tone_qwerty);
71 #endif 75#endif
72 layer_on(_QWERTY); 76 layer_on(_QWERTY);
73 } 77 }
74 return false; 78 return false;
75 case LOWER: 79 case LOWER:
76 if (record->event.pressed) { 80 if (record->event.pressed) {
77 layer_on(_LOWER); 81 layer_on(_LOWER);
78 } else { 82 } else {
79 layer_off(_LOWER); 83 layer_off(_LOWER);
80 } 84 }
81 return false; 85 return false;
82 case RAISE: 86 case RAISE:
83 if (record->event.pressed) { 87 if (record->event.pressed) {
84 layer_on(_RAISE); 88 layer_on(_RAISE);
85 } else { 89 } else {
86 layer_off(_RAISE); 90 layer_off(_RAISE);
87 } 91 }
88 return false; 92 return false;
89 case ADJUST: 93 case ADJUST:
90 if (record->event.pressed) { 94 if (record->event.pressed) {
91 layer_on(_ADJUST); 95 layer_on(_ADJUST);
92 } else { 96 } else {
93 layer_off(_ADJUST); 97 layer_off(_ADJUST);
94 } 98 }
95 return false; 99 return false;
96 // == Macros START === 100 // == Macros START ===
97 case IARROW: if (record->event.pressed) SEND_STRING("<-"); return false; 101 case IARROW:
98 case ARROW: if (record->event.pressed) SEND_STRING("->"); return false; 102 if (record->event.pressed) SEND_STRING("<-");
99 case F_ARROW: if (record->event.pressed) SEND_STRING("=>"); return false; 103 return false;
100 case GREP: if (record->event.pressed) SEND_STRING(" | grep "); return false; 104 case ARROW:
101 case CLN_EQ: if (record->event.pressed) SEND_STRING(":="); return false; 105 if (record->event.pressed) SEND_STRING("->");
102 // == Macros END === 106 return false;
103 // == Multi Os START === 107 case F_ARROW:
104 case KC_HOME:// make the home behave the same on OSX 108 if (record->event.pressed) SEND_STRING("=>");
105 if (record->event.pressed && onMac) { 109 return false;
106 SEND_STRING(SS_LCTRL("a")); 110 case GREP:
107 return false; 111 if (record->event.pressed) SEND_STRING(" | grep ");
108 } 112 return false;
109 case KC_END:// make the end behave the same on OSX 113 case CLN_EQ:
110 if (record->event.pressed && onMac) { 114 if (record->event.pressed) SEND_STRING(":=");
111 tap_code16(C(KC_E)); 115 return false;
112 return false; 116 // == Macros END ===
113 } 117 // == Multi Os START ===
114 case AC_A:// Accent á 118 case KC_HOME: // make the home behave the same on OSX
115 if (record->event.pressed) SEND_STRING(SS_LALT("e") "a"); return false; 119 if (record->event.pressed && onMac) {
116 case AC_E:// Accent é 120 SEND_STRING(SS_LCTRL("a"));
117 if (record->event.pressed) SEND_STRING(SS_LALT("e") "e"); return false; 121 return false;
118 case AC_I:// Accent í 122 }
119 if (record->event.pressed) SEND_STRING(SS_LALT("e") "i"); return false; 123 case KC_END: // make the end behave the same on OSX
120 case AC_O:// Accent ó 124 if (record->event.pressed && onMac) {
121 if (record->event.pressed) SEND_STRING(SS_LALT("e") "o"); return false; 125 tap_code16(C(KC_E));
122 case CUT: if (record->event.pressed) return CMD(KC_X); 126 return false;
123 case COPY: 127 }
124 if (record->event.pressed) { 128 case AC_A: // Accent á
125 onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c")); 129 if (record->event.pressed) SEND_STRING(SS_LALT("e") "a");
126 } 130 return false;
127 return false; 131 case AC_E: // Accent é
128 case PASTE: 132 if (record->event.pressed) SEND_STRING(SS_LALT("e") "e");
129 if (record->event.pressed) { 133 return false;
130 onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v")); 134 case AC_I: // Accent í
131 } 135 if (record->event.pressed) SEND_STRING(SS_LALT("e") "i");
132 return false; 136 return false;
133 case SAVE: 137 case AC_O: // Accent ó
134 if (record->event.pressed) { 138 if (record->event.pressed) SEND_STRING(SS_LALT("e") "o");
135 onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s")); 139 return false;
136 } 140 case CUT:
137 return false; 141 if (record->event.pressed) return CMD(KC_X);
138 case UNDO: 142 case COPY:
139 if (record->event.pressed) { 143 if (record->event.pressed) {
140 onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z")); 144 onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
141 } 145 }
142 return false; 146 return false;
143 case FIND: 147 case PASTE:
144 if (record->event.pressed) { 148 if (record->event.pressed) {
145 onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f")); 149 onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
146 } 150 }
147 return false; 151 return false;
148 case CHG_LAYOUT: 152 case SAVE:
149 if (record->event.pressed) { 153 if (record->event.pressed) {
150 onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f")); 154 onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s"));
151 } 155 }
152 return false; 156 return false;
153 // == Multi Os END === 157 case UNDO:
158 if (record->event.pressed) {
159 onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z"));
160 }
161 return false;
162 case REDO:
163 if (record->event.pressed) {
164 onMac ? SEND_STRING(SS_LGUI(SS_LSFT("z"))) : SEND_STRING(SS_LCTRL("y"));
165 }
166 return false;
167 case FIND:
168 if (record->event.pressed) {
169 onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f"));
170 }
171 return false;
172 case WIN_TO_RIGHT:
173 if (record->event.pressed) {
174 onMac ? tap_code16(SGUI(A(KC_RIGHT))) : tap_code16(G(KC_RIGHT));
175 }
176 return false;
177 case WIN_TO_LEFT:
178 if (record->event.pressed) {
179 onMac ? tap_code16(SGUI(A(KC_LEFT))) : tap_code16(G(KC_LEFT));
180 }
181 return false;
182 case CHG_LAYOUT:
183 if (record->event.pressed) {
184 onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f"));
185 }
186 return false;
187 // == Multi Os END ===
154#ifdef RGBLIGHT_ENABLE 188#ifdef RGBLIGHT_ENABLE
155 case RGB_SLD: 189 case RGB_SLD:
156 if (record->event.pressed) { rgblight_mode(1); } 190 if (record->event.pressed) {
157 return false; 191 rgblight_mode(1);
158 break; 192 }
159 //First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt 193 return false;
194 break;
195 // First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt
160#endif 196#endif
161 } 197 }
162// =============== ALT_TAB single key handling 198 // =============== ALT_TAB single key handling
163 return process_alt_tab(keycode, record); 199 return process_alt_tab(keycode, record);
164}; 200};
165
166
167
diff --git a/users/danielo515/process_records.h b/users/danielo515/process_records.h
index c994511a5..0efd690d4 100644
--- a/users/danielo515/process_records.h
+++ b/users/danielo515/process_records.h
@@ -1,35 +1,36 @@
1#pragma once 1#pragma once
2#include "quantum.h" 2#include "quantum.h"
3 3
4enum custom_keycodes 4enum custom_keycodes {
5{ 5 RGB_SLD = SAFE_RANGE,
6 EPRM = SAFE_RANGE,
7 RGB_SLD,
8 ALT_TAB, 6 ALT_TAB,
9 QWERTY, 7 QWERTY,
10 SYM, 8 SYM,
11 NAV, 9 NAV,
12 ADJUST, 10 ADJUST,
13// Macros 11 // Macros
14 ARROW, 12 ARROW,
15 IARROW, 13 IARROW,
16 CLN_EQ, 14 CLN_EQ,
17 F_ARROW, 15 F_ARROW,
18 GREP, 16 GREP,
19// Accented characters 17 // Accented characters
20 AC_A, 18 AC_A,
21 AC_E, 19 AC_E,
22 AC_I, 20 AC_I,
23 AC_O, 21 AC_O,
24// Custom multi-os key-codes 22 // Custom multi-os key-codes
25 CUT, 23 CUT,
26 COPY, 24 COPY,
27 PASTE, 25 PASTE,
28 SAVE, 26 SAVE,
29 UNDO, 27 UNDO,
28 REDO,
30 CHG_LAYOUT, 29 CHG_LAYOUT,
31 FIND, 30 FIND,
32// OTHER OLD STUFF 31 WIN_TO_LEFT,
32 WIN_TO_RIGHT,
33 // OTHER OLD STUFF
33 LOWER, 34 LOWER,
34 RAISE, 35 RAISE,
35 MAC_TGL, 36 MAC_TGL,
@@ -57,48 +58,49 @@ enum layers {
57}; 58};
58 59
59//===== Function letters 60//===== Function letters
60# define FN_F LT(_F,KC_F) 61#define FN_F LT(_F, KC_F)
61# define FN_D LT(_D,KC_D) 62#define FN_D LT(_D, KC_D)
62# define FN_S LT(_S,KC_S) 63#define FN_S LT(_S, KC_S)
63# define FN_A LT(_A,KC_A) 64#define FN_A LT(_A, KC_A)
64# define FN_K LT(_K,KC_K) 65#define FN_K LT(_K, KC_K)
65# define FN_J LT(_J,KC_J) 66#define FN_J LT(_J, KC_J)
66# define KC_FN_D FN_D 67#define KC_FN_D FN_D
67# define KC_FN_S FN_S 68#define KC_FN_S FN_S
68# define KC_FN_F FN_F 69#define KC_FN_F FN_F
69 70
70# define KC_MACROS OSL(_MACROS) 71#define KC_MACROS OSL(_MACROS)
71 72
72 73#define KC_E_COLN LSFT(KC_DOT)
73# define KC_E_COLN LSFT(KC_DOT) 74#define KC_E_EQL ES_EQL
74# define KC_E_EQL ES_EQL 75#define KC_GUI OSM(MOD_RGUI)
75# define KC_GUI OSM(MOD_RGUI) 76#define KC_R_NUB S(KC_NUBS)
76# define KC_R_NUB S(KC_NUBS) 77#define KC_E_LT KC_NUBS
77# define KC_E_LT KC_NUBS 78#define KC_E_GT S(KC_NUBS)
78# define KC_E_GT S(KC_NUBS) 79#define KC_E_TILD ES_TILD
79# define KC_E_TILD ES_TILD 80#define KC_E_MINS ES_MINS
80# define KC_E_MINS ES_MINS 81#define KC_E_OVRR ES_OVRR
81# define KC_E_OVRR ES_OVRR 82#define KC_E_APOS ES_APOS
82# define KC_E_APOS ES_APOS 83#define KC_E_IEXL ES_IEXL
83# define KC_E_IEXL ES_IEXL
84//========== Short hand for complex key combinations 84//========== Short hand for complex key combinations
85# define WIN_LEFT_HALF LALT(LGUI(KC_LEFT)) 85#define WIN_LEFT_HALF LALT(LGUI(KC_LEFT))
86# define WIN_RIGHT_HALF LALT(LGUI(KC_RIGHT)) 86#define WIN_RIGHT_HALF LALT(LGUI(KC_RIGHT))
87# define WIN_TO_LEFT LALT(LSFT( LGUI(KC_LEFT) )) 87#define ALL_WIN LCTL(KC_DOWN)
88# define WIN_TO_RIGHT LALT(LSFT( LGUI(KC_RIGHT) )) 88#define EXPOSE LGUI(KC_DOWN)
89# define ALL_WIN LCTL(KC_DOWN)
90# define EXPOSE LGUI(KC_DOWN)
91// ========== Modifiers!! 89// ========== Modifiers!!
92# define SHIFT OSM(MOD_LSFT) 90#define SHIFT OSM(MOD_LSFT)
93//=============== tap for key hold for mod 91//=============== tap for key hold for mod
94# define HYPR_H HYPR_T(KC_H) 92#define HYPR_H HYPR_T(KC_H)
95# define CTL_K RCTL_T(KC_K) 93#define CTL_K RCTL_T(KC_K)
96# define ALT_J ALT_T(KC_J) 94#define ALT_J ALT_T(KC_J)
97# define SFT_MINS LSFT_T(KC_MINS) // tap - hold shift 95#define SFT_MINS LSFT_T(KC_MINS) // tap - hold shift
98# define CMD_QUOT GUI_T(KC_QUOTE) // tap ' hold cmd 96#define CMD_MINS GUI_T(KC_MINS) // tap - hold cmd
97#define CMD_QUOT GUI_T(KC_QUOTE) // tap ' hold cmd
98#define SFT_QUOT LSFT_T(KC_QUOTE) // tap ' hold shift
99//=============== Movement modified 99//=============== Movement modified
100# define CTL_LEFT LCTL(KC_LEFT) 100#define CTL_LEFT LCTL(KC_LEFT)
101# define CTL_RIGHT LCTL(KC_RIGHT) 101#define CTL_RIGHT LCTL(KC_RIGHT)
102 102
103# define SFT_LEFT LSFT(KC_LEFT) 103#define SFT_LEFT LSFT(KC_LEFT)
104# define SFT_RIGHT LSFT(KC_RIGHT) 104#define SFT_RIGHT LSFT(KC_RIGHT)
105#define SFT_LEFT_END LGUI(LSFT(KC_LEFT))
106#define SFT_RIGHT_END LGUI(LSFT(KC_RIGHT))
diff --git a/users/stanrc85/rgblight_layers.c b/users/stanrc85/rgblight_layers.c
index 780555e7b..1fbd54149 100644
--- a/users/stanrc85/rgblight_layers.c
+++ b/users/stanrc85/rgblight_layers.c
@@ -3,44 +3,7 @@
3static uint8_t middle = 0; 3static uint8_t middle = 0;
4static uint8_t bottom = 0; 4static uint8_t bottom = 0;
5 5
6const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
7 {3, 2, HSV_RED},
8 {10, 2, HSV_RED}
9);
10
11const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
12 {3, 1, HSV_GREEN},
13 {11, 1, HSV_GREEN}
14);
15
16const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
17 {3, 1, HSV_BLUE},
18 {11, 1, HSV_BLUE}
19);
20
21const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
22 {3, 1, HSV_WHITE},
23 {11, 1, HSV_WHITE}
24);
25
26// Now define the array of layers. Later layers take precedence
27const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
28 my_capslock_layer,
29 my_layer1_layer,
30 my_layer2_layer,
31 my_layer3_layer
32);
33
34void keyboard_post_init_user(void) {
35 // Enable the LED layers
36 rgblight_layers = my_rgb_layers;
37}
38
39layer_state_t layer_state_set_user(layer_state_t state) { 6layer_state_t layer_state_set_user(layer_state_t state) {
40 // Both layers will light up if both kb layers are active
41 rgblight_set_layer_state(1, layer_state_cmp(state, 1));
42 rgblight_set_layer_state(2, layer_state_cmp(state, 2));
43 rgblight_set_layer_state(3, layer_state_cmp(state, 3));
44 middle = bottom = 0; 7 middle = bottom = 0;
45 switch (get_highest_layer(state)) { 8 switch (get_highest_layer(state)) {
46 case _FN1_60: 9 case _FN1_60:
@@ -60,7 +23,6 @@ layer_state_t layer_state_set_user(layer_state_t state) {
60} 23}
61 24
62bool led_update_user(led_t led_state) { 25bool led_update_user(led_t led_state) {
63 //rgblight_set_layer_state(0, led_state.caps_lock);
64 writePin(INDICATOR_PIN_0, !led_state.caps_lock); 26 writePin(INDICATOR_PIN_0, !led_state.caps_lock);
65 writePin(INDICATOR_PIN_1, !middle); 27 writePin(INDICATOR_PIN_1, !middle);
66 writePin(INDICATOR_PIN_2, !bottom); 28 writePin(INDICATOR_PIN_2, !bottom);
diff --git a/users/stanrc85/rules.mk b/users/stanrc85/rules.mk
index 5c572c0af..54f0f7626 100644
--- a/users/stanrc85/rules.mk
+++ b/users/stanrc85/rules.mk
@@ -10,24 +10,10 @@ NKRO_ENABLE = no
10 10
11SRC += stanrc85.c 11SRC += stanrc85.c
12 12
13ifeq ($(strip $(KEYBOARD)), 1upkeyboards/1up60hse)
14 SRC += layer_rgb.c
15 VIA_ENABLE = yes
16 LTO_ENABLE = yes
17endif
18ifeq ($(strip $(KEYBOARD)), dz60)
19 SRC += layer_rgb.c
20 VIA_ENABLE = yes
21 LTO_ENABLE = yes
22endif
23ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev1)
24 SRC += rgblight_layers.c
25 VIA_ENABLE = yes
26 LTO_ENABLE = no
27 VELOCIKEY_ENABLE=yes
28endif
29ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev2) 13ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev2)
30 SRC += rgblight_layers.c 14 SRC += rgblight_layers.c
15 SRC += startup_fanfare.c
16 OPT_DEFS += -DHAS_INDICATORS
31 VIA_ENABLE = yes 17 VIA_ENABLE = yes
32 LTO_ENABLE = no 18 LTO_ENABLE = no
33 VELOCIKEY_ENABLE=yes 19 VELOCIKEY_ENABLE=yes
diff --git a/users/stanrc85/stanrc85.c b/users/stanrc85/stanrc85.c
index c1aaad1a1..2dbd41974 100644
--- a/users/stanrc85/stanrc85.c
+++ b/users/stanrc85/stanrc85.c
@@ -44,8 +44,42 @@ void ctl_copy_reset (qk_tap_dance_state_t *state, void *user_data) {
44 } 44 }
45} 45}
46 46
47#if defined(HAS_INDICATORS)
48 static uint8_t led_user = 0;
49#endif
50
51void lock_unlock (qk_tap_dance_state_t *state, void *user_data) {
52 td_state = cur_dance(state);
53 switch (td_state) {
54 case SINGLE_TAP: // Ctl + Alt + Del to unlock workstation
55 tap_code16(KC_CAD);
56 #if defined(HAS_INDICATORS)
57 led_user = 0;
58 writePin(INDICATOR_PIN_0, !led_user);
59 wait_ms(200);
60 writePin(INDICATOR_PIN_1, !led_user);
61 wait_ms(200);
62 writePin(INDICATOR_PIN_2, !led_user);
63 #endif
64 break;
65 case SINGLE_HOLD:
66 break;
67 case DOUBLE_TAP: //Lock workstation
68 tap_code16(KC_LOCK);
69 #if defined(HAS_INDICATORS)
70 led_user = 1;
71 writePin(INDICATOR_PIN_2, !led_user);
72 wait_ms(200);
73 writePin(INDICATOR_PIN_1, !led_user);
74 wait_ms(200);
75 writePin(INDICATOR_PIN_0, !led_user);
76 #endif
77 break;
78 }
79}
80
47qk_tap_dance_action_t tap_dance_actions[] = { 81qk_tap_dance_action_t tap_dance_actions[] = {
48 [TD_WIN] = ACTION_TAP_DANCE_DOUBLE(KC_CAD, KC_LOCK), 82 [TD_WIN] = ACTION_TAP_DANCE_FN(lock_unlock),
49 [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV), 83 [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV),
50 [TD_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctl_copy_finished, ctl_copy_reset) 84 [TD_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctl_copy_finished, ctl_copy_reset)
51}; 85};
diff --git a/users/stanrc85/startup_fanfare.c b/users/stanrc85/startup_fanfare.c
new file mode 100644
index 000000000..507d9e389
--- /dev/null
+++ b/users/stanrc85/startup_fanfare.c
@@ -0,0 +1,43 @@
1#include "stanrc85.h"
2
3static uint8_t top = 0;
4static uint8_t middle = 0;
5static uint8_t bottom = 0;
6
7static bool is_enabled = true;
8static bool is_rgblight_startup = true;
9static uint16_t rgblight_startup_loop_timer;
10
11void matrix_scan_user(void) {
12 // Boot up "fanfare"
13 if (is_rgblight_startup && is_keyboard_master()) {
14 if (timer_elapsed(rgblight_startup_loop_timer) > 10) {
15 static uint8_t counter;
16 counter++;
17 if (counter == 1) {
18 top = 1;
19 writePin(INDICATOR_PIN_0, !top);
20 wait_ms(200);
21 top = 0;
22 writePin(INDICATOR_PIN_0, !top);
23 }
24 if (counter == 2) {
25 middle = 1;
26 writePin(INDICATOR_PIN_1, !middle);
27 wait_ms(200);
28 middle = 0;
29 writePin(INDICATOR_PIN_1, !middle);
30 }
31 if (counter == 3) {
32 bottom = 1;
33 writePin(INDICATOR_PIN_2, !bottom);
34 wait_ms(200);
35 bottom = 0;
36 writePin(INDICATOR_PIN_2, !bottom);
37 }
38 if (counter == 4) {
39 is_enabled = is_rgblight_startup = false;
40 }
41 }
42 }
43}