Browse Source

Merge branch 'qmk:master' into keychron-teimor-keymap

pull/16396/head
Teimor Epstein 2 years ago
committed by GitHub
parent
commit
d2672d7089
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2481 changed files with 60720 additions and 6478 deletions
  1. +18
    -0
      .github/workflows/auto_approve.yml
  2. +0
    -0
      .github/workflows/auto_tag.yml
  3. +1
    -8
      .github/workflows/develop_update.yml
  4. +35
    -0
      .github/workflows/feature_branch_update.yml
  5. +0
    -0
      .github/workflows/format.yml
  6. +0
    -0
      .github/workflows/format_push.yml
  7. +3
    -0
      .gitignore
  8. +15
    -5
      builddefs/build_keyboard.mk
  9. +1
    -0
      builddefs/message.mk
  10. +16
    -0
      data/schemas/definitions.jsonschema
  11. +1
    -0
      data/schemas/keyboard.jsonschema
  12. +2
    -2
      data/templates/keyboard/info.json
  13. +17
    -0
      docs/cli_commands.md
  14. +2
    -2
      docs/cli_development.md
  15. +25
    -4
      docs/feature_bootmagic.md
  16. +21
    -25
      docs/feature_led_indicators.md
  17. +5
    -4
      docs/feature_pointing_device.md
  18. +1
    -1
      docs/i2c_driver.md
  19. +91
    -1
      docs/isp_flashing_guide.md
  20. +2
    -2
      docs/ja/cli_commands.md
  21. +2
    -2
      docs/ja/cli_development.md
  22. +2
    -2
      docs/ja/feature_pointing_device.md
  23. +4
    -2
      docs/keymap.md
  24. +1
    -1
      docs/ref_functions.md
  25. +3
    -3
      docs/reference_info_json.md
  26. +115
    -0
      docs/tap_hold.md
  27. +5
    -10
      docs/understanding_qmk.md
  28. +1
    -1
      drivers/flash/flash_spi.c
  29. +3
    -3
      drivers/flash/flash_spi.h
  30. +1
    -1
      drivers/ps2/ps2_mouse.h
  31. +0
    -2
      keyboards/0_sixty/config.h
  32. +0
    -2
      keyboards/0_sixty/underglow/config.h
  33. +1
    -12
      keyboards/0xc7/61key/config.h
  34. +6
    -0
      keyboards/0xc7/61key/info.json
  35. +0
    -7
      keyboards/0xcb/1337/config.h
  36. +7
    -1
      keyboards/0xcb/1337/info.json
  37. +0
    -6
      keyboards/0xcb/static/config.h
  38. +7
    -1
      keyboards/0xcb/static/info.json
  39. +0
    -5
      keyboards/10bleoledhub/config.h
  40. +6
    -0
      keyboards/10bleoledhub/info.json
  41. +16
    -0
      keyboards/1k/1k.c
  42. +33
    -0
      keyboards/1k/1k.h
  43. +60
    -0
      keyboards/1k/config.h
  44. +12
    -0
      keyboards/1k/info.json
  45. +25
    -0
      keyboards/1k/keymaps/default/keymap.c
  46. +23
    -0
      keyboards/1k/keymaps/default/rgblite.h
  47. +2
    -0
      keyboards/1k/keymaps/default/rules.mk
  48. +22
    -0
      keyboards/1k/keymaps/media/keymap.c
  49. +23
    -0
      keyboards/1k/keymaps/media/rgblite.h
  50. +3
    -0
      keyboards/1k/keymaps/media/rules.mk
  51. +6
    -0
      keyboards/1k/keymaps/tap_dance/config.h
  52. +22
    -0
      keyboards/1k/keymaps/tap_dance/keymap.c
  53. +1
    -0
      keyboards/1k/keymaps/tap_dance/rules.mk
  54. +47
    -0
      keyboards/1k/readme.md
  55. +26
    -0
      keyboards/1k/rules.mk
  56. +0
    -9
      keyboards/1upkeyboards/1up60hse/config.h
  57. +6
    -0
      keyboards/1upkeyboards/1up60hse/info.json
  58. +0
    -7
      keyboards/1upkeyboards/1up60hte/config.h
  59. +6
    -0
      keyboards/1upkeyboards/1up60hte/info.json
  60. +0
    -7
      keyboards/1upkeyboards/1up60rgb/config.h
  61. +7
    -1
      keyboards/1upkeyboards/1up60rgb/info.json
  62. +0
    -9
      keyboards/1upkeyboards/super16/config.h
  63. +6
    -0
      keyboards/1upkeyboards/super16/info.json
  64. +60
    -32
      keyboards/1upkeyboards/super16v2/config.h
  65. +7
    -1
      keyboards/1upkeyboards/super16v2/info.json
  66. +17
    -1
      keyboards/1upkeyboards/super16v2/keymaps/default/keymap.c
  67. +50
    -0
      keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c
  68. +1
    -0
      keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md
  69. +4
    -1
      keyboards/1upkeyboards/super16v2/rules.mk
  70. +24
    -0
      keyboards/1upkeyboards/super16v2/super16v2.c
  71. +0
    -4
      keyboards/25keys/aleth42/rev0/config.h
  72. +0
    -8
      keyboards/25keys/cassette42/config.h
  73. +9
    -3
      keyboards/25keys/cassette42/info.json
  74. +0
    -2
      keyboards/25keys/zinc/rev1/config.h
  75. +0
    -2
      keyboards/25keys/zinc/reva/config.h
  76. +0
    -7
      keyboards/2key2crawl/config.h
  77. +7
    -1
      keyboards/2key2crawl/info.json
  78. +0
    -7
      keyboards/30wer/config.h
  79. +9
    -3
      keyboards/30wer/info.json
  80. +0
    -11
      keyboards/3keyecosystem/2key2/config.h
  81. +7
    -1
      keyboards/3keyecosystem/2key2/info.json
  82. +0
    -5
      keyboards/3w6/rev1/config.h
  83. +0
    -5
      keyboards/3w6/rev2/config.h
  84. +0
    -9
      keyboards/40percentclub/25/config.h
  85. +7
    -1
      keyboards/40percentclub/25/info.json
  86. +0
    -9
      keyboards/40percentclub/4pack/config.h
  87. +9
    -3
      keyboards/40percentclub/4pack/info.json
  88. +0
    -9
      keyboards/40percentclub/4x4/config.h
  89. +7
    -1
      keyboards/40percentclub/4x4/info.json
  90. +0
    -9
      keyboards/40percentclub/5x5/config.h
  91. +7
    -1
      keyboards/40percentclub/5x5/info.json
  92. +0
    -9
      keyboards/40percentclub/6lit/config.h
  93. +7
    -1
      keyboards/40percentclub/6lit/info.json
  94. +0
    -9
      keyboards/40percentclub/foobar/config.h
  95. +7
    -1
      keyboards/40percentclub/foobar/info.json
  96. +0
    -7
      keyboards/40percentclub/gherkin/config.h
  97. +6
    -0
      keyboards/40percentclub/gherkin/info.json
  98. +0
    -9
      keyboards/40percentclub/half_n_half/config.h
  99. +6
    -0
      keyboards/40percentclub/half_n_half/info.json
  100. +0
    -9
      keyboards/40percentclub/i75/config.h

