Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b9f200a2a | ||
|
|
9e99a9b98c | ||
|
|
e4d46a1c00 | ||
|
|
7141de19d9 | ||
|
|
c82865efab | ||
|
|
d8d65bbf5f | ||
|
|
58d7e9fa0e | ||
|
|
6de4a53c7c | ||
|
|
3d3c2e1d3f | ||
|
|
3d4f0028d6 | ||
|
|
6e948feb6a | ||
|
|
076b9d482f | ||
|
|
08f6e64137 | ||
|
|
4b9c3dc2e5 | ||
|
|
ba3ec0f081 | ||
|
|
d3cea9ed93 | ||
|
|
5f00df0c4c | ||
|
|
cd73949682 | ||
|
|
4e3a96ff3e | ||
|
|
ae7a076964 | ||
|
|
78d5224a1d | ||
|
|
088888937a | ||
|
|
9fe3fc4c04 | ||
|
|
6b1c58629f | ||
|
|
3b1abe0dee | ||
|
|
3b14c032e0 | ||
|
|
fb66f0a3fb | ||
|
|
1d8b0ccc81 | ||
|
|
92e5361fc5 | ||
|
|
8ea8a80c5b | ||
|
|
788cbcf828 | ||
|
|
28e10eedda | ||
|
|
6c3e404839 | ||
|
|
f7ccbfcea8 | ||
|
|
8ac9940a76 | ||
|
|
ac24f203cc | ||
|
|
d0eabd083e | ||
|
|
e0b7c70743 | ||
|
|
9bca381b98 | ||
|
|
d612d617ee | ||
|
|
687d05dfb1 | ||
|
|
a8a714c46e | ||
|
|
6e32dd123f | ||
|
|
82a830196f | ||
|
|
6a79d99ea2 | ||
|
|
2e4a75e2bc | ||
|
|
c3f3b34d7c | ||
|
|
98278968b7 | ||
|
|
361003934e | ||
|
|
c10b011828 | ||
|
|
6eefc20c2a | ||
|
|
2282104526 | ||
|
|
9b9587527f | ||
|
|
461153150b | ||
|
|
c1a6b5f430 | ||
|
|
25e93b4b67 | ||
|
|
2f26e14dc6 | ||
|
|
bad589ec59 | ||
|
|
eead2c6087 | ||
|
|
04293bcd5b | ||
|
|
e7cc5a35c2 | ||
|
|
9808bfaf26 | ||
|
|
2ab307a940 | ||
|
|
4086729f5e | ||
|
|
4701001524 | ||
|
|
6e618baa57 | ||
|
|
825ef0bd96 | ||
|
|
58600d3f65 | ||
|
|
f145696dad | ||
|
|
7fe01239dd | ||
|
|
32910738fd | ||
|
|
4889625015 | ||
|
|
744940bbd9 | ||
|
|
0bec817479 | ||
|
|
80fd81ad6b | ||
|
|
d16d866597 | ||
|
|
0032cb026b | ||
|
|
854a94f383 | ||
|
|
4a6cfb06c5 | ||
|
|
a9a2817f3a | ||
|
|
4286b81af0 | ||
|
|
fa740c1286 | ||
|
|
69804bb243 | ||
|
|
a3db72df72 |
No files matched your search
@@ -16,7 +16,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- uses: trilom/[email protected].3
|
- uses: trilom/[email protected].4
|
||||||
id: file_changes
|
id: file_changes
|
||||||
with:
|
with:
|
||||||
output: '\n'
|
output: '\n'
|
||||||
|
|||||||
Vendored
+2
-1
@@ -16,7 +16,8 @@
|
|||||||
"*.hpp": "cpp",
|
"*.hpp": "cpp",
|
||||||
"xstddef": "c",
|
"xstddef": "c",
|
||||||
"type_traits": "c",
|
"type_traits": "c",
|
||||||
"utility": "c"
|
"utility": "c",
|
||||||
|
"ranges": "c"
|
||||||
},
|
},
|
||||||
"[markdown]": {
|
"[markdown]": {
|
||||||
"editor.trimAutoWhitespace": false,
|
"editor.trimAutoWhitespace": false,
|
||||||
|
|||||||
+12
-1
@@ -397,9 +397,20 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Support for translating old names to new names:
|
||||||
|
ifeq ($(strip $(DEBOUNCE_TYPE)),sym_g)
|
||||||
|
DEBOUNCE_TYPE:=sym_defer_g
|
||||||
|
else ifeq ($(strip $(DEBOUNCE_TYPE)),eager_pk)
|
||||||
|
DEBOUNCE_TYPE:=sym_eager_pk
|
||||||
|
else ifeq ($(strip $(DEBOUNCE_TYPE)),sym_pk)
|
||||||
|
DEBOUNCE_TYPE:=sym_defer_pk
|
||||||
|
else ifeq ($(strip $(DEBOUNCE_TYPE)),eager_pr)
|
||||||
|
DEBOUNCE_TYPE:=sym_eager_pr
|
||||||
|
endif
|
||||||
|
|
||||||
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
|
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
|
||||||
# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
|
# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
|
||||||
DEBOUNCE_TYPE?= sym_g
|
DEBOUNCE_TYPE?= sym_defer_g
|
||||||
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
|
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
|
||||||
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
|
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
|
||||||
endif
|
endif
|
||||||
|
|||||||
+127
-19
@@ -1,43 +1,151 @@
|
|||||||
# Debounce algorithm
|
# Contact bounce / contact chatter
|
||||||
|
|
||||||
|
Mechanical switches often don't have a clean single transition between pressed and unpressed states.
|
||||||
|
|
||||||
|
In an ideal world, when you press a switch, you would expect the digital pin to see something like this:
|
||||||
|
(X axis showing time
|
||||||
|
```
|
||||||
|
voltage +----------------------
|
||||||
|
^ |
|
||||||
|
| |
|
||||||
|
| ------------------+
|
||||||
|
----> time
|
||||||
|
```
|
||||||
|
|
||||||
|
However in the real world you will actually see contact bounce, which will look like multiple 1->0 and 0->1 transitions,
|
||||||
|
until the value finally settles.
|
||||||
|
```
|
||||||
|
+-+ +--+ +-------------
|
||||||
|
| | | | |
|
||||||
|
| | | | |
|
||||||
|
+-----------------+ +-+ +-+
|
||||||
|
```
|
||||||
|
The time it takes for the switch to settle might vary with switch type, age, and even pressing technique.
|
||||||
|
|
||||||
|
If the device chooses not to mitigate contact bounce, then often actions that happen when the switch is pressed are repeated
|
||||||
|
multiple times.
|
||||||
|
|
||||||
|
There are many ways to handle contact bounce ("Debouncing"). Some include employing additional hardware, for example an RC filter,
|
||||||
|
while there are various ways to do debouncing in software too, often called debounce algorithms. This page discusses software
|
||||||
|
debouncing methods available in QMK.
|
||||||
|
|
||||||
|
While technically not considered contact bounce/contact chatter, some switch technologies are susceptible to noise, meaning,
|
||||||
|
while the key is not changing state, sometimes short random 0->1 or 1->0 transitions might be read by the digital circuit, for example:
|
||||||
|
```
|
||||||
|
+-+
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
+-----------------+ +--------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
Many debounce methods (but not all) will also make the device resistant to noise. If you are working with a technology that is
|
||||||
|
susceptible to noise, you must choose a debounce method that will also mitigate noise for you.
|
||||||
|
|
||||||
|
## Types of debounce algorithms
|
||||||
|
|
||||||
|
1) Unit of time: Timestamp (milliseconds) vs Cycles (scans)
|
||||||
|
* Debounce algorithms often have a 'debounce time' parameter, that specifies the maximum settling time of the switch contacts.
|
||||||
|
This time might be measured in various units:
|
||||||
|
* Cycles-based debouncing waits n cycles (scans), decreasing count by one each matrix_scan
|
||||||
|
* Timestamp-based debouncing stores the millisecond timestamp a change occurred, and does substraction to figure out time elapsed.
|
||||||
|
* Timestamp-based debouncing is usually superior, especially in the case of noise-resistant devices because settling times of physical
|
||||||
|
switches is specified in units of time, and should not depend on the matrix scan-rate of the keyboard.
|
||||||
|
* Cycles-based debouncing is sometimes considered inferior, because the settling time that it is able to compensate for depends on the
|
||||||
|
performance of the matrix scanning code. If you use cycles-based debouncing, and you significantly improve the performance of your scanning
|
||||||
|
code, you might end up with less effective debouncing. A situation in which cycles-based debouncing might be preferable is when
|
||||||
|
noise is present, and the scanning algorithm is slow, or variable speed. Even if your debounce algorithm is fundamentally noise-resistant,
|
||||||
|
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
|
||||||
|
sampled values, which will limit the noise-resistance of the algorithm.
|
||||||
|
* Currently all built-in debounce algorithms support timestamp-based debouncing only. In the future we might
|
||||||
|
implement cycles-based debouncing, and it will be selectable via a ```config.h``` macro.
|
||||||
|
|
||||||
|
2) Symmetric vs Asymmetric
|
||||||
|
* Symmetric - apply the same debouncing algorithm, to both key-up and key-down events.
|
||||||
|
* Recommended naming convention: ```sym_*```
|
||||||
|
* Asymmetric - apply different debouncing algorithms to key-down and key-up events. E.g. Eager key-down, Defer key-up.
|
||||||
|
* Recommended naming convention: ```asym_*``` followed by details of the type of algorithm in use, in order, for key-down and then key-up
|
||||||
|
|
||||||
|
3) Eager vs Defer
|
||||||
|
* Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
|
||||||
|
* Eager algorithms are not noise-resistant.
|
||||||
|
* Recommended naming conventions:
|
||||||
|
* ```sym_eager_*```
|
||||||
|
* ```asym_eager_*_*```: key-down is using eager algorithm
|
||||||
|
* ```asym_*_eager_*```: key-up is using eager algorithm
|
||||||
|
* Defer - wait for no changes for DEBOUNCE ms before reporting change.
|
||||||
|
* Defer algorithms are noise-resistant
|
||||||
|
* Recommended naming conventions:
|
||||||
|
* ```sym_defer_*```
|
||||||
|
* ```asym_defer_*_*```: key-down is using eager algorithm
|
||||||
|
* ```asym_*_defer_*```: key-up is using eager algorithm
|
||||||
|
|
||||||
|
4) Global vs Per-Key vs Per-Row
|
||||||
|
* Global - one timer for all keys. Any key change state affects global timer
|
||||||
|
* Recommended naming convention: ```*_g```
|
||||||
|
* Per-key - one timer per key
|
||||||
|
* Recommended naming convention: ```*_pk```
|
||||||
|
* Per-row - one timer per row
|
||||||
|
* Recommended naming convention: ```*_pr```
|
||||||
|
* Per-key and per-row algorithms consume more resources (in terms of performance,
|
||||||
|
and ram usage), but fast typists might prefer them over global.
|
||||||
|
|
||||||
|
## Debounce algorithms supported by QMK
|
||||||
|
|
||||||
QMK supports multiple debounce algorithms through its debounce API.
|
QMK supports multiple debounce algorithms through its debounce API.
|
||||||
|
The logic for which debounce method called is below. It checks various defines that you have set in ```rules.mk```
|
||||||
The logic for which debounce method called is below. It checks various defines that you have set in rules.mk
|
|
||||||
|
|
||||||
```
|
```
|
||||||
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
|
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
|
||||||
DEBOUNCE_TYPE?= sym_g
|
DEBOUNCE_TYPE?= sym_defer_g
|
||||||
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
|
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
|
||||||
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
|
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
|
||||||
endif
|
endif
|
||||||
```
|
```
|
||||||
|
|
||||||
# Debounce selection
|
### Debounce selection
|
||||||
|
|
||||||
| DEBOUNCE_TYPE | Description | What else is needed |
|
| DEBOUNCE_TYPE | Description | What else is needed |
|
||||||
| ------------- | --------------------------------------------------- | ----------------------------- |
|
| ------------- | --------------------------------------------------- | ----------------------------- |
|
||||||
| Not defined | Use the default algorithm, currently sym_g | Nothing |
|
| Not defined | Use the default algorithm, currently sym_defer_g | Nothing |
|
||||||
| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
|
| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
|
||||||
| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
|
| Anything Else | Use another algorithm from quantum/debounce/* | Nothing |
|
||||||
|
|
||||||
**Regarding split keyboards**:
|
**Regarding split keyboards**:
|
||||||
The debounce code is compatible with split keyboards.
|
The debounce code is compatible with split keyboards.
|
||||||
|
|
||||||
# Use your own debouncing code
|
### Selecting an included debouncing method
|
||||||
* Set ```DEBOUNCE_TYPE = custom```.
|
Keyboards may select one of the already implemented debounce methods, by adding to ```rules.mk``` the following line:
|
||||||
* Add ```SRC += debounce.c```
|
```
|
||||||
|
DEBOUNCE_TYPE = <name of algorithm>
|
||||||
|
```
|
||||||
|
Where name of algorithm is one of:
|
||||||
|
* ```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.
|
||||||
|
* This is the current default algorithm. This is the highest performance algorithm with lowest memory usage, and it's also noise-resistant.
|
||||||
|
* ```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.
|
||||||
|
For 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
|
||||||
|
appropriate 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.
|
||||||
|
* ```sym_eager_pk``` - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
|
||||||
|
* ```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.
|
||||||
|
|
||||||
|
### A couple algorithms that could be implemented in the future:
|
||||||
|
* ```sym_defer_pr```
|
||||||
|
* ```sym_eager_g```
|
||||||
|
* ```asym_eager_defer_pk```
|
||||||
|
|
||||||
|
### Use your own debouncing code
|
||||||
|
You have the option to implement you own debouncing algorithm. To do this:
|
||||||
|
* Set ```DEBOUNCE_TYPE = custom``` in ```rules.mk```.
|
||||||
|
* Add ```SRC += debounce.c``` in ```rules.mk```
|
||||||
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
|
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
|
||||||
* Debouncing occurs after every raw matrix scan.
|
* Debouncing occurs after every raw matrix scan.
|
||||||
* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
|
* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
|
||||||
|
* If the algorithm might be applicable to other keyboards, please consider adding it to ```quantum/debounce```
|
||||||
|
|
||||||
# Changing between included debouncing methods
|
### Old names
|
||||||
You can either use your own code, by including your own debounce.c, or switch to another included one.
|
The following old names for existing algorithms will continue to be supported, however it is recommended to use the new names instead.
|
||||||
Included debounce methods are:
|
|
||||||
* 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.
|
|
||||||
For 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
|
|
||||||
appropriate 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.
|
|
||||||
* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
|
|
||||||
* 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.
|
|
||||||
* 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.
|
|
||||||
|
|
||||||
|
* sym_g - old name for sym_defer_g
|
||||||
|
* eager_pk - old name for sym_eager_pk
|
||||||
|
* sym_pk - old name for sym_defer_pk
|
||||||
|
* eager_pr - old name for sym_eager_pr
|
||||||
|
|
||||||
@@ -48,11 +48,12 @@ However, USB cables, SATA cables, and even just 4 wires have been known to be us
|
|||||||
|
|
||||||
### Serial Wiring
|
### Serial Wiring
|
||||||
|
|
||||||
The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and D0 (aka PDO or pin 3) between the two Pro Micros.
|
The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and D0/D1/D2/D3 (aka PD0/PD1/PD2/PD3) between the two Pro Micros.
|
||||||
|
|
||||||
?> Note that the pin used here is actually set by `SOFT_SERIAL_PIN` below.
|
?> Note that the pin used here is actually set by `SOFT_SERIAL_PIN` below.
|
||||||
|
|
||||||

|
<img alt="sk-pd0-connection-mono" src="https://user-images.githubusercontent.com/2170248/92296488-28e9ad80-ef70-11ea-98be-c40cb48a0319.JPG" width="48%"/>
|
||||||
|
<img alt="sk-pd2-connection-mono" src="https://user-images.githubusercontent.com/2170248/92296490-2d15cb00-ef70-11ea-801f-5ace313013e6.JPG" width="48%"/>
|
||||||
|
|
||||||
### I<sup>2</sup>C Wiring
|
### I<sup>2</sup>C Wiring
|
||||||
|
|
||||||
@@ -60,7 +61,7 @@ The 4 wires of the TRRS cable need to connect GND, VCC, and SCL and SDA (aka PD0
|
|||||||
|
|
||||||
The pull-up resistors may be placed on either half. If you wish to use the halves independently, it is also possible to use 4 resistors and have the pull-ups in both halves.
|
The pull-up resistors may be placed on either half. If you wish to use the halves independently, it is also possible to use 4 resistors and have the pull-ups in both halves.
|
||||||
|
|
||||||

|
<img alt="sk-i2c-connection-mono" src="https://user-images.githubusercontent.com/2170248/92297182-92b98580-ef77-11ea-9d7d-d6033914af43.JPG" width="50%"/>
|
||||||
|
|
||||||
## Firmware Configuration
|
## Firmware Configuration
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# 開発環境のセットアップ
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.50:docs/api_development_environment.md
|
||||||
|
git diff 0.9.50 HEAD -- docs/api_development_environment.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
開発環境をセットアップするには、[qmk_web_stack](https://github.com/qmk/qmk_web_stack) に行ってください。
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# QMK コンパイラ開発ガイド
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.50:docs/api_development_overview.md
|
||||||
|
git diff 0.9.50 HEAD -- docs/api_development_overview.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
このページでは、開発者に QMK コンパイラを紹介しようと思います。コードを読まなければならないような核心となる詳細に立ち入って調べることはしません。ここで得られるものは、コードを読んで理解を深めるためのフレームワークです。
|
||||||
|
|
||||||
|
# 概要
|
||||||
|
|
||||||
|
QMK Compile API は、いくつかの可動部分からできています:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
API クライアントは API サービスと排他的にやりとりをします。ここでジョブをサブミットし、状態を調べ、結果をダウンロードします。API サービスはコンパイルジョブを [Redis Queue](https://python-rq.org) に挿入し、それらのジョブの結果について RQ と S3 の両方を調べます。
|
||||||
|
|
||||||
|
ワーカーは RQ から新しいコンパイルジョブを取り出し、ソースとバイナリを S3 互換のストレージエンジンにアップロードします。
|
||||||
|
|
||||||
|
# ワーカー
|
||||||
|
|
||||||
|
QMK コンパイラワーカーは実際のビルド作業に責任を持ちます。ワーカーは RQ からジョブを取り出し、ジョブを完了するためにいくつかの事を行います:
|
||||||
|
|
||||||
|
* 新しい qmk_firmware のチェックアウトを作成する
|
||||||
|
* 指定されたレイヤーとキーボードメタデータを使って `keymap.c` をビルドする
|
||||||
|
* ファームウェアをビルドする
|
||||||
|
* ソースのコピーを zip 形式で圧縮する
|
||||||
|
* ファームウェア、ソースの zip ファイル、メタデータファイルを S3 にアップロードする
|
||||||
|
* ジョブの状態を RQ に送信する
|
||||||
|
|
||||||
|
# API サービス
|
||||||
|
|
||||||
|
API サービスは比較的単純な Flask アプリケーションです。理解しておくべきことが幾つかあります。
|
||||||
|
|
||||||
|
## @app.route('/v1/compile', methods=['POST'])
|
||||||
|
|
||||||
|
これは API の主なエントリーポイントです。クライアントとのやりとりはここから開始されます。クライアントはキーボードを表す JSON ドキュメントを POST し、API はコンパイルジョブをサブミットする前にいくらかの(とても)基本的な検証を行います。
|
||||||
|
|
||||||
|
## @app.route('/v1/compile/<string:job_id>', methods=['GET'])
|
||||||
|
|
||||||
|
これは最もよく呼ばれるエンドポイントです。ジョブの詳細が redis から利用可能であればそれを取り出し、そうでなければ S3 からキャッシュされたジョブの詳細を取り出します。
|
||||||
|
|
||||||
|
## @app.route('/v1/compile/<string:job_id>/download', methods=['GET'])
|
||||||
|
|
||||||
|
このメソッドによりユーザはコンパイルされたファームウェアファイルをダウンロードすることができます。
|
||||||
|
|
||||||
|
## @app.route('/v1/compile/<string:job_id>/source', methods=['GET'])
|
||||||
|
|
||||||
|
このメソッドによりユーザはファームウェアのソースをダウンロードすることができます。
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# QMK API
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.50:docs/api_docs.md
|
||||||
|
git diff 0.9.50 HEAD -- docs/api_docs.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
このページは QMK API の使い方を説明します。もしあなたがアプリケーション開発者であれば、全ての [QMK](https://qmk.fm) キーボードのファームウェアをコンパイルするために、この API を使うことができます。
|
||||||
|
|
||||||
|
## 概要
|
||||||
|
|
||||||
|
このサービスは、カスタムキーマップをコンパイルするための非同期 API です。API に 何らかの JSON を POST し、定期的に状態をチェックし、ファームウェアのコンパイルが完了していれば、結果のファームウェアと(もし希望すれば)そのファームウェアのソースコードをダウンロードすることができます。
|
||||||
|
|
||||||
|
#### JSON ペイロードの例:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"keyboard": "clueboard/66/rev2",
|
||||||
|
"keymap": "my_awesome_keymap",
|
||||||
|
"layout": "LAYOUT_all",
|
||||||
|
"layers": [
|
||||||
|
["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"],
|
||||||
|
["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"],
|
||||||
|
["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","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"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
ご覧のとおり、ペイロードにはファームウェアを作成および生成するために必要なキーボードの全ての側面を記述します。各レイヤーは QMK キーコードの1つのリストで、キーボードの `LAYOUT` マクロと同じ長さです。もしキーボードが複数の `LAYOUT` マクロをサポートする場合、どのマクロを使うかを指定することができます。
|
||||||
|
|
||||||
|
## コンパイルジョブのサブミット
|
||||||
|
|
||||||
|
キーマップをファームウェアにコンパイルするには、単純に JSON を `/v1/compile` エンドポイントに POST します。以下の例では、JSON ペイロードを `json_data` という名前のファイルに配置しています。
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl -H "Content-Type: application/json" -X POST -d "$(< json_data)" http://api.qmk.fm/v1/compile
|
||||||
|
{
|
||||||
|
"enqueued": true,
|
||||||
|
"job_id": "ea1514b3-bdfc-4a7b-9b5c-08752684f7f6"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 状態のチェック
|
||||||
|
|
||||||
|
キーマップをサブミットした後で、簡単な HTTP GET 呼び出しを使って状態をチェックすることができます:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ curl http://api.qmk.fm/v1/compile/ea1514b3-bdfc-4a7b-9b5c-08752684f7f6
|
||||||
|
{
|
||||||
|
"created_at": "Sat, 19 Aug 2017 21:39:12 GMT",
|
||||||
|
"enqueued_at": "Sat, 19 Aug 2017 21:39:12 GMT",
|
||||||
|
"id": "f5f9b992-73b4-479b-8236-df1deb37c163",
|
||||||
|
"status": "running",
|
||||||
|
"result": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
これは、ジョブをキューに入れることに成功し、現在実行中であることを示しています。5つの状態がありえます:
|
||||||
|
|
||||||
|
* **failed**: なんらかの理由でコンパイルサービスが失敗しました。
|
||||||
|
* **finished**: コンパイルが完了し、結果を見るには `result` をチェックする必要があります。
|
||||||
|
* **queued**: キーマップはコンパイルサーバが利用可能になるのを待っています。
|
||||||
|
* **running**: コンパイルが進行中で、まもなく完了するはずです。
|
||||||
|
* **unknown**: 深刻なエラーが発生し、[バグを報告](https://github.com/qmk/qmk_compiler/issues)する必要があります。
|
||||||
|
|
||||||
|
## 完了した結果を検証
|
||||||
|
|
||||||
|
コンパイルジョブが完了したら、`result` キーをチェックします。このキーの値は幾つかの情報を含むハッシュです:
|
||||||
|
|
||||||
|
* `firmware_binary_url`: 書き込み可能なファームウェアの URL のリスト
|
||||||
|
* `firmware_keymap_url`: `keymap.c` の URL のリスト
|
||||||
|
* `firmware_source_url`: ファームウェアの完全なソースコードの URL のリスト
|
||||||
|
* `output`: このコンパイルジョブの stdout と stderr。エラーはここで見つけることができます。
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# QMK API
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.50:docs/api_overview.md
|
||||||
|
git diff 0.9.50 HEAD -- docs/api_overview.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
QMK API は、Web と GUI ツールが [QMK](http://qmk.fm/) によってサポートされるキーボード用の任意のキーマップをコンパイルするために使うことができる、非同期 API を提供します。標準のキーマップテンプレートは、C コードのサポートを必要としない全ての QMK キーコードをサポートします。キーボードのメンテナは独自のカスタムテンプレートを提供して、より多くの機能を実現することができます。
|
||||||
|
|
||||||
|
## アプリケーション開発者
|
||||||
|
|
||||||
|
もしあなたがアプリケーションでこの API を使うことに興味があるアプリケーション開発者であれば、[API の使用](ja/api_docs.md) に行くべきです。
|
||||||
|
|
||||||
|
## キーボードのメンテナ
|
||||||
|
|
||||||
|
もし QMK Compiler API でのあなたのキーボードのサポートを強化したい場合は、[キーボードサポート](ja/reference_configurator_support.md) の節に行くべきです。
|
||||||
|
|
||||||
|
## バックエンド開発者
|
||||||
|
|
||||||
|
もし API 自体に取り組むことに興味がある場合は、[開発環境](ja/api_development_environment.md)のセットアップから始め、それから [API のハッキング](ja/api_development_overview.md) を調べるべきです。
|
||||||
@@ -145,4 +145,4 @@ ARM ベースのチップ上での EEPROM の動作によって、保存され
|
|||||||
[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) を使って eeprom のリセットを強制することができます。このイメージを書き込んだ後で、通常のファームウェアを書き込むと、キーボードが_通常_ の動作順序に復元されます。
|
[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) を使って eeprom のリセットを強制することができます。このイメージを書き込んだ後で、通常のファームウェアを書き込むと、キーボードが_通常_ の動作順序に復元されます。
|
||||||
[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
|
[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
|
||||||
|
|
||||||
いずれかの形式でブートマジックが有効になっている場合は、これも実行できるはずです (実行方法の詳細については、[ブートマジックドキュメント](feature_bootmagic.md)とキーボード情報を見てください)。
|
いずれかの形式でブートマジックが有効になっている場合は、これも実行できるはずです (実行方法の詳細については、[ブートマジックドキュメント](ja/feature_bootmagic.md)とキーボード情報を見てください)。
|
||||||
@@ -51,7 +51,7 @@ OK、問題ありません。[GitHub で issue を開く](https://github.com/qmk
|
|||||||
|
|
||||||
TMK は [Jun Wako](https://github.com/tmk) によって設計され実装されました。QMK は [Jack Humbert](https://github.com/jackhumbert) の Planck 用 TMK のフォークとして始まりました。しばらくして、Jack のフォークは TMK からかなり分岐し、2015年に Jack はフォークを QMK に名前を変えることにしました。
|
TMK は [Jun Wako](https://github.com/tmk) によって設計され実装されました。QMK は [Jack Humbert](https://github.com/jackhumbert) の Planck 用 TMK のフォークとして始まりました。しばらくして、Jack のフォークは TMK からかなり分岐し、2015年に Jack はフォークを QMK に名前を変えることにしました。
|
||||||
|
|
||||||
技術的な観点から、QMK は幾つかの新しい機能を追加した TMK に基づいています。最も注目すべきことは、QMK は利用可能なキーコードの数を増やし、`S()`、`LCTL()` および `MO()` などの高度な機能を実装するためにこれらを使っています。[キーコード](keycodes.md)でこれらのキーコードの完全なリストを見ることができます。
|
技術的な観点から、QMK は幾つかの新しい機能を追加した TMK に基づいています。最も注目すべきことは、QMK は利用可能なキーコードの数を増やし、`S()`、`LCTL()` および `MO()` などの高度な機能を実装するためにこれらを使っています。[キーコード](ja/keycodes.md)でこれらのキーコードの完全なリストを見ることができます。
|
||||||
|
|
||||||
プロジェクトとコミュニティの管理の観点から、TMK は公式にサポートされている全てのキーボードを自分で管理しており、コミュニティのサポートも少し受けています。他のキーボード用に別個のコミュニティが維持するフォークが存在するか、作成できます。デフォルトでは少数のキーマップのみが提供されるため、ユーザは一般的にお互いにキーマップを共有しません。QMK は集中管理されたリポジトリを介して、キーボードとキーマップの両方を共有することを奨励しており、品質基準に準拠する全てのプルリクエストを受け付けます。これらはほとんどコミュニティで管理されますが、必要な場合は QMK チームも支援します。
|
プロジェクトとコミュニティの管理の観点から、TMK は公式にサポートされている全てのキーボードを自分で管理しており、コミュニティのサポートも少し受けています。他のキーボード用に別個のコミュニティが維持するフォークが存在するか、作成できます。デフォルトでは少数のキーマップのみが提供されるため、ユーザは一般的にお互いにキーマップを共有しません。QMK は集中管理されたリポジトリを介して、キーボードとキーマップの両方を共有することを奨励しており、品質基準に準拠する全てのプルリクエストを受け付けます。これらはほとんどコミュニティで管理されますが、必要な場合は QMK チームも支援します。
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ https://github.com/tekezo/Karabiner/issues/403
|
|||||||
|
|
||||||
## 単一のキーでの Esc と<code>`</code>
|
## 単一のキーでの Esc と<code>`</code>
|
||||||
|
|
||||||
[Grave Escape](feature_grave_esc.md) 機能を見てください。
|
[Grave Escape](ja/feature_grave_esc.md) 機能を見てください。
|
||||||
|
|
||||||
## Mac OSX での Eject
|
## Mac OSX での Eject
|
||||||
`KC_EJCT` キーコードは OSX で動作します。https://github.com/tmk/tmk_keyboard/issues/250
|
`KC_EJCT` キーコードは OSX で動作します。https://github.com/tmk/tmk_keyboard/issues/250
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# 分割キーボード
|
# 分割キーボード
|
||||||
|
|
||||||
<!---
|
<!---
|
||||||
original document:0.9.43:docs/feature_split_keyboard.md
|
original document:0.10.8:docs/feature_split_keyboard.md
|
||||||
git diff 0.9.43 HEAD -- docs/feature_split_keyboard.md | cat
|
git diff 0.10.8 HEAD -- docs/feature_split_keyboard.md | cat
|
||||||
-->
|
-->
|
||||||
|
|
||||||
QMK ファームウェアリポジトリの多くのキーボードは、"分割"キーボードです。それらは2つのコントローラを使います — 1つは USB に接続し、もう1つは TRRS または同様のケーブルを介してシリアルまたは I<sup>2</sup>C 接続で接続します。
|
QMK ファームウェアリポジトリの多くのキーボードは、"分割"キーボードです。それらは2つのコントローラを使います — 1つは USB に接続し、もう1つは TRRS または同様のケーブルを介してシリアルまたは I<sup>2</sup>C 接続で接続します。
|
||||||
@@ -20,12 +20,12 @@ QMK ファームウェアには、任意のキーボードで使用可能な一
|
|||||||
|
|
||||||
| Transport | AVR | ARM |
|
| Transport | AVR | ARM |
|
||||||
|------------------------------|--------------------|--------------------|
|
|------------------------------|--------------------|--------------------|
|
||||||
| ['serial'](serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
|
| ['serial'](ja/serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
|
||||||
| I2C | :heavy_check_mark: | |
|
| I2C | :heavy_check_mark: | |
|
||||||
|
|
||||||
注意:
|
注意:
|
||||||
|
|
||||||
1. ハードウェアとソフトウェアの両方の制限は、[ドライバーのドキュメント](serial_driver.md)の中で説明されます。
|
1. ハードウェアとソフトウェアの両方の制限は、[ドライバーのドキュメント](ja/serial_driver.md)の中で説明されます。
|
||||||
|
|
||||||
## ハードウェア設定
|
## ハードウェア設定
|
||||||
|
|
||||||
@@ -53,11 +53,12 @@ QMK ファームウェアには、任意のキーボードで使用可能な一
|
|||||||
|
|
||||||
### シリアル配線
|
### シリアル配線
|
||||||
|
|
||||||
2つの Pro Micro 間で GND、Vcc、D0 (別名 PDO あるいは pin 3) を TRS/TRRS ケーブルの3本のワイヤで接続します。
|
2つの Pro Micro 間で GND、Vcc、D0/D1/D2/D3 (別名 PD0/PD1/PD2/PD3) を TRS/TRRS ケーブルの3本のワイヤで接続します。
|
||||||
|
|
||||||
?> ここで使われるピンは実際には以下の `SOFT_SERIAL_PIN` によって設定されることに注意してください。
|
?> ここで使われるピンは実際には以下の `SOFT_SERIAL_PIN` によって設定されることに注意してください。
|
||||||
|
|
||||||

|
<img alt="sk-pd0-connection-mono" src="https://user-images.githubusercontent.com/2170248/92296488-28e9ad80-ef70-11ea-98be-c40cb48a0319.JPG" width="48%"/>
|
||||||
|
<img alt="sk-pd2-connection-mono" src="https://user-images.githubusercontent.com/2170248/92296490-2d15cb00-ef70-11ea-801f-5ace313013e6.JPG" width="48%"/>
|
||||||
|
|
||||||
### I<sup>2</sup>C 配線
|
### I<sup>2</sup>C 配線
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ QMK ファームウェアには、任意のキーボードで使用可能な一
|
|||||||
|
|
||||||
プルアップ抵抗はキーボードの左右どちら側にも配置することができます。もし各側を単独で使いたい場合は、4つの抵抗を使い、両側にプルアップ抵抗を配置することもできます。
|
プルアップ抵抗はキーボードの左右どちら側にも配置することができます。もし各側を単独で使いたい場合は、4つの抵抗を使い、両側にプルアップ抵抗を配置することもできます。
|
||||||
|
|
||||||

|
<img alt="sk-i2c-connection-mono" src="https://user-images.githubusercontent.com/2170248/92297182-92b98580-ef77-11ea-9d7d-d6033914af43.JPG" width="50%"/>
|
||||||
|
|
||||||
## ファームウェア設定
|
## ファームウェア設定
|
||||||
|
|
||||||
|
|||||||
@@ -101,4 +101,4 @@
|
|||||||
- [Deskthority の記事](https://deskthority.net/wiki/Keyboard_matrix)
|
- [Deskthority の記事](https://deskthority.net/wiki/Keyboard_matrix)
|
||||||
- [Dave Dribin による Keyboard Matrix Help (2000)](https://www.dribin.org/dave/keyboard/one_html/)
|
- [Dave Dribin による Keyboard Matrix Help (2000)](https://www.dribin.org/dave/keyboard/one_html/)
|
||||||
- [PCBheaven による How Key Matrices Works](http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) (アニメーションの例)
|
- [PCBheaven による How Key Matrices Works](http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) (アニメーションの例)
|
||||||
- [キーボードの仕組み - QMK ドキュメント](how_keyboards_work.md)
|
- [キーボードの仕組み - QMK ドキュメント](ja/how_keyboards_work.md)
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Quantum キーコード
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.55:docs/quantum_keycodes.md
|
||||||
|
git diff 0.9.55 HEAD -- docs/quantum_keycodes.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
Quantum キーコードにより、カスタムアクションを定義することなく、基本的なものが提供するものより簡単にキーマップをカスタマイズすることができます。
|
||||||
|
|
||||||
|
quantum 内の全てのキーコードは `0x0000` と `0xFFFF` の間の数値です。`keymap.c` の中では、関数やその他の特別な場合があるように見えますが、最終的には C プリプロセッサによってそれらは単一の4バイト整数に変換されます。QMK は標準的なキーコードのために `0x0000` から `0x00FF` を予約しています。これらは、`KC_A`、`KC_1` および `KC_LCTL` のようなキーコードで、USB HID 仕様で定義された基本的なキーです。
|
||||||
|
|
||||||
|
このページでは、高度な quantum 機能を実装するために使われる `0x00FF` と `0xFFFF` の間のキーコードを説明します。独自のカスタムキーコードを定義する場合は、それらもこの範囲に配置されます。
|
||||||
|
|
||||||
|
## QMK キーコード :id=qmk-keycodes
|
||||||
|
|
||||||
|
| キー | エイリアス | 説明 |
|
||||||
|
|----------------|------------|--------------------------------------------------------|
|
||||||
|
| `RESET` | | 書き込みのために、キーボードを bootloader モードにする |
|
||||||
|
| `DEBUG` | | デバッグモードの切り替え |
|
||||||
|
| `EEPROM_RESET` | `EEP_RST` | キーボードの EEPROM (永続化メモリ) を再初期化する |
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
# キーボードをより良くするための便利なコア関数のリスト
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.47:docs/ref_functions.md
|
||||||
|
git diff 0.9.47 HEAD -- docs/ref_functions.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
QMK には、信じられないほど便利な、またはあなたが望んでいた機能を少し追加する、隠された関数がたくさんあります。特定の機能に固有の関数はそれぞれの機能のページにあるため、ここには含まれていません。
|
||||||
|
|
||||||
|
## (OLKB) トライレイヤー :id=olkb-tri-layers
|
||||||
|
|
||||||
|
目的に応じて、実際に使うことができる別個の関数があります。
|
||||||
|
|
||||||
|
### `update_tri_layer(x, y, z)`
|
||||||
|
|
||||||
|
最初は `update_tri_layer(x, y, z)` 関数です。この関数はレイヤー `x` と `y` の両方がオンになっているかどうかを調べます。両方ともオンの場合は、レイヤー `z` がオンになります。それ以外の場合、`x` と `y` の両方がオンではない(一方のみがオン、またはどちらもオンでない)場合は、レイヤー `z` をオフにします。
|
||||||
|
|
||||||
|
この関数は、この機能を持つ特定のキーを作成したいが、他のレイヤーのキーコードではそうしたくない場合に便利です。
|
||||||
|
|
||||||
|
#### 例
|
||||||
|
|
||||||
|
```c
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### `update_tri_layer_state(state, x, y, z)`
|
||||||
|
もう1つの関数は `update_tri_layer_state(state, x, y, z)` です。この関数は [`layer_state_set_*` 関数](ja/custom_quantum_functions.md#layer-change-code)から呼び出されることを意図しています。これは、キーコードを使ってレイヤーを変更するたびに、これがチェックされることを意味します。したがって、`LT(layer, kc)` を使ってレイヤーを変更すると、同じレイヤーチェックが引き起こされます。
|
||||||
|
|
||||||
|
このメソッドの注意点は、`x` および `y` レイヤーをオンにしないと、`z` レイヤーにアクセスできないことです。レイヤー `z` のみをアクティブにしようとすると、このコードが実行され、使用前にレイヤー `z` がオフになるからです。
|
||||||
|
|
||||||
|
#### 例
|
||||||
|
|
||||||
|
```c
|
||||||
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||||
|
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
あるいは、すぐに値を「返す」必要はありません。複数のトライレイヤーを追加、あるいは追加の効果を追加する場合に便利です。
|
||||||
|
|
||||||
|
```c
|
||||||
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||||
|
state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||||
|
state = update_tri_layer_state(state, _RAISE, _SYMB, _SPECIAL);
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 永続的なデフォルトレイヤーの設定
|
||||||
|
|
||||||
|
デフォルトレイヤーを設定して、キーボードを取り外しても保持されるようにしたいですか?そうであれば、これがそのための関数です。
|
||||||
|
|
||||||
|
これを使うには、`set_single_persistent_default_layer(layer)` を使います。レイヤーに名前が定義されている場合は、代わりにそれを使うことができます (_QWERTY、_DVORAK、_COLEMAK など)。
|
||||||
|
|
||||||
|
これは、デフォルトレイヤーを設定し、永続設定が更新され、もし [オーディオ](ja/feature_audio.md) がキーボードで有効でデフォルトレイヤーの音が設定されている場合は、曲を再生します。
|
||||||
|
|
||||||
|
デフォルトレイヤーの音を設定するには、以下のように `config.h` ファイルに定義する必要があります。
|
||||||
|
|
||||||
|
```c
|
||||||
|
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
|
||||||
|
SONG(COLEMAK_SOUND), \
|
||||||
|
SONG(DVORAK_SOUND) \
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
?> [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) に使用できる多くの定義済みの曲があります。
|
||||||
|
|
||||||
|
## キーボードのリセット
|
||||||
|
|
||||||
|
使用できる `RESET` quantum キーコードがあります。ただし、キーを個別に押すのではなくマクロの一部としてリセットしたい場合は、そうすることができます。
|
||||||
|
|
||||||
|
そのためには、`reset_keyboard()` を関数またはマクロに追加すると、ブートローダがリセットされます。
|
||||||
|
|
||||||
|
## EEPROM (永続ストレージ)の消去
|
||||||
|
|
||||||
|
オーディオ、RGB アンダーグロー、バックライト、キーの動作に問題がある場合は、EEPROM (永続的な設定のストレージ)をリセットすることができます。ブートマジックはこれを行う方法の1つですが、有効になっていない場合はカスタムマクロを使って行うことができます。
|
||||||
|
|
||||||
|
EEPROM を消去するには、関数またはマクロから `eeconfig_init()` を実行し、ほとんどの設定をデフォルトにリセットします。
|
||||||
|
|
||||||
|
## タップランダムキー
|
||||||
|
|
||||||
|
ランダムな文字をホストコンピュータに送信する場合は、`tap_random_base64()` 関数を使うことができます。これは[疑似乱数的に](https://en.wikipedia.org/wiki/Pseudorandom_number_generator)0から63の数字を選択し、その選択に基づいてキー押下を送信します。(0–25 は `A`–`Z`、26–51 は `a`–`z`、52–61 は `0`–`9`、62 は `+`、63 は `/`)。
|
||||||
|
|
||||||
|
?> 言うまでもないですが、これはランダムに Base64 キーあるいはパスワードを生成する暗号的に安全な方法では _ありません_。
|
||||||
|
|
||||||
|
## ソフトウェアタイマー
|
||||||
|
|
||||||
|
タイマーを開始し、時間固有のイベントの値を読み取ることができます。以下は例です:
|
||||||
|
|
||||||
|
```c
|
||||||
|
static uint16_t key_timer;
|
||||||
|
key_timer = timer_read();
|
||||||
|
|
||||||
|
if (timer_elapsed(key_timer) < 100) {
|
||||||
|
// 経過時間が 100ms 未満の場合に何かを行う
|
||||||
|
} else {
|
||||||
|
// 経過時間が 100ms 以上の場合に何かを行う
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,202 @@
|
|||||||
|
# QMK Configurator でのキーボードのサポート
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.46:docs/reference_configurator_support.md
|
||||||
|
git diff 0.9.46 HEAD -- docs/reference_configurator_support.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
このページは [QMK Configurator](https://config.qmk.fm/) でキーボードを適切にサポートする方法について説明します。
|
||||||
|
|
||||||
|
|
||||||
|
## Configurator がキーボードを理解する方法
|
||||||
|
|
||||||
|
Configurator がキーボードをどのように理解するかを理解するには、最初にレイアウトマクロを理解する必要があります。この演習では、17キーのテンキー PCB を想定します。これを `numpad` と呼びます。
|
||||||
|
|
||||||
|
```
|
||||||
|
|---------------|
|
||||||
|
|NLk| / | * | - |
|
||||||
|
|---+---+---+---|
|
||||||
|
|7 |8 |9 | + |
|
||||||
|
|---+---+---| |
|
||||||
|
|4 |5 |6 | |
|
||||||
|
|---+---+---+---|
|
||||||
|
|1 |2 |3 |Ent|
|
||||||
|
|-------+---| |
|
||||||
|
|0 | . | |
|
||||||
|
|---------------|
|
||||||
|
```
|
||||||
|
|
||||||
|
?> レイアウトマクロの詳細については、[QMK の理解: マトリックススキャン](ja/understanding_qmk.md?id=matrix-scanning) と [QMK の理解: マトリックスから物理レイアウトへのマップ](ja/understanding_qmk.md?id=matrix-to-physical-layout-map) を見てください。
|
||||||
|
|
||||||
|
Configurator の API はキーボードの `.h` ファイルを `qmk_firmware/keyboards/<keyboard>/<keyboard>.h` から読み取ります。numpad の場合、このファイルは `qmk_firmware/keyboards/numpad/numpad.h` です:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
k00, k01, k02, k03, \
|
||||||
|
k10, k11, k12, k13, \
|
||||||
|
k20, k21, k22, \
|
||||||
|
k30, k31, k32, k33, \
|
||||||
|
k40, k42 \
|
||||||
|
) { \
|
||||||
|
{ k00, k01, k02, k03 }, \
|
||||||
|
{ k10, k11, k12, k13 }, \
|
||||||
|
{ k20, k21, k22, KC_NO }, \
|
||||||
|
{ k30, k31, k32, k33 }, \
|
||||||
|
{ k40, KC_NO, k42, KC_NO } \
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
QMK は `KC_NO` を使って、スイッチマトリックス内のスイッチがない場所を指定します。デバッグが必要な場合に、このセクションを読みやすくするために、`XXX`、`___`、`____` を略記として使うこともあります。通常は `.h` ファイルの先頭近くで定義されます:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
k00, k01, k02, k03, \
|
||||||
|
k10, k11, k12, k13, \
|
||||||
|
k20, k21, k22, \
|
||||||
|
k30, k31, k32, k33, \
|
||||||
|
k40, k42 \
|
||||||
|
) { \
|
||||||
|
{ k00, k01, k02, k03 }, \
|
||||||
|
{ k10, k11, k12, k13 }, \
|
||||||
|
{ k20, k21, k22, XXX }, \
|
||||||
|
{ k30, k31, k32, k33 }, \
|
||||||
|
{ k40, XXX, k42, XXX } \
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
!> この使用方法はキーマップマクロと異なります。キーマップマクロはほとんど常に`KC_NO`については`XXXXXXX` (7つの大文字の X) を、`KC_TRNS` については `_______` (7つのアンダースコア)を使います。
|
||||||
|
|
||||||
|
!> ユーザの混乱を防ぐために、`KC_NO` を使うことをお勧めします。
|
||||||
|
|
||||||
|
レイアウトマクロは、キーボードに17個のキーがあり、4列それぞれが5行に配置されていることを Configurator に伝えます。スイッチの位置は、0から始まる `k<row><column>` という名前が付けられています。キーマップからキーコードを受け取る上部セクションと、マトリックス内の各キーの位置を指定する下部セクションとが一致する限り、名前自体は実際には問題ではありません。
|
||||||
|
|
||||||
|
物理的なキーボードに似た形でキーボードを表示するには、それぞれのキーの物理的な位置とサイズをスイッチマトリックスに結びつけることを Configurator に伝える JSON ファイルを作成する必要があります。
|
||||||
|
|
||||||
|
## JSON ファイルのビルド
|
||||||
|
|
||||||
|
JSON ファイルをビルドする最も簡単な方法は、[Keyboard Layout Editor](http://www.keyboard-layout-editor.com/) ("KLE") でレイアウトを作成することです。この Raw Data を QMK tool に入れて、Configurator が読み出して使用する JSON ファイルに変換します。KLE は numpad レイアウトをデフォルトで開くため、Getting Started の説明を削除し、残りを使います。
|
||||||
|
|
||||||
|
レイアウトが望み通りのものになったら、KLE の Raw Data タブに移動し、内容をコピーします:
|
||||||
|
|
||||||
|
```
|
||||||
|
["Num Lock","/","*","-"],
|
||||||
|
["7\nHome","8\n↑","9\nPgUp",{h:2},"+"],
|
||||||
|
["4\n←","5","6\n→"],
|
||||||
|
["1\nEnd","2\n↓","3\nPgDn",{h:2},"Enter"],
|
||||||
|
[{w:2},"0\nIns",".\nDel"]
|
||||||
|
```
|
||||||
|
|
||||||
|
このデータを JSON に変換するには、[QMK KLE-JSON Converter](https://qmk.fm/converter/) に移動し、Raw Data を Input フィールド に貼り付け、Convert ボタンをクリックします。しばらくすると、JSON データが Output フィールドに表示されます。内容を新しいテキストドキュメントにコピーし、ドキュメントに `info.json` という名前を付け、`numpad.h` を含む同じフォルダに保存します。
|
||||||
|
|
||||||
|
`keyboard_name` オブジェクトを使ってキーボードの名前を設定します。説明のために、各キーのオブジェクトを各行に配置します。これはファイルを人間が読みやすいものにするためのもので、Configurator の機能には影響しません。
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"keyboard_name": "Numpad",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"tags": {
|
||||||
|
"form_factor": "numpad"
|
||||||
|
},
|
||||||
|
"width": 4,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Num Lock", "x":0, "y":0},
|
||||||
|
{"label":"/", "x":1, "y":0},
|
||||||
|
{"label":"*", "x":2, "y":0},
|
||||||
|
{"label":"-", "x":3, "y":0},
|
||||||
|
{"label":"7", "x":0, "y":1},
|
||||||
|
{"label":"8", "x":1, "y":1},
|
||||||
|
{"label":"9", "x":2, "y":1},
|
||||||
|
{"label":"+", "x":3, "y":1, "h":2},
|
||||||
|
{"label":"4", "x":0, "y":2},
|
||||||
|
{"label":"5", "x":1, "y":2},
|
||||||
|
{"label":"6", "x":2, "y":2},
|
||||||
|
{"label":"1", "x":0, "y":3},
|
||||||
|
{"label":"2", "x":1, "y":3},
|
||||||
|
{"label":"3", "x":2, "y":3},
|
||||||
|
{"label":"Enter", "x":3, "y":3, "h":2},
|
||||||
|
{"label":"0", "x":0, "y":4, "w":2},
|
||||||
|
{"label":".", "x":2, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`layouts` オブジェクトにはキーボードの物理レイアウトを表すデータが含まれます。このオブジェクトには `LAYOUT` という名前のオブジェクトがあり、このオブジェクト名は `numpad.h` のレイアウトマクロの名前と一致する必要があります。`LAYOUT` オブジェクト自体には `layout` という名前のオブジェクトがあります。このオブジェクトにはキーボードの物理キーごとに 1つの JSON オブジェクトが以下の形式で含まれています:
|
||||||
|
|
||||||
|
```
|
||||||
|
キーの名前。Configurator では表示されません。
|
||||||
|
|
|
||||||
|
| キーボードの左端からのキー単位での
|
||||||
|
| | キーの X 軸の位置。
|
||||||
|
| |
|
||||||
|
| | キーボードの上端(奥側)からのキー単位での
|
||||||
|
| | | キーの Y 軸位置。
|
||||||
|
↓ ↓ ↓
|
||||||
|
{"label":"Num Lock", "x":0, "y":0},
|
||||||
|
```
|
||||||
|
|
||||||
|
一部のオブジェクトには、それぞれキーの幅と高さを表す `"w"` 属性キーと `"h"` 属性キーがあります。
|
||||||
|
|
||||||
|
?> `info.json` ファイルの詳細については、[`info.json` 形式](ja/reference_info_json.md) を参照してください。
|
||||||
|
|
||||||
|
|
||||||
|
## Configurator がキーをプログラムする方法
|
||||||
|
|
||||||
|
Configurator の API は、指定されたレイアウトマクロと JSON ファイルを使って、特定のキーに関連付けられた各ビジュアルオブジェクトを順番に持つキーボードのビジュアル表現を作成します:
|
||||||
|
|
||||||
|
| レイアウトマクロのキー | 使用される JSON オブジェクト |
|
||||||
|
:---: | :----
|
||||||
|
| k00 | {"label":"Num Lock", "x":0, "y":0} |
|
||||||
|
| k01 | {"label":"/", "x":1, "y":0} |
|
||||||
|
| k02 | {"label":"*", "x":2, "y":0} |
|
||||||
|
| k03 | {"label":"-", "x":3, "y":0} |
|
||||||
|
| k10 | {"label":"7", "x":0, "y":1} |
|
||||||
|
| k11 | {"label":"8", "x":1, "y":1} |
|
||||||
|
| k12 | {"label":"9", "x":2, "y":1} |
|
||||||
|
| k13 | {"label":"+", "x":3, "y":1, "h":2} |
|
||||||
|
| k20 | {"label":"4", "x":0, "y":2} |
|
||||||
|
| k21 | {"label":"5", "x":1, "y":2} |
|
||||||
|
| k22 | {"label":"6", "x":2, "y":2} |
|
||||||
|
| k30 | {"label":"1", "x":0, "y":3} |
|
||||||
|
| k31 | {"label":"2", "x":1, "y":3} |
|
||||||
|
| k32 | {"label":"3", "x":2, "y":3} |
|
||||||
|
| k33 | {"label":"Enter", "x":3, "y":3, "h":2} |
|
||||||
|
| k40 | {"label":"0", "x":0, "y":4, "w":2} |
|
||||||
|
| k42 | {"label":".", "x":2, "y":4} |
|
||||||
|
|
||||||
|
ユーザが Configurator で左上のキーを選択し、Num Lock を割り当てると、Configurator は最初のキーとして `KC_NLCK` を持つキーマップを作成し、同様にキーマップが作成されます。`label` キーは使われません; それらは `info.json` ファイルをデバッグする時に特定のキーを識別するためのユーザの参照のためだけのものです。
|
||||||
|
|
||||||
|
|
||||||
|
## 問題と危険
|
||||||
|
|
||||||
|
現在のところ、Configurator はキーの回転または ISO Enter などの長方形ではないキーをサポートしません。さらに、"行"から垂直方向にずれているキー、— 顕著な例として [TKC1800](https://github.com/qmk/qmk_firmware/tree/4ac48a61a66206beaf2fdd5f2939d8bbedd0004c/keyboards/tkc1800/) のような1800レイアウト上の矢印キー — は、 `info.json` ファイルの提供者によって調整されていない場合は、KLE-to-JSON コンバータを混乱させます。
|
||||||
|
|
||||||
|
### 回避策
|
||||||
|
|
||||||
|
#### 長方形ではないキー
|
||||||
|
|
||||||
|
ISO Enter キーについては、QMK custom は幅 1.25u、高さ 2u の長方形のキーとして表示し、右端が英数字キーブロックの右端に揃うように配置されます。
|
||||||
|
|
||||||
|

|
||||||
|
*QMK Configurator によって描画される標準 ISO レイアウトの60%キーボード。*
|
||||||
|
|
||||||
|
#### 垂直方向にずれたキー
|
||||||
|
|
||||||
|
垂直方向にずれたキーについては、ずれていないかのように KLE で配置し、変換された JSON ファイルで必要に応じて Y 値を編集します。
|
||||||
|
|
||||||
|

|
||||||
|
*矢印キーに適用される垂直方向のずれのない、Keyboard Layout Editor で描画された1800レイアウトのキーボード。*
|
||||||
|
|
||||||
|

|
||||||
|
*キーボードの JSON ファイルで矢印キーを垂直方向にずらすために必要な変更を示す、Unix の diff ファイル。*
|
||||||
@@ -0,0 +1,173 @@
|
|||||||
|
# QMK 用語集
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.46:docs/reference_glossary.md
|
||||||
|
git diff 0.9.46 HEAD -- docs/reference_glossary.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
## ARM
|
||||||
|
Atmel、Cypress、Kinetis、NXP、ST、TI など多くの企業が生産する 32 ビット MCU のライン。
|
||||||
|
|
||||||
|
## AVR
|
||||||
|
[Atmel](http://www.microchip.com/) が生産する 8 ビット MCU のライン。AVR は TMK がサポートしていた元のプラットフォームでした。
|
||||||
|
|
||||||
|
## AZERTY
|
||||||
|
標準的な Français (フランス) キーボードレイアウト。キーボードの最初の6つのキーから命名されました。
|
||||||
|
|
||||||
|
## バックライト
|
||||||
|
キーボードのライトの総称。バックライトが一般的ですが、それだけではなく、キーキャップあるいはスイッチを通して光る LED の配列。
|
||||||
|
|
||||||
|
## Bluetooth
|
||||||
|
短距離のピアツーピア無線プロトコル。キーボード用のもっとも一般的なワイヤレスプロトコル。
|
||||||
|
|
||||||
|
## ブートローダ
|
||||||
|
MCU の保護領域に書き込まれる特別なプログラムで、MCU が独自のファームウェアを通常は USB 経由でアップグレードできるようにします。
|
||||||
|
|
||||||
|
## ブートマジック
|
||||||
|
よくあるキーの交換あるいは無効化など、様々なキーボードの挙動の変更をその場で実行できる機能。
|
||||||
|
|
||||||
|
## C
|
||||||
|
システムコードに適した低レベルプログラミング言語。QMK のほとんどのコードは C で書かれています。
|
||||||
|
|
||||||
|
## Colemak
|
||||||
|
人気が出始めている代替キーボードレイアウト。
|
||||||
|
|
||||||
|
## コンパイル
|
||||||
|
人間が読めるコードを MCU が実行できるマシンコードに変換するプロセス。
|
||||||
|
|
||||||
|
## Dvorak
|
||||||
|
1930年代に Dr. August Dvorak によって開発された代替キーボードレイアウト。Dvorak Simplified Keyboard の短縮形。
|
||||||
|
|
||||||
|
## 動的マクロ
|
||||||
|
キーボードに記録されたマクロで、キーボードのプラグを抜くか、コンピュータを再起動すると失われます。
|
||||||
|
|
||||||
|
* [動的マクロドキュメント](ja/feature_dynamic_macros.md)
|
||||||
|
|
||||||
|
## Eclipse
|
||||||
|
多くの C 開発者に人気のある IDE。
|
||||||
|
|
||||||
|
* [Eclipse セットアップ手順](ja/other_eclipse.md)
|
||||||
|
|
||||||
|
## ファームウェア
|
||||||
|
MCU を制御するソフトウェア
|
||||||
|
|
||||||
|
## git
|
||||||
|
コマンドラインで使用されるバージョン管理ソフトウェア
|
||||||
|
|
||||||
|
## GitHub
|
||||||
|
QMK プロジェクトのほとんどをホストする Web サイト。git、課題管理、および QMK の実行に役立つその他の機能を統合して提供します。
|
||||||
|
|
||||||
|
## ISP
|
||||||
|
インシステムプログラミング。外部ハードウェアと JTAG ピンを使って AVR チップをプログラミングする方法。
|
||||||
|
|
||||||
|
## hid_listen
|
||||||
|
キーボードからデバッグメッセージを受信するためのインタフェース。[QMK Flasher](https://github.com/qmk/qmk_flasher) あるいは [PJRC の hid_listen](https://www.pjrc.com/teensy/hid_listen.html) を使ってこれらのメッセージを見ることができます。
|
||||||
|
|
||||||
|
## キーコード
|
||||||
|
特定のキーを表す2バイトの数値。`0x00`-`0xFF` は[基本キーコード](ja/keycodes_basic.md)に使われ、`0x100`-`0xFFFF` は [Quantum キーコード](ja/quantum_keycodes.md) に使われます。
|
||||||
|
|
||||||
|
## キーダウン
|
||||||
|
キーが押された時に発生し、キーが放される前に完了するイベント。
|
||||||
|
|
||||||
|
## キーアップ
|
||||||
|
キーが放された時に発生するイベント。
|
||||||
|
|
||||||
|
## キーマップ
|
||||||
|
物理的なキーボードレイアウトにマップされたキーコードの配列。キーの押下およびリリース時に処理されます。
|
||||||
|
|
||||||
|
## レイヤー
|
||||||
|
1つのキーが複数の目的を果たすために使われる抽象化。最上位のアクティブなレイヤーが優先されます。
|
||||||
|
|
||||||
|
## リーダーキー
|
||||||
|
リーダーキーに続けて1, 2 あるいは3つのキーをタップすることで、キーの押下あるいは他の quantum 機能をアクティブにする機能。
|
||||||
|
|
||||||
|
* [リーダーキードキュメント](ja/feature_leader_key.md)
|
||||||
|
|
||||||
|
## LED
|
||||||
|
発光ダイオード。キーボードの表示に使われる最も一般的なデバイス。
|
||||||
|
|
||||||
|
## Make
|
||||||
|
全てのソースファイルをコンパイルするために使われるソフトウェアパッケージ。キーボードファームウェアをコンパイルするために、様々なオプションを指定して `make` を実行します。
|
||||||
|
|
||||||
|
## マトリックス
|
||||||
|
MCU がより少ないピン数でキー押下を検出できるようにする列と行の配線パターン。マトリックスには多くの場合、NKRO を可能にするためのダイオードが組み込まれています。
|
||||||
|
|
||||||
|
## マクロ
|
||||||
|
単一のキーのみを押した後で、複数のキー押下イベント (HID レポート) を送信できる機能。
|
||||||
|
|
||||||
|
* [マクロドキュメント](ja/feature_macros.md)
|
||||||
|
|
||||||
|
## MCU
|
||||||
|
マイクロコントロールユニット。キーボードを動かすプロセッサ。
|
||||||
|
|
||||||
|
## モディファイア
|
||||||
|
別のキーを入力する間押したままにして、そのキーのアクションを変更するキー。例として、Ctrl、Alt および Shift があります。
|
||||||
|
(訳注:モディファイヤ、モディファイヤキー、修飾キーなど、訳語が統一されていませんが同じものです)
|
||||||
|
|
||||||
|
## マウスキー
|
||||||
|
キーボードからマウスカーソルを制御し、クリックできる機能。
|
||||||
|
|
||||||
|
* [マウスキードキュメント](ja/feature_mouse_keys.md)
|
||||||
|
|
||||||
|
## N キーロールオーバー (NKRO)
|
||||||
|
一度に任意の数のキーの押下を送信できるキーボードに当てはまる用語。
|
||||||
|
|
||||||
|
## ワンショットモディファイア
|
||||||
|
別のキーが放されるまで押されているかのように機能するモディファイア。キーを押している間に mod を押し続けるのではなく、mod を押してからキーを押すことができます。スティッキーキーまたはデッドキーとも呼びます。
|
||||||
|
|
||||||
|
## ProMicro
|
||||||
|
低コストの AVR 開発ボード。このデバイスのクローンは ebay で非常に安価(5ドル未満)に見つかることがありますが、多くの場合 pro micro の書き込みに苦労します。
|
||||||
|
|
||||||
|
## プルリクエスト
|
||||||
|
QMK にコードを送信するリクエスト。全てのユーザが個人のキーマップのプルリクエストを送信することを推奨します。
|
||||||
|
|
||||||
|
## QWERTY
|
||||||
|
標準の英語キーボードレイアウト。多くの場合、他の言語の標準レイアウトへのショートカット。キーボードの最初の6文字から命名されました。
|
||||||
|
|
||||||
|
## QWERTZ
|
||||||
|
標準的な Deutsche (ドイツ語) キーボードレイアウト。キーボードの最初の6文字から命名されました。
|
||||||
|
|
||||||
|
## ロールオーバー
|
||||||
|
キーが既に押されている間にキーを押すことを指す用語。似たものに 2KRO、6KRO、NKRO が含まれます。
|
||||||
|
|
||||||
|
## スキャンコード
|
||||||
|
単一のキーを表す USB 経由の HID レポートの一部として送信される1バイトの数値。これらの値は、[USB-IF](http://www.usb.org/) が発行する [HID Usage Tables](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf) に記載されています。
|
||||||
|
|
||||||
|
## スペースカデットシフト
|
||||||
|
左または右 shift を1回以上タップすることで、様々なタイプの括弧を入力できる特別な shift キーのセット。
|
||||||
|
|
||||||
|
* [スペースカデットシフトドキュメント](ja/feature_space_cadet_shift.md)
|
||||||
|
|
||||||
|
## タップ
|
||||||
|
キーを押して放す。状況によってはキーダウンイベントとキーアップイベントを区別する必要がありますが、タップは常に両方を一度に指します。
|
||||||
|
|
||||||
|
## タップダンス
|
||||||
|
押す回数に基づいて、同じキーに複数のキーコードを割り当てることができる機能。
|
||||||
|
|
||||||
|
* [タップダンスドキュメント](ja/feature_tap_dance.md)
|
||||||
|
|
||||||
|
## Teensy
|
||||||
|
手配線での組み立てによく用いられる低コストの AVR 開発ボード。halfkay ブートローダによって書き込みが非常に簡単になるために、数ドル高いにもかかわらず teensy がしばしば選択されます。
|
||||||
|
|
||||||
|
## アンダーライト
|
||||||
|
キーボードの下側を照らす LED の総称。これらの LED は通常 PCB の底面からキーボードが置かれている表面に向けて照らします。
|
||||||
|
|
||||||
|
## ユニコード
|
||||||
|
大規模なコンピュータの世界では、ユニコードは任意の言語で文字を表現するためのエンコード方式のセットです。QMK に関しては、様々な OS スキームを使ってスキャンコードの代わりにユニコードコードポイントを送信することを意味します。
|
||||||
|
|
||||||
|
* [ユニコードドキュメント](ja/feature_unicode.md)
|
||||||
|
|
||||||
|
## 単体テスト
|
||||||
|
QMK に対して自動テストを実行するためのフレームワーク。単体テストは、変更が何も壊さないことを確信するのに役立ちます。
|
||||||
|
|
||||||
|
* [単体テストドキュメント](ja/unit_testing.md)
|
||||||
|
|
||||||
|
## USB
|
||||||
|
ユニバーサルシリアルバス。キーボード用の最も一般的な有線インタフェース。
|
||||||
|
|
||||||
|
## USB ホスト (あるいは単にホスト)
|
||||||
|
USB ホストは、あなたのコンピュータ、またはキーボードが差し込まれているデバイスのことです。
|
||||||
|
|
||||||
|
# 探している用語が見つかりませんでしたか?
|
||||||
|
|
||||||
|
質問についての [issue を開いて](https://github.com/qmk/qmk_firmware/issues) 、質問した用語についてここに追加することができます。さらに良いのは、定義についてのプルリクエストを開くことです。:)
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# `info.json`
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.46:docs/reference_info_json.md
|
||||||
|
git diff 0.9.46 HEAD -- docs/reference_info_json.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
このファイルは [QMK API](https://github.com/qmk/qmk_api) によって使われます。このファイルは [QMK Configurator](https://config.qmk.fm/) がキーボードの画像を表示するために必要な情報を含んでいます。ここにメタデータを設定することもできます。
|
||||||
|
|
||||||
|
このメタデータを指定するために、`qmk_firmware/keyboards/<name>` の下の全てのレベルで `info.json` を作成することができます。これらのファイルは結合され、より具体的なファイルがそうではないファイルのキーを上書きします。つまり、メタデータ情報を複製する必要はありません。例えば、`qmk_firmware/keyboards/clueboard/info.json` は `manufacturer` および `maintainer` を指定し、`qmk_firmware/keyboards/clueboard/66/info.json` は Clueboard 66% についてのより具体的な情報を指定します。
|
||||||
|
|
||||||
|
## `info.json` の形式
|
||||||
|
|
||||||
|
`info.json` ファイルは設定可能な以下のキーを持つ JSON 形式の辞書です。全てを設定する必要はなく、キーボードに適用するキーだけを設定します。
|
||||||
|
|
||||||
|
* `keyboard_name`
|
||||||
|
* キーボードを説明する自由形式のテキスト文字列。
|
||||||
|
* 例: `Clueboard 66%`
|
||||||
|
* `url`
|
||||||
|
* キーボードの製品ページ、[QMK.fm/keyboards](https://qmk.fm/keyboards) のページ、あるいはキーボードに関する情報を説明する他のページの URL。
|
||||||
|
* `maintainer`
|
||||||
|
* メンテナの GitHub のユーザ名、あるいはコミュニティが管理するキーボードの場合は `qmk`
|
||||||
|
* `width`
|
||||||
|
* キー単位でのキーボードの幅
|
||||||
|
* `height`
|
||||||
|
* キー単位でのキーボードの高さ
|
||||||
|
* `layouts`
|
||||||
|
* 物理的なレイアウト表現。詳細は以下のセクションを見てください。
|
||||||
|
|
||||||
|
### レイアウトの形式
|
||||||
|
|
||||||
|
`info.json` ファイル内の辞書の `layouts` 部分は、幾つかの入れ子になった辞書を含みます。外側のレイヤーは QMK レイアウトマクロで構成されます。例えば、`LAYOUT_ansi` あるいは `LAYOUT_iso`。各レイアウトマクロ内には、`width`、 `height`、`key_count` のキーがあります。これらは自明でなければなりません。
|
||||||
|
|
||||||
|
* `width`
|
||||||
|
* オプション: キー単位でのレイアウトの幅
|
||||||
|
* `height`
|
||||||
|
* オプション: キー単位でのレイアウトの高さ
|
||||||
|
* `key_count`
|
||||||
|
* **必須**: このレイアウトのキーの数
|
||||||
|
* `layout`
|
||||||
|
* 物理レイアウトを説明するキー辞書のリスト。詳細は次のセクションを見てください。
|
||||||
|
|
||||||
|
### キー辞書形式
|
||||||
|
|
||||||
|
レイアウトの各キー辞書は、キーの物理プロパティを記述します。<http://keyboard-layout-editor.com> の Raw Code に精通している場合、多くの概念が同じであることが分かります。可能な限り同じキー名とレイアウトの選択を再利用しますが、keyboard-layout-editor とは異なって各キーはステートレスで、前のキーからプロパティを継承しません。
|
||||||
|
|
||||||
|
全てのキーの位置と回転は、キーボードの左上と、各キーの左上を基準にして指定されます。
|
||||||
|
|
||||||
|
* `x`
|
||||||
|
* **必須**: 水平軸でのキーの絶対位置(キー単位)。
|
||||||
|
* `y`
|
||||||
|
* **必須**: 垂直軸でのキーの絶対位置(キー単位)。
|
||||||
|
* `w`
|
||||||
|
* キー単位でのキーの幅。`ks` が指定された場合は無視されます。デフォルト: `1`
|
||||||
|
* `h`
|
||||||
|
* キー単位でのキーの高さ。`ks` が指定された場合は無視されます。デフォルト: `1`
|
||||||
|
* `r`
|
||||||
|
* キーを回転させる時計回りの角度。
|
||||||
|
* `rx`
|
||||||
|
* キーを回転させる点の水平軸における絶対位置。デフォルト: `x`
|
||||||
|
* `ry`
|
||||||
|
* キーを回転させる点の垂直軸における絶対位置。デフォルト: `y`
|
||||||
|
* `ks`
|
||||||
|
* キー形状: キー単位で頂点を列挙することでポリゴンを定義します。
|
||||||
|
* **重要**: これらはキーの左上からの相対位置で、絶対位置ではありません。
|
||||||
|
* ISO Enter の例: `[ [0,0], [1.5,0], [1.5,2], [0.25,2], [0.25,1], [0,1], [0,0] ]`
|
||||||
|
* `label`
|
||||||
|
* マトリックス内のこの位置につける名前。
|
||||||
|
* これは通常 PCB 上でこの位置にシルクスクリーン印刷されるものと同じ名前でなければなりません。
|
||||||
|
|
||||||
|
## メタデータはどのように公開されますか?
|
||||||
|
|
||||||
|
このメタデータは主に2つの方法で使われます:
|
||||||
|
|
||||||
|
* Web ベースの configurator が動的に UI を生成できるようにする。
|
||||||
|
* 新しい `make keyboard:keymap:qmk` ターゲットをサポートする。これは、このメタデータをファームウェアにバンドルして QMK Toolbox をよりスマートにします。
|
||||||
|
|
||||||
|
Configurator の作成者は、JSON API の使用に関する詳細について、[QMK Compiler](https://docs.api.qmk.fm/using-the-api) ドキュメントを参照することができます。
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
# 言語固有のキーコード
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.55:docs/reference_keymap_extras.md
|
||||||
|
git diff 0.9.55 HEAD -- docs/reference_keymap_extras.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
キーボードは多くの言語をサポートすることができます。ただし、それらはキーを押したことで生成される実際の文字を送信しません - 代わりに数字のコードを送信します。USB HID の仕様ではそれらは "usages" と呼ばれますが、キーボードの文脈では「スキャンコード」あるいは「キーコード」と呼ばれることが多いです。
|
||||||
|
HID Keyboard/Keypad usage ページでは 256 未満の usage が定義されており、それらの一部は現在のオペレーティングシステムでは機能しません。では、この言語のサポートはどのようにして実現されるのでしょうか?
|
||||||
|
|
||||||
|
簡単に言うと、オペレーティングシステムはユーザが設定したキーボードレイアウトに基づいて受け取った usage を適切な文字にマップします。例えば、スウェーデン人がキーボードの `å` という文字が刻印されたキーを押すと、キーボードは *実際には* `[` のキーコードを送信します。
|
||||||
|
|
||||||
|
明らかにこれは混乱する可能性があるため、QMK は多くのキーボードレイアウトのために言語固有のキーコードのエイリアスを提供します。これらはそれだけでは何もしません - さらに OS の設定で対応するキーボードレイアウトを設定する必要があります。それらをキーマップのキーキャップラベルと考えてください。
|
||||||
|
|
||||||
|
これらを使うには、`keymap.c` で対応する [ヘッダファイル](https://github.com/qmk/qmk_firmware/tree/master/quantum/keymap_extras) を `#include` し、それらで定義されているキーコードを `KC_` プリフィクスの代わりに追加します:
|
||||||
|
|
||||||
|
| レイアウト | ヘッダファイル |
|
||||||
|
|-----------------------------|----------------------------------|
|
||||||
|
| Canadian Multilingual (CSA) | `keymap_canadian_multilingual.h` |
|
||||||
|
| Croatian | `keymap_croatian.h` |
|
||||||
|
| Czech | `keymap_czech.h` |
|
||||||
|
| Danish | `keymap_danish.h` |
|
||||||
|
| Dutch (Belgium) | `keymap_belgian.h` |
|
||||||
|
| English (Ireland) | `keymap_irish.h` |
|
||||||
|
| English (UK) | `keymap_uk.h` |
|
||||||
|
| English (US International) | `keymap_us_international.h` |
|
||||||
|
| Estonian | `keymap_estonian.h` |
|
||||||
|
| Finnish | `keymap_finnish.h` |
|
||||||
|
| French | `keymap_french.h` |
|
||||||
|
| French (AFNOR) | `keymap_french_afnor.h` |
|
||||||
|
| French (BÉPO) | `keymap_bepo.h` |
|
||||||
|
| French (Belgium) | `keymap_belgian.h` |
|
||||||
|
| French (Switzerland) | `keymap_fr_ch.h` |
|
||||||
|
| French (macOS, ISO) | `keymap_french_osx.h` |
|
||||||
|
| German | `keymap_german.h` |
|
||||||
|
| German (Switzerland) | `keymap_german_ch.h` |
|
||||||
|
| German (macOS) | `keymap_german_osx.h` |
|
||||||
|
| German (Neo2)* | `keymap_neo2.h` |
|
||||||
|
| Greek* | `keymap_greek.h` |
|
||||||
|
| Hebrew* | `keymap_hebrew.h` |
|
||||||
|
| Hungarian | `keymap_hungarian.h` |
|
||||||
|
| Icelandic | `keymap_icelandic.h` |
|
||||||
|
| Italian | `keymap_italian.h` |
|
||||||
|
| Italian (macOS, ANSI) | `keymap_italian_osx_ansi.h` |
|
||||||
|
| Italian (macOS, ISO) | `keymap_italian_osx_iso.h` |
|
||||||
|
| Japanese | `keymap_jp.h` |
|
||||||
|
| Korean | `keymap_korean.h` |
|
||||||
|
| Latvian | `keymap_latvian.h` |
|
||||||
|
| Lithuanian (ĄŽERTY) | `keymap_lithuanian_azerty.h` |
|
||||||
|
| Lithuanian (QWERTY) | `keymap_lithuanian_qwerty.h` |
|
||||||
|
| Norwegian | `keymap_norwegian.h` |
|
||||||
|
| Polish | `keymap_polish.h` |
|
||||||
|
| Portuguese | `keymap_portuguese.h` |
|
||||||
|
| Portuguese (Brazil) | `keymap_br_abnt2.h` |
|
||||||
|
| Romanian | `keymap_romanian.h` |
|
||||||
|
| Russian* | `keymap_russian.h` |
|
||||||
|
| Serbian* | `keymap_serbian.h` |
|
||||||
|
| Serbian (Latin) | `keymap_serbian_latin.h` |
|
||||||
|
| Slovak | `keymap_slovak.h` |
|
||||||
|
| Slovenian | `keymap_slovenian.h` |
|
||||||
|
| Spanish | `keymap_spanish.h` |
|
||||||
|
| Spanish (Dvorak) | `keymap_spanish_dvorak.h` |
|
||||||
|
| Swedish | `keymap_swedish.h` |
|
||||||
|
| Turkish (F) | `keymap_turkish_f.h` |
|
||||||
|
| Turkish (Q) | `keymap_turkish_q.h` |
|
||||||
|
|
||||||
|
言語固有でないものもありますが、QWERTY レイアウトを使っていない場合に役立ちます:
|
||||||
|
|
||||||
|
| レイアウト | ヘッダファイル |
|
||||||
|
|---------------------|--------------------------|
|
||||||
|
| Colemak | `keymap_colemak.h` |
|
||||||
|
| Dvorak | `keymap_dvorak.h` |
|
||||||
|
| Dvorak (French) | `keymap_dvorak_fr.h` |
|
||||||
|
| Dvorak (Programmer) | `keymap_dvp.h` |
|
||||||
|
| Norman | `keymap_norman.h` |
|
||||||
|
| Plover* | `keymap_plover.h` |
|
||||||
|
| Plover (Dvorak)* | `keymap_plover_dvorak.h` |
|
||||||
|
| Steno* | `keymap_steno.h` |
|
||||||
|
| Workman | `keymap_workman.h` |
|
||||||
|
| Workman (ZXCVM) | `keymap_workman_zxcvm.h` |
|
||||||
|
|
||||||
|
## Sendstring サポート
|
||||||
|
|
||||||
|
デフォルトでは、`SEND_STRING()` は US ANSI キーボードレイアウトが設定されたと見なします。別のレイアウトを使っている場合は、キーマップで(上記のように)`#include "sendstring_*.h"` して、ASCII 文字をキーコードにマッピングするために使われるルックアップテーブルを上書きすることができます。
|
||||||
|
|
||||||
|
ここで注意すべき重要な点は、`SEND_STRING()` は [ASCII 文字](https://en.wikipedia.org/wiki/ASCII#Character_set) でのみ機能するということです。これは、ユニコード文字を含む文字列を渡すことができないことを意味します - 残念ながら、これには希望のレイアウトに存在する可能性のあるアクセント付き文字が含まれています。
|
||||||
|
多くのレイアウトでは、Grave または Tilde などの特定の文字を[デッドキー](https://en.wikipedia.org/wiki/Dead_key)としてのみ使えるようにしています。そのため、デッドキーが次の文字と潜在的に結合されることを防ぐためには、送信したい文字列の中のデッドキーのすぐ後にスペースを追加する必要があります。
|
||||||
|
ラテン語由来のアルファベットを使わない(例えば、ギリシャ語やロシア語のような)他のレイアウトには、Sendstring ヘッダーがありません。従って ASCII 文字セットのほとんどを入力する方法がありません。これらは上記で `*` でマークされています。
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
# 'シリアル' ドライバ
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.51:docs/serial_drive.md
|
||||||
|
git diff 0.9.51 HEAD -- docs/serial_drive.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
このドライバは[分割キーボード](ja/feature_split_keyboard.md) 機能に使います。
|
||||||
|
|
||||||
|
?> この文章でのシリアルは、UART/USART/RS485/RS232 規格の実装ではなく、**一度に1ビットの情報を送信するもの**として読まれるべきです。
|
||||||
|
|
||||||
|
このカテゴリの全てのドライバには以下の特徴があります:
|
||||||
|
* 1本の線上でデータと信号を提供
|
||||||
|
* シングルマスタ、シングルスレーブに限定
|
||||||
|
|
||||||
|
## サポートされるドライバの種類
|
||||||
|
|
||||||
|
| | AVR | ARM |
|
||||||
|
|-------------------|--------------------|--------------------|
|
||||||
|
| bit bang | :heavy_check_mark: | :heavy_check_mark: |
|
||||||
|
| USART Half-duplex | | :heavy_check_mark: |
|
||||||
|
|
||||||
|
## ドライバ設定
|
||||||
|
|
||||||
|
### Bitbang
|
||||||
|
デフォルトのドライバ。設定がない場合はこのドライバが想定されます。設定するには、以下を rules.mk に追加します:
|
||||||
|
|
||||||
|
```make
|
||||||
|
SERIAL_DRIVER = bitbang
|
||||||
|
```
|
||||||
|
|
||||||
|
config.h を介してドライバを設定します:
|
||||||
|
```c
|
||||||
|
#define SOFT_SERIAL_PIN D0 // または D1, D2, D3, E6
|
||||||
|
#define SELECT_SOFT_SERIAL_SPEED 1 // または 0, 2, 3, 4, 5
|
||||||
|
// 0: 約 189kbps (実験目的のみ)
|
||||||
|
// 1: 約 137kbps (デフォルト)
|
||||||
|
// 2: 約 75kbps
|
||||||
|
// 3: 約 39kbps
|
||||||
|
// 4: 約 26kbps
|
||||||
|
// 5: 約 20kbps
|
||||||
|
```
|
||||||
|
|
||||||
|
#### ARM
|
||||||
|
|
||||||
|
!> bitbang ドライバは bitbang WS2812 ドライバと接続の問題があります
|
||||||
|
|
||||||
|
上記の一般的なオプションに加えて、halconf.h で `PAL_USE_CALLBACKS` 機能もオンにする必要があります。
|
||||||
|
|
||||||
|
### USART Half-duplex
|
||||||
|
通信が USART ハードウェアデバイスに送信される STM32 ボードが対象です。これにより高速で正確なタイミングを提供できることが利点です。このドライバの `SOFT_SERIAL_PIN` は、設定された USART TX ピンです。**TX ピンに適切なプルアップ抵抗が必要です**。設定するには、以下を rules.mk に追加します:
|
||||||
|
|
||||||
|
```make
|
||||||
|
SERIAL_DRIVER = usart
|
||||||
|
```
|
||||||
|
|
||||||
|
config.h を介してハードウェアを設定します:
|
||||||
|
```c
|
||||||
|
#define SOFT_SERIAL_PIN B6 // USART TX ピン
|
||||||
|
#define SELECT_SOFT_SERIAL_SPEED 1 // または 0, 2, 3, 4, 5
|
||||||
|
// 0: 約 460800 ボー
|
||||||
|
// 1: 約 230400 ボー (デフォルト)
|
||||||
|
// 2: 約 115200 ボー
|
||||||
|
// 3: 約 57600 ボー
|
||||||
|
// 4: 約 38400 ボー
|
||||||
|
// 5: 約 19200 ボー
|
||||||
|
#define SERIAL_USART_DRIVER SD1 // TX ピンの USART ドライバ。デフォルトは SD1
|
||||||
|
#define SERIAL_USART_TX_PAL_MODE 7 // 「代替機能」 ピン。MCU の適切な値については、それぞれのデータシートを見てください。デフォルトは 7
|
||||||
|
```
|
||||||
|
|
||||||
|
また、ChibiOS `SERIAL` 機能を有効にする必要があります:
|
||||||
|
* キーボードの halconf.h: `#define HAL_USE_SERIAL TRUE`
|
||||||
|
* キーボードの mcuconf.h: `#define STM32_SERIAL_USE_USARTn TRUE` (ここで、'n' は MCU で選択した USART のペリフェラル番号と一致)
|
||||||
|
|
||||||
|
必要な構成は、`UART` 周辺機器ではなく、`SERIAL` 周辺機器であることに注意してください。
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# 助けを得る
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.51:docs/support.md
|
||||||
|
git diff 0.9.51 HEAD -- docs/support.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
QMK に関して助けを得るための多くのリソースがあります。
|
||||||
|
|
||||||
|
コミュニティスペースに参加する前に[行動規範](https://qmk.fm/coc/)を読んでください。
|
||||||
|
|
||||||
|
## リアルタイムチャット
|
||||||
|
|
||||||
|
何かについて助けが必要な場合は、迅速なサポートを受けるための最良の場所は、[Discord Server](https://discord.gg/Uq7gcHh) です。通常は誰かがオンラインで、非常に助けになる多くの人がいます。
|
||||||
|
|
||||||
|
## OLKB Subreddit
|
||||||
|
|
||||||
|
公式の QMK フォーラムは [reddit.com](https://reddit.com) の [/r/olkb](https://reddit.com/r/olkb) です。
|
||||||
|
|
||||||
|
## GitHub Issues
|
||||||
|
|
||||||
|
[GitHub で issue](https://github.com/qmk/qmk_firmware/issues) を開くことができます。issue は長期的な議論あるいはデバッグを必要とする場合は、特に便利です。
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
# QMK シラバス
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.51:docs/syllabus.md
|
||||||
|
git diff 0.9.51 HEAD -- docs/syllabus.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
このページは最初に基本を紹介し、そして、QMK に習熟するために必要な全ての概念を理解するように導くことで、QMK の知識を構築するのに役立ちます。
|
||||||
|
|
||||||
|
# 初級トピック
|
||||||
|
|
||||||
|
他に何も読んでいない場合は、このセクションのドキュメントを読んでください。[QMK 初心者ガイド](ja/newbs.md)を読み終わると、基本的なキーマップを作成し、それをコンパイルし、キーボードに書き込みできるようになっているはずです。残りのドキュメントはこれらの基本的な知識を具体的に肉付けします。
|
||||||
|
|
||||||
|
* **QMK Tools の使い方を学ぶ**
|
||||||
|
* [QMK 初心者ガイド](ja/newbs.md)
|
||||||
|
* [CLI](ja/cli.md)
|
||||||
|
* [Git](ja/newbs_git_best_practices.md)
|
||||||
|
* **キーマップについて学ぶ**
|
||||||
|
* [レイヤー](ja/feature_layers.md)
|
||||||
|
* [キーコード](ja/keycodes.md)
|
||||||
|
* 使用できるキーコードの完全なリスト。中級または上級トピックにある知識が必要な場合もあることに注意してください。
|
||||||
|
* **IDE の設定** - オプション
|
||||||
|
* [Eclipse](ja/other_eclipse.md)
|
||||||
|
* [VS Code](ja/other_vscode.md)
|
||||||
|
|
||||||
|
# 中級トピック
|
||||||
|
|
||||||
|
これらのトピックでは、QMK がサポートする幾つかの機能について掘り下げます。これらのドキュメントを全て読む必要はありませんが、これらの一部をスキップすると、上級トピックのセクションの一部のドキュメントが意味をなさなくなるかもしれません。
|
||||||
|
|
||||||
|
* **機能の設定方法を学ぶ**
|
||||||
|
<!-- * Configuration Overview FIXME(skullydazed/anyone): write this document -->
|
||||||
|
* [オーディオ](ja/feature_audio.md)
|
||||||
|
* 電飾
|
||||||
|
* [バックライト](ja/feature_backlight.md)
|
||||||
|
* [LED マトリックス](ja/feature_led_matrix.md)
|
||||||
|
* [RGB ライト](ja/feature_rgblight.md)
|
||||||
|
* [RGB マトリックス](ja/feature_rgb_matrix.md)
|
||||||
|
* [タップホールド設定](ja/tap_hold.md)
|
||||||
|
* **キーマップについてさらに学ぶ**
|
||||||
|
* [キーマップ](ja/keymap.md)
|
||||||
|
* [カスタム関数とキーコード](ja/custom_quantum_functions.md)
|
||||||
|
* マクロ
|
||||||
|
* [動的マクロ](ja/feature_dynamic_macros.md)
|
||||||
|
* [コンパイル済みのマクロ](ja/feature_macros.md)
|
||||||
|
* [タップダンス](ja/feature_tap_dance.md)
|
||||||
|
* [コンボ](ja/feature_combo.md)
|
||||||
|
* [ユーザスペース](ja/feature_userspace.md)
|
||||||
|
|
||||||
|
# 上級トピック
|
||||||
|
|
||||||
|
以下の全ては多くの基礎知識を必要とします。高度な機能を使ってキーマップを作成できることに加えて、`config.h` と `rules.mk` の両方を使ってキーボードのオプションを設定することに慣れている必要があります。
|
||||||
|
|
||||||
|
* **QMK 内のキーボードの保守**
|
||||||
|
* [キーボードの手配線](ja/hand_wire.md)
|
||||||
|
* [キーボードガイドライン](ja/hardware_keyboard_guidelines.md)
|
||||||
|
* [info.json リファレンス](ja/reference_info_json.md)
|
||||||
|
* [デバウンス API](ja/feature_debounce_type.md)
|
||||||
|
* **高度な機能**
|
||||||
|
* [ユニコード](ja/feature_unicode.md)
|
||||||
|
* [API](ja/api_overview.md)
|
||||||
|
* [ブートマジック](ja/feature_bootmagic.md)
|
||||||
|
* **ハードウェア**
|
||||||
|
* [キーボードがどのように動作するか](ja/how_keyboards_work.md)
|
||||||
|
* [キーボードマトリックスの仕組み](ja/how_a_matrix_works.md)
|
||||||
|
* [分割キーボード](ja/feature_split_keyboard.md)
|
||||||
|
* [速記](ja/feature_stenography.md)
|
||||||
|
* [ポインティングデバイス](ja/feature_pointing_device.md)
|
||||||
|
* **コア開発**
|
||||||
|
* [コーディング規約](ja/coding_conventions_c.md)
|
||||||
|
* [互換性のあるマイクロコントローラ](ja/compatible_microcontrollers.md)
|
||||||
|
* [カスタムマトリックス](ja/custom_matrix.md)
|
||||||
|
* [QMK を理解する](ja/understanding_qmk.md)
|
||||||
|
* **CLI 開発**
|
||||||
|
* [コーディング規約](ja/coding_conventions_python.md)
|
||||||
|
* [CLI 開発の概要](ja/cli_development.md)
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
# QMK ドキュメントを翻訳する
|
||||||
|
|
||||||
|
<!---
|
||||||
|
original document: 0.9.51:docs/translating.md
|
||||||
|
git diff 0.9.51 HEAD -- docs/translating.md | cat
|
||||||
|
-->
|
||||||
|
|
||||||
|
ルートフォルダ (`docs/`) にある全てのファイルは英語でなければなりません - 他の全ての言語は、ISO 639-1 言語コードと、それに続く`-`と関連する国コードのサブフォルダにある必要があります。[一般的なもののリストはここで見つかります](https://www.andiamo.co.uk/resources/iso-language-codes/)。このフォルダが存在しない場合、作成することができます。翻訳された各ファイルは英語バージョンと同じ名前でなければなりません。そうすることで、正常にフォールバックできます。
|
||||||
|
|
||||||
|
`_summary.md` ファイルはこのフォルダの中に存在し、各ファイルへのリンクのリスト、翻訳された名前、言語フォルダに続くリンクが含まれている必要があります。
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
* [QMK简介](zh-cn/getting_started_introduction.md)
|
||||||
|
```
|
||||||
|
|
||||||
|
他の docs ページへの全てのリンクにも、言語のフォルダが前に付いている必要があります。もしリンクがページの特定の部分(例えば、特定の見出し)への場合、以下のように見出しに英語の ID を使う必要があります:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
[建立你的环境](zh-cn/newbs-getting-started.md#set-up-your-environment)
|
||||||
|
|
||||||
|
## 建立你的环境 :id=set-up-your-environment
|
||||||
|
```
|
||||||
|
|
||||||
|
新しい言語の翻訳が完了したら、以下のファイルも修正する必要があります:
|
||||||
|
|
||||||
|
* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
|
||||||
|
各行は、[GitHub emoji shortcode](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md#country-flag) の形式で国フラグと、それに続く言語で表される名前を含む必要があります。
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
- [:cn: 中文](/zh-cn/)
|
||||||
|
```
|
||||||
|
|
||||||
|
* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
|
||||||
|
`placeholder` と `noData` の両方のオブジェクトは、文字列で言語フォルダの辞書エントリが必要です:
|
||||||
|
|
||||||
|
```js
|
||||||
|
'/zh-cn/': '没有结果!',
|
||||||
|
```
|
||||||
|
|
||||||
|
サイドバーの「QMK ファームウェア」の見出しリンクを設定するために、`nameLink` オブジェクトも以下のように追加される必要があります:
|
||||||
|
|
||||||
|
```js
|
||||||
|
'/zh-cn/': '/#/zh-cn/',
|
||||||
|
```
|
||||||
|
|
||||||
|
また、`fallbackLanguages` リストに言語フォルダを追加して、404 ではなく英語に適切にフォールバックするようにしてください:
|
||||||
|
|
||||||
|
```js
|
||||||
|
fallbackLanguages: [
|
||||||
|
// ...
|
||||||
|
'zh-cn',
|
||||||
|
// ...
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
## 翻訳のプレビュー
|
||||||
|
|
||||||
|
ドキュメントのローカルインスタンスをセットアップする方法については、[ドキュメントのプレビュー](ja/contributing.md#previewing-the-documentation)を見てください - 右上の "Translations" メニューから新しい言語を選択することができるはずです。
|
||||||
|
|
||||||
|
作業に満足したら、遠慮なくプルリクエストを開いてください!
|
||||||
+36
-33
@@ -1,39 +1,42 @@
|
|||||||
# PR checklists
|
# PR checklists
|
||||||
|
|
||||||
This is a non-exhaustive checklist of what the QMK collaborators will be checking when reviewing submitted PRs.
|
This is a non-exhaustive checklist of what the QMK Collaborators will be checking when reviewing submitted PRs.
|
||||||
|
|
||||||
If 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.
|
If 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).
|
||||||
|
|
||||||
## General PRs
|
## General PRs
|
||||||
|
|
||||||
- PR should be submitted using a non-`master` branch on the source repository
|
- PR should be submitted using a non-`master` branch on the source repository
|
||||||
- This does not mean you target a different branch for your PR, rather that you're not working out of your own master branch
|
- this does not mean you target a different branch for your PR, rather that you're not working out of your own master branch
|
||||||
- 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)
|
- 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)
|
||||||
- Newly-added directories and filenames must be lowercase
|
- newly-added directories and filenames must be lowercase
|
||||||
- This rule may be relaxed if upstream sources originally had uppercase characters (e.g. ChibiOS, or imported files from other repositories etc.)
|
- this rule may be relaxed if upstream sources originally had uppercase characters (e.g. ChibiOS, or imported files from other repositories etc.)
|
||||||
- If there is enough justification (i.e. consistency with existing core files etc.) this can be relaxed
|
- if there is enough justification (i.e. consistency with existing core files etc.) this can be relaxed
|
||||||
- a board designer naming their keyboard with uppercase letters is not enough justification
|
- a board designer naming their keyboard with uppercase letters is not enough justification
|
||||||
- Valid license headers on all `*.c` and `*.h` source files
|
- valid license headers on all `*.c` and `*.h` source files
|
||||||
- GPL2/GPL3 recommended for consistency
|
- GPL2/GPL3 recommended for consistency
|
||||||
- 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.
|
- 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.
|
||||||
- QMK codebase "best practices" followed
|
- QMK Codebase "best practices" followed
|
||||||
- This is not an exhaustive list, and will likely get amended as time goes by
|
- this is not an exhaustive list, and will likely get amended as time goes by
|
||||||
- `#pragma once` instead of `#ifndef` include guards in header files
|
- `#pragma once` instead of `#ifndef` include guards in header files
|
||||||
- No "old-school" GPIO/I2C/SPI functions used -- must use QMK abstractions unless justifiable (and laziness is not valid justification)
|
- no "old-school" GPIO/I2C/SPI functions used -- must use QMK abstractions unless justifiable (and laziness is not valid justification)
|
||||||
- Timing abstractions should be followed too:
|
- timing abstractions should be followed too:
|
||||||
- `wait_ms()` instead of `_delay_ms()` (remove `#include <util/delay.h>` too)
|
- `wait_ms()` instead of `_delay_ms()` (remove `#include <util/delay.h>` too)
|
||||||
- `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
|
- `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
|
||||||
- If you think a new abstraction is useful, you're encouraged to:
|
- if you think a new abstraction is useful, you're encouraged to:
|
||||||
- prototype it in your own keyboard until it's feature-complete
|
- prototype it in your own keyboard until it's feature-complete
|
||||||
- discuss it with QMK Collaborators on Discord
|
- discuss it with QMK Collaborators on Discord
|
||||||
- refactor it as a separate core change
|
- refactor it as a separate core change
|
||||||
- remove your specific copy in your board
|
- remove your specific copy in your board
|
||||||
|
- rebase and fix all merge conflicts before opening the PR (in case you need help or advice, reach out to QMK Collaborators on Discord)
|
||||||
|
|
||||||
## Core PRs
|
## Keymap PRs
|
||||||
|
|
||||||
- Must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
|
- `#include QMK_KEYBOARD_H` preferred to including specific board files
|
||||||
- Other notes TBD
|
- prefer layer `enum`s to `#define`s
|
||||||
- Core is a lot more subjective given the breadth of posted changes
|
- require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE`
|
||||||
|
- terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous
|
||||||
|
- some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
|
||||||
|
|
||||||
## Keyboard PRs
|
## Keyboard PRs
|
||||||
|
|
||||||
@@ -48,12 +51,14 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
|
|||||||
- standard template should be present
|
- standard template should be present
|
||||||
- flash command has `:flash` at end
|
- flash command has `:flash` at end
|
||||||
- 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.
|
- 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.
|
||||||
|
- clear instructions on how to reset the board into bootloader mode
|
||||||
|
- a picture about the keyboard and preferably about the PCB, too
|
||||||
- `rules.mk`
|
- `rules.mk`
|
||||||
- removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE`
|
- removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE`
|
||||||
- modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth`
|
- modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth`
|
||||||
- No `(-/+size)` comments related to enabling features
|
- no `(-/+size)` comments related to enabling features
|
||||||
- Remove the list of alternate bootloaders if one has been specified
|
- remove the list of alternate bootloaders if one has been specified
|
||||||
- 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)
|
- 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)
|
||||||
- keyboard `config.h`
|
- keyboard `config.h`
|
||||||
- don't repeat `MANUFACTURER` in the `PRODUCT` value
|
- don't repeat `MANUFACTURER` in the `PRODUCT` value
|
||||||
- no `#define DESCRIPTION`
|
- no `#define DESCRIPTION`
|
||||||
@@ -71,12 +76,12 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
|
|||||||
- `keyboard.h`
|
- `keyboard.h`
|
||||||
- `#include "quantum.h"` appears at the top
|
- `#include "quantum.h"` appears at the top
|
||||||
- `LAYOUT` macros should use standard definitions if applicable
|
- `LAYOUT` macros should use standard definitions if applicable
|
||||||
- Use the Community Layout macro names where they apply (preferred above `LAYOUT`/`LAYOUT_all`)
|
- use the Community Layout macro names where they apply (preferred above `LAYOUT`/`LAYOUT_all`)
|
||||||
- keymap `config.h`
|
- keymap `config.h`
|
||||||
- no duplication of `rules.mk` or `config.h` from keyboard
|
- no duplication of `rules.mk` or `config.h` from keyboard
|
||||||
- `keymaps/default/keymap.c`
|
- `keymaps/default/keymap.c`
|
||||||
- `QMKBEST`/`QMKURL` removed (sheesh)
|
- `QMKBEST`/`QMKURL` removed (sheesh)
|
||||||
- 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...
|
- 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...
|
||||||
```
|
```
|
||||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||||
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
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
|
|||||||
- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
|
- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
|
||||||
|
|
||||||
Also, specific to ChibiOS:
|
Also, specific to ChibiOS:
|
||||||
- **Strong** preference to using existing ChibiOS board definitions.
|
- **strong** preference to using existing ChibiOS board definitions.
|
||||||
- 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
|
- 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
|
||||||
- Example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk
|
- example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk
|
||||||
- QMK is migrating to not having custom board definitions if at all possible, due to the ongoing maintenance burden when upgrading ChibiOS
|
- QMK is migrating to not having custom board definitions if at all possible, due to the ongoing maintenance burden when upgrading ChibiOS
|
||||||
- If a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`:
|
- if a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`:
|
||||||
- see Arm/ChibiOS [early initialization](https://docs.qmk.fm/#/platformdev_chibios_earlyinit?id=board-init)
|
- see Arm/ChibiOS [early initialization](https://docs.qmk.fm/#/platformdev_chibios_earlyinit?id=board-init)
|
||||||
- `__early_init()` should be replaced by either `early_hardware_init_pre()` or `early_hardware_init_post()` as appropriate
|
- `__early_init()` should be replaced by either `early_hardware_init_pre()` or `early_hardware_init_post()` as appropriate
|
||||||
- `boardInit()` should be migrated to `board_init()`
|
- `boardInit()` should be migrated to `board_init()`
|
||||||
|
|
||||||
## Keymap PRs
|
## Core PRs
|
||||||
|
|
||||||
- `#include QMK_KEYBOARD_H` preferred to including specific board files
|
- must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
|
||||||
- Prefer layer `enum`s to `#define`s
|
- other notes TBD
|
||||||
- Require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE`
|
- core is a lot more subjective given the breadth of posted changes
|
||||||
- Terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous
|
|
||||||
- Some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+21
-57
@@ -78,23 +78,6 @@ bool g_scaling_registers_update_required[DRIVER_COUNT] = {false};
|
|||||||
|
|
||||||
uint8_t g_scaling_registers[DRIVER_COUNT][ISSI_MAX_LEDS];
|
uint8_t g_scaling_registers[DRIVER_COUNT][ISSI_MAX_LEDS];
|
||||||
|
|
||||||
uint32_t IS31FL3741_get_cw_sw_position(uint8_t cs, uint8_t sw) {
|
|
||||||
uint32_t pos = 0;
|
|
||||||
|
|
||||||
if (cs < 31) {
|
|
||||||
if (sw < 7) {
|
|
||||||
pos = (sw - 1) * 30 + (cs - 1);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
pos = 0xB4 + (sw - 7) * 30 + (cs - 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
pos = 0xB4 + 0x5A + (sw - 1) * 9 + (cs - 31);
|
|
||||||
}
|
|
||||||
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
|
void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
|
||||||
g_twi_transfer_buffer[0] = reg;
|
g_twi_transfer_buffer[0] = reg;
|
||||||
g_twi_transfer_buffer[1] = data;
|
g_twi_transfer_buffer[1] = data;
|
||||||
@@ -186,16 +169,11 @@ void IS31FL3741_init(uint8_t addr) {
|
|||||||
void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
|
void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
if (index >= 0 && index < DRIVER_LED_TOTAL) {
|
if (index >= 0 && index < DRIVER_LED_TOTAL) {
|
||||||
is31_led led = g_is31_leds[index];
|
is31_led led = g_is31_leds[index];
|
||||||
uint32_t rp = 0, gp = 0, bp = 0;
|
|
||||||
|
|
||||||
rp = IS31FL3741_get_cw_sw_position(led.rcs, led.rsw);
|
g_pwm_buffer[led.driver][led.r] = red;
|
||||||
gp = IS31FL3741_get_cw_sw_position(led.gcs, led.gsw);
|
g_pwm_buffer[led.driver][led.g] = green;
|
||||||
bp = IS31FL3741_get_cw_sw_position(led.bcs, led.bsw);
|
g_pwm_buffer[led.driver][led.b] = blue;
|
||||||
|
g_pwm_buffer_update_required = true;
|
||||||
g_pwm_buffer[led.driver][rp] = red;
|
|
||||||
g_pwm_buffer[led.driver][gp] = green;
|
|
||||||
g_pwm_buffer[led.driver][bp] = blue;
|
|
||||||
g_pwm_buffer_update_required = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,26 +186,22 @@ void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
|
|||||||
void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
|
void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
|
||||||
is31_led led = g_is31_leds[index];
|
is31_led led = g_is31_leds[index];
|
||||||
|
|
||||||
uint32_t scaling_register_r = IS31FL3741_get_cw_sw_position(led.rcs, led.rsw);
|
|
||||||
uint32_t scaling_register_g = IS31FL3741_get_cw_sw_position(led.gcs, led.gsw);
|
|
||||||
uint32_t scaling_register_b = IS31FL3741_get_cw_sw_position(led.bcs, led.bsw);
|
|
||||||
|
|
||||||
if (red) {
|
if (red) {
|
||||||
g_scaling_registers[led.driver][scaling_register_r] = 0xFF;
|
g_scaling_registers[led.driver][led.r] = 0xFF;
|
||||||
} else {
|
} else {
|
||||||
g_scaling_registers[led.driver][scaling_register_r] = 0x00;
|
g_scaling_registers[led.driver][led.r] = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (green) {
|
if (green) {
|
||||||
g_scaling_registers[led.driver][scaling_register_g] = 0xFF;
|
g_scaling_registers[led.driver][led.g] = 0xFF;
|
||||||
} else {
|
} else {
|
||||||
g_scaling_registers[led.driver][scaling_register_g] = 0x00;
|
g_scaling_registers[led.driver][led.g] = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blue) {
|
if (blue) {
|
||||||
g_scaling_registers[led.driver][scaling_register_b] = 0xFF;
|
g_scaling_registers[led.driver][led.b] = 0xFF;
|
||||||
} else {
|
} else {
|
||||||
g_scaling_registers[led.driver][scaling_register_b] = 0x00;
|
g_scaling_registers[led.driver][led.b] = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_scaling_registers_update_required[led.driver] = true;
|
g_scaling_registers_update_required[led.driver] = true;
|
||||||
@@ -242,15 +216,9 @@ void IS31FL3741_update_pwm_buffers(uint8_t addr1, uint8_t addr2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
|
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
uint32_t rp = 0, gp = 0, bp = 0;
|
g_pwm_buffer[pled->driver][pled->r] = red;
|
||||||
|
g_pwm_buffer[pled->driver][pled->g] = green;
|
||||||
rp = IS31FL3741_get_cw_sw_position(pled->rcs, pled->rsw);
|
g_pwm_buffer[pled->driver][pled->b] = blue;
|
||||||
gp = IS31FL3741_get_cw_sw_position(pled->gcs, pled->gsw);
|
|
||||||
bp = IS31FL3741_get_cw_sw_position(pled->bcs, pled->bsw);
|
|
||||||
|
|
||||||
g_pwm_buffer[pled->driver][rp] = red;
|
|
||||||
g_pwm_buffer[pled->driver][gp] = green;
|
|
||||||
g_pwm_buffer[pled->driver][bp] = blue;
|
|
||||||
|
|
||||||
g_pwm_buffer_update_required = true;
|
g_pwm_buffer_update_required = true;
|
||||||
}
|
}
|
||||||
@@ -261,7 +229,8 @@ void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
|
|||||||
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||||
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_0);
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_0);
|
||||||
|
|
||||||
for (int i = 0; i < 180; ++i) {
|
// CS1_SW1 to CS30_SW6 are on PG2
|
||||||
|
for (int i = CS1_SW1; i <= CS30_SW6; ++i) {
|
||||||
IS31FL3741_write_register(addr, i, g_scaling_registers[0][i]);
|
IS31FL3741_write_register(addr, i, g_scaling_registers[0][i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,8 +238,9 @@ void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
|
|||||||
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||||
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_1);
|
IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_1);
|
||||||
|
|
||||||
for (int i = 0; i < 171; ++i) {
|
// CS1_SW7 to CS39_SW9 are on PG3
|
||||||
IS31FL3741_write_register(addr, i, g_scaling_registers[0][180 + i]);
|
for (int i = CS1_SW7; i <= CS39_SW9; ++i) {
|
||||||
|
IS31FL3741_write_register(addr, i - CS1_SW7, g_scaling_registers[0][i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_scaling_registers_update_required[index] = false;
|
g_scaling_registers_update_required[index] = false;
|
||||||
@@ -278,13 +248,7 @@ void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
|
void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
|
||||||
uint32_t rp = 0, gp = 0, bp = 0;
|
g_scaling_registers[pled->driver][pled->r] = red;
|
||||||
|
g_scaling_registers[pled->driver][pled->g] = green;
|
||||||
rp = IS31FL3741_get_cw_sw_position(pled->rcs, pled->rsw);
|
g_scaling_registers[pled->driver][pled->b] = blue;
|
||||||
gp = IS31FL3741_get_cw_sw_position(pled->gcs, pled->gsw);
|
|
||||||
bp = IS31FL3741_get_cw_sw_position(pled->bcs, pled->bsw);
|
|
||||||
|
|
||||||
g_scaling_registers[pled->driver][rp] = red;
|
|
||||||
g_scaling_registers[pled->driver][gp] = green;
|
|
||||||
g_scaling_registers[pled->driver][bp] = blue;
|
|
||||||
}
|
}
|
||||||
+373
-7
@@ -23,13 +23,10 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef struct is31_led {
|
typedef struct is31_led {
|
||||||
uint8_t driver : 2;
|
uint8_t driver : 2;
|
||||||
uint8_t rcs;
|
uint16_t r;
|
||||||
uint8_t rsw;
|
uint16_t g;
|
||||||
uint8_t gcs;
|
uint16_t b;
|
||||||
uint8_t gsw;
|
|
||||||
uint8_t bcs;
|
|
||||||
uint8_t bsw;
|
|
||||||
} __attribute__((packed)) is31_led;
|
} __attribute__((packed)) is31_led;
|
||||||
|
|
||||||
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
|
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
|
||||||
@@ -53,3 +50,372 @@ void IS31FL3741_update_led_control_registers(uint8_t addr1, uint8_t addr2);
|
|||||||
void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
||||||
|
|
||||||
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
|
||||||
|
|
||||||
|
#define CS1_SW1 0x00
|
||||||
|
#define CS2_SW1 0x01
|
||||||
|
#define CS3_SW1 0x02
|
||||||
|
#define CS4_SW1 0x03
|
||||||
|
#define CS5_SW1 0x04
|
||||||
|
#define CS6_SW1 0x05
|
||||||
|
#define CS7_SW1 0x06
|
||||||
|
#define CS8_SW1 0x07
|
||||||
|
#define CS9_SW1 0x08
|
||||||
|
#define CS10_SW1 0x09
|
||||||
|
#define CS11_SW1 0x0A
|
||||||
|
#define CS12_SW1 0x0B
|
||||||
|
#define CS13_SW1 0x0C
|
||||||
|
#define CS14_SW1 0x0D
|
||||||
|
#define CS15_SW1 0x0E
|
||||||
|
#define CS16_SW1 0x0F
|
||||||
|
#define CS17_SW1 0x10
|
||||||
|
#define CS18_SW1 0x11
|
||||||
|
#define CS19_SW1 0x12
|
||||||
|
#define CS20_SW1 0x13
|
||||||
|
#define CS21_SW1 0x14
|
||||||
|
#define CS22_SW1 0x15
|
||||||
|
#define CS23_SW1 0x16
|
||||||
|
#define CS24_SW1 0x17
|
||||||
|
#define CS25_SW1 0x18
|
||||||
|
#define CS26_SW1 0x19
|
||||||
|
#define CS27_SW1 0x1A
|
||||||
|
#define CS28_SW1 0x1B
|
||||||
|
#define CS29_SW1 0x1C
|
||||||
|
#define CS30_SW1 0x1D
|
||||||
|
|
||||||
|
#define CS1_SW2 0x1E
|
||||||
|
#define CS2_SW2 0x1F
|
||||||
|
#define CS3_SW2 0x20
|
||||||
|
#define CS4_SW2 0x21
|
||||||
|
#define CS5_SW2 0x22
|
||||||
|
#define CS6_SW2 0x23
|
||||||
|
#define CS7_SW2 0x24
|
||||||
|
#define CS8_SW2 0x25
|
||||||
|
#define CS9_SW2 0x26
|
||||||
|
#define CS10_SW2 0x27
|
||||||
|
#define CS11_SW2 0x28
|
||||||
|
#define CS12_SW2 0x29
|
||||||
|
#define CS13_SW2 0x2A
|
||||||
|
#define CS14_SW2 0x2B
|
||||||
|
#define CS15_SW2 0x2C
|
||||||
|
#define CS16_SW2 0x2D
|
||||||
|
#define CS17_SW2 0x2E
|
||||||
|
#define CS18_SW2 0x2F
|
||||||
|
#define CS19_SW2 0x30
|
||||||
|
#define CS20_SW2 0x31
|
||||||
|
#define CS21_SW2 0x32
|
||||||
|
#define CS22_SW2 0x33
|
||||||
|
#define CS23_SW2 0x34
|
||||||
|
#define CS24_SW2 0x35
|
||||||
|
#define CS25_SW2 0x36
|
||||||
|
#define CS26_SW2 0x37
|
||||||
|
#define CS27_SW2 0x38
|
||||||
|
#define CS28_SW2 0x39
|
||||||
|
#define CS29_SW2 0x3A
|
||||||
|
#define CS30_SW2 0x3B
|
||||||
|
|
||||||
|
#define CS1_SW3 0x3C
|
||||||
|
#define CS2_SW3 0x3D
|
||||||
|
#define CS3_SW3 0x3E
|
||||||
|
#define CS4_SW3 0x3F
|
||||||
|
#define CS5_SW3 0x40
|
||||||
|
#define CS6_SW3 0x41
|
||||||
|
#define CS7_SW3 0x42
|
||||||
|
#define CS8_SW3 0x43
|
||||||
|
#define CS9_SW3 0x44
|
||||||
|
#define CS10_SW3 0x45
|
||||||
|
#define CS11_SW3 0x46
|
||||||
|
#define CS12_SW3 0x47
|
||||||
|
#define CS13_SW3 0x48
|
||||||
|
#define CS14_SW3 0x49
|
||||||
|
#define CS15_SW3 0x4A
|
||||||
|
#define CS16_SW3 0x4B
|
||||||
|
#define CS17_SW3 0x4C
|
||||||
|
#define CS18_SW3 0x4D
|
||||||
|
#define CS19_SW3 0x4E
|
||||||
|
#define CS20_SW3 0x4F
|
||||||
|
#define CS21_SW3 0x50
|
||||||
|
#define CS22_SW3 0x51
|
||||||
|
#define CS23_SW3 0x52
|
||||||
|
#define CS24_SW3 0x53
|
||||||
|
#define CS25_SW3 0x54
|
||||||
|
#define CS26_SW3 0x55
|
||||||
|
#define CS27_SW3 0x56
|
||||||
|
#define CS28_SW3 0x57
|
||||||
|
#define CS29_SW3 0x58
|
||||||
|
#define CS30_SW3 0x59
|
||||||
|
|
||||||
|
#define CS1_SW4 0x5A
|
||||||
|
#define CS2_SW4 0x5B
|
||||||
|
#define CS3_SW4 0x5C
|
||||||
|
#define CS4_SW4 0x5D
|
||||||
|
#define CS5_SW4 0x5E
|
||||||
|
#define CS6_SW4 0x5F
|
||||||
|
#define CS7_SW4 0x60
|
||||||
|
#define CS8_SW4 0x61
|
||||||
|
#define CS9_SW4 0x62
|
||||||
|
#define CS10_SW4 0x63
|
||||||
|
#define CS11_SW4 0x64
|
||||||
|
#define CS12_SW4 0x65
|
||||||
|
#define CS13_SW4 0x66
|
||||||
|
#define CS14_SW4 0x67
|
||||||
|
#define CS15_SW4 0x68
|
||||||
|
#define CS16_SW4 0x69
|
||||||
|
#define CS17_SW4 0x6A
|
||||||
|
#define CS18_SW4 0x6B
|
||||||
|
#define CS19_SW4 0x6C
|
||||||
|
#define CS20_SW4 0x6D
|
||||||
|
#define CS21_SW4 0x6E
|
||||||
|
#define CS22_SW4 0x6F
|
||||||
|
#define CS23_SW4 0x70
|
||||||
|
#define CS24_SW4 0x71
|
||||||
|
#define CS25_SW4 0x72
|
||||||
|
#define CS26_SW4 0x73
|
||||||
|
#define CS27_SW4 0x74
|
||||||
|
#define CS28_SW4 0x75
|
||||||
|
#define CS29_SW4 0x76
|
||||||
|
#define CS30_SW4 0x77
|
||||||
|
|
||||||
|
#define CS1_SW5 0x78
|
||||||
|
#define CS2_SW5 0x79
|
||||||
|
#define CS3_SW5 0x7A
|
||||||
|
#define CS4_SW5 0x7B
|
||||||
|
#define CS5_SW5 0x7C
|
||||||
|
#define CS6_SW5 0x7D
|
||||||
|
#define CS7_SW5 0x7E
|
||||||
|
#define CS8_SW5 0x7F
|
||||||
|
#define CS9_SW5 0x80
|
||||||
|
#define CS10_SW5 0x81
|
||||||
|
#define CS11_SW5 0x82
|
||||||
|
#define CS12_SW5 0x83
|
||||||
|
#define CS13_SW5 0x84
|
||||||
|
#define CS14_SW5 0x85
|
||||||
|
#define CS15_SW5 0x86
|
||||||
|
#define CS16_SW5 0x87
|
||||||
|
#define CS17_SW5 0x88
|
||||||
|
#define CS18_SW5 0x89
|
||||||
|
#define CS19_SW5 0x8A
|
||||||
|
#define CS20_SW5 0x8B
|
||||||
|
#define CS21_SW5 0x8C
|
||||||
|
#define CS22_SW5 0x8D
|
||||||
|
#define CS23_SW5 0x8E
|
||||||
|
#define CS24_SW5 0x8F
|
||||||
|
#define CS25_SW5 0x90
|
||||||
|
#define CS26_SW5 0x91
|
||||||
|
#define CS27_SW5 0x92
|
||||||
|
#define CS28_SW5 0x93
|
||||||
|
#define CS29_SW5 0x94
|
||||||
|
#define CS30_SW5 0x95
|
||||||
|
|
||||||
|
#define CS1_SW6 0x96
|
||||||
|
#define CS2_SW6 0x97
|
||||||
|
#define CS3_SW6 0x98
|
||||||
|
#define CS4_SW6 0x99
|
||||||
|
#define CS5_SW6 0x9A
|
||||||
|
#define CS6_SW6 0x9B
|
||||||
|
#define CS7_SW6 0x9C
|
||||||
|
#define CS8_SW6 0x9D
|
||||||
|
#define CS9_SW6 0x9E
|
||||||
|
#define CS10_SW6 0x9F
|
||||||
|
#define CS11_SW6 0xA0
|
||||||
|
#define CS12_SW6 0xA1
|
||||||
|
#define CS13_SW6 0xA2
|
||||||
|
#define CS14_SW6 0xA3
|
||||||
|
#define CS15_SW6 0xA4
|
||||||
|
#define CS16_SW6 0xA5
|
||||||
|
#define CS17_SW6 0xA6
|
||||||
|
#define CS18_SW6 0xA7
|
||||||
|
#define CS19_SW6 0xA8
|
||||||
|
#define CS20_SW6 0xA9
|
||||||
|
#define CS21_SW6 0xAA
|
||||||
|
#define CS22_SW6 0xAB
|
||||||
|
#define CS23_SW6 0xAC
|
||||||
|
#define CS24_SW6 0xAD
|
||||||
|
#define CS25_SW6 0xAE
|
||||||
|
#define CS26_SW6 0xAF
|
||||||
|
#define CS27_SW6 0xB0
|
||||||
|
#define CS28_SW6 0xB1
|
||||||
|
#define CS29_SW6 0xB2
|
||||||
|
#define CS30_SW6 0xB3
|
||||||
|
|
||||||
|
#define CS1_SW7 0xB4
|
||||||
|
#define CS2_SW7 0xB5
|
||||||
|
#define CS3_SW7 0xB6
|
||||||
|
#define CS4_SW7 0xB7
|
||||||
|
#define CS5_SW7 0xB8
|
||||||
|
#define CS6_SW7 0xB9
|
||||||
|
#define CS7_SW7 0xBA
|
||||||
|
#define CS8_SW7 0xBB
|
||||||
|
#define CS9_SW7 0xBC
|
||||||
|
#define CS10_SW7 0xBD
|
||||||
|
#define CS11_SW7 0xBE
|
||||||
|
#define CS12_SW7 0xBF
|
||||||
|
#define CS13_SW7 0xC0
|
||||||
|
#define CS14_SW7 0xC1
|
||||||
|
#define CS15_SW7 0xC2
|
||||||
|
#define CS16_SW7 0xC3
|
||||||
|
#define CS17_SW7 0xC4
|
||||||
|
#define CS18_SW7 0xC5
|
||||||
|
#define CS19_SW7 0xC6
|
||||||
|
#define CS20_SW7 0xC7
|
||||||
|
#define CS21_SW7 0xC8
|
||||||
|
#define CS22_SW7 0xC9
|
||||||
|
#define CS23_SW7 0xCA
|
||||||
|
#define CS24_SW7 0xCB
|
||||||
|
#define CS25_SW7 0xCC
|
||||||
|
#define CS26_SW7 0xCD
|
||||||
|
#define CS27_SW7 0xCE
|
||||||
|
#define CS28_SW7 0xCF
|
||||||
|
#define CS29_SW7 0xD0
|
||||||
|
#define CS30_SW7 0xD1
|
||||||
|
|
||||||
|
#define CS1_SW8 0xD2
|
||||||
|
#define CS2_SW8 0xD3
|
||||||
|
#define CS3_SW8 0xD4
|
||||||
|
#define CS4_SW8 0xD5
|
||||||
|
#define CS5_SW8 0xD6
|
||||||
|
#define CS6_SW8 0xD7
|
||||||
|
#define CS7_SW8 0xD8
|
||||||
|
#define CS8_SW8 0xD9
|
||||||
|
#define CS9_SW8 0xDA
|
||||||
|
#define CS10_SW8 0xDB
|
||||||
|
#define CS11_SW8 0xDC
|
||||||
|
#define CS12_SW8 0xDD
|
||||||
|
#define CS13_SW8 0xDE
|
||||||
|
#define CS14_SW8 0xDF
|
||||||
|
#define CS15_SW8 0xE0
|
||||||
|
#define CS16_SW8 0xE1
|
||||||
|
#define CS17_SW8 0xE2
|
||||||
|
#define CS18_SW8 0xE3
|
||||||
|
#define CS19_SW8 0xE4
|
||||||
|
#define CS20_SW8 0xE5
|
||||||
|
#define CS21_SW8 0xE6
|
||||||
|
#define CS22_SW8 0xE7
|
||||||
|
#define CS23_SW8 0xE8
|
||||||
|
#define CS24_SW8 0xE9
|
||||||
|
#define CS25_SW8 0xEA
|
||||||
|
#define CS26_SW8 0xEB
|
||||||
|
#define CS27_SW8 0xEC
|
||||||
|
#define CS28_SW8 0xED
|
||||||
|
#define CS29_SW8 0xEE
|
||||||
|
#define CS30_SW8 0xEF
|
||||||
|
|
||||||
|
#define CS1_SW9 0xF0
|
||||||
|
#define CS2_SW9 0xF1
|
||||||
|
#define CS3_SW9 0xF2
|
||||||
|
#define CS4_SW9 0xF3
|
||||||
|
#define CS5_SW9 0xF4
|
||||||
|
#define CS6_SW9 0xF5
|
||||||
|
#define CS7_SW9 0xF6
|
||||||
|
#define CS8_SW9 0xF7
|
||||||
|
#define CS9_SW9 0xF8
|
||||||
|
#define CS10_SW9 0xF9
|
||||||
|
#define CS11_SW9 0xFA
|
||||||
|
#define CS12_SW9 0xFB
|
||||||
|
#define CS13_SW9 0xFC
|
||||||
|
#define CS14_SW9 0xFD
|
||||||
|
#define CS15_SW9 0xFE
|
||||||
|
#define CS16_SW9 0xFF
|
||||||
|
#define CS17_SW9 0x100
|
||||||
|
#define CS18_SW9 0x101
|
||||||
|
#define CS19_SW9 0x102
|
||||||
|
#define CS20_SW9 0x103
|
||||||
|
#define CS21_SW9 0x104
|
||||||
|
#define CS22_SW9 0x105
|
||||||
|
#define CS23_SW9 0x106
|
||||||
|
#define CS24_SW9 0x107
|
||||||
|
#define CS25_SW9 0x108
|
||||||
|
#define CS26_SW9 0x109
|
||||||
|
#define CS27_SW9 0x10A
|
||||||
|
#define CS28_SW9 0x10B
|
||||||
|
#define CS29_SW9 0x10C
|
||||||
|
#define CS30_SW9 0x10D
|
||||||
|
|
||||||
|
#define CS31_SW1 0x10E
|
||||||
|
#define CS32_SW1 0x10F
|
||||||
|
#define CS33_SW1 0x110
|
||||||
|
#define CS34_SW1 0x111
|
||||||
|
#define CS35_SW1 0x112
|
||||||
|
#define CS36_SW1 0x113
|
||||||
|
#define CS37_SW1 0x114
|
||||||
|
#define CS38_SW1 0x115
|
||||||
|
#define CS39_SW1 0x116
|
||||||
|
|
||||||
|
#define CS31_SW2 0x117
|
||||||
|
#define CS32_SW2 0x118
|
||||||
|
#define CS33_SW2 0x119
|
||||||
|
#define CS34_SW2 0x11A
|
||||||
|
#define CS35_SW2 0x11B
|
||||||
|
#define CS36_SW2 0x11C
|
||||||
|
#define CS37_SW2 0x11D
|
||||||
|
#define CS38_SW2 0x11E
|
||||||
|
#define CS39_SW2 0x11F
|
||||||
|
|
||||||
|
#define CS31_SW3 0x120
|
||||||
|
#define CS32_SW3 0x121
|
||||||
|
#define CS33_SW3 0x122
|
||||||
|
#define CS34_SW3 0x123
|
||||||
|
#define CS35_SW3 0x124
|
||||||
|
#define CS36_SW3 0x125
|
||||||
|
#define CS37_SW3 0x126
|
||||||
|
#define CS38_SW3 0x127
|
||||||
|
#define CS39_SW3 0x128
|
||||||
|
|
||||||
|
#define CS31_SW4 0x129
|
||||||
|
#define CS32_SW4 0x12A
|
||||||
|
#define CS33_SW4 0x12B
|
||||||
|
#define CS34_SW4 0x12C
|
||||||
|
#define CS35_SW4 0x12D
|
||||||
|
#define CS36_SW4 0x12E
|
||||||
|
#define CS37_SW4 0x12F
|
||||||
|
#define CS38_SW4 0x130
|
||||||
|
#define CS39_SW4 0x131
|
||||||
|
|
||||||
|
#define CS31_SW5 0x132
|
||||||
|
#define CS32_SW5 0x133
|
||||||
|
#define CS33_SW5 0x134
|
||||||
|
#define CS34_SW5 0x135
|
||||||
|
#define CS35_SW5 0x136
|
||||||
|
#define CS36_SW5 0x137
|
||||||
|
#define CS37_SW5 0x138
|
||||||
|
#define CS38_SW5 0x139
|
||||||
|
#define CS39_SW5 0x13A
|
||||||
|
|
||||||
|
#define CS31_SW6 0x13B
|
||||||
|
#define CS32_SW6 0x13C
|
||||||
|
#define CS33_SW6 0x13D
|
||||||
|
#define CS34_SW6 0x13E
|
||||||
|
#define CS35_SW6 0x13F
|
||||||
|
#define CS36_SW6 0x140
|
||||||
|
#define CS37_SW6 0x141
|
||||||
|
#define CS38_SW6 0x142
|
||||||
|
#define CS39_SW6 0x143
|
||||||
|
|
||||||
|
#define CS31_SW7 0x144
|
||||||
|
#define CS32_SW7 0x145
|
||||||
|
#define CS33_SW7 0x146
|
||||||
|
#define CS34_SW7 0x147
|
||||||
|
#define CS35_SW7 0x148
|
||||||
|
#define CS36_SW7 0x149
|
||||||
|
#define CS37_SW7 0x14A
|
||||||
|
#define CS38_SW7 0x14B
|
||||||
|
#define CS39_SW7 0x14C
|
||||||
|
|
||||||
|
#define CS31_SW8 0x14D
|
||||||
|
#define CS32_SW8 0x14E
|
||||||
|
#define CS33_SW8 0x14F
|
||||||
|
#define CS34_SW8 0x150
|
||||||
|
#define CS35_SW8 0x151
|
||||||
|
#define CS36_SW8 0x152
|
||||||
|
#define CS37_SW8 0x153
|
||||||
|
#define CS38_SW8 0x154
|
||||||
|
#define CS39_SW8 0x155
|
||||||
|
|
||||||
|
#define CS31_SW9 0x156
|
||||||
|
#define CS32_SW9 0x157
|
||||||
|
#define CS33_SW9 0x158
|
||||||
|
#define CS34_SW9 0x159
|
||||||
|
#define CS35_SW9 0x15A
|
||||||
|
#define CS36_SW9 0x15B
|
||||||
|
#define CS37_SW9 0x15C
|
||||||
|
#define CS38_SW9 0x15D
|
||||||
|
#define CS39_SW9 0x15E
|
||||||
@@ -447,7 +447,7 @@ void oled_pan(bool left) {
|
|||||||
oled_buffer_reader_t oled_read_raw(uint16_t start_index) {
|
oled_buffer_reader_t oled_read_raw(uint16_t start_index) {
|
||||||
if (start_index > OLED_MATRIX_SIZE) start_index = OLED_MATRIX_SIZE;
|
if (start_index > OLED_MATRIX_SIZE) start_index = OLED_MATRIX_SIZE;
|
||||||
oled_buffer_reader_t ret_reader;
|
oled_buffer_reader_t ret_reader;
|
||||||
ret_reader.current_element = &oled_buffer[start_index];
|
ret_reader.current_element = &oled_buffer[start_index];
|
||||||
ret_reader.remaining_element_count = OLED_MATRIX_SIZE - start_index;
|
ret_reader.remaining_element_count = OLED_MATRIX_SIZE - start_index;
|
||||||
return ret_reader;
|
return ret_reader;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct __attribute__((__packed__)) {
|
typedef struct __attribute__((__packed__)) {
|
||||||
uint8_t *current_element;
|
uint8_t *current_element;
|
||||||
uint16_t remaining_element_count;
|
uint16_t remaining_element_count;
|
||||||
} oled_buffer_reader_t;
|
} oled_buffer_reader_t;
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
) { \
|
) { \
|
||||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, XXX }, \
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, XXX }, \
|
||||||
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
|
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
|
||||||
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, XXX, k2E }, \
|
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, XXX }, \
|
||||||
{ k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, XXX }, \
|
{ k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, XXX }, \
|
||||||
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
|
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
|
||||||
}
|
}
|
||||||
@@ -42,8 +42,8 @@
|
|||||||
k40, k41, k43, k46, k4A, k4B, k4D, k4E \
|
k40, k41, k43, k46, k4A, k4B, k4D, k4E \
|
||||||
) { \
|
) { \
|
||||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, XXX }, \
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, XXX }, \
|
||||||
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, XXX }, \
|
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k2D }, \
|
||||||
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E }, \
|
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, XXX }, \
|
||||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, XXX }, \
|
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, XXX }, \
|
||||||
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
|
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
|
||||||
}
|
}
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
) { \
|
) { \
|
||||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
|
||||||
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
|
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
|
||||||
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, XXX, k2E }, \
|
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, XXX }, \
|
||||||
{ k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
|
{ k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
|
||||||
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
|
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
) { \
|
) { \
|
||||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
|
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
|
||||||
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
|
{ k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
|
||||||
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, XXX, k2E }, \
|
{ k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, XXX }, \
|
||||||
{ k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
|
{ k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
|
||||||
{ XXX, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4B, XXX, k4D, XXX } \
|
{ XXX, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4B, XXX, k4D, XXX } \
|
||||||
}
|
}
|
||||||
@@ -1,2 +1,4 @@
|
|||||||
VIA_ENABLE = yes
|
VIA_ENABLE = yes
|
||||||
LTO_ENABLE = yes
|
LTO_ENABLE = yes
|
||||||
|
RGB_MATRIX_ENABLE = no
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Andy Jack
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
_QWERTY,
|
||||||
|
_L1,
|
||||||
|
_L2
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CTL_ESC LCTL_T(KC_ESC)
|
||||||
|
|
||||||
|
/* these key combos are mapped to shell commands in my .keylaunchrc */
|
||||||
|
#define MUT_IN LALT(KC_F10)
|
||||||
|
#define MUT_OUT LALT(KC_F11)
|
||||||
|
#define MUT_MIC LALT(KC_F12)
|
||||||
|
#define SCN_LCK LCTL(KC_SLCK)
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
AJ_FN = SAFE_RANGE,
|
||||||
|
AJ_RCTL,
|
||||||
|
AJ_MSWP,
|
||||||
|
AJ_MLCK,
|
||||||
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_QWERTY] = LAYOUT_68_ansi(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
|
||||||
|
CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, AJ_FN, AJ_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[_L1] = LAYOUT_68_ansi(
|
||||||
|
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_VOLU, KC_HOME,
|
||||||
|
_______, _______, KC_HOME, KC_UP, KC_END, _______, _______, MUT_IN , MUT_OUT, MUT_MIC, _______, _______, BL_STEP, _______, KC_VOLD, KC_END,
|
||||||
|
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, SCN_LCK, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, KC_BTN3, _______, _______, KC_MUTE, _______, _______, _______, _______, KC_MUTE,
|
||||||
|
_______, AJ_MLCK, AJ_MSWP, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
|
||||||
|
),
|
||||||
|
[_L2] = LAYOUT_68_ansi(
|
||||||
|
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_VOLU, KC_HOME,
|
||||||
|
_______, _______, _______, KC_UP, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, KC_VOLD, KC_END,
|
||||||
|
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______, KC_MUTE,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
|
||||||
|
)
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
static bool aj_fn_down = false;
|
||||||
|
static bool aj_rctl_down = false;
|
||||||
|
static uint8_t keycode_for_aj_rctl;
|
||||||
|
|
||||||
|
/* My version of:
|
||||||
|
https://www.reddit.com/r/olkb/comments/8eticz/how_to_activate_a_layer_with_a_combination/dxygw0f/
|
||||||
|
* AJ_FN by itself turns on layer 1
|
||||||
|
* AJ_RCTL by itself acts as a control key
|
||||||
|
* pressing FN and RCTL together, in any order, turns on layer 2
|
||||||
|
*/
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case AJ_FN:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (aj_rctl_down) {
|
||||||
|
layer_on(_L2);
|
||||||
|
} else {
|
||||||
|
layer_on(_L1);
|
||||||
|
}
|
||||||
|
aj_fn_down = true;
|
||||||
|
} else {
|
||||||
|
layer_off(_L1);
|
||||||
|
layer_off(_L2);
|
||||||
|
aj_fn_down = false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case AJ_RCTL:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (aj_fn_down) {
|
||||||
|
layer_on(_L2);
|
||||||
|
} else {
|
||||||
|
register_code(keycode_for_aj_rctl);
|
||||||
|
}
|
||||||
|
aj_rctl_down = true;
|
||||||
|
} else {
|
||||||
|
layer_off(_L2);
|
||||||
|
unregister_code(keycode_for_aj_rctl);
|
||||||
|
aj_rctl_down = false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case AJ_MSWP:
|
||||||
|
case AJ_MLCK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (!eeconfig_is_enabled()) {
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
keymap_config.raw = eeconfig_read_keymap();
|
||||||
|
switch (keycode) {
|
||||||
|
case AJ_MSWP:
|
||||||
|
keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
|
||||||
|
keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui;
|
||||||
|
keycode_for_aj_rctl = keymap_config.swap_lalt_lgui ? KC_RALT : KC_RCTL;
|
||||||
|
break;
|
||||||
|
case AJ_MLCK:
|
||||||
|
keymap_config.no_gui = !keymap_config.no_gui;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
eeconfig_update_keymap(keymap_config.raw);
|
||||||
|
clear_keyboard(); // clear to prevent stuck keys
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void keyboard_post_init_user(void) {
|
||||||
|
if (!eeconfig_is_enabled()) {
|
||||||
|
eeconfig_init();
|
||||||
|
}
|
||||||
|
keymap_config.raw = eeconfig_read_keymap();
|
||||||
|
keycode_for_aj_rctl = keymap_config.swap_lalt_lgui ? KC_RALT : KC_RCTL;
|
||||||
|
eeconfig_update_keymap(keymap_config.raw);
|
||||||
|
clear_keyboard(); // clear to prevent stuck keys
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
## Customizations from the `default` keymap
|
||||||
|
|
||||||
|
* caps lock is left ctrl / press & release for escape
|
||||||
|
* keyboard LED brightness control - Fn + ] (same as default)
|
||||||
|
* bootmagic:
|
||||||
|
* ability to swap keys - for moving between mac and win/linux
|
||||||
|
* for win/linux - keys are as labeled in layer 0; AJ_RCTL is right ctl
|
||||||
|
* for mac:
|
||||||
|
* LALT and LGUI swapped
|
||||||
|
* RALT key sends RGUI code
|
||||||
|
* AJ_RCTL key sends RALT code
|
||||||
|
* layer 2 access via Fn + AJ_RCTL pressed in any order
|
||||||
|
* regardless of swapped state
|
||||||
|
* ability to disable left gui
|
||||||
|
* Fn + v sends a middle mouse click - nice for pasting the mouse selection in
|
||||||
|
linux - I always mess up and scroll while clicking
|
||||||
|
* note: the mouse cursor has to be placed at the insert point
|
||||||
|
* mapping some Fn + key combinations to program launch shortcuts
|
||||||
|
|
||||||
|
<!--
|
||||||
|
vim:tw=78
|
||||||
|
-->
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
MOUSEKEY_ENABLE = yes
|
||||||
|
BOOTMAGIC_ENABLE = full
|
||||||
@@ -5,7 +5,7 @@ A 60% PCB for MX switches, one hot swap and one solder-pcb version with decent l
|
|||||||
More info: https://geekhack.org/index.php?topic=103531.0
|
More info: https://geekhack.org/index.php?topic=103531.0
|
||||||
|
|
||||||
* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
|
* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
|
||||||
* Hardware Supported: waffling60 Rev A
|
* Hardware Supported: [waffling60](https://github.com/4pplet/waffling60)
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
//#define MATRIX_HAS_GHOST
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
/* Set 0 if debouncing isn't needed */
|
/* Set 0 if debouncing isn't needed */
|
||||||
#define DEBOUNCE 0
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
#define QMK_ESC_OUTPUT D3 // usually COL
|
#define QMK_ESC_OUTPUT D3 // usually COL
|
||||||
#define QMK_ESC_INPUT D4 // usually ROW
|
#define QMK_ESC_INPUT D4 // usually ROW
|
||||||
@@ -1,24 +1,9 @@
|
|||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_numpad_5x4(KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
|
||||||
/*[0]
|
KC_P7, KC_P8, KC_P9,
|
||||||
*┌───┬───┬───┬───┐
|
KC_P4, KC_P5, KC_P6, KC_PPLS,
|
||||||
*│N L│/ │* │- │
|
KC_P1, KC_P2, KC_P3,
|
||||||
*├───┼───┼───┼───┤
|
KC_P0, KC_PDOT, KC_PENT)
|
||||||
*│7 │8 │9 │ │
|
|
||||||
*├───┼───┼───┤+ │
|
|
||||||
*│4 │5 │6 │ │
|
|
||||||
*├───┼───┼───┼───┤
|
|
||||||
*│1 │2 │3 │ │
|
|
||||||
*├───┴───┼───┤Ent│
|
|
||||||
*│0 │. │ │
|
|
||||||
*└───────┴───┴───┘
|
|
||||||
*/
|
|
||||||
|
|
||||||
[0] = LAYOUT_numpad_5x4(KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
|
|
||||||
KC_P7, KC_P8, KC_P9,
|
|
||||||
KC_P4, KC_P5, KC_P6, KC_PPLS,
|
|
||||||
KC_P1, KC_P2, KC_P3,
|
|
||||||
KC_P0, KC_PDOT, KC_PENT)
|
|
||||||
};
|
};
|
||||||
@@ -1,25 +1,11 @@
|
|||||||
# [Sendy YK](https://mr.sendyyk.com)'s Keymap
|
# [Sendy YK's Keymap](https://github.com/mrsendyyk/my_qmk/tree/master/ai03_soyuz_numpad)
|
||||||
|
|
||||||
`LAYOUT_numpad_5x4`
|
![Default Layer [0]](https://raw.githubusercontent.com/mrsendyyk/my_qmk/master/ai03_soyuz_numpad/assets/ai03_soyuz_mrsendyyk.png)
|
||||||
|
|
||||||
### [0]
|
|
||||||
|
|
||||||
```
|
|
||||||
┌───┬───┬───┬───┐
|
|
||||||
│N L│/ │* │- │
|
|
||||||
├───┼───┼───┼───┤
|
|
||||||
│7 │8 │9 │ │
|
|
||||||
├───┼───┼───┤+ │
|
|
||||||
│4 │5 │6 │ │
|
|
||||||
├───┼───┼───┼───┤
|
|
||||||
│1 │2 │3 │ │
|
|
||||||
├───┴───┼───┤Ent│
|
|
||||||
│0 │. │ │
|
|
||||||
└───────┴───┴───┘
|
|
||||||
```
|
|
||||||
|
|
||||||
## Build The Firmware
|
## Build The Firmware
|
||||||
|
|
||||||
You will need to build the firmware. To do so go to your terminal window and run the compile command:
|
You will need to build the firmware. To do so go to your terminal window and run the compile command:
|
||||||
|
|
||||||
qmk compile -kb ai03/soyuz -km mrsendyyk
|
qmk compile -kb ai03/soyuz -km mrsendyyk
|
||||||
|
|
||||||
|
See [The Complete Newbs Guide To QMK](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/* Copyright 2020 Koichi Katano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bakeneko60.h"
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/* Copyright 2020 Koichi Katano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT_60_ansi_split_bs_rshift( \
|
||||||
|
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
|
||||||
|
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, \
|
||||||
|
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, \
|
||||||
|
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
|
||||||
|
k400, k401, k402, k406, k410, k411, k412, k413 \
|
||||||
|
) { \
|
||||||
|
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014 }, \
|
||||||
|
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, KC_NO}, \
|
||||||
|
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO}, \
|
||||||
|
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO}, \
|
||||||
|
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, k406, KC_NO, KC_NO, KC_NO, k410, k411, k412, k413, KC_NO} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_60_ansi( \
|
||||||
|
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k014, \
|
||||||
|
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, \
|
||||||
|
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, \
|
||||||
|
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
|
||||||
|
k400, k401, k402, k406, k410, k411, k412, k413 \
|
||||||
|
) { \
|
||||||
|
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, KC_NO, k014 }, \
|
||||||
|
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, KC_NO}, \
|
||||||
|
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO}, \
|
||||||
|
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO, KC_NO}, \
|
||||||
|
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, k406, KC_NO, KC_NO, KC_NO, k410, k411, k412, k413, KC_NO} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_60_tsangan_hhkb( \
|
||||||
|
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
|
||||||
|
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, \
|
||||||
|
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, \
|
||||||
|
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
|
||||||
|
k400, k401, k402, k406, k411, k412, k413 \
|
||||||
|
) { \
|
||||||
|
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014 }, \
|
||||||
|
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, KC_NO}, \
|
||||||
|
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO}, \
|
||||||
|
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO}, \
|
||||||
|
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, k406, KC_NO, KC_NO, KC_NO, KC_NO, k411, k412, k413, KC_NO} \
|
||||||
|
}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Koichi Katano
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x3A0E
|
||||||
|
#define PRODUCT_ID 0xCBDC
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER kkatano
|
||||||
|
#define PRODUCT Bakeneko 60
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { E6, B7, F7, F4, F5 }
|
||||||
|
#define MATRIX_COL_PINS { F6, B0, F1, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, D1 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is useful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
//#define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
|
||||||
|
/* disable these deprecated features by default */
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
//#define BOOTMAGIC_LITE_ROW 0
|
||||||
|
//#define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,219 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Bakeneko 60",
|
||||||
|
"url": "https://github.com/kkatano/bakeneko-60-pcb",
|
||||||
|
"maintainer": "kkatano",
|
||||||
|
"width": 15,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_60_ansi_split_bs_rshift": {
|
||||||
|
"layout": [
|
||||||
|
{ "x":0, "y":0 },
|
||||||
|
{ "x":1, "y":0 },
|
||||||
|
{ "x":2, "y":0 },
|
||||||
|
{ "x":3, "y":0 },
|
||||||
|
{ "x":4, "y":0 },
|
||||||
|
{ "x":5, "y":0 },
|
||||||
|
{ "x":6, "y":0 },
|
||||||
|
{ "x":7, "y":0 },
|
||||||
|
{ "x":8, "y":0 },
|
||||||
|
{ "x":9, "y":0 },
|
||||||
|
{ "x":10, "y":0 },
|
||||||
|
{ "x":11, "y":0 },
|
||||||
|
{ "x":12, "y":0 },
|
||||||
|
{ "x":13, "y":0 },
|
||||||
|
{ "x":14, "y":0 },
|
||||||
|
|
||||||
|
{ "x":0, "y":1, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":1 },
|
||||||
|
{ "x":2.5, "y":1 },
|
||||||
|
{ "x":3.5, "y":1 },
|
||||||
|
{ "x":4.5, "y":1 },
|
||||||
|
{ "x":5.5, "y":1 },
|
||||||
|
{ "x":6.5, "y":1 },
|
||||||
|
{ "x":7.5, "y":1 },
|
||||||
|
{ "x":8.5, "y":1 },
|
||||||
|
{ "x":9.5, "y":1 },
|
||||||
|
{ "x":10.5, "y":1 },
|
||||||
|
{ "x":11.5, "y":1 },
|
||||||
|
{ "x":12.5, "y":1 },
|
||||||
|
{ "x":13.5, "y":1, "w":1.5 },
|
||||||
|
|
||||||
|
{ "x":0, "y":2, "w":1.75 },
|
||||||
|
{ "x":1.75, "y":2 },
|
||||||
|
{ "x":2.75, "y":2 },
|
||||||
|
{ "x":3.75, "y":2 },
|
||||||
|
{ "x":4.75, "y":2 },
|
||||||
|
{ "x":5.75, "y":2 },
|
||||||
|
{ "x":6.75, "y":2 },
|
||||||
|
{ "x":7.75, "y":2 },
|
||||||
|
{ "x":8.75, "y":2 },
|
||||||
|
{ "x":9.75, "y":2 },
|
||||||
|
{ "x":10.75, "y":2 },
|
||||||
|
{ "x":11.75, "y":2 },
|
||||||
|
{ "x":12.75, "y":2, "w":2.25 },
|
||||||
|
|
||||||
|
{ "x":0, "y":3, "w":2.25 },
|
||||||
|
{ "x":2.25, "y":3 },
|
||||||
|
{ "x":3.25, "y":3 },
|
||||||
|
{ "x":4.25, "y":3 },
|
||||||
|
{ "x":5.25, "y":3 },
|
||||||
|
{ "x":6.25, "y":3 },
|
||||||
|
{ "x":7.25, "y":3 },
|
||||||
|
{ "x":8.25, "y":3 },
|
||||||
|
{ "x":9.25, "y":3 },
|
||||||
|
{ "x":10.25, "y":3 },
|
||||||
|
{ "x":11.25, "y":3 },
|
||||||
|
{ "x":12.25, "y":3, "w":1.75 },
|
||||||
|
{ "x":14, "y":3 },
|
||||||
|
|
||||||
|
{ "x":0, "y":4, "w":1.25 },
|
||||||
|
{ "x":1.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":2.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":3.75, "y":4, "w":6.25 },
|
||||||
|
{ "x":10, "y":4, "w":1.25 },
|
||||||
|
{ "x":11.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":12.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":13.75, "y":4, "w":1.25 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_60_ansi": {
|
||||||
|
"layout": [
|
||||||
|
{ "x":0, "y":0 },
|
||||||
|
{ "x":1, "y":0 },
|
||||||
|
{ "x":2, "y":0 },
|
||||||
|
{ "x":3, "y":0 },
|
||||||
|
{ "x":4, "y":0 },
|
||||||
|
{ "x":5, "y":0 },
|
||||||
|
{ "x":6, "y":0 },
|
||||||
|
{ "x":7, "y":0 },
|
||||||
|
{ "x":8, "y":0 },
|
||||||
|
{ "x":9, "y":0 },
|
||||||
|
{ "x":10, "y":0 },
|
||||||
|
{ "x":11, "y":0 },
|
||||||
|
{ "x":12, "y":0 },
|
||||||
|
{ "x":13, "y":0, "w":2 },
|
||||||
|
|
||||||
|
{ "x":0, "y":1, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":1 },
|
||||||
|
{ "x":2.5, "y":1 },
|
||||||
|
{ "x":3.5, "y":1 },
|
||||||
|
{ "x":4.5, "y":1 },
|
||||||
|
{ "x":5.5, "y":1 },
|
||||||
|
{ "x":6.5, "y":1 },
|
||||||
|
{ "x":7.5, "y":1 },
|
||||||
|
{ "x":8.5, "y":1 },
|
||||||
|
{ "x":9.5, "y":1 },
|
||||||
|
{ "x":10.5, "y":1 },
|
||||||
|
{ "x":11.5, "y":1 },
|
||||||
|
{ "x":12.5, "y":1 },
|
||||||
|
{ "x":13.5, "y":1, "w":1.5 },
|
||||||
|
|
||||||
|
{ "x":0, "y":2, "w":1.75 },
|
||||||
|
{ "x":1.75, "y":2 },
|
||||||
|
{ "x":2.75, "y":2 },
|
||||||
|
{ "x":3.75, "y":2 },
|
||||||
|
{ "x":4.75, "y":2 },
|
||||||
|
{ "x":5.75, "y":2 },
|
||||||
|
{ "x":6.75, "y":2 },
|
||||||
|
{ "x":7.75, "y":2 },
|
||||||
|
{ "x":8.75, "y":2 },
|
||||||
|
{ "x":9.75, "y":2 },
|
||||||
|
{ "x":10.75, "y":2 },
|
||||||
|
{ "x":11.75, "y":2 },
|
||||||
|
{ "x":12.75, "y":2, "w":2.25 },
|
||||||
|
|
||||||
|
{ "x":0, "y":3, "w":2.25 },
|
||||||
|
{ "x":2.25, "y":3 },
|
||||||
|
{ "x":3.25, "y":3 },
|
||||||
|
{ "x":4.25, "y":3 },
|
||||||
|
{ "x":5.25, "y":3 },
|
||||||
|
{ "x":6.25, "y":3 },
|
||||||
|
{ "x":7.25, "y":3 },
|
||||||
|
{ "x":8.25, "y":3 },
|
||||||
|
{ "x":9.25, "y":3 },
|
||||||
|
{ "x":10.25, "y":3 },
|
||||||
|
{ "x":11.25, "y":3 },
|
||||||
|
{ "x":12.25, "y":3, "w":2.75 },
|
||||||
|
|
||||||
|
{ "x":0, "y":4, "w":1.25 },
|
||||||
|
{ "x":1.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":2.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":3.75, "y":4, "w":6.25 },
|
||||||
|
{ "x":10, "y":4, "w":1.25 },
|
||||||
|
{ "x":11.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":12.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":13.75, "y":4, "w":1.25 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_60_tsangan_hhkb": {
|
||||||
|
"layout": [
|
||||||
|
{ "x":0, "y":0 },
|
||||||
|
{ "x":1, "y":0 },
|
||||||
|
{ "x":2, "y":0 },
|
||||||
|
{ "x":3, "y":0 },
|
||||||
|
{ "x":4, "y":0 },
|
||||||
|
{ "x":5, "y":0 },
|
||||||
|
{ "x":6, "y":0 },
|
||||||
|
{ "x":7, "y":0 },
|
||||||
|
{ "x":8, "y":0 },
|
||||||
|
{ "x":9, "y":0 },
|
||||||
|
{ "x":10, "y":0 },
|
||||||
|
{ "x":11, "y":0 },
|
||||||
|
{ "x":12, "y":0 },
|
||||||
|
{ "x":13, "y":0 },
|
||||||
|
{ "x":14, "y":0 },
|
||||||
|
|
||||||
|
{ "x":0, "y":1, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":1 },
|
||||||
|
{ "x":2.5, "y":1 },
|
||||||
|
{ "x":3.5, "y":1 },
|
||||||
|
{ "x":4.5, "y":1 },
|
||||||
|
{ "x":5.5, "y":1 },
|
||||||
|
{ "x":6.5, "y":1 },
|
||||||
|
{ "x":7.5, "y":1 },
|
||||||
|
{ "x":8.5, "y":1 },
|
||||||
|
{ "x":9.5, "y":1 },
|
||||||
|
{ "x":10.5, "y":1 },
|
||||||
|
{ "x":11.5, "y":1 },
|
||||||
|
{ "x":12.5, "y":1 },
|
||||||
|
{ "x":13.5, "y":1, "w":1.5 },
|
||||||
|
|
||||||
|
{ "x":0, "y":2, "w":1.75 },
|
||||||
|
{ "x":1.75, "y":2 },
|
||||||
|
{ "x":2.75, "y":2 },
|
||||||
|
{ "x":3.75, "y":2 },
|
||||||
|
{ "x":4.75, "y":2 },
|
||||||
|
{ "x":5.75, "y":2 },
|
||||||
|
{ "x":6.75, "y":2 },
|
||||||
|
{ "x":7.75, "y":2 },
|
||||||
|
{ "x":8.75, "y":2 },
|
||||||
|
{ "x":9.75, "y":2 },
|
||||||
|
{ "x":10.75, "y":2 },
|
||||||
|
{ "x":11.75, "y":2 },
|
||||||
|
{ "x":12.75, "y":2, "w":2.25 },
|
||||||
|
|
||||||
|
{ "x":0, "y":3, "w":2.25 },
|
||||||
|
{ "x":2.25, "y":3 },
|
||||||
|
{ "x":3.25, "y":3 },
|
||||||
|
{ "x":4.25, "y":3 },
|
||||||
|
{ "x":5.25, "y":3 },
|
||||||
|
{ "x":6.25, "y":3 },
|
||||||
|
{ "x":7.25, "y":3 },
|
||||||
|
{ "x":8.25, "y":3 },
|
||||||
|
{ "x":9.25, "y":3 },
|
||||||
|
{ "x":10.25, "y":3 },
|
||||||
|
{ "x":11.25, "y":3 },
|
||||||
|
{ "x":12.25, "y":3, "w":1.75 },
|
||||||
|
{ "x":14, "y":3 },
|
||||||
|
|
||||||
|
{ "x":0, "y":4, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":4 },
|
||||||
|
{ "x":2.5, "y":4, "w":1.5 },
|
||||||
|
{ "x":4, "y":4, "w":7 },
|
||||||
|
{ "x":11, "y":4, "w":1.5 },
|
||||||
|
{ "x":12.5, "y":4 },
|
||||||
|
{ "x":13.5, "y":4, "w":1.5 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/* Copyright 2020 Koichi Katano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_BASE,
|
||||||
|
_FN
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BASE] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
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_GRV, KC_BSPC,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
|
||||||
|
),
|
||||||
|
[_FN] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for Bakeneko 60
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/* Copyright 2020 Koichi Katano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_L0,
|
||||||
|
_L1,
|
||||||
|
_L2,
|
||||||
|
_L3
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_L0] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
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_GRV, KC_BSPC,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_L1),
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
|
||||||
|
),
|
||||||
|
[_L1] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_L2] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_L3] = LAYOUT_60_ansi_split_bs_rshift(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Bakeneko 60
|
||||||
|
|
||||||
|
An open source O-ring gasket mount keyboard
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
|
||||||
|
* Hardware Supported: Bakeneko 60
|
||||||
|
* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-60-pcb)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make bakeneko60:default
|
||||||
|
|
||||||
|
Flashing example for this keyboard:
|
||||||
|
|
||||||
|
make bakeneko60:default:flash
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi_split_bs_rshift 60_ansi 60_tsangan_hhkb
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/* Copyright 2020 Koichi Katano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bakeneko65.h"
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
/* Copyright 2020 Koichi Katano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT_65_ansi_split_bs( \
|
||||||
|
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
|
||||||
|
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k115, \
|
||||||
|
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, k215, \
|
||||||
|
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k315, \
|
||||||
|
k400, k401, k402, k406, k409, k410, k411, k412, k413, k415 \
|
||||||
|
) { \
|
||||||
|
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015 }, \
|
||||||
|
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, KC_NO, k115 }, \
|
||||||
|
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO, k215 }, \
|
||||||
|
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO, k315 }, \
|
||||||
|
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, k406, KC_NO, KC_NO, k409, k410, k411, k412, k413, KC_NO, k415 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_65_ansi( \
|
||||||
|
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k014, k015, \
|
||||||
|
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k115, \
|
||||||
|
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, k215, \
|
||||||
|
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k315, \
|
||||||
|
k400, k401, k402, k406, k409, k410, k411, k412, k413, k415 \
|
||||||
|
) { \
|
||||||
|
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, KC_NO, k014, k015 }, \
|
||||||
|
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, KC_NO, k115 }, \
|
||||||
|
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO, k215 }, \
|
||||||
|
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO, k315 }, \
|
||||||
|
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, k406, KC_NO, KC_NO, k409, k410, k411, k412, k413, KC_NO, k415 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_65_ansi_split_bs_2_right_mods( \
|
||||||
|
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
|
||||||
|
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k115, \
|
||||||
|
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, k215, \
|
||||||
|
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k315, \
|
||||||
|
k400, k401, k402, k406, k409, k411, k412, k413, k415 \
|
||||||
|
) { \
|
||||||
|
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015 }, \
|
||||||
|
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, KC_NO, k115 }, \
|
||||||
|
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO, k215 }, \
|
||||||
|
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO, k315 }, \
|
||||||
|
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, k406, KC_NO, KC_NO, k409, KC_NO, k411, k412, k413, KC_NO, k415 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_65_ansi_2_right_mods( \
|
||||||
|
k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k014, k015, \
|
||||||
|
k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k115, \
|
||||||
|
k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k213, k215, \
|
||||||
|
k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k315, \
|
||||||
|
k400, k401, k402, k406, k409, k411, k412, k413, k415 \
|
||||||
|
) { \
|
||||||
|
{ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, KC_NO, k014, k015 }, \
|
||||||
|
{ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, KC_NO, k115 }, \
|
||||||
|
{ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, KC_NO, k213, KC_NO, k215 }, \
|
||||||
|
{ k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO, k315 }, \
|
||||||
|
{ k400, k401, k402, KC_NO, KC_NO, KC_NO, k406, KC_NO, KC_NO, k409, KC_NO, k411, k412, k413, KC_NO, k415 } \
|
||||||
|
}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Koichi Katano
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x3A0E
|
||||||
|
#define PRODUCT_ID 0x4C82
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER kkatano
|
||||||
|
#define PRODUCT Bakeneko 65
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keyboard Matrix Assignments
|
||||||
|
*
|
||||||
|
* Change this to how you wired your keyboard
|
||||||
|
* COLS: AVR pins used for columns, left to right
|
||||||
|
* ROWS: AVR pins used for rows, top to bottom
|
||||||
|
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||||
|
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define MATRIX_ROW_PINS { E6, B7, F7, F4, F5 }
|
||||||
|
#define MATRIX_COL_PINS { F6, B0, F1, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, D1, D0 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is useful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
//#define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
|
||||||
|
/* disable these deprecated features by default */
|
||||||
|
#define NO_ACTION_MACRO
|
||||||
|
#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
/* Bootmagic Lite key configuration */
|
||||||
|
//#define BOOTMAGIC_LITE_ROW 0
|
||||||
|
//#define BOOTMAGIC_LITE_COLUMN 0
|
||||||
@@ -0,0 +1,313 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "Bakeneko 65",
|
||||||
|
"url": "https://github.com/kkatano/bakeneko-65-pcb",
|
||||||
|
"maintainer": "kkatano",
|
||||||
|
"width": 16,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_65_ansi_split_bs": {
|
||||||
|
"layout": [
|
||||||
|
{ "x":0, "y":0 },
|
||||||
|
{ "x":1, "y":0 },
|
||||||
|
{ "x":2, "y":0 },
|
||||||
|
{ "x":3, "y":0 },
|
||||||
|
{ "x":4, "y":0 },
|
||||||
|
{ "x":5, "y":0 },
|
||||||
|
{ "x":6, "y":0 },
|
||||||
|
{ "x":7, "y":0 },
|
||||||
|
{ "x":8, "y":0 },
|
||||||
|
{ "x":9, "y":0 },
|
||||||
|
{ "x":10, "y":0 },
|
||||||
|
{ "x":11, "y":0 },
|
||||||
|
{ "x":12, "y":0 },
|
||||||
|
{ "x":13, "y":0 },
|
||||||
|
{ "x":14, "y":0 },
|
||||||
|
{ "x":15, "y":0 },
|
||||||
|
|
||||||
|
{ "x":0, "y":1, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":1 },
|
||||||
|
{ "x":2.5, "y":1 },
|
||||||
|
{ "x":3.5, "y":1 },
|
||||||
|
{ "x":4.5, "y":1 },
|
||||||
|
{ "x":5.5, "y":1 },
|
||||||
|
{ "x":6.5, "y":1 },
|
||||||
|
{ "x":7.5, "y":1 },
|
||||||
|
{ "x":8.5, "y":1 },
|
||||||
|
{ "x":9.5, "y":1 },
|
||||||
|
{ "x":10.5, "y":1 },
|
||||||
|
{ "x":11.5, "y":1 },
|
||||||
|
{ "x":12.5, "y":1 },
|
||||||
|
{ "x":13.5, "y":1, "w":1.5 },
|
||||||
|
{ "x":15, "y":1 },
|
||||||
|
|
||||||
|
{ "x":0, "y":2, "w":1.75 },
|
||||||
|
{ "x":1.75, "y":2 },
|
||||||
|
{ "x":2.75, "y":2 },
|
||||||
|
{ "x":3.75, "y":2 },
|
||||||
|
{ "x":4.75, "y":2 },
|
||||||
|
{ "x":5.75, "y":2 },
|
||||||
|
{ "x":6.75, "y":2 },
|
||||||
|
{ "x":7.75, "y":2 },
|
||||||
|
{ "x":8.75, "y":2 },
|
||||||
|
{ "x":9.75, "y":2 },
|
||||||
|
{ "x":10.75, "y":2 },
|
||||||
|
{ "x":11.75, "y":2 },
|
||||||
|
{ "x":12.75, "y":2, "w":2.25 },
|
||||||
|
{ "x":15, "y":2 },
|
||||||
|
|
||||||
|
{ "x":0, "y":3, "w":2.25 },
|
||||||
|
{ "x":2.25, "y":3 },
|
||||||
|
{ "x":3.25, "y":3 },
|
||||||
|
{ "x":4.25, "y":3 },
|
||||||
|
{ "x":5.25, "y":3 },
|
||||||
|
{ "x":6.25, "y":3 },
|
||||||
|
{ "x":7.25, "y":3 },
|
||||||
|
{ "x":8.25, "y":3 },
|
||||||
|
{ "x":9.25, "y":3 },
|
||||||
|
{ "x":10.25, "y":3 },
|
||||||
|
{ "x":11.25, "y":3 },
|
||||||
|
{ "x":12.25, "y":3, "w":1.75 },
|
||||||
|
{ "x":14, "y":3 },
|
||||||
|
{ "x":15, "y":3 },
|
||||||
|
|
||||||
|
{ "x":0, "y":4, "w":1.25 },
|
||||||
|
{ "x":1.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":2.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":3.75, "y":4, "w":6.25 },
|
||||||
|
{ "x":10, "y":4 },
|
||||||
|
{ "x":11, "y":4 },
|
||||||
|
{ "x":12, "y":4 },
|
||||||
|
{ "x":13, "y":4 },
|
||||||
|
{ "x":14, "y":4 },
|
||||||
|
{ "x":15, "y":4 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_65_ansi": {
|
||||||
|
"layout": [
|
||||||
|
{ "x":0, "y":0 },
|
||||||
|
{ "x":1, "y":0 },
|
||||||
|
{ "x":2, "y":0 },
|
||||||
|
{ "x":3, "y":0 },
|
||||||
|
{ "x":4, "y":0 },
|
||||||
|
{ "x":5, "y":0 },
|
||||||
|
{ "x":6, "y":0 },
|
||||||
|
{ "x":7, "y":0 },
|
||||||
|
{ "x":8, "y":0 },
|
||||||
|
{ "x":9, "y":0 },
|
||||||
|
{ "x":10, "y":0 },
|
||||||
|
{ "x":11, "y":0 },
|
||||||
|
{ "x":12, "y":0 },
|
||||||
|
{ "x":13, "y":0, "w": 2 },
|
||||||
|
{ "x":15, "y":0 },
|
||||||
|
|
||||||
|
{ "x":0, "y":1, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":1 },
|
||||||
|
{ "x":2.5, "y":1 },
|
||||||
|
{ "x":3.5, "y":1 },
|
||||||
|
{ "x":4.5, "y":1 },
|
||||||
|
{ "x":5.5, "y":1 },
|
||||||
|
{ "x":6.5, "y":1 },
|
||||||
|
{ "x":7.5, "y":1 },
|
||||||
|
{ "x":8.5, "y":1 },
|
||||||
|
{ "x":9.5, "y":1 },
|
||||||
|
{ "x":10.5, "y":1 },
|
||||||
|
{ "x":11.5, "y":1 },
|
||||||
|
{ "x":12.5, "y":1 },
|
||||||
|
{ "x":13.5, "y":1, "w":1.5 },
|
||||||
|
{ "x":15, "y":1 },
|
||||||
|
|
||||||
|
{ "x":0, "y":2, "w":1.75 },
|
||||||
|
{ "x":1.75, "y":2 },
|
||||||
|
{ "x":2.75, "y":2 },
|
||||||
|
{ "x":3.75, "y":2 },
|
||||||
|
{ "x":4.75, "y":2 },
|
||||||
|
{ "x":5.75, "y":2 },
|
||||||
|
{ "x":6.75, "y":2 },
|
||||||
|
{ "x":7.75, "y":2 },
|
||||||
|
{ "x":8.75, "y":2 },
|
||||||
|
{ "x":9.75, "y":2 },
|
||||||
|
{ "x":10.75, "y":2 },
|
||||||
|
{ "x":11.75, "y":2 },
|
||||||
|
{ "x":12.75, "y":2, "w":2.25 },
|
||||||
|
{ "x":15, "y":2 },
|
||||||
|
|
||||||
|
{ "x":0, "y":3, "w":2.25 },
|
||||||
|
{ "x":2.25, "y":3 },
|
||||||
|
{ "x":3.25, "y":3 },
|
||||||
|
{ "x":4.25, "y":3 },
|
||||||
|
{ "x":5.25, "y":3 },
|
||||||
|
{ "x":6.25, "y":3 },
|
||||||
|
{ "x":7.25, "y":3 },
|
||||||
|
{ "x":8.25, "y":3 },
|
||||||
|
{ "x":9.25, "y":3 },
|
||||||
|
{ "x":10.25, "y":3 },
|
||||||
|
{ "x":11.25, "y":3 },
|
||||||
|
{ "x":12.25, "y":3, "w":1.75 },
|
||||||
|
{ "x":14, "y":3 },
|
||||||
|
{ "x":15, "y":3 },
|
||||||
|
|
||||||
|
{ "x":0, "y":4, "w":1.25 },
|
||||||
|
{ "x":1.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":2.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":3.75, "y":4, "w":6.25 },
|
||||||
|
{ "x":10, "y":4 },
|
||||||
|
{ "x":11, "y":4 },
|
||||||
|
{ "x":12, "y":4 },
|
||||||
|
{ "x":13, "y":4 },
|
||||||
|
{ "x":14, "y":4 },
|
||||||
|
{ "x":15, "y":4 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_65_ansi_split_bs_2_right_mods": {
|
||||||
|
"layout": [
|
||||||
|
{ "x":0, "y":0 },
|
||||||
|
{ "x":1, "y":0 },
|
||||||
|
{ "x":2, "y":0 },
|
||||||
|
{ "x":3, "y":0 },
|
||||||
|
{ "x":4, "y":0 },
|
||||||
|
{ "x":5, "y":0 },
|
||||||
|
{ "x":6, "y":0 },
|
||||||
|
{ "x":7, "y":0 },
|
||||||
|
{ "x":8, "y":0 },
|
||||||
|
{ "x":9, "y":0 },
|
||||||
|
{ "x":10, "y":0 },
|
||||||
|
{ "x":11, "y":0 },
|
||||||
|
{ "x":12, "y":0 },
|
||||||
|
{ "x":13, "y":0 },
|
||||||
|
{ "x":14, "y":0 },
|
||||||
|
{ "x":15, "y":0 },
|
||||||
|
|
||||||
|
{ "x":0, "y":1, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":1 },
|
||||||
|
{ "x":2.5, "y":1 },
|
||||||
|
{ "x":3.5, "y":1 },
|
||||||
|
{ "x":4.5, "y":1 },
|
||||||
|
{ "x":5.5, "y":1 },
|
||||||
|
{ "x":6.5, "y":1 },
|
||||||
|
{ "x":7.5, "y":1 },
|
||||||
|
{ "x":8.5, "y":1 },
|
||||||
|
{ "x":9.5, "y":1 },
|
||||||
|
{ "x":10.5, "y":1 },
|
||||||
|
{ "x":11.5, "y":1 },
|
||||||
|
{ "x":12.5, "y":1 },
|
||||||
|
{ "x":13.5, "y":1, "w":1.5 },
|
||||||
|
{ "x":15, "y":1 },
|
||||||
|
|
||||||
|
{ "x":0, "y":2, "w":1.75 },
|
||||||
|
{ "x":1.75, "y":2 },
|
||||||
|
{ "x":2.75, "y":2 },
|
||||||
|
{ "x":3.75, "y":2 },
|
||||||
|
{ "x":4.75, "y":2 },
|
||||||
|
{ "x":5.75, "y":2 },
|
||||||
|
{ "x":6.75, "y":2 },
|
||||||
|
{ "x":7.75, "y":2 },
|
||||||
|
{ "x":8.75, "y":2 },
|
||||||
|
{ "x":9.75, "y":2 },
|
||||||
|
{ "x":10.75, "y":2 },
|
||||||
|
{ "x":11.75, "y":2 },
|
||||||
|
{ "x":12.75, "y":2, "w":2.25 },
|
||||||
|
{ "x":15, "y":2 },
|
||||||
|
|
||||||
|
{ "x":0, "y":3, "w":2.25 },
|
||||||
|
{ "x":2.25, "y":3 },
|
||||||
|
{ "x":3.25, "y":3 },
|
||||||
|
{ "x":4.25, "y":3 },
|
||||||
|
{ "x":5.25, "y":3 },
|
||||||
|
{ "x":6.25, "y":3 },
|
||||||
|
{ "x":7.25, "y":3 },
|
||||||
|
{ "x":8.25, "y":3 },
|
||||||
|
{ "x":9.25, "y":3 },
|
||||||
|
{ "x":10.25, "y":3 },
|
||||||
|
{ "x":11.25, "y":3 },
|
||||||
|
{ "x":12.25, "y":3, "w":1.75 },
|
||||||
|
{ "x":14, "y":3 },
|
||||||
|
{ "x":15, "y":3 },
|
||||||
|
|
||||||
|
{ "x":0, "y":4, "w":1.25 },
|
||||||
|
{ "x":1.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":2.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":3.75, "y":4, "w":6.25 },
|
||||||
|
{ "x":10, "y":4, "w":1.5 },
|
||||||
|
{ "x":11.5, "y":4, "w":1.5 },
|
||||||
|
{ "x":13, "y":4 },
|
||||||
|
{ "x":14, "y":4 },
|
||||||
|
{ "x":15, "y":4 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_65_ansi_2_right_mods": {
|
||||||
|
"layout": [
|
||||||
|
{ "x":0, "y":0 },
|
||||||
|
{ "x":1, "y":0 },
|
||||||
|
{ "x":2, "y":0 },
|
||||||
|
{ "x":3, "y":0 },
|
||||||
|
{ "x":4, "y":0 },
|
||||||
|
{ "x":5, "y":0 },
|
||||||
|
{ "x":6, "y":0 },
|
||||||
|
{ "x":7, "y":0 },
|
||||||
|
{ "x":8, "y":0 },
|
||||||
|
{ "x":9, "y":0 },
|
||||||
|
{ "x":10, "y":0 },
|
||||||
|
{ "x":11, "y":0 },
|
||||||
|
{ "x":12, "y":0 },
|
||||||
|
{ "x":13, "y":0, "w": 2 },
|
||||||
|
{ "x":15, "y":0 },
|
||||||
|
|
||||||
|
{ "x":0, "y":1, "w":1.5 },
|
||||||
|
{ "x":1.5, "y":1 },
|
||||||
|
{ "x":2.5, "y":1 },
|
||||||
|
{ "x":3.5, "y":1 },
|
||||||
|
{ "x":4.5, "y":1 },
|
||||||
|
{ "x":5.5, "y":1 },
|
||||||
|
{ "x":6.5, "y":1 },
|
||||||
|
{ "x":7.5, "y":1 },
|
||||||
|
{ "x":8.5, "y":1 },
|
||||||
|
{ "x":9.5, "y":1 },
|
||||||
|
{ "x":10.5, "y":1 },
|
||||||
|
{ "x":11.5, "y":1 },
|
||||||
|
{ "x":12.5, "y":1 },
|
||||||
|
{ "x":13.5, "y":1, "w":1.5 },
|
||||||
|
{ "x":15, "y":1 },
|
||||||
|
|
||||||
|
{ "x":0, "y":2, "w":1.75 },
|
||||||
|
{ "x":1.75, "y":2 },
|
||||||
|
{ "x":2.75, "y":2 },
|
||||||
|
{ "x":3.75, "y":2 },
|
||||||
|
{ "x":4.75, "y":2 },
|
||||||
|
{ "x":5.75, "y":2 },
|
||||||
|
{ "x":6.75, "y":2 },
|
||||||
|
{ "x":7.75, "y":2 },
|
||||||
|
{ "x":8.75, "y":2 },
|
||||||
|
{ "x":9.75, "y":2 },
|
||||||
|
{ "x":10.75, "y":2 },
|
||||||
|
{ "x":11.75, "y":2 },
|
||||||
|
{ "x":12.75, "y":2, "w":2.25 },
|
||||||
|
{ "x":15, "y":2 },
|
||||||
|
|
||||||
|
{ "x":0, "y":3, "w":2.25 },
|
||||||
|
{ "x":2.25, "y":3 },
|
||||||
|
{ "x":3.25, "y":3 },
|
||||||
|
{ "x":4.25, "y":3 },
|
||||||
|
{ "x":5.25, "y":3 },
|
||||||
|
{ "x":6.25, "y":3 },
|
||||||
|
{ "x":7.25, "y":3 },
|
||||||
|
{ "x":8.25, "y":3 },
|
||||||
|
{ "x":9.25, "y":3 },
|
||||||
|
{ "x":10.25, "y":3 },
|
||||||
|
{ "x":11.25, "y":3 },
|
||||||
|
{ "x":12.25, "y":3, "w":1.75 },
|
||||||
|
{ "x":14, "y":3 },
|
||||||
|
{ "x":15, "y":3 },
|
||||||
|
|
||||||
|
{ "x":0, "y":4, "w":1.25 },
|
||||||
|
{ "x":1.25, "y":4, "w":1.25 },
|
||||||
|
{ "x":2.5, "y":4, "w":1.25 },
|
||||||
|
{ "x":3.75, "y":4, "w":6.25 },
|
||||||
|
{ "x":10, "y":4, "w":1.5 },
|
||||||
|
{ "x":11.5, "y":4, "w":1.5 },
|
||||||
|
{ "x":13, "y":4 },
|
||||||
|
{ "x":14, "y":4 },
|
||||||
|
{ "x":15, "y":4 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/* Copyright 2020 kkatano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_BASE,
|
||||||
|
_FN
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BASE] = LAYOUT_65_ansi_split_bs(
|
||||||
|
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_GRV, KC_BSPC, KC_HOME,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[_FN] = LAYOUT_65_ansi_split_bs(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# The default keymap for Bakeneko 65
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/* Copyright 2020 kkatano
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layer_names {
|
||||||
|
_L0,
|
||||||
|
_L1,
|
||||||
|
_L2,
|
||||||
|
_L3
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_L0] = LAYOUT_65_ansi_split_bs(
|
||||||
|
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_GRV, KC_BSPC, KC_HOME,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_L1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[_L1] = LAYOUT_65_ansi_split_bs(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_L2] = LAYOUT_65_ansi_split_bs(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_L3] = LAYOUT_65_ansi_split_bs(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Bakeneko 65
|
||||||
|
|
||||||
|
An open source O-ring gasket mount keyboard
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [kkatano](https://github.com/kkatano)
|
||||||
|
* Hardware Supported: Bakeneko 65
|
||||||
|
* Hardware Availability: [Open source on GitHub](https://github.com/kkatano/bakeneko-65-pcb)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make bakeneko65:default
|
||||||
|
|
||||||
|
Flashing example for this keyboard:
|
||||||
|
|
||||||
|
make bakeneko65:default:flash
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = no # Console for debug
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = no # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
|
|
||||||
|
LAYOUTS = 65_ansi
|
||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
# BMEK
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
BMEK combines the best of HHKB & Alice-likes. All PCB and case design files are open source.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [Bemeier](https://github.com/Bemeier)
|
||||||
|
* Hardware Supported: BMEK PCB rev1, rev2, rev3
|
||||||
|
* Hardware Availability: Case & PCB files: [github.com/bemeier/bmek](https://github.com/bemeier/bmek)
|
||||||
|
|
||||||
|
Make example for this keyboard, for an hhkb-like layout and keymap (after setting up your build environment):
|
||||||
|
|
||||||
|
make bemeier/bmek/rev3:default
|
||||||
|
|
||||||
|
Make the VIA compatible firmware:
|
||||||
|
|
||||||
|
make bemeier/bmek/rev3:via
|
||||||
|
|
||||||
|
The ```rev3```, denotes the version of the PCB.
|
||||||
|
Check on the PCB to find out which version you have, and set it to rev1, rev2 or rev3 accordingly (the BMEK group buy PCBs are all rev3).
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
|
|
||||||
|
# Layouts
|
||||||
|
|
||||||
|
Starting with rev3 (the version of the PCB to be shipped in the GB), the following layout options are supported:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Note that the keymap shown above may not accurately reflect the default keymap of the firmware (see the keymaps folder).
|
||||||
Executable
+23
@@ -0,0 +1,23 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "bmek.h"
|
||||||
|
|
||||||
|
__attribute__((weak))
|
||||||
|
void shutdown_user() {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_setrgb(255, 0, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
Executable
+58
@@ -0,0 +1,58 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#if defined(KEYBOARD_bemeier_bmek_rev1)
|
||||||
|
# include "rev1.h"
|
||||||
|
#elif defined(KEYBOARD_bemeier_bmek_rev2)
|
||||||
|
# include "rev2.h"
|
||||||
|
#elif defined(KEYBOARD_bemeier_bmek_rev3)
|
||||||
|
# include "rev3.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define XXX KC_NO // makes the switch matrix easier to read
|
||||||
|
|
||||||
|
// This layout is supported by all revisions
|
||||||
|
#define LAYOUT_hhkb(\
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K1E,\
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K2E,\
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,\
|
||||||
|
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E,\
|
||||||
|
K42, K43, K45, K48, K4A, K4B \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
|
||||||
|
{ XXX, XXX, K42, K43, XXX, K45, XXX, XXX, K48, XXX, K4A, K4B, XXX, XXX, XXX } \
|
||||||
|
}
|
||||||
|
|
||||||
|
// Layout exposing all keys (adding the ISO-style split left shift, which is supported starting rev3)
|
||||||
|
#define LAYOUT_all(\
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K1E,\
|
||||||
|
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K2E,\
|
||||||
|
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,\
|
||||||
|
K30, K31, K41, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E,\
|
||||||
|
K42, K43, K45, K48, K4A, K4B \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
|
||||||
|
{ XXX, K41, K42, K43, XXX, K45, XXX, XXX, K48, XXX, K4A, K4B, XXX, XXX, XXX } \
|
||||||
|
}
|
||||||
Executable
+47
@@ -0,0 +1,47 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x626D // BeMeier
|
||||||
|
#define PRODUCT_ID 0x656B // ErgonomicKeyboard
|
||||||
|
#define MANUFACTURER Bemeier
|
||||||
|
#define PRODUCT BMEK
|
||||||
|
|
||||||
|
#define DYNAMIC_KEYMAP_LAYER_COUNT 5
|
||||||
|
#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 20
|
||||||
|
|
||||||
|
/* Keyboard Matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 15
|
||||||
|
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
#define RGBLIGHT_EFFECT_BREATHING
|
||||||
|
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||||
|
#define RGBLIGHT_MODE_STATIC_GRADIENT
|
||||||
|
|
||||||
|
#define RGBLED_NUM 6
|
||||||
|
#define RGBLIGHT_HUE_STEP 8
|
||||||
|
#define RGBLIGHT_SAT_STEP 8
|
||||||
|
#define RGBLIGHT_VAL_STEP 8
|
||||||
|
#define RGBLIGHT_LIMIT_VAL 255
|
||||||
|
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
//#define RETRO_TAPPING
|
||||||
|
#define TAPPING_TERM 175
|
||||||
Executable
+25
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "bmek",
|
||||||
|
"url": "https://github.com/Bemeier/bmek",
|
||||||
|
"maintainer": "Bemeier",
|
||||||
|
"width": 18,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Home", "x":0, "y":0}, {"label":"Esc", "x":1.5, "y":0}, {"label":"!", "x":2.5, "y":0}, {"label":"@", "x":3.5, "y":0}, {"label":"#", "x":4.5, "y":0}, {"label":"$", "x":5.5, "y":0}, {"label":"%", "x":6.5, "y":0}, {"label":"^", "x":7.5, "y":0}, {"label":"&", "x":10, "y":0}, {"label":"*", "x":11, "y":0}, {"label":"(", "x":12, "y":0}, {"label":")", "x":13, "y":0}, {"label":"_", "x":14, "y":0}, {"label":"+", "x":15, "y":0}, {"label":"|", "x":16, "y":0}, {"label":"~", "x":17, "y":0},
|
||||||
|
{"label":"PgUp", "x":0, "y":1}, {"label":"Tab", "x":1.5, "y":1, "w":1.5}, {"label":"Q", "x":3, "y":1}, {"label":"W", "x":4, "y":1}, {"label":"E", "x":5, "y":1}, {"label":"R", "x":6, "y":1}, {"label":"T", "x":7, "y":1}, {"label":"Y", "x":9.5, "y":1}, {"label":"U", "x":10.5, "y":1}, {"label":"I", "x":11.5, "y":1}, {"label":"O", "x":12.5, "y":1}, {"label":"P", "x":13.5, "y":1}, {"label":"{", "x":14.5, "y":1}, {"label":"}", "x":15.5, "y":1}, {"label":"Backspace", "x":16.5, "y":1, "w":1.5},
|
||||||
|
{"label":"PgDn", "x":0, "y":2}, {"label":"Ctrl", "x":1.5, "y":2, "w":1.75}, {"label":"A", "x":3.25, "y":2}, {"label":"S", "x":4.25, "y":2}, {"label":"D", "x":5.25, "y":2}, {"label":"F", "x":6.25, "y":2}, {"label":"G", "x":7.25, "y":2}, {"label":"H", "x":9.75, "y":2}, {"label":"J", "x":10.75, "y":2}, {"label":"K", "x":11.75, "y":2}, {"label":"L", "x":12.75, "y":2}, {"label":":", "x":13.75, "y":2}, {"label":"\"", "x":14.75, "y":2}, {"label":"Enter", "x":15.75, "y":2, "w":2.25},
|
||||||
|
{"label":"End", "x":0, "y":3}, {"label":"Shift", "x":1.5, "y":3, "w":1.25}, {"label":"~", "x":2.75, "y":3}, {"label":"Z", "x":3.75, "y":3}, {"label":"X", "x":4.75, "y":3}, {"label":"C", "x":5.75, "y":3}, {"label":"V", "x":6.75, "y":3}, {"label":"B", "x":7.75, "y":3}, {"label":"B", "x":9.25, "y":3}, {"label":"N", "x":10.25, "y":3}, {"label":"M", "x":11.25, "y":3}, {"label":"<", "x":12.25, "y":3}, {"label":">", "x":13.25, "y":3}, {"label":"?", "x":14.25, "y":3}, {"label":"Shift", "x":15.25, "y":3, "w":1.75}, {"label":"Fn", "x":17, "y":3}, {"label":"Win", "x":3.75, "y":4}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":2.75}, {"x":9.25, "y":4, "w":2.75}, {"label":"Alt", "x":12, "y":4, "w":1.25}, {"label":"Win", "x":13.25, "y":4}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"LAYOUT_hhkb": {
|
||||||
|
"layout": [
|
||||||
|
{"label":"Home", "x":0, "y":0}, {"label":"Esc", "x":1.5, "y":0}, {"label":"!", "x":2.5, "y":0}, {"label":"@", "x":3.5, "y":0}, {"label":"#", "x":4.5, "y":0}, {"label":"$", "x":5.5, "y":0}, {"label":"%", "x":6.5, "y":0}, {"label":"^", "x":7.5, "y":0}, {"label":"&", "x":10, "y":0}, {"label":"*", "x":11, "y":0}, {"label":"(", "x":12, "y":0}, {"label":")", "x":13, "y":0}, {"label":"_", "x":14, "y":0}, {"label":"+", "x":15, "y":0}, {"label":"|", "x":16, "y":0}, {"label":"~", "x":17, "y":0},
|
||||||
|
{"label":"PgUp", "x":0, "y":1}, {"label":"Tab", "x":1.5, "y":1, "w":1.5}, {"label":"Q", "x":3, "y":1}, {"label":"W", "x":4, "y":1}, {"label":"E", "x":5, "y":1}, {"label":"R", "x":6, "y":1}, {"label":"T", "x":7, "y":1}, {"label":"Y", "x":9.5, "y":1}, {"label":"U", "x":10.5, "y":1}, {"label":"I", "x":11.5, "y":1}, {"label":"O", "x":12.5, "y":1}, {"label":"P", "x":13.5, "y":1}, {"label":"{", "x":14.5, "y":1}, {"label":"}", "x":15.5, "y":1}, {"label":"Backspace", "x":16.5, "y":1, "w":1.5},
|
||||||
|
{"label":"PgDn", "x":0, "y":2}, {"label":"Ctrl", "x":1.5, "y":2, "w":1.75}, {"label":"A", "x":3.25, "y":2}, {"label":"S", "x":4.25, "y":2}, {"label":"D", "x":5.25, "y":2}, {"label":"F", "x":6.25, "y":2}, {"label":"G", "x":7.25, "y":2}, {"label":"H", "x":9.75, "y":2}, {"label":"J", "x":10.75, "y":2}, {"label":"K", "x":11.75, "y":2}, {"label":"L", "x":12.75, "y":2}, {"label":":", "x":13.75, "y":2}, {"label":"\"", "x":14.75, "y":2}, {"label":"Enter", "x":15.75, "y":2, "w":2.25},
|
||||||
|
{"label":"End", "x":0, "y":3}, {"label":"Shift", "x":1.5, "y":3, "w":2.25}, {"label":"Z", "x":3.75, "y":3}, {"label":"X", "x":4.75, "y":3}, {"label":"C", "x":5.75, "y":3}, {"label":"V", "x":6.75, "y":3}, {"label":"B", "x":7.75, "y":3}, {"label":"B", "x":9.25, "y":3}, {"label":"N", "x":10.25, "y":3}, {"label":"M", "x":11.25, "y":3}, {"label":"<", "x":12.25, "y":3}, {"label":">", "x":13.25, "y":3}, {"label":"?", "x":14.25, "y":3}, {"label":"Shift", "x":15.25, "y":3, "w":1.75}, {"label":"Fn", "x":17, "y":3}, {"label":"Win", "x":3.75, "y":4}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":2.75}, {"x":9.25, "y":4, "w":2.75}, {"label":"Alt", "x":12, "y":4, "w":1.25}, {"label":"Win", "x":13.25, "y":4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
# Default BMEK Keymap
|
||||||
|
This is the default keymap for the BMEK, besides the left macro columns and the split spacebars.
|
||||||
|
It's uses the HHKB-like layout options (no split left shift, split backspace and split right shift).
|
||||||
|
Please checkout the diagrams in ```keymap.c``` for an overview of the keymap.
|
||||||
+76
@@ -0,0 +1,76 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_hhkb(
|
||||||
|
/* Default layer
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ F13 │ │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ F14 │ │ TAB │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ BSPC │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ F15 │ │ CTRL │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ ENTER │
|
||||||
|
├─────┤ ├────────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ F16 │ │ SHFT │ Z │ X │ C │ V │ B │ │ B │ N │ M │ , │ . │ / │ SHFT │ Fn │
|
||||||
|
└─────┘ └─────────┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ GUI │ ALT │ SPACE │ │ SPACE/Fn_1 │ ALT │ CTL │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
KC_F13, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
|
||||||
|
KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||||
|
KC_F15, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_F16, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
|
KC_LGUI, KC_LALT, KC_SPC, LT(1, KC_SPC), KC_RALT, KC_RCTL
|
||||||
|
), [1] = LAYOUT_hhkb(
|
||||||
|
/* Function Layer 1: Nav
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ RST │ │ PWR │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ INS │ DEL │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ │ │ CAPS │ │ │ │ │ │ │ │ │PSCR │SLCK │PAUS │ ^ │ │ │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ │ │ │ o) │ o)} │ Ø │EJCT │ │ │ * │ / │HOME │PGUP │ <- │ -> │ │
|
||||||
|
├─────┤ ├────────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ │ │ │ │ │ CFG │ │ │ │ + │ - │ │ END │PGDN │ v │ │ │
|
||||||
|
└─────┘ └─────────┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
RESET, KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
|
||||||
|
_______, KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
|
||||||
|
_______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
|
||||||
|
_______, _______, _______, _______, TG(2), _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
), [2] = LAYOUT_hhkb(
|
||||||
|
/* Function Layer 4: Firmware Config (TODO)
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ RST │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ │ │ │ RGB │RGB+ │RGB- │HUE+ │HUE- │ │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ │ │ │ │SPD+ │SPD- │SAT+ │SAT- │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├────────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ │ │ │ │ │ ___ │VAL+ │VAL- │ │ │ │ │ │ │ │ │ │
|
||||||
|
└─────┘ └─────────┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, RGB_SPI, RGB_SPD, RGB_SAI, RGB_SAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG(2), RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX
|
||||||
|
) };
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
# Default VIA Keymap
|
||||||
|
Compile the firmware with this keymap for use the BMEK with the [VIA configurator](https://caniusevia.com/).
|
||||||
|
Layout options can be configured in VIA (see first screenshot below).
|
||||||
|
|
||||||
|
## 0: Base Layer
|
||||||
|

|
||||||
|
|
||||||
|
## 1: Nav Layer
|
||||||
|

|
||||||
|
|
||||||
|
## 2: NUM Block
|
||||||
|

|
||||||
|
|
||||||
|
## 4: FW Config
|
||||||
|

|
||||||
|
|
||||||
|
## Alternative Preconfigured Layouts
|
||||||
|
TODO: Provide (links to) some alternative via keymaps after VIA support is landed upstream.
|
||||||
Executable
+114
@@ -0,0 +1,114 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
/* Default layer
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ F13 │ │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ F14 │ │ TAB │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ [ │ ] │ BSPC │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ F15 │ │ CTRL │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │ ENTER │
|
||||||
|
├─────┤ ├───────┬┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ F16 │ │ SHFT │`│ Z │ X │ C │ V │ B │ │ B │ N │ M │ , │ . │ / │ SHFT │ Fn │
|
||||||
|
└─────┘ └───────┴─┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ GUI │ ALT │ SPACE │ │ SPACE/Fn_1 │ ALT │ CTL │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
KC_F13, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
|
||||||
|
KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
|
||||||
|
KC_F15, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_F16, KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
|
KC_LGUI, KC_LALT, KC_SPC, LT(1, KC_SPC), KC_RALT, KC_RCTL
|
||||||
|
), [1] = LAYOUT_all(
|
||||||
|
/* Function Layer 1: Nav
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ RST │ │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ INS │ DEL │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ │ │ │ END │ ^ │HOME │PGUP │ │ │ │ │ │ │ |> │ << │ >> │ │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ │ │ │ <- │ v │ -> │PGDN │ │ │ <- │ v │ ^ │ -> │ o) │ o)} │ │
|
||||||
|
├─────┤ ├───────┬┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ │ │ │ │ │ │ CFG │ │ NUM │ │ │ │ │LDSKT│RDSKT│ Ø │ │ │
|
||||||
|
└─────┘ └───────┴─┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
RESET, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
|
||||||
|
_______, _______, KC_END, KC_UP, KC_HOME, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPLY, KC_MPRV, KC_MNXT, _______,
|
||||||
|
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLD, KC_VOLU, _______,
|
||||||
|
_______, _______, XXXXXXX, XXXXXXX, XXXXXXX, TG(4), XXXXXXX, XXXXXXX, TG(2), XXXXXXX, XXXXXXX, LCTL(LGUI(KC_LEFT)), LCTL(LGUI(KC_RGHT)), KC_MUTE, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
), [2] = LAYOUT_all(
|
||||||
|
/* Function Layer 2: Numpad example
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ 7 │ 8 │ 9 │ 0 │ - │ + │ │ │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ 4 │ 5 │ 6 │ │ / │ * │ │ │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ 1 │ 2 │ 3 │ │ │ │ KP_ENTER │
|
||||||
|
├─────┤ ├───────┬┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ ___ │ 0 │ . │ │ │ │ │ │
|
||||||
|
└─────┘ └───────┴─┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_0, KC_PMNS, KC_PPLS, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, KC_PSLS, KC_PAST, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, _______, _______, KC_PENT,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, TG(2), KC_KP_0, KC_PDOT, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
), [3] = LAYOUT_all(
|
||||||
|
/* Function Layer 3
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├───────┬┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
└─────┘ └───────┴─┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
), [4] = LAYOUT_all(
|
||||||
|
/* Function Layer 4: Firmware Config
|
||||||
|
┌─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ RST │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├─────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┘ ┌─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴─────┤
|
||||||
|
│ │ │ │ RGB │RGB+ │RGB- │HUE+ │HUE- │ │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├───────┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ └─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴───────┤
|
||||||
|
│ │ │ │ │SPD+ │SPD- │SAT+ │SAT- │ │ │ │ │ │ │ │ │
|
||||||
|
├─────┤ ├───────┬┴┬────┴┬────┴┬────┴┬────┴┬────┴┐ ┌┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴──────┬────┤
|
||||||
|
│ │ │ │ │ │ │ ___ │VAL+ │VAL- │ │ │ │ │ │ │ │ │ │
|
||||||
|
└─────┘ └───────┴─┼─────┼─────┴┬────┴─────┴─────┤ ├─────┴─────┴────┬┴─────┼─────┼─────┴───────┴────┘
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
└─────┴──────┴────────────────┘ └────────────────┴──────┴─────┘
|
||||||
|
*/
|
||||||
|
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, RGB_SPI, RGB_SPD, RGB_SAI, RGB_SAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG(4), RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
|
||||||
|
XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX
|
||||||
|
) };
|
||||||
Executable
+1
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
Executable
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS \
|
||||||
|
{ D4, D7, B6, B4, B7 }
|
||||||
|
#define MATRIX_COL_PINS \
|
||||||
|
{ F1, B0, B1, B2, B3, D0, D1, D2, C6, C7, F7, F6, F5, F4, B5 }
|
||||||
|
#define UNUSED_PINS \
|
||||||
|
{ D4, D5, F0, B7 }
|
||||||
|
#define RGB_DI_PIN E6
|
||||||
|
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "rev1.h"
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
SLEEP_LED_ENABLE = yes
|
||||||
|
SPLIT_KEYBOARD = no
|
||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
NKRO_ENABLE = yes
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
LTO_ENABLE = yes
|
||||||
Executable
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
#define DEVICE_VER 0x0002
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS \
|
||||||
|
{ F4, F5, D7, B5, B4 }
|
||||||
|
#define MATRIX_COL_PINS \
|
||||||
|
{ F6, B0, B1, F7, C7, C6, B6, F1, B2, B3, D6, D3, D2, D1, D0 }
|
||||||
|
#define UNUSED_PINS \
|
||||||
|
{ D4, D5, F0, B7 }
|
||||||
|
|
||||||
|
#define RGB_DI_PIN E6
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "rev2.h"
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
SLEEP_LED_ENABLE = yes
|
||||||
|
SPLIT_KEYBOARD = no
|
||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
NKRO_ENABLE = yes
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
LTO_ENABLE = yes
|
||||||
Executable
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
#define DEVICE_VER 0x0003
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS \
|
||||||
|
{ F1, B4, B5, D6, D7 }
|
||||||
|
#define MATRIX_COL_PINS \
|
||||||
|
{ B6, C6, C7, F7, F6, F5, F4, F0, B7, D0, D1, D2, D3, D5, D4 }
|
||||||
|
#define UNUSED_PINS \
|
||||||
|
{ D0, B1, B2, B3 }
|
||||||
|
|
||||||
|
#define RGB_DI_PIN E6
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "rev3.h"
|
||||||
Executable
+24
@@ -0,0 +1,24 @@
|
|||||||
|
/* Copyright 2020 bemeier
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
PCB rev3 has a number of layout options that rev2 and rev1 don't have,
|
||||||
|
however, to me just using "ALL_67" for all for all keymaps seems easier to
|
||||||
|
maintain than adding all possible permutations of layout options here.
|
||||||
|
*/
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite
|
||||||
|
MOUSEKEY_ENABLE = no
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = no
|
||||||
|
COMMAND_ENABLE = no
|
||||||
|
SLEEP_LED_ENABLE = yes
|
||||||
|
SPLIT_KEYBOARD = no
|
||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
NKRO_ENABLE = yes
|
||||||
|
RGBLIGHT_ENABLE = yes
|
||||||
|
AUDIO_ENABLE = no
|
||||||
|
LTO_ENABLE = yes
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
/* Copyright 2020 BINEPAD
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "bn003.h"
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/* Copyright 2020 BINEPAD
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT( \
|
||||||
|
K00, K01, K02 \
|
||||||
|
) { \
|
||||||
|
{ K00, K01, K02 } \
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
/* Copyright 2020 BINEPAD
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0x4249 // Binepad
|
||||||
|
#define PRODUCT_ID 0x4287
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Binepad
|
||||||
|
#define PRODUCT BN003
|
||||||
|
|
||||||
|
/* Key matrix size */
|
||||||
|
#define MATRIX_ROWS 1
|
||||||
|
#define MATRIX_COLS 3
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS { C6 }
|
||||||
|
#define MATRIX_COL_PINS { B4, B5, B6 }
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL*/
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
|
||||||
|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||||
|
//#define MATRIX_HAS_GHOST
|
||||||
|
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force NKRO
|
||||||
|
*
|
||||||
|
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||||
|
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||||
|
* makefile for this to work.)
|
||||||
|
*
|
||||||
|
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||||
|
* until the next keyboard reset.
|
||||||
|
*
|
||||||
|
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||||
|
* fully operational during normal computer usage.
|
||||||
|
*
|
||||||
|
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||||
|
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||||
|
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||||
|
* power-up.
|
||||||
|
*
|
||||||
|
|
||||||
|
*/
|
||||||
|
//#define FORCE_NKRO
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Magic Key Options
|
||||||
|
*
|
||||||
|
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||||
|
* the keyboard. They are best used in combination with the HID Listen program,
|
||||||
|
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||||
|
*
|
||||||
|
* The options below allow the magic key functionality to be changed. This is
|
||||||
|
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "BN003",
|
||||||
|
"url": "https://binepad.com",
|
||||||
|
"maintainer": "binepad",
|
||||||
|
"width": 3,
|
||||||
|
"height": 1,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"layout": [
|
||||||
|
{
|
||||||
|
"label": "K0",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "K1",
|
||||||
|
"x": 1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "K2",
|
||||||
|
"x": 2,
|
||||||
|
"y": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_0,
|
||||||
|
KC_1,
|
||||||
|
KC_2
|
||||||
|
),
|
||||||
|
[1] = LAYOUT(
|
||||||
|
KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO
|
||||||
|
),
|
||||||
|
[2] = LAYOUT(
|
||||||
|
KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# bn003 - Default layout
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_0,
|
||||||
|
KC_1,
|
||||||
|
KC_2
|
||||||
|
),
|
||||||
|
[1] = LAYOUT(
|
||||||
|
KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO
|
||||||
|
),
|
||||||
|
[2] = LAYOUT(
|
||||||
|
KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO
|
||||||
|
),
|
||||||
|
[3] = LAYOUT(
|
||||||
|
KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_NO
|
||||||
|
)
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# BINEPAD BN003
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A 3% macropad.
|
||||||
|
|
||||||
|
* Keyboard Maintainer: [BINEPAD]
|
||||||
|
* Hardware Supported: BN003 PCB (ATmega32U4)
|
||||||
|
* Hardware Availability: [Interest Check](https://www.binepad.com/bn003)
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make binepad/bn003:default
|
||||||
|
|
||||||
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Bootloader selection
|
||||||
|
BOOTLOADER = atmel-dfu
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# change yes to no to disable
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth
|
||||||
|
AUDIO_ENABLE = no # Audio output
|
||||||
+20
-16
@@ -43,31 +43,35 @@ void led_set_kb(uint8_t usb_led) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
led_config_t g_led_config = { {
|
led_config_t g_led_config = { {
|
||||||
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 },
|
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 },
|
||||||
{ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 },
|
{ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 },
|
||||||
{ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42 },
|
{ 28, NO_LED, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 },
|
||||||
{ NO_LED, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56 },
|
{ NO_LED, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 },
|
||||||
{ 57, 58, 59, NO_LED, NO_LED, NO_LED, NO_LED, 60, NO_LED, NO_LED, 61, 62, 63, 64}
|
{ 54, 55, 56, NO_LED, NO_LED, NO_LED, 57, NO_LED, NO_LED, 58, 59, 60, 61, 62 }
|
||||||
}, {
|
}, {
|
||||||
// Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
|
// Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
|
||||||
{ 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 },
|
{ 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 },
|
||||||
// Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], ,
|
// Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], ,
|
||||||
{ 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 },
|
{ 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 },
|
||||||
// Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
|
// Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
|
||||||
{ 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 },
|
{ 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 },
|
||||||
// LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
|
// LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
|
||||||
{ 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 },
|
{ 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 },
|
||||||
// Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
|
// Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
|
||||||
{ 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 }
|
{ 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 },
|
||||||
|
// UNDERGLOW
|
||||||
|
{ 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 }
|
||||||
}, {
|
}, {
|
||||||
// Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
|
// Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
|
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
|
||||||
// Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], ,
|
// Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], ,
|
||||||
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
|
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
|
||||||
// Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
|
// Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
|
||||||
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
|
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
|
||||||
// LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
|
// LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
|
||||||
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
|
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
|
||||||
// Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
|
// Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
|
||||||
1, 1, 1, 4, 1, 1, 1, 1, 1
|
1, 1, 1, 4, 1, 1, 1, 1, 1,
|
||||||
|
// UNDERGLOW
|
||||||
|
2, 2, 2, 2, 2, 2
|
||||||
} };
|
} };
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/* Copyright 2020 jbradforddillon
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), KC_UP, LT(1,KC_DEL),
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(2), KC_LEFT, KC_DOWN, KC_RGHT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT(
|
||||||
|
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||||
|
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[2] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, KC_MUTE,
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
I set this up the same way I set up my dz60 boards.
|
||||||
|
- Apple layout,
|
||||||
|
- Capslock replaced with grave/tilde,
|
||||||
|
- RShift doubles as forward slash, and
|
||||||
|
- Delete doubles as a layer shift.
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
_MAIN,
|
||||||
|
_RAISE,
|
||||||
|
_LOWER,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Readability keycodes
|
||||||
|
#define LOWER MO(_LOWER)
|
||||||
|
#define RAISE MO(_RAISE)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_MAIN] = LAYOUT_ortho_4x12(
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
|
||||||
|
KC_PIPE, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[_RAISE] = LAYOUT_ortho_4x12(
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
|
||||||
|
RESET, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
),
|
||||||
|
|
||||||
|
[_LOWER] = LAYOUT_ortho_4x12(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
|
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# The via keymap for boardsource 4x12 ortholinear keybaoard
|
||||||
|
|
||||||
|
This folder contains the [VIA](https://caniusevia.com/) configuration for the boardsource 4x12 ortholinear keybaoard
|
||||||
|
|
||||||
|
Maintained by: [gwillad](https://github.com/gwillad)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
VIA_ENABLE = yes
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "mattly.h"
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
// I apparently soldered in my switches on the wrong sides of the boards, so this is mirrored
|
||||||
|
|
||||||
|
[_BASE_MAC] = LAYOUT_split_3x6_3(
|
||||||
|
KC_SCLN, KC_P, O_CTL, I_ALT, U_GUI, KC_Y, KC_T, R_GUI, E_ALT, W_CTL, KC_Q, KC_BSPC,
|
||||||
|
KC_QUOT, MINSCTL, L_ALT, K_GUI, J_SFT, KC_H, KC_G, F_SFT, D_GUI, S_ALT, A_CTL, KC_CAPS,
|
||||||
|
KC_ENT, KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N, KC_B, KC_V, KC_C, KC_X, KC_Z, NAVLOCK,
|
||||||
|
DEL_WRP, BSP_SYM, SPC_SFT, SPC_SFT, TAB_NUM, ESC_HYP
|
||||||
|
),
|
||||||
|
|
||||||
|
[_OVER_WIN] = LAYOUT_split_3x6_3(
|
||||||
|
_______, _______, O_GUI, _______, U_CTL, _______, _______, R_CTL, _______, W_GUI, _______, _______,
|
||||||
|
_______, MINSGUI, _______, K_CTL, _______, _______, _______, _______, D_CTL, _______, A_GUI, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
[_SYMBOL] = LAYOUT_split_3x6_3(
|
||||||
|
_______, XXXXXXX, KC_ASTR, KC_PLUS, KC_RABK, KC_LABK, KC_RBRC, KC_LBRC, KC_TILD, KC_GRV, KC_AMPR, _______,
|
||||||
|
_______, KC_UNDS, KC_AT, KC_EXLM, KC_COLN, KC_SCLN, KC_RPRN, KC_LPRN, KC_EQL, KC_PERC, KC_DLR, _______,
|
||||||
|
_______, KC_QUES, KC_BSLS, KC_PIPE, KC_DQUO, KC_QUOT, KC_RCBR, KC_LCBR, KC_HASH, KC_CIRC, KC_HASH, XXXXXXX,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_NAVNUM] = LAYOUT_split_3x6_3(
|
||||||
|
KC_PLUS, KC_DOT, KC_P9, KC_P8, KC_P7, KC_DLR, KC_PGUP, M_FWORD, KC_UP, M_BWORD, M_NAVFW, M_NXWIN,
|
||||||
|
KC_MINS, KC_EQL, KC_P6, KC_P5, KC_P4, KC_PERC, KC_PGDN, KC_RGHT, KC_DOWN, KC_LEFT, M_NAVBK, M_PVWIN,
|
||||||
|
KC_ASTR, KC_COMM, KC_P3, KC_P2, KC_P1, KC_P0, M_NXTAB, KC_END, XXXXXXX, KC_HOME, M_PVTAB, _______,
|
||||||
|
KC_P0, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_NAVNUM_WIN] = LAYOUT_split_3x6_3(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, W_FWORD, _______, W_BWORD, W_NAVFW, W_NXWIN,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, W_NAVBK, W_PVWIN,
|
||||||
|
_______, _______, _______, _______, _______, _______, W_NXTAB, _______, _______, _______, W_PVTAB, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FUNCT] = LAYOUT_split_3x6_3(
|
||||||
|
KC_F15, KC_F12, KC_F9, KC_F8, KC_F7, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
|
||||||
|
KC_F14, KC_F11, KC_F6, KC_F5, KC_F4, KC_MUTE, XXXXXXX, TOG_WIN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
KC_F13, KC_F10, KC_F3, KC_F2, KC_F1, KC_VOLD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
[_FUNCT_WIN] = LAYOUT_split_3x6_3(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
MOUSEKEY_ENABLE = no
|
||||||
@@ -5,15 +5,17 @@
|
|||||||
Chavdai40 is very simple decoratable 40% keyboard
|
Chavdai40 is very simple decoratable 40% keyboard
|
||||||
|
|
||||||
* Keyboard Maintainer: [t-miyajima](https://github.com/dvorak55)
|
* Keyboard Maintainer: [t-miyajima](https://github.com/dvorak55)
|
||||||
* Hardware Supported: Chavdai40 PCB rev1
|
* Hardware Supported: Chavdai40 PCB rev1,rev2
|
||||||
* Hardware Availability: not yet available.
|
* Hardware Availability: [yushakobo](https://yushakobo.jp/shop/consign_chavdai40/)
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make chavdai40:default
|
make chavdai40/rev1:default
|
||||||
|
make chavdai40/rev2:default
|
||||||
|
|
||||||
Flashing example for this keyboard:
|
Flashing example for this keyboard:
|
||||||
|
|
||||||
make chavdai40:default:flash
|
make chavdai40/rev1:default:flash
|
||||||
|
make chavdai40/rev2:default:flash
|
||||||
|
|
||||||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||||
File renamed without changes.
Loaded 100 of 464 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user