mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-08-11 18:13:25 +00:00
Compare commits
130 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
047ef3cd12 | ||
![]() |
3502bbbd16 | ||
![]() |
e354cbe782 | ||
![]() |
06b6729b16 | ||
![]() |
61c644f6d0 | ||
![]() |
773242503c | ||
![]() |
ed773ab73c | ||
![]() |
e5823b5650 | ||
![]() |
417f089115 | ||
![]() |
193dd01f4e | ||
![]() |
d5d2a01db2 | ||
![]() |
8c5779f768 | ||
![]() |
a867cfc26d | ||
![]() |
fded67f1a9 | ||
![]() |
f6f4d85aa5 | ||
![]() |
8bffc61959 | ||
![]() |
77aafd8056 | ||
![]() |
a808c29726 | ||
![]() |
764dc18a81 | ||
![]() |
46e85ded47 | ||
![]() |
e9bf95e0f2 | ||
![]() |
e94c2df3f3 | ||
![]() |
9aaf4a5a9b | ||
![]() |
92a9e7c50b | ||
![]() |
87bb1a3890 | ||
![]() |
1ef4e305e3 | ||
![]() |
36ddb567cc | ||
![]() |
5e5047f071 | ||
![]() |
04826d1aa1 | ||
![]() |
7fde309799 | ||
![]() |
a939adb55c | ||
![]() |
6c11579876 | ||
![]() |
a12d58c6c9 | ||
![]() |
6a6a333c75 | ||
![]() |
5fb269b2b4 | ||
![]() |
c17323b0f5 | ||
![]() |
8d90cf36f1 | ||
![]() |
dde4120a1e | ||
![]() |
c0f4179117 | ||
![]() |
df3770551a | ||
![]() |
8fe3864fe7 | ||
![]() |
109c60feeb | ||
![]() |
b906af0073 | ||
![]() |
1f63dbfb8e | ||
![]() |
08794fef4e | ||
![]() |
dccb5711c7 | ||
![]() |
20424fd37f | ||
![]() |
86b123141b | ||
![]() |
3f79708095 | ||
![]() |
74b24e410b | ||
![]() |
003231aaf2 | ||
![]() |
ee71362f99 | ||
![]() |
b75f6691a1 | ||
![]() |
6c40b6856b | ||
![]() |
b33fdc299c | ||
![]() |
fc7a41fdce | ||
![]() |
98da119293 | ||
![]() |
61a8a60dfb | ||
![]() |
265b96a12c | ||
![]() |
bd70f5261c | ||
![]() |
dc8db6551d | ||
![]() |
9d0153dc70 | ||
![]() |
8bcb77cb9a | ||
![]() |
708b3f9192 | ||
![]() |
caeb213400 | ||
![]() |
db16271a72 | ||
![]() |
dc67fd9b87 | ||
![]() |
6ab5a7d048 | ||
![]() |
c5c5d37e08 | ||
![]() |
ed169a6b30 | ||
![]() |
5244b13173 | ||
![]() |
022e1fdac8 | ||
![]() |
3347b63d83 | ||
![]() |
d38696a493 | ||
![]() |
b593cfccbd | ||
![]() |
65eb0f939f | ||
![]() |
40d6766576 | ||
![]() |
d92994be71 | ||
![]() |
fe8b7619d3 | ||
![]() |
89a515913f | ||
![]() |
403536986d | ||
![]() |
4d2ae22690 | ||
![]() |
996880a1da | ||
![]() |
4493f31f80 | ||
![]() |
0880850b15 | ||
![]() |
8f70adc0b6 | ||
![]() |
87c2f97def | ||
![]() |
eb35f58a6e | ||
![]() |
249bc3a5c5 | ||
![]() |
86966fce69 | ||
![]() |
ec3df85f08 | ||
![]() |
b2fdb072e5 | ||
![]() |
869ede8e4a | ||
![]() |
8014fb14b6 | ||
![]() |
8e888794fa | ||
![]() |
c84d361e95 | ||
![]() |
f0d27e22aa | ||
![]() |
8bcac1c8f7 | ||
![]() |
6928bce461 | ||
![]() |
5995432202 | ||
![]() |
893d86cb89 | ||
![]() |
2ff646c642 | ||
![]() |
d953aa730e | ||
![]() |
4b4f1c6edb | ||
![]() |
41fb9120d0 | ||
![]() |
6e61126e08 | ||
![]() |
9dea8a7d86 | ||
![]() |
b26217414c | ||
![]() |
2d8266bd7b | ||
![]() |
bbd47fcaa2 | ||
![]() |
1a1b22ef07 | ||
![]() |
0978dca728 | ||
![]() |
ff6c70415c | ||
![]() |
d8971d707e | ||
![]() |
0e08fad5c5 | ||
![]() |
dcfa4712fb | ||
![]() |
5de86a05c3 | ||
![]() |
de10757f05 | ||
![]() |
b77d51f41a | ||
![]() |
9d6cea070e | ||
![]() |
4cae7becb1 | ||
![]() |
30209de9fd | ||
![]() |
16cd1d9bf7 | ||
![]() |
8e9d45d270 | ||
![]() |
b202e59322 | ||
![]() |
da6d6ce2e1 | ||
![]() |
82dd84e257 | ||
![]() |
0be7345640 | ||
![]() |
c0185116d7 | ||
![]() |
34ba7f1c18 |
25
.github/ISSUE_TEMPLATE/bug_report.md
vendored
25
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -18,19 +18,18 @@ assignees: ''
|
||||
|
||||
## System Information
|
||||
|
||||
- Keyboard:
|
||||
- Revision (if applicable):
|
||||
- Operating system:
|
||||
- AVR GCC version:
|
||||
<!-- Run `avr-gcc --version` to find this out. -->
|
||||
- ARM GCC version:
|
||||
<!-- Run `arm-none-eabi-gcc --version` to find this out. -->
|
||||
- QMK Firmware version:
|
||||
<!-- Run `git describe --abbrev=0 --tags` to find this out. -->
|
||||
- Any keyboard related software installed?
|
||||
- [ ] AutoHotKey
|
||||
- [ ] Karabiner
|
||||
- [ ] Other:
|
||||
**Keyboard:**
|
||||
**Revision (if applicable):**
|
||||
**Operating system:**
|
||||
**`qmk doctor` output:**
|
||||
```
|
||||
(Paste output here)
|
||||
```
|
||||
|
||||
**Any keyboard related software installed?**
|
||||
- [ ] AutoHotKey (Windows)
|
||||
- [ ] Karabiner (macOS)
|
||||
- [ ] Other:
|
||||
|
||||
## Additional Context
|
||||
|
||||
|
9
.github/workflows/develop_update.yml
vendored
9
.github/workflows/develop_update.yml
vendored
@@ -5,7 +5,6 @@ on:
|
||||
branches:
|
||||
- master
|
||||
|
||||
|
||||
jobs:
|
||||
develop_update:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -15,6 +14,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Checkout develop
|
||||
@@ -22,14 +22,7 @@ jobs:
|
||||
git fetch origin master develop
|
||||
git checkout develop
|
||||
|
||||
- name: Check if branch locked
|
||||
id: check_locked
|
||||
uses: andstor/file-existence-action@v1
|
||||
with:
|
||||
files: ".locked"
|
||||
|
||||
- name: Update develop from master
|
||||
if: steps.check_locked.outputs.files_exists == 'false'
|
||||
run: |
|
||||
git config --global user.name "QMK Bot"
|
||||
git config --global user.email "hello@qmk.fm"
|
||||
|
35
.github/workflows/feature_branch_update.yml
vendored
Normal file
35
.github/workflows/feature_branch_update.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
name: Update feature branches after develop merge
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
feature_branch_update:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: github.repository == 'qmk/qmk_firmware'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
branch:
|
||||
- xap
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Checkout branch
|
||||
run: |
|
||||
git fetch origin develop ${{ matrix.branch }}
|
||||
git checkout ${{ matrix.branch }}
|
||||
|
||||
- name: Update branch from develop
|
||||
run: |
|
||||
git config --global user.name "QMK Bot"
|
||||
git config --global user.email "hello@qmk.fm"
|
||||
git merge origin/develop
|
||||
git push origin ${{ matrix.branch }}
|
@@ -159,10 +159,14 @@ ifneq ("$(wildcard $(KEYMAP_JSON))", "")
|
||||
|
||||
# Add rules to generate the keymap files - indentation here is important
|
||||
$(KEYMAP_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
|
||||
$(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(KEYMAP_OUTPUT)/src/config.h: $(KEYMAP_JSON)
|
||||
$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_H)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --keymap $(KEYMAP) --output $(KEYMAP_H))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
generated-files: $(KEYMAP_OUTPUT)/src/config.h $(KEYMAP_OUTPUT)/src/keymap.c
|
||||
|
||||
@@ -326,13 +330,19 @@ endif
|
||||
CONFIG_H += $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/layouts.h
|
||||
|
||||
$(KEYBOARD_OUTPUT)/src/info_config.h: $(INFO_JSON_FILES)
|
||||
$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_config.h
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-config-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/info_config.h)
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(KEYBOARD_OUTPUT)/src/default_keyboard.h: $(INFO_JSON_FILES)
|
||||
$(QMK_BIN) generate-keyboard-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/default_keyboard.h
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-keyboard-h --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/default_keyboard.h)
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(KEYBOARD_OUTPUT)/src/layouts.h: $(INFO_JSON_FILES)
|
||||
$(QMK_BIN) generate-layouts --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/layouts.h
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-layouts --quiet --keyboard $(KEYBOARD) --output $(KEYBOARD_OUTPUT)/src/layouts.h)
|
||||
@$(BUILD_CMD)
|
||||
|
||||
generated-files: $(KEYBOARD_OUTPUT)/src/info_config.h $(KEYBOARD_OUTPUT)/src/default_keyboard.h $(KEYBOARD_OUTPUT)/src/layouts.h
|
||||
|
||||
|
@@ -63,6 +63,7 @@ MSG_COMPILING_CXX = Compiling:
|
||||
MSG_ASSEMBLING = Assembling:
|
||||
MSG_CLEANING = Cleaning project:
|
||||
MSG_CREATING_LIBRARY = Creating library:
|
||||
MSG_GENERATING = Generating:
|
||||
MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR) Some git submodules are out of date or modified.\n\
|
||||
Please consider running $(BOLD)make git-submodule$(NO_COLOR).\n\n
|
||||
MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR)
|
||||
|
@@ -33,7 +33,33 @@
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"enum": ["LAYOUT", "LAYOUT_planck_1x2uC"]
|
||||
"enum": [
|
||||
"LAYOUT",
|
||||
"LAYOUT_1x2uC",
|
||||
"LAYOUT_1x2uL",
|
||||
"LAYOUT_1x2uR",
|
||||
"LAYOUT_2x2uC",
|
||||
"LAYOUT_2x3uC",
|
||||
"LAYOUT_625uC",
|
||||
"LAYOUT_ANSI_DEFAULT",
|
||||
"LAYOUT_JP",
|
||||
"LAYOUT_ortho_3x12_1x2uC",
|
||||
"LAYOUT_ortho_4x12_1x2uC",
|
||||
"LAYOUT_ortho_4x12_1x2uL",
|
||||
"LAYOUT_ortho_4x12_1x2uR",
|
||||
"LAYOUT_ortho_5x12_1x2uC",
|
||||
"LAYOUT_ortho_5x12_2x2uC",
|
||||
"LAYOUT_ortho_5x14_1x2uC",
|
||||
"LAYOUT_ortho_5x14_1x2uL",
|
||||
"LAYOUT_ortho_5x14_1x2uR",
|
||||
"LAYOUT_planck_1x2uC",
|
||||
"LAYOUT_planck_1x2uL",
|
||||
"LAYOUT_planck_1x2uR",
|
||||
"LAYOUT_preonic_1x2uC",
|
||||
"LAYOUT_preonic_1x2uL",
|
||||
"LAYOUT_preonic_1x2uR",
|
||||
"LAYOUT_reviung34_2uL"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
|
@@ -109,6 +109,7 @@
|
||||
},
|
||||
"layouts": {
|
||||
"type": "object",
|
||||
"propertyNames": {"$ref": "qmk.definitions.v1#/layout_macro"},
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
@@ -15,11 +15,11 @@
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"features": {
|
||||
"bootmagic_lite": true,
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -188,7 +188,7 @@ cli.log.info('Reading from %s and writing to %s', cli.args.filename, cli.args.ou
|
||||
|
||||
# Testing, and Linting, and Formatting (oh my!)
|
||||
|
||||
We use nose2, flake8, and yapf to test, lint, and format code. You can use the `pytest` and `format-py` subcommands to run these tests:
|
||||
We use nose2, flake8, and yapf to test, lint, and format code. You can use the `pytest` and `format-python` subcommands to run these tests:
|
||||
|
||||
### Testing and Linting
|
||||
|
||||
@@ -196,7 +196,7 @@ We use nose2, flake8, and yapf to test, lint, and format code. You can use the `
|
||||
|
||||
### Formatting
|
||||
|
||||
qmk format-py
|
||||
qmk format-python
|
||||
|
||||
## Formatting Details
|
||||
|
||||
|
@@ -23,14 +23,35 @@ And to trigger the bootloader, you hold this key down when plugging the keyboard
|
||||
|
||||
## Split Keyboards
|
||||
|
||||
When handedness is predetermined via an option like `SPLIT_HAND_PIN`, you might need to configure a different key between halves. To do so, add these entries to your `config.h` file:
|
||||
When [handedness](feature_split_keyboard.md#setting-handedness) is predetermined via options like `SPLIT_HAND_PIN` or `EE_HANDS`, you might need to configure a different key between halves. To identify the correct key for the right half, examine the split key matrix defined in the `<keyboard>.h` file, e.g.:
|
||||
|
||||
```c
|
||||
#define LAYOUT_split_3x5_2( \
|
||||
L01, L02, L03, L04, L05, R01, R02, R03, R04, R05, \
|
||||
L06, L07, L08, L09, L10, R06, R07, R08, R09, R10, \
|
||||
L11, L12, L13, L14, L15, R11, R12, R13, R14, R15, \
|
||||
L16, L17, R16, R17 \
|
||||
) \
|
||||
{ \
|
||||
{ L01, L02, L03, L04, L05 }, \
|
||||
{ L06, L07, L08, L09, L10 }, \
|
||||
{ L11, L12, L13, L14, L15 }, \
|
||||
{ L16, L17, KC_NO, KC_NO, KC_NO }, \
|
||||
{ R01, R02, R03, R04, R05 }, \
|
||||
{ R06, R07, R08, R09, R10 }, \
|
||||
{ R11, R12, R13, R14, R15 }, \
|
||||
{ R16, R17, KC_NO, KC_NO, KC_NO } \
|
||||
}
|
||||
```
|
||||
|
||||
If you pick the top right key for the right half, it is `R05` on the top layout. Within the key matrix below, `R05` is located on row 4 columnn 4. To use that key as the right half's Bootmagic Lite trigger, add these entries to your `config.h` file:
|
||||
|
||||
```c
|
||||
#define BOOTMAGIC_LITE_ROW_RIGHT 4
|
||||
#define BOOTMAGIC_LITE_COLUMN_RIGHT 1
|
||||
#define BOOTMAGIC_LITE_COLUMN_RIGHT 4
|
||||
```
|
||||
|
||||
By default, these values are not set.
|
||||
?> These values are not set by default.
|
||||
|
||||
## Advanced Bootmagic Lite
|
||||
|
||||
@@ -51,7 +72,7 @@ void bootmagic_lite(void) {
|
||||
}
|
||||
```
|
||||
|
||||
You can additional feature here. For instance, resetting the EEPROM or requiring additional keys to be pressed to trigger Bootmagic Lite. Keep in mind that `bootmagic_lite` is called before a majority of features are initialized in the firmware.
|
||||
You can define additional logic here. For instance, resetting the EEPROM or requiring additional keys to be pressed to trigger Bootmagic Lite. Keep in mind that `bootmagic_lite` is called before a majority of features are initialized in the firmware.
|
||||
|
||||
## Addenda
|
||||
|
||||
|
@@ -245,7 +245,7 @@ The following configuration options are only available when using `SPLIT_POINTIN
|
||||
| `pointing_device_get_report(void)` | Returns the current mouse report (as a `mouse_report_t` data structure). |
|
||||
| `pointing_device_set_report(mouse_report)` | Sets the mouse report to the assigned `mouse_report_t` data structured passed to the function. |
|
||||
| `pointing_device_send(void)` | Sends the current mouse report to the host system. Function can be replaced. |
|
||||
| `has_mouse_report_changed(old, new)` | Compares the old and new `mouse_report_t` data and returns true only if it has changed. |
|
||||
| `has_mouse_report_changed(new_report, old_report)` | Compares the old and new `mouse_report_t` data and returns true only if it has changed. |
|
||||
| `pointing_device_adjust_by_defines(mouse_report)` | Applies rotations and invert configurations to a raw mouse report. |
|
||||
|
||||
|
||||
@@ -276,14 +276,14 @@ The report_mouse_t (here "mouseReport") has the following properties:
|
||||
To manually manipulate the mouse reports outside of the `pointing_device_task_*` functions, you can use:
|
||||
|
||||
* `pointing_device_get_report()` - Returns the current report_mouse_t that represents the information sent to the host computer
|
||||
* `pointing_device_set_report(report_mouse_t newMouseReport)` - Overrides and saves the report_mouse_t to be sent to the host computer
|
||||
* `pointing_device_set_report(report_mouse_t mouse_report)` - Overrides and saves the report_mouse_t to be sent to the host computer
|
||||
* `pointing_device_send()` - Sends the mouse report to the host and zeroes out the report.
|
||||
|
||||
When the mouse report is sent, the x, y, v, and h values are set to 0 (this is done in `pointing_device_send()`, which can be overridden to avoid this behavior). This way, button states persist, but movement will only occur once. For further customization, both `pointing_device_init` and `pointing_device_task` can be overridden.
|
||||
|
||||
Additionally, by default, `pointing_device_send()` will only send a report when the report has actually changed. This prevents it from continuously sending mouse reports, which will keep the host system awake. This behavior can be changed by creating your own `pointing_device_send()` function.
|
||||
|
||||
Also, you use the `has_mouse_report_changed(new, old)` function to check to see if the report has changed.
|
||||
Also, you use the `has_mouse_report_changed(new_report, old_report)` function to check to see if the report has changed.
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -325,7 +325,8 @@ report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
|
||||
if (set_scrolling) {
|
||||
mouse_report.h = mouse_report.x;
|
||||
mouse_report.v = mouse_report.y;
|
||||
mouse_report.x = mouse_report.y = 0
|
||||
mouse_report.x = 0;
|
||||
mouse_report.y = 0;
|
||||
}
|
||||
return mouse_report;
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@ In order to flash a microcontroller over USB, it needs something called a bootlo
|
||||
|
||||
However, it can sometimes happen that the bootloader becomes corrupted and needs reflashing, or you may want to change the bootloader to another one. It's not possible to do this with the existing bootloader, because, of course, it is already running, and cannot overwrite itself. Instead, you will need to ISP flash the microcontroller.
|
||||
|
||||
There are several different kinds of bootloaders available for AVR microcontrollers. Most STM32 ARM-based microcontrollers already have a USB-capable bootloader in ROM, so generally do not need to be ISP flashed.
|
||||
There are several different kinds of bootloaders available for AVR microcontrollers. Most STM32 ARM-based microcontrollers already have a USB-capable bootloader in ROM, so generally do not need to be ISP flashed. The one current exception is the [STM32F103](#flashing-stm32duino-bootloader).
|
||||
|
||||
## Hardware
|
||||
|
||||
@@ -260,3 +260,93 @@ For mass production purposes, it is possible to join the bootloader and QMK firm
|
||||
4. Save it as a new file, for example `<keyboard>_<keymap>_production.hex`.
|
||||
|
||||
You can then ISP flash this combined firmware instead, which allows you to skip the extra step of flashing the QMK firmware over USB.
|
||||
|
||||
## Flashing STM32Duino Bootloader
|
||||
|
||||
As mentioned above, *most* supported STM32 devices already possess a USB DFU bootloader which cannot be overwritten, however the ROM bootloader in the STM32F103 used on the Bluepill is not USB capable. In this case an ST-Link V2 dongle is required to upload the STM32Duino bootloader to the device. These can be readily purchased for relatively cheap on eBay and other places.
|
||||
|
||||
This bootloader is a descendant of the Maple bootloader by Leaflabs, and is compatible with dfu-util.
|
||||
|
||||
### Software
|
||||
|
||||
To communicate with the ST-Link, you must install the following packages:
|
||||
|
||||
* **macOS:** `brew install stlink openocd`
|
||||
* **Windows (MSYS2):** `pacman -S mingw-w64-x86_64-stlink mingw-w64-x86_64-openocd`
|
||||
* **Linux:** will vary by distribution, but will likely be `stlink` and `openocd` through your particular package manager
|
||||
|
||||
Additionally, you may need to update the ST-Link's firmware with the [`STSW-LINK007`](https://www.st.com/en/development-tools/stsw-link007.html) application. Note you will be asked to provide your name and email address if you do not have an ST.com account (this does not create one).
|
||||
|
||||
Finally, the bootloader binary itself can be downloaded from [here](https://github.com/rogerclarkmelbourne/STM32duino-bootloader/blob/master/bootloader_only_binaries/generic_boot20_pc13.bin).
|
||||
|
||||
### Wiring
|
||||
|
||||
Connect the four-pin header on the end of the Bluepill to the matching pins on the ST-Link (the pinout will usually be printed on the side):
|
||||
|
||||
|ST-Link |Bluepill|
|
||||
|-------------|--------|
|
||||
|`GND` (6) |`GND` |
|
||||
|`SWCLK` (2) |`DCLK` |
|
||||
|`SWDIO` (4) |`DIO` |
|
||||
|`3.3V` (8) |`3.3` |
|
||||
|
||||
### Flashing
|
||||
|
||||
Firstly, make sure both jumpers on the Bluepill are set to 0.
|
||||
|
||||
Check that the ST-Link can talk to the Bluepill by running `st-info --probe`:
|
||||
|
||||
```
|
||||
Found 1 stlink programmers
|
||||
version: V2J37S7
|
||||
serial: 2C1219002B135937334D4E00
|
||||
flash: 65536 (pagesize: 1024)
|
||||
sram: 20480
|
||||
chipid: 0x0410
|
||||
descr: F1xx Medium-density
|
||||
```
|
||||
|
||||
If the reported `chipid` is `0x0410`, everything is working. If it is `0x0000`, check your wiring, and try swapping the `SWDIO` and `SWCLK` pins, as some ST-Link dongles may have incorrect pinouts.
|
||||
|
||||
Next, run the following command:
|
||||
|
||||
```
|
||||
st-flash --reset --format binary write <path-to-bootloader> 0x08000000
|
||||
```
|
||||
|
||||
where `<path-to-bootloader>` is the path to the bootloader `.bin` file above. You can run this command from the directory you downloaded it to, so that you can simply pass in the filename.
|
||||
|
||||
If all goes well, you should get output similar to the following:
|
||||
|
||||
```
|
||||
st-flash 1.7.0
|
||||
2022-03-08T12:16:30 INFO common.c: F1xx Medium-density: 20 KiB SRAM, 64 KiB flash in at least 1 KiB pages.
|
||||
file generic_boot20_pc13.bin md5 checksum: 333c30605e739ce9bedee5999fdaf81b, stlink checksum: 0x0008e534
|
||||
2022-03-08T12:16:30 INFO common.c: Attempting to write 7172 (0x1c04) bytes to stm32 address: 134217728 (0x8000000)
|
||||
2022-03-08T12:16:30 INFO common.c: Flash page at addr: 0x08000000 erased
|
||||
2022-03-08T12:16:30 INFO common.c: Flash page at addr: 0x08000400 erased
|
||||
2022-03-08T12:16:31 INFO common.c: Flash page at addr: 0x08000800 erased
|
||||
2022-03-08T12:16:31 INFO common.c: Flash page at addr: 0x08000c00 erased
|
||||
2022-03-08T12:16:31 INFO common.c: Flash page at addr: 0x08001000 erased
|
||||
2022-03-08T12:16:31 INFO common.c: Flash page at addr: 0x08001400 erased
|
||||
2022-03-08T12:16:31 INFO common.c: Flash page at addr: 0x08001800 erased
|
||||
2022-03-08T12:16:31 INFO common.c: Flash page at addr: 0x08001c00 erased
|
||||
2022-03-08T12:16:31 INFO common.c: Finished erasing 8 pages of 1024 (0x400) bytes
|
||||
2022-03-08T12:16:31 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL
|
||||
2022-03-08T12:16:31 INFO flash_loader.c: Successfully loaded flash loader in sram
|
||||
2022-03-08T12:16:31 INFO flash_loader.c: Clear DFSR
|
||||
8/ 8 pages written
|
||||
2022-03-08T12:16:31 INFO common.c: Starting verification of write complete
|
||||
2022-03-08T12:16:31 INFO common.c: Flash written and verified! jolly good!
|
||||
2022-03-08T12:16:31 WARN common.c: NRST is not connected
|
||||
```
|
||||
|
||||
Otherwise, if you receive an `Unknown memory region` error, run the following command to unlock the STM32F103:
|
||||
|
||||
```
|
||||
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "init; reset halt; stm32f1x unlock 0; reset halt; exit"
|
||||
```
|
||||
|
||||
Then re-plug the ST-Link and try again.
|
||||
|
||||
After all of this, unplug the Bluepill from the ST-Link and connect it to USB. It should now be ready to flash using dfu-util, the QMK CLI or Toolbox.
|
||||
|
@@ -275,14 +275,14 @@ $ qmk kle2json -f kle.txt -f
|
||||
Ψ Wrote out to info.json
|
||||
```
|
||||
|
||||
## `qmk format-py`
|
||||
## `qmk format-python`
|
||||
|
||||
このコマンドは `qmk_firmware` 内の python コードを整形します。
|
||||
|
||||
**使用法**:
|
||||
|
||||
```
|
||||
qmk format-py
|
||||
qmk format-python
|
||||
```
|
||||
|
||||
## `qmk pytest`
|
||||
|
@@ -192,7 +192,7 @@ cli.log.info('Reading from %s and writing to %s', cli.args.filename, cli.args.ou
|
||||
|
||||
# テスト、リントおよびフォーマット
|
||||
|
||||
nose2、flake8 および yapf を使ってコードをテスト、リントおよびフォーマットします。これらのテストを実行するために `pytest` と `format-py` サブコマンドを使うことができます。
|
||||
nose2、flake8 および yapf を使ってコードをテスト、リントおよびフォーマットします。これらのテストを実行するために `pytest` と `format-python` サブコマンドを使うことができます。
|
||||
|
||||
### テストとリント
|
||||
|
||||
@@ -200,7 +200,7 @@ nose2、flake8 および yapf を使ってコードをテスト、リントお
|
||||
|
||||
### フォーマット
|
||||
|
||||
qmk format-py
|
||||
qmk format-python
|
||||
|
||||
## フォーマットの詳細
|
||||
|
||||
|
@@ -16,7 +16,7 @@ POINTING_DEVICE_ENABLE = yes
|
||||
マウスレポートを操作するために、以下の関数を使うことができます:
|
||||
|
||||
* `pointing_device_get_report()` - ホストコンピュータに送信された情報を表す現在の report_mouse_t を返します。
|
||||
* `pointing_device_set_report(report_mouse_t newMouseReport)` - ホストコンピュータに送信される report_mouse_t を上書き保存します。
|
||||
* `pointing_device_set_report(report_mouse_t mouse_report)` - ホストコンピュータに送信される report_mouse_t を上書き保存します。
|
||||
|
||||
report_mouse_t (ここでは "mouseReport") が以下のプロパティを持つことを覚えておいてください:
|
||||
|
||||
@@ -34,7 +34,7 @@ report_mouse_t (ここでは "mouseReport") が以下のプロパティを持つ
|
||||
|
||||
さらに、デフォルトでは、`pointing_device_send()` はレポートが実際に変更された場合のみレポートを送信します。これにより、マウスレポートが継続的に送信されてホストシステムが起動されたままになることを防ぎます。この動作は、独自の `pointing_device_send()` 関数を作成することで変更できます。
|
||||
|
||||
また、`has_mouse_report_changed(new, old)` 関数を使って、レポートが変更されたかどうかを確認できます。(訳注:独自の `pointing_device_send()` 関数を作成する場合でも、その中で `has_mouse_report_changed(new, old)` 関数でチェックして、デフォルトの `pointing_device_send()` と類似の無駄なレポートの抑制をして、ホストシステムがスリープ状態に入れる余地を残すようにしておくのが良いでしょう。)
|
||||
また、`has_mouse_report_changed(new_report, old_report)` 関数を使って、レポートが変更されたかどうかを確認できます。(訳注:独自の `pointing_device_send()` 関数を作成する場合でも、その中で `has_mouse_report_changed(new_report, old_report)` 関数でチェックして、デフォルトの `pointing_device_send()` と類似の無駄なレポートの抑制をして、ホストシステムがスリープ状態に入れる余地を残すようにしておくのが良いでしょう。)
|
||||
|
||||
以下の例では、カスタムキーを使ってマウスをクリックし垂直および水平方向に127単位スクロールし、リリースされた時にそれを全て元に戻します - なぜならこれは完全に便利な機能だからです。いいですか、以下はひとつの例です:
|
||||
|
||||
|
@@ -132,7 +132,7 @@ The main part of this file is the `keymaps[]` definition. This is where you list
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
After this you'll find a list of LAYOUT() macros. A LAYOUT() is simply a list of keys to define a single layer. Typically you'll have one or more "base layers" (such as QWERTY, Dvorak, or Colemak) and then you'll layer on top of that one or more "function" layers. Due to the way layers are processed you can't overlay a "lower" layer on top of a "higher" layer.
|
||||
After this you'll find the layer definitions. Typically you'll have one or more "base layers" (such as QWERTY, Dvorak, or Colemak) and then you'll layer on top of that one or more "function" layers. Due to the way layers are processed you can't overlay a "lower" layer on top of a "higher" layer.
|
||||
|
||||
`keymaps[][MATRIX_ROWS][MATRIX_COLS]` in QMK holds the 16 bit action code (sometimes referred as the quantum keycode) in it. For the keycode representing typical keys, its high byte is 0 and its low byte is the USB HID usage ID for keyboard.
|
||||
|
||||
@@ -153,7 +153,9 @@ Here is an example of the Clueboard's base layer:
|
||||
|
||||
Some interesting things to note about this:
|
||||
|
||||
* From a C source point of view it's only a single array, but we have embedded whitespace to more easily visualize where each key is on the physical device.
|
||||
* The layer is defined using the LAYOUT macro, traditionally defined in the keyboard's `.h` file.
|
||||
* The LAYOUT macro takes a single list of keycodes, but we have written it in the C source using embedded whitespace and newlines to visualize where each key is on the physical device.
|
||||
* The LAYOUT macro hides and handles the mapping to the hardware's key scan matrix.
|
||||
* Plain keyboard scancodes are prefixed with KC_, while "special" keys are not.
|
||||
* The upper left key activates custom function 0 (`F(0)`)
|
||||
* The "Fn" key is defined with `MO(_FL)`, which moves to the `_FL` layer while that key is being held down.
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# List of Useful Core Functions To Make Your Keyboard Better
|
||||
|
||||
There are a lot of hidden functions in QMK that are incredible useful, or may add a bit of functionality that you've been wanting. Functions that are specific to certain features are not included here, as those will be on their respective feature page.
|
||||
There are a lot of hidden functions in QMK that are incredibly useful, or may add a bit of functionality that you've been wanting. Functions that are specific to certain features are not included here, as those will be on their respective feature page.
|
||||
|
||||
## (OLKB) Tri Layers :id=olkb-tri-layers
|
||||
|
||||
|
@@ -28,11 +28,11 @@ The `info.json` file is a JSON formatted dictionary with the following keys avai
|
||||
* `layout_aliases`
|
||||
* A dictionary containing layout aliases. The key is the alias and the value is a layout in `layouts` it maps to.
|
||||
* `layouts`
|
||||
* Physical Layout representations. See the [Layout Format](#layout_format) section for more detail.
|
||||
* Physical Layout representations. See the [Layout Format](#layout-format) section for more detail.
|
||||
* `matrix_pins`
|
||||
* Configure the pins corresponding to columns and rows, or direct pins. See the [Matrix Pins](#matrix_pins) section for more detail.
|
||||
* Configure the pins corresponding to columns and rows, or direct pins. See the [Matrix Pins](#matrix-pins) section for more detail.
|
||||
* `rgblight`
|
||||
* Configure the [RGB Lighting feature](feature_rgblight.md). See the [RGB Lighting](#rgb_lighting) section for more detail.
|
||||
* Configure the [RGB Lighting feature](feature_rgblight.md). See the [RGB Lighting](#rgb-lighting) section for more detail.
|
||||
* `usb`
|
||||
* Configure USB VID, PID, and other parameters. See the [USB](#USB) section for more detail.
|
||||
|
||||
|
115
docs/tap_hold.md
115
docs/tap_hold.md
@@ -126,6 +126,61 @@ The code which decides between the tap and hold actions of dual-role keys suppor
|
||||
|
||||
Note that until the tap-or-hold decision completes (which happens when either the dual-role key is released, or the tapping term has expired, or the extra condition for the selected decision mode is satisfied), key events are delayed and not transmitted to the host immediately. The default mode gives the most delay (if the dual-role key is held down, this mode always waits for the whole tapping term), and the other modes may give less delay when other keys are pressed, because the hold action may be selected earlier.
|
||||
|
||||
### Default Mode
|
||||
Example sequence 1 (the `L` key is also mapped to `KC_RGHT` on layer 2):
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+---------------|--------------------+
|
||||
| +-------------|-------+ |
|
||||
| | LT(2, KC_A) | | |
|
||||
| +-------------|-------+ |
|
||||
| | +--------------+ |
|
||||
| | | KC_L | |
|
||||
| | +--------------+ |
|
||||
+---------------|--------------------+
|
||||
```
|
||||
The above sequence would send a `KC_RGHT`, since `LT(2, KC_A)` is held longer than the `TAPPING_TERM`.
|
||||
|
||||
---
|
||||
|
||||
Example sequence 2 (the `L` key is also mapped to `KC_RGHT` on layer 2):
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+-----------------------------|------+
|
||||
| +---------------+ | |
|
||||
| | LT(2, KC_A) | | |
|
||||
| +---------------+ | |
|
||||
| +--------------+ | |
|
||||
| | KC_L | | |
|
||||
| +--------------+ | |
|
||||
+-----------------------------|------+
|
||||
```
|
||||
The above sequence will not send `KC_RGHT` but `KC_A` `KC_L` instead, since `LT(2, KC_A)` is not held longer than the `TAPPING_TERM`.
|
||||
|
||||
---
|
||||
|
||||
Example sequence 3 (Mod Tap):
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+---------------------------|--------+
|
||||
| +-------------+ | |
|
||||
| | SFT_T(KC_A) | | |
|
||||
| +-------------+ | |
|
||||
| +--------------+ | |
|
||||
| | KC_X | | |
|
||||
| +--------------+ | |
|
||||
+---------------------------|--------+
|
||||
```
|
||||
Based previous examples, you might have expected the output of the above sequence to be `KC_A` `KC_X`
|
||||
since `SFT_T(KC_A)` is NOT held longer than the `TAPPING_TERM`.
|
||||
However, the actual output would be capital `X` (`SHIFT` + `x`) due to reasons
|
||||
explained under [Ignore Mod Tap Interrupt](#ignore-mod-tap-interrupt).
|
||||
|
||||
|
||||
|
||||
### Permissive Hold
|
||||
|
||||
The “permissive hold” mode can be enabled for all dual-role keys by adding the corresponding option to `config.h`:
|
||||
@@ -145,6 +200,18 @@ An example of a sequence which is affected by the “permissive hold” mode:
|
||||
- `KC_L` Up
|
||||
- `LT(2, KC_A)` Up
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+---------------------------|--------+
|
||||
| +----------------------+ | |
|
||||
| | LT(2, KC_A) | | |
|
||||
| +----------------------+ | |
|
||||
| +--------------+ | |
|
||||
| | KC_L | | |
|
||||
| +--------------+ | |
|
||||
+---------------------------|--------+
|
||||
```
|
||||
|
||||
Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `PERMISSIVE_HOLD` option enabled, the Layer Tap key is considered as a layer switch if another key is tapped, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2). We could describe this sequence as a “nested press” (the modified key's key down and key up events are “nested” between the dual-role key's key down and key up events).
|
||||
|
||||
However, this slightly different sequence will not be affected by the “permissive hold” mode:
|
||||
@@ -154,6 +221,18 @@ However, this slightly different sequence will not be affected by the “permiss
|
||||
- `LT(2, KC_A)` Up
|
||||
- `KC_L` Up
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+---------------------------|--------+
|
||||
| +-------------+ | |
|
||||
| | LT(2, KC_A) | | |
|
||||
| +-------------+ | |
|
||||
| +--------------+ | |
|
||||
| | KC_L | | |
|
||||
| +--------------+ | |
|
||||
+---------------------------|--------+
|
||||
```
|
||||
|
||||
In the sequence above the dual-role key is released before the other key is released, and if that happens within the tapping term, the “permissive hold” mode will still choose the tap action for the dual-role key, and the sequence will be registered as `al` by the host. We could describe this as a “rolling press” (the two keys' key down and key up events behave as if you were rolling a ball across the two keys, first pressing each key down in sequence and then releasing them in the same order).
|
||||
|
||||
?> The `PERMISSIVE_HOLD` option also affects Mod Tap keys, but this may not be noticeable if you do not also enable the `IGNORE_MOD_TAP_INTERRUPT` option for those keys, because the default handler for Mod Tap keys also considers both the “nested press” and “rolling press” sequences like shown above as a modifier hold, not the tap action. If you do not enable `IGNORE_MOD_TAP_INTERRUPT`, the effect of `PERMISSIVE_HOLD` on Mod Tap keys would be limited to reducing the delay before the key events are made visible to the host.
|
||||
@@ -198,6 +277,18 @@ An example of a sequence which is affected by the “hold on other key press”
|
||||
- `LT(2, KC_A)` Up
|
||||
- `KC_L` Up
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+---------------------------|--------+
|
||||
| +-------------+ | |
|
||||
| | LT(2, KC_A) | | |
|
||||
| +-------------+ | |
|
||||
| +--------------+ | |
|
||||
| | KC_L | | |
|
||||
| +--------------+ | |
|
||||
+---------------------------|--------+
|
||||
```
|
||||
|
||||
Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `HOLD_ON_OTHER_KEY_PRESS` option enabled, the Layer Tap key is considered as a layer switch if another key is pressed, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2).
|
||||
|
||||
?> The `HOLD_ON_OTHER_KEY_PRESS` option also affects Mod Tap keys, but this may not be noticeable if you do not also enable the `IGNORE_MOD_TAP_INTERRUPT` option for those keys, because the default handler for Mod Tap keys also considers the “rolling press” sequence like shown above as a modifier hold, not the tap action. If you do not enable `IGNORE_MOD_TAP_INTERRUPT`, the effect of `HOLD_ON_OTHER_KEY_PRESS` on Mod Tap keys would be limited to reducing the delay before the key events are made visible to the host.
|
||||
@@ -245,6 +336,18 @@ An example of a sequence which will be affected by the `IGNORE_MOD_TAP_INTERRUPT
|
||||
- `SFT_T(KC_A)` Up
|
||||
- `KC_X` Up
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+---------------------------|--------+
|
||||
| +-------------+ | |
|
||||
| | SFT_T(KC_A) | | |
|
||||
| +-------------+ | |
|
||||
| +--------------+ | |
|
||||
| | KC_X | | |
|
||||
| +--------------+ | |
|
||||
+---------------------------|--------+
|
||||
```
|
||||
|
||||
Normally, this would send a capital `X` (`SHIFT`+`x`), even if the sequence is performed faster than the `TAPPING_TERM`. However, if the `IGNORE_MOD_TAP_INTERRUPT` option is enabled, the `SFT_T(KC_A)` key must be held longer than the `TAPPING_TERM` to register the hold action. A quick tap will output `ax` in this case, while a hold will still output a capital `X` (`SHIFT`+`x`).
|
||||
|
||||
However, if the `HOLD_ON_OTHER_KEY_PRESS` option is enabled in addition to `IGNORE_MOD_TAP_INTERRUPT`, the above sequence will again send a capital `X` (`SHIFT`+`x`) even if performed faster that the `TAPPING_TERM`. The difference from the default configuration is that by default the host will receive the key events only after the `SFT_T(KC_A)` key is released, but with the `HOLD_ON_OTHER_KEY_PRESS` option the host will start receiving key events when the `KC_X` key is pressed.
|
||||
@@ -327,6 +430,18 @@ Holding and releasing a dual function key without pressing another key will resu
|
||||
|
||||
For instance, holding and releasing `LT(2, KC_SPC)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPC` instead.
|
||||
|
||||
```
|
||||
TAPPING_TERM
|
||||
+-----------------|------------------+
|
||||
| +---------------|-------+ |
|
||||
| | LT(2, KC_SPC) | | |
|
||||
| +---------------|-------+ |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
+-----------------|------------------+
|
||||
```
|
||||
|
||||
For more granular control of this feature, you can add the following to your `config.h`:
|
||||
|
||||
```c
|
||||
|
@@ -8,27 +8,22 @@ This document attempts to explain how the QMK firmware works from a very high le
|
||||
|
||||
## Startup
|
||||
|
||||
You can think of QMK as no different from any other computer program. It is started, performs its tasks, and then ends. The entry point for the program is the `main()` function, just like it is on any other C program. However, for a newcomer to QMK it can be confusing because the `main()` function appears in multiple places, and it can be hard to tell which one to look at.
|
||||
You can think of QMK as no different from any other computer program. It is started and performs its tasks, but this program never finishes. Like other C programs, the entry point is the `main()` function. For QMK, the `main()` function is found in [`quantum/main.c`](https://github.com/qmk/qmk_firmware/blob/0.15.13/quantum/main.c#L55).
|
||||
|
||||
The reason for this is the different platforms that QMK supports. The most common platform is `lufa`, which runs on AVR processors such at the atmega32u4. We also support `chibios` and `vusb`.
|
||||
If you browse through the `main()` function you'll find that it starts by initializing any hardware that has been configured (including USB to the host). The most common platform for QMK is `lufa`, which runs on AVR processors such as the atmega32u4. When compiled for that platform, it will invoke for example `platform_setup()` in [`platforms/avr/platform.c`](https://github.com/qmk/qmk_firmware/blob/0.15.13/platforms/avr/platform.c#L19) and `protocol_setup()` in [`tmk_core/protocol/lufa/lufa.c`](https://github.com/qmk/qmk_firmware/blob/0.15.13/tmk_core/protocol/lufa/lufa.c#L1066). It will use other implementations when compiled for other platforms like `chibios` and `vusb`. At first glance, it can look like a lot of functionality but most of the time the code will be disabled by `#define`s.
|
||||
|
||||
We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/protocol/lufa/lufa.c#L1028). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/protocol/lufa/lufa.c#L1069). This is [The Main Loop](#the-main-loop).
|
||||
The `main()` function will then start the core part of the program with a [`while (true)`](https://github.com/qmk/qmk_firmware/blob/0.15.13/quantum/main.c#L63). This is [The Main Loop](#the-main-loop).
|
||||
|
||||
## The Main Loop
|
||||
|
||||
This section of code is called "The Main Loop" because it's responsible for looping over the same set of instructions forever. This is where QMK dispatches out to the functions responsible for making the keyboard do everything it is supposed to do. At first glance it can look like a lot of functionality but most of the time the code will be disabled by `#define`'s.
|
||||
This section of code is called "The Main Loop" because it's responsible for looping over the same set of instructions forever, without ever reaching the end. This is where QMK dispatches out to the functions responsible for making the keyboard do everything it is supposed to do.
|
||||
|
||||
```
|
||||
keyboard_task();
|
||||
```
|
||||
|
||||
This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/keyboard.c#L216), and it is responsible for detecting changes in the matrix and turning status LEDs on and off.
|
||||
The main loop will call [`protocol_task()`](https://github.com/qmk/qmk_firmware/blob/0.15.13/quantum/main.c#L38), which in turn will call `keyboard_task()` in [`quantum/keyboard.c`](https://github.com/qmk/qmk_firmware/blob/0.15.13/quantum/keyboard.c#L377). This is where all the keyboard specific functionality is dispatched, and it is responsible for detecting changes in the matrix and turning status LEDs on and off.
|
||||
|
||||
Within `keyboard_task()` you'll find code to handle:
|
||||
|
||||
* [Matrix Scanning](#matrix-scanning)
|
||||
* Mouse Handling
|
||||
* Serial Link(s)
|
||||
* Keyboard status LEDs (Caps Lock, Num Lock, Scroll Lock)
|
||||
|
||||
#### Matrix Scanning
|
||||
|
@@ -64,5 +64,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -58,5 +58,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xE117
|
||||
#define PRODUCT_ID 0x6161
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 0xC7
|
||||
#define PRODUCT 61Key
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 14
|
||||
@@ -143,10 +136,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#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
|
||||
//#define BOOTMAGIC_LITE_COLUMN 0
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "61Key",
|
||||
"manufacturer": "0xC7",
|
||||
"url": "",
|
||||
"maintainer": "RealEmanGaming",
|
||||
"usb": {
|
||||
"vid": "0xE117",
|
||||
"pid": "0x6161",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layout_aliases": {
|
||||
"LAYOUT": "LAYOUT_60_ansi"
|
||||
},
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "config_common.h"
|
||||
// clang-format off
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xCB00
|
||||
#define PRODUCT_ID 0x1337
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 0xCB
|
||||
#define PRODUCT 1337
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
#define MATRIX_COLS 3
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "0xCB 1337",
|
||||
"keyboard_name": "1337",
|
||||
"manufacturer": "0xCB",
|
||||
"url": "https://0xCB.dev",
|
||||
"maintainer": "Conor-Burns",
|
||||
"usb": {
|
||||
"vid": "0xCB00",
|
||||
"pid": "0x1337",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@@ -18,12 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
// clang-format off
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xCB00
|
||||
#define PRODUCT_ID 0xA455
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 0xCB
|
||||
#define PRODUCT Static
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 8
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "0xCB Static",
|
||||
"keyboard_name": "Static",
|
||||
"manufacturer": "0xCB",
|
||||
"url": "https://0xCB.dev",
|
||||
"maintainer": "Conor-Burns",
|
||||
"usb": {
|
||||
"vid": "0xCB00",
|
||||
"pid": "0xA455",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layout_aliases": {
|
||||
"LAYOUT": "LAYOUT_all"
|
||||
},
|
||||
|
@@ -17,11 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.*/
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
#define VENDOR_ID 0x7C88 // "hw" = haierwangwei2005
|
||||
#define PRODUCT_ID 0x7C99 // "10b" = 10bleoledhub
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER haierwangwei2005
|
||||
#define PRODUCT 10bleoledhub
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "10bleoledhub",
|
||||
"manufacturer": "haierwangwei2005",
|
||||
"url": "https://github.com/haierwangwei2005/10BLE-OLED-HUB",
|
||||
"maintainer": "haierwangwei2005",
|
||||
"usb": {
|
||||
"vid": "0x7C88",
|
||||
"pid": "0x7C99",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6F75 // OU
|
||||
#define PRODUCT_ID 0x6873
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT 1up60hse
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 14
|
||||
@@ -115,5 +108,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "1up60hse",
|
||||
"manufacturer": "1upkeyboards",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x6F75",
|
||||
"pid": "0x6873",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_60_ansi": {
|
||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||
|
@@ -20,13 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6F75 // OU
|
||||
#define PRODUCT_ID 0x6874 // HT
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT 1up60hte
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 14
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "1up60hte",
|
||||
"manufacturer": "1upkeyboards",
|
||||
"url": "https://www.1upkeyboards.com/shop/controllers/1up-rgb-60-pcb-hte/",
|
||||
"maintainer": "1upkeyboards",
|
||||
"usb": {
|
||||
"vid": "0x6F75",
|
||||
"pid": "0x6874",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layout_aliases": {
|
||||
"LAYOUT_tsangan": "LAYOUT_60_tsangan_hhkb"
|
||||
},
|
||||
|
@@ -2,13 +2,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6F75 // OU
|
||||
#define PRODUCT_ID 0x7267 // RG
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT 1UP RGB Underglow PCB
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "1up60rgb",
|
||||
"keyboard_name": "1UP RGB Underglow PCB",
|
||||
"manufacturer": "1upkeyboards",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x6F75",
|
||||
"pid": "0x7267",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6F75 // "ou"
|
||||
#define PRODUCT_ID 0x5516 // "U" 16
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT super16
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 4
|
||||
@@ -188,8 +181,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "super16",
|
||||
"manufacturer": "1upkeyboards",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x6F75",
|
||||
"pid": "0x5516",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}]
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x6F75 // OU
|
||||
#define PRODUCT_ID 0x5517
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 1upkeyboards
|
||||
#define PRODUCT super16v2
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 4
|
||||
@@ -142,10 +135,6 @@
|
||||
//#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
|
||||
|
@@ -1,10 +1,16 @@
|
||||
{
|
||||
"keyboard_name": "super16v2",
|
||||
"manufacturer": "1upkeyboards",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x6F75",
|
||||
"pid": "0x5517",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -76,7 +76,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* disable these deprecated features by default */
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
@@ -19,14 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0xCA42
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER monksoffunk
|
||||
#define PRODUCT cassette42
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 1
|
||||
#define MATRIX_COLS 6
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "cassette42",
|
||||
"url": "http://www.sho-k.co.uk/tech/1246.html",
|
||||
"maintainer": "monksoffunk",
|
||||
"keyboard_name": "cassette42",
|
||||
"manufacturer": "monksoffunk",
|
||||
"url": "http://www.sho-k.co.uk/tech/1246.html",
|
||||
"maintainer": "monksoffunk",
|
||||
"usb": {
|
||||
"vid": "0xFEED",
|
||||
"pid": "0xCA42",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"x":0.5, "y":0.75}, {"x":2.5, "y":0.75}, {"x":0, "y":1.75}, {"x":1, "y":1.75}, {"x":2, "y":1.75}, {"x":3, "y":1.75}]
|
||||
|
@@ -73,5 +73,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -73,5 +73,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -2,13 +2,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x6090
|
||||
#define DEVICE_VER 0x0002
|
||||
#define MANUFACTURER WoodKeys.click
|
||||
#define PRODUCT 2Key2Crawl
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 2
|
||||
#define MATRIX_COLS 7
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "2Key2CrawlPad",
|
||||
"keyboard_name": "2Key2Crawl",
|
||||
"manufacturer": "WoodKeys.click",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0xFEED",
|
||||
"pid": "0x6090",
|
||||
"device_version": "0.0.2"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@@ -2,13 +2,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x1234
|
||||
#define PRODUCT_ID 0x5678
|
||||
#define DEVICE_VER 0x0000
|
||||
#define MANUFACTURER 8o7wer
|
||||
#define PRODUCT 30wer
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
#define MATRIX_COLS 13
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "30wer",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"keyboard_name": "30wer",
|
||||
"manufacturer": "8o7wer",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x1234",
|
||||
"pid": "0x5678",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@@ -18,13 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x1209
|
||||
#define PRODUCT_ID 0x3304
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 3-Key-Ecosystem
|
||||
#define PRODUCT 2key2
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 1
|
||||
#define MATRIX_COLS 2
|
||||
@@ -98,7 +91,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* disable these deprecated features by default */
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "3-Key-Ecosystem 2key2: 2x1 macro-keyboard",
|
||||
"keyboard_name": "2key2",
|
||||
"manufacturer": "3-Key-Ecosystem",
|
||||
"url": "https://github.com/softplus/3keyecosystem/tree/main/2key2",
|
||||
"maintainer": "softplus",
|
||||
"usb": {
|
||||
"vid": "0x1209",
|
||||
"pid": "0x3304",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@@ -56,8 +56,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* disable these deprecated features by default */
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
|
||||
|
@@ -56,8 +56,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* disable these deprecated features by default */
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // 40%
|
||||
#define PRODUCT_ID 0x0F25
|
||||
#define DEVICE_VER 0x0100
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 5x5 Keyboard
|
||||
|
||||
#define USE_SERIAL
|
||||
/* serial.c configuration for split keyboard */
|
||||
#define SOFT_SERIAL_PIN D0
|
||||
@@ -123,5 +116,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "foobar",
|
||||
"keyboard_name": "The 5x5 Keyboard",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0F25",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_5x5": {
|
||||
"layout": [
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025
|
||||
#define PRODUCT_ID 0x0000
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 40percentclub
|
||||
#define PRODUCT 4pack
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 1
|
||||
#define MATRIX_COLS 4
|
||||
@@ -144,8 +137,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "4pack",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"keyboard_name": "4pack",
|
||||
"manufacturer": "40percentclub",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0000",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}]
|
||||
|
@@ -4,13 +4,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 //"40 %", since 0x3430 is already registered.
|
||||
#define PRODUCT_ID 0x0A0C
|
||||
#define DEVICE_VER 0x4444
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 4x4 Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 16
|
||||
@@ -90,5 +83,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "40percent.club 4x4",
|
||||
"keyboard_name": "The 4x4 Keyboard",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0A0C",
|
||||
"device_version": "44.4.4"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"layout": [
|
||||
|
@@ -4,13 +4,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // 40%
|
||||
#define PRODUCT_ID 0x05B5
|
||||
#define DEVICE_VER 0x0100
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 5x5 Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 15
|
||||
@@ -99,5 +92,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "40percent.club 5x5",
|
||||
"keyboard_name": "The 5x5 Keyboard",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x05B5",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_5x5": {
|
||||
"layout": [
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // 40%
|
||||
#define PRODUCT_ID 0x0F61
|
||||
#define DEVICE_VER 0x0100
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The 6lit Macropad
|
||||
|
||||
#define USE_SERIAL
|
||||
|
||||
/* serial.c configuration for split keyboard */
|
||||
@@ -124,5 +117,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "6lit",
|
||||
"keyboard_name": "The 6lit Macropad",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0F61",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_2x3": {
|
||||
"layout": [
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // 40%
|
||||
#define PRODUCT_ID 0x0F00
|
||||
#define DEVICE_VER 0x0100
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The foobar Keyboard
|
||||
|
||||
#define USE_SERIAL
|
||||
|
||||
/* serial.c configuration for split keyboard */
|
||||
@@ -124,5 +117,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "foobar",
|
||||
"keyboard_name": "The foobar Keyboard",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0F00",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_3x5": {
|
||||
"layout": [
|
||||
|
@@ -2,13 +2,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 //"40 %", since 0x3430 is already registered.
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 40 Percent Club
|
||||
#define PRODUCT Gherkin
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 6
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Gherkin",
|
||||
"manufacturer": "40 Percent Club",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x6060",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_3x10": {
|
||||
"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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}]
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // 40%
|
||||
#define PRODUCT_ID 0x4A1F
|
||||
#define DEVICE_VER 0x0100
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT half_n_half
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4*2
|
||||
#define MATRIX_COLS 7
|
||||
@@ -133,8 +126,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "half_n_half",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x4A1F",
|
||||
"device_version": "1.0.0"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025
|
||||
#define PRODUCT_ID 0x0A0C
|
||||
#define DEVICE_VER 0x0175
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT i75
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
@@ -79,8 +72,6 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "i75",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0A0C",
|
||||
"device_version": "1.7.5"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_5x15": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
|
||||
|
@@ -2,13 +2,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // "40%", changed since 0x3430 is already officially registered
|
||||
#define PRODUCT_ID 0x4C55 // "LU"
|
||||
#define DEVICE_VER 0x1001
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT Luddite
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 8
|
||||
#define MATRIX_COLS 8
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Luddite",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x4C55",
|
||||
"device_version": "10.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_60_ansi": {
|
||||
"layout": [
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // "40%", changed since 0x3430 is already officially registered
|
||||
#define PRODUCT_ID 0x4D68 // "M68"
|
||||
#define DEVICE_VER 0x0101
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT MF68
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 8
|
||||
#define MATRIX_COLS 9
|
||||
@@ -122,5 +115,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "MF68",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x4D68",
|
||||
"device_version": "1.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_68_ansi": {
|
||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 //"40 %", to make it consistent with other 40percent.club boards.
|
||||
#define PRODUCT_ID 0x0007
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT Nano
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 2
|
||||
#define MATRIX_COLS 4
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Nano",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0007",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_2x4": {
|
||||
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}]
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 // "40%", changed since 0x3430 is already officially registered
|
||||
#define PRODUCT_ID 0x9999
|
||||
#define DEVICE_VER 0x9999
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The nein Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
#define MATRIX_COLS 3
|
||||
@@ -128,8 +121,6 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "nein",
|
||||
"keyboard_name": "The nein Keyboard",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "http://www.40percent.club/2019/04/nein.html",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x9999",
|
||||
"device_version": "99.9.9"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_3x3": {
|
||||
"layout": [
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025
|
||||
#define PRODUCT_ID 0x0A0C
|
||||
#define DEVICE_VER 0x0444
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT The nori Keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
@@ -112,5 +105,3 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "nori",
|
||||
"keyboard_name": "The nori Keyboard",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x0A0C",
|
||||
"device_version": "4.4.4"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_4x4": {
|
||||
"layout": [
|
||||
|
@@ -18,13 +18,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT Polypad
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
@@ -82,8 +75,6 @@
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Polyandry",
|
||||
"keyboard_name": "Polypad",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "",
|
||||
"maintainer": "QMK",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x6060",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025 //"40 %", since 0x3430 is already registered.
|
||||
#define PRODUCT_ID 0x5350 // "SP"
|
||||
#define DEVICE_VER 0x1001
|
||||
#define MANUFACTURER di0ib
|
||||
#define PRODUCT Six Pack
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 2
|
||||
#define MATRIX_COLS 3
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Six Pack",
|
||||
"manufacturer": "di0ib",
|
||||
"url": "https://www.40percent.club/2017/05/six-pack-11.html",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x5350",
|
||||
"device_version": "10.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_2x3": {
|
||||
"layout": [
|
||||
|
@@ -2,13 +2,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025
|
||||
#define PRODUCT_ID 0x546F //"To", was duplicate with polyandry
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 40 Percent Club
|
||||
#define PRODUCT Tomato
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 5
|
||||
#define MATRIX_COLS 6
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Tomato",
|
||||
"manufacturer": "40 Percent Club",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x546F",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_3x10": {
|
||||
"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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}]
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4025
|
||||
#define PRODUCT_ID 0x7574 //"ut"
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER 40percent.club
|
||||
#define PRODUCT ut47
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "UT47",
|
||||
"keyboard_name": "ut47",
|
||||
"manufacturer": "40percent.club",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0x4025",
|
||||
"pid": "0x7574",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Backspace", "x":11, "y":0, "w":1.5}, {"label":"LT(3) / Tab", "x":0, "y":1, "w":1.25}, {"label":"A", "x":1.25, "y":1}, {"label":"S", "x":2.25, "y":1}, {"label":"D", "x":3.25, "y":1}, {"label":"F", "x":4.25, "y":1}, {"label":"G", "x":5.25, "y":1}, {"label":"H", "x":6.25, "y":1}, {"label":"J", "x":7.25, "y":1}, {"label":"K", "x":8.25, "y":1}, {"label":"L", "x":9.25, "y":1}, {"label":":", "x":10.25, "y":1}, {"label":"\"", "x":11.25, "y":1, "w":1.25}, {"label":"Shift", "x":0, "y":2, "w":1.5}, {"label":"Z", "x":1.5, "y":2}, {"label":"X", "x":2.5, "y":2}, {"label":"C", "x":3.5, "y":2}, {"label":"V", "x":4.5, "y":2}, {"label":"B", "x":5.5, "y":2}, {"label":"N", "x":6.5, "y":2}, {"label":"M", "x":7.5, "y":2}, {"label":"<", "x":8.5, "y":2}, {"label":">", "x":9.5, "y":2}, {"label":"?", "x":10.5, "y":2}, {"label":"Shift / Enter", "x":11.5, "y":2}, {"label":"Ctrl", "x":0, "y":3}, {"label":"Alt", "x":1, "y":3}, {"label":"GUI", "x":2, "y":3}, {"label":"Menu", "x":3, "y":3}, {"label":"MO(2)", "x":4, "y":3, "w":1.25}, {"x":5.25, "y":3, "w":2}, {"label":"MO(1)", "x":7.25, "y":3, "w":1.25}, {"label":"\u2190", "x":8.5, "y":3}, {"label":"\u2193", "x":9.5, "y":3}, {"label":"\u2191", "x":10.5, "y":3}, {"label":"\u2192", "x":11.5, "y":3}]
|
||||
|
@@ -118,15 +118,6 @@ void matrix_print(void)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_key_count(void)
|
||||
{
|
||||
uint8_t count = 0;
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
count += bitpop16(matrix[i]);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Column pin configuration
|
||||
* col: 0 1 2 3 4 5 6 7 8 9 10 11
|
||||
* pin: D7 E6 B4 B5 B6 B2 B3 B1 F7 F6 F5 F4
|
||||
|
@@ -20,13 +20,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xAB13
|
||||
#define PRODUCT_ID 0x4511
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Abec13
|
||||
#define PRODUCT 45ATS
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 14
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "45-ATS",
|
||||
"keyboard_name": "45ATS",
|
||||
"manufacturer": "Abec13",
|
||||
"url": "",
|
||||
"maintainer": "The-Royal",
|
||||
"usb": {
|
||||
"vid": "0xAB13",
|
||||
"pid": "0x4511",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_split_space": {
|
||||
"layout": [
|
||||
|
@@ -2,13 +2,6 @@
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xEEEE
|
||||
#define PRODUCT_ID 0x2019
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Elias Sjögreen
|
||||
#define PRODUCT 4by3
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
#define MATRIX_COLS 4
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "4by3",
|
||||
"manufacturer": "Elias Sjögreen",
|
||||
"url": "https://github.com/eliassjogreen/4by3",
|
||||
"maintainer": "eliassjogreen",
|
||||
"usb": {
|
||||
"vid": "0xEEEE",
|
||||
"pid": "0x2019",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_horizontal": {
|
||||
"layout": [
|
||||
|
@@ -17,12 +17,6 @@
|
||||
#pragma once
|
||||
#include "config_common.h"
|
||||
|
||||
#define VENDOR_ID 0x77C8
|
||||
#define PRODUCT_ID 0x0001
|
||||
#define DEVICE_VER 0x0000
|
||||
#define MANUFACTURER 7c8
|
||||
#define PRODUCT Framework
|
||||
|
||||
#define MATRIX_ROWS 10
|
||||
#define MATRIX_COLS 6
|
||||
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "Framework",
|
||||
"manufacturer": "7c8",
|
||||
"url": "",
|
||||
"maintainer": "stevennguyen",
|
||||
"usb": {
|
||||
"vid": "0x77C8",
|
||||
"pid": "0x0001",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_5x12": {
|
||||
"layout": [
|
||||
|
@@ -19,13 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0007
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Bishop Keyboards
|
||||
#define PRODUCT 9Key
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
#define MATRIX_COLS 3
|
||||
|
@@ -1,7 +1,13 @@
|
||||
{
|
||||
"keyboard_name": "9key",
|
||||
"keyboard_name": "9Key",
|
||||
"manufacturer": "Bishop Keyboards",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"usb": {
|
||||
"vid": "0xFEED",
|
||||
"pid": "0x0007",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}, {"label":"k20", "x":0, "y":2}, {"label":"k21", "x":1, "y":2}, {"label":"k22", "x":2, "y":2}]
|
||||
|
@@ -102,7 +102,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#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
|
||||
|
@@ -127,8 +127,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user