+ 18
- 0
.github/workflows/auto_approve.yml View File

@ -0,0 +1,18 @@
name: Automatic Approve
on:
schedule:
- cron: "*/5 * * * *"
jobs:
automatic_approve:
runs-on: ubuntu-latest
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: mheap/automatic-approve-action@v1
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
workflows: "format.yml,lint.yml,unit_test.yml"
dangerous_files: "lib/python/,Makefile,paths.mk,builddefs/"

.github/workflows/auto_tag.yaml → .github/workflows/auto_tag.yml View File


+ 1
- 8
.github/workflows/develop_update.yml View File

@ -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
- 0
.github/workflows/feature_branch_update.yml View 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 }}

.github/workflows/format.yaml → .github/workflows/format.yml View File


.github/workflows/format_push.yaml → .github/workflows/format_push.yml View File


+ 3
- 0
.gitignore View File

@ -91,3 +91,6 @@ user_song_list.h
compile_commands.json
.clangd/
.cache/
# VIA(L) json files that don't belong in QMK repo
via*.json

+ 15
- 5
builddefs/build_keyboard.mk View File

@ -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


+ 1
- 0
builddefs/message.mk View File

@ -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)


+ 16
- 0
data/schemas/definitions.jsonschema View File

@ -71,6 +71,22 @@
"type": "number",
"min": 0.25
},
"keyboard": {
"oneOf": [
{
"type": "string",
"enum": [
"converter/numeric_keypad_IIe",
"emptystring/NQG",
"maple_computing/christmas_tree/V2017"
]
},
{
"type": "string",
"pattern": "^[0-9a-z][0-9a-z_/]*$"
}
]
},
"mcu_pin_array": {
"type": "array",
"items": {"$ref": "#/mcu_pin"}


+ 1
- 0
data/schemas/keyboard.jsonschema View File

@ -5,6 +5,7 @@
"type": "object",
"properties": {
"keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
"keyboard_folder": {"$ref": "qmk.definitions.v1#/keyboard"},
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"},
"manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"},
"url": {


+ 2
- 2
data/templates/keyboard/info.json View File

@ -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
}
}
}

