mirror of
https://github.com/mfulz/qmk_firmware.git
synced 2025-11-04 15:22:41 +01:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2957f60dc1 | ||
|
|
efc9c525b1 | ||
|
|
dc9eb21332 | ||
|
|
706bceeff8 | ||
|
|
f7a5ec2483 | ||
|
|
1ac1f92000 | ||
|
|
980a1b0562 | ||
|
|
e335d62eda | ||
|
|
7e69348335 | ||
|
|
55b3b2b848 | ||
|
|
5342caf172 | ||
|
|
4a3b4104fe | ||
|
|
08aa54b66f | ||
|
|
92d38c37ec | ||
|
|
74f4682309 | ||
|
|
a772a7f3a7 | ||
|
|
eca8782b54 | ||
|
|
28bd777f58 | ||
|
|
5ee6f9c9c1 | ||
|
|
c803c50dc0 | ||
|
|
dae932fc31 | ||
|
|
f610011aa3 | ||
|
|
23f365f8bc | ||
|
|
4f8cc32cf5 | ||
|
|
aea9005236 | ||
|
|
7eb6f86bc0 | ||
|
|
b19d7399ca | ||
|
|
669ad3c805 | ||
|
|
9216dd3917 | ||
|
|
1bc8793f83 | ||
|
|
4dae5ff37d | ||
|
|
6125f7bf4d | ||
|
|
cfe28937d5 | ||
|
|
729d7c2b2e | ||
|
|
2f095b8925 | ||
|
|
223bc47658 | ||
|
|
047ef3cd12 | ||
|
|
5dcee0199e | ||
|
|
3502bbbd16 | ||
|
|
32d6c122e9 | ||
|
|
e354cbe782 | ||
|
|
98e783cc3c | ||
|
|
9ee2effe8e | ||
|
|
86b5c6b5c3 | ||
|
|
06b6729b16 | ||
|
|
c39eeaa1c8 | ||
|
|
61c644f6d0 | ||
|
|
a900f9251a | ||
|
|
773242503c | ||
|
|
3a08deb7fe | ||
|
|
ed773ab73c | ||
|
|
bffb209eee | ||
|
|
e5823b5650 | ||
|
|
02655690f4 | ||
|
|
2749346a53 | ||
|
|
417f089115 | ||
|
|
4e863dbdef | ||
|
|
193dd01f4e | ||
|
|
024bda1dd3 | ||
|
|
d5d2a01db2 | ||
|
|
78f7c7bb0d | ||
|
|
8c5779f768 | ||
|
|
d802e1c805 | ||
|
|
a867cfc26d | ||
|
|
db6d432d6a | ||
|
|
fded67f1a9 | ||
|
|
b2e870e4a2 | ||
|
|
f6f4d85aa5 | ||
|
|
919df5934b | ||
|
|
8bffc61959 | ||
|
|
d37ed07c47 | ||
|
|
77aafd8056 | ||
|
|
8e1f505ab2 | ||
|
|
a808c29726 | ||
|
|
5f817a1d7f | ||
|
|
764dc18a81 | ||
|
|
872b521e4f | ||
|
|
46e85ded47 | ||
|
|
3315894269 | ||
|
|
e9bf95e0f2 | ||
|
|
1335d205f4 | ||
|
|
e94c2df3f3 | ||
|
|
037c5b5496 | ||
|
|
9aaf4a5a9b | ||
|
|
af5fe7fb75 | ||
|
|
92a9e7c50b | ||
|
|
38a257e666 | ||
|
|
87bb1a3890 | ||
|
|
e784dc79a6 | ||
|
|
1ef4e305e3 | ||
|
|
34ce1353f1 | ||
|
|
36ddb567cc | ||
|
|
e9783df2c5 | ||
|
|
5e5047f071 | ||
|
|
4be80cadac | ||
|
|
04826d1aa1 | ||
|
|
2d9c3f9a89 | ||
|
|
588abd24b5 | ||
|
|
7fde309799 | ||
|
|
9e39b99a0e | ||
|
|
a939adb55c | ||
|
|
6f98a67eda | ||
|
|
6c11579876 | ||
|
|
7e669421f8 | ||
|
|
2648a7a125 | ||
|
|
a12d58c6c9 | ||
|
|
1d1d7c388d | ||
|
|
6a6a333c75 | ||
|
|
5fb269b2b4 | ||
|
|
cd2fca667b | ||
|
|
c17323b0f5 | ||
|
|
86a35483a1 | ||
|
|
b8574efcd6 | ||
|
|
42d084d1c0 | ||
|
|
8d90cf36f1 | ||
|
|
921b9dad6c | ||
|
|
cc9a2aef0f | ||
|
|
dde4120a1e | ||
|
|
5eb3fc255b | ||
|
|
c0f4179117 | ||
|
|
338cf71ee9 | ||
|
|
df3770551a | ||
|
|
3f83a21383 | ||
|
|
8fe3864fe7 | ||
|
|
2df28c1850 | ||
|
|
109c60feeb | ||
|
|
e226a70adc | ||
|
|
b906af0073 | ||
|
|
16fab460fd | ||
|
|
1f63dbfb8e | ||
|
|
8ff2497384 | ||
|
|
08794fef4e | ||
|
|
55b53006a5 | ||
|
|
dccb5711c7 | ||
|
|
ebe87aa67e | ||
|
|
20424fd37f | ||
|
|
4281beb1de | ||
|
|
86b123141b | ||
|
|
dd32cdf527 | ||
|
|
0eb42e042c | ||
|
|
1833e65370 | ||
|
|
0015ebad47 | ||
|
|
3f79708095 | ||
|
|
74b24e410b | ||
|
|
e3404d21fe | ||
|
|
003231aaf2 | ||
|
|
7e6f1c9e08 | ||
|
|
e9458fd694 | ||
|
|
ee71362f99 | ||
|
|
31eb82c911 | ||
|
|
b75f6691a1 | ||
|
|
54658a3687 | ||
|
|
6c40b6856b | ||
|
|
27cde5f4c2 | ||
|
|
b33fdc299c | ||
|
|
83f757f8f0 | ||
|
|
fc7a41fdce | ||
|
|
ee6a0e8744 | ||
|
|
98da119293 | ||
|
|
35fa0f23a5 | ||
|
|
61a8a60dfb | ||
|
|
265b96a12c | ||
|
|
cf44bde909 | ||
|
|
bd70f5261c | ||
|
|
cb65c7755e | ||
|
|
dc8db6551d | ||
|
|
a8b01dc5de | ||
|
|
9d0153dc70 | ||
|
|
876c5201b9 | ||
|
|
8bcb77cb9a | ||
|
|
62696e82cd | ||
|
|
708b3f9192 | ||
|
|
0f22bccb3f | ||
|
|
caeb213400 | ||
|
|
6f1793d486 | ||
|
|
db16271a72 | ||
|
|
edd1f33013 | ||
|
|
77180a6649 | ||
|
|
5d67c4d908 | ||
|
|
8d5eacb7dd | ||
|
|
7121a228eb | ||
|
|
dc67fd9b87 | ||
|
|
4d5e532068 | ||
|
|
6ab5a7d048 | ||
|
|
eedbb9ae64 | ||
|
|
c5c5d37e08 | ||
|
|
c5b11978c7 | ||
|
|
ed169a6b30 | ||
|
|
c349e85956 | ||
|
|
5244b13173 | ||
|
|
41225620c2 | ||
|
|
022e1fdac8 | ||
|
|
7f8f66512c | ||
|
|
3347b63d83 | ||
|
|
d4bf9b1cc1 | ||
|
|
d38696a493 | ||
|
|
49bc3b530b | ||
|
|
b593cfccbd | ||
|
|
fba3820405 | ||
|
|
65eb0f939f | ||
|
|
0d428b9b39 | ||
|
|
40d6766576 | ||
|
|
68a62b99a2 | ||
|
|
d92994be71 | ||
|
|
2f6751e48a | ||
|
|
2218690d0b | ||
|
|
fe8b7619d3 | ||
|
|
212e820ff1 | ||
|
|
89a515913f | ||
|
|
18bfbc93ab | ||
|
|
403536986d | ||
|
|
4d2ae22690 | ||
|
|
e0fbb07129 | ||
|
|
996880a1da | ||
|
|
1d5b462da2 | ||
|
|
4493f31f80 | ||
|
|
e71f8f89d2 | ||
|
|
0880850b15 | ||
|
|
b5996bf793 | ||
|
|
8f70adc0b6 | ||
|
|
b6000e0fe5 | ||
|
|
87c2f97def | ||
|
|
0cf1186f8d | ||
|
|
eb35f58a6e | ||
|
|
249bc3a5c5 | ||
|
|
b069002e61 | ||
|
|
86966fce69 | ||
|
|
280bea87a6 | ||
|
|
ec3df85f08 | ||
|
|
9237326664 | ||
|
|
b2fdb072e5 | ||
|
|
2d985687a9 | ||
|
|
869ede8e4a | ||
|
|
7bc8046f9a | ||
|
|
8014fb14b6 | ||
|
|
26372c81ad | ||
|
|
8e888794fa | ||
|
|
c0a7ecb0e1 | ||
|
|
c84d361e95 | ||
|
|
4666dfb0b0 | ||
|
|
f0d27e22aa | ||
|
|
dfb0f9f6a5 | ||
|
|
8bcac1c8f7 | ||
|
|
05cc707d96 | ||
|
|
6928bce461 | ||
|
|
347bab7c35 | ||
|
|
5995432202 | ||
|
|
184a0942ff | ||
|
+8 |
893d86cb89 | ||
|
|
07ca35decf | ||
|
|
e41d67b428 | ||
|
|
2ff646c642 | ||
|
|
2bface8f89 | ||
|
|
05b7193651 | ||
|
|
51c9988341 | ||
|
|
d953aa730e | ||
|
|
75544d9127 | ||
|
|
44f1bd9b3a | ||
|
|
5de515526d | ||
|
|
4b4f1c6edb | ||
|
|
e4d51c91b9 | ||
|
|
41fb9120d0 | ||
|
|
6e61126e08 | ||
|
|
a6126c5853 | ||
|
|
9dea8a7d86 | ||
|
|
827f32b3ad | ||
|
|
b26217414c | ||
|
|
c09e8bbf42 | ||
|
|
2d8266bd7b | ||
|
|
b28d8fcb07 | ||
|
|
bbd47fcaa2 | ||
|
|
c810d8cc1b | ||
|
|
575e3e18f5 | ||
|
|
1a1b22ef07 | ||
|
|
91a6e6245b | ||
|
|
0978dca728 | ||
|
|
99edf15a69 | ||
|
|
ff6c70415c | ||
|
|
f9df57b722 | ||
|
|
d8971d707e | ||
|
|
0fd600d6df | ||
|
|
0e08fad5c5 | ||
|
|
8e7cb28c4f | ||
|
|
dcfa4712fb | ||
|
|
45929ca657 | ||
|
|
5de86a05c3 | ||
|
|
bca565cfaa | ||
|
|
de10757f05 | ||
|
|
f8fb772f53 | ||
|
|
b77d51f41a | ||
|
|
9bf9adb578 | ||
|
|
9d6cea070e | ||
|
|
6425dd1710 | ||
|
|
4cae7becb1 | ||
|
|
0f9849ca68 | ||
|
|
30209de9fd | ||
|
|
621b4b73a1 | ||
|
|
16cd1d9bf7 | ||
|
|
f7512d61bd | ||
|
|
8e9d45d270 | ||
|
|
e2ab5056f1 | ||
|
|
b202e59322 | ||
|
|
ab76e6ab59 | ||
|
|
da6d6ce2e1 | ||
|
|
967b9e3140 | ||
|
|
82dd84e257 | ||
|
|
7d41639d54 | ||
|
|
618aaa8ca7 | ||
|
|
0be7345640 | ||
|
|
386d19b55f | ||
|
|
c0185116d7 | ||
|
|
ace0603f4f | ||
|
|
f634fddd34 | ||
|
|
24f2effbdd | ||
|
|
34ba7f1c18 | ||
|
|
bcd4f34b26 | ||
|
|
d412854e37 | ||
|
|
9958f9e147 | ||
|
|
aab2ac22c5 | ||
|
|
c45ed8930e | ||
|
|
61ba8efa3e | ||
|
|
c6111aa2a2 | ||
|
|
e01307f265 | ||
|
|
d1bd5a0100 | ||
|
|
77ea1bdac4 | ||
|
|
b16af15750 | ||
|
|
8a5ad2a113 | ||
|
|
9f95844cad | ||
|
|
d75ce4862b | ||
|
|
9d7f6d1089 | ||
|
|
7f515ee64f | ||
|
|
7d842c676a | ||
|
|
5467bdf39e | ||
|
|
d77b5ad0e8 | ||
|
|
c70bb75323 | ||
|
|
5e57d18c5b | ||
|
|
73135e74b8 | ||
|
|
36e47cb3aa | ||
|
|
3c7c9bdd86 | ||
|
|
48f06ae646 | ||
|
|
e4a6afa369 | ||
|
|
8f457ada3a | ||
|
|
4fd2739a8c | ||
|
|
f6bc058525 | ||
|
|
156f0561f2 | ||
|
|
cb8528c33c | ||
|
|
d9a69324c1 | ||
|
|
4fae7cde7f | ||
|
|
0815d89eb8 | ||
|
|
0d953a2dcf | ||
|
|
d995cf3ae5 | ||
|
|
5360cb1fd7 | ||
|
|
8a23742af2 | ||
|
|
3da34f297a |
No files matched your search
@@ -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
|
||||
|
||||
|
||||
@@ -35,4 +35,4 @@ jobs:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_KEY }}
|
||||
AWS_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
|
||||
SOURCE_DIR: 'api_data'
|
||||
SOURCE_DIR: '.build/api_data'
|
||||
@@ -35,4 +35,4 @@ jobs:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_KEY }}
|
||||
AWS_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
|
||||
SOURCE_DIR: 'api_data'
|
||||
SOURCE_DIR: '.build/api_data'
|
||||
@@ -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"
|
||||
|
||||
@@ -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 }}
|
||||
@@ -1 +0,0 @@
|
||||
theme: jekyll-theme-cayman
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ endif
|
||||
|
||||
.DEFAULT_GOAL := all
|
||||
|
||||
OPT = g
|
||||
|
||||
include paths.mk
|
||||
include $(BUILDDEFS_PATH)/message.mk
|
||||
|
||||
|
||||
@@ -646,8 +646,9 @@ ifeq ($(strip $(HAPTIC_ENABLE)),yes)
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(HD44780_ENABLE)), yes)
|
||||
SRC += platforms/avr/drivers/hd44780.c
|
||||
OPT_DEFS += -DHD44780_ENABLE
|
||||
COMMON_VPATH += $(DRIVER_PATH)/lcd
|
||||
SRC += hd44780.c
|
||||
endif
|
||||
|
||||
VALID_OLED_DRIVER_TYPES := SSD1306 custom
|
||||
|
||||
@@ -316,7 +316,7 @@ gccversion :
|
||||
@$(BUILD_CMD)
|
||||
|
||||
%.uf2: %.hex
|
||||
$(eval CMD=$(UF2CONV) $(BUILD_DIR)/$(TARGET).hex -o $(BUILD_DIR)/$(TARGET).uf2 -c -f $(UF2_FAMILY) >/dev/null 2>&1)
|
||||
$(eval CMD=$(UF2CONV) $(BUILD_DIR)/$(TARGET).hex --output $(BUILD_DIR)/$(TARGET).uf2 --convert --family $(UF2_FAMILY) >/dev/null 2>&1)
|
||||
#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
|
||||
@$(SILENT) || printf "$(MSG_UF2) $@" | $(AWK_CMD)
|
||||
@$(BUILD_CMD)
|
||||
|
||||
@@ -25,6 +25,7 @@ GENERIC_FEATURES = \
|
||||
DYNAMIC_KEYMAP \
|
||||
DYNAMIC_MACRO \
|
||||
ENCODER \
|
||||
ENCODER_MAP \
|
||||
GRAVE_ESC \
|
||||
HAPTIC \
|
||||
KEY_LOCK \
|
||||
|
||||
+62
-21
@@ -9,7 +9,9 @@ ifneq ($(findstring MKL26Z64, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = KINETIS
|
||||
MCU_SERIES = KL2x
|
||||
|
||||
@@ -36,7 +38,9 @@ ifneq ($(findstring MK20DX128, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = KINETIS
|
||||
MCU_SERIES = K20x
|
||||
|
||||
@@ -63,7 +67,9 @@ ifneq ($(findstring MK20DX256, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = KINETIS
|
||||
MCU_SERIES = K20x
|
||||
|
||||
@@ -90,7 +96,9 @@ ifneq ($(findstring MK66FX1M0, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = KINETIS
|
||||
MCU_SERIES = MK66F18
|
||||
|
||||
@@ -117,7 +125,9 @@ ifneq ($(findstring STM32F042, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F0xx
|
||||
|
||||
@@ -157,7 +167,9 @@ ifneq ($(findstring STM32F072, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F0xx
|
||||
|
||||
@@ -192,7 +204,9 @@ ifneq ($(findstring STM32F103, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F1xx
|
||||
|
||||
@@ -224,7 +238,9 @@ ifneq ($(findstring STM32F303, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F3xx
|
||||
|
||||
@@ -259,7 +275,9 @@ ifneq ($(findstring STM32F401, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F4xx
|
||||
|
||||
@@ -299,7 +317,9 @@ ifneq ($(findstring STM32F405, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F4xx
|
||||
|
||||
@@ -334,7 +354,9 @@ ifneq ($(findstring STM32F407, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F4xx
|
||||
|
||||
@@ -369,7 +391,9 @@ ifneq ($(findstring STM32F411, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F4xx
|
||||
|
||||
@@ -409,7 +433,9 @@ ifneq ($(findstring STM32F446, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32F4xx
|
||||
|
||||
@@ -441,7 +467,9 @@ ifneq ($(findstring STM32G431, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32G4xx
|
||||
|
||||
@@ -476,7 +504,9 @@ ifneq ($(findstring STM32G474, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32G4xx
|
||||
|
||||
@@ -511,7 +541,9 @@ ifneq (,$(filter $(MCU),STM32L432 STM32L442))
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32L4xx
|
||||
|
||||
@@ -548,7 +580,9 @@ ifneq (,$(filter $(MCU),STM32L433 STM32L443))
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32L4xx
|
||||
|
||||
@@ -585,7 +619,9 @@ ifneq (,$(filter $(MCU),STM32L412 STM32L422))
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = STM32
|
||||
MCU_SERIES = STM32L4xx
|
||||
|
||||
@@ -602,7 +638,7 @@ ifneq (,$(filter $(MCU),STM32L412 STM32L422))
|
||||
# <keyboard_dir>/boards/, or drivers/boards/
|
||||
BOARD ?= GENERIC_STM32_L412XB
|
||||
|
||||
PLATFORM_NAME ?= platform_l432
|
||||
PLATFORM_NAME ?= platform_l412_l422
|
||||
|
||||
USE_FPU ?= yes
|
||||
|
||||
@@ -622,7 +658,9 @@ ifneq ($(findstring WB32F3G71, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_FAMILY = WB32
|
||||
MCU_SERIES = WB32F3G71xx
|
||||
|
||||
@@ -657,7 +695,10 @@ ifneq ($(findstring GD32VF103, $(MCU)),)
|
||||
|
||||
## chip/board settings
|
||||
# - the next two should match the directories in
|
||||
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
|
||||
# OR
|
||||
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
|
||||
MCU_PORT_NAME = GD
|
||||
MCU_FAMILY = GD32V
|
||||
MCU_SERIES = GD32VF103
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -57,6 +57,7 @@ OTHER_OPTION_NAMES = \
|
||||
HELIX ZINC \
|
||||
AUTOLOG_ENABLE \
|
||||
DEBUG_ENABLE \
|
||||
ENCODER_MAP_ENABLE \
|
||||
ENCODER_ENABLE_CUSTOM \
|
||||
GERMAN_ENABLE \
|
||||
HAPTIC_ENABLE \
|
||||
|
||||
@@ -2,6 +2,7 @@ TEST_LIST = $(sort $(patsubst %/test.mk,%, $(shell find $(ROOT_DIR)tests -type f
|
||||
FULL_TESTS := $(notdir $(TEST_LIST))
|
||||
|
||||
include $(QUANTUM_PATH)/debounce/tests/testlist.mk
|
||||
include $(QUANTUM_PATH)/encoder/tests/testlist.mk
|
||||
include $(QUANTUM_PATH)/sequencer/tests/testlist.mk
|
||||
include $(PLATFORM_PATH)/test/testlist.mk
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{
|
||||
# Format:
|
||||
# <config.h key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]}
|
||||
# value_type: one of "array", "array.int", "bool", "int", "hex", "list", "mapping"
|
||||
# value_type: one of "array", "array.int", "bool", "int", "hex", "list", "mapping", "str", "raw"
|
||||
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
|
||||
# to_c: Default `true`. Set to `false` to exclude this mapping from config.h
|
||||
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
|
||||
@@ -17,7 +17,7 @@
|
||||
"DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"},
|
||||
# TODO: Replace ^^^ with vvv
|
||||
#"DEVICE_VER": {"info_key": "usb.device_version", "value_type": "bcd_version"},
|
||||
"DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false},
|
||||
"DESCRIPTION": {"info_key": "keyboard_folder", "value_type": "str", "to_json": false},
|
||||
"DIODE_DIRECTION": {"info_key": "diode_direction"},
|
||||
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"},
|
||||
"DYNAMIC_KEYMAP_EEPROM_MAX_ADDR": {"info_key": "dynamic_keymap.eeprom_max_addr", "value_type": "int"},
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{
|
||||
# Format:
|
||||
# <rules.mk key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]}
|
||||
# value_type: one of "array", "array.int", "bool", "int", "list", "hex", "mapping"
|
||||
# value_type: one of "array", "array.int", "bool", "int", "list", "hex", "mapping", "str", "raw"
|
||||
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
|
||||
# to_c: Default `true`. Set to `false` to exclude this mapping from rules.mk
|
||||
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
|
||||
@@ -20,6 +20,6 @@
|
||||
"MOUSEKEY_ENABLE": {"info_key": "mouse_key.enabled", "value_type": "bool"},
|
||||
"NO_USB_STARTUP_CHECK": {"info_key": "usb.no_startup_check", "value_type": "bool"},
|
||||
"SPLIT_KEYBOARD": {"info_key": "split.enabled", "value_type": "bool"},
|
||||
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "value_type": "str", "to_c": false},
|
||||
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "to_c": false},
|
||||
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
File renamed without changes.
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
+9
-9
@@ -94,7 +94,7 @@
|
||||
|
||||
* Hardware Features
|
||||
* Displays
|
||||
* [HD44780 LCD Controller](feature_hd44780.md)
|
||||
* [HD44780 LCD Driver](feature_hd44780.md)
|
||||
* [ST7565 LCD Driver](feature_st7565.md)
|
||||
* [OLED Driver](feature_oled_driver.md)
|
||||
* Lighting
|
||||
@@ -147,7 +147,7 @@
|
||||
* [EEPROM Driver](eeprom_driver.md)
|
||||
* ['serial' Driver](serial_driver.md)
|
||||
* [UART Driver](uart_driver.md)
|
||||
* [GPIO Controls](internals_gpio_control.md)
|
||||
* [GPIO Controls](gpio_control.md)
|
||||
* [Keyboard Guidelines](hardware_keyboard_guidelines.md)
|
||||
|
||||
* Python Development
|
||||
@@ -183,10 +183,10 @@
|
||||
* [Understanding QMK](understanding_qmk.md)
|
||||
|
||||
* QMK Internals (In Progress)
|
||||
* [Defines](internals_defines.md)
|
||||
* [Input Callback Reg](internals_input_callback_reg.md)
|
||||
* [Midi Device](internals_midi_device.md)
|
||||
* [Midi Device Setup Process](internals_midi_device_setup_process.md)
|
||||
* [Midi Util](internals_midi_util.md)
|
||||
* [Send Functions](internals_send_functions.md)
|
||||
* [Sysex Tools](internals_sysex_tools.md)
|
||||
* [Defines](internals/defines.md)
|
||||
* [Input Callback Reg](internals/input_callback_reg.md)
|
||||
* [Midi Device](internals/midi_device.md)
|
||||
* [Midi Device Setup Process](internals/midi_device_setup_process.md)
|
||||
* [Midi Util](internals/midi_util.md)
|
||||
* [Send Functions](internals/send_functions.md)
|
||||
* [Sysex Tools](internals/sysex_tools.md)
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -131,6 +131,8 @@ If you define these options you will disable the associated feature, which can s
|
||||
|
||||
If you define these options you will enable the associated feature, which may increase your code size.
|
||||
|
||||
* `#define ENABLE_COMPILE_KEYCODE`
|
||||
* Enables the `QK_MAKE` keycode
|
||||
* `#define FORCE_NKRO`
|
||||
* NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
|
||||
* `#define STRICT_LAYER_RELEASE`
|
||||
|
||||
@@ -44,7 +44,7 @@ In other cases you should group like options together in an `object`. This is pa
|
||||
In most cases you can add a simple mapping. These are maintained as JSON files in `data/mappings/info_config.json` and `data/mappings/info_rules.json`, and control mapping for `config.h` and `rules.mk`, respectively. Each mapping is keyed by the `config.h` or `rules.mk` variable, and the value is a hash with the following keys:
|
||||
|
||||
* `info_key`: (required) The location within `info.json` for this value. See below.
|
||||
* `value_type`: (optional) Default `str`. The format for this variable's value. See below.
|
||||
* `value_type`: (optional) Default `raw`. The format for this variable's value. See below.
|
||||
* `to_json`: (optional) Default `true`. Set to `false` to exclude this mapping from info.json
|
||||
* `to_c`: (optional) Default `true`. Set to `false` to exclude this mapping from config.h
|
||||
* `warn_duplicate`: (optional) Default `true`. Set to `false` to turn off warning when a value exists in both places
|
||||
@@ -57,7 +57,7 @@ Under the hood we use [Dotty Dict](https://dotty-dict.readthedocs.io/en/latest/)
|
||||
|
||||
#### Value Types
|
||||
|
||||
By default we treat all values as simple strings. If your value is more complex you can use one of these types to intelligently parse the data:
|
||||
By default we treat all values as unquoted "raw" data. If your value is more complex you can use one of these types to intelligently parse the data:
|
||||
|
||||
* `array`: A comma separated array of strings
|
||||
* `array.int`: A comma separated array of integers
|
||||
@@ -65,6 +65,7 @@ By default we treat all values as simple strings. If your value is more complex
|
||||
* `hex`: A number formatted as hex
|
||||
* `list`: A space separate array of strings
|
||||
* `mapping`: A hash of key/value pairs
|
||||
* `str`: A quoted string literal
|
||||
|
||||
### Add code to extract it
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -54,9 +54,43 @@ If you are using different pinouts for the encoders on each half of a split keyb
|
||||
#define ENCODER_RESOLUTIONS_RIGHT { 2, 4 }
|
||||
```
|
||||
|
||||
If the `_RIGHT` definitions aren't specified in your `config.h`, then the non-`_RIGHT` versions will be applied to both sides of the split.
|
||||
|
||||
Additionally, if one side does not have an encoder, you can specify `{}` for the pins/resolution -- for example, a split keyboard with only a right-side encoder:
|
||||
|
||||
```c
|
||||
#define ENCODERS_PAD_A { }
|
||||
#define ENCODERS_PAD_B { }
|
||||
#define ENCODER_RESOLUTIONS { }
|
||||
#define ENCODERS_PAD_A_RIGHT { B12 }
|
||||
#define ENCODERS_PAD_B_RIGHT { B13 }
|
||||
#define ENCODER_RESOLUTIONS_RIGHT { 4 }
|
||||
```
|
||||
|
||||
## Encoder map
|
||||
|
||||
Encoder mapping may be added to your `keymap.c`, which replicates the normal keyswitch layer handling functionality, but with encoders. Add this to your `rules.mk`:
|
||||
|
||||
```make
|
||||
ENCODER_MAP_ENABLE = yes
|
||||
```
|
||||
|
||||
Your `keymap.c` will then need an encoder mapping defined (for four layers and two encoders):
|
||||
|
||||
```c
|
||||
#if defined(ENCODER_MAP_ENABLE)
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
|
||||
[_BASE] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||
[_LOWER] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) },
|
||||
[_RAISE] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI) },
|
||||
[_ADJUST] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_RIGHT, KC_LEFT) },
|
||||
};
|
||||
#endif
|
||||
```
|
||||
|
||||
## Callbacks
|
||||
|
||||
The callback functions can be inserted into your `<keyboard>.c`:
|
||||
When not using `ENCODER_MAP_ENABLE = yes`, the callback functions can be inserted into your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
bool encoder_update_kb(uint8_t index, bool clockwise) {
|
||||
|
||||
+289
-48
@@ -1,57 +1,298 @@
|
||||
# HD44780 LCD Displays
|
||||
# HD44780 LCD Driver
|
||||
|
||||
This is an integration of Peter Fleury's LCD library. This page will explain the basics. [For in depth documentation visit his page.](http://www.peterfleury.epizy.com/doxygen/avr-gcc-libraries/group__pfleury__lcd.html)
|
||||
## Supported Hardware
|
||||
|
||||
You can enable support for HD44780 Displays by setting the `HD44780_ENABLE` flag in your keyboards `rules.mk` to yes.
|
||||
LCD modules using [HD44780U](https://www.sparkfun.com/datasheets/LCD/HD44780.pdf) IC or equivalent, communicating in 4-bit mode.
|
||||
|
||||
## Configuration
|
||||
|Module|Size |Notes |
|
||||
|------|--------------|---------------------------------|
|
||||
|1602A |16x2, 5x8 dots| |
|
||||
|2004A |20x4, 5x8 dots|Untested, not currently supported|
|
||||
|
||||
You will need to configure the pins used by your display, and its number of lines and columns in your keyboard's `config.h`.
|
||||
|
||||
|
||||
Uncomment the section labled HD44780 and change the parameters as needed.
|
||||
````
|
||||
/*
|
||||
* HD44780 LCD Display Configuration
|
||||
*/
|
||||
|
||||
#define LCD_LINES 2 //< number of visible lines of the display
|
||||
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||
#if LCD_IO_MODE
|
||||
#define LCD_PORT PORTB //< port for the LCD lines
|
||||
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||
#define LCD_RS_PIN 3 //< pin for RS line
|
||||
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||
#define LCD_RW_PIN 2 //< pin for RW line
|
||||
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||
#define LCD_E_PIN 1 //< pin for Enable line
|
||||
#endif
|
||||
````
|
||||
|
||||
Should you need to configure other properties you can copy them from `quantum/hd44780.h` and set them in your `config.h`
|
||||
To run these modules at 3.3V, an additional MAX660 voltage converter IC must be soldered on, along with two 10µF capacitors. See [this page](https://www.codrey.com/electronic-circuits/hack-your-16x2-lcd/) for more details.
|
||||
|
||||
## Usage
|
||||
|
||||
To initialize your display, call `lcd_init()` with one of these parameters:
|
||||
````
|
||||
LCD_DISP_OFF : display off
|
||||
LCD_DISP_ON : display on, cursor off
|
||||
LCD_DISP_ON_CURSOR : display on, cursor on
|
||||
LCD_DISP_ON_CURSOR_BLINK : display on, cursor on flashing
|
||||
````
|
||||
This is best done in your keyboards `matrix_init_kb` or your keymaps `matrix_init_user`.
|
||||
It is advised to clear the display before use.
|
||||
To do so call `lcd_clrscr()`.
|
||||
Add the following to your `rules.mk`:
|
||||
|
||||
To now print something to your Display you first call `lcd_gotoxy(column, line)`. To go to the start of the first line you would call `lcd_gotoxy(0, 0)` and then print a string with `lcd_puts("example string")`.
|
||||
```make
|
||||
HD44780_ENABLE = yes
|
||||
```
|
||||
|
||||
There are more methods available to control the display. [For in depth documentation please visit the linked page.](http://www.peterfleury.epizy.com/doxygen/avr-gcc-libraries/group__pfleury__lcd.html)
|
||||
## Basic Configuration
|
||||
|
||||
Add the following to your `config.h`:
|
||||
|
||||
|Define |Default |Description |
|
||||
|-----------------------|--------------|-----------------------------------------------------------------------------------------------------|
|
||||
|`HD44780_DATA_PINS` |*Not defined* |(Required) An array of four GPIO pins connected to the display's D4-D7 pins, eg. `{ B1, B3, B2, B6 }`|
|
||||
|`HD44780_RS_PIN` |*Not defined* |(Required) The GPIO connected to the display's RS pin |
|
||||
|`HD44780_RW_PIN` |*Not defined* |(Required) The GPIO connected to the display's RW pin |
|
||||
|`HD44780_E_PIN` |*Not defined* |(Required) The GPIO connected to the display's E pin |
|
||||
|`HD44780_DISPLAY_COLS` |`16` |The number of visible characters on a single line of the display |
|
||||
|`HD44780_DISPLAY_LINES`|`2` |The number of visible lines on the display |
|
||||
|`HD44780_WRAP_LINES` |*Not defined* |If defined, input characters will wrap to the next line |
|
||||
|
||||
## Examples
|
||||
|
||||
### Hello World
|
||||
|
||||
Add the following to your `keymap.c`:
|
||||
|
||||
```c
|
||||
void keyboard_post_init_user(void) {
|
||||
hd44780_init(true, true); // Show blinking cursor
|
||||
hd44780_puts_P(PSTR("Hello, world!\n"));
|
||||
}
|
||||
```
|
||||
|
||||
### Custom Character Definition
|
||||
|
||||
Up to eight custom characters can be defined. This data is stored in the Character Generator RAM (CGRAM), and is not persistent across power cycles.
|
||||
|
||||
This example defines the QMK Psi as the first custom character. The first 16 positions in the character set are reserved for the eight custom characters duplicated.
|
||||
|
||||
```
|
||||
Byte | 16 8 4 2 1
|
||||
1 | x x x ■ □ ■ □ ■
|
||||
2 | x x x ■ □ ■ □ ■
|
||||
3 | x x x ■ □ ■ □ ■
|
||||
4 | x x x □ ■ ■ ■ □
|
||||
5 | x x x □ □ ■ □ □
|
||||
6 | x x x □ □ ■ □ □
|
||||
7 | x x x □ □ ■ □ □
|
||||
8 | x x x □ □ □ □ □
|
||||
```
|
||||
|
||||
```c
|
||||
const uint8_t PROGMEM psi[8] = { 0x15, 0x15, 0x15, 0x0E, 0x04, 0x04, 0x04, 0x00 };
|
||||
|
||||
void keyboard_post_init_user(void) {
|
||||
hd44780_init(false, false);
|
||||
hd44780_define_char_P(0, psi);
|
||||
// Cursor is incremented while defining characters so must be reset
|
||||
hd44780_home();
|
||||
// 0x08 to avoid null terminator
|
||||
hd44780_puts_P(PSTR("\x08 QMK Firmware"));
|
||||
}
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### `void hd44780_init(bool cursor, bool blink)`
|
||||
|
||||
Initialize the display.
|
||||
|
||||
This function should be called only once, before any of the other functions can be called.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `bool cursor`
|
||||
Whether to show the cursor.
|
||||
- `bool blink`
|
||||
Whether to blink the cursor, if shown.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_clear(void)`
|
||||
|
||||
Clear the display.
|
||||
|
||||
This function is called on init.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_home(void)`
|
||||
|
||||
Move the cursor to the home position.
|
||||
|
||||
This function is called on init.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_on(bool cursor, bool blink)`
|
||||
|
||||
Turn the display on, and/or set the cursor properties.
|
||||
|
||||
This function is called on init.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `bool cursor`
|
||||
Whether to show the cursor.
|
||||
- `bool blink`
|
||||
Whether to blink the cursor, if shown.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_off(void)`
|
||||
|
||||
Turn the display off.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_set_cursor(uint8_t col, uint8_t line)`
|
||||
|
||||
Move the cursor to the specified position on the display.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t col`
|
||||
The column number to move to, from 0 to 15 on 16x2 displays.
|
||||
- `bool line`
|
||||
The line number to move to, either 0 or 1 on 16x2 displays.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_putc(char c)`
|
||||
|
||||
Print a character to the display. The newline character `\n` will move the cursor to the start of the next line.
|
||||
|
||||
The exact character shown may depend on the ROM code of your particular display - refer to the datasheet for the full character set.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `char c`
|
||||
The character to print.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_puts(const char *s)`
|
||||
|
||||
Print a string of characters to the display.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `const char *s`
|
||||
The string to print.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_puts_P(const char *s)`
|
||||
|
||||
Print a string of characters from PROGMEM to the display.
|
||||
|
||||
On ARM devices, this function is simply an alias of `hd44780_puts()`.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `const char *s`
|
||||
The PROGMEM string to print (ie. `PSTR("Hello")`).
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_define_char(uint8_t index, uint8_t *data)`
|
||||
|
||||
Define a custom character.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t index`
|
||||
The index of the custom character to define, from 0 to 7.
|
||||
- `uint8_t *data`
|
||||
An array of 8 bytes containing the 5-bit row data of the character, where the first byte is the topmost row, and the least significant bit of each byte is the rightmost column.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_define_char_P(uint8_t index, const uint8_t *data)`
|
||||
|
||||
Define a custom character from PROGMEM.
|
||||
|
||||
On ARM devices, this function is simply an alias of `hd44780_define_char()`.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t index`
|
||||
The index of the custom character to define, from 0 to 7.
|
||||
- `const uint8_t *data`
|
||||
A PROGMEM array of 8 bytes containing the 5-bit row data of the character, where the first byte is the topmost row, and the least significant bit of each byte is the rightmost column.
|
||||
|
||||
---
|
||||
|
||||
### `bool hd44780_busy(void)`
|
||||
|
||||
Indicates whether the display is currently processing, and cannot accept instructions.
|
||||
|
||||
#### Return Value
|
||||
|
||||
`true` if the display is busy.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_write(uint8_t data, bool isData)`
|
||||
|
||||
Write a byte to the display.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t data`
|
||||
The byte to send to the display.
|
||||
- `bool isData`
|
||||
Whether the byte is an instruction or character data.
|
||||
|
||||
---
|
||||
|
||||
### `uint8_t hd44780_read(bool isData)`
|
||||
|
||||
Read a byte from the display.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `bool isData`
|
||||
Whether to read the current cursor position, or the character at the cursor.
|
||||
|
||||
#### Return Value
|
||||
|
||||
If `isData` is `true`, the returned byte will be the character at the current DDRAM address. Otherwise, it will be the current DDRAM address and the busy flag.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_command(uint8_t command)`
|
||||
|
||||
Send a command to the display. Refer to the datasheet and `hd44780.h` for the valid commands and defines.
|
||||
|
||||
This function waits for the display to clear the busy flag before sending the command.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t command`
|
||||
The command to send.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_data(uint8_t data)`
|
||||
|
||||
Send a byte of data to the display.
|
||||
|
||||
This function waits for the display to clear the busy flag before sending the data.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t data`
|
||||
The byte of data to send.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_set_cgram_address(uint8_t address)`
|
||||
|
||||
Set the CGRAM address.
|
||||
|
||||
This function is used when defining custom characters.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t address`
|
||||
The CGRAM address to move to, from `0x00` to `0x3F`.
|
||||
|
||||
---
|
||||
|
||||
### `void hd44780_set_ddram_address(uint8_t address)`
|
||||
|
||||
Set the DDRAM address.
|
||||
|
||||
This function is used when printing characters to the display, and setting the cursor.
|
||||
|
||||
#### Arguments
|
||||
|
||||
- `uint8_t address`
|
||||
The DDRAM address to move to, from `0x00` to `0x7F`.
|
||||
@@ -254,7 +254,7 @@ For the above, the `MI_C` keycode will produce a C3 (note number 48), and so on.
|
||||
<!--
|
||||
#### QMK Internals (Autogenerated)
|
||||
|
||||
* [Internals/MIDI Device Setup Process](internals_midi_device_setup_process.md)
|
||||
* [Internals/MIDI Device](internals_midi_device.md)
|
||||
* [Internals/MIDI Util](internals_midi_util.md)
|
||||
* [Internals/MIDI Device Setup Process](internals/midi_device_setup_process.md)
|
||||
* [Internals/MIDI Device](internals/midi_device.md)
|
||||
* [Internals/MIDI Util](internals/midi_util.md)
|
||||
-->
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -171,6 +171,7 @@ Configure the hardware via your `config.h`:
|
||||
|----------|-------------|---------|
|
||||
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
|
||||
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
|
||||
| `ISSI_PWM_FREQUENCY` | (Optional) PWM Frequency Setting - IS31FL3737B only | 0 |
|
||||
| `ISSI_SWPULLUP` | (Optional) Set the value of the SWx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
|
||||
| `ISSI_CSPULLUP` | (Optional) Set the value of the CSx lines on-chip de-ghosting resistors | PUR_0R (Disabled) |
|
||||
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
|
||||
|
||||
@@ -31,3 +31,16 @@ Note that the array indices are reversed same as the matrix and the values are o
|
||||
|`SH_OS` |One shot swap hands: toggles while pressed or until next key press. |
|
||||
|
||||
`SH_TT` swap-hands tap-toggle key is similar to [layer tap-toggle](feature_layers.md?id=switching-and-toggling-layers). Tapping repeatedly (5 taps by default) will toggle swap-hands on or off, like `SH_TG`. Tap-toggle count can be changed by defining a value for `TAPPING_TOGGLE`.
|
||||
|
||||
## Encoder Mapping
|
||||
|
||||
When using an encoder mapping, it's also able to handle swapping encoders between sides, too.
|
||||
|
||||
Encoder indexes are defined as left-to-right, and the extent of the array needs to match the number of encoders on the keyboard.
|
||||
|
||||
As an example, if a split keyboard has a single encoder per side, you can swap the order by using the following code in your keymap:
|
||||
```c
|
||||
#if defined(SWAP_HANDS_ENABLE) && defined(ENCODER_MAP_ENABLE)
|
||||
const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = { 1, 0 };
|
||||
#endif
|
||||
```
|
||||
@@ -230,17 +230,6 @@ send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
|
||||
|
||||
Example uses include sending Unicode strings when a key is pressed, as described in [Macros](feature_macros.md).
|
||||
|
||||
### `send_unicode_hex_string()` (Deprecated)
|
||||
|
||||
Similar to `send_unicode_string()`, but the characters are represented by their Unicode code points, written in hexadecimal and separated by spaces. For example, the table flip above would be achieved with:
|
||||
|
||||
```c
|
||||
send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
|
||||
```
|
||||
|
||||
An easy way to convert your Unicode string to this format is to use [this site](https://r12a.github.io/app-conversion/) and take the result in the "Hex/UTF-32" section.
|
||||
|
||||
|
||||
## Additional Language Support
|
||||
|
||||
In `quantum/keymap_extras`, you'll see various language files — these work the same way as the ones for alternative layouts such as Colemak or BÉPO. When you include one of these language headers, you gain access to keycodes specific to that language / national layout. Such keycodes are defined by a 2-letter country/language code, followed by an underscore and a 4-letter abbreviation of the character to which the key corresponds. For example, including `keymap_french.h` and using `FR_UGRV` in your keymap will output `ù` when typed on a system with a native French AZERTY layout.
|
||||
|
||||
@@ -347,3 +347,14 @@ Flashing sequence:
|
||||
2. Wait for the OS to detect the device
|
||||
3. Copy the .uf2 file to the new USB disk
|
||||
4. Wait for the keyboard to become available
|
||||
|
||||
or
|
||||
|
||||
CLI Flashing sequence:
|
||||
|
||||
1. Enter the bootloader using any of the following methods:
|
||||
* Tap the `RESET` keycode
|
||||
* Double-tap the `nRST` button on the PCB.
|
||||
2. Wait for the OS to detect the device
|
||||
3. Flash via QMK CLI eg. `qmk flash --keyboard handwired/onekey/blackpill_f411_tinyuf2 --keymap default`
|
||||
4. Wait for the keyboard to become available
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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.
|
||||
+8
-8
@@ -137,7 +137,7 @@
|
||||
* [EEPROM ドライバ](ja/eeprom_driver.md)
|
||||
* [シリアル ドライバ](ja/serial_driver.md)
|
||||
* [UART ドライバ](ja/uart_driver.md)
|
||||
* [GPIO 制御](ja/internals_gpio_control.md)
|
||||
* [GPIO 制御](ja/gpio_control.md)
|
||||
* [キーボード ガイドライン](ja/hardware_keyboard_guidelines.md)
|
||||
|
||||
* Python 開発
|
||||
@@ -173,10 +173,10 @@
|
||||
* [QMK を理解する](ja/understanding_qmk.md)
|
||||
|
||||
* QMK の内部詳細(作成中)
|
||||
* [定義](ja/internals_defines.md)
|
||||
* [入力コールバック登録](ja/internals_input_callback_reg.md)
|
||||
* [Midi デバイス](ja/internals_midi_device.md)
|
||||
* [Midi デバイスのセットアップ手順](ja/internals_midi_device_setup_process.md)
|
||||
* [Midi ユーティリティ](ja/internals_midi_util.md)
|
||||
* [Midi 送信関数](ja/internals_send_functions.md)
|
||||
* [Sysex Tools](ja/internals_sysex_tools.md)
|
||||
* [定義](ja/internals/defines.md)
|
||||
* [入力コールバック登録](ja/internals/input_callback_reg.md)
|
||||
* [Midi デバイス](ja/internals/midi_device.md)
|
||||
* [Midi デバイスのセットアップ手順](ja/internals/midi_device_setup_process.md)
|
||||
* [Midi ユーティリティ](ja/internals/midi_util.md)
|
||||
* [Midi 送信関数](ja/internals/send_functions.md)
|
||||
* [Sysex Tools](ja/internals/sysex_tools.md)
|
||||
@@ -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単位スクロールし、リリースされた時にそれを全て元に戻します - なぜならこれは完全に便利な機能だからです。いいですか、以下はひとつの例です:
|
||||
|
||||
|
||||
@@ -233,17 +233,6 @@ send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
|
||||
|
||||
使用例には、[Macros](ja/feature_macros.md) で説明されているように、キーが押された時に Unicode 文字列を送信することが含まれます。
|
||||
|
||||
### `send_unicode_hex_string()`
|
||||
|
||||
`send_unicode_string()` に似ていますが、文字は Unicode コードポイントで表され、16進数で記述され、空白で区切られています。例えば、上記のちゃぶ台返しは以下で表されます:
|
||||
|
||||
```c
|
||||
send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
|
||||
```
|
||||
|
||||
[このサイト](https://r12a.github.io/app-conversion/)で結果を "Hex/UTF-32" で受け取ることで、Unicode 文字列をこの形式に簡単に変換できます。
|
||||
|
||||
|
||||
## 追加の言語サポート
|
||||
|
||||
`quantum/keymap_extras` には、様々な言語ファイルがあります — これらは Colemak または BÉPO のような代替レイアウトのファイルと同じように動作します。これらの言語ヘッダのいずれかを `#include` すると、その言語/国のレイアウトに固有のキーコードにアクセスできます。このようなキーコードは、2文字の国/言語コードの後に、アンダースコアとキーが対応する4文字の略語が続くことで定義されます。例えば、キーマップに `keymap_french.h` を含め、`FR_UGRV` を使うと、ネイティブのフランス語 AZERTY レイアウトを使うシステムで入力すると、`ù` が出力されます。
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# GPIO 制御 :id=gpio-control
|
||||
|
||||
<!---
|
||||
original document: 0.13.15:docs/internals_gpio_control.md
|
||||
git diff 0.13.15 HEAD -- docs/internals_gpio_control.md | cat
|
||||
original document: 0.13.15:docs/gpio_control.md
|
||||
git diff 0.13.15 HEAD -- docs/gpio_control.md | cat
|
||||
-->
|
||||
|
||||
QMK には、マイクロコントローラに依存しない GPIO 制御抽象レイヤーがあります。これは異なるプラットフォーム間でピン制御に簡単にアクセスできるようにするためのものです。
|
||||
@@ -1,78 +0,0 @@
|
||||
# `defines` グループ {#group__defines}
|
||||
|
||||
## 概要
|
||||
|
||||
メンバー | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
`define `[`SYSEX_BEGIN`](#group__defines_1ga1a3c39bb790dda8a368c4247caabcf79) |
|
||||
`define `[`SYSEX_END`](#group__defines_1ga753706d1d28e6f96d7caf1973e80feed) |
|
||||
`define `[`MIDI_STATUSMASK`](#group__defines_1gab78a1c818a5f5dab7a8946543f126c69) |
|
||||
`define `[`MIDI_CHANMASK`](#group__defines_1ga239edc0a6f8405d3a8f2804f1590b909) |
|
||||
`define `[`MIDI_CC`](#group__defines_1ga45f116a1daab76b3c930c2cecfaef215) |
|
||||
`define `[`MIDI_NOTEON`](#group__defines_1gafd416f27bf3590868c0c1f55c30be4c7) |
|
||||
`define `[`MIDI_NOTEOFF`](#group__defines_1gabed24bea2d989fd655e2ef2ad0765adc) |
|
||||
`define `[`MIDI_AFTERTOUCH`](#group__defines_1ga3a322d8cfd53576a2e167c1840551b0f) |
|
||||
`define `[`MIDI_PITCHBEND`](#group__defines_1gabcc799504e8064679bca03f232223af4) |
|
||||
`define `[`MIDI_PROGCHANGE`](#group__defines_1gaefb3f1595ffbb9db66b46c2c919a3d42) |
|
||||
`define `[`MIDI_CHANPRESSURE`](#group__defines_1gaeb3281cc7fcd0daade8ed3d2dfc33dbe) |
|
||||
`define `[`MIDI_CLOCK`](#group__defines_1gafa5e4e295aafd15ab7893344599b3b89) |
|
||||
`define `[`MIDI_TICK`](#group__defines_1ga3b99408ff864613765d4c3c2ceb52aa7) |
|
||||
`define `[`MIDI_START`](#group__defines_1ga8233631c85823aa546f932ad8975caa4) |
|
||||
`define `[`MIDI_CONTINUE`](#group__defines_1gab24430f0081e27215b0da84dd0ee745c) |
|
||||
`define `[`MIDI_STOP`](#group__defines_1ga3af9271d4b1f0d22904a0b055f48cf62) |
|
||||
`define `[`MIDI_ACTIVESENSE`](#group__defines_1gacd88ed42dba52bb4b2052c5656362677) |
|
||||
`define `[`MIDI_RESET`](#group__defines_1ga02947f30ca62dc332fdeb10c5868323b) |
|
||||
`define `[`MIDI_TC_QUARTERFRAME`](#group__defines_1gaaa072f33590e236d1bfd8f28e833ae31) |
|
||||
`define `[`MIDI_SONGPOSITION`](#group__defines_1ga412f6ed33a2150051374bee334ee1705) |
|
||||
`define `[`MIDI_SONGSELECT`](#group__defines_1gafcab254838b028365ae0259729e72c4e) |
|
||||
`define `[`MIDI_TUNEREQUEST`](#group__defines_1ga8100b907b8c0a84e58b1c53dcd9bd795) |
|
||||
`define `[`SYSEX_EDUMANUFID`](#group__defines_1ga5ef855ed955b00a2239ca16afbeb164f) |
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `define `[`SYSEX_BEGIN`](#group__defines_1ga1a3c39bb790dda8a368c4247caabcf79) {#group__defines_1ga1a3c39bb790dda8a368c4247caabcf79}
|
||||
|
||||
#### `define `[`SYSEX_END`](#group__defines_1ga753706d1d28e6f96d7caf1973e80feed) {#group__defines_1ga753706d1d28e6f96d7caf1973e80feed}
|
||||
|
||||
#### `define `[`MIDI_STATUSMASK`](#group__defines_1gab78a1c818a5f5dab7a8946543f126c69) {#group__defines_1gab78a1c818a5f5dab7a8946543f126c69}
|
||||
|
||||
#### `define `[`MIDI_CHANMASK`](#group__defines_1ga239edc0a6f8405d3a8f2804f1590b909) {#group__defines_1ga239edc0a6f8405d3a8f2804f1590b909}
|
||||
|
||||
#### `define `[`MIDI_CC`](#group__defines_1ga45f116a1daab76b3c930c2cecfaef215) {#group__defines_1ga45f116a1daab76b3c930c2cecfaef215}
|
||||
|
||||
#### `define `[`MIDI_NOTEON`](#group__defines_1gafd416f27bf3590868c0c1f55c30be4c7) {#group__defines_1gafd416f27bf3590868c0c1f55c30be4c7}
|
||||
|
||||
#### `define `[`MIDI_NOTEOFF`](#group__defines_1gabed24bea2d989fd655e2ef2ad0765adc) {#group__defines_1gabed24bea2d989fd655e2ef2ad0765adc}
|
||||
|
||||
#### `define `[`MIDI_AFTERTOUCH`](#group__defines_1ga3a322d8cfd53576a2e167c1840551b0f) {#group__defines_1ga3a322d8cfd53576a2e167c1840551b0f}
|
||||
|
||||
#### `define `[`MIDI_PITCHBEND`](#group__defines_1gabcc799504e8064679bca03f232223af4) {#group__defines_1gabcc799504e8064679bca03f232223af4}
|
||||
|
||||
#### `define `[`MIDI_PROGCHANGE`](#group__defines_1gaefb3f1595ffbb9db66b46c2c919a3d42) {#group__defines_1gaefb3f1595ffbb9db66b46c2c919a3d42}
|
||||
|
||||
#### `define `[`MIDI_CHANPRESSURE`](#group__defines_1gaeb3281cc7fcd0daade8ed3d2dfc33dbe) {#group__defines_1gaeb3281cc7fcd0daade8ed3d2dfc33dbe}
|
||||
|
||||
#### `define `[`MIDI_CLOCK`](#group__defines_1gafa5e4e295aafd15ab7893344599b3b89) {#group__defines_1gafa5e4e295aafd15ab7893344599b3b89}
|
||||
|
||||
#### `define `[`MIDI_TICK`](#group__defines_1ga3b99408ff864613765d4c3c2ceb52aa7) {#group__defines_1ga3b99408ff864613765d4c3c2ceb52aa7}
|
||||
|
||||
#### `define `[`MIDI_START`](#group__defines_1ga8233631c85823aa546f932ad8975caa4) {#group__defines_1ga8233631c85823aa546f932ad8975caa4}
|
||||
|
||||
#### `define `[`MIDI_CONTINUE`](#group__defines_1gab24430f0081e27215b0da84dd0ee745c) {#group__defines_1gab24430f0081e27215b0da84dd0ee745c}
|
||||
|
||||
#### `define `[`MIDI_STOP`](#group__defines_1ga3af9271d4b1f0d22904a0b055f48cf62) {#group__defines_1ga3af9271d4b1f0d22904a0b055f48cf62}
|
||||
|
||||
#### `define `[`MIDI_ACTIVESENSE`](#group__defines_1gacd88ed42dba52bb4b2052c5656362677) {#group__defines_1gacd88ed42dba52bb4b2052c5656362677}
|
||||
|
||||
#### `define `[`MIDI_RESET`](#group__defines_1ga02947f30ca62dc332fdeb10c5868323b) {#group__defines_1ga02947f30ca62dc332fdeb10c5868323b}
|
||||
|
||||
#### `define `[`MIDI_TC_QUARTERFRAME`](#group__defines_1gaaa072f33590e236d1bfd8f28e833ae31) {#group__defines_1gaaa072f33590e236d1bfd8f28e833ae31}
|
||||
|
||||
#### `define `[`MIDI_SONGPOSITION`](#group__defines_1ga412f6ed33a2150051374bee334ee1705) {#group__defines_1ga412f6ed33a2150051374bee334ee1705}
|
||||
|
||||
#### `define `[`MIDI_SONGSELECT`](#group__defines_1gafcab254838b028365ae0259729e72c4e) {#group__defines_1gafcab254838b028365ae0259729e72c4e}
|
||||
|
||||
#### `define `[`MIDI_TUNEREQUEST`](#group__defines_1ga8100b907b8c0a84e58b1c53dcd9bd795) {#group__defines_1ga8100b907b8c0a84e58b1c53dcd9bd795}
|
||||
|
||||
#### `define `[`SYSEX_EDUMANUFID`](#group__defines_1ga5ef855ed955b00a2239ca16afbeb164f) {#group__defines_1ga5ef855ed955b00a2239ca16afbeb164f}
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
# group `input_callback_reg` {#group__input__callback__reg}
|
||||
|
||||
<!---
|
||||
original document: 0.9.34:docs/internals_input_callback_reg.md
|
||||
git diff 0.9.34 HEAD -- docs/internals_input_callback_reg.md | cat
|
||||
-->
|
||||
|
||||
これらは受信コールバックを登録するために使用する関数です。
|
||||
|
||||
関数は、適切な midi メッセージが関連するデバイスの入力と一致した場合に呼び出されます。
|
||||
|
||||
## 概要
|
||||
|
||||
| メンバー | 説明 |
|
||||
--------------------------------|---------------------------------------------
|
||||
| `public void `[`midi_register_cc_callback`](#group__input__callback__reg_1ga64ab672abbbe393c9c4a83110c8df718)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | コントロールチェンジメッセージ受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_noteon_callback`](#group__input__callback__reg_1ga3962f276c17618923f1152779552103e)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | ノートオン受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_noteoff_callback`](#group__input__callback__reg_1gac847b66051bd6d53b762958be0ec4c6d)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | ノートオフ受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_aftertouch_callback`](#group__input__callback__reg_1gaa95bc901bd9edff956a667c9a69dd01f)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | アフタータッチ受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_pitchbend_callback`](#group__input__callback__reg_1ga071a28f02ba14f53de219be70ebd9a48)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | ピッチベンド受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_songposition_callback`](#group__input__callback__reg_1gaf2adfd79637f3553d8f26deb1ca22ed6)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | ソングポジション受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_progchange_callback`](#group__input__callback__reg_1gae6ba1a35a4cde9bd15dd42f87401d127)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` | プログラムチェンジ受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_chanpressure_callback`](#group__input__callback__reg_1ga39b31f1f4fb93917ce039b958f21b4f5)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` | チャンネルプレッシャー受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_songselect_callback`](#group__input__callback__reg_1gaf9aafc76a2dc4b9fdbb4106cbda6ce72)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` | ソングセレクト受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_tc_quarterframe_callback`](#group__input__callback__reg_1ga0a119fada2becc628cb15d753b257e6e)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` | タイムコードクォータフレーム受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_realtime_callback`](#group__input__callback__reg_1ga764f440e857b89084b1a07f9da2ff93a)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_one_byte_func_t func)` | リアルタイム受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_tunerequest_callback`](#group__input__callback__reg_1gae40ff3ce20bda79fef87da24b8321cb1)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_one_byte_func_t func)` | チューンリクエスト受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_sysex_callback`](#group__input__callback__reg_1ga63ce9631b025785c1848d0122d4c4c48)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_sysex_func_t func)` | システムエクスクルーシブ受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_fallthrough_callback`](#group__input__callback__reg_1ga7ed189164aa9682862b3181153afbd94)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_var_byte_func_t func)` | フォールスルー受信コールバックを登録する。 |
|
||||
| `public void `[`midi_register_catchall_callback`](#group__input__callback__reg_1ga9dbfed568d047a6cd05708f11fe39e99)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_var_byte_func_t func)` | キャッチオール受信コールバックを登録する。 |
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `public void `[`midi_register_cc_callback`](#group__input__callback__reg_1ga64ab672abbbe393c9c4a83110c8df718)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` {#group__input__callback__reg_1ga64ab672abbbe393c9c4a83110c8df718}
|
||||
|
||||
コントロールチェンジメッセージ受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_noteon_callback`](#group__input__callback__reg_1ga3962f276c17618923f1152779552103e)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` {#group__input__callback__reg_1ga3962f276c17618923f1152779552103e}
|
||||
|
||||
ノートオン受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_noteoff_callback`](#group__input__callback__reg_1gac847b66051bd6d53b762958be0ec4c6d)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` {#group__input__callback__reg_1gac847b66051bd6d53b762958be0ec4c6d}
|
||||
|
||||
ノートオフ受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_aftertouch_callback`](#group__input__callback__reg_1gaa95bc901bd9edff956a667c9a69dd01f)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` {#group__input__callback__reg_1gaa95bc901bd9edff956a667c9a69dd01f}
|
||||
|
||||
アフタータッチ受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_pitchbend_callback`](#group__input__callback__reg_1ga071a28f02ba14f53de219be70ebd9a48)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` {#group__input__callback__reg_1ga071a28f02ba14f53de219be70ebd9a48}
|
||||
|
||||
ピッチベンド受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_songposition_callback`](#group__input__callback__reg_1gaf2adfd79637f3553d8f26deb1ca22ed6)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` {#group__input__callback__reg_1gaf2adfd79637f3553d8f26deb1ca22ed6}
|
||||
|
||||
ソングポジション受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_progchange_callback`](#group__input__callback__reg_1gae6ba1a35a4cde9bd15dd42f87401d127)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` {#group__input__callback__reg_1gae6ba1a35a4cde9bd15dd42f87401d127}
|
||||
|
||||
プログラムチェンジ受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_chanpressure_callback`](#group__input__callback__reg_1ga39b31f1f4fb93917ce039b958f21b4f5)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` {#group__input__callback__reg_1ga39b31f1f4fb93917ce039b958f21b4f5}
|
||||
|
||||
チャンネルプレッシャー受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_songselect_callback`](#group__input__callback__reg_1gaf9aafc76a2dc4b9fdbb4106cbda6ce72)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` {#group__input__callback__reg_1gaf9aafc76a2dc4b9fdbb4106cbda6ce72}
|
||||
|
||||
ソングセレクト受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_tc_quarterframe_callback`](#group__input__callback__reg_1ga0a119fada2becc628cb15d753b257e6e)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` {#group__input__callback__reg_1ga0a119fada2becc628cb15d753b257e6e}
|
||||
|
||||
タイムコードクォータフレーム受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_realtime_callback`](#group__input__callback__reg_1ga764f440e857b89084b1a07f9da2ff93a)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_one_byte_func_t func)` {#group__input__callback__reg_1ga764f440e857b89084b1a07f9da2ff93a}
|
||||
|
||||
リアルタイム受信コールバックを登録する。
|
||||
|
||||
全てのリアルタイムメッセージ型に対してコールバックが呼ばれます。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_tunerequest_callback`](#group__input__callback__reg_1gae40ff3ce20bda79fef87da24b8321cb1)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_one_byte_func_t func)` {#group__input__callback__reg_1gae40ff3ce20bda79fef87da24b8321cb1}
|
||||
|
||||
チューンリクエスト受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_sysex_callback`](#group__input__callback__reg_1ga63ce9631b025785c1848d0122d4c4c48)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_sysex_func_t func)` {#group__input__callback__reg_1ga63ce9631b025785c1848d0122d4c4c48}
|
||||
|
||||
システムエクスクルーシブ受信コールバックを登録する。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_fallthrough_callback`](#group__input__callback__reg_1ga7ed189164aa9682862b3181153afbd94)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_var_byte_func_t func)` {#group__input__callback__reg_1ga7ed189164aa9682862b3181153afbd94}
|
||||
|
||||
フォールスルー受信コールバックを登録する。
|
||||
|
||||
より具体的なコールバックが見つからない場合にのみ呼ばれます。例えば、ノートオン受信コールバックを登録していないがノートオンメッセージを受け取った場合、フォールスルー受信コールバックが登録されている場合はそれが呼ばれます。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
|
||||
#### `public void `[`midi_register_catchall_callback`](#group__input__callback__reg_1ga9dbfed568d047a6cd05708f11fe39e99)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_var_byte_func_t func)` {#group__input__callback__reg_1ga9dbfed568d047a6cd05708f11fe39e99}
|
||||
|
||||
キャッチオール受信コールバックを登録する。
|
||||
|
||||
登録されている場合は、より具体的なコールバックあるいはフォールスルー受信コールバックが登録されている場合でも、一致する全てのメッセージに対してキャッチオール受信コールバックが呼ばれます。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 関連するデバイス
|
||||
|
||||
* `func` 登録するコールバック関数
|
||||
@@ -1,148 +0,0 @@
|
||||
# `midi_device` グループ {#group__midi__device}
|
||||
|
||||
<!---
|
||||
original document: 0.10.9:docs/internals_midi_device.md
|
||||
git diff 0.10.9 HEAD -- docs/internals_midi_device.md | cat
|
||||
-->
|
||||
|
||||
独自の MIDI デバイスを実装する時に、関数を使います。
|
||||
|
||||
実際にデバイスを介してバイトを送信するために、送信関数を設定します。このメソッドは、このデバイスで例えば midi_send_cc のような送信関数を呼ぶ時に呼ばれます。
|
||||
|
||||
midi_device_input を使ってデバイスからの入力データを処理し、それをデバイスに関連付けられたコールバックで渡します。
|
||||
|
||||
デバイスのプロセス関数の最初に呼び出される関数が必要な場合、midi_device_set_pre_input_process_func を使います。通常、入力をポーリングして midi_device_input に渡します。
|
||||
|
||||
## 概要
|
||||
|
||||
メンバー | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
`define `[`MIDI_INPUT_QUEUE_LENGTH`](#group__midi__device_1ga4aaa419caebdca2bbdfc1331e79781a8) |
|
||||
`enum `[`input_state_t`](#group__midi__device_1gac203e877d3df4275ceb8e7180a61f621) |
|
||||
`public void `[`midi_device_input`](#group__midi__device_1gad8d3db8eb35d9cfa51ef036a0a9d70db)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t cnt,uint8_t * input)` | 入力バイトを処理します。この関数はバイトを解析し、指定されたデバイスに関連する適切なコールバックを呼びます。この関数は、カスタムデバイスを作成していて、MIDI 入力が必要な場合に使います。
|
||||
`public void `[`midi_device_set_send_func`](#group__midi__device_1ga59f5a46bdd4452f186cc73d9e96d4673)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_var_byte_func_t send_func)` | 出力データバイトの送信に使われるコールバック関数を設定します。これは、カスタムデバイスを作成している場合のみ使われます。ロックを気にすることなく様々な MIDI 送信関数を呼び出すことができるように、コールバック関数で割り込みを無効にすることができます。
|
||||
`public void `[`midi_device_set_pre_input_process_func`](#group__midi__device_1ga4de0841b87c04fc23cb56b6451f33b69)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_no_byte_func_t pre_process_func)` | midi_device_process 呼び出しの最初に呼ばれるコールバックを設定します。これは入力データをポーリングし、midi_device_input 関数を介してデータを送信できます。カスタムデバイスを作成している場合のみ、これを使う可能性があります。
|
||||
`struct `[`_midi_device`](docs/api_midi_device.md#struct__midi__device) | この構造体は、MIDI デバイスの入出力関数と処理データを表します。
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `define `[`MIDI_INPUT_QUEUE_LENGTH`](#group__midi__device_1ga4aaa419caebdca2bbdfc1331e79781a8) {#group__midi__device_1ga4aaa419caebdca2bbdfc1331e79781a8}
|
||||
|
||||
#### `enum `[`input_state_t`](#group__midi__device_1gac203e877d3df4275ceb8e7180a61f621) {#group__midi__device_1gac203e877d3df4275ceb8e7180a61f621}
|
||||
|
||||
値 | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
IDLE |
|
||||
ONE_BYTE_MESSAGE |
|
||||
TWO_BYTE_MESSAGE |
|
||||
THREE_BYTE_MESSAGE |
|
||||
SYSEX_MESSAGE |
|
||||
|
||||
#### `public void `[`midi_device_input`](#group__midi__device_1gad8d3db8eb35d9cfa51ef036a0a9d70db)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t cnt,uint8_t * input)` {#group__midi__device_1gad8d3db8eb35d9cfa51ef036a0a9d70db}
|
||||
|
||||
入力バイトを処理します。この関数はバイトを解析し、指定されたデバイスに関連する適切なコールバックを呼びます。この関数は、カスタムデバイスを作成していて、MIDI 入力が必要な場合に使います。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 入力を関連付ける MIDI デバイス
|
||||
|
||||
* `cnt` 処理中のバイト数
|
||||
|
||||
* `input` 処理するバイトデータ
|
||||
|
||||
#### `public void `[`midi_device_set_send_func`](#group__midi__device_1ga59f5a46bdd4452f186cc73d9e96d4673)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_var_byte_func_t send_func)` {#group__midi__device_1ga59f5a46bdd4452f186cc73d9e96d4673}
|
||||
|
||||
出力データバイトの送信に使われるコールバック関数を設定します。これは、カスタムデバイスを作成している場合のみ使われます。ロックを気にすることなく様々な MIDI 送信関数を呼び出すことができるように、コールバック関数で割り込みを無効にすることができます。
|
||||
|
||||
#### パラメータ
|
||||
* `device` このコールバックを関連付ける MIDI デバイス
|
||||
|
||||
* `send_func` 送信を行うコールバック関数
|
||||
|
||||
#### `public void `[`midi_device_set_pre_input_process_func`](#group__midi__device_1ga4de0841b87c04fc23cb56b6451f33b69)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_no_byte_func_t pre_process_func)` {#group__midi__device_1ga4de0841b87c04fc23cb56b6451f33b69}
|
||||
|
||||
midi_device_process 呼び出しの最初に呼ばれるコールバックを設定します。これは入力データをポーリングし、midi_device_input 関数を介してデータを送信できます。カスタムデバイスを作成している場合のみ、これを使う可能性があります。
|
||||
|
||||
#### パラメータ
|
||||
* `device` このコールバックを関連付ける MIDI デバイス
|
||||
|
||||
* `midi_no_byte_func_t` 実際のコールバック関数
|
||||
|
||||
# `_midi_device` 構造体 {#struct__midi__device}
|
||||
|
||||
この構造体は、MIDI デバイスの入出力関数と処理データを表します。
|
||||
|
||||
デバイスは、実際の物理デバイス [シリアルポート、USB ポート]、または仮想デバイスを表すことができます。この構造体を直接変更する必要はありません。
|
||||
|
||||
## 概要
|
||||
|
||||
| メンバー | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
`public midi_var_byte_func_t `[`send_func`](docs/api_midi_device.md#struct__midi__device_1a25d4c94b4bbccd5b98f1032b469f3ff9) |
|
||||
`public midi_three_byte_func_t `[`input_cc_callback`](docs/api_midi_device.md#struct__midi__device_1a6da5236c1bc73877728df92d213a78d1) |
|
||||
`public midi_three_byte_func_t `[`input_noteon_callback`](docs/api_midi_device.md#struct__midi__device_1aa10b15cf1a7fb825a5df0d2abbe34a1c) |
|
||||
`public midi_three_byte_func_t `[`input_noteoff_callback`](docs/api_midi_device.md#struct__midi__device_1aaf290043078534d3a5a0ea4c840eba84) |
|
||||
`public midi_three_byte_func_t `[`input_aftertouch_callback`](docs/api_midi_device.md#struct__midi__device_1acb0b4901c545cec4b28b126f2d8c315f) |
|
||||
`public midi_three_byte_func_t `[`input_pitchbend_callback`](docs/api_midi_device.md#struct__midi__device_1a305fea672caeb996f2233bf8cd2bef18) |
|
||||
`public midi_three_byte_func_t `[`input_songposition_callback`](docs/api_midi_device.md#struct__midi__device_1a5f3f13638b3fef3fc561ed1bf301d586) |
|
||||
`public midi_two_byte_func_t `[`input_progchange_callback`](docs/api_midi_device.md#struct__midi__device_1adaf1da617c9a10a9dcad00ab1959d3da) |
|
||||
`public midi_two_byte_func_t `[`input_chanpressure_callback`](docs/api_midi_device.md#struct__midi__device_1ab7ca2925c539915d43974eff604d85f7) |
|
||||
`public midi_two_byte_func_t `[`input_songselect_callback`](docs/api_midi_device.md#struct__midi__device_1a89bed8a5a55376120cfc0a62b42f057f) |
|
||||
`public midi_two_byte_func_t `[`input_tc_quarterframe_callback`](docs/api_midi_device.md#struct__midi__device_1ad9813e75d22e284f9f65a907d20600f0) |
|
||||
`public midi_one_byte_func_t `[`input_realtime_callback`](docs/api_midi_device.md#struct__midi__device_1a9448eba4afb7e43650434748db3777be) |
|
||||
`public midi_one_byte_func_t `[`input_tunerequest_callback`](docs/api_midi_device.md#struct__midi__device_1a0cb8fd53e00cf1d4202d4fa04d038e8d) |
|
||||
`public midi_sysex_func_t `[`input_sysex_callback`](docs/api_midi_device.md#struct__midi__device_1afff9a0ce641762aaef24c1e6953ec9a2) |
|
||||
`public midi_var_byte_func_t `[`input_fallthrough_callback`](docs/api_midi_device.md#struct__midi__device_1abb974ec6d734001b4a0e370f292be503) |
|
||||
`public midi_var_byte_func_t `[`input_catchall_callback`](docs/api_midi_device.md#struct__midi__device_1aae0d535129d4fd650edc98eb3f7584f8) |
|
||||
`public midi_no_byte_func_t `[`pre_input_process_callback`](docs/api_midi_device.md#struct__midi__device_1aeb0bb8923d66c23d874e177dc4265754) |
|
||||
`public uint8_t `[`input_buffer`](docs/api_midi_device.md#struct__midi__device_1a7c5684857d6af4ebc4dc12da27bd6b2a) |
|
||||
`public input_state_t `[`input_state`](docs/api_midi_device.md#struct__midi__device_1a69a687d2d1c449ec15a11c07a5722e39) |
|
||||
`public uint16_t `[`input_count`](docs/api_midi_device.md#struct__midi__device_1a68dea8e7b6151e89c85c95caa612ee5d) |
|
||||
`public uint8_t `[`input_queue_data`](docs/api_midi_device.md#struct__midi__device_1ada41de021135dc423abedcbb30f366ff) |
|
||||
`public `[`byteQueue_t`](#structbyte_queue__t)` `[`input_queue`](#struct__midi__device_1a49c8538a8a02193c58e28a56eb695d8f) |
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `public midi_var_byte_func_t `[`send_func`](docs/api_midi_device.md#struct__midi__device_1a25d4c94b4bbccd5b98f1032b469f3ff9) {#struct__midi__device_1a25d4c94b4bbccd5b98f1032b469f3ff9}
|
||||
|
||||
#### `public midi_three_byte_func_t `[`input_cc_callback`](docs/api_midi_device.md#struct__midi__device_1a6da5236c1bc73877728df92d213a78d1) {#struct__midi__device_1a6da5236c1bc73877728df92d213a78d1}
|
||||
|
||||
#### `public midi_three_byte_func_t `[`input_noteon_callback`](docs/api_midi_device.md#struct__midi__device_1aa10b15cf1a7fb825a5df0d2abbe34a1c) {#struct__midi__device_1aa10b15cf1a7fb825a5df0d2abbe34a1c}
|
||||
|
||||
#### `public midi_three_byte_func_t `[`input_noteoff_callback`](docs/api_midi_device.md#struct__midi__device_1aaf290043078534d3a5a0ea4c840eba84) {#struct__midi__device_1aaf290043078534d3a5a0ea4c840eba84}
|
||||
|
||||
#### `public midi_three_byte_func_t `[`input_aftertouch_callback`](docs/api_midi_device.md#struct__midi__device_1acb0b4901c545cec4b28b126f2d8c315f) {#struct__midi__device_1acb0b4901c545cec4b28b126f2d8c315f}
|
||||
|
||||
#### `public midi_three_byte_func_t `[`input_pitchbend_callback`](docs/api_midi_device.md#struct__midi__device_1a305fea672caeb996f2233bf8cd2bef18) {#struct__midi__device_1a305fea672caeb996f2233bf8cd2bef18}
|
||||
|
||||
#### `public midi_three_byte_func_t `[`input_songposition_callback`](docs/api_midi_device.md#struct__midi__device_1a5f3f13638b3fef3fc561ed1bf301d586) {#struct__midi__device_1a5f3f13638b3fef3fc561ed1bf301d586}
|
||||
|
||||
#### `public midi_two_byte_func_t `[`input_progchange_callback`](docs/api_midi_device.md#struct__midi__device_1adaf1da617c9a10a9dcad00ab1959d3da) {#struct__midi__device_1adaf1da617c9a10a9dcad00ab1959d3da}
|
||||
|
||||
#### `public midi_two_byte_func_t `[`input_chanpressure_callback`](docs/api_midi_device.md#struct__midi__device_1ab7ca2925c539915d43974eff604d85f7) {#struct__midi__device_1ab7ca2925c539915d43974eff604d85f7}
|
||||
|
||||
#### `public midi_two_byte_func_t `[`input_songselect_callback`](docs/api_midi_device.md#struct__midi__device_1a89bed8a5a55376120cfc0a62b42f057f) {#struct__midi__device_1a89bed8a5a55376120cfc0a62b42f057f}
|
||||
|
||||
#### `public midi_two_byte_func_t `[`input_tc_quarterframe_callback`](docs/api_midi_device.md#struct__midi__device_1ad9813e75d22e284f9f65a907d20600f0) {#struct__midi__device_1ad9813e75d22e284f9f65a907d20600f0}
|
||||
|
||||
#### `public midi_one_byte_func_t `[`input_realtime_callback`](docs/api_midi_device.md#struct__midi__device_1a9448eba4afb7e43650434748db3777be) {#struct__midi__device_1a9448eba4afb7e43650434748db3777be}
|
||||
|
||||
#### `public midi_one_byte_func_t `[`input_tunerequest_callback`](docs/api_midi_device.md#struct__midi__device_1a0cb8fd53e00cf1d4202d4fa04d038e8d) {#struct__midi__device_1a0cb8fd53e00cf1d4202d4fa04d038e8d}
|
||||
|
||||
#### `public midi_sysex_func_t `[`input_sysex_callback`](docs/api_midi_device.md#struct__midi__device_1afff9a0ce641762aaef24c1e6953ec9a2) {#struct__midi__device_1afff9a0ce641762aaef24c1e6953ec9a2}
|
||||
|
||||
#### `public midi_var_byte_func_t `[`input_fallthrough_callback`](docs/api_midi_device.md#struct__midi__device_1abb974ec6d734001b4a0e370f292be503) {#struct__midi__device_1abb974ec6d734001b4a0e370f292be503}
|
||||
|
||||
#### `public midi_var_byte_func_t `[`input_catchall_callback`](docs/api_midi_device.md#struct__midi__device_1aae0d535129d4fd650edc98eb3f7584f8) {#struct__midi__device_1aae0d535129d4fd650edc98eb3f7584f8}
|
||||
|
||||
#### `public midi_no_byte_func_t `[`pre_input_process_callback`](docs/api_midi_device.md#struct__midi__device_1aeb0bb8923d66c23d874e177dc4265754) {#struct__midi__device_1aeb0bb8923d66c23d874e177dc4265754}
|
||||
|
||||
#### `public uint8_t `[`input_buffer`](docs/api_midi_device.md#struct__midi__device_1a7c5684857d6af4ebc4dc12da27bd6b2a) {#struct__midi__device_1a7c5684857d6af4ebc4dc12da27bd6b2a}
|
||||
|
||||
#### `public input_state_t `[`input_state`](docs/api_midi_device.md#struct__midi__device_1a69a687d2d1c449ec15a11c07a5722e39) {#struct__midi__device_1a69a687d2d1c449ec15a11c07a5722e39}
|
||||
|
||||
#### `public uint16_t `[`input_count`](docs/api_midi_device.md#struct__midi__device_1a68dea8e7b6151e89c85c95caa612ee5d) {#struct__midi__device_1a68dea8e7b6151e89c85c95caa612ee5d}
|
||||
|
||||
#### `public uint8_t `[`input_queue_data`](docs/api_midi_device.md#struct__midi__device_1ada41de021135dc423abedcbb30f366ff) {#struct__midi__device_1ada41de021135dc423abedcbb30f366ff}
|
||||
|
||||
#### `public `[`byteQueue_t`](#structbyte_queue__t)` `[`input_queue`](#struct__midi__device_1a49c8538a8a02193c58e28a56eb695d8f) {#struct__midi__device_1a49c8538a8a02193c58e28a56eb695d8f}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
# `midi_device_setup_process` グループ {#group__midi__device__setup__process}
|
||||
|
||||
<!---
|
||||
original document: 0.10.9:docs/internals_midi_device_setup_process.md
|
||||
git diff 0.10.9 HEAD -- docs/internals_midi_device_setup_process.md | cat
|
||||
-->
|
||||
|
||||
これらは、デバイスを初期化して実行するために使う必要があるメソッドです。
|
||||
|
||||
## 概要
|
||||
|
||||
メンバー | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
`public void `[`midi_device_init`](#group__midi__device__setup__process_1gaf29deddc94ea98a59daa0bde1aefd9d9)`(`[`MidiDevice`](#struct__midi__device)` * device)` | デバイスを初期化します。
|
||||
`public void `[`midi_device_process`](#group__midi__device__setup__process_1gaa3d5993d0e998a1b59bbf5ab9c7b492b)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 入力データを処理します。
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `public void `[`midi_device_init`](#group__midi__device__setup__process_1gaf29deddc94ea98a59daa0bde1aefd9d9)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__midi__device__setup__process_1gaf29deddc94ea98a59daa0bde1aefd9d9}
|
||||
|
||||
デバイスを初期化します。
|
||||
|
||||
問題のデバイスを使う前にこれを呼び出す必要があります。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 初期化するデバイス
|
||||
|
||||
#### `public void `[`midi_device_process`](#group__midi__device__setup__process_1gaa3d5993d0e998a1b59bbf5ab9c7b492b)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__midi__device__setup__process_1gaa3d5993d0e998a1b59bbf5ab9c7b492b}
|
||||
|
||||
入力データを処理します。
|
||||
|
||||
このメソッドは入力処理を駆動します。入力コールバックが呼び出されることが予想される場合は、このメソッドを頻繁に呼び出す必要があります。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 処理するデバイス
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
# `midi_util` グループ {#group__midi__util}
|
||||
|
||||
<!---
|
||||
original document: 0.10.9:docs/internals_midi_util.md
|
||||
git diff 0.10.9 HEAD -- docs/internals_midi_util.md | cat
|
||||
-->
|
||||
|
||||
## 概要
|
||||
|
||||
| メンバー | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
| `enum `[`midi_packet_length_t`](#group__midi__util_1gae29ff56aee2b430ffe53933b97e5e79e) | 可能なパケット長の値の列挙型。
|
||||
| `public bool `[`midi_is_statusbyte`](#group__midi__util_1ga12e3b42ff9cbb4b4f2bc455fc8743ee5)`(uint8_t theByte)` | 指定されたバイトがステータスバイトであるかどうかを検査します。
|
||||
| `public bool `[`midi_is_realtime`](#group__midi__util_1gad2f52c363e34a8000d80c983c324e2d7)`(uint8_t theByte)` | 指定されたバイトがリアルタイムメッセージであるかどうかを検査します。
|
||||
| `public `[`midi_packet_length_t`](#group__midi__util_1gae29ff56aee2b430ffe53933b97e5e79e)` `[`midi_packet_length`](#group__midi__util_1gaa168b43af6ae9de0debce1625e4b8175)`(uint8_t status)` | 指定されたステータスバイトに関連付けられたパケットの長さを調べます。
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `enum `[`midi_packet_length_t`](#group__midi__util_1gae29ff56aee2b430ffe53933b97e5e79e) {#group__midi__util_1gae29ff56aee2b430ffe53933b97e5e79e}
|
||||
|
||||
| 値 | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
UNDEFINED |
|
||||
ONE |
|
||||
TWO |
|
||||
THREE |
|
||||
|
||||
可能なパケット長の値の列挙型。
|
||||
|
||||
#### `public bool `[`midi_is_statusbyte`](#group__midi__util_1ga12e3b42ff9cbb4b4f2bc455fc8743ee5)`(uint8_t theByte)` {#group__midi__util_1ga12e3b42ff9cbb4b4f2bc455fc8743ee5}
|
||||
|
||||
指定されたバイトがステータスバイトであるかどうかを検査します。
|
||||
|
||||
#### パラメータ
|
||||
* `theByte` 検査するバイト
|
||||
|
||||
#### 返り値
|
||||
指定されたバイトが MIDI ステータスバイトの場合は true
|
||||
|
||||
#### `public bool `[`midi_is_realtime`](#group__midi__util_1gad2f52c363e34a8000d80c983c324e2d7)`(uint8_t theByte)` {#group__midi__util_1gad2f52c363e34a8000d80c983c324e2d7}
|
||||
|
||||
指定されたバイトがリアルタイムメッセージであるかどうかを検査します。
|
||||
|
||||
#### パラメータ
|
||||
* `theByte` 検査するバイト
|
||||
|
||||
#### 返り値
|
||||
リアルタイムメッセージの場合は true、それ以外の場合は false
|
||||
|
||||
#### `public `[`midi_packet_length_t`](#group__midi__util_1gae29ff56aee2b430ffe53933b97e5e79e)` `[`midi_packet_length`](#group__midi__util_1gaa168b43af6ae9de0debce1625e4b8175)`(uint8_t status)` {#group__midi__util_1gaa168b43af6ae9de0debce1625e4b8175}
|
||||
|
||||
指定されたステータスバイトに関連付けられたパケットの長さを調べます。
|
||||
|
||||
#### パラメータ
|
||||
* `status` ステータスバイト
|
||||
|
||||
#### 返り値
|
||||
パケットの長さ。バイトがステータスバイトではない場合、あるいは sysex ステータスバイトの場合は、UNDEFINED を返します。
|
||||
|
||||
@@ -1,246 +0,0 @@
|
||||
# `send_functions` グループ {#group__send__functions}
|
||||
|
||||
<!---
|
||||
original document: 0.10.9:docs/internals_send_functions.md
|
||||
git diff 0.10.9 HEAD -- docs/internals_send_functions.md | cat
|
||||
-->
|
||||
|
||||
これらは、デバイスを介して MIDI データを送信するために使う関数です。
|
||||
|
||||
## 概要
|
||||
|
||||
メンバー | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
`public void `[`midi_send_cc`](#group__send__functions_1gaaf884811c92df405ca8fe1a00082f960)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num,uint8_t val)` | 指定されたデバイスを介して、コントロールチェンジメッセージを送信します。
|
||||
`public void `[`midi_send_noteon`](#group__send__functions_1ga467bcf46dbf03ec269ce565b46bc2775)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num,uint8_t vel)` | 指定されたデバイスを介してノートオンメッセージを送信します。
|
||||
`public void `[`midi_send_noteoff`](#group__send__functions_1gaedb7d8805425eef5d47d57ddcb4c7a49)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num,uint8_t vel)` | 指定されたデバイスを介してノートオフメッセージを送信します。
|
||||
`public void `[`midi_send_aftertouch`](#group__send__functions_1ga0014847571317a0e34b2ef46a6bc584f)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t note_num,uint8_t amt)` | 指定されたデバイスを介してアフタータッチメッセージを送信します。
|
||||
`public void `[`midi_send_pitchbend`](#group__send__functions_1gae5a4a1e71611e7534be80af9ce3d3491)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,int16_t amt)` | 指定されたデバイスを介してピッチベンドメッセージを送信します。
|
||||
`public void `[`midi_send_programchange`](#group__send__functions_1ga7b15588ef25e5e1ff09c2afc3151ce86)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num)` | 指定されたデバイスを介してプログラムチェンジメッセージを送信します。
|
||||
`public void `[`midi_send_channelpressure`](#group__send__functions_1gaf23e69fdf812e89c0036f51f88ab2e1b)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t amt)` | 指定されたデバイスを介してチャンネルプレッシャーメッセージを送信します。
|
||||
`public void `[`midi_send_clock`](#group__send__functions_1ga4e1b11a7cdb0875f6e03ce7c79c581aa)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してクロックメッセージを送信します。
|
||||
`public void `[`midi_send_tick`](#group__send__functions_1ga2b43c7d433d940c5b907595aac947972)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してティックメッセージを送信します。
|
||||
`public void `[`midi_send_start`](#group__send__functions_1ga1569749a8d58ccc56789289d7c7245cc)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してスタートメッセージを送信します。
|
||||
`public void `[`midi_send_continue`](#group__send__functions_1gaed5dc29d754a27372e89ab8bc20ee120)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してコンティニューメッセージを送信します。
|
||||
`public void `[`midi_send_stop`](#group__send__functions_1ga026e1a620276cb653ac501aa0d12a988)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してストップメッセージを送信します。
|
||||
`public void `[`midi_send_activesense`](#group__send__functions_1ga9b6e4c6ce4719d2604187b325620db37)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してアクティブセンスメッセージを送信します。
|
||||
`public void `[`midi_send_reset`](#group__send__functions_1ga3671e39a6d93ca9568fc493001af1b1b)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してリセットメッセージを送信します。
|
||||
`public void `[`midi_send_tcquarterframe`](#group__send__functions_1ga5b85639910eec280bb744c934d0fd45a)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t time)` | 指定されたデバイスを介してタイムコードクォータフレームメッセージを送信します。
|
||||
`public void `[`midi_send_songposition`](#group__send__functions_1gab1c9eeef3b57a8cd2e6128d18e85eb7f)`(`[`MidiDevice`](#struct__midi__device)` * device,uint16_t pos)` | 指定されたデバイスを介してソングポジションメッセージを送信します。
|
||||
`public void `[`midi_send_songselect`](#group__send__functions_1ga42de7838ba70d949af9a50f9facc3c50)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t song)` | 指定されたデバイスを介してソングセレクトメッセージを送信します。
|
||||
`public void `[`midi_send_tunerequest`](#group__send__functions_1ga8db6c7e04d48e4d2266dd59118ca0656)`(`[`MidiDevice`](#struct__midi__device)` * device)` | 指定されたデバイスを介してチューンリクエストメッセージを送信します。
|
||||
`public void `[`midi_send_byte`](#group__send__functions_1ga857e85eb90b288385642d4d991e09881)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t b)` | 指定されたデバイスを介してバイトを送信します。
|
||||
`public void `[`midi_send_data`](#group__send__functions_1ga36e2f2e45369d911b76969361679054b)`(`[`MidiDevice`](#struct__midi__device)` * device,uint16_t count,uint8_t byte0,uint8_t byte1,uint8_t byte2)` | 最大3バイトのデータを送信します。
|
||||
`public void `[`midi_send_array`](#group__send__functions_1ga245243cb1da18d2cea18d4b18d846ead)`(`[`MidiDevice`](#struct__midi__device)` * device,uint16_t count,uint8_t * array)` | フォーマットされた MIDI データの配列を送信します。
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `public void `[`midi_send_cc`](#group__send__functions_1gaaf884811c92df405ca8fe1a00082f960)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num,uint8_t val)` {#group__send__functions_1gaaf884811c92df405ca8fe1a00082f960}
|
||||
|
||||
指定されたデバイスを介して、コントロールチェンジメッセージ(cc)を送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `chan` 送信するチャンネル、0-15
|
||||
|
||||
* `num` コントロールチェンジナンバー
|
||||
|
||||
* `val` コントロールチェンジナンバーの値
|
||||
|
||||
#### `public void `[`midi_send_noteon`](#group__send__functions_1ga467bcf46dbf03ec269ce565b46bc2775)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num,uint8_t vel)` {#group__send__functions_1ga467bcf46dbf03ec269ce565b46bc2775}
|
||||
|
||||
指定されたデバイスを介してノートオンメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `chan` 送信するチャンネル、0-15
|
||||
|
||||
* `num` ノート番号
|
||||
|
||||
* `vel` ノートベロシティ
|
||||
|
||||
#### `public void `[`midi_send_noteoff`](#group__send__functions_1gaedb7d8805425eef5d47d57ddcb4c7a49)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num,uint8_t vel)` {#group__send__functions_1gaedb7d8805425eef5d47d57ddcb4c7a49}
|
||||
|
||||
指定されたデバイスを介してノートオフメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `chan` 送信するチャンネル、0-15
|
||||
|
||||
* `num` ノート番号
|
||||
|
||||
* `vel` ノートベロシティ
|
||||
|
||||
#### `public void `[`midi_send_aftertouch`](#group__send__functions_1ga0014847571317a0e34b2ef46a6bc584f)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t note_num,uint8_t amt)` {#group__send__functions_1ga0014847571317a0e34b2ef46a6bc584f}
|
||||
|
||||
指定されたデバイスを介してアフタータッチメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `chan` 送信するチャンネル、0-15
|
||||
|
||||
* `note_num` ノート番号
|
||||
|
||||
* `amt` アフタータッチ量
|
||||
|
||||
#### `public void `[`midi_send_pitchbend`](#group__send__functions_1gae5a4a1e71611e7534be80af9ce3d3491)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,int16_t amt)` {#group__send__functions_1gae5a4a1e71611e7534be80af9ce3d3491}
|
||||
|
||||
指定されたデバイスを介してピッチベンドメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `chan` 送信するチャンネル、0-15
|
||||
|
||||
* `amt` ベンド量の範囲: -8192..8191、0 はベンドしないことを意味します
|
||||
|
||||
#### `public void `[`midi_send_programchange`](#group__send__functions_1ga7b15588ef25e5e1ff09c2afc3151ce86)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t num)` {#group__send__functions_1ga7b15588ef25e5e1ff09c2afc3151ce86}
|
||||
|
||||
指定されたデバイスを介してプログラムチェンジメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `chan` 送信するチャンネル、0-15
|
||||
|
||||
* `num` 変更先のプログラム
|
||||
|
||||
#### `public void `[`midi_send_channelpressure`](#group__send__functions_1gaf23e69fdf812e89c0036f51f88ab2e1b)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t chan,uint8_t amt)` {#group__send__functions_1gaf23e69fdf812e89c0036f51f88ab2e1b}
|
||||
|
||||
指定されたデバイスを介してチャンネルプレッシャーメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `chan` 送信するチャンネル、0-15
|
||||
|
||||
* `amt` チャンネルプレッシャーの量
|
||||
|
||||
#### `public void `[`midi_send_clock`](#group__send__functions_1ga4e1b11a7cdb0875f6e03ce7c79c581aa)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1ga4e1b11a7cdb0875f6e03ce7c79c581aa}
|
||||
|
||||
指定されたデバイスを介してクロックメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_tick`](#group__send__functions_1ga2b43c7d433d940c5b907595aac947972)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1ga2b43c7d433d940c5b907595aac947972}
|
||||
|
||||
指定されたデバイスを介してティックメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_start`](#group__send__functions_1ga1569749a8d58ccc56789289d7c7245cc)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1ga1569749a8d58ccc56789289d7c7245cc}
|
||||
|
||||
指定されたデバイスを介してスタートメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_continue`](#group__send__functions_1gaed5dc29d754a27372e89ab8bc20ee120)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1gaed5dc29d754a27372e89ab8bc20ee120}
|
||||
|
||||
指定されたデバイスを介してコンティニューメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_stop`](#group__send__functions_1ga026e1a620276cb653ac501aa0d12a988)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1ga026e1a620276cb653ac501aa0d12a988}
|
||||
|
||||
指定されたデバイスを介してストップメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_activesense`](#group__send__functions_1ga9b6e4c6ce4719d2604187b325620db37)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1ga9b6e4c6ce4719d2604187b325620db37}
|
||||
|
||||
指定されたデバイスを介してアクティブセンスメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_reset`](#group__send__functions_1ga3671e39a6d93ca9568fc493001af1b1b)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1ga3671e39a6d93ca9568fc493001af1b1b}
|
||||
|
||||
指定されたデバイスを介してリセットメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_tcquarterframe`](#group__send__functions_1ga5b85639910eec280bb744c934d0fd45a)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t time)` {#group__send__functions_1ga5b85639910eec280bb744c934d0fd45a}
|
||||
|
||||
指定されたデバイスを介してタイムコードクォータフレームメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `time` このクォータフレームの時間。範囲は、0..16383
|
||||
|
||||
#### `public void `[`midi_send_songposition`](#group__send__functions_1gab1c9eeef3b57a8cd2e6128d18e85eb7f)`(`[`MidiDevice`](#struct__midi__device)` * device,uint16_t pos)` {#group__send__functions_1gab1c9eeef3b57a8cd2e6128d18e85eb7f}
|
||||
|
||||
指定されたデバイスを介してソングポジションメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `pos` ソングポジション
|
||||
|
||||
#### `public void `[`midi_send_songselect`](#group__send__functions_1ga42de7838ba70d949af9a50f9facc3c50)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t song)` {#group__send__functions_1ga42de7838ba70d949af9a50f9facc3c50}
|
||||
|
||||
指定されたデバイスを介してソングセレクトメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `song` 選択するソング
|
||||
|
||||
#### `public void `[`midi_send_tunerequest`](#group__send__functions_1ga8db6c7e04d48e4d2266dd59118ca0656)`(`[`MidiDevice`](#struct__midi__device)` * device)` {#group__send__functions_1ga8db6c7e04d48e4d2266dd59118ca0656}
|
||||
|
||||
指定されたデバイスを介してチューンリクエストメッセージを送信します。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
#### `public void `[`midi_send_byte`](#group__send__functions_1ga857e85eb90b288385642d4d991e09881)`(`[`MidiDevice`](#struct__midi__device)` * device,uint8_t b)` {#group__send__functions_1ga857e85eb90b288385642d4d991e09881}
|
||||
|
||||
指定されたデバイスを介してバイトを送信します。
|
||||
|
||||
これは、指定された MIDI デバイスを介してデータを送信する一般的なメソッドです。これは、この API に実装されていない sysex データまたはメッセージがある場合、それらを送信するのに役立ちます。そのようなものを見つけた場合は、私たちがそれらを追加できるように、作者に連絡してください。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `b` 送信するバイト
|
||||
|
||||
#### `public void `[`midi_send_data`](#group__send__functions_1ga36e2f2e45369d911b76969361679054b)`(`[`MidiDevice`](#struct__midi__device)` * device,uint16_t count,uint8_t byte0,uint8_t byte1,uint8_t byte2)` {#group__send__functions_1ga36e2f2e45369d911b76969361679054b}
|
||||
|
||||
最大3バイトのデータを送信します。
|
||||
|
||||
これを使って sysex を通過できるように count に4の剰余が適用されます。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `count` 送信するバイト数、4の剰余が適用されます
|
||||
|
||||
* `byte0` 最初のバイト
|
||||
|
||||
* `byte1` 2番目のバイト。cnt % 4 != 2 の場合は無視されます
|
||||
|
||||
* `byte2` 3番目のバイト。cnt % 4 != 3 の場合は無視されます
|
||||
|
||||
#### `public void `[`midi_send_array`](#group__send__functions_1ga245243cb1da18d2cea18d4b18d846ead)`(`[`MidiDevice`](#struct__midi__device)` * device,uint16_t count,uint8_t * array)` {#group__send__functions_1ga245243cb1da18d2cea18d4b18d846ead}
|
||||
|
||||
フォーマットされた MIDI データの配列を送信します。
|
||||
|
||||
sysex に使うことができます。
|
||||
|
||||
#### パラメータ
|
||||
* `device` 送信に使うデバイス
|
||||
|
||||
* `count` 送信するバイト数
|
||||
|
||||
* `array` バイトの配列
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
# `sysex_tools` グループ {#group__sysex__tools}
|
||||
|
||||
<!---
|
||||
original document: 0.10.9:docs/internals_sysex_tools.md
|
||||
git diff 0.10.9 HEAD -- docs/internals_sysex_tools.md | cat
|
||||
-->
|
||||
|
||||
## 概要
|
||||
|
||||
| メンバー | 説明
|
||||
--------------------------------|---------------------------------------------
|
||||
| `public uint16_t `[`sysex_encoded_length`](#group__sysex__tools_1ga061e5607030412d6e62e2390d8013f0a)`(uint16_t decoded_length)` | エンコード後のメッセージの長さを計算します。
|
||||
| `public uint16_t `[`sysex_decoded_length`](#group__sysex__tools_1ga121fc227d3acc1c0ea08c9a5c26fa3b0)`(uint16_t encoded_length)` | デコード後のメッセージの長さを計算します。
|
||||
| `public uint16_t `[`sysex_encode`](#group__sysex__tools_1ga54d77f8d32f92a6f329daefa2b314742)`(uint8_t * encoded,const uint8_t * source,uint16_t length)` | sysex メッセージで安全に送信できるようにデータをエンコードします。
|
||||
| `public uint16_t `[`sysex_decode`](#group__sysex__tools_1gaaad1d9ba2d5eca709a0ab4ba40662229)`(uint8_t * decoded,const uint8_t * source,uint16_t length)` | エンコードされたデータをデコードします。
|
||||
|
||||
## メンバー
|
||||
|
||||
#### `public uint16_t `[`sysex_encoded_length`](#group__sysex__tools_1ga061e5607030412d6e62e2390d8013f0a)`(uint16_t decoded_length)` {#group__sysex__tools_1ga061e5607030412d6e62e2390d8013f0a}
|
||||
|
||||
エンコード後のメッセージの長さを計算します。
|
||||
|
||||
#### パラメータ
|
||||
* `decoded_length` エンコードするメッセージの長さのバイト数。
|
||||
|
||||
#### 返り値
|
||||
エンコード後のメッセージの長さのバイト数。
|
||||
|
||||
#### `public uint16_t `[`sysex_decoded_length`](#group__sysex__tools_1ga121fc227d3acc1c0ea08c9a5c26fa3b0)`(uint16_t encoded_length)` {#group__sysex__tools_1ga121fc227d3acc1c0ea08c9a5c26fa3b0}
|
||||
|
||||
デコード後のメッセージの長さを計算します。
|
||||
|
||||
#### パラメータ
|
||||
* `encoded_length` エンコードされたメッセージの長さのバイト数。
|
||||
|
||||
#### 返り値
|
||||
デコードされた後のメッセージの長さのバイト数。
|
||||
|
||||
#### `public uint16_t `[`sysex_encode`](#group__sysex__tools_1ga54d77f8d32f92a6f329daefa2b314742)`(uint8_t * encoded,const uint8_t * source,uint16_t length)` {#group__sysex__tools_1ga54d77f8d32f92a6f329daefa2b314742}
|
||||
|
||||
sysex メッセージで安全に送信できるようにデータをエンコードします。
|
||||
|
||||
#### パラメータ
|
||||
* `encoded` 出力データバッファは、少なくとも sysex_encoded_length(length) バイトの長さが必要です。
|
||||
|
||||
* `source` エンコードされるデータの入力バッファ。
|
||||
|
||||
* `length` 入力バッファからエンコードするバイト数。
|
||||
|
||||
#### 返り値
|
||||
エンコードされたバイト数。
|
||||
|
||||
#### `public uint16_t `[`sysex_decode`](#group__sysex__tools_1gaaad1d9ba2d5eca709a0ab4ba40662229)`(uint8_t * decoded,const uint8_t * source,uint16_t length)` {#group__sysex__tools_1gaaad1d9ba2d5eca709a0ab4ba40662229}
|
||||
|
||||
エンコードされたデータをデコードします。
|
||||
|
||||
#### パラメータ
|
||||
* `decoded` 出力データバッファは、少なくとも sysex_decoded_length(length) バイトの長さが必要です。
|
||||
|
||||
* `source` デコードされるデータの入力バッファ。
|
||||
|
||||
* `length` 入力バッファからデコードするバイト数。
|
||||
|
||||
#### 返り値
|
||||
デコードされたバイト数。
|
||||
|
||||
@@ -27,7 +27,7 @@ QMK で現在サポートされているキーボードが Pro Micro(または
|
||||
#endif
|
||||
```
|
||||
|
||||
`PORTB/DDRB` などが定義されていないというエラーが発生した場合は、ARM と AVR の両方で機能する [GPIO 制御](ja/internals_gpio_control.md) を使用するようにキーボードのコードを変換する必要があります。これは AVR ビルドにまったく影響を与えません。
|
||||
`PORTB/DDRB` などが定義されていないというエラーが発生した場合は、ARM と AVR の両方で機能する [GPIO 制御](ja/gpio_control.md) を使用するようにキーボードのコードを変換する必要があります。これは AVR ビルドにまったく影響を与えません。
|
||||
|
||||
Proton C には1つのオンボード LED(C13)しかなく、デフォルトでは TXLED(D5) がそれにマップされています。代わりに RXLED(B0) をそれにマッピングしたい場合は、`config.h` に次のように追加してください。
|
||||
|
||||
|
||||
+6
-5
@@ -219,11 +219,12 @@ See also: [Basic Keycodes](keycodes_basic.md)
|
||||
|
||||
See also: [Quantum Keycodes](quantum_keycodes.md#qmk-keycodes)
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|-----------------|---------|-------------------------------------------------------|
|
||||
|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing |
|
||||
|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode |
|
||||
|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory)|
|
||||
|Key |Aliases |Description |
|
||||
|-----------------|---------|---------------------------------------------------------------------------------|
|
||||
|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing |
|
||||
|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode |
|
||||
|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory) |
|
||||
|`QK_MAKE` | |Sends `qmk compile -kb (keyboard) -km (keymap)`, or `qmk flash` if shift is held |
|
||||
|
||||
## Audio Keys :id=audio-keys
|
||||
|
||||
|
||||
+4
-2
@@ -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.
|
||||
|
||||
@@ -50,7 +50,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
|
||||
- valid maintainer
|
||||
- displays correctly in Configurator (press Ctrl+Shift+I to preview local file, turn on fast input to verify ordering)
|
||||
- `readme.md`
|
||||
- standard template should be present -- [link to template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/avr/readme.md)
|
||||
- standard template should be present -- [link to template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)
|
||||
- flash command is present, and has `:flash` at end
|
||||
- valid hardware availability link (unless handwired) -- private groupbuys are okay, but one-off prototypes will be questioned. If open-source, a link to files should be provided.
|
||||
- clear instructions on how to reset the board into bootloader mode
|
||||
|
||||
@@ -20,7 +20,7 @@ This exposes the `CONVERT_TO_PROTON_C` flag that you can use in your code with `
|
||||
#endif
|
||||
```
|
||||
|
||||
If you get errors about `PORTB/DDRB`, etc not being defined, so you'll need to convert the keyboard's code to use the [GPIO Controls](internals_gpio_control.md) that will work for both ARM and AVR. This shouldn't affect the AVR builds at all.
|
||||
If you get errors about `PORTB/DDRB`, etc not being defined, so you'll need to convert the keyboard's code to use the [GPIO Controls](gpio_control.md) that will work for both ARM and AVR. This shouldn't affect the AVR builds at all.
|
||||
|
||||
The Proton C only has one on-board LED (C13), and by default, the TXLED (D5) is mapped to it. If you want the RXLED (B0) mapped to it instead, add this like to your `config.h`:
|
||||
|
||||
|
||||
@@ -8,8 +8,9 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
|
||||
|
||||
## QMK Keycodes :id=qmk-keycodes
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|-----------------|---------|-------------------------------------------------------|
|
||||
|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing |
|
||||
|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode |
|
||||
|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory)|
|
||||
|Key |Aliases |Description |
|
||||
|-----------------|---------|---------------------------------------------------------------------------------|
|
||||
|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing |
|
||||
|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode |
|
||||
|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory) |
|
||||
|`QK_MAKE` | |Sends `qmk compile -kb (keyboard) -km (keymap)`, or `qmk flash` if shift is held |
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ Largest in size is "magic" -- the QMK magic keycodes -- which control things lik
|
||||
|
||||
If you've done all of that, and you don't want to disable features like RGB, Audio, OLEDs, etc, there are some additional options that you can add to your config.h that can help.
|
||||
|
||||
Starting with Lock Key support. If you have an Cherry MX Lock switch (lucky you!), you don't want to do this. But chances are, you don't. In that case, add this to your `config.h`:
|
||||
Starting with Lock Key support. If you have a Cherry MX Lock switch (lucky you!), you don't want to do this. But chances are, you don't. In that case, add this to your `config.h`:
|
||||
```c
|
||||
#undef LOCKING_SUPPORT_ENABLE
|
||||
#undef LOCKING_RESYNC_ENABLE
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
* [EEPROM驱动](zh-cn/eeprom_driver.md)
|
||||
* [串口驱动](zh-cn/serial_driver.md)
|
||||
* [UART驱动](zh-cn/uart_driver.md)
|
||||
* [操控GPIO](zh-cn/internals_gpio_control.md)
|
||||
* [操控GPIO](zh-cn/gpio_control.md)
|
||||
* [键盘开发指引](zh-cn/hardware_keyboard_guidelines.md)
|
||||
|
||||
* Python开发
|
||||
@@ -182,12 +182,12 @@
|
||||
* [了解QMK](zh-cn/understanding_qmk.md)
|
||||
|
||||
* QMK内部细节 (编辑中)
|
||||
* [定义](zh-cn/internals_defines.md)
|
||||
* [输入回调的注册](zh-cn/internals_input_callback_reg.md)
|
||||
* [Midi设备](zh-cn/internals_midi_device.md)
|
||||
* [Midi设备驱动流程](zh-cn/internals_midi_device_setup_process.md)
|
||||
* [Midi辅助功能](zh-cn/internals_midi_util.md)
|
||||
* [发送函数](zh-cn/internals_send_functions.md)
|
||||
* [Sysex工具](zh-cn/internals_sysex_tools.md)
|
||||
* [定义](zh-cn/internals/defines.md)
|
||||
* [输入回调的注册](zh-cn/internals/input_callback_reg.md)
|
||||
* [Midi设备](zh-cn/internals/midi_device.md)
|
||||
* [Midi设备驱动流程](zh-cn/internals/midi_device_setup_process.md)
|
||||
* [Midi辅助功能](zh-cn/internals/midi_util.md)
|
||||
* [发送函数](zh-cn/internals/send_functions.md)
|
||||
* [Sysex工具](zh-cn/internals/sysex_tools.md)
|
||||
|
||||
<!--fromen:20211014-12:00(GMT+8) commit 04cf161aa01fd433b5dae69d9fd31569ed5dca59-->
|
||||
@@ -0,0 +1,58 @@
|
||||
/* Copyright 2022
|
||||
*
|
||||
* 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 "sn74x154.h"
|
||||
#include "gpio.h"
|
||||
|
||||
#define ADDRESS_PIN_COUNT 4
|
||||
|
||||
#ifndef SN74X154_ADDRESS_PINS
|
||||
# error sn74x154: no address pins defined!
|
||||
#endif
|
||||
|
||||
static const pin_t address_pins[ADDRESS_PIN_COUNT] = SN74X154_ADDRESS_PINS;
|
||||
|
||||
void sn74x154_init(void) {
|
||||
for (int i = 0; i < ADDRESS_PIN_COUNT; i++) {
|
||||
setPinOutput(address_pins[i]);
|
||||
writePinLow(address_pins[i]);
|
||||
}
|
||||
|
||||
#if defined(SN74X154_E0_PIN)
|
||||
setPinOutput(SN74X154_E0_PIN);
|
||||
writePinHigh(SN74X154_E0_PIN);
|
||||
#endif
|
||||
|
||||
#if defined(SN74X154_E1_PIN)
|
||||
setPinOutput(SN74X154_E1_PIN);
|
||||
writePinHigh(SN74X154_E1_PIN);
|
||||
#endif
|
||||
}
|
||||
|
||||
void sn74x154_set_enabled(bool enabled) {
|
||||
#if defined(SN74X154_E0_PIN)
|
||||
writePin(SN74X154_E0_PIN, !enabled);
|
||||
#endif
|
||||
#if defined(SN74X154_E1_PIN)
|
||||
writePin(SN74X154_E1_PIN, !enabled);
|
||||
#endif
|
||||
}
|
||||
|
||||
void sn74x154_set_addr(uint8_t address) {
|
||||
for (int i = 0; i < ADDRESS_PIN_COUNT; i++) {
|
||||
writePin(address_pins[i], address & (1 << i));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/* Copyright 2022
|
||||
*
|
||||
* 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 <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* Driver for 74x154 4-to-16 decoder/demultiplexer with inverting outputs
|
||||
* https://assets.nexperia.com/documents/data-sheet/74HC_HCT154.pdf
|
||||
*/
|
||||
|
||||
/**
|
||||
* Initialize the address and output enable pins.
|
||||
*/
|
||||
void sn74x154_init(void);
|
||||
|
||||
/**
|
||||
* Set the enabled state.
|
||||
*
|
||||
* When enabled is true, pulls the E0 and E1 pins low.
|
||||
*
|
||||
* \param enabled The enable state to set.
|
||||
*/
|
||||
void sn74x154_set_enabled(bool enabled);
|
||||
|
||||
/**
|
||||
* Set the output pin address.
|
||||
*
|
||||
* The selected output pin will be pulled low, while the remaining output pins will be high.
|
||||
*
|
||||
* \param address The address to set, from 0 to 15.
|
||||
*/
|
||||
void sn74x154_set_addr(uint8_t address);
|
||||
@@ -0,0 +1,284 @@
|
||||
/*
|
||||
Copyright 2022
|
||||
|
||||
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 "hd44780.h"
|
||||
#include "gpio.h"
|
||||
#include "progmem.h"
|
||||
#include "wait.h"
|
||||
|
||||
#ifndef HD44780_DATA_PINS
|
||||
# error hd44780: no data pins defined!
|
||||
#endif
|
||||
|
||||
#ifndef HD44780_RS_PIN
|
||||
# error hd44780: no RS pin defined!
|
||||
#endif
|
||||
|
||||
#ifndef HD44780_RW_PIN
|
||||
# error hd44780: no R/W pin defined!
|
||||
#endif
|
||||
|
||||
#ifndef HD44780_E_PIN
|
||||
# error hd44780: no E pin defined!
|
||||
#endif
|
||||
|
||||
static const pin_t data_pins[4] = HD44780_DATA_PINS;
|
||||
|
||||
#ifndef HD44780_DISPLAY_COLS
|
||||
# define HD44780_DISPLAY_COLS 16
|
||||
#endif
|
||||
|
||||
#ifndef HD44780_DISPLAY_LINES
|
||||
# define HD44780_DISPLAY_LINES 2
|
||||
#endif
|
||||
|
||||
#ifndef HD44780_DDRAM_LINE0_ADDR
|
||||
# define HD44780_DDRAM_LINE0_ADDR 0x00
|
||||
#endif
|
||||
#ifndef HD44780_DDRAM_LINE1_ADDR
|
||||
# define HD44780_DDRAM_LINE1_ADDR 0x40
|
||||
#endif
|
||||
|
||||
#define HD44780_INIT_DELAY_MS 16
|
||||
#define HD44780_ENABLE_DELAY_US 1
|
||||
|
||||
static void hd44780_latch(void) {
|
||||
writePinHigh(HD44780_E_PIN);
|
||||
wait_us(HD44780_ENABLE_DELAY_US);
|
||||
writePinLow(HD44780_E_PIN);
|
||||
}
|
||||
|
||||
void hd44780_write(uint8_t data, bool isData) {
|
||||
writePin(HD44780_RS_PIN, isData);
|
||||
writePinLow(HD44780_RW_PIN);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
setPinOutput(data_pins[i]);
|
||||
}
|
||||
|
||||
// Write high nibble
|
||||
for (int i = 0; i < 4; i++) {
|
||||
writePin(data_pins[i], (data >> 4) & (1 << i));
|
||||
}
|
||||
hd44780_latch();
|
||||
|
||||
// Write low nibble
|
||||
for (int i = 0; i < 4; i++) {
|
||||
writePin(data_pins[i], data & (1 << i));
|
||||
}
|
||||
hd44780_latch();
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
writePinHigh(data_pins[i]);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t hd44780_read(bool isData) {
|
||||
uint8_t data = 0;
|
||||
|
||||
writePin(HD44780_RS_PIN, isData);
|
||||
writePinHigh(HD44780_RW_PIN);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
setPinInput(data_pins[i]);
|
||||
}
|
||||
|
||||
writePinHigh(HD44780_E_PIN);
|
||||
wait_us(HD44780_ENABLE_DELAY_US);
|
||||
|
||||
// Read high nibble
|
||||
for (int i = 0; i < 4; i++) {
|
||||
data |= (readPin(data_pins[i]) << i);
|
||||
}
|
||||
|
||||
data <<= 4;
|
||||
|
||||
writePinLow(HD44780_E_PIN);
|
||||
wait_us(HD44780_ENABLE_DELAY_US);
|
||||
writePinHigh(HD44780_E_PIN);
|
||||
wait_us(HD44780_ENABLE_DELAY_US);
|
||||
|
||||
// Read low nibble
|
||||
for (int i = 0; i < 4; i++) {
|
||||
data |= (readPin(data_pins[i]) << i);
|
||||
}
|
||||
|
||||
writePinLow(HD44780_E_PIN);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
bool hd44780_busy(void) {
|
||||
return hd44780_read(false) & HD44780_BUSY_FLAG;
|
||||
}
|
||||
|
||||
void hd44780_command(uint8_t command) {
|
||||
while (hd44780_busy())
|
||||
;
|
||||
hd44780_write(command, false);
|
||||
}
|
||||
|
||||
void hd44780_data(uint8_t data) {
|
||||
while (hd44780_busy())
|
||||
;
|
||||
hd44780_write(data, true);
|
||||
}
|
||||
|
||||
void hd44780_clear(void) {
|
||||
hd44780_command(HD44780_CMD_CLEAR_DISPLAY);
|
||||
}
|
||||
|
||||
void hd44780_home(void) {
|
||||
hd44780_command(HD44780_CMD_RETURN_HOME);
|
||||
}
|
||||
|
||||
void hd44780_on(bool cursor, bool blink) {
|
||||
if (cursor) {
|
||||
if (blink) {
|
||||
hd44780_command(HD44780_CMD_DISPLAY | HD44780_DISPLAY_ON | HD44780_DISPLAY_CURSOR | HD44780_DISPLAY_BLINK);
|
||||
} else {
|
||||
hd44780_command(HD44780_CMD_DISPLAY | HD44780_DISPLAY_ON | HD44780_DISPLAY_CURSOR);
|
||||
}
|
||||
} else {
|
||||
hd44780_command(HD44780_CMD_DISPLAY | HD44780_DISPLAY_ON);
|
||||
}
|
||||
}
|
||||
|
||||
void hd44780_off() {
|
||||
hd44780_command(HD44780_CMD_DISPLAY);
|
||||
}
|
||||
|
||||
void hd44780_set_cgram_address(uint8_t address) {
|
||||
hd44780_command(HD44780_CMD_SET_CGRAM_ADDRESS + (address & 0x3F));
|
||||
}
|
||||
|
||||
void hd44780_set_ddram_address(uint8_t address) {
|
||||
hd44780_command(HD44780_CMD_SET_DDRAM_ADDRESS + (address & 0x7F));
|
||||
}
|
||||
|
||||
void hd44780_init(bool cursor, bool blink) {
|
||||
setPinOutput(HD44780_RS_PIN);
|
||||
setPinOutput(HD44780_RW_PIN);
|
||||
setPinOutput(HD44780_E_PIN);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
setPinOutput(data_pins[i]);
|
||||
}
|
||||
|
||||
wait_ms(HD44780_INIT_DELAY_MS);
|
||||
|
||||
// Manually configure for 4-bit mode - can't use hd44780_command() yet
|
||||
// HD44780U datasheet, Fig. 24 (p46)
|
||||
writePinHigh(data_pins[0]); // Function set
|
||||
writePinHigh(data_pins[1]); // DL = 1
|
||||
hd44780_latch();
|
||||
wait_ms(5);
|
||||
// Send again
|
||||
hd44780_latch();
|
||||
wait_us(64);
|
||||
// And again (?)
|
||||
hd44780_latch();
|
||||
wait_us(64);
|
||||
|
||||
writePinLow(data_pins[0]); // DL = 0
|
||||
hd44780_latch();
|
||||
wait_us(64);
|
||||
|
||||
#if HD44780_DISPLAY_LINES == 1
|
||||
hd44780_command(HD44780_CMD_FUNCTION); // 4 bit, 1 line, 5x8 dots
|
||||
#else
|
||||
hd44780_command(HD44780_CMD_FUNCTION | HD44780_FUNCTION_2_LINES); // 4 bit, 2 lines, 5x8 dots
|
||||
#endif
|
||||
hd44780_on(cursor, blink);
|
||||
hd44780_clear();
|
||||
hd44780_home();
|
||||
hd44780_command(HD44780_CMD_ENTRY_MODE | HD44780_ENTRY_MODE_INC);
|
||||
}
|
||||
|
||||
void hd44780_set_cursor(uint8_t col, uint8_t line) {
|
||||
register uint8_t address = col;
|
||||
|
||||
#if HD44780_DISPLAY_LINES == 1
|
||||
address += HD44780_DDRAM_LINE0_ADDR;
|
||||
#elif HD44780_DISPLAY_LINES == 2
|
||||
if (line == 0) {
|
||||
address += HD44780_DDRAM_LINE0_ADDR;
|
||||
} else {
|
||||
address += HD44780_DDRAM_LINE1_ADDR;
|
||||
}
|
||||
#endif
|
||||
|
||||
hd44780_set_ddram_address(address);
|
||||
}
|
||||
|
||||
void hd44780_define_char(uint8_t index, uint8_t *data) {
|
||||
hd44780_set_cgram_address((index & 0x7) << 3);
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
hd44780_data(data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void hd44780_putc(char c) {
|
||||
while (hd44780_busy())
|
||||
;
|
||||
uint8_t current_position = hd44780_read(false);
|
||||
|
||||
if (c == '\n') {
|
||||
hd44780_set_cursor(0, current_position < HD44780_DDRAM_LINE1_ADDR ? 1 : 0);
|
||||
} else {
|
||||
#if defined(HD44780_WRAP_LINES)
|
||||
# if HD44780_DISPLAY_LINES == 1
|
||||
if (current_position == HD44780_DDRAM_LINE0_ADDR + HD44780_DISPLAY_COLS) {
|
||||
// Go to start of line
|
||||
hd44780_set_cursor(0, 0);
|
||||
}
|
||||
# elif HD44780_DISPLAY_LINES == 2
|
||||
if (current_position == HD44780_DDRAM_LINE0_ADDR + HD44780_DISPLAY_COLS) {
|
||||
// Go to start of second line
|
||||
hd44780_set_cursor(0, 1);
|
||||
} else if (current_position == HD44780_DDRAM_LINE1_ADDR + HD44780_DISPLAY_COLS) {
|
||||
// Go to start of first line
|
||||
hd44780_set_cursor(0, 0);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
hd44780_data(c);
|
||||
}
|
||||
}
|
||||
|
||||
void hd44780_puts(const char *s) {
|
||||
register char c;
|
||||
while ((c = *s++)) {
|
||||
hd44780_putc(c);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(__AVR__)
|
||||
void hd44780_define_char_P(uint8_t index, const uint8_t *data) {
|
||||
hd44780_set_cgram_address(index << 3);
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
hd44780_data(pgm_read_byte(data++));
|
||||
}
|
||||
}
|
||||
|
||||
void hd44780_puts_P(const char *s) {
|
||||
register char c;
|
||||
while ((c = pgm_read_byte(s++))) {
|
||||
hd44780_putc(c);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
Copyright 2022
|
||||
|
||||
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 <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* \defgroup hd44780
|
||||
*
|
||||
* HD44780 Character LCD Driver
|
||||
* \{
|
||||
*/
|
||||
|
||||
/*
|
||||
* HD44780 instructions
|
||||
* https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
|
||||
* Table 6 (p24)
|
||||
*/
|
||||
// Clear display
|
||||
#define HD44780_CMD_CLEAR_DISPLAY 0x01
|
||||
// Return home
|
||||
#define HD44780_CMD_RETURN_HOME 0x02
|
||||
// Entry mode set
|
||||
#define HD44780_CMD_ENTRY_MODE 0x04
|
||||
#define HD44780_ENTRY_MODE_INC 0x02 // I/D
|
||||
#define HD44780_ENTRY_MODE_SHIFT 0x01 // S
|
||||
// Display on/off control
|
||||
#define HD44780_CMD_DISPLAY 0x08
|
||||
#define HD44780_DISPLAY_ON 0x04 // D
|
||||
#define HD44780_DISPLAY_CURSOR 0x02 // C
|
||||
#define HD44780_DISPLAY_BLINK 0x01 // B
|
||||
// Cursor or display shift
|
||||
#define HD44780_CMD_MOVE 0x10
|
||||
#define HD44780_MOVE_DISPLAY 0x08 // S/C
|
||||
#define HD44780_MOVE_RIGHT 0x04 // R/L
|
||||
// Function set
|
||||
#define HD44780_CMD_FUNCTION 0x20
|
||||
#define HD44780_FUNCTION_8_BIT 0x10 // DL
|
||||
#define HD44780_FUNCTION_2_LINES 0x08 // N
|
||||
#define HD44780_FUNCTION_5X10_DOTS 0x04 // F
|
||||
// Set CGRAM address
|
||||
#define HD44780_CMD_SET_CGRAM_ADDRESS 0x40
|
||||
// Set DDRAM address
|
||||
#define HD44780_CMD_SET_DDRAM_ADDRESS 0x80
|
||||
|
||||
// Bitmask for busy flag when reading
|
||||
#define HD44780_BUSY_FLAG 0x80
|
||||
|
||||
/**
|
||||
* \brief Write a byte to the display.
|
||||
*
|
||||
* \param data The byte to send to the display.
|
||||
* \param isData Whether the byte is an instruction or character data.
|
||||
*/
|
||||
void hd44780_write(uint8_t data, bool isData);
|
||||
|
||||
/**
|
||||
* \brief Read a byte from the display.
|
||||
*
|
||||
* \param isData Whether to read the current cursor position, or the character at the cursor.
|
||||
*
|
||||
* \return If `isData` is `true`, the returned byte will be the character at the current DDRAM address. Otherwise, it will be the current DDRAM address and the busy flag.
|
||||
*/
|
||||
uint8_t hd44780_read(bool isData);
|
||||
|
||||
/**
|
||||
* \brief Indicates whether the display is currently processing, and cannot accept instructions.
|
||||
*
|
||||
* \return `true` if the display is busy.
|
||||
*/
|
||||
bool hd44780_busy(void);
|
||||
|
||||
/**
|
||||
* \brief Send a command to the display. Refer to the datasheet for the valid commands.
|
||||
*
|
||||
* This function waits for the display to clear the busy flag before sending the command.
|
||||
*
|
||||
* \param command The command to send.
|
||||
*/
|
||||
void hd44780_command(uint8_t command);
|
||||
|
||||
/**
|
||||
* \brief Send a byte of data to the display.
|
||||
*
|
||||
* This function waits for the display to clear the busy flag before sending the data.
|
||||
*
|
||||
* \param data The byte of data to send.
|
||||
*/
|
||||
void hd44780_data(uint8_t data);
|
||||
|
||||
/**
|
||||
* \brief Clear the display.
|
||||
*
|
||||
* This function is called on init.
|
||||
*/
|
||||
void hd44780_clear(void);
|
||||
|
||||
/**
|
||||
* \brief Move the cursor to the home position.
|
||||
*
|
||||
* This function is called on init.
|
||||
*/
|
||||
void hd44780_home(void);
|
||||
|
||||
/**
|
||||
* \brief Turn the display on, and/or set the cursor position.
|
||||
*
|
||||
* This function is called on init.
|
||||
*
|
||||
* \param cursor Whether to show the cursor.
|
||||
* \param blink Whether to blink the cursor, if shown.
|
||||
*/
|
||||
void hd44780_on(bool cursor, bool blink);
|
||||
|
||||
/**
|
||||
* \brief Turn the display off.
|
||||
*/
|
||||
void hd44780_off(void);
|
||||
|
||||
/**
|
||||
* \brief Set the CGRAM address.
|
||||
*
|
||||
* This function is used when defining custom characters.
|
||||
*
|
||||
* \param address The CGRAM address to move to, from `0x00` to `0x3F`.
|
||||
*/
|
||||
void hd44780_set_cgram_address(uint8_t address);
|
||||
|
||||
/**
|
||||
* \brief Set the DDRAM address.
|
||||
*
|
||||
* This function is used when printing characters to the display, and setting the cursor.
|
||||
*
|
||||
* \param address The DDRAM address to move to, from `0x00` to `0x7F`.
|
||||
*/
|
||||
void hd44780_set_ddram_address(uint8_t address);
|
||||
|
||||
/**
|
||||
* \brief Initialize the display.
|
||||
*
|
||||
* This function should be called only once, before any of the other functions can be called.
|
||||
*
|
||||
* \param cursor Whether to show the cursor.
|
||||
* \param blink Whether to blink the cursor, if shown.
|
||||
*/
|
||||
void hd44780_init(bool cursor, bool blink);
|
||||
|
||||
/**
|
||||
* \brief Move the cursor to the specified position on the display.
|
||||
*
|
||||
* \param col The column number to move to, from 0 to 15 on 16x2 displays.
|
||||
* \param line The line number to move to, either 0 or 1 on 16x2 displays.
|
||||
*/
|
||||
void hd44780_set_cursor(uint8_t col, uint8_t line);
|
||||
|
||||
/**
|
||||
* \brief Define a custom character.
|
||||
*
|
||||
* \param index The index of the custom character to define, from 0 to 7.
|
||||
* \param data An array of 8 bytes containing the 5-bit row data of the character, where the first byte is the topmost row, and the least significant bit of each byte is the rightmost column.
|
||||
*/
|
||||
void hd44780_define_char(uint8_t index, uint8_t *data);
|
||||
|
||||
/**
|
||||
* \brief Print a character to the display. The newline character will move the cursor to the start of the next line.
|
||||
*
|
||||
* The exact character shown may depend on the ROM code of your particular display - refer to the datasheet for the full character set.
|
||||
*
|
||||
* \param c The character to print.
|
||||
*/
|
||||
void hd44780_putc(char c);
|
||||
|
||||
/**
|
||||
* \brief Print a string of characters to the display.
|
||||
*
|
||||
* \param s The string to print.
|
||||
*/
|
||||
void hd44780_puts(const char *s);
|
||||
|
||||
#if defined(__AVR__) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* \brief Define a custom character from PROGMEM.
|
||||
*
|
||||
* On ARM devices, this function is simply an alias of hd44780_define_char().
|
||||
*
|
||||
* \param index The index of the custom character to define, from 0 to 7.
|
||||
* \param data A PROGMEM array of 8 bytes containing the 5-bit row data of the character, where the first byte is the topmost row, and the least significant bit of each byte is the rightmost column.
|
||||
*/
|
||||
void hd44780_define_char_P(uint8_t index, const uint8_t *data);
|
||||
|
||||
/**
|
||||
* \brief Print a string of characters from PROGMEM to the display.
|
||||
*
|
||||
* On ARM devices, this function is simply an alias of hd44780_puts().
|
||||
*
|
||||
* \param s The PROGMEM string to print.
|
||||
*/
|
||||
void hd44780_puts_P(const char *s);
|
||||
#else
|
||||
# define hd44780_define_char_P(index, data) hd44780_define_char(index, data)
|
||||
# define hd44780_puts_P(s) hd44780_puts(s)
|
||||
#endif
|
||||
|
||||
/** \} */
|
||||
@@ -57,6 +57,10 @@
|
||||
# define ISSI_PERSISTENCE 0
|
||||
#endif
|
||||
|
||||
#ifndef ISSI_PWM_FREQUENCY
|
||||
# define ISSI_PWM_FREQUENCY 0b000 // PFS - IS31FL3737B only
|
||||
#endif
|
||||
|
||||
#ifndef ISSI_SWPULLUP
|
||||
# define ISSI_SWPULLUP PUR_0R
|
||||
#endif
|
||||
@@ -159,7 +163,7 @@ void IS31FL3737_init(uint8_t addr) {
|
||||
// Set global current to maximum.
|
||||
IS31FL3737_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
|
||||
// Disable software shutdown.
|
||||
IS31FL3737_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
|
||||
IS31FL3737_write_register(addr, ISSI_REG_CONFIGURATION, ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);
|
||||
|
||||
// Wait 10ms to ensure the device has woken up.
|
||||
wait_ms(10);
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
#include "analog.h"
|
||||
#include "gpio.h"
|
||||
#include "wait.h"
|
||||
#include "timer.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
// Set Parameters
|
||||
uint16_t minAxisValue = ANALOG_JOYSTICK_AXIS_MIN;
|
||||
|
||||
@@ -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
|
||||
Loaded 100 of 2074 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user