+ 17
- 0
docs/cli_commands.md View File

@ -335,6 +335,23 @@ This command cleans up the `.build` folder. If `--all` is passed, any .hex or .b
qmk clean [-a]
```
## `qmk via2json`
This command an generate a keymap.json from a VIA keymap backup. Both the layers and the macros are converted, enabling users to easily move away from a VIA-enabled firmware without writing any code or reimplementing their keymaps in QMK Configurator.
**Usage**:
```
qmk via2json -kb KEYBOARD [-l LAYOUT] [-km KEYMAP] [-o OUTPUT] filename
```
**Example:**
```
$ qmk via2json -kb ai03/polaris -o polaris_keymap.json polaris_via_backup.json
Ψ Wrote keymap to /home/you/qmk_firmware/polaris_keymap.json
```
---
# Developer Commands


+ 2
- 2
docs/cli_development.md View File

@ -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


+ 25
- 4
docs/feature_bootmagic.md View File

@ -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


+ 21
- 25
docs/feature_led_indicators.md View File

@ -11,13 +11,13 @@ QMK provides methods to read 5 of the LEDs defined in the HID spec:
* Kana
There are three ways to get the lock LED state:
* by specifying configuration options within `config.h`
* by implementing `bool led_update_kb(led_t led_state)` or `_user(led_t led_state)`; or
* by calling `led_t host_keyboard_led_state()`
* Configuration options in `config.h`
* Implement `led_update_*` function
* Call `led_t host_keyboard_led_state()`
!> `host_keyboard_led_state()` may already reflect a new value before `led_update_user()` is called.
!> The `host_keyboard_led_state()` may reflect an updated state before `led_update_user()` is called.
Two more deprecated functions exist that provide the LED state as a `uint8_t`:
Two deprecated functions that provide the LED state as `uint8_t`:
* `uint8_t led_set_kb(uint8_t usb_led)` and `_user(uint8_t usb_led)`
* `uint8_t host_keyboard_leds()`
@ -37,23 +37,20 @@ To configure the indicators, `#define` these in your `config.h`:
Unless you are designing your own keyboard, you generally should not need to change the above config options.
## `led_update_*()`
## LED update function
When the configuration options do not provide enough flexibility, the API hooks provided allow custom control of the LED behavior. These functions will be called when the state of one of those 5 LEDs changes. It receives the LED state as a struct parameter.
When the configuration options do not provide enough flexibility, the following callbacks allow custom control of the LED behavior. These functions will be called when one of those 5 LEDs changes state:
By convention, return `true` from `led_update_user()` to get the `led_update_kb()` hook to run its code, and
return `false` when you would prefer not to run the code in `led_update_kb()`.
* Keyboard/revision: `bool led_update_kb(led_t led_state)`
* Keymap: `bool led_update_user(led_t led_state)`
Some examples include:
Both receives LED state as a struct parameter. Returning `true` in `led_update_user()` will allow the keyboard level code in `led_update_kb()` to run as well. Returning `false` will override the keyboard level code, depending on how the keyboard level function is set up.
- overriding the LEDs to use them for something else like layer indication
- return `false` because you do not want the `_kb()` function to run, as it would override your layer behavior.
- play a sound when an LED turns on or off.
- return `true` because you want the `_kb` function to run, and this is in addition to the default LED behavior.
?> This boolean return type of `led_update_user` allows for overriding keyboard LED controls, and is thus recommended over the void `led_set_user` function.
?> Because the `led_set_*` functions return `void` instead of `bool`, they do not allow for overriding the keyboard LED control, and thus it's recommended to use `led_update_*` instead.
### Example of keyboard LED update implementation
### Example `led_update_kb()` Implementation
This is a template indicator function that can be implemented on keyboard level code:
```c
bool led_update_kb(led_t led_state) {
@ -74,9 +71,9 @@ bool led_update_kb(led_t led_state) {
}
```
### Example `led_update_user()` Implementation
### Example of user LED update implementation
This incomplete example would play a sound if Caps Lock is turned on or off. It returns `true`, because you also want the LEDs to maintain their state.
This is an incomplete example will play a sound if Caps Lock is turned on or off. It returns `true` to allow keyboard LED function to maintain their state.
```c
#ifdef AUDIO_ENABLE
@ -96,18 +93,17 @@ bool led_update_user(led_t led_state) {
}
```
### `led_update_*` Function Documentation
* Keyboard/Revision: `bool led_update_kb(led_t led_state)`
* Keymap: `bool led_update_user(led_t led_state)`
## Host keyboard LED state
## `host_keyboard_led_state()`
The `host_keyboard_led_state()` function will report the LED state returned from the host computer as `led_t`. This is useful for reading the LED state outside `led_update_*`. For example, you can get the boolean state of Caps Lock from the host with:
Call this function to get the last received LED state as a `led_t`. This is useful for reading the LED state outside `led_update_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code).
```c
bool caps = host_keyboard_led_state().caps_lock;
```
## Setting Physical LED State
Some keyboard implementations provide convenience methods for setting the state of the physical LEDs.
Some keyboard implementations provide convenient methods for setting the state of the physical LEDs.
### Ergodox Boards


+ 5
- 4
docs/feature_pointing_device.md View File

@ -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;
}


+ 1
- 1
docs/i2c_driver.md View File

@ -166,7 +166,7 @@ Send multiple bytes to the selected I2C device.
### `i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)`
Receive multiple bytes from the selected SPI device.
Receive multiple bytes from the selected I2C device.
#### Arguments


+ 91
- 1
docs/isp_flashing_guide.md View File

@ -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.

+ 2
- 2
docs/ja/cli_commands.md View File

@ -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`


+ 2
- 2
docs/ja/cli_development.md View File

@ -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
## フォーマットの詳細


+ 2
- 2
docs/ja/feature_pointing_device.md View File

@ -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単位スクロールし、リリースされた時にそれを全て元に戻します - なぜならこれは完全に便利な機能だからです。いいですか、以下はひとつの例です:


+ 4
- 2
docs/keymap.md View File

@ -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
- 1
docs/ref_functions.md View File

@ -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


+ 3
- 3
docs/reference_info_json.md View File

@ -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
- 0
docs/tap_hold.md View File

@ -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


+ 5
- 10
docs/understanding_qmk.md View File

@ -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


+ 1
- 1
drivers/flash/flash_spi.c View File

@ -57,7 +57,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Mode setting comands */
#define FLASH_CMD_DP 0xB9 /* DP (Deep Power Down) */
#define FLASH_CMD_RDP 0xAB /* RDP (Release form Deep Power Down) */
#define FLASH_CMD_RDP 0xAB /* RDP (Release from Deep Power Down) */
/* Status register */
#define FLASH_FLAG_WIP 0x01 /* Write in progress bit */


+ 3
- 3
drivers/flash/flash_spi.h View File

@ -74,21 +74,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
The sector size of the FLASH in bytes, as specified in the datasheet.
*/
#ifndef EXTERNAL_FLASH_SECTOR_SIZE
# define EXTERNAL_FLASH_SECTOR_SIZE (4 * 1024)
# define EXTERNAL_FLASH_SECTOR_SIZE (4 * 1024L)
#endif
/*
The block size of the FLASH in bytes, as specified in the datasheet.
*/
#ifndef EXTERNAL_FLASH_BLOCK_SIZE
# define EXTERNAL_FLASH_BLOCK_SIZE (64 * 1024)
# define EXTERNAL_FLASH_BLOCK_SIZE (64 * 1024L)
#endif
/*
The total size of the FLASH in bytes, as specified in the datasheet.
*/
#ifndef EXTERNAL_FLASH_SIZE
# define EXTERNAL_FLASH_SIZE (512 * 1024)
# define EXTERNAL_FLASH_SIZE (512 * 1024L)
#endif
/*


+ 1
- 1
drivers/ps2/ps2_mouse.h View File

@ -120,7 +120,7 @@ __attribute__((unused)) static enum ps2_mouse_mode_e {
enum ps2_mouse_command_e {
PS2_MOUSE_RESET = 0xFF,
PS2_MOUSE_RESEND = 0xFE,
PS2_MOSUE_SET_DEFAULTS = 0xF6,
PS2_MOUSE_SET_DEFAULTS = 0xF6,
PS2_MOUSE_DISABLE_DATA_REPORTING = 0xF5,
PS2_MOUSE_ENABLE_DATA_REPORTING = 0xF4,
PS2_MOUSE_SET_SAMPLE_RATE = 0xF3,


+ 0
- 2
keyboards/0_sixty/config.h View File

@ -64,5 +64,3 @@
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

+ 0
- 2
keyboards/0_sixty/underglow/config.h View File

@ -58,5 +58,3 @@
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

+ 1
- 12
keyboards/0xc7/61key/config.h View File

@ -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

+ 6
- 0
keyboards/0xc7/61key/info.json View File

@ -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"
},


+ 0
- 7
keyboards/0xcb/1337/config.h View File

@ -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


+ 7
- 1
keyboards/0xcb/1337/info.json View File

@ -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": [


+ 0
- 6
keyboards/0xcb/static/config.h View File

@ -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


+ 7
- 1
keyboards/0xcb/static/info.json View File

@ -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"
},


+ 0
- 5
keyboards/10bleoledhub/config.h View File

@ -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


+ 6
- 0
keyboards/10bleoledhub/info.json View File

@ -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": [


+ 16
- 0
keyboards/1k/1k.c View File

@ -0,0 +1,16 @@
/* Copyright 2020 zvecr<git@zvecr.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "1k.h"

+ 33
- 0
keyboards/1k/1k.h View File

@ -0,0 +1,33 @@
/* Copyright 2020 zvecr<git@zvecr.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT_ortho_1x1( \
K01 \
) \
{ \
{ K01 }, \
}

+ 60
- 0
keyboards/1k/config.h View File

@ -0,0 +1,60 @@
/* Copyright 2020 zvecr<git@zvecr.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x0009
#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER MakotoKurauchi
#define PRODUCT 1K
/* matrix size */
#define MATRIX_ROWS 1
#define MATRIX_COLS 1
/*
* Keyboard Matrix Assignments
*
* On this board we have direct connection: no diodes.
*/
#define DIRECT_PINS {{ B0 }}
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
#define RGBLED_NUM 1
#define RGB_DI_PIN B2
// Save as much space as we can...
#define LAYER_STATE_8BIT
#define NO_ACTION_LAYER
#define NO_ACTION_TAPPING
#define NO_ACTION_ONESHOT
#define NO_RESET
// usbconfig.h overrides
#define USB_CFG_IOPORTNAME B
#define USB_CFG_DMINUS_BIT 3
#define USB_CFG_DPLUS_BIT 4
#define USB_COUNT_SOF 0
#define USB_INTR_CFG PCMSK
#define USB_INTR_CFG_SET (1<<USB_CFG_DPLUS_BIT)
#define USB_INTR_ENABLE_BIT PCIE
#define USB_INTR_PENDING_BIT PCIF
#define USB_INTR_VECTOR SIG_PIN_CHANGE

+ 12
- 0
keyboards/1k/info.json View File

@ -0,0 +1,12 @@
{
"keyboard_name": "1k",
"url": "",
"maintainer": "MakotoKurauchi",
"layouts": {
"LAYOUT_ortho_1x1": {
"layout": [
{"x":0, "y":0}
]
}
}
}

+ 25
- 0
keyboards/1k/keymaps/default/keymap.c View File

@ -0,0 +1,25 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "rgblite.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_1x1(
RGB_HUI
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
case RGB_HUI:
rgblite_increase_hue();
break;
}
}
return true;
}
void keyboard_post_init_user(void) {
rgblite_increase_hue();
}

+ 23
- 0
keyboards/1k/keymaps/default/rgblite.h View File

@ -0,0 +1,23 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "ws2812.h"
#include "color.h"
static inline void rgblite_setrgb(RGB rgb) {
LED_TYPE leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
ws2812_setleds(leds, RGBLED_NUM);
}
static void rgblite_increase_hue(void) {
static uint8_t state = 0;
HSV hsv = { 255, 255, 255 };
hsv.h = state;
state = (state + 8) % 256;
rgblite_setrgb(hsv_to_rgb(hsv));
}

+ 2
- 0
keyboards/1k/keymaps/default/rules.mk View File

@ -0,0 +1,2 @@
SRC += ws2812.c
SRC += color.c

+ 22
- 0
keyboards/1k/keymaps/media/keymap.c View File

@ -0,0 +1,22 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "rgblite.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_1x1(
KC_MUTE
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
rgblite_increase_hue();
}
return true;
}
void keyboard_post_init_user(void) {
rgblite_increase_hue();
}

+ 23
- 0
keyboards/1k/keymaps/media/rgblite.h View File

@ -0,0 +1,23 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "ws2812.h"
#include "color.h"
static inline void rgblite_setrgb(RGB rgb) {
LED_TYPE leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}};
ws2812_setleds(leds, RGBLED_NUM);
}
static void rgblite_increase_hue(void) {
static uint8_t state = 0;
HSV hsv = { 255, 255, 255 };
hsv.h = state;
state = (state + 8) % 256;
rgblite_setrgb(hsv_to_rgb(hsv));
}

+ 3
- 0
keyboards/1k/keymaps/media/rules.mk View File

@ -0,0 +1,3 @@
SRC += ws2812.c
SRC += color.c
EXTRAKEY_ENABLE = yes

+ 6
- 0
keyboards/1k/keymaps/tap_dance/config.h View File

@ -0,0 +1,6 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define TAPPING_TERM 500

+ 22
- 0
keyboards/1k/keymaps/tap_dance/keymap.c View File

@ -0,0 +1,22 @@
// Copyright 2022 Makoto Kurauchi (@MakotoKurauchi)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
_BASE = 0,
};
enum {
TD_AB = 0
};
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_AB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_B)
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_ortho_1x1(
TD(TD_AB)
)
};

+ 1
- 0
keyboards/1k/keymaps/tap_dance/rules.mk View File

@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes

+ 47
- 0
keyboards/1k/readme.md View File

@ -0,0 +1,47 @@
# 1k
![1k](https://booth.pximg.net/aaeb2dda-e169-44c0-ba5a-5b42cc5c2627/i/3504781/c1708a8a-061b-4a6c-907d-72d0eab47d4a.png)
1% Custom mechanical keyboard. ATtiny85 powered, with 1*WS2812 LED, and the micronucleus bootloader.
**Note**: Due to limited firmware space, a _**lot**_ of features have to be disabled to get a functioning QMK based keyboard.
* Keyboard Maintainer: [MakotoKurauchi](https://github.com/MakotoKurauchi)
* Hardware Supported: 1k
* Hardware Availability: [booth](https://ninep.booth.pm/items/3504781)
Make example for this keyboard (after setting up your build environment):
make 1k: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).
## Flashing
### Prerequisites
```bash
git clone https://github.com/micronucleus/micronucleus.git
cd micronucleus/commandline/
sudo make install
```
On Linux, you’ll need proper privileges to access the MCU. You can either use sudo when flashing firmware, or place [these files](https://github.com/micronucleus/micronucleus/blob/master/commandline/49-micronucleus.rules) in /etc/udev/rules.d/. Once added run the following:
```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```
### Instructions
```bash
make 1k:default:flash
# or directly with...
micronucleus --run <firmware.hex>
```
### Recovery
* [Original Firmware](https://github.com/xiudi/Attiny85_vusb_pad_test)
* [Bootloader Repair](https://digistump.com/wiki/digispark/tutorials/proisp)

+ 26
- 0
keyboards/1k/rules.mk View File

@ -0,0 +1,26 @@
# MCU name
MCU = attiny85
# Bootloader selection
BOOTLOADER = custom
BOOTLOADER_SIZE = 1862
PROGRAM_CMD = micronucleus --run $(BUILD_DIR)/$(TARGET).hex
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = no # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
# Save as much space as we can...
LTO_ENABLE = yes
GRAVE_ESC_ENABLE = no
MAGIC_ENABLE = no
SPACE_CADET_ENABLE = no

+ 0
- 9
keyboards/1upkeyboards/1up60hse/config.h View File

@ -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

+ 6
- 0
keyboards/1upkeyboards/1up60hse/info.json View File

@ -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}]


+ 0
- 7
keyboards/1upkeyboards/1up60hte/config.h View File

@ -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


+ 6
- 0
keyboards/1upkeyboards/1up60hte/info.json View File

@ -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"
},


+ 0
- 7
keyboards/1upkeyboards/1up60rgb/config.h View File

@ -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


+ 7
- 1
keyboards/1upkeyboards/1up60rgb/info.json View File

@ -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": [


+ 0
- 9
keyboards/1upkeyboards/super16/config.h View File

@ -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


+ 6
- 0
keyboards/1upkeyboards/super16/info.json View File

@ -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}]


+ 60
- 32
keyboards/1upkeyboards/super16v2/config.h View File

@ -18,17 +18,12 @@
#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
#define MOUSEKEY_MOVE_DELTA 25
/*
* Keyboard Matrix Assignments
*
@ -44,6 +39,9 @@
#define MATRIX_ROW_PINS { D1, D2, D3, D4 }
#define MATRIX_COL_PINS { D5, D6, C2, D0 }
#define ENCODERS_PAD_A { B1, B3 }
#define ENCODERS_PAD_B { B2, B4 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL */
@ -65,28 +63,62 @@
//#define BACKLIGHT_BREATHING
#define RGB_DI_PIN B5
#define DRIVER_LED_TOTAL 20
#ifdef RGB_DI_PIN
# define RGBLED_NUM 20
# define RGBLIGHT_HUE_STEP 8
# define RGBLIGHT_SAT_STEP 8
# define RGBLIGHT_VAL_STEP 8
# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
# define RGBLIGHT_EFFECT_BREATHING
# define RGBLIGHT_EFFECT_RAINBOW_MOOD
# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
# define RGBLIGHT_EFFECT_SNAKE
# define RGBLIGHT_EFFECT_KNIGHT
# define RGBLIGHT_EFFECT_CHRISTMAS
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
# define RGBLIGHT_EFFECT_RGB_TEST
# define RGBLIGHT_EFFECT_ALTERNATING
/*== customize breathing effect ==*/
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
/*==== use exp() and sin() ====*/
//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
# define RGBLIGHT_LIMIT_VAL 255
#endif
#ifdef RGB_MATRIX_ENABLE
# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
# define ENABLE_RGB_MATRIX_ALPHAS_MODS
# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
# define ENABLE_RGB_MATRIX_BREATHING
# define ENABLE_RGB_MATRIX_BAND_SAT
# define ENABLE_RGB_MATRIX_BAND_VAL
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
# define ENABLE_RGB_MATRIX_CYCLE_ALL
# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
# define ENABLE_RGB_MATRIX_DUAL_BEACON
# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
# define ENABLE_RGB_MATRIX_RAINDROPS
# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
# define ENABLE_RGB_MATRIX_HUE_BREATHING
# define ENABLE_RGB_MATRIX_HUE_PENDULUM
# define ENABLE_RGB_MATRIX_HUE_WAVE
# define ENABLE_RGB_MATRIX_PIXEL_RAIN
# define ENABLE_RGB_MATRIX_PIXEL_FLOW
# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
//# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
//# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
//# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
# define ENABLE_RGB_MATRIX_SPLASH
//# define ENABLE_RGB_MATRIX_MULTISPLASH
//# define ENABLE_RGB_MATRIX_SOLID_SPLASH
//# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
@ -142,10 +174,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

+ 7
- 1
keyboards/1upkeyboards/super16v2/info.json View File

@ -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}]
}
}
}
}

+ 17
- 1
keyboards/1upkeyboards/super16v2/keymaps/default/keymap.c View File

@ -27,8 +27,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[1] = LAYOUT_ortho_4x4( /* Fn Layer */
RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,
RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, RESET
),
};
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
} else if (index == 1) { /* Second encoder */
if (clockwise) {
rgb_matrix_increase_hue();
} else {
rgb_matrix_decrease_hue();
}
}
return false;
}

+ 50
- 0
keyboards/1upkeyboards/super16v2/keymaps/mouse/keymap.c View File

@ -0,0 +1,50 @@
/* Copyright 2022 MechMerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ortho_4x4( /* Base */
KC_TRNS, KC_DELETE, KC_BACKSPACE, KC_MUTE,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3, KC_PSLS,
MO(1), KC_P0, KC_PDOT, KC_BTN3
),
[1] = LAYOUT_ortho_4x4( /* Fn Layer */
RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,
RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD,
RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, RESET
),
};
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code_delay(KC_MS_RIGHT, 10);
} else {
tap_code_delay(KC_MS_LEFT, 10);
}
} else if (index == 1) { /* Second encoder */
if (clockwise) {
tap_code_delay(KC_AUDIO_VOL_UP, 10);
} else {
tap_code_delay(KC_AUDIO_VOL_DOWN, 10);
}
}
return false;
}

+ 1
- 0
keyboards/1upkeyboards/super16v2/keymaps/mouse/readme.md View File

@ -0,0 +1 @@
# The default keymap for Super 16 V2

+ 4
- 1
keyboards/1upkeyboards/super16v2/rules.mk View File

@ -14,5 +14,8 @@ CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
ENCODER_ENABLE = yes

+ 24
- 0
keyboards/1upkeyboards/super16v2/super16v2.c View File

@ -15,3 +15,27 @@
*/
#include "super16v2.h"
#ifdef RGB_MATRIX_ENABLE
led_config_t g_led_config = { {
// Key Matrix to LED Index
{ 3, 2, 1, 0 },
{ 7, 6, 5, 4 },
{ 11, 10, 9, 8 },
{ 15, 14, 13, 12 }
}, {
// LED Index to Physical Position
{ 28, 12 }, { 84, 12 }, { 140, 12 }, { 196, 12 },
{ 28, 28 }, { 84, 28 }, { 140, 28 }, { 196, 28 },
{ 28, 44 }, { 84, 44 }, { 140, 44 }, { 196, 44 },
{ 28, 60 }, { 84, 60 }, { 140, 60 }, { 196, 60 },
{ 168, 48 }, { 168, 16 }, { 58, 16 }, { 56, 48 }
}, {
// LED Index to Flag
4, 4, 4, 4,
4, 4, 4, 4,
4, 4, 4, 4,
4, 4, 4, 4,
2, 2, 2, 2,
} };
#endif

+ 0
- 4
keyboards/25keys/aleth42/rev0/config.h View File

@ -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

+ 0
- 8
keyboards/25keys/cassette42/config.h View File

@ -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


+ 9
- 3
keyboards/25keys/cassette42/info.json View File

@ -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}]


+ 0
- 2
keyboards/25keys/zinc/rev1/config.h View File

@ -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

+ 0
- 2
keyboards/25keys/zinc/reva/config.h View File

@ -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

+ 0
- 7
keyboards/2key2crawl/config.h View File

@ -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


+ 7
- 1
keyboards/2key2crawl/info.json View File

@ -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": [


+ 0
- 7
keyboards/30wer/config.h View File

@ -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


+ 9
- 3
keyboards/30wer/info.json View File

@ -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": [


+ 0
- 11
keyboards/3keyecosystem/2key2/config.h View File

@ -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

+ 7
- 1
keyboards/3keyecosystem/2key2/info.json View File

@ -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": [


+ 0
- 5
keyboards/3w6/rev1/config.h View File

@ -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

+ 0
- 5
keyboards/3w6/rev2/config.h View File

@ -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

+ 0
- 9
keyboards/40percentclub/25/config.h View File

@ -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

+ 7
- 1
keyboards/40percentclub/25/info.json View File

@ -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": [


+ 0
- 9
keyboards/40percentclub/4pack/config.h View File

@ -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


+ 9
- 3
keyboards/40percentclub/4pack/info.json View File

@ -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}]


+ 0
- 9
keyboards/40percentclub/4x4/config.h View File

@ -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

+ 7
- 1
keyboards/40percentclub/4x4/info.json View File

@ -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": [


+ 0
- 9
keyboards/40percentclub/5x5/config.h View File

@ -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

+ 7
- 1
keyboards/40percentclub/5x5/info.json View File

@ -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": [


+ 0
- 9
keyboards/40percentclub/6lit/config.h View File

@ -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

+ 7
- 1
keyboards/40percentclub/6lit/info.json View File

@ -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": [


+ 0
- 9
keyboards/40percentclub/foobar/config.h View File

@ -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

+ 7
- 1
keyboards/40percentclub/foobar/info.json View File

@ -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": [


+ 0
- 7
keyboards/40percentclub/gherkin/config.h View File

@ -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


+ 6
- 0
keyboards/40percentclub/gherkin/info.json View File

@ -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}]


+ 0
- 9
keyboards/40percentclub/half_n_half/config.h View File

@ -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


+ 6
- 0
keyboards/40percentclub/half_n_half/info.json View File

@ -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": [


+ 0
- 9
keyboards/40percentclub/i75/config.h View File

@ -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


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save