Compare commits

...

1595 Commits

Author SHA1 Message Date
Florian
c2008634f8 h/fix: quick disconection causes next pairing to fail 2023-12-21 18:35:11 +07:00
Florian Didron
1a7e7e0563 Remove pairing, fw22 (#379)
* chore: remove pairing code

* fix: driver let total macro
2023-12-21 15:13:41 +07:00
Drashna Jaelre
47c470ea25 feat: make voyager indicator leds use binary for layer indication (#375) 2023-10-17 14:34:20 +07:00
Florian
ed23f8a369 fix: prevents compilation bomb when oryx's hid protocol is disabled 2023-09-19 18:58:17 +07:00
Florian
f84ba467ba fix: prevents compilation bomb when oryx's hid protocol is disabled 2023-09-19 18:44:25 +07:00
Florian
ae410b9587 fix: pad the led positions matrix 2023-09-13 14:57:20 +07:00
Florian
d036340b8f fix: voyager led positioning 2023-09-13 14:33:06 +07:00
Florian
a80ccd182b fix: voyager switches - led mapping 2023-09-13 13:51:49 +07:00
Florian Didron
551d63b98f feat/voyager (#374)
* feat: tentative fix for keyboard crash during esd testing

* feat: adds support for the GD32 voyager

* feat: adds voyager's dfu suffix

* fix: instability issues over i2c

* fix: more robust right side scan

* fix: tentative delay after init

* Revert "fix: tentative delay after init"

This reverts commit b0a6461cf1.

* fix: scan left side in between right scan process

* fix: resets matrix + layer state when reconnecting the right side

* chore: comments and code cleanup

* fix: restore previous control flow

* fix: decouple led driver reinit from io expander reinit

* feat: reinit led drivers independtly

* fix: prevents slamming the led driver over i2c

* Revert "fix: prevents slamming the led driver over i2c"

This reverts commit 48b8c809ea.

* Revert "feat: reinit led drivers independtly"

This reverts commit 6405e6b367.

* fix: reboot on io expander

* fix: wait time after reading the io expander

* chore: code cleanup and some refactors.

* feat: adds led brightness and status led control over hid

* fix: remove stray printf

* fix: compilation error on ergodox

* fix: gd32 eeprom fix

* fix: caps lock crash

* fix: soft reset to bootloader key.

* chore: move the app address define where it should be

* fix: cleanup + debounce default

* feat: tentatively set gd32 clock to 98Mhz

* feat: realign to latest chibios contrib

* chore: points to ZSA's chibios contrib fork

---------

Co-authored-by: Florian Didron <0x6664@hey.com>
2023-09-06 20:45:35 +07:00
Florian Didron
cf87d88fb2 Fix French Canadian mapping for / 2023-05-25 17:08:57 +09:00
Erez Zukerman
a191c9f964 Update readme.md 2023-05-09 15:01:33 -04:00
Florian Didron
0f23d33a86 feat: allows to take over the rgb leds and light them individually from raw hid 2023-03-15 15:55:50 +07:00
Florian Didron
788d70c1a7 hotfix: restores Halfmoon layout / music map macros 2023-03-03 08:36:52 +07:00
Florian Didron
2f50d1ed03 Revert "feat: adds halfmoon (#367)"
This reverts commit 6f611938ae.
2023-01-27 12:06:34 +09:00
Florian Didron
612ae1cff4 hotfix: restore shine animations 2023-01-24 19:52:49 +09:00
Florian Didron
6f611938ae feat: adds halfmoon (#367)
* feat: adds halfmoon

* fix: code review feedback

* fix: halfmoon music map
2023-01-23 16:22:37 +09:00
Florian Didron
6a40c2b9bb fix: explicitely import string.h in the oryx protocol files (#365) 2023-01-03 17:05:12 +09:00
Florian Didron
bb7f824ced fix: restore the no autoshift tab flag (#364) 2022-12-22 14:36:19 +09:00
Florian Didron
3f9672fa5f hf: stenography keymapping 2022-12-19 18:38:02 +09:00
Florian Didron
b183d0e8ff hotfix: restore locale key codes 2022-12-17 09:04:06 +09:00
Florian Didron
ae490ef9e5 fix: remove RGB_ANIMATIONS define (#362) 2022-11-24 16:10:29 +09:00
Drashna Jaelre
263bc7cf21 Remove Web USB (depreciated) (#361) 2022-11-24 15:50:11 +09:00
Drashna Jael're
64f04b30c2 Merge tag '0.18.16' into firmware22 2022-11-08 17:14:27 -08:00
Joel Challis
96c48a5f4a Refactor to avoid deprecated wmic execution (#18122)
* wmic deprecated?

* Update platforms/avr/flash.mk

* Update platforms/avr/flash.mk
2022-10-31 20:16:43 +00:00
Max Rumpf
a45607f4e6 Phoebe: Add key to print screen (#18856) 2022-10-31 11:03:14 -07:00
James Young
1183704578 Star75 Refactor (#18885) 2022-10-31 11:02:49 -07:00
Anton Chernenko
652b10e6a7 [Keyboard] Add Hubble keyboard (#18718)
Co-authored-by: Anton Chernenko <anton.chernenko@chaintrust.it>
2022-10-30 18:57:23 -07:00
Joel Challis
ac4b3fd1e9 Remove duplicate key in novelkeys/nk65b (#18907) 2022-10-30 05:26:23 +00:00
mechlovin
078a511394 [Keyboard] Update Kay65 LED state (#18895) 2022-10-29 13:48:45 -07:00
Andrew Kannan
e90ff84c31 Add indicator LEDs to hoodrow G PCB (#18888) 2022-10-29 00:55:18 +01:00
Toshihiro Suzuki
bb97a78d3e [Keymap] toshi0383 keymaps update (#18760)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-28 12:49:52 -07:00
Alabahuy
bc502348c3 [Keyboard] Add Encoder map support for rart (#18851) 2022-10-28 12:49:01 -07:00
Danny
e31fa77e9b [Keyboard] Add Sinc Rev 1&2 Encoder Map Support (#18861) 2022-10-28 12:27:38 -07:00
weimao
6514c25ca6 Docs: fix a typo (#18896) 2022-10-28 11:48:08 +01:00
James Young
84569788d5 MelGeek MJ6XY Refactor (#18862)
* mj6xy.h: convert tabs to spaces

* info.json: convert tabs to spaces

* info.json: apply friendly formatting

Whitespace-only change.

* rename LAYOUT_60_ansi_7u_spc to LAYOUT_60_ansi_tsangan

- rename `60_ansi_7u_spc` keymap to `default_ansi_tsangan`

* add K31 position to LAYOUT_60_iso

* rename LAYOUT_60_iso_7u_spc_split_rshift to LAYOUT_60_iso_tsangan_split_rshift

- rename `60_iso_7u_spc_split_rshift` keymap to `default_iso_tsangan_split_rshift`

* add K31 position to LAYOUT_60_iso_arrow

* add K31 position to LAYOUT_60_iso_arrow_6u_spc

* add K31 position to LAYOUT_60_iso_arrow_3u_spc

* refactor LAYOUT_60_iso_7u_spc into LAYOUT_60_iso_tsangan

- add K31 position to layout macro
- rename `60_iso_7u_spc` keymap to `default_iso_tsangan`

* add K31 position to LAYOUT_64_iso

- rename `64_iso` keymap to `default_64_iso`

* add K31 position to LAYOUT_64_iso_3u_spc

- rename `64_iso_3u_spc` keymap to `default_64_iso_3u_spc`

* add K31 position to LAYOUT_64_iso_split_3u_spc

- rename `64_iso_split_3u_spc` keymap to `default_64_iso_split_3u_spc`

* remove LAYOUT_60_iso_1u_lshift_split_rshift macro and keymap

Functionally identical to `LAYOUT_60_iso_split_rshift`.

* remove LAYOUT_60_iso_1u_lshift_7u_spc_split_rshift macro and keymap

Functionally identical to `LAYOUT_60_iso_tsangan_split_rshift`.

* rename LAYOUT_60_ansi_7u_spc_split_bs to LAYOUT_60_ansi_tsangan_split_bs

- rename `60_ansi_7u_spc_split_bs` keymap to `default_60_ansi_tsangan_split_bs`

* add K31 position to LAYOUT_60_iso_split_bs

* rename LAYOUT_60_iso_7u_spc_split_bs_rshift to LAYOUT_60_iso_tsangan_split_bs_rshift

- rename `60_iso_7u_spc_split_bs_rshift` keymap to `default_60_iso_tsangan_split_bs_rshift`

* add K31 position to LAYOUT_60_iso_arrow_split_bs

* add K31 position to LAYOUT_60_iso_arrow_3u_spc_split_bs

- rename `60_iso_arrow_3u_spc_split_bs` keymap to `default_60_iso_arrow_3u_spc_split_bs`

* add K31 position to LAYOUT_60_iso_arrow_split_bs_3u_spc

- rename `60_iso_arrow_split_bs_3u_spc` keymap to `default_60_iso_arrow_split_bs_3u_spc`

* refactor LAYOUT_60_iso_7u_spc_split_bs into LAYOUT_60_iso_tsangan_split_bs

- add K31 position to layout macro
- rename `60_iso_7u_spc_split_bs` keymap to `default_60_iso_tsangan_split_bs`

* add K31 position to LAYOUT_64_iso_split_bs

- rename `64_iso_split_bs` keymap to `default_64_iso_split_bs`

* add K31 position to LAYOUT_64_iso_3u_spc_split_bs

rename `64_iso_3u_spc_split_bs` keymap to `default_64_iso_3u_spc_split_bs`

* add K31 position to LAYOUT_64_iso_split_bs_3u_spc

- rename `64_iso_split_bs_3u_spc` keymap to `default_64_iso_split_bs_3u_spc`

* remove LAYOUT_60_ansi_arrow_6u_spc macro and keymap

Functionally identical to `LAYOUT_60_ansi_arrow`.

* remove LAYOUT_64_ansi_6u_spc macro and keymap

Functionally identical to `LAYOUT_64_ansi`.

* remove LAYOUT_60_iso_arrow_6u_spc macro and keymap

Functionally identical to `LAYOUT_60_iso_arrow`.

* remove LAYOUT_64_iso_6u_spc macro and keymap

Functionally identical to `LAYOUT_64_iso`.

* remove LAYOUT_60_ansi_arrow_6u_spc_split_bs macro and keymap

Functionally identical to `LAYOUT_60_ansi_arrow_split_bs`.

* remove LAYOUT_64_ansi_6u_spc_split_bs macro and keymap

Functionally identical to `LAYOUT_64_ansi_split_bs`.

* remove LAYOUT_60_iso_arrow_6u_spc_split_bs macro and keymap

Functionally identical to `LAYOUT_60_iso_arrow_split_bs`.

* remove LAYOUT_64_iso_6u_spc_split_bs macro and keymap

Functionally identical to `LAYOUT_64_iso_split_bs`.

* remove LAYOUT_60_iso_1u_lshift_split_bs_rshift macro and keymap

Functionally identical to `LAYOUT_60_iso_split_bs_rshift`.

* remove LAYOUT_60_iso_1u_lshift_7u_spc_split_bs_rshift macro and keymap

Functionally identical to `LAYOUT_60_iso_tsangan_split_bs_rshift`.

* refactor keymaps

- convert tabs to spaces
- update keycode grid alignment

* remove LAYOUT_60_ansi_arrow_3u_spc macro and keymap

Subset of `LAYOUT_60_ansi_arrow_3u_spc_split_bs`.

* remove LAYOUT_60_iso_arrow_3u_spc macro and keymap

Subset of `LAYOUT_60_iso_arrow_3u_spc_split_bs`.

* remove LAYOUT_60_iso_tsangan_split_bs macro and keymap

Subset of `LAYOUT_60_iso_tsangan_split_bs_rshift`.

* remove LAYOUT_60_iso_tsangan_split_rshift macro and keymap

Subset of `LAYOUT_60_iso_tsangan_split_bs_rshift`.

* remove LAYOUT_64_ansi_3u_spc macro and keymap

Subset of `LAYOUT_64_ansi_3u_spc_split_bs`.

* remove LAYOUT_64_iso_3u_spc macro and keymap

Subset of `LAYOUT_64_iso_3u_spc_split_bs`.

* remove LAYOUT_60_iso_split_bs macro and keymap

Subset of `LAYOUT_60_iso_split_bs_rshift`.

* remove LAYOUT_60_iso_split_rshift macro and keymap

Subset of `LAYOUT_60_iso_split_bs_rshift`.

* add LAYOUT_60_ansi_split_bs_rshift macro and keymap

* remove LAYOUT_60_ansi_split_bs macro and keymap

Subset of `LAYOUT_60_ansi_split_bs_rshift`.

* add LAYOUT_60_tsangan_hhkb macro and keymap

* remove LAYOUT_60_ansi_tsangan_split_bs macro and keymap

Subset of `LAYOUT_60_tsangan_hhkb`.

* standardize keymap names

Rename all keymaps per QMK guidelines (e.g. keymap using `LAYOUT_60_ansi_arrow` should be named `default_60_ansi_arrow`).

* add LAYOUT_all; refactor default keymap

Add a `LAYOUT_all` macro, and update the `default` keymap to use the new macro.

* refactor via keymap

Update the `via` keymap to match the behaviour of the `default` keymap.

* improve keyboard readme

- fix broken image reference
- improve grammar on keyboard description
- fix Hardware Availability link
- fix `make` instructions
- add bootloader and flashing instructions

* fix default_60_tsangan_hhkb keymap

Fix a keycode count mismatch.

* mj6xy.h: add matrix diagram

* KC_GESC -> QK_GESC per fauxpark

* KC_SLCK -> KC_SCRL per fauxpark
2022-10-27 09:52:21 -07:00
leah-splitkb
20ce76f48c [Keyboard] Minor Aurora Sweep fixes (#18879)
- Fixes compile error with `SWAP_HANDS_ENABLE = yes`
- Fixes OLED, RGB Matrix, and encoder when using QMK Configurator
2022-10-27 16:01:17 +01:00
Manna Harbour
d8183c5249 [Keymap] Update Miryoku (#18773)
* [miryoku] Revert "[Keymap] manna-harbour_miryoku RESET to QK_BOOT (#18755)"

This reverts commit 89dbc18161.

* [miryoku] Add keyboardio/model01

* [miryoku] Add handwired/dactyl_manuform/4x6

* [miryoku] Update BT keycodes

- Update BT keycodes on Media inner index:
  - Move OUT_AUTO to bottom row
- Move RGB_TOG in vi to pinkie column to match other TOG keycodes, and rotate row

* [miryoku] Add Extra and Tap layers

* [miryoku] Rename config workflow option to custom_config

* [miryoku] Update custom_config.h and custom_rules.mk behaviour

* [miryoku] Make mapping macro customisable globally and per layer

* [miryoku] Add layer lock

* [miryoku] Update RGB order in media-l-invertedt

* [miryoku] Change mouse button order

* [miryoku] Change to X macros for layer list

- Supports adding and removing layers from custom_config.h
- Add "U_" prefix to layer names
- Add layer name strings
- Populate keymaps array from X macro
- Populate layers enum from X macro
- Move layers enum to manna-harbour_miryoku.h
- Rename miryoku_alternatives.h to miryoku_layer_alternatives.h
- Rename miryoku_layer.h to miryoku_layer_selection.h
- Remove miryoku_layer_names.h
- Add miryoku_layer_list.h

* [miryoku] Reformat split_3x6_3 mapping

* [miryoku] Add merge field to workflows

* [miryoku] Update thumb combos with new layer names

* [miryoku] Update cover image

* [miryoku] Add satt/vision

* [miryoku] Update Branches and Building docs

* [miryoku] Update reset keycode

* [miryoku] Add xmk

* [miryoku] Add boardsource/lulu

* [miryoku] Fix keyboardio/model01
2022-10-27 13:50:32 +01:00
Seth Barberee
18a70451fd userspace: fix up sethBarberee sinc keymap CI errors (#18865) 2022-10-27 09:57:50 +01:00
ai03
432feecc61 [Keyboard] Add Lunar II (#18827)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: ai03 <sarcaphx510@gmail.com>
2022-10-26 17:16:59 -07:00
Danny
42c240f6cf Add Sinc Rev. 3 (#18846)
* Initial work on adding Sinc Rev. 3

* Add RGB Matrix support

* Add encoder map support

* Set I2C pins

* Update LED locations for right half

* Move USB definitions to info.json

* Update RGB modes

* Replace pin mappings for right half with correct ones

* Move config.h back to rev1/rev2 due to addition of rev3

* Convert initial Rev. 3 config work to be data-driven

* Convert RGB Matrix config to DD format

* More config cleanup

* Use full-duplex PIO

* Add MCU/bootloader settings for Rev. 2

* Change ISO Enter location since it shares location with Backslash

* Adjust build settings to reduce flash/EEPROM usage
2022-10-26 21:44:06 +01:00
Terlekchi Seityagiya
8ea8a4edcb [Keyboard] Kepler 33 (#18771)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-26 12:41:30 -07:00
kopibeng
48dc8122e7 [Keyboard] Update MNK65 (#18743)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-26 12:41:02 -07:00
Nostril
99d5b5506a [Keymap] Add new IIDX gamepad keymap for Synth Labs Solo (#18741)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-10-26 12:40:44 -07:00
Vino Rodrigues
e59475992e [Keyboard] Add Binepad BNR1 rotary encoder (#18809)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-10-26 12:39:17 -07:00
Markus Korn
e485261e53 [Keymap] gmmk gmmk2 p65: new keymap (#18808)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-10-26 12:38:20 -07:00
HorrorTroll
9dec43a0f2 Added new keyboard DOIO KB16 (Rev 2) (#18699) 2022-10-26 18:59:30 +01:00
ziptyze
cd8099539b Addition of pi60_rgb to 1upkeyboards (#18633) 2022-10-26 18:57:11 +01:00
Ryan
5d8c8a6f7c Fix splitkb/aurora/sweep (#18839)
* Fix splitkb/aurora/sweep

* Add back layout alias
2022-10-25 14:44:25 +01:00
jack
51cc4f804e Fixup huytbt/h50 (#18841) 2022-10-25 14:41:21 +01:00
jack
cb960da1f4 Fixup bpiphany/ghost_squid (#18842) 2022-10-25 14:40:40 +01:00
Dalius Dobravolskas
f100de88e5 Callum style layout improvements and my layout changes (#16174) 2022-10-24 23:23:35 -07:00
syntax-magic
846e9d4c53 [Keymap] Added tap dance to LNG1 key (LNG2) (#18682)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: syntax-magic <dkim.8881@gmail.com>
2022-10-24 22:46:37 -07:00
Andrew Kannan
2dff39720d [Keyboard] Add Ellipse PCB support (#18706)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-24 22:05:53 -07:00
Andrew Kannan
d861a35ebf [Keyboard] Add Ellipse hotswap PCB support (#18707)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-24 22:05:22 -07:00
Joel Challis
67fd4e6b7a [DOCS] Use correct OSM arguments (#18835) 2022-10-24 23:29:23 +01:00
Peter Hindes
40aa9c8745 spelling fix (#18831) 2022-10-24 17:18:03 +01:00
James Young
51dd63c926 MWStudio MW65 Black Refactor (#18824)
* mw65_black.h: add matrix diagram

* mw65_black.h: fill-in matrix definition

Fill the empty electrical positions with `KC_NO`.

* mw65_black.h: update matrix diagram

* rename LAYOUT to LAYOUT_65_ansi_blocker

* add LAYOUT_65_ansi_blocker_tsangan

* info.json: correct maintainer value
2022-10-23 14:34:42 +01:00
James Young
590ce134b3 Mode SixtyFive HI Layout Refactor (#18823)
* m65hi_alpha.h: add matrix diagram

* rename LAYOUT_all to LAYOUT_65_iso_blocker

* add LAYOUT_65_iso_blocker_tsangan

* tidy-up keymaps

- use four-space indent
- polish keycode grid alignment

* touch-up keymaps

Switch one Page Down keycode for Page Up on the `default` keymap, and switch the Page Down and Page Up keycodes on the `via` keymap.
2022-10-23 14:33:45 +01:00
James Young
64e8441910 Han60 Refactor (#18819)
* info.json: apply friendly formatting

* han60.h: add matrix diagram

* han60.h: tidy file

- remove trailing whitespace
- use four-space indent

* info.json: remove key overlaps from LAYOUT_all rendering

* rename LAYOUT_tsangan to LAYOUT_60_ansi_tsangan

* rename LAYOUT_tsangan_arrowkeys to LAYOUT_60_ansi_arrow_tsangan

* refactor LAYOUT_tsangan_iso into LAYOUT_60_iso_tsangan

Moves position `K2C` (Enter) to the home row.

* refactor LAYOUT_tsangan_iso_arrowkeys into LAYOUT_60_iso_arrow_tsangan

Moves position `K2C` (Enter) to the home row.

* refactor default keymap

- use four-space indent
- use QMK-native keycode aliases
- grid-align keycodes

* bugfix layout macros

* add reference keymaps
2022-10-23 14:33:25 +01:00
James Young
9248a04e17 Studio Kestra Galatea: fix ISO layout macros (#18825)
Switch the matrix positions for `KC_NUHS` and `KC_ENT`.
2022-10-23 14:32:34 +01:00
James Young
ac75d6e4e6 Aurora65: Correct Layout Data (#18826)
* info.json: apply friendly formatting

* info.json: correct layout data
2022-10-23 14:32:10 +01:00
James Young
716969a01a Macro3: rename LAYOUT to LAYOUT_ortho_2x4 (#18820) 2022-10-23 00:07:31 +01:00
Huy Ta Ba Thanh
4a9771c0ec Add H50 keyboard from huytbt (#18752)
* Add H50 keyboard from huytbt

Add H50 keyboard

The H50 is a mini keyboard with a 50 percent layout. The keyboard consists of 53 keys.

* Optimize code

* Optimize keymap code

* Optimize code H50 keyboard
2022-10-22 23:59:43 +01:00
Controller Works
9e2a063163 Add mini36 (#18739) 2022-10-22 23:56:38 +01:00
James Young
69719db6e9 Bathroom Epiphanies Ghost Squid Refactor (#18816)
* refactor default keymap

- shorten layer names
  - KM_QWERTY -> _QW
  - KM_MEDIA -> _MD
  - KM_GUI_LOCK -> _GL
- use QMK-native keycode aliases
- use four-space indent
- grid-align keycodes

* remove third layer from default keymap

The third layer only serves to disable the GUI keys, which we can do with a keycode.

* update default keymap readme

* ghost_squid.h: add matrix diagram

* add LAYOUT_fullsize_ansi

* add LAYOUT_fullsize_iso

* use LAYOUT_fullsize_iso macro in default keymap

Refactor the default keymap to use the new LAYOUT_fullsize_iso macro.

* remove LAYOUT macro

Same matrix as LAYOUT_fullsize_iso, but in a different assignment order.

* enable Community Layout support
2022-10-22 21:48:29 +01:00
James Young
af02e24aa7 MechBrewery MB65S Layout Rework (#18814)
* rename LAYOUT_65_ansi_blocker_tsangan to LAYOUT_65_ansi_blocker_tsangan_split_bs

Layout was implemented with Split Backspace.

* rename LAYOUT_65_iso_blocker_7u_spc to LAYOUT_65_iso_blocker_tsangan_split_bs

* rules.mk: update Community Layout support setting

* mb65s.h: update matrix diagram

* add LAYOUT_65_ansi_blocker

* add LAYOUT_65_iso_blocker

* add LAYOUT_65_ansi_blocker_tsangan

* add LAYOUT_65_iso_blocker_tsangan

* move Community Layout support to info.json

* update Community Layout support
2022-10-22 21:48:13 +01:00
James Young
cdb04900cd Polyandry: rename LAYOUT to LAYOUT_ortho_4x3 (#18815) 2022-10-22 13:22:29 -07:00
Eddie Nuno
fc394dfdd4 [Docs] Fix link to keyboard layout editor (#18801) 2022-10-22 12:39:49 -07:00
stanrc85
68e68e7dc2 [Keyboard] Add Bolsalice keyboard (#18772) 2022-10-22 11:50:20 -07:00
HorrorTroll
bd044ae5ff Update Black E6.5 keymap issues on QMK Configurator (#18794) 2022-10-20 22:02:11 -07:00
Alex Berger
5343df09e0 [Keyboard] Fix saka68 solder layout (#18788) 2022-10-20 20:27:20 -07:00
DeskDaily
693303ddbc [Keyboard] Add Octopad+ Keyboard (#18484)
Co-authored-by: Neil Brian Ramirez <nightlyboards@gmail.com>
2022-10-20 19:21:04 -07:00
Stefan
2c3859fbf7 Keychron Q3 I2C & CKLED2001 transfer speedup (#18780) 2022-10-20 18:20:47 -07:00
8bits4ever
93a0995e48 A1200 Converter. Small modification on a1200.h file (#18783)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-10-20 18:20:23 -07:00
James Young
c3b6a4bcb2 Wavtype p01_ultra Touch-Up (#18784) 2022-10-20 18:17:04 -07:00
Markus Fritsche
dbce41cb6b [Docs] Update platformdev_blackpill_f411.md (#18666)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-20 14:29:57 -07:00
Wolf Van Herreweghe
d13f5f0d66 [Keyboard] Fix LEDs being inverted on Sabre (#18762) 2022-10-20 00:52:38 -07:00
James Young
1b107baf56 Wilba Tech WT65-D Layout Additions (#18779) 2022-10-20 00:41:40 -07:00
James Young
ada77ac291 Ano Layout Refactor (#18778)
* info.json: apply friendly formatting

* info.json: remove dead space in Configurator rendering

* physically arrange layout macro

* info.json: correct Configurator key sequence
2022-10-19 17:49:37 -07:00
James Young
04e51d7aa8 Delikeeb Vaneela Configurator Fix (#18777)
* info.json: fix layout reference

`LAYOUT` -> `LAYOUT_ortho_5x12`

* info.json: apply friendly formatting

* info.json: correct maintainer value
2022-10-19 21:58:47 +01:00
Tyler Thrailkill
0b8fbff1cb Adjust oled gen to fix flashing on timeout (#18747)
Fixes an issue in Ocean Dream that causes flashing after the oled screen
times out and turns off.

This occurs because writing to an OLED screen turns it on as well and we
are both writing then immediately turning the screen off, but only if
the timeout has occurred (no WPM, 30 seconds has passed).
2022-10-19 01:40:26 +01:00
mmccoyd
89dbc18161 [Keymap] manna-harbour_miryoku RESET to QK_BOOT (#18755)
Co-authored-by: mmccoyd <mmccoyd@cs.berkley.edu>
2022-10-18 13:23:21 +11:00
jack
5fdb49b5db Fixup handwired/kbod (#18754) 2022-10-17 17:13:40 +01:00
Nick Brassel
f731e2789f Allow Fedora to update ChibiOS configs. (#18698) 2022-10-17 07:30:49 +11:00
Nick Brassel
81988cc032 Slipped through the cracks. (#18742) 2022-10-16 15:58:42 +11:00
jack
8464bb91e2 Fixup work_louder/micro VIA keymap (#18738)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-10-15 16:16:17 -07:00
jack
4b5ebb7248 Fixup latinpadble (#18736) 2022-10-15 23:24:26 +01:00
James Young
b5e26ccb94 Y&R Studio NZ67v2 Layout Refactor (#18724)
* info.json: apply friendly formatting

* nz67v2.h: use ____ for KC_NO

* nz67v2.h: add matrix diagram

* add LAYOUT_all

Same matrix as `LAYOUT`, but physically arranged to mimic the keyboard layout.

Rotary encoder positions move from the bottom row to the top row.

* refactor keymaps to use LAYOUT_all macro

* info.json: add LAYOUT_all data

* remove LAYOUT macro

Now unused.

* add LAYOUT_65_ansi_blocker

* add LAYOUT_65_ansi_blocker_split_space

* remove dead space from layouts

Remove empty space from `LAYOUT_65_ansi_blocker` and `LAYOUT_65_ansi_blocker_split_space` layouts.
2022-10-15 22:26:56 +01:00
James Young
679cbb8426 bbrfkr Dynamis Refactor (#18733)
* dynamis.h: use XXX for KC_NO

* dynamis.h: add matrix diagram

* info.json: apply friendly formatting

* refactor keymaps

- use four-space indent
- grid-align keycodes for readability

* info.json: fix LAYOUT_iso key sequence
2022-10-15 22:25:53 +01:00
Reibl János Dániel
ccdd28930a fix: Remove OLED support (#18719)
* fix: Remove OLED support

* redundant files

Co-authored-by: zvecr <git@zvecr.com>
2022-10-15 22:22:59 +01:00
James Young
1e726a13d8 Xelus RS60 Layout Refactor (#18708)
* add matrix diagrams

* add LAYOUT_60_ansi

* add LAYOUT_60_ansi_tsangan

* add LAYOUT_60_tsangan_hhkb

* enable Community Layout support

* enable Community Layout support, phase 2

Remove the `LAYOUTS` rules from the `rules.mk` files, now that the data is in `info.json`.
2022-10-15 09:36:20 -07:00
jack
06a7a1c205 Fixup momoka_ergo (#18704) 2022-10-14 10:07:07 +11:00
jack
78484449e2 Fixup bluebell/swoop (#18703) 2022-10-13 23:28:42 +01:00
dependabot[bot]
dcc0c3f350 Bump JamesIves/github-pages-deploy-action from 4.4.0 to 4.4.1 (#18702)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 4.4.0 to 4.4.1.
- [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases)
- [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/v4.4.0...v4.4.1)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-13 23:27:03 +01:00
arnstadm
ca7cfff7c5 add akb/vero (#18652) 2022-10-13 20:34:35 +01:00
Paula Isabel
a3f9992cc9 docs: fix typos (#18671) 2022-10-13 20:02:15 +01:00
Kevin Boss
2762b458fc Add momoka ergo via support (#18678) 2022-10-13 19:56:24 +01:00
Duccio
4a30ea6a18 Add Swoop keyboard (#18436) 2022-10-13 19:43:03 +01:00
lalalademaxiya1
f50ba3b031 Update info.json of Q3 ISO with Encoder (#18697)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-13 21:53:16 +11:00
Wilba
4a74e3d02d Fix Caps Lock indicators on Wilba Tech PCBs (#18695) 2022-10-13 18:14:58 +11:00
James Young
d5b9081864 Keychron Q3 Layout Touch-Up (#18696) 2022-10-13 18:13:16 +11:00
leah-splitkb
a8df5fd303 [Keyboard] Add splitkb.com's Aurora Sweep (#18691) 2022-10-13 14:06:18 +11:00
James Young
a195f78200 Vertex ARC60 Layout Refactor (#18670) 2022-10-13 10:17:35 +11:00
Alex Ong
80894f5c44 Quefrency xeal (#18657) 2022-10-13 10:12:06 +11:00
James Young
f5ac3ecaa7 Viendi 8L Layout Refactor (#18677) 2022-10-13 10:11:48 +11:00
Dicko
29169243a7 [Keyboard] Support for dumbpad_v3x (#18663)
* feat: support for dumbpad_v3x

- all credit goes to
- ref: https://github.com/qmk/qmk_firmware/pull/16285

- included comment from noroadsleft
- ref: https://github.com/qmk/qmk_firmware/pull/16285#pullrequestreview-1038213899

* fix: add newline on every .c, .h, .mk files end

* feat: response to change https://github.com/qmk/qmk_firmware/pull/18663#discussion_r991515821

* feat: response to change https://github.com/qmk/qmk_firmware/pull/18663#discussion_r991516192
2022-10-12 15:19:07 -07:00
Joel Challis
4dec07741b Remove unused LED_INDICATORS constant (#18686) 2022-10-12 22:40:53 +01:00
lalalademaxiya1
cf749f2dd0 Keychron q3 (#16912)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: Cesar Rojas <cesar.fieoner@gmail.com>
Co-authored-by: lokher <lokher@gmail.com>
Co-authored-by: Adam Karim <adam@akarsoft.com>
Co-authored-by: bootstrapper <ido.samuelson@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-13 05:33:44 +11:00
Alex Ong
edef8d2a84 Remove xealousbrown keyboard (#18658)
Co-authored-by: alexo <alex-ong>
2022-10-12 13:20:16 +01:00
4pplet
868c7b5293 Bugfix waffling60 rev d solder (#18673) 2022-10-11 14:22:43 +01:00
Andy Tsai
46fe3b0cf5 [Keyboard] Add hardwareabstraction/handwire Board (#18504)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Tom Barnes <barnestom@me.com>
2022-10-10 09:37:25 +01:00
James Young
2dadbbf04d Vertex AngleR2 Layout Refactor (#18661) 2022-10-10 01:09:15 -07:00
Artjoms Rizihs
cd4a265560 [Keyboard][Keymap] Fix random keys being sent on Mac + userspace changes (#15648)
* qmk art 2020+

* fix compilation

* remove functions. translation matrix

* fix edgecases

* whitespace

* fix memory oddity changing the keymap with every string print

* return edge cases

* support workman layout for git strings

* subm

* secrets

* fix git ignore

* rename var

* workman HW feature toggle

* remember lenght for inserting secrets

* blink leds on secret finish

* 75:fix LEDs not reflecting state on boot

* move common led functions to user file

* move common led funcs to separate file

* move funcs file to separate folder

* capsword

* move string functions to a separate file

* consolidate led funcs

* tidy up variables

* email

* fix printing random keys on Mac + temp disable dynamic macro

* make switch lang shortcut configurable

* revert ergodone behaviour

* move git ignore to userspace folder

* ergodone clean up + saving space

* navigation combos

* shift caps always turns on caps lock. more combos

* convert led funcs into header file

* convert string funcs into header file

* fix compilation for split75

* remove git cherry pick

* update legal headers

* more legal headers

* home row macros

* refactor combo names

* redo combos for homerow + f10 11 12

* custom strings implementation (like secrets)

* ergodone: more consistent f keys

* tweak left right combos to minimise typing interference

* ctr z shortcut

* ergodone: move del to a more convenient key

* rename secrets file to a shorter length

* ergodone tweaks

* fix after merge

* removed included .c files

* Update keyboards/ktec/ergodone/keymaps/art/user_config.c.example

* Update keyboards/mt/split75/keymaps/art/user_config.c.example

* Update users/art/secr.h.example

* Update users/art/custom_definitions.h.example

* Update users/art/art_user_config.h.example

* Update users/art/art.h
2022-10-10 01:04:30 -07:00
Vino Rodrigues
7aab5e4d89 [Keyboard] New IDOBAO ID61 (a.k.a. Denwir D60) (#17362)
* initial upload

* adjust keymap

* Delete config.h

* Update post.rules.mk

* remapped to correct pins

* add idobao keymap

* disable underglow

* minor fix

* right menu on windows

* imgur

* ID61_process_special_k() function

* KC_APP fix

* Update keymap.c

* pre-pr touchups

* enum layouts

* review changes recommended by tzarc

* refactor special keys to common lib

* rename layout and add info.json labels

* account for 15 possible USER keys

* post drashna review

* Fn Arrow keys added

* post review edits

* use bitmask instead of bool array in specialk.c

* move to community layout
2022-10-09 20:17:21 -07:00
Leon Anavi
a3d2c89c4c [Keyboard] Add ANAVI Macro Pad 10 (#18620) 2022-10-09 19:28:19 -07:00
Nick Brassel
7b3ad56f13 Fix future naming collisions. (#18645) 2022-10-08 15:52:38 +11:00
James Young
52a5949917 Synth Labs Solo Configurator Fixes (#18642)
* info.json: apply friendly formatting

- four-space indent
- line breaks between physical rows

* info.json: fix key sequence

* info.json: fix layout macro reference

The macro `LAYOUT` doesn't exist - this data should reference `LAYOUT_all`.

* info.json: add LAYOUT_left data

* info.json: add LAYOUT_right data

* info.json: correct LAYOUT_right key sequence and positioning
2022-10-08 03:04:07 +01:00
jpe230
5d7e19209e Update CRKBD keymap (#18619) 2022-10-07 20:30:19 +01:00
jack
de2c81d5b2 Remove all BACKLIGHT_LEVELS 0 (#18630) 2022-10-07 09:07:56 +01:00
Less/Rikki
a8d6b37fac DD mappings for build.debounce_type and backlight.levels (#18628) 2022-10-06 22:58:13 -07:00
adophoxia
ca2f9e4c8f Add encoder map support for Keychron Q1v1 and Q2 (#18598) 2022-10-06 22:32:19 -07:00
James Young
1a9058b2d1 Studio Kestra Nascent Refactor (#18625) 2022-10-06 22:30:09 -07:00
tarneo
a000ea11f7 [Keyboard] Add supersplit (#18611)
Co-authored-by: tarneo <tarneo@tarneo.fr>
2022-10-06 19:54:50 -07:00
4pplet
b820c6db2d [Keyboard] Add waffling80 Rev B (#18603)
Co-authored-by: 4pplet <4pplet@protonmail.com>
Co-authored-by: 4pplet <stefan.ess@gmail.com>
2022-10-05 18:01:09 -07:00
peepeetee
316edfd297 Enable mouse keys for momokai tap_trio (#18614) 2022-10-06 00:00:08 +01:00
Leon Anavi
2f559c0313 [Keyboard] adafruit/macropad: Fix typo (#18616) 2022-10-05 15:37:22 -07:00
ziptyze
6313258f23 Product changes to 1up lineup (#18382) 2022-10-05 22:52:18 +01:00
precondition
248f98bdad width:2 → height:2 for spacetime thumb keys (#18605) 2022-10-05 20:19:45 +01:00
adophoxia
fe6f707a85 [Keyboard] Add encoder map support for GMMK Pro (#18600) 2022-10-05 10:42:21 -07:00
4pplet
44aad7b92b [Keyboard] Add waffling60 Rev D ANSI Hotswap (#18579)
Co-authored-by: 4pplet <4pplet@protonmail.com>
Co-authored-by: 4pplet <stefan.ess@gmail.com>
2022-10-05 10:30:41 -07:00
4pplet
e7d5a6e490 [Keyboard] Add waffling60 Rev D Solder (#18580)
Co-authored-by: 4pplet <4pplet@protonmail.com>
Co-authored-by: 4pplet <stefan.ess@gmail.com>
2022-10-05 10:30:03 -07:00
Brian Choromanski
f7785223e5 Added new issue template for "Other issues" (#18578) 2022-10-05 10:29:43 -07:00
George Rodrigues
959f4cbb62 docs: some typos (#18582)
probably hacktoberism
2022-10-05 17:32:07 +01:00
precondition
5f671de13a RESET → QK_BOOT in nyhxis/nfr_70 (#18607) 2022-10-05 16:04:17 +01:00
Nick Brassel
c1d21de1a2 Fixup builds for mechlovin/infinity87. (#18604) 2022-10-05 21:35:56 +11:00
Klesh Wong
164d2f36d1 fix: ps2_interrupt.c failed to compile (#18597) 2022-10-05 20:59:28 +11:00
Nick Brassel
df7f33582f Add C++ prerequisite for Fedora. (#18602) 2022-10-05 20:52:10 +11:00
Jesper Severinsen
0e81954289 [Keyboard] Add Nyhxis NFR-70 keyboard (#17562)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-04 19:34:48 -07:00
Kim Minjong
b100db1e56 [Docs] Add a note about the print function. (#17737)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-04 19:16:11 -07:00
nodatk
3f63bbc7d8 [Keyboard] Twig50 (#18085)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-04 18:40:18 -07:00
Conor Burns
fe7ac87f18 [Docs] Clarify how to use the bootloader LED for rp2040 (#18585) 2022-10-04 18:37:28 -07:00
dependabot[bot]
8b824a8029 Bump anothrNick/github-tag-action from 1.51.0 to 1.52.0 (#18590)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-05 09:08:59 +11:00
Less/Rikki
d43045e845 define oled_write_ln_P as oled_write_ln for non-AVR MCUs (#18589) 2022-10-05 09:00:01 +11:00
mmccoyd
78c4907f34 [Docs] Clarify CAPS_WORD behaviors (#18137)
Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>
Co-authored-by: mmccoyd <mmccoyd@cs.berkley.edu>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-10-03 19:17:08 -07:00
Brian Choromanski
dc52347461 Added new issue templates for feature requests and bug reports (#18576)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-10-04 12:42:56 +11:00
dependabot[bot]
88046b3ebf Bump anothrNick/github-tag-action from 1.50.0 to 1.51.0 (#18575)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-04 08:51:57 +11:00
Johns
1d194ac60f Adds Anne Pro 2 c18 ISO variant support (#18154) 2022-10-03 18:41:24 +11:00
Alabahuy
f5e81681cd add rart60 (#18570)
* add rart60
2022-10-03 07:35:43 +01:00
Ryan
cc1565f2a3 :flash: print bootloader (#18569) 2022-10-03 12:26:04 +11:00
Nick Brassel
9ecd6eb9b9 Add tzarc/ghoul. (#18562)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-10-03 07:24:22 +11:00
Peter Park
2b3f6d0ec6 [Keyboard] Add Uni v4 keyboard (#18280)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Peter Park <peter@Peters-MacBook-Air.local>
2022-10-01 10:56:41 -07:00
4pplet
0bae3b09a1 [Keyboard] Add waffling60 Rev D ISO Hotswap (#18372)
Co-authored-by: 4pplet <4pplet@protonmail.com>
Co-authored-by: 4pplet <stefan.ess@gmail.com>
2022-10-01 10:44:52 -07:00
Joel Challis
2d25b89d11 Remove more RESET keycode references (#18559) 2022-10-01 17:20:42 +01:00
Nick Brassel
059a7fb9b0 Djinn theme, allow force redraws (#18558) 2022-10-01 15:21:22 +01:00
Ryan
9f0d9b4fbe onekey: fix quine keymap (#18555) 2022-10-01 12:54:42 +10:00
Markus Knutsson
2b33d2c098 [Keyboard] Add Little Big Scroll 4 macropad (#18516)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-30 16:33:09 -07:00
nimishgautam
3db33fba28 [Keymap] corne layout with mac/linux text editing shortcuts (#18374)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-30 16:07:20 -07:00
jack
245f00b4d9 Fixup keebio/sinc (#18551) 2022-09-30 23:08:40 +01:00
James Young
dfa5880144 Smith and Rune Iron 165R2 Refactor (#18552)
by noroadsleft
2022-09-30 21:45:21 +01:00
Forrest Cahoon
5329f2558c Forrcaho foldkb caps lock blink (#17424)
* Add mapping for Keebio FoldKB

* Add (test) macro key; draw box chars around layout

* More programming macro keys added

* Fix stupid bug: return false when key has been handled

* Add mouse layer

* Encoder functions as mouse scroll wheel

* add readme.md for my foldkb layout

* Custom Keebio FoldKB keymap: blink backlight when caps lock is on
2022-09-30 16:23:24 -04:00
Pascal J
3b95f97a19 [Keyboard] handwired/tractyl_manuform: Arduino Micro (#17199)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-30 13:08:10 -07:00
JX
4dfd744e4e [Keyboard] Add nightstar75 (#18546) 2022-09-30 12:42:28 -07:00
3araht
10005e9f39 Rotary encoder setting is revised to solve a malfunction. (#18227)
* Rotary encoder setting is revised to solve a mulfunction. UNUSED_PINS deleted.

* Encoder map applied.

* ENCODER_MAP_ENABLE moved to keymap level.

* Settings in rules.mk moved to info.json.

* picture sent to imgur. config.h streamlined.
2022-09-30 07:13:21 +01:00
Purdea Andrei
e1e86cb1fb Add Unicomp PC122 keyboard (#18326) 2022-09-30 07:02:24 +01:00
Luis Moreno
b77ff4edf4 AceVice One's keymap for Kyria keyboard (#18393) 2022-09-30 06:55:46 +01:00
Controller Works
043e6e72c0 [Keyboard] Add mini42 (#18491)
Co-authored-by: kevinmgee <kevingee@kevingee.biz>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-30 06:48:41 +01:00
Ramon Imbao
f3351c6bfb [Keyboard] Add saevus cor (#18368) 2022-09-29 22:42:29 -07:00
Zicodia
cb2a99a415 [Keyboard] Fix tklfrlnrlmlao layout (#18543)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-29 22:42:11 -07:00
Tom Barnes
454c8c3100 [Keyboard] add Ask55 (#18256)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-29 22:24:41 -07:00
JX
cc8f2c584a [Keyboard] Add yandrstudio/buff67v3 keyboard (#17592)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-29 22:13:49 -07:00
James Young
dc7d2692c6 Grammar Fix for PR Checklist (#18540)
* Grammar Fix for PR Checklist

* Update docs/pr_checklist.md

Co-authored-by: Nick Brassel <nick@tzarc.org>

* Update docs/pr_checklist.md, take 2

Co-authored-by: Nick Brassel <nick@tzarc.org>
2022-09-30 05:28:12 +01:00
Joseph Fass
83776b44b3 [Keyboard] Add handwired tkk diodeless keyboard (#18379)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-29 20:44:25 -07:00
Andrew Kannan
be61df0827 [Keyboard] Add Moment Solderable (#18385)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-09-29 20:29:11 -07:00
Markus Knutsson
dab9edeabb [Keyboard] Add Little Big Scroll 6 macropad (#18510)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-29 20:01:33 -07:00
JX
2c4fd924c0 [Keyboard] Add EAU87 (#18532) 2022-09-29 19:57:39 -07:00
Nick Brassel
168b69654f Explicitly specify path to RP2040 wear_leveling config file. (#18541) 2022-09-29 19:57:20 -07:00
jack
917c12d973 [Keyboard] fixup tklfrlnrlmlao (#18539) 2022-09-29 19:56:34 -07:00
James Young
8f7b382902 P3D Glitch Configurator Fix and Keymap Touch-Up (#18534) 2022-09-29 19:49:05 -07:00
ZyberSE
adcdacf93c [Keymap] Personal user space code and keymaps by ZyBeR (#18512)
Co-authored-by: ZyBeR <n/a>
2022-09-29 19:01:33 -07:00
James Young
5b2eb4ec85 Plywrks Ahgase Community Layout Support (#18535) 2022-09-29 17:56:34 -07:00
Seth Barberee
26c3e877c7 [Keyboard] Convert most of sinc to data driven info.json (#18481) 2022-09-29 17:23:02 -07:00
Less/Rikki
1dd15a8f22 [Keyboard] tau4 fixup/refactor (#18523) 2022-09-29 17:10:33 -07:00
James Young
96c1ac24ee TKL-FF Community Layout Support (#18538) 2022-09-30 09:02:21 +10:00
Zicodia
413284a2e8 Fixed layout matrix for TKLFRLNRLMLAO (#18537)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-30 08:55:19 +10:00
Joe Scotto
43e57ab777 [Keyboard] Add ScottoCMD Keyboard (#18520) 2022-09-29 13:32:27 -07:00
dependabot[bot]
94ec64f91b Bump anothrNick/github-tag-action from 1.49.0 to 1.50.0 (#18536)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-30 05:34:02 +10:00
Ryan
45b5ed5c6e Onekey: migrate some stuff to data driven (#18502) 2022-09-30 04:23:11 +10:00
James Young
bad8c67189 Neson Design 700E Refactor (#18524) 2022-09-29 10:45:36 -07:00
syntax-magic
49128d6b85 Updated documentations. No changes to keymap.c functions. (#18530) 2022-09-29 18:33:23 +01:00
Daniel Bast
b51b3681b7 Fix keychron q2 iso default keymaps (#18501) 2022-09-29 13:15:00 -04:00
Less/Rikki
00dc764f72 [docs] Improve documentation regarding info.json (#18508)
* docs: raise info.json awareness

* docs: note that DD migration is WIP
2022-09-29 13:08:45 -04:00
lalalademaxiya1
bfcbcfe3c7 Update q0 for keychron (#18522) 2022-09-29 17:50:47 +01:00
James Young
14e1886405 novelkeys/nk20: rename LAYOUT_all to LAYOUT (#18525)
This board only supports one layout.
2022-09-29 17:48:44 +01:00
Markus Knutsson
961de3c205 Update reference_info_json.md (#18518)
* Update reference_info_json.md

* Update docs/reference_info_json.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update docs/reference_info_json.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update docs/reference_info_json.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update docs/reference_info_json.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update docs/reference_info_json.md

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-29 11:01:34 -04:00
DeflateAwning
51f2d27321 Fix typo (#18526) 2022-09-29 11:50:32 +01:00
James Young
eb55551e2d Monoflex 60 Layout Refactor and Touch-Up (#18517) 2022-09-29 01:32:25 -07:00
James Young
6b8dfdfca5 Mokey Ibis80 Refactor (#18514) 2022-09-28 23:41:33 -07:00
James Young
c705f0f85f Mechlovin Zed65 Wearhaus66 Configurator Fixes (#18507) 2022-09-28 23:32:03 -07:00
dependabot[bot]
c71bc77da1 Bump anothrNick/github-tag-action from 1.46.0 to 1.49.0 (#18515)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-29 11:02:36 +10:00
Mike Ryan
d6f77637c5 [Keyboard] dygma/raise: multiple fixes and improvements (#18361[) 2022-09-28 12:23:42 -07:00
Alabahuy
d050e689f5 [Keyboard] add rart80 (#18287) 2022-09-28 12:23:17 -07:00
Luis Carlos
269600f640 Update feature_tap_dance.md (#18509)
Fixed typo
2022-09-28 20:22:59 +01:00
Max Renner
7b7255553c [Keymap] Add rennerom planck layout (#17283)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-28 12:21:16 -07:00
Felix Jen
6f108642eb [Keyboard] Add KG60 and KG65 (#17565)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-28 12:20:26 -07:00
Ramon Imbao
63c87f591e Update VID and PID of Abats Keyboard Club Nayeon (#18503) 2022-09-27 14:51:40 +01:00
Arturo Avila
848e1ec318 [Keyboard] Updated Kintsugi to support encoder mapping (#18492) 2022-09-27 05:44:41 -07:00
JX
f8c8005ce1 [Keyboard] Add wave75 (#18490) 2022-09-27 05:36:49 -07:00
James Young
7d0c1332cc Mechlovin Foundation Configurator Cleanup (#18500) 2022-09-27 02:17:08 -07:00
James Young
492c34f8d0 Linworks FAve 87H Layout Refactor (#18497) 2022-09-27 02:16:51 -07:00
James Young
e1980726ba Linworks FAve 84H Layout Refactor (#18496) 2022-09-27 02:16:35 -07:00
Arturo Avila
cad1547ee6 [Keyboard] Add Obi keyboard (#18489) 2022-09-27 02:16:23 -07:00
Zicodia
e021fe90b1 [Keyboard] Add TKLFRLNRLMLAO (#18487)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-27 02:16:03 -07:00
James Young
045170a958 Keyten Aperture Community Layout support (#18495)
* rename LAYOUT_all to LAYOUT_65_ansi_blocker_tsangan_split_bs

* enable Community Layouts support

* info.json: format whitespace

- apply four-space indent
- remove trailing whitespace

* info.json: correct maintainer value

Field is intended to reference the maintainer's GitHub username.
2022-09-27 02:53:31 +01:00
James Young
357eeafd39 Keyquest Enclave-1: rename LAYOUT to LAYOUT_ortho_3x3 (#18494)
* rename LAYOUT to LAYOUT_ortho_3x3

* info.json: correct maintainer value

Field is intended to reference the maintainer's GitHub username.
2022-09-27 00:43:33 +01:00
Drashna Jaelre
b521641c50 [Keyboard] Ploopy Thumb Trackball (#18214)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: ploopyco <git@ploopy.co>
2022-09-25 23:15:50 -07:00
Nick Lopez
d98ec93eb8 [Keyboard] Add Osborne 1 handwired keyboard (#18397)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-25 23:14:36 -07:00
zhiquankhor
65d0fef47a [Keymap] Add zq keymap for w1_at (#18479) 2022-09-25 23:13:48 -07:00
Alejandro J
667831daba [Keymap] Add ajarov's crkbd layout (#17479)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-25 23:12:24 -07:00
Ben Allen
1b9de35f3a [Keymap] Adding Benrestech keymap for the Crkbd (#18163)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-25 23:11:48 -07:00
JX
e2954cd432 [Keyboard] add yr6095 (#18278) 2022-09-25 23:11:22 -07:00
Ramon Imbao
7a5a99b6a5 [Keyboard] Add GHS.JEM (#17340)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-25 23:00:59 -07:00
JX
995a0077fc [Keyboard] add eau75 (#18173)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-25 22:51:09 -07:00
Cao Thai Duong
6809f154c9 [Keyboard] Add Handwired 87 keys (#17682)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2022-09-25 22:42:04 -07:00
syntax-magic
04b93bd2a9 [Keymap] Switched keys around in RIGHFN layer and updated indicator lights to green (#18465)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: syntax-magic <dkim.8881@gmail.com>
2022-09-25 21:53:16 -07:00
Joe Scotto
fe7ee4961c [Keyboard] Add Scotto9 Macropad (#18452)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-25 20:39:09 -07:00
Daniel Shields
a4dcf22fd7 [Keymap] Tune mod tap configuration for dshields home row mods (#18458) 2022-09-25 20:38:37 -07:00
jack
82eb98449d Fixup saevus/cor_tkl (#18476) 2022-09-26 01:00:20 +01:00
Albert Y
ab58ae582e [Keyboard] Layout matrix correction (#18473) 2022-09-25 19:03:19 +01:00
Nick Brassel
1bdf4cdc22 Fix tzarc/djinn screen geometry. (#18478) 2022-09-25 22:04:52 +10:00
Ryan
056d6aee27 Untangle layouts for Dimple rev3 and Infinity87 (#18462) 2022-09-25 17:54:41 +10:00
Drashna Jaelre
431c92893f [Keyboard] Update Work Louder VIA layouts (#18470)
* [Keyboard] Fix Encoder Maps for Work Louder Boards

* Fix via keymap for work board

* Cleanup
2022-09-24 20:58:10 +01:00
Joe Scotto
e88f0adcae [Keyboard] Add Scotto36 Keyboard (#18446) 2022-09-24 11:56:06 -07:00
adophoxia
7caf0b1ab8 [Keyboard] Add Keychron Q0 (#18348) 2022-09-24 11:53:22 -07:00
Ramon Imbao
dfa6fd4b2a [Keyboard] Add Plywrks Allaro (#18275)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-24 11:49:13 -07:00
Falke Carlsen
2901649578 [Keymap] falkecarlsen gmmk keymap and readme (#17286) 2022-09-24 09:39:44 -07:00
Joel Challis
6d4d228bea [Keyboard] Add SENSE75 firmware (#18442) 2022-09-24 09:05:12 -07:00
Wes Lord
244f27ac27 Remove orphan custom functions reference in keymap docs (#18444) 2022-09-24 09:04:14 -07:00
Albert Y
0dca9a1f62 [Keyboard] Convert Cradio config to data driven model (#18412) 2022-09-24 08:44:50 -07:00
Andrew Kannan
fa1388a42e [Keyboard] Add Moment Hotswap PCB (#18384) 2022-09-24 08:38:42 -07:00
Ramon Imbao
5ff2d93582 [Keyboard] Add Saevus Cor TKL (#18369) 2022-09-24 08:36:19 -07:00
Steven Karrmann
3072feb8ed [Keyboard] Add Janus keyboard (#18367)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-24 08:35:37 -07:00
takashicompany
45cc7f1e94 [Keyboard] Add GOAT51 (#18220)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-24 07:05:53 -07:00
lunatic
fe9c1d8e45 [Keyboard] add CherryB CB65 (#18356) 2022-09-24 06:58:03 -07:00
jun10000
6cf4af9876 [Keyboard] Add om60 rev1 keyboard (#18126)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: jun10000 <jun1kbd@outlook.jp>
2022-09-24 00:38:43 -07:00
Matt Chan
e3e0a35b58 kegen/gboy: Fix typo in readme.md; add labels to info.json and reformat for readability (#18269)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-09-24 00:03:07 -07:00
Wilba
2791ceb6aa Add caps lock and scroll lock indicators (#17725) 2022-09-23 19:39:55 -04:00
James Young
03a671e795 JadooKB JKB65 Community Layout Support (#18461)
* rename LAYOUT_67_ansi to LAYOUT_65_ansi_blocker

* enable Community Layouts support
2022-09-23 23:26:52 +01:00
dependabot[bot]
3b7aeddc4d Bump actions/stale from 5 to 6 (#18456)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-23 09:52:21 +10:00
Drashna Jaelre
ea80141f69 [Docs] Explicitly mention kb/user callbacks as boolean (#18448)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-21 14:00:25 -07:00
bojiguard
ee22f34e69 Fungo rev1: fix QMK Configurator key sequence - info.json (#18434)
* * info.json: fix key position and order

* fix json format

* Update keyboards/fungo/rev1/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

Co-authored-by: Joel Challis <git@zvecr.com>
2022-09-21 18:32:31 +01:00
Nick Brassel
b03a3d7047 Checklist clarification. (#18440) 2022-09-21 12:08:47 +01:00
Álvaro A. Volpato
b0f824755a Update Apollo PCBs to use wear levelling code (#18411) 2022-09-20 11:43:49 -07:00
Joel Challis
456d6f3342 Remove legacy keycodes from unit tests (#18430) 2022-09-20 08:52:43 +02:00
Jimmy Sjölund
100cf3db3a [Keymap] Added Kyria keyboard to jimmysjolund (#18335) 2022-09-19 23:19:51 -07:00
Danny
41fdf32afb Add encoder map to Quefrency VIA keymap (#18380)
* Add encoder map to Quefrency VIA keymap

* Explicitly define which RGB animations are enabled

* Set different PID to prep for different VIA .json usage

* Add ifdefs to handle if ENCODER_ENABLE is set to NO
2022-09-19 20:26:29 +01:00
Felix Springer
51620c1042 Fix boardsource/lulu RGB matrix (#18407)
* Fix ordering of entries for RGB matrix.

* Fix typos in RGB matrix definition.

These matrix indices overlapped.

* Improve positions in RGB matrix.

The rotary encoder and the key below that are in a new column.
The rotary encoder's height is inbetween rows.
The key below is kind of off-axis and thus hard to pin down to a
specific location.

The modifer keys in the bottom row are staggered compared to the other
columns.
2022-09-19 19:42:38 +01:00
Marius Renner
652d1d8a6d Fix int8_t overflow in RGB heatmap effect (#18410) 2022-09-19 19:34:29 +01:00
Danny
89df40d4f3 Enable more BDN9 RGB effects (#18420) 2022-09-19 19:19:13 +01:00
Derek
ed6679b89c [Keyboard] Sodium50 - Fix configuration (#18422) 2022-09-19 19:18:13 +01:00
coliss86
2c516fab29 [Docs] Extract 'Layer Change Code' and EEPROM (#18174)
* [Docs] Extract 'Layer Change Code' and EEPROM

* adjust wording

* Update docs/custom_quantum_functions.md

Co-authored-by: Joel Challis <git@zvecr.com>

Co-authored-by: Joel Challis <git@zvecr.com>
2022-09-19 02:20:22 +01:00
Daniel Shields
d8ef2ea7dd Add home row modifiers to dshields keymaps. (#18376) 2022-09-18 19:10:50 -04:00
Joel Challis
e7e08030d2 Reduce charue/sunsetter_r2 firmware size (#18378)
* Reduce charue/sunsetter_r2 firmware size

* add rules.mk
2022-09-19 00:09:02 +01:00
Danny
ecb4ba70b1 Add encoder map to BDN9 VIA keymap (#18388) 2022-09-18 19:01:05 -04:00
jonavin
c6ff10a257 FIx ARRAYSIZE def and Murphpad string array (#18392)
Co-authored-by: Jonavin <=>
2022-09-18 18:57:37 -04:00
Nick Brassel
c56dc9c0bb Fixup axon40 lint. (#18409)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-19 07:19:03 +10:00
Less/Rikki
3444dd5e2d [keyboard] kbdfans/kbd75rgb info.json fix (#18391) 2022-09-18 16:01:46 +10:00
dependabot[bot]
4781a798ca Bump anothrNick/github-tag-action from 1.45.0 to 1.46.0 (#18386)
Bumps [anothrNick/github-tag-action](https://github.com/anothrNick/github-tag-action) from 1.45.0 to 1.46.0.
- [Release notes](https://github.com/anothrNick/github-tag-action/releases)
- [Commits](https://github.com/anothrNick/github-tag-action/compare/1.45.0...1.46.0)

---
updated-dependencies:
- dependency-name: anothrNick/github-tag-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-16 22:03:32 +01:00
npspears
799046fd9d Quark revision - rotary encoder and 7u support (#17664)
by npspears
2022-09-16 18:37:39 +01:00
an_achronism
1ec8ae8a49 Initial support for Tetromino added (#18341)
by the spherical lad @an-achronism
2022-09-16 17:25:16 +01:00
Nick Brassel
cf88d95613 Add ability to remove temporary files during multibuild. (#18381) 2022-09-16 09:19:10 +01:00
Joel Challis
617f957e82 Fix handwired/swiftrax/bumblebee layout macro (#18377) 2022-09-16 02:03:18 +01:00
ziptyze
57c35bd817 [Keyboard] Add pi40 (#18207)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-15 11:16:58 -07:00
Vino Rodrigues
56bad5d357 [Keyboard] Removal of deprecated defines in IDOBAO keyboards (#18358) 2022-09-14 23:52:38 -07:00
ENDO Katsuhiro
f483520ff9 Fix problem that Chidori is not recognized by host computer. (#17882) 2022-09-15 01:14:19 +01:00
Drew Hamilton
3fbc3ac8ad [Keyboard] Add a new keyboard 'plum47' (#18359) 2022-09-15 01:04:40 +01:00
Joel Challis
01f31bf28e [Docs] RESET -> QK_BOOT (#18365) 2022-09-15 01:03:55 +01:00
jack
0abde386ae Remove RESET keycodes from fjlabs keyboards (#18364) 2022-09-14 23:54:24 +01:00
Andrew Kannan
017398c283 [Keyboard] Add Vector PCB (#17380) 2022-09-14 11:13:13 -07:00
jels
624ab64750 [Keyboard] Add Calice (#17929)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-14 10:56:09 -07:00
James Young
083ac400e2 GeonWorks Frog Mini Soldered Layout Rework (#18308) 2022-09-14 08:59:17 -07:00
satorusaka
87b1b560cb [Keyboard] Add skmt/15k keyboard (#18321)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-09-14 08:40:18 -07:00
Ramon Imbao
fc3f2dcb43 [Keyboard] Replace Nayeon ATmega32u4 config with RP2040 (#18265) 2022-09-14 08:16:54 -07:00
dependabot[bot]
23666150e9 Bump anothrNick/github-tag-action from 1.42.0 to 1.45.0 (#18355)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-14 10:36:20 +10:00
Reibl János Dániel
6984c6d3b3 fix: Remove TERM_ON/TERM_OFF from my keymap (#18354) 2022-09-14 01:20:34 +01:00
dependabot[bot]
2800cd31ae Bump anothrNick/github-tag-action from 1.39.0 to 1.42.0 (#18344)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-13 21:10:52 +10:00
Purdea Andrei
b2ad047d7f Fix keyboard_name for Unicomp Classic/Ultra Classic keyboards (#18327) 2022-09-12 23:10:17 +01:00
ebastler
110de0b512 Add EM.8 keyboard (#18328)
by ebastler
2022-09-12 17:17:01 +01:00
Vino Rodrigues
f46379f308 fixed missing x coordinate on spacebar (#18330) 2022-09-11 13:07:32 +01:00
Joel Challis
16c2b528df GMMK2: Fix 'ISO' within product name (#18322) 2022-09-10 13:31:46 +01:00
Joy Lee
405a32ddf4 Added gmmk v2 p65 keyboard. (#18185) 2022-09-09 23:12:48 +01:00
Joel Challis
725df1278b Fix '_RIGHT' matrix pins lint error (#18320) 2022-09-09 21:22:55 +01:00
Joel Challis
9e24262161 Fix DD use within boardsource/microdox (#18319) 2022-09-09 21:21:48 +01:00
ZhaoYou.Ge
9ad75dbf47 'soda/cherish' support apm32f072 (#18316) 2022-09-09 19:17:10 +01:00
Jacqueline Liang
88555d8e18 Add via support for 6key (#18082) 2022-09-09 13:41:18 +01:00
James Young
107ccc56b4 Hillside 46 & 52: remove dead space from QMK Configurator renderings (#18315)
* Hillside 46 info.json: fix syntax error

* Hillside 46 info.json: remove dead space

* Hillside 52 info.json: remove dead space
2022-09-09 02:57:46 +01:00
Danny
7b4dc5a7e4 Add Iris Rev. 6b (#18307) 2022-09-07 17:52:11 -04:00
James Young
ce90be0961 GeonWorks Frog Mini Hotswap Layout Rework (#18305)
* fmh.h: add matrix diagram

* info.json: apply friendly formatting

* physically arrange LAYOUT_all macro

Move position `K5D` (right half of Split Backspace) to the end of the top row.

* rename LAYOUT_all to LAYOUT_60_tsangan_hhkb

* add LAYOUT_60_ansi_tsangan

* add LAYOUT_60_hhkb

* add LAYOUT_60_ansi_wkl

* add LAYOUT_60_ansi_wkl_split_bs_rshift

* enable Community Layouts support
2022-09-07 14:30:17 -07:00
Danny
3f65d48539 Update Iris VIA configuration (#18306)
* Update RGB matrix max brightness

* Remove old VIA workaround code

* Fix default encoder rotations	for encoder map
2022-09-07 22:04:46 +01:00
mechlovin
b0dc789a1b [Keyboard] Wearhaus66 correct matrix (#18284) 2022-09-07 20:18:48 +01:00
David Luo
76910eece1 enable RGB matrix effects for drop ctrl (#18291) 2022-09-07 20:17:52 +01:00
syntax-magic
6321cbaadd [Keymap] removed else in numlock led if statement (#18304) 2022-09-07 19:52:32 +01:00
syntax-magic
8a0c0f72a5 added a new kprepublic/bm40hsrgb keymap called dan (#18301)
by syntax-magic
2022-09-07 17:14:46 +01:00
ddeklerk
a082fcc933 Delete my keymaps (#18302) 2022-09-07 20:38:54 +10:00
Michael Stapelberg
f733307551 keymaps/stapelberg: keypad layer for multimedia keys, wake on escape (#18295)
This makes more keys function as printed on the actual keyboard :)
2022-09-06 23:13:12 +01:00
James Young
7160487ccd Fungo rev1: fix QMK Configurator key sequence (#18293)
* info.json: correct JSON syntax; friendly formatting

* info.json: fix key sequence
2022-09-06 18:36:37 +01:00
Joel Challis
60cac6d938 Discourage use of ENCODER_MAP at keyboard level (#18286)
* Discourage use of ENCODER_MAP at keyboard level

* Update docs/feature_encoders.md

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-06 18:08:48 +01:00
James Young
712aa7b1cd Mars 6.5 Layout Additions (#18282)
* info.json: apply friendly formatting

* add LAYOUT_65_ansi_blocker

* add LAYOUT_65_ansi_blocker_split_bs

* add LAYOUT_65_iso_blocker

* add LAYOUT_65_iso_blocker_split_bs

* enable Community Layouts support

* info.json: correct maintainer value
2022-09-06 05:26:11 +01:00
Joel Challis
0306bdf7fd Remove use of legacy keycode (#18281) 2022-09-06 05:25:32 +01:00
James Young
5f1273fca6 EU ISOlation: fix QMK Configurator key sequence (#18272)
* eu_isolation.h: physically arrange layout macros

Whitespace only; no logic changes.

* info.json: apply friendly formatting

Add line breaks between physical rows.

* info.json: correct key sequence
2022-09-05 14:14:25 +01:00
AMing Lau
a36c95db60 Fix compilation error for GH60 satan HHKB 7u layout (#18250)
* Fix compilation error for GH60 satan HHKB 7u layout

* Update keyboards/gh60/satan/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

Co-authored-by: Joel Challis <git@zvecr.com>
2022-09-05 02:00:44 +01:00
James Young
288808526b dyz60_hs Layout Additions (#18261)
* dyz60_hs: add matrix diagram

* add LAYOUT_60_ansi

* add LAYOUT_60_ansi_split_bs_rshift

* add LAYOUT_60_tsangan_hhkb

* add LAYOUT_60_iso

* add LAYOUT_60_iso_split_bs_rshift

* enable Community Layouts support

* readme.md: correct keyboard references

Replace `dyz60` with `dyz60_hs` as needed.
2022-09-03 22:43:52 +01:00
Ryan
3c09db41fe Fix a couple of boards still using usb.device_ver (#18258) 2022-09-03 14:47:22 -04:00
Ryan
bfec30a9fe Clean up data driven mappings syntax (#18257) 2022-09-03 19:44:42 +01:00
coliss86
39e611794d [Docs] Update 'Process Record' according to the code (#18209)
* [doc] Update 'Process Record' according to the code

* [doc] fix link
2022-09-03 13:46:42 -04:00
Xelus22
489b287e1f [Keyboard] RS60 Rev2 change to eeprom emulation (#18201)
by xelus
2022-09-03 16:27:00 +01:00
Vino Rodrigues
0c76a3c7d0 [Keyboard] Add IDOBAO Abacus ID42 Keyboard (#16923)
by vinorodrigues
2022-09-03 16:21:00 +01:00
Tim Traversy
f27c70fffc Add absolute key positions to microdox info.json (#18238) 2022-09-03 15:47:20 +01:00
Joel Challis
5c0e87608f Remove more RESET keycode references (#18252) 2022-09-03 06:50:44 +01:00
Brian
5d932e2612 [Keymap] Fixing location of my Keymap for the Gentleman65 (#18246) 2022-09-02 09:10:05 -07:00
Drashna Jaelre
90418b371f [Keymap] Fix bootmagic compilation issue with Drashna keymaps (#18223) 2022-09-02 08:32:38 -07:00
Yoichiro Tanaka
27671d8a43 [Keyboard] Add Lunakey Pico (#18202)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-01 20:54:33 -07:00
Jannik Becker
8c793c1a43 [Keyboard] Add Shoc Keyboard (#18143)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-09-01 20:48:24 -07:00
Joel Challis
26814ca060 Install correct package on Fedora (#18243) 2022-09-01 20:43:19 -07:00
jpuerto96
101d7b5337 [Keyboard] Add Ingrained Keyboard (#15928)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Juan Puerto <jpuerto@psc.edu>
Co-authored-by: jpuerto-psc <68066250+jpuerto-psc@users.noreply.github.com>
2022-09-01 16:32:47 -07:00
Joel Challis
7adef85fa4 Remove non promicro pins from converters (#18239) 2022-09-01 15:38:52 -07:00
3araht
1ccd0c19da Add giabalanai keyboard (#10125)
by 3araht
2022-08-31 21:05:43 +01:00
Ryan Neff
d4c935d8fa Added personal Iris Rev6a layout and Milk 2% layout (#17600)
by JellyTitan
2022-08-31 20:29:26 +01:00
Benjamin Collet
6104b66014 Add bepo variant to massdrop/thekey keymaps (#18129)
by mrBen
2022-08-31 18:19:42 +01:00
3araht
786b5d310d Bandominedoni encoder fix (#18229)
by 3araht
2022-08-31 18:17:54 +01:00
Drashna Jaelre
0faedb11cc [Keyboard] Updates to Work Louder keyboards (#18232)
by Drashna
2022-08-31 17:44:00 +01:00
JX
de0d342b82 [Keyboard] add tg67 (#18225) 2022-08-31 09:41:14 -07:00
Ryan
6f804f76b4 qmk lint: fix TypeError (#18226) 2022-08-31 15:20:00 +10:00
Andrew Kannan
bc538e3776 [Keyboard] CannonKeys Malicious Ergo (#17076)
* Add Malicious Ergo keyboard to QMK

* Update layout

* update info.json

* update info.json again

* Update info.json again

* i h8 info.json

* its default not all

* Update keyboards/cannonkeys/malicious_ergo/config.h

* Add bootloader instructions and license header

* Update keyboards/cannonkeys/malicious_ergo/rules.mk

* Update keyboards/cannonkeys/malicious_ergo/rules.mk

* Update keyboards/cannonkeys/malicious_ergo/readme.md

* Remove rotation from info.json

* Remove labels

* Update keyboards/cannonkeys/malicious_ergo/readme.md

* Update keyboards/cannonkeys/malicious_ergo/malicious_ergo.h

* Revise info.json again

* whitespace fix

* Apply suggestions from code review

Move pid/vid into info json
Fix rounding errors in info json

Thanks to fauxpark and noroadsleft!
2022-08-30 11:29:05 -07:00
yiancar
a9e726501d [Keyboard] Add NK65B (#18211)
Co-authored-by: yiancar <yiancar@gmail.com>
2022-08-30 02:50:43 -07:00
yiancar
907d7bfc54 [Keyboard] Add NK87B (#18210)
Co-authored-by: yiancar <yiancar@gmail.com>
2022-08-30 02:50:00 -07:00
Drashna Jaelre
092dd58e34 [Keyboard] Fix layout macro for Cannonkeys Atlas keyboard (#18216) 2022-08-30 01:40:35 -07:00
jack
df4b01b433 fix boardsource/lulu (#18217) 2022-08-30 09:34:39 +01:00
precondition
6f2c173743 Expand on the differences between Caps Word and Caps Lock (#18139)
* Expand on the differences between Caps Word and Caps Lock

* Add the equiv default KC_ next to intl alias

* It's configurable so it's not a problem
2022-08-30 10:03:25 +02:00
jack
035e7fdb8b Add boardsource/lulu RP2040 support (#18200)
by waffle87
2022-08-30 08:20:05 +01:00
Xelus22
f3d52d8fe8 [Keyboard] Kangaroo Rev2 (#18199) 2022-08-29 20:03:30 -07:00
Less/Rikki
7eb71f72a7 [Keyboard] jacky_studio/piggy60 refactor (#18197) 2022-08-29 20:03:16 -07:00
3araht
f04336ff46 Redefinition of MIN is avoided in midi.c (#18203) 2022-08-29 12:18:53 -07:00
Felix Jen
de1d6b6f15 [Keyboard] Add sinanju WK (#17736)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-29 11:25:20 -07:00
Felix Jen
a6b47de732 [Keyboard] Add Peaker keyboard (#17920)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-29 11:23:23 -07:00
Felix Jen
ccb244d5ed [Keyboard] Add Trailblazer Avalon (#17568)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-29 11:22:54 -07:00
Christian Solje
22136f8135 [Keymap] Add csolje 42 keymap for the cantor (#18125)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Christian Solje <csolje@gn.com>
2022-08-29 11:22:01 -07:00
Stefan
56b93a3ad8 [Keyboard] Add handwired Split 5x7 (#18128)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-28 21:49:17 -07:00
TJ
b719a16b03 [Keyboard] add Nearfield, fix typo in Le Chiffre Readme (#17914) 2022-08-28 21:48:41 -07:00
bbrfkr
a2294bcc97 [Keyboard] Update dynamis keyboard (#17625)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-28 21:47:30 -07:00
Simon Hengel
38de991fda [Keyboard] Add chord/zero (#18190) 2022-08-28 21:39:45 -07:00
NGatti1997
8b9f0a58b4 Swap KC_VOLD and KC_VOLU on GMMK2 to correct places (#18193) 2022-08-29 02:43:24 +01:00
biesigrr
3f99c42800 Expose Moonlander split detection to user code (#18040) 2022-08-29 02:37:29 +01:00
Juno Nguyen
1cc0b1e371 Update junonum keymap: add AG_NORM recovery (#18170) 2022-08-29 02:34:47 +01:00
Jeff Epler
3c3f55c0e9 Add an ez_maker directpins for rp2040 (#17908)
* Add an ez_maker directpins for rp2040

This allows all exposed pins on the Raspberry Pi Pico to be used
as up to 26 individual keys. Keys use a common ground arrangement.

The firmware is also expected to work on generic RP2040 boards, check
manufacturer pinout diagrams or use trial and error to find out the GP#s
of the pins.

* Update keyboards/ez_maker/directpins/rp2040/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Changes based on review comments

Co-authored-by: Joel Challis <git@zvecr.com>
2022-08-28 21:40:10 +01:00
Davide Masserut
0633e71a18 [Keymap] Add Miryoku keymap for Hillside 48 (#18191) 2022-08-28 13:20:30 -07:00
Drashna Jaelre
fa08cb2478 [Keymap] Drashna keymap updates for 0.18.0 (#18184)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-28 12:55:19 -07:00
Ryan
d4a6ee1cad Clean up schema syntax (#18192) 2022-08-28 19:24:11 +01:00
Less/Rikki
4adb64a91b [Keyboard] mechwild/bde cleanup and refactor (#18149) 2022-08-28 10:16:20 -07:00
Matt Chan
585b134729 [Keyboard] Add Kegen G-Boy (#18048)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-28 10:12:18 -07:00
Joshua Diamond
37a85e1f9b More spidey3 userspace cleanup (#18049) 2022-08-28 10:10:28 -07:00
Albert Y
ef0c87c976 Exclude uf2 files in VS Code (#18186) 2022-08-28 09:59:07 -07:00
James Young
efdd4f4d50 Clean-up of #define _ADJUST 16 instances (#18182)
* enum layer_names: 40percentclub/nori default keymap

* enum layer_names: ergotravel default keymap

* enum layer_names: handwired/atreus50 default keymap

* enum layer_names: handwired/ortho5x13 default keymap

* enum layer_names: keebio/levinson default keymap

* enum layer_names: keebio/nyquist default keymap

* enum layer_names: keebio/rorschach default keymap

* enum layer_names: keebio/viterbi default keymap

* enum layer_names: keebio/wavelet default keymap

* enum layer_names: lets_split default keymap

* enum layer_names: maple_computing/launchpad reference keymaps

Update `default` and `default_rgb` keymaps.

* enum layer_names: maple_computing/minidox default keymap

* enum layer_names: miniaxe reference keymaps

Update `default` and `underglow` keymaps.

* enum layer_names: omkbd/ergodash/mini default keymap

* enum layer_names: omkbd/ergodash/rev1 default keymap

* enum layer_names: orthodox default keymap

* enum layer_names: unikeyboard/divergetm2 default keymap

* enum layer_names: woodkeys/scarletbandana default keymap

* add _Static_assert to keymap_introspection.c
2022-08-27 23:13:44 -07:00
Nick Brassel
0a3f7e4869 Merge remote-tracking branch 'upstream/develop' 2022-08-28 14:23:01 +10:00
Nick Brassel
9b5b072255 2022q3 Changelog. (#18180)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-28 14:20:52 +10:00
Joel Challis
a2765bfe19 Add missing SS_LOPT and SS_ROPT defines (#18175) 2022-08-27 09:41:10 +10:00
Ryan
24720400a8 Update LUFA submodule (#18168) 2022-08-26 12:19:34 +10:00
Joel Challis
43fd647130 Add eeprom defaults for tinyuf2 bootloader (#18042) 2022-08-25 21:17:41 +10:00
QMK Bot
1c47bd0ddf Merge remote-tracking branch 'origin/master' into develop 2022-08-24 21:20:43 +00:00
Ryan
fc0bf67f37 Add missing DD mapping for RGB_MATRIX_DRIVER (#18160) 2022-08-24 22:20:05 +01:00
QMK Bot
fdb0cc5981 Merge remote-tracking branch 'origin/master' into develop 2022-08-24 20:41:37 +00:00
Joel Challis
4a67123310 Refactor pianoforte for configurator (#18159) 2022-08-24 13:39:49 -07:00
QMK Bot
3aba764b43 Merge remote-tracking branch 'origin/master' into develop 2022-08-24 20:39:34 +00:00
Joel Challis
e95aa2a352 Fix use of encoder map in mechlovin/zed65/retro66 (#18158) 2022-08-24 13:38:53 -07:00
QMK Bot
fa25cacf6a Merge remote-tracking branch 'origin/master' into develop 2022-08-24 20:38:47 +00:00
Joel Challis
b2db8becf9 Fix use of encoder map in mechlovin/foundation (#18157) 2022-08-24 13:38:07 -07:00
QMK Bot
129c60946c Merge remote-tracking branch 'origin/master' into develop 2022-08-24 19:26:18 +00:00
Joel Challis
3d8c624698 Update invalid pip install flag (#18146) 2022-08-24 20:25:16 +01:00
QMK Bot
5f371104bc Merge remote-tracking branch 'origin/master' into develop 2022-08-24 18:11:55 +00:00
Joel Challis
7fab889696 Fix use of encoder map in mechwild/clunker (#18156) 2022-08-24 19:10:52 +01:00
Ryan
cf41c24db8 Move keyboard USB IDs and strings to data driven: develop (#18152)
* Move keyboard USB IDs and strings to data driven: develop

* Also do new onekeys
2022-08-24 15:28:38 +01:00
QMK Bot
e06ea4a10f Merge remote-tracking branch 'origin/master' into develop 2022-08-23 17:56:51 +00:00
Ramon Imbao
a53ef56946 [Keyboard] Add Plywrks Lune (#17057)
* Add Plywrks Lune

* Add OLED functionality

* Update keyboards/plywrks/lune/keymaps/default/keymap.c

* Update keyboards/plywrks/lune/keymaps/via/keymap.c

* Update keyboards/plywrks/lune/keymaps/via/keymap.c

* Update keyboards/plywrks/lune/lune.c

* Add the missing 2 layers in the keymap

Also added a missing parenthesis in lune.c, and removed
the oled_task_user in the default keymap.

* Update keyboards/plywrks/lune/info.json

* Update keyboards/plywrks/lune/info.json

* Update keyboards/plywrks/lune/info.json

* Update keyboards/plywrks/lune/config.h
2022-08-23 10:55:59 -07:00
QMK Bot
dd0277beab Merge remote-tracking branch 'origin/master' into develop 2022-08-23 17:51:17 +00:00
Kyle McCreery
7839396614 [Keyboard] Add Clunker (#18141)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-23 10:50:19 -07:00
QMK Bot
f03f89ccb5 Merge remote-tracking branch 'origin/master' into develop 2022-08-23 13:43:09 +00:00
Joel Challis
ee416048d9 Use correct board files for cantor (#18144) 2022-08-23 14:42:23 +01:00
QMK Bot
3dd12b5425 Merge remote-tracking branch 'origin/master' into develop 2022-08-23 05:01:45 +00:00
Dave Rowe
f9584c8368 [Keyboard] Enable VIA - ALF X1.1 (#18140) 2022-08-22 22:00:58 -07:00
QMK Bot
c1ce0f44f8 Merge remote-tracking branch 'origin/master' into develop 2022-08-23 02:13:07 +00:00
Brandon Claveria
b395f40e07 [Keyboard] add rgb animation handwired/swiftrax/glacier (#18121)
Co-authored-by: swiftrax <swiftrax@github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-22 19:12:33 -07:00
Sergey Vlasov
7c0e5ce917 Nix shell updates for develop (#18131)
* shell.nix: Update `tomlkit` to 0.11.4 using a Nixpkgs overlay

The used Nixpkgs snapshot contains `tomlkit` version 0.7.0, which is
affected by https://www.github.com/sdispater/tomlkit/issues/148; that
bug is triggered by `pyproject.toml` from `jsonschema` >= 4.11.0,
preventing the build of that module.

Just adding `tomlkit = "*"` to the `[tool.poetry.dev-dependencies]`
section of `nix/pyproject.toml` does not fix the `jsonschema` build,
because `makeRemoveSpecialDependenciesHook` inside `poetry2nix` is not
affected by `nix/pyproject.toml`.  Add a Nixpkgs overlay which updates
the `tomlkit` Python module globally, so that `poetry2nix` would also
use the updated version internally.

* shell.nix: Bump `poetry2nix` to the most recent version

The new `poetry2nix` version includes overrides which are required for
recent versions of some Python packages (in particular, `jsonschema` and
`dotty-dict`).

* shell.nix: Bump QMK CLI to 1.1.1; update other Python deps

Update `pyproject.toml` to match `requirements*.txt`:

- add `pyserial = "*"`
- replace `qmk-dotty-dict = "*"` with `dotty-dict = "*"` (#18117, also
  required for compatibility with `qmk` 1.1.1, where this replacement
  had already been performed)

Add build dependencies of various Python modules to `pyproject.toml`:

- `hatchling`, `hatch-vcs`, `hatch-fancy-pypi-readme` (required by
  `jsonschema` >= 4.11.0)
- `pytest` (a newer version is required to solve the dependency conflict
  with the `hatchling` module due to the upper bound on `pluggy`)
- `flit-core` (a more recent version is required to build `tomli`)
- `poetry-core` (required for `dotty-dict` >= 1.3.1, and the version
  from Nixpkgs does not build on Darwin due to NixOS/nix#4758)

Update `poetry.lock` to use the most recent versions of Python modules.

The complete list of Python module updates as listed in `poetry.lock`
(note that other modules might be present in the Python environment,
e.g., if they come from Nixpkgs):

- `atomicwrites`: none -> 1.4.1 (but this module is not actually used,
  because the corresponding dependency of `pytest` is win32-only)
- `attrs`: 21.4.0 -> 22.1.0
- `colorama`: 0.4.4 -> 0.4.5
- `coverage`: 6.4 -> none
- `dotty-dict`: none -> 1.3.1 (used instead of `qmk-dotty-dict`)
- `editables`: none -> 0.3
- `flake8`: 4.0.1 -> 5.0.4
- `flake8-polyfill`: 1.0.2 -> none
- `flit-core`: none -> 3.7.1
- `hatch-fancy-pypi-readme`: none -> 22.3.0
- `hatch-vcs`: none -> 0.2.0
- `hatchling`: none -> 1.8.0
- `hjson`: 3.0.2 -> 3.1.0
- `importlib-resources`: 5.7.1 -> 5.9.0
- `iniconfig`: none -> 1.1.1
- `jsonschema`: 4.5.1 -> 4.14.0
- `mccabe`: 0.6.1 -> 0.7.0
- `nose2`: 0.11.0 -> 0.12.0
- `packaging`: none -> 21.3
- `pathspec`: none -> 0.9.0
- `pep8-naming`: 0.12.1 -> 0.13.2
- `pillow`: 9.1.1 -> 9.2.0
- `pkgutil-resolve-name`: none -> 1.3.10
- `pluggy`: none -> 1.0.0
- `poetry-core`: none -> 1.0.8
- `py`: none -> 1.11.0
- `pycodestyle`: 2.8.0 -> 2.9.1
- `pyflakes`: 2.4.0 -> 2.5.0
- `pygments`: 2.12.0 -> 2.13.0
- `pyparsing`: none -> 3.0.9
- `pyserial`: none -> 3.5
- `pytest`: none -> 7.1.2
- `qmk`: 1.1.0 -> 1.1.1
- `qmk-dotty-dict`: 1.3.0.post1 -> none (replaced by `dotty-dict`)
- `setuptools-scm`: none -> 7.0.5
- `tomli`: none -> 2.0.1
- `typing-extensions`: none -> 4.3.0
- `zipp`: 3.8.0 -> 3.8.1
2022-08-23 02:59:33 +01:00
QMK Bot
d942c03be6 Merge remote-tracking branch 'origin/master' into develop 2022-08-22 23:06:18 +00:00
Jesse
624d92e2f5 Update Tap Dance Example 4 (#18138)
break statements are missing from the switch for both registering and unregistering key codes. Neither have a default: case either. The code as exists in the repository right now does not compile. It does with this changes.
2022-08-23 00:05:35 +01:00
QMK Bot
b1af9b4fe0 Merge remote-tracking branch 'origin/master' into develop 2022-08-22 09:04:48 +00:00
Ryan
68ad251667 Remove USB IDs and strings from fungo/rev1 (#18133) 2022-08-22 19:04:01 +10:00
Joel Challis
bbc3bc55f2 RESET -> QK_BOOT user keymaps (#17940) 2022-08-21 23:55:30 +01:00
QMK Bot
e36ae90a65 Merge remote-tracking branch 'origin/master' into develop 2022-08-21 22:09:30 +00:00
Ryan
b0eda7701a Move keyboard USB IDs and strings to data driven, pass 3 (#18111) 2022-08-21 23:08:50 +01:00
QMK Bot
51e4e91285 Merge remote-tracking branch 'origin/master' into develop 2022-08-21 19:37:50 +00:00
Paul Ewing
3c0806a489 Add pcewing Speedo v3 keymap (#18118)
* Add pcewing Speedo v3 keymap

* Add readme and code quality improvements
2022-08-21 20:37:18 +01:00
QMK Bot
1e84890a5b Merge remote-tracking branch 'origin/master' into develop 2022-08-21 19:04:26 +00:00
Mario Cadenas
93f0c1f32f [Keymap] Add new keymap to nasu (#18024) 2022-08-21 12:03:48 -07:00
Joel Challis
9b7965d3a9 Align CLI requirements (#18117) 2022-08-21 18:38:17 +01:00
QMK Bot
efd893be39 Merge remote-tracking branch 'origin/master' into develop 2022-08-21 00:18:07 +00:00
Louis Dalibard
7ea54a7837 [Keyboard] Add ai macropad (#17722)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Louis Dalibard <ontake@ontake.dev>
2022-08-20 17:17:02 -07:00
QMK Bot
f99bac052e Merge remote-tracking branch 'origin/master' into develop 2022-08-20 20:28:43 +00:00
Abigail
e2fbcc8099 added keymap for kprepublic/jj40:brdlf (#17961)
* added keymap for kprepublic/jj40:brdlf
2022-08-20 21:28:02 +01:00
QMK Bot
e3cf678569 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 20:21:44 +00:00
JX
706995c044 [Keyboard] Add yandrstudio/nz67v2 keyboard. (#17591)
* add yr nz67v2 by jiaxin96
2022-08-20 21:21:07 +01:00
QMK Bot
cb3c8f40d0 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 20:08:35 +00:00
QMK Bot
d93b5ef247 Format code according to conventions (#18119) 2022-08-20 21:07:57 +01:00
QMK Bot
aa7629f8e6 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 20:01:40 +00:00
bojiguard
5222cf7673 add fungo keyboard (#17513)
by bojiguard
2022-08-20 21:01:04 +01:00
QMK Bot
3609c24df4 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 20:00:24 +00:00
studiokestra
ce19a9cdc5 Add Nascent keyboard support. (#17824)
* Add nascent keyboard by studiokestra
2022-08-20 20:59:47 +01:00
QMK Bot
a580057422 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 18:46:12 +00:00
mechlovin
c2a46a6fa0 [Keyboard] Add Zed65 (#17917)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-20 11:45:38 -07:00
Drashna Jael're
8f6b019dcc Merge remote-tracking branch 'origin/master' into develop 2022-08-20 10:22:48 -07:00
Sergey Vlasov
7ee55b1754 Fix PID value for the Keyboardio Atreus 2 bootloader (#18116)
Copy the correct PID from `util/udev/50-qmk.rules`.
2022-08-20 15:59:17 +01:00
Joel Challis
d2accb48e7 RESET -> QK_BOOT keyboard readme (#18110) 2022-08-20 11:34:17 +01:00
Erovia
5e2ffe7d8f CLI: Teaching the CLI to flash binaries (#16584)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2022-08-20 15:39:19 +10:00
QMK Bot
3bf36e8b04 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 04:17:48 +00:00
Joe Scotto
e7107691ab [Keymap] Add joe_scotto keymap for CRKBD (#18103) 2022-08-19 21:17:09 -07:00
QMK Bot
68079cba61 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 03:52:33 +00:00
Drashna Jaelre
f08e08cec2 [Keyboard] Fix compilation issues for keycapsss kimiko (#18112) 2022-08-20 13:51:57 +10:00
QMK Bot
a69303bb78 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 02:59:05 +00:00
Davide Masserut
c9120ea8e9 [Keymap] Add Miryoku keymap for Hillside family (#18087) 2022-08-19 19:58:24 -07:00
QMK Bot
880ea06760 Merge remote-tracking branch 'origin/master' into develop 2022-08-20 01:55:33 +00:00
AliceH66
85831fc188 [Keyboard] Add aliceh66 pianoforte (#18081)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-19 18:55:01 -07:00
fauxpark
61689ae609 Merge remote-tracking branch 'upstream/master' into develop 2022-08-20 10:55:40 +10:00
Ryan
201f1a8f47 Move keyboard USB IDs and strings to data driven, pass 2: S-Y (#18093) 2022-08-20 01:48:38 +01:00
Ryan
f4dcce7e59 Move keyboard USB IDs and strings to data driven, pass 2: M-O (#18090) 2022-08-20 01:45:28 +01:00
Ryan
201a914beb Move keyboard USB IDs and strings to data driven, pass 2: P-R (#18091) 2022-08-20 01:42:49 +01:00
Ryan
835c971f78 Move keyboard USB IDs and strings to data driven, pass 2: J-L (#18080) 2022-08-20 10:39:35 +10:00
QMK Bot
eceed6c50b Merge remote-tracking branch 'origin/master' into develop 2022-08-20 00:32:18 +00:00
Ryan
48792b030b Move keyboard USB IDs and strings to data driven, pass 2: handwired (#18079) 2022-08-20 10:31:48 +10:00
QMK Bot
f1ac92ac63 Merge remote-tracking branch 'origin/master' into develop 2022-08-19 23:50:09 +00:00
Drashna Jaelre
39f0fb7bea [Keyboard] Update Work Louder keyboards (#18109) 2022-08-19 16:49:37 -07:00
QMK Bot
4a8bed844d Merge remote-tracking branch 'origin/master' into develop 2022-08-19 22:15:34 +00:00
Joel Challis
f1786cbd7b Fix duplicate keys in info.json files (#18107) 2022-08-19 23:14:38 +01:00
QMK Bot
c0c875d675 Merge remote-tracking branch 'origin/master' into develop 2022-08-19 19:48:31 +00:00
yiancar
8e8c0e2d57 Cyberstar Custom (#18076)
* Create Cyberstar Custom

Co-authored-by: yiancar <yiancar@gmail.com>
2022-08-19 20:47:45 +01:00
Nick Brassel
1eac095c0c Use the correct bootloader definition. (#18102) 2022-08-19 05:20:44 +01:00
QMK Bot
5ee482b110 Merge remote-tracking branch 'origin/master' into develop 2022-08-19 01:19:23 +00:00
Simon Hengel
e6a1afb8f1 [Docs] Fix typo in data driven config docs (#18095) 2022-08-18 18:18:51 -07:00
QMK Bot
2ed2c88a08 Merge remote-tracking branch 'origin/master' into develop 2022-08-19 01:17:50 +00:00
~ aka goonf!sh
286dd6abe6 [Docs] Update list of "ARM-based ProMicro replacements" (#18083) 2022-08-18 18:17:20 -07:00
Joel Challis
3c745caf61 Remove legacy bootmagic cli parsing (#18099) 2022-08-19 01:56:48 +01:00
Joel Challis
9550cc464c Fix new-keyboard default for RP2040 bootloader (#18100) 2022-08-19 01:48:33 +01:00
Joel Challis
0fcebdcdf1 Swap F4x1 default board files away from blackpill (#17522) 2022-08-19 00:52:50 +01:00
HorrorTroll
227e552f5c Add support keyboard Feker IK75 (#17611) 2022-08-18 01:23:34 +01:00
David Hoelscher
a645301c82 Add Bonsai C4 converter (#17711) 2022-08-18 01:01:54 +01:00
QMK Bot
29f47f4cf3 Merge remote-tracking branch 'origin/master' into develop 2022-08-17 22:51:34 +00:00
jack
9607b46756 Fixup mokey/ibis80 keymaps (#18088) 2022-08-17 23:51:04 +01:00
QMK Bot
f9abecda3f Merge remote-tracking branch 'origin/master' into develop 2022-08-17 14:11:59 +00:00
Juno Nguyen
45845ea07f Replace CG_SWAP in junonum (#18086)
Co-authored-by: Minh-tri Nguyen <mtngx@PigeonMac.local>
2022-08-17 15:11:00 +01:00
QMK Bot
47e98e3a68 Merge remote-tracking branch 'origin/master' into develop 2022-08-17 07:28:11 +00:00
CoffeeIsLife
0df97fc968 [Keymap] Add personal keymap for kprepublic BM40HSRGB (#18021)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Fae <faenkhauser@gmail.com>
2022-08-17 00:27:31 -07:00
ZhaoYou
6b78d07e64 [Keyboard] add 'soda/cherish' (#18057)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-17 00:26:35 -07:00
QMK Bot
39337373f5 Merge remote-tracking branch 'origin/master' into develop 2022-08-17 02:38:02 +00:00
Runheme
e5f1d8859e [Keyboard] Add ibis80 (#18051)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-16 19:37:57 -07:00
QMK Bot
2ade237e77 Merge remote-tracking branch 'origin/master' into develop 2022-08-17 02:37:40 +00:00
Toshihiro Suzuki
5a1a0e71de [Keymap] toshi0383 keymaps update (#18073) 2022-08-16 19:37:29 -07:00
QMK Bot
cfab3e2d6e Merge remote-tracking branch 'origin/master' into develop 2022-08-17 02:37:10 +00:00
Albert Y
a1f0208797 [Docs] Use layer number as example for COMBO_ONLY_FROM_LAYER (#18072)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-16 19:37:06 -07:00
jotix
8230b4c49d [Keymap] jotix's community/ortho4x12 change (#18069) 2022-08-16 19:36:30 -07:00
QMK Bot
77150d00ac Merge remote-tracking branch 'origin/master' into develop 2022-08-16 18:42:23 +00:00
coliss86
837a57b3c5 Adjust the hierarchy of chapter Deferred Execution (#18075) 2022-08-16 11:41:31 -07:00
QMK Bot
7014e1efa3 Merge remote-tracking branch 'origin/master' into develop 2022-08-16 17:23:31 +00:00
yiancar
c834608a74 Fix WS2812 order for aurora65 and loki65 (#18074) 2022-08-16 18:22:47 +01:00
QMK Bot
c5dc4b4d1d Merge remote-tracking branch 'origin/master' into develop 2022-08-16 17:02:38 +00:00
Tom Barnes
2f4ad40561 [Docs] update pr_checklist.md with info about data-driven (#18068)
* update pr_checklist with info about data-driven

Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2022-08-16 18:01:56 +01:00
QMK Bot
9f0925fb18 Merge remote-tracking branch 'origin/master' into develop 2022-08-16 14:29:11 +00:00
Joel Challis
164faf0a5c Use correct board file in xelus/valor_frl_tkl/rev2_0 (#18071) 2022-08-16 15:28:22 +01:00
QMK Bot
904df296b0 Merge remote-tracking branch 'origin/master' into develop 2022-08-15 17:55:58 +00:00
Joel Challis
e44b6242b7 Migrate more F4x1 board files (#18054) 2022-08-15 18:55:21 +01:00
precondition
5021cf58ad Fix DV_SCLN and DV_COLN in keymap_spanish_dvorak.h (#18043) 2022-08-15 18:41:05 +01:00
Stefan Kerkmann
f74ed5fc53 Fix GD32VF103 WS2812 PWM driver (#18067)
...by adding the missing STM32 DMA defines.
2022-08-15 18:00:22 +01:00
Stefan Kerkmann
8ce946b5c8 [Bug] Add key event check to is_tap_record and remove is_tap_key (#18063) 2022-08-15 16:40:51 +02:00
jack
5e6175a553 Fixup gmmk/pro/rev2 USB Data (#18056) 2022-08-15 23:21:15 +10:00
QMK Bot
1ccfed483d Merge remote-tracking branch 'origin/master' into develop 2022-08-15 09:15:56 +00:00
Ryan
b297a347bb ADB to USB converter: split into rev1 and rev2 (#18052) 2022-08-15 10:15:22 +01:00
fauxpark
c202602938 Merge remote-tracking branch 'upstream/master' into develop 2022-08-15 17:54:07 +10:00
precondition
8e9ee29fe3 Remove duplicate COMBINING HORN in keymap_us_extended.h (#18045) 2022-08-14 22:25:37 -07:00
Joel Challis
ed3b4bb606 Fix missing development_board schema entry (#18050) 2022-08-14 22:25:16 -07:00
Ryan
51d5aad25b Move keyboard USB IDs and strings to data driven, pass 2: D-E (#17956) 2022-08-15 13:30:12 +10:00
Ryan
1027aed83a Move keyboard USB IDs and strings to data driven, pass 2: F-I (#17958) 2022-08-15 02:53:19 +01:00
QMK Bot
5334614e8a Merge remote-tracking branch 'origin/master' into develop 2022-08-14 23:55:05 +00:00
PeterFalken
4c91e5bef8 Allow disabling RGB_MATRIX_ANIMATIONS system76 keyboards (#17478) 2022-08-14 19:54:25 -04:00
QMK Bot
630de240b4 Merge remote-tracking branch 'origin/master' into develop 2022-08-14 23:26:34 +00:00
Joel Challis
93fb69fbda Migrate more F4x1 board files (#18046) 2022-08-15 00:25:40 +01:00
Joel Challis
463fb72d29 Partially revert some WB32 specific changes (#18038) 2022-08-14 20:48:44 +01:00
QMK Bot
74b4bcb607 Merge remote-tracking branch 'origin/master' into develop 2022-08-14 19:43:25 +00:00
Alberto
3d3e463598 Feat/port ft mars 65 (#17994)
* by wonderbeel
2022-08-14 20:42:58 +01:00
QMK Bot
e6a522417a Merge remote-tracking branch 'origin/master' into develop 2022-08-14 19:26:44 +00:00
Cyn
5f74ae5b63 Improve Drop Alt compatibility with VIA (#18041)
by slycedix
2022-08-14 20:26:06 +01:00
Pascal Getreuer
95c43a2759 Fix Caps Word to treat mod-taps more consistently. (#17463)
* Fix Caps Word to treat mod-taps more consistently.

Previously, holding any mod-tap key while Caps Word is active stops Caps
Word, and this happens regardless of `caps_word_press_user()`. Yet for
regular mod keys, AltGr (KC_RALT) is ignored, Shift keys are passed to
`caps_word_press_user()` to determine whether to continue, and
similarly, a key `RSFT(KC_RALT)` representing Right Shift + Alt is
passed to `caps_word_press_user()` to determine whether to continue.

This commit makes held mod-tap keys consistent with regular mod keys:

* Holding a `RALT_T` mod-tap is ignored.
* When holding a shift mod-tap key, `KC_LSFT` or `KC_RSFT` is passed to
  `caps_word_press_user()` to determine whether to continue.
* When holding a Right Shift + Alt (`RSA_T`) mod-tap, `RSFT(KC_RALT)` is
  passed to `caps_word_press_user()`.

Particularly, with this fix a user may choose to continue Caps Word when
a shift mod-tap key is held by adding `KC_LSFT` and `KC_RSFT` cases in
`caps_word_press_user()`. For instance as

```
bool caps_word_press_user(uint16_t keycode) {
  switch (keycode) {
    // Keycodes that continue Caps Word, with shift applied.
    case KC_A ... KC_Z:
    case KC_MINS:
      add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to the next key.
      return true;

    // Keycodes that continue Caps Word, without shifting.
    case KC_1 ... KC_0:
    case KC_BSPC:
    case KC_DEL:
    case KC_UNDS:
    case KC_LSFT:  // <<< Added here.
    case KC_RSFT:
      return true;

    default:
      return false;  // Deactivate Caps Word.
  }
}
```

* Fix Caps Word to treat mod-taps more consistently.

Previously, holding any mod-tap key while Caps Word is active stops Caps
Word, and this happens regardless of `caps_word_press_user()`. Yet for
regular mod keys, AltGr (KC_RALT) is ignored, Shift keys are passed to
`caps_word_press_user()` to determine whether to continue, and
similarly, a key `RSFT(KC_RALT)` representing Right Shift + Alt is
passed to `caps_word_press_user()` to determine whether to continue.

This commit makes held mod-tap keys consistent with regular mod keys:

* Holding a `RALT_T` mod-tap is ignored.
* When holding a shift mod-tap key, `KC_LSFT` or `KC_RSFT` is passed to
  `caps_word_press_user()` to determine whether to continue.
* When holding a Right Shift + Alt (`RSA_T`) mod-tap, `RSFT(KC_RALT)` is
  passed to `caps_word_press_user()`.

Particularly, with this fix a user may choose to continue Caps Word when
a shift mod-tap key is held by adding `KC_LSFT` and `KC_RSFT` cases in
`caps_word_press_user()`. For instance as

```
bool caps_word_press_user(uint16_t keycode) {
  switch (keycode) {
    // Keycodes that continue Caps Word, with shift applied.
    case KC_A ... KC_Z:
    case KC_MINS:
      add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to the next key.
      return true;

    // Keycodes that continue Caps Word, without shifting.
    case KC_1 ... KC_0:
    case KC_BSPC:
    case KC_DEL:
    case KC_UNDS:
    case KC_LSFT:  // <<< Added here.
    case KC_RSFT:
      return true;

    default:
      return false;  // Deactivate Caps Word.
  }
}
```

* Update quantum/process_keycode/process_caps_word.c

Co-authored-by: Joel Challis <git@zvecr.com>
2022-08-14 20:25:32 +01:00
Chewxy
6fc7c03e95 Added emacs as an "operating system" for input mode. (#16949) 2022-08-14 20:24:52 +01:00
Drashna Jaelre
4da3482872 Fix Emulated EEPROM issue with F466 (#18039) 2022-08-14 17:18:59 +01:00
precondition
0a6327d20c Replace ; by : in the shifted symbols ASCII art of keymap_norman (#18029)
Thanks!
2022-08-14 12:18:42 -04:00
Drashna Jaelre
9f31fcace3 [Keyboard] Fix compilation issues for Boardsource Microdox (#18037) 2022-08-14 17:03:40 +01:00
Mega Mind
fce99f3875 [Controller] Added board config for custom controller STeMCell (#16287)
Co-authored-by: Mariappan Ramasamy <947300+Mariappan@users.noreply.github.com>
Co-authored-by: Mariappan Ramasamy <maari@basis-ai.com>
Co-authored-by: Sadek Baroudi <sadekbaroudi@gmail.com>
2022-08-14 21:27:26 +10:00
Joel Challis
ba04ecfabd Align TO() max layers with other keycodes (#17989) 2022-08-14 21:25:46 +10:00
Drashna Jael're
ac31e42974 Merge remote-tracking branch 'origin/master' into develop 2022-08-14 01:54:23 -07:00
Xelus22
4195eb8fe1 [Keyboard] Add Valor FRL TKL rev2.0 and 2.1 (#17992)
* add valor frl tkl rev2 by xelus22
2022-08-14 08:17:11 +01:00
Joy Lee
e948fa6f6e Added support for gmmk pro rev2 keyboard. (#17655)
Co-authored-by: Joy <chang.li@westberrytech.com>
2022-08-14 14:00:12 +10:00
Ryan
3a7dbc8981 Move keyboard USB IDs and strings to data driven, pass 2: B-C (#17945) 2022-08-14 12:16:16 +10:00
yiancar
dfc92d8f7b Fix buffer size for WS2812 PWM driver (#17046)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: yiancar <yiancar@gmail.com>
2022-08-13 18:36:34 -07:00
Joy Lee
c02d7ae86f Added ws2812_pwm support for WB32 MCU. (#17142)
Co-authored-by: Joy <chang.li@westberrytech.com>
2022-08-13 18:21:46 -07:00
Joy Lee
6b1c7d20aa Added ws2812_spi support for WB32 MCU (#17143)
Co-authored-by: Joy <chang.li@westberrytech.com>
2022-08-13 18:09:57 -07:00
QMK Bot
5c805e4cc5 Merge remote-tracking branch 'origin/master' into develop 2022-08-14 01:09:31 +00:00
Gary Kong
28b05d15ff [Keyboard] add bajjak keyboard (#12377)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: peepeetee <43021794+peepeetee@users.noreply.github.com>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2022-08-13 18:08:46 -07:00
JJ48
4eda139b83 Add Gentleman 65 SE Solderd PCB support (#16992) 2022-08-14 01:55:03 +01:00
QMK Bot
2d40713567 Merge remote-tracking branch 'origin/master' into develop 2022-08-14 00:52:21 +00:00
Nick Brassel
86261bfd8e Add texts for Discord Events to be created post-merge. (#17944) 2022-08-13 17:51:45 -07:00
precondition
2c3b447641 Use ANSI ASCII art and fix comments for LT_COLN and LT_UNDS in keymap_lithuanian_qwerty.h (#18028) 2022-08-13 17:50:32 -07:00
QMK Bot
50ff52639f Merge remote-tracking branch 'origin/master' into develop 2022-08-14 00:47:42 +00:00
Ryan
3079691391 Move keyboard USB IDs and strings to data driven, pass 2: 0-9, A (#17941) 2022-08-13 17:47:05 -07:00
QMK Bot
b44c3f92ae Merge remote-tracking branch 'origin/master' into develop 2022-08-14 00:47:05 +00:00
Marko Skakun
0f1bb982e9 [Keyboard] Added different wiring of dactyl (#17997) 2022-08-13 17:46:35 -07:00
QMK Bot
4faf0ccaec Merge remote-tracking branch 'origin/master' into develop 2022-08-14 00:36:47 +00:00
Less/Rikki
ca2d05f5c6 [Keyboard] jacky_studio/piggy60 (#18012) 2022-08-13 17:36:11 -07:00
QMK Bot
2363a3bc42 Merge remote-tracking branch 'origin/master' into develop 2022-08-14 00:33:31 +00:00
Tom Barnes
0d3e07a3db [Docs] Suggest imgur images are edited to set size (#18031) 2022-08-13 17:32:30 -07:00
Takeshi ISHII
a83afb3fcd Improve avr wait_us() (#16879) 2022-08-14 00:04:03 +01:00
Joshua Diamond
2f87abd4ef Revert "[Core] Re-order user space rules inclusion (#17459)" (#18032) 2022-08-14 07:13:15 +10:00
QMK Bot
b1c7df9a68 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 20:26:43 +00:00
Jesus Climent
cbcb4f2ec0 [Keyboard] Added Atreyu keyboard. (#17698)
* Add Atreyu keyboard.

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-13 21:26:05 +01:00
QMK Bot
8fd7825007 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 20:16:08 +00:00
mechlovin
1eecdb502d [Keyboard] Add Foundation to QMK (#17573)
* add mechlovin foundation keyboard

Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-13 21:15:35 +01:00
QMK Bot
7dca40f5af Merge remote-tracking branch 'origin/master' into develop 2022-08-13 20:13:03 +00:00
p4yne
40676d058e [Keymap] adding new user (p4yne) layout with complex lighting feature… (#16085)
* [Keymap] adding new user (p4yne) layout with complex lighting features (per layer, per key, per type) and usefull layers DE/US, etc.

Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-13 21:12:31 +01:00
QMK Bot
bcd021263e Merge remote-tracking branch 'origin/master' into develop 2022-08-13 19:48:14 +00:00
emlah
a49bdd2659 add BAMFK-4 (#17985)
* add BAMFK-4
2022-08-13 20:47:39 +01:00
QMK Bot
97b610e166 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 19:45:00 +00:00
3araht
e145c7ad3f Bandominedoni version output feature and a new keymap added (#17947)
* SPLIT_USB_DETECT added.

* lednotg keymap added.

* lednotg missing modification fixed.

* VERSION is available.

* USER00 is used instead of SAFE_RANGE in via/keymap.c
2022-08-13 20:44:29 +01:00
QMK Bot
f417ffff5a Merge remote-tracking branch 'origin/master' into develop 2022-08-13 19:39:19 +00:00
Shem Sedrick
95782691d4 Dactyl Manuform 4x5 with 5 thumb cluster (#17671)
* Working on new dactyl

* Preliminary build and keymap in place for 4x5_5 dactyl manuform

* Removing first attempt to use 4x5

* Updating to match c style guide

* Fixing issues after merge, deletion of dactyl_manuform.h

* Spliting out custom keymap

* Adding license headers

* Fixing EE_HANDS detection on Pro-Micro

The pro-micro was not working when I plugged into the elite-c on the
right hand side of my keyboard. Adding the SPLIT_USB_DIRECT definition
fixed the issue.

* Apply suggestions from code review

Adding Drashna's delete comments

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Removed config.h for keymaps and tweaked keymap

Per Drashna's pr review, I have removed the config.h files for the
keymaps.
Also tweaked my keymap to switch backspace and enter. Added tapping
toggle for RAISE.

* Further tweaking ssedrick keymap for dactyl_manuform 4x5_5

As with most new keyboards, they take some getting used to.
I've rearranged my thumb cluster to hopfully a more long
term solution.

* Adding missing KC_BSLS to ssedrick keymap for 4x5_5

Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-13 20:38:31 +01:00
QMK Bot
e95ba0d651 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 19:10:39 +00:00
mmccoyd
aee738c61b [Keyboard] Add Hillside 46 (#17968)
* 46: Copy from 52 and file rename

* 46: File internals refer to 46, not 52

* 46: Board remove row

* 46: Keymap: Lshift becomes ctrl, Rshift a symbol

- ESC and CAPs on upper thumbs
- AltGr and App on upper thumbs
- Page up/down on upper thumbs
- F11, F12 and mods for them on adjust

* 46: Readme update for json script, tweaks

* 46: Board fix LED count

* 46: Keymap: Arrows right, symmetric layer keys

* 46: Readme: Image link with and w/o outer pinkie

* 46: Keymap: link fixed image of nav layer

* 46: Keymap: fix reaching adj layer

Co-authored-by: mmccoyd <mmccoyd@cs.berkley.edu>
2022-08-13 20:10:01 +01:00
QMK Bot
826ab5412f Merge remote-tracking branch 'origin/master' into develop 2022-08-13 18:02:19 +00:00
alaviss
b1fe7621eb RFC: add a simple implementation of the ploopy optical encoder (#17912) 2022-08-13 11:01:44 -07:00
precondition
96731ba88e Fix LV_CCAR and LV_NCED (#18025) 2022-08-13 10:24:15 -07:00
QMK Bot
a03849c92c Merge remote-tracking branch 'origin/master' into develop 2022-08-13 16:24:37 +00:00
gourdo1
4c6ce12d2a Updated gourdo1 GMMK Pro keymaps (#17873)
* Fixed Left Shift tapdance in general and for gaming mode. (#12)

* update ISO readme
* left shift fixed in general, including for gaming mode

* fixed toggle menu rendering on ISO layouts

* updated readme's and cosmetics

* update readme's

* update readme's again

* readme cosmetics

* consolidate readme's

* more readme cosmetics

* clarification for bootloader mode on ISO

* Autocorrect added with 400 word English dictionary (#13)

* autocorrect added with 400 word dictionary

* update readme's for autocorrect

* Add FN-B as shortcut to bootloader

* Update .gitignore

Co-authored-by: Joel Challis <git@zvecr.com>

* RGB changes to system numlock and ISO extended alphas

- hide system numlock off indicator (primarily for Mac users) by moving it to numpad and FN layers instead
- give users with extended alpha ISO languages a config option to add RGB highlights for extras alphas on capslock

* readme updates

* Fixed [FN]B and [FN]N shortcuts not working on numpad layer

Co-authored-by: Joel Challis <git@zvecr.com>
2022-08-13 17:24:07 +01:00
QMK Bot
149db3c6a8 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 16:19:58 +00:00
mmccoyd
0c0d01966f [Keyboard] Add Hillside 52 (#17374)
* 52 Keymap.json: Set for Hillside 52

- Change script rows

* 52 Keymap.c: mirror .json

CAPSWORD, QK_BOOT, readme cleanup, EE_RST

* 52 Keymap.json: Initial files copy from 56

* 52 Keymap.json nav/edit lay, thumb shift, syms

- Del in backspace spot on sym layer
- Thumb shift OSM instead of extra space
- Nav/edit on num/fn: arrows cut copy paste undo redo, page up/down
- Fn keys bottom row to allow nav edit keys
- App and AltGr on lower row, on their layer
- Braces on index, so more common -= on middle ring.
- Adjust has Ctrl/GUI swap
- EE_RST, CAPSWORD, QK_BOOT, SPLIT_DETECT

* 52 Family: readme image and folder link

* 52 Board: initial copy from 56

* 52 Keymap via

* 52 Board: remove keys, cant columns, better ids

- .json: vid: MM, pid: H52

* 52 Keymap.c: initial.c copy from 48

* QK_BOOT EE_CLR, not ANY(), as config.qmk supports

- CAPSWRD instead of ANY, though config.qmk still converts to ANY()

* Cleanup readme

* 52 Keymap: Remove redundant key, cleanup script

* 52 Keymap: Fix template

* 52 Readme: Link lower res image better for readme

Co-authored-by: Drashna Jaelre <drashna@live.com>

* 52 Keymap: Move pretty-print script to GitHub wiki

* 52 Keymap: Link to 1024 res image thumbnails

* 52 Keymap: fix whitespace before image link

* Family: Fix image link to 1024 thumb

Co-authored-by: Drashna Jaelre <drashna@live.com>

* 52: Keymap: Caps word on a layer home row

* 52: Keymap: Arrows on right. Symmetric layer keys.

- Nav:
  - Arrows on right so up/down more intuitive. Page up/down on ends
  - Cut on home row, as more common

- Sym:
  - Layer mods on activate hand, extras symbols on left
  - Common digits on lower row

- Base:
  - Layer keys symmetric, on most extended, not resting, thumb
  - Mute on util key for easy use

- Swap layers 3 and 4 to match swapped thumbs

Co-authored-by: mmccoyd <mmccoyd@cs.berkley.edu>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-13 17:19:21 +01:00
QMK Bot
39d2f61d51 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 16:14:39 +00:00
kopibeng
648f3eb71f Add support for XT60_SINGA (#17752)
* Added support for Christine, XT65E and Adelais

* Add support for MNK88

* Add support for XT8x

* Renamed XT65E to Typ65

* Revert "Renamed XT65E to Typ65"

This reverts commit b4fbc853d23003b9b4b5b67d49e098ea17d85a98.

* Revert "Revert "Renamed XT65E to Typ65""

This reverts commit 09baee94eba56dab0a0a96b99ce3758b0c5aa8a9.

* File reorganization

* Add support for MNK88

* Update readme.md

* Update keyboards/kopibeng/mnk88/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/kopibeng/mnk88/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Fix imgur link

* Update keyboards/kopibeng/mnk88/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/kopibeng/mnk88/info.json

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update info.json

Previous suggested change was breaking lint check, reverting back to the original.

* Update keyboards/kopibeng/mnk88/info.json

Co-authored-by: Ryan <fauxpark@gmail.com>

* Fix info.json

* Added XT60_SINGA

* Update config.h

* Update readme.md

Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-13 17:13:49 +01:00
Vino Rodrigues
52dc16b758 [Keyboard] IDOBAO ID80v1 folder rename (#17265)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-14 00:00:42 +10:00
Albert Y
69fa2d8378 [Core] Re-order user space rules inclusion (#17459) 2022-08-13 23:57:07 +10:00
Pascal Getreuer
6a0d90f81a Fix Caps Word capitalization when used with Combos + Auto Shift. (#17549) 2022-08-13 23:48:51 +10:00
Jay Greco
4eeafbebab Add Bit-C PRO converter (#17827) 2022-08-13 14:48:30 +01:00
Joel Challis
fc7e9efd21 Improve importer workflow (#17707) 2022-08-13 14:39:56 +01:00
lokher
a02aff9c77 Add led matrix support for CKLED2001 (#17643) 2022-08-13 14:39:06 +01:00
QMK Bot
ee664e0960 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 13:24:07 +00:00
Nick Brassel
dccb8ff7d6 Remove old submodules if present (#17930) 2022-08-13 23:23:32 +10:00
QMK Bot
853d47b4cc Merge remote-tracking branch 'origin/master' into develop 2022-08-13 04:49:33 +00:00
Drashna Jaelre
b881778f53 [Keyboard] Remove unused keycodes from Aurora65 keymap (#18022) 2022-08-12 21:48:33 -07:00
Drashna Jaelre
3d24845016 [Bug] Fix wrong varaible in encoder block (#18020) 2022-08-12 19:55:59 -07:00
QMK Bot
31e78aafbd Merge remote-tracking branch 'origin/master' into develop 2022-08-13 02:47:02 +00:00
arnstadm
aee48b8aab [Keyboard] add ogrn (#17983)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-12 19:46:16 -07:00
QMK Bot
60176a3a28 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 02:38:32 +00:00
rockybulwinkle
fb150e08f1 [Keyboard] Increase kinesis/kint41 unselect delay (#18015)
* [Keyboard] Increase kinesis/kint41 unselect delay

Fixes #18014

* Update kint41.c

Use correct si-abbreviation for micro in comment.
2022-08-13 03:38:01 +01:00
QMK Bot
7a95926f46 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 02:30:55 +00:00
arnstadm
5ed7e1acf1 [Keyboard] Add akb-ogr (#17982)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-12 19:30:10 -07:00
precondition
4ff39b5652 KR_DQUO S(KR_COLN) → KR_DQUO S(KR_QUOT) (#18011) 2022-08-12 19:20:58 -07:00
precondition
e3415d6b97 define CZ_PERC S(CZ_PLUS) → define CZ_PERC S(CZ_EQL) (#18008) 2022-08-12 19:20:35 -07:00
precondition
20f0f40220 Remove invisible variation selector-15 from keymap_japanese.h (#18007) 2022-08-12 19:16:50 -07:00
precondition
b4fbb340c5 Use LT_ZCAR in place of LT_PLUS for modded kc definitions (#18000) 2022-08-12 19:13:43 -07:00
precondition
db4c4b1f78 Fix Bépo's BP_NNBS (narrow non-breaking space) (#17999)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-12 19:13:22 -07:00
QMK Bot
e0b4fa512e Merge remote-tracking branch 'origin/master' into develop 2022-08-13 02:04:58 +00:00
Ryan
536e39a5d9 Fix viendi8l compilation (#18017) 2022-08-12 19:04:18 -07:00
Joy Lee
19ce1418ba Added implementation of WB32 MCU wear_leveling_efl. (#17579) 2022-08-13 02:14:33 +01:00
Drashna Jaelre
aed82bc6a0 Move Encoder+Encoder Map from generic features (#18018) 2022-08-12 18:04:02 -07:00
QMK Bot
06c7614a71 Merge remote-tracking branch 'origin/master' into develop 2022-08-13 00:45:05 +00:00
Drashna Jaelre
ea2ec5835b [Keyboard] Fix compilation issues for Mechlovin Adelais (#18019) 2022-08-13 01:44:33 +01:00
QMK Bot
06391314cd Merge remote-tracking branch 'origin/master' into develop 2022-08-13 00:27:58 +00:00
DUILCHOI
a1fe9fe3b3 [Keymap] update fave104 keymap (#18004) 2022-08-12 17:27:53 -07:00
Albert Y
70c6b183df [Docs] Refactor code examples (#18003) 2022-08-12 17:27:24 -07:00
Drashna Jaelre
ccdba43e59 Create generic Pointing Device Pin defines (#17776) 2022-08-12 16:22:34 -07:00
QMK Bot
83f6aedd93 Merge remote-tracking branch 'origin/master' into develop 2022-08-12 23:03:46 +00:00
precondition
1a4a278251 Put non-US ISO keys in their expected spots in sagittarius' default keymaps (#18005) 2022-08-13 09:03:14 +10:00
Nick Brassel
8133f40c26 Update to latest ChibiOS-Contrib. (#18016) 2022-08-13 08:54:32 +10:00
QMK Bot
c565b415f7 Merge remote-tracking branch 'origin/master' into develop 2022-08-12 18:51:40 +00:00
QMK Bot
90e2a5100b Format code according to conventions (#18009) 2022-08-12 11:50:58 -07:00
QMK Bot
92d78a0198 Merge remote-tracking branch 'origin/master' into develop 2022-08-12 18:29:58 +00:00
Vertex-kb
cded26b199 [Keyboard] Add arc60 (#17976)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-12 11:28:53 -07:00
QMK Bot
15422b3b26 Merge remote-tracking branch 'origin/master' into develop 2022-08-12 02:04:13 +00:00
Joel Challis
7e7387c0d1 Remove legacy keycode use from command (#18002) 2022-08-12 03:03:36 +01:00
Albert Y
cde9dd8b90 Refactor Pixel Fractal effect (#17602)
* Refactor effect with smaller array

* Add RGB_MATRIX_USE_LIMITS call

* Remove spaces

Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-11 22:41:42 +01:00
Sergey Vlasov
9e44362179 Add minimal STM32F103C6 support (#17853)
Unfortunately, the crippled versions of “Bluepill” boards with
STM32F103C6xx chips instead of STM32F103C8xx are now sold all over the
place, sometimes advertised in a confusing way to make the difference
not noticeable until too late.  Add minimal support for these MCUs in
the common “Bluepill with stm32duino” configuration, so that it could be
possible to make something useful from those boards (although fitting
QMK into the available 24 KiB of flash may be rather hard).

(In fact, I'm not sure whether the “STM32” part of the chip name is
actually correct for those boards of uncertain origin, so the onekey
board name is `bluepill_f103c6`; another reason for that name is to
match the existing `blackpill_f401` and `blackpill_f411`.)

The EEPROM emulation support is not included on purpose, because
enabling it without having a working firmware size check would be
irresponsible with such flash size (the chance that someone would build
a firmware where the EEPROM backing store ends up overlapping some
firmware code is really high).  Other than that, enabling the EEPROM
emulation code is mostly trivial (the `wear_leveling` driver with the
`embedded_flash` backing store even works without any custom
configuration, although its code is significantly larger than the
`vendor` driver, which may also be important for such flash size).
2022-08-11 22:37:41 +01:00
QMK Bot
8c4269f98e Merge remote-tracking branch 'origin/master' into develop 2022-08-11 21:04:46 +00:00
Danny
fab6c8a028 [Keyboard] Add Iris Rev. 7 (#17967)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-11 14:04:00 -07:00
Joshua Diamond
272f224dc6 Add cursor layer to DMQ Spin (#17996) 2022-08-11 13:28:48 -04:00
QMK Bot
ba370a54cd Merge remote-tracking branch 'origin/master' into develop 2022-08-11 16:09:38 +00:00
mincedshon
55f5406ac7 update ecila layout (#17975)
-update layout
2022-08-11 17:08:57 +01:00
QMK Bot
9981aaaae8 Merge remote-tracking branch 'origin/master' into develop 2022-08-11 05:06:33 +00:00
QMK Bot
a54ccb4ced Format code according to conventions (#17990) 2022-08-10 22:05:59 -07:00
QMK Bot
9d10a19fa8 Merge remote-tracking branch 'origin/master' into develop 2022-08-11 05:00:10 +00:00
DUILCHOI
0aeb9da030 [Keymap] update fave104 keymap (#17988) 2022-08-10 21:59:48 -07:00
Adam Applegate
a6fad5cc87 [Keymap] Added personal keymap for keebio/iris/rev6 (#17971) 2022-08-10 21:59:21 -07:00
Ivan Gromov
5dd944d450 [Keyboard] Add Aperture keyboard (#17980) 2022-08-10 21:59:05 -07:00
QMK Bot
f3acbf60fc Merge remote-tracking branch 'origin/master' into develop 2022-08-11 04:43:11 +00:00
Less/Rikki
34f0c1ac1b [Keyboard] fix: unicorne info.json LAYOUT (#17981) 2022-08-10 21:42:34 -07:00
QMK Bot
91be4740f2 Merge remote-tracking branch 'origin/master' into develop 2022-08-11 02:21:46 +00:00
James Young
380465e51c Acheron Athena Layout Macro Refactor and Additions (#17973) 2022-08-10 19:21:06 -07:00
QMK Bot
1882cdbf7b Merge remote-tracking branch 'origin/master' into develop 2022-08-11 01:48:48 +00:00
James Young
9ccbdad816 KBDfans KBD67 rev2: rename LAYOUT_65_ansi_split_bs_2_right_mods macro (#17972) 2022-08-10 18:48:12 -07:00
QMK Bot
e4b55a423a Merge remote-tracking branch 'origin/master' into develop 2022-08-11 01:45:33 +00:00
Álvaro A. Volpato
9898d6f4b0 [Keyboard] Add Viendi8L (#17943)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-10 18:44:59 -07:00
QMK Bot
ff59ae9783 Merge remote-tracking branch 'origin/master' into develop 2022-08-11 01:44:31 +00:00
Álvaro A. Volpato
90c4350af7 [Keyboard] Initial FM-S and FM-H support (#17765)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-10 18:43:52 -07:00
QMK Bot
b7b842da55 Merge remote-tracking branch 'origin/master' into develop 2022-08-11 01:39:09 +00:00
3araht
1038ade342 [Keyboard] add chromatonemini keyboard (#13516) 2022-08-10 18:38:32 -07:00
QMK Bot
90a290ea62 Merge remote-tracking branch 'origin/master' into develop 2022-08-11 01:34:34 +00:00
James Young
c230d0658e MacroCat Refactor (#17969) 2022-08-10 18:34:20 -07:00
Roger
d790b53580 [Keymap] single layer layout for BFO-9000 with numpad on the left (#17957) 2022-08-10 18:33:55 -07:00
QMK Bot
63915e84dc Merge remote-tracking branch 'origin/master' into develop 2022-08-10 20:08:21 +00:00
yiancar
a6d0cc3aab Aurora65 (#17966)
* aurora65 initial commit

* Add keymap images

* Move USB config to JSON

Co-authored-by: yiancar <yiancar@gmail.com>
2022-08-10 21:07:41 +01:00
QMK Bot
663b250e2f Merge remote-tracking branch 'origin/master' into develop 2022-08-10 03:01:41 +00:00
Wilba
8a24fbbdae Fix detection of EEPROM reset in some keyboards (#17970) 2022-08-09 20:01:09 -07:00
QMK Bot
9bbc0cbb3b Merge remote-tracking branch 'origin/master' into develop 2022-08-10 00:24:17 +00:00
Kyle McCreery
7019d0bce8 [Keyboard] MechWild Puckbuddy (#17161)
* Initial commit

* testing modes

* working on puckbuddy firmware. This is all working for now but need to clean it up and personalize it.

* needs to be updated from vial build

* prepping for PR

* added rgb mode cycling to fn1 since it isn't on the encoder for these maps

* readme written in preparation for pr

* reverting driver print line

* Removed old reference to OBE in the readme from copypaste error

* applying changes based on review

* applying changes from review

* Update keyboards/mechwild/puckbuddy/puckbuddy.c

* trailing whitespaces removed

* added clear screen condition for switching back to name rendering

* Added uf2 keymap and fixed display glitch for the logo render art.

* Removed extra definition of FEE_PAGE_BASE_ADDRESS

* Removed the uf2 keymap and made it automatic when selecting bootloader instead

* Fixed the bad bootloader check

* moved the uf2 check from rules.mk to post_rules.mk to satisfy lint

* changing it back to stm32-dfu bootloader default

* Fixed RGBLIGHT enable oversight.

* Added persistent dynamic tapping configuration for the cirque touchpad tap term

* new lines at end of files for formatting and diff sanity

* changing default bootloader back to stm32-dfu

* Had to completely redefine the tap keycodes instead of using the DT_UP and DT_DOWN keycodes because I was not able to specify them easily in the via/vial configs and this allows me to keep the original functionality instead of tying it to eeprom like these are.

* Added tap toggling keycodes to quick enable and disable the tapping term

* working out an issue where the tap status keeps turning to off on power cycle

* correcting submodule garbo

* Fixed display issue and rewrote TAP config approach to make it a little easier to control

* removing backup puckbuddy.c code

* Added some comment, removed some commented out old code, removed trailing whitespace

* Changed to handle tinyuf2 by expecting emulated eeprom so that adding other forms of eeprom can be handled for the memory offset separately, and added user oled conditional inside the keyboard oled code block

* Updated default keymaps to have the tap and dpi keys on by default

* Apply suggestions from code review

* Apply suggestions from code review
2022-08-09 17:23:44 -07:00
QMK Bot
994a2542af Merge remote-tracking branch 'origin/master' into develop 2022-08-09 18:21:11 +00:00
mechlovin
94b3efe92e change Adelais En Ciel rev. 3 from STM32F303 to APM32F103 MCU (#16964)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-09 11:20:36 -07:00
QMK Bot
525049990c Merge remote-tracking branch 'origin/master' into develop 2022-08-09 18:20:08 +00:00
mincedshon
336c4904b5 [Keyboard] add ecila keyboard (#17596) 2022-08-09 11:19:15 -07:00
QMK Bot
25913ef518 Merge remote-tracking branch 'origin/master' into develop 2022-08-09 17:41:07 +00:00
yiancar
5de655023e [Keyboard] Add NK20 (#17907)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: yiancar <yiancar@gmail.com>
2022-08-09 10:40:32 -07:00
QMK Bot
6e1c2b20e5 Merge remote-tracking branch 'origin/master' into develop 2022-08-09 06:41:55 +00:00
Salicylic-acid3
923cd63f3e [Keyboard] (7skb)Change number of LEDs and Enable Mouse Keys (#17954) 2022-08-08 23:41:10 -07:00
QMK Bot
1d33baac8f Merge remote-tracking branch 'origin/master' into develop 2022-08-08 18:06:29 +00:00
Joel Challis
0002b1cc20 Also disable line ending conversion for merge workflows (#17953) 2022-08-08 19:05:41 +01:00
QMK Bot
a3b06fd87c Format code according to conventions (#17951) 2022-08-08 17:33:25 +01:00
QMK Bot
a14cd0fba5 Merge remote-tracking branch 'origin/master' into develop 2022-08-08 16:31:00 +00:00
Joel Challis
bccf933bc9 Force no git line ending conversion on format workflow (#16176) 2022-08-08 17:30:26 +01:00
QMK Bot
22cb4e520a Merge remote-tracking branch 'origin/master' into develop 2022-08-08 09:46:27 +00:00
Vertex-kb
9a3c30f2c7 [Keyboard] Add Vertex AngleR2 keyboard (#16764)
* Add files via upload

* Delete Vertex/AngleR2 directory

* Add files via upload

* Delete keyboards/Vertex/AngleR2 directory

* Add files via upload

* Add files via upload

* Add files via upload

* Update keyboards/vertex/angler2/angler2.h

* Update keyboards/vertex/angler2/info.json

* Update keyboards/vertex/angler2/keymaps/default/keymap.c

* Update keyboards/vertex/angler2/keymaps/via/keymap.c

* Update keyboards/vertex/angler2/keymaps/via/keymap.c

* Update keyboards/vertex/angler2/keymaps/via/keymap.c

* Update keyboards/vertex/angler2/keymaps/default/keymap.c

* Update keyboards/vertex/angler2/keymaps/via/keymap.c
2022-08-08 02:45:36 -07:00
Joel Challis
764c542bef Remove tmk_core 'serial' code (#17866) 2022-08-08 03:13:16 +01:00
QMK Bot
972f9a612c Merge remote-tracking branch 'origin/master' into develop 2022-08-07 21:11:17 +00:00
Arturo Avila
d27a6bd629 [Keyboard] Add Shisaku keyboard (#17572) 2022-08-07 14:10:32 -07:00
QMK Bot
b214768e09 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 21:07:55 +00:00
yeimialberth
ca04babf3f [Keymap] qwerty and dvorak keyboard setup (#16592)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-07 14:07:25 -07:00
QMK Bot
6a1a398627 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 19:40:49 +00:00
csc027
4267f0e0d4 csc027/keymap-updates (#17881)
* Reverted to most usable configuration for RDP usage.

* Added some HSV color definitions without the value portion to allow using the existing value.

* Switched to using HSV and HS color definitions.

* Added media keys to the convenience layer.

* Updated make rules to enable media keys.

* Cleaned up planck make rules.
2022-08-07 20:40:16 +01:00
QMK Bot
67461a0a47 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 19:33:39 +00:00
Takeshi ISHII
5ecd745514 fix comment space code in quantum/matrix_common.c (#17942) 2022-08-07 20:32:59 +01:00
QMK Bot
6e7678c415 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 13:01:43 +00:00
XScorpion2
034e266998 Rgbkb/keeb fixes (#17932)
* Disable console by default for better bios & reboot behavior

* Remove custom matrix

* Disable console by default for better bios & reboot behavior

* PR feedback
2022-08-07 14:01:10 +01:00
QMK Bot
9087e6ee28 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 12:57:41 +00:00
Joel Challis
a6ea760c94 rgbkb/zen - Resolve CONVERT_TO_PROTON_C warnings (#17619) 2022-08-07 13:57:12 +01:00
QMK Bot
e8ff0d6ced Merge remote-tracking branch 'origin/master' into develop 2022-08-07 09:34:18 +00:00
medoix
b9269bf689 [Keyboard] Dumbpad v1x_oled (#17058)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-07 02:33:36 -07:00
QMK Bot
4f3bf762f1 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 09:30:52 +00:00
DUILCHOI
964ce931e2 [Keyboard] add fave104 (#17909)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-07 02:30:18 -07:00
QMK Bot
5599f26667 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 09:29:42 +00:00
yiancar
82a72fe815 [Keyboard] Add P01 (#17921)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: yiancar <yiancar@gmail.com>
2022-08-07 02:28:46 -07:00
QMK Bot
50e6dd41e6 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 09:21:28 +00:00
James Young
de613fac0a Lin Works FAve 65H Refactor (#17938) 2022-08-07 02:20:51 -07:00
Drashna Jaelre
ac25109312 Always run pointing device init (#17936) 2022-08-07 02:18:03 -07:00
QMK Bot
93914142a3 Merge remote-tracking branch 'origin/master' into develop 2022-08-07 01:24:34 +00:00
Joel Challis
c6ad38e79f RESET -> QK_BOOT default keymaps (#17939) 2022-08-07 02:23:58 +01:00
QMK Bot
c5844931e2 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 21:42:44 +00:00
Julian Turner
5c1cfc917e [Keymap] German Corne Layout (#17268)
* added german corne

* added symbol layer

* Delete settings.json

revert setting

* Delete keymap.c

* Update config.h

* Update keycodes.h

* Update config.h

* Update keyboards/crkbd/keymaps/JulianTurner/oled.c

* Update keycodes.h

* Update oled.c

added header

* Update keymap.c

added header

* Update keytabs.h

added header

* Update readme.md

* Update rules.mk

* default settings

* Update settings.json

* renamed folder

* revert

* remove c file import and added to rules

* Update keymap.c

* Update keymap.c

* Update readme.md

* Update rules.mk

* updated files from pull request

* fixed issues with merge

* Update keyboards/crkbd/keymaps/julian_turner/oled.c

* Update keyboards/crkbd/keymaps/julian_turner/rules.mk

* Update keyboards/crkbd/keymaps/julian_turner/keymap.c

* Delete keycodes.h

* Update keyboards/crkbd/keymaps/julian_turner/readme.md
2022-08-06 14:41:52 -07:00
Joshua Diamond
5408334083 Update ginkgo65hot to allow use of community layouts (#17911) 2022-08-06 13:29:06 -07:00
QMK Bot
e938c663e5 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 17:19:59 +00:00
takashicompany
c8afb7a513 Update miniZone keymap (#17919) 2022-08-06 18:19:25 +01:00
QMK Bot
985b91b30f Merge remote-tracking branch 'origin/master' into develop 2022-08-06 16:21:41 +00:00
James Young
efdd048e18 Cipulot Kawayo Refactor (#17884)
* info.json: apply friendly formatting

* kawayo.h: use QMK 3-character notation

* refactor keymaps

- use QMK-native keycode aliases
  - KC_ENTER -> KC_ENT
  - KC_RIGHT -> KC_RGHT
  - KC_TRNS -> _______
  - RESET -> QK_BOOT
- use four-space indent

* kawayo.h: add matrix diagram

* info.json: correct layout data

* rename LAYOUT_default to LAYOUT_ansi_blocker_split_bs

* add LAYOUT_ansi_blocker macro with reference keymap

* add LAYOUT_ansi_blocker_tsangan macro with reference keymap

* add LAYOUT_ansi_blocker_tsangan_split_bs macro with reference keymap

* kawayo.h: add Corner Blocker (CB) option to matrix diagram

* change Layout Macro naming scheme

- update layout macro naming scheme
  - rename `LAYOUT_ansi_blocker` to `LAYOUT_65_ansi_cb_blocker`
  - rename `LAYOUT_ansi_blocker_split_bs` to `LAYOUT_65_ansi_cb_blocker_split_bs`
  - rename `LAYOUT_ansi_blocker_tsangan` to `LAYOUT_65_ansi_cb_blocker_tsangan`
  - rename `LAYOUT_ansi_blocker_tsangan_split_bs` to `LAYOUT_65_ansi_cb_blocker_tsangan_split_bs`
- rename reference keymaps to format specified in QMK docs
  - keymap using `LAYOUT_65_ansi_cb_blocker` macro should be named `default_65_ansi_cb_blocker`, etc.
- update layout macro grid alignment (no logic change)

* add LAYOUT_65_ansi_blocker macro

* add LAYOUT_65_ansi_blocker_split_bs macro

* add LAYOUT_65_ansi_blocker_tsangan macro

* add LAYOUT_65_ansi_blocker_tsangan_split_bs macro

* denote LAYOUT_all as an alias for LAYOUT_65_ansi_blocker_split_bs

* enable Community Layout support
2022-08-06 09:21:11 -07:00
Nick Brassel
154d35ac14 Remove UNUSED_PINS (#17931) 2022-08-06 23:23:35 +10:00
QMK Bot
820371c31b Merge remote-tracking branch 'origin/master' into develop 2022-08-06 12:38:13 +00:00
Ryan
37345e2ace Provide users with replacements for deprecated/invalid functionality where applicable (#17604) 2022-08-06 22:37:40 +10:00
Stefan Kerkmann
f27b617f36 [Core] Process all changed keys in one scan loop, deprecate QMK_KEYS_PER_SCAN (#15292) 2022-08-06 20:51:13 +10:00
QMK Bot
e9f9f99a33 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 08:59:44 +00:00
Ryan
0ff8c4f6fd Move keyboard USB IDs and strings to data driven: Z (#17927) 2022-08-06 18:59:13 +10:00
QMK Bot
dd0ac80ee4 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 08:52:48 +00:00
Ryan
fb19e14048 Move keyboard USB IDs and strings to data driven: Y (#17926) 2022-08-06 18:52:13 +10:00
Stefan Kerkmann
ed9bdcbc36 [Core] guard RPC invocation by checking RPC info against crc checksum (#17840) 2022-08-06 18:46:59 +10:00
QMK Bot
cac7042414 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 08:46:12 +00:00
Ryan
0e3cc6af12 Move keyboard USB IDs and strings to data driven: X (#17925) 2022-08-06 18:45:43 +10:00
QMK Bot
1d45c99355 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 06:37:08 +00:00
Albert Y
64acbcb42a [Docs] Building with GitHub Userspace (#16271) 2022-08-06 16:36:31 +10:00
QMK Bot
3c9941a629 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 06:31:44 +00:00
Andrew Kannan
99377a0f5b [Keyboard] Add Crin PCB (#17913) 2022-08-05 23:31:05 -07:00
QMK Bot
5efa2ff23e Merge remote-tracking branch 'origin/master' into develop 2022-08-06 06:30:45 +00:00
keyquest.tech
07fc37541d Added support for keyquest keyboards (#17667)
Co-authored-by: Mathiaszmrga <mmoragrega@centro.edu.mx>
2022-08-06 16:30:05 +10:00
Joel Challis
897403c4a7 Publish data as part of API generation (#17020) 2022-08-06 16:14:29 +10:00
QMK Bot
ec5186f0f9 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 05:50:30 +00:00
Ryan
10ad238944 Move keyboard USB IDs and strings to data driven: W (#17903) 2022-08-06 15:49:44 +10:00
Jeff Epler
7bbc1b21dd Add kb2040 onkey keyboard that works with the oled keymap (#17786) 2022-08-05 19:38:10 -07:00
Drashna Jaelre
ad4ef47d2b [Keyboard] use correct function in Dilemma splinky (#17923) 2022-08-06 02:58:06 +01:00
QMK Bot
758a0a0902 Merge remote-tracking branch 'origin/master' into develop 2022-08-06 01:54:55 +00:00
Less/Rikki
660dedfb17 [Keyboard] encoder map on more mechwild boards (#17894) 2022-08-05 18:54:22 -07:00
QMK Bot
217bd431e9 Merge remote-tracking branch 'origin/master' into develop 2022-08-04 23:41:59 +00:00
Joel Challis
8978960a87 Tidy up ez_maker (#17910) 2022-08-05 00:41:29 +01:00
Drashna Jaelre
eb417b3aaf Add deprecated check for RGBLIGHT_ANIMATIONS (#17832) 2022-08-04 11:05:53 -07:00
QMK Bot
7093846319 Merge remote-tracking branch 'origin/master' into develop 2022-08-04 13:07:34 +00:00
ebastler
efd3b1e0bd added missing indicator defines for dolice (#17906) 2022-08-04 14:06:50 +01:00
Nick Brassel
d9eb152a90 Fix issue with #17904. (#17905) 2022-08-04 22:15:42 +10:00
Nick Brassel
94e8701b3e Fixup compilation of printf-like functions with uint32_t args. (#17904) 2022-08-04 21:44:56 +10:00
Nick Brassel
543f54a483 [Core] STM32_USB_USE_OTG1 => USB_ENDPOINTS_ARE_REORDERABLE (#17647) 2022-08-04 21:05:16 +10:00
QMK Bot
88cfd55b8c Merge remote-tracking branch 'origin/master' into develop 2022-08-04 01:36:14 +00:00
Ryan
17176daf26 Move keyboard USB IDs and strings to data driven: T (#17899) 2022-08-04 02:35:08 +01:00
QMK Bot
4e50de3a4b Merge remote-tracking branch 'origin/master' into develop 2022-08-04 00:22:37 +00:00
James Young
5a631ed9ac Balloondogcaps TR90 and TR90PM: rename LAYOUT to LAYOUT_ortho_3x3 (#17879)
* balloondogcaps/tr90: rename LAYOUT to LAYOUT_ortho_3x3

* balloondogcaps/tr90pm: rename LAYOUT to LAYOUT_ortho_3x3
2022-08-04 01:21:59 +01:00
QMK Bot
42a36a2095 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 22:55:51 +00:00
James Young
b01814bf68 boardsource/the_mark: add QMK Configurator layout data (#17898)
* boardsource/the_mark: add QMK Configurator layout data

* add keyboard maintainers to info.json

Adds the individual and organization accounts as listed maintainers.
2022-08-03 23:54:50 +01:00
QMK Bot
d8a15ce5bb Merge remote-tracking branch 'origin/master' into develop 2022-08-03 22:54:33 +00:00
Ryan
a30c1884c7 Move keyboard USB IDs and strings to data driven: U (#17900) 2022-08-03 23:53:46 +01:00
QMK Bot
adf8218399 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 22:53:16 +00:00
Ryan
1fd8d5c322 Move keyboard USB IDs and strings to data driven: V (#17901) 2022-08-03 23:52:24 +01:00
QMK Bot
0a198b59a3 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 22:13:21 +00:00
Ryan
a8744b1630 Move keyboard USB IDs and strings to data driven: S (#17889) 2022-08-04 08:12:37 +10:00
QMK Bot
237039cdcd Merge remote-tracking branch 'origin/master' into develop 2022-08-03 22:06:14 +00:00
Ryan
b40c03140e Move keyboard USB IDs and strings to data driven: R (#17885) 2022-08-04 08:05:40 +10:00
QMK Bot
c6a6f987c9 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 20:08:10 +00:00
Joel Challis
92bcbee226 Fix up splittest/bluepill (#17897) 2022-08-03 21:06:54 +01:00
QMK Bot
f326b0b40e Merge remote-tracking branch 'origin/master' into develop 2022-08-03 17:23:55 +00:00
Stephen J Bush
df8a538489 Userspace: muppetjones (#1) (#13461)
* Userspace: muppetjones (#1)

Add and update lily58 to work with userspace
Add and update kyria keymap to work with userspace
Add and update planck keymap with userspace
Add etchamouse code and docs to userpace
Add userspace
Update mouse encoder for smoother movement.
Encoder + mouse
Added casemodes by andrewjrae

* Rollback lily58 state reader and add missing GPL

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>

* fix lily58 keymap

* Updates to user and lily for muppetjones.

Updated parameters for etchamouse for smoother mouse movement. Updated lily keymap and userspace to actually work together.

* Update keyboards/lily58/keymaps/muppetjones/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Updated keymaps and userspace

* Little more cleanup.

* Update keyboards/lily58/keymaps/muppetjones/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Rollback accidental libchibios update

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update kyria keymap

* Move kyria keymap to splitkb/kyria

* Update planck keymap

* Remove all changes to keyboards/lily58/lib/layer_state_reader.c

* Update lily58 keymap

* Recommended change

* Update keymap readme

* Update kyria keymap and userspace

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Renamed users/muppetjones/README.md to lc

* Update keyboards/lily58/keymaps/muppetjones/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-03 18:23:17 +01:00
QMK Bot
e93124f05c Merge remote-tracking branch 'origin/master' into develop 2022-08-03 14:59:13 +00:00
Ryan
5f6cf24294 Move keyboard USB IDs and strings to data driven: Q (#17883) 2022-08-03 15:58:29 +01:00
QMK Bot
4c81d4e526 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 13:20:50 +00:00
yulei
c4e767b4c9 added neson design's 700e keyboard (#17768)
* added neson design's 700e keyboard

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-03 14:20:10 +01:00
QMK Bot
671e211930 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 10:33:16 +00:00
jotix
4ec2626b43 jotix's community ortho_4x12 layout change (#17891) 2022-08-03 11:32:23 +01:00
QMK Bot
2dfccd29c8 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 08:33:04 +00:00
dvermd
0206bd9df3 add bluepill mcu to splittest (#16959)
* add bluepill mcu to splittest

* fix typo

* refactoring

* mcu config goes to mcuconf.h of keyboard
* keymap specific config goes to keymap config.h
* keyboard specific depending of keymap goes to post_config.h

* Apply suggested change

Co-authored-by: Ryan <fauxpark@gmail.com>

* Apply suggested change

Co-authored-by: Ryan <fauxpark@gmail.com>

* Apply suggested change

Co-authored-by: Ryan <fauxpark@gmail.com>

* Apply suggested change

Co-authored-by: Ryan <fauxpark@gmail.com>

* Apply suggested change

Co-authored-by: Ryan <fauxpark@gmail.com>

* splittest/bluepill: improve documentation

Co-authored-by: Ryan <fauxpark@gmail.com>
2022-08-03 09:31:37 +01:00
QMK Bot
61a3fe4fac Merge remote-tracking branch 'origin/master' into develop 2022-08-03 07:23:52 +00:00
Ryan
b6757d2380 Move keyboard USB IDs and strings to data driven: P (#17875) 2022-08-03 17:23:15 +10:00
QMK Bot
d4f9eb5225 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 07:16:28 +00:00
Ryan
3da6575e24 Move keyboard USB IDs and strings to data driven: M (#17859) 2022-08-03 17:15:43 +10:00
QMK Bot
bce4fb4574 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 07:04:43 +00:00
Ryan
1b92c204c1 Move keyboard USB IDs and strings to data driven: K (#17846)
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2022-08-03 17:03:47 +10:00
QMK Bot
d52d7bc658 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 06:48:37 +00:00
kkokdae
ce9bb6d39b [keymap] Add kkokdae keymap for keyboardio/atreus (#17843)
* [keymap] Add kkokdae keymap for keyboardio/atreus

* Update keyboards/keyboardio/atreus/keymaps/kkokdae/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/keyboardio/atreus/keymaps/kkokdae/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Revert "Update keyboards/keyboardio/atreus/keymaps/kkokdae/keymap.c"

This reverts commit 8e9ccc78c796ea482b5b48d546498c06e3a2af09.

Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-08-03 07:47:48 +01:00
QMK Bot
40499bed06 Merge remote-tracking branch 'origin/master' into develop 2022-08-03 06:11:19 +00:00
Travis
5f6ec37b7d [Keymap] Add TravisHi keymap for SplitKB Kyria (#17858)
* Init commit

* Prep for MVP

* Add F Fixes (thanks F!)

* Fix some incorrect layer summons

* Create readme (remove comments from code)

* Update OLED indicators (test)

* Add more OLED updates

* Add more layouts

* Update readme and small tweaks

* Update layers and prep for LED layers

* Fix a trapped layer issue

* Test animations

* Add a happy frog animation to right screen

* Add bulk work

* Move fren readme image

* Can't save images

* Update FPS layout

* Update Symbols layer

* Update readme

* Update readme (future comments move to readme)

* Remove superfluous comments & add Licence

* Add licence update
2022-08-03 07:10:46 +01:00
QMK Bot
b31c914f0f Merge remote-tracking branch 'origin/master' into develop 2022-08-03 00:07:38 +00:00
AnthonyNguyen168
4c8469f565 Update json file to support Configurator correctly. (#17692) 2022-08-03 01:06:55 +01:00
QMK Bot
90259eb012 Merge remote-tracking branch 'origin/master' into develop 2022-08-02 18:39:44 +00:00
Ryan
be5b1a24bf Move keyboard USB IDs and strings to data driven: O (#17874) 2022-08-02 19:39:00 +01:00
QMK Bot
7883306466 Merge remote-tracking branch 'origin/master' into develop 2022-08-02 18:31:04 +00:00
James Young
24488e043e SKergo Refactor (#17877)
* skergo.h: use ___ for KC_NO

* skergo.h: use 3-character notation

* skergo.h: add matrix diagram

* add LAYOUT_all macro

* update grid alignment of LAYOUT macro and keymaps

* refactor keymaps

Refactor keymaps to use the `LAYOUT_all` macro. Converts tabs to spaces.

This change necessitates the following changes to keymaps:

- The keycodes for Page Up, Page Down, and End each move up one row - all as the last keys on their new rows.
- The keycode for the secondary B key moves up one row, inserted between the primary (left side) B and the N.

* remove LAYOUT macro

* rename LAYOUT_all macro to LAYOUT_split_bs

* add LAYOUT_2u_bs macro

* readme.md: add flashing example

* info.json: correct maintainer value

Update to reference maintainer's GitHub username.
2022-08-02 19:30:26 +01:00
QMK Bot
1f8e9c1854 Merge remote-tracking branch 'origin/master' into develop 2022-08-02 06:54:51 +00:00
Niko Wenselowski
068bfc49de [Keymap] Move the ut472 keymap from gardego5 to keyhive folder (#17598) 2022-08-01 23:54:14 -07:00
QMK Bot
479c7876e6 Merge remote-tracking branch 'origin/master' into develop 2022-08-02 00:11:25 +00:00
Ryan
056a44c7d3 Move keyboard USB IDs and strings to data driven: N (#17865) 2022-08-02 01:10:48 +01:00
QMK Bot
e6dc14ae41 Merge remote-tracking branch 'origin/master' into develop 2022-08-02 00:03:00 +00:00
Ryan
7222969964 Move keyboard USB IDs and strings to data driven: L (#17849) 2022-08-02 01:02:19 +01:00
QMK Bot
e3ee87ee31 Merge remote-tracking branch 'origin/master' into develop 2022-08-01 16:10:17 +00:00
James Young
26b17a71e0 MS Sculpt Touch-Up (#17871)
* info.json: fix JSON syntax error

* info.json: convert tabs to spaces

* info.json: add QMK Configurator layout data

* readme.md: switch Bootloader and Docs sections
2022-08-01 17:09:40 +01:00
Drashna Jaelre
b1eac5c671 [Keyboard] Overhaul uzu42 (#17868) 2022-08-01 14:04:26 +01:00
QMK Bot
0e3b1740ef Merge remote-tracking branch 'origin/master' into develop 2022-08-01 13:01:06 +00:00
James Young
3b40ded512 ryanbaekr rb18 Configurator Data Fixes (#17872)
* info.json: apply friendly formatting

* info.json: correct key sequence

* info.json: remove dead space from layout

* info.json: correct maintainer value
2022-08-01 14:00:31 +01:00
QMK Bot
e32a956028 Format code according to conventions (#17869) 2022-07-31 21:35:53 -07:00
David Hoelscher
2bdd73f801 Add ST7735 driver to Quantum Painter (#17848) 2022-07-31 19:58:25 -07:00
jack
09ea5f6337 [Keyboard] Fix uzu42 compilation issue (#17867) 2022-07-31 19:05:15 -07:00
QMK Bot
735fb38a0e Merge remote-tracking branch 'origin/master' into develop 2022-07-31 22:34:03 +00:00
axtloss
e1b6034f00 [Keymap] Add axtloss keymap for sofle (#17835)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-31 15:33:34 -07:00
Joel Challis
98d5c77521 Remove legacy AVR ssd1306 driver (#17864) 2022-07-31 22:15:01 +01:00
Joel Challis
f7aaed1b57 Migrate crkbd keymaps to oled driver (#17863) 2022-07-31 12:36:30 -07:00
Joel Challis
c10c2575b8 Remove OLED driver Split Common warning (#17862) 2022-07-31 12:33:12 -07:00
Joel Challis
2f19579d3f Convert yosino58 to use split common (#17861) 2022-07-31 12:32:45 -07:00
Daniel Kao
b03a7cef75 Fix POINTING_DEVICE_GESTURES_SCROLL_ENABLE typo (#17850)
* Fix typo for POINTING_DEVICE_GESTURES_SCROLL_ENABLE

Follow the name written in documentation which follows
POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE

* Reword the blurb about POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE in docs
2022-07-31 15:51:20 +01:00
Joel Challis
409790457c Refactor satt/comet46 to use core OLED driver (#17856) 2022-07-31 15:35:42 +01:00
Joshua Diamond
baf34989f1 Default rgblight (#17855)
* better rgb bindings; improve default

* trim firmware size
2022-07-30 18:31:31 -04:00
Joshua Diamond
f02e355380 More glyph transformations for spidey3 userspace (#17854)
* add bold and blackboard bold glyph transformations

* trim firmware size; cformat

* fix typo in macro

* trim firmware size a bit more
2022-07-30 18:21:54 -04:00
QMK Bot
3d53c64992 Merge remote-tracking branch 'origin/master' into develop 2022-07-30 20:00:58 +00:00
James Young
f6a91649ff KPrepublic BM80v2 Touch-Up (#17851)
* info.json: apply friendly formatting

* info.json: correct layout data

Fix the size and position of the Backslash key.

* readme.md: touch-up formatting

* readme.md: switch Bootloader and Docs sections

* correct keyboard maintainer
2022-07-30 21:00:15 +01:00
QMK Bot
06fe4b16d2 Merge remote-tracking branch 'origin/master' into develop 2022-07-30 07:32:18 +00:00
Ryan
2d778d2ff2 Move keyboard USB IDs and strings to data driven: handwired (#17822) 2022-07-30 17:31:44 +10:00
QMK Bot
ef94f93fe2 Merge remote-tracking branch 'origin/master' into develop 2022-07-30 07:24:42 +00:00
Ryan
1c6b0391b4 Move keyboard USB IDs and strings to data driven: E (#17815) 2022-07-30 17:23:55 +10:00
Drzony
0b726a437b Implement relative mode for Cirque trackpad (#17760) 2022-07-29 21:20:34 -07:00
QMK Bot
b085d5221b Merge remote-tracking branch 'origin/master' into develop 2022-07-30 04:07:26 +00:00
Bahrul Hidayat
da07e7dd0e [Keyboard] add dyz60-hs (#17763)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2022-07-29 21:07:10 -07:00
kopibeng
c0e3a16121 [Keyboard] Update MNK88 RGB Underglow LED Number (#17833)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-29 21:06:40 -07:00
QMK Bot
7e172fd944 Merge remote-tracking branch 'origin/master' into develop 2022-07-30 03:03:14 +00:00
Ryan
306e50b84c Move keyboard USB IDs and strings to data driven: D (#17814) 2022-07-29 20:02:47 -07:00
QMK Bot
07f007de9a Merge remote-tracking branch 'origin/master' into develop 2022-07-30 03:02:29 +00:00
Chris Swenson
d1096ad440 [Keymap] Add enigma keymap for contra keyboard (#17829) 2022-07-29 20:01:35 -07:00
QMK Bot
a97c61074e Merge remote-tracking branch 'origin/master' into develop 2022-07-30 02:47:09 +00:00
James Young
d2aa8e6bb8 KBDfans Bounce Pad: Correct QMK Configurator Implementation (#17845) 2022-07-29 19:46:32 -07:00
QMK Bot
ed719d5d8d Merge remote-tracking branch 'origin/master' into develop 2022-07-30 02:17:19 +00:00
GG
0aec4203e7 [Keyboard] add Zoom87 (#17831) 2022-07-29 19:16:50 -07:00
QMK Bot
0c487cbeba Merge remote-tracking branch 'origin/master' into develop 2022-07-30 00:32:42 +00:00
Drashna Jaelre
d93dfbff3c Fix check when compiling HID Joystick with digital driver (#17844) 2022-07-30 01:32:06 +01:00
Frank Tackitt
21603c5142 Enable mousekeys by default for RGBKB Sol3 (#17842) 2022-07-29 23:42:34 +01:00
QMK Bot
3f1b61ba55 Merge remote-tracking branch 'origin/master' into develop 2022-07-29 21:03:24 +00:00
James Young
7f2ddf1711 kbdfans/bounce/75: correct typos of keyboard name (#17841) 2022-07-29 22:02:45 +01:00
Stefan Kerkmann
a204523bbb [Core] RP2040 disable PIO IRQs on serial timeout (#17839) 2022-07-29 20:13:16 +02:00
zvecr
ade2eb1e75 Merge remote-tracking branch 'origin/master' into develop 2022-07-29 17:30:33 +01:00
Ryan
394cf7c41e Move keyboard USB IDs and strings to data driven: J (#17837) 2022-07-29 13:49:01 +01:00
Ryan
bcb8600a31 Move keyboard USB IDs and strings to data driven: I (#17836) 2022-07-29 13:40:16 +01:00
QMK Bot
1050cf2453 Merge remote-tracking branch 'origin/master' into develop 2022-07-29 12:19:39 +00:00
James Young
1ded7ad460 KBDfans Bounce75 Touch-Up (#17834)
* kbdfans/bounce/75/hotswap: keymap readability fix

Update grid alignment to disambiguate which keycodes correspond in different layers.

----

Layer 0 had 13 and 9 keycodes on the bottom two rows respectively, while Layers 1-3 had 14 and 8.

* kbdfans/bounce/75/soldered: keymap readability fix

Update grid alignment to disambiguate which keycodes correspond in different layers.

----

Layer 0 had 14 and 9 keycodes on the bottom two rows respectively, while Layers 1-3 had 15 and 8.

* kbdfans/bounce/75/soldered: fix layer index in keymaps

Layer indexes were 0,1,2,1 instead of 0,1,2,3.
2022-07-29 13:18:28 +01:00
QMK Bot
a7d0e01e5b Merge remote-tracking branch 'origin/master' into develop 2022-07-29 06:44:32 +00:00
James Young
5c90f7ae14 Wuque Promise87 WKL Refactor (#17828) 2022-07-28 23:43:54 -07:00
precondition
95c1cc425e Rename postprocess_steno_user → post_process_steno_user (#17823) 2022-07-28 21:51:01 -07:00
QMK Bot
2d0443ec25 Merge remote-tracking branch 'origin/master' into develop 2022-07-29 04:42:45 +00:00
GG
b5452581da [Keyboard] fix mistakes in promise87 config (#17830) 2022-07-28 21:41:42 -07:00
QMK Bot
c2f68e3232 Merge remote-tracking branch 'origin/master' into develop 2022-07-28 13:13:39 +00:00
Ryan
920f983767 Move keyboard USB IDs and strings to data driven: H (#17821) 2022-07-28 14:12:40 +01:00
Stefan Kerkmann
157ea96411 ChibiOS: use correct status codes in i2c_master.c (#17808)
msg_t is MSG_OK in the success case and either MSG_RESET or MSG_TIMEOUT
in case of errors. So actually use them in the comparison.
2022-07-28 02:02:10 +01:00
QMK Bot
476d709fa5 Merge remote-tracking branch 'origin/master' into develop 2022-07-28 00:57:13 +00:00
Less/Rikki
e7affd0541 feat: encoder map, OLED & encoder kb-level config (#17809) 2022-07-28 01:56:37 +01:00
QMK Bot
b029252e76 Merge remote-tracking branch 'origin/master' into develop 2022-07-27 23:52:09 +00:00
Arthur
1e745c48b6 [Keymap] Add artflag kyria layout (#17778)
* Initial firmware

* feedback

* updates

* update map
2022-07-27 16:51:13 -07:00
QMK Bot
7bb73306d6 Merge remote-tracking branch 'origin/master' into develop 2022-07-27 21:44:42 +00:00
Ryan
23f365b601 Move keyboard USB IDs and strings to data driven: F (#17816) 2022-07-27 22:44:05 +01:00
QMK Bot
5055c9a74b Merge remote-tracking branch 'origin/master' into develop 2022-07-27 21:12:28 +00:00
Kevin Zhao
6731712cc1 Fix SKErgo Keymap (#17812) 2022-07-27 22:10:57 +01:00
QMK Bot
ed5351d75e Merge remote-tracking branch 'origin/master' into develop 2022-07-27 19:19:51 +00:00
Ryan
4a0eb733ac Move keyboard USB IDs and strings to data driven: G (#17818) 2022-07-27 20:19:09 +01:00
QMK Bot
602fde61e2 Merge remote-tracking branch 'origin/master' into develop 2022-07-27 16:29:08 +00:00
turbololvo
c788857b6b fix function layer to reflect cap labels (#17813)
These changes correctly reflect the keycap labels on the Vortex Race 3.
2022-07-27 17:27:39 +01:00
QMK Bot
df15caf407 Merge remote-tracking branch 'origin/master' into develop 2022-07-27 15:02:29 +00:00
James Young
0f40e5d0dc Wuque Promise87 ANSI Refactor (#17807) 2022-07-27 08:01:37 -07:00
Drashna Jael're
3d98269652 Merge remote-tracking branch 'origin/master' into develop 2022-07-27 07:40:30 -07:00
Drashna Jaelre
8973835183 [Docs] Add information about WeAct Blackpill F411 (#16755)
* [Docs] Add information about WeAct Blackpill F411

* Add clarification for matrix pins

* Update documentation

* Tweak wording
2022-07-27 14:49:12 +01:00
QMK Bot
00c1653a15 Merge remote-tracking branch 'origin/master' into develop 2022-07-27 09:29:50 +00:00
Albert Y
3285659690 CLI compatibility for MacOS (#17811) 2022-07-27 10:29:10 +01:00
Stefan Kerkmann
59d940c9f3 ChibiOS-Contrib: Update for RP2040 PWM and I2C driver (#17817) 2022-07-27 10:06:18 +02:00
QMK Bot
5df7cfdeb4 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 20:48:59 +00:00
Danny
dc48b3fd04 [Keyboard] Fix typo with RGB LED positioning in Iris (#17805) 2022-07-26 13:48:07 -07:00
QMK Bot
ff5848992c Merge remote-tracking branch 'origin/master' into develop 2022-07-26 20:25:59 +00:00
Less/Rikki
fc9654a1d0 feat: encoder map, OLED & encoder kb-level config (#17767) 2022-07-26 21:25:23 +01:00
QMK Bot
53ca6338c7 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 19:51:21 +00:00
Drashna Jaelre
5f36285fc5 [Keyboard] Add work louder micro (#17586)
* [Keyboard] Add work louder micro

* Update keyboards/work_louder/micro/readme.md

* Update readme

* Update kb config files

* Update to use encoder map

Co-authored-by: Tom Barnes <barnestom@me.com>
2022-07-26 20:50:45 +01:00
QMK Bot
e0e1f0af92 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 19:44:06 +00:00
Scott Bennett
9dbc0473ef Dz65v2 Settings for SBennett13 (#17747)
* Start of dz65v2 map for sbennett13

* No wpm, disable some rgb, ~copyright~

* No more raindrops

* Remove more rgb modes and set default

* Almost orgot this crappy thing

* cannot define startup :(

* Layered esc is kc_grv

* Start of dz65v2 map for sbennett13

* No wpm, disable some rgb, ~copyright~

* No more raindrops

* Remove more rgb modes and set default

* Almost orgot this crappy thing

* cannot define startup :(

* Layered esc is kc_grv

* Add license to config and keymap
2022-07-26 20:43:26 +01:00
Stefan Kerkmann
083b42068a Chibios: Stop I2C peripheral on transaction error (#17798)
From the ChibiOS HAL I2C driver pages:

After a timeout the driver must be stopped and restarted because the bus is in
an uncertain state.

This commit does that stopping explicitly on any error that occurred, not only
timeouts. As all the i2c functions restart the peripheral if necessary it is
safe to do so.

Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>

Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
2022-07-26 21:40:14 +02:00
QMK Bot
2899e69ead Merge remote-tracking branch 'origin/master' into develop 2022-07-26 19:15:45 +00:00
Spaceman
d4bb5a9820 Add alternative Logos (#17787) 2022-07-26 20:15:08 +01:00
Daniel Kao
b8b2e99976 Constrain Cirque Pinnacle coordinates (#17803)
Static x & y should be the same type as touchData.xValue &
touchData.yValue: uint16_t.
Their delta could be larger than int8_t and should be constrained to
mouse_xy_report_t.
2022-07-26 19:35:41 +01:00
Joel Challis
c982d6c5e3 Avoid OOB in dynamic_keymap_reset (#17695) 2022-07-26 17:38:28 +01:00
QMK Bot
61da9286a1 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 16:38:06 +00:00
QMK Bot
0534b878c3 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 16:37:29 +00:00
Nick Brassel
d1434b6d75 Make qmk doctor print out the last log entry for upstream/{master,develop}, including dates (#17713) 2022-07-26 17:37:28 +01:00
Wilba
501276a8fd Added WT65-D (#17724) 2022-07-26 17:36:30 +01:00
QMK Bot
1cf68476cc Merge remote-tracking branch 'origin/master' into develop 2022-07-26 08:00:23 +00:00
Álvaro A. Volpato
b0b14cc440 [Keyboard] Acheron Athena support (#16818)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-26 00:59:38 -07:00
Drashna Jaelre
5d898a3d34 [Docs] Updates to Pointing Device Docs (#17777) 2022-07-26 00:27:34 -07:00
Charly Delay
244450625a bastardkb: fix info.json changes that got reverted during the last merge from master to develop (#17800)
* bastardkb: fix info.json changes that got reverted during the last merge from `master` to `develop`

* Remove board name from root folder `info.json`
2022-07-26 07:41:24 +01:00
QMK Bot
9f5b71bada Merge remote-tracking branch 'origin/master' into develop 2022-07-26 06:27:00 +00:00
Olly Hayes
77e48f5b7e [Keymap] Add ollyhayes keymap (#16632) 2022-07-25 23:26:22 -07:00
QMK Bot
9825b66cac Merge remote-tracking branch 'origin/master' into develop 2022-07-26 06:26:00 +00:00
Leo Deng
ddae04bca1 [Keyboard] add DJam keyboard (#17430)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-07-25 23:25:28 -07:00
Daniel Kao
1de6811ebe Cirque circular scroll: Support POINTING_DEVICE_COMBINED (#17654) 2022-07-25 23:19:33 -07:00
QMK Bot
2456044d5f Merge remote-tracking branch 'origin/master' into develop 2022-07-26 05:36:55 +00:00
shamit05
91d911eb1f [Keyboard] Add Halokeys Elemental 75 (#17323)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-25 22:36:11 -07:00
QMK Bot
9f976b89d8 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 05:31:41 +00:00
Cipulot
ba1643af7d [Keyboard] Add Kawayo Keyboard (#17454)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-07-25 22:30:59 -07:00
QMK Bot
11c9a5e3ac Merge remote-tracking branch 'origin/master' into develop 2022-07-26 05:24:46 +00:00
hornslyn
a33dc8ebb5 [Keyboard] Add Star75 support (#17421)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-25 22:24:04 -07:00
Albert Y
70d554420c [Keyboard] Add RP2040 config defaults for ferris/sweep and cradio (#17557) 2022-07-25 22:22:42 -07:00
QMK Bot
f004d93bad Merge remote-tracking branch 'origin/master' into develop 2022-07-26 05:21:11 +00:00
James Young
753ca0e13c takashicompany miniZone: fix QMK Configurator implementation (#17801) 2022-07-25 22:20:36 -07:00
QMK Bot
4bd4210e97 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 05:02:37 +00:00
Daniel O'Brien
3eb9f28c89 [Keyboard] Add missing mute button to sofle keymap (#17796) 2022-07-25 22:02:02 -07:00
QMK Bot
f0300fc763 Merge remote-tracking branch 'origin/master' into develop 2022-07-26 05:00:11 +00:00
Diogo Sergio
e6a7db2fd2 Update README.md for teensy lc onekey (#17797) 2022-07-25 21:59:37 -07:00
QMK Bot
d556c4233e Merge remote-tracking branch 'origin/master' into develop 2022-07-26 04:01:41 +00:00
Ryan
5ed98df374 gboards/georgi: cleanup & fix (#17753) 2022-07-26 14:01:05 +10:00
Drashna Jaelre
928bbded6d [Keyboard] Fix compilation issues for Charybdis/Dilemma (#17791)
* [Keyboard] Fix debug printing for Charybdis/Dilemma

* Fix compliation issue for dilemma
2022-07-26 02:40:14 +01:00
QMK Bot
77ed0feebe Merge remote-tracking branch 'origin/master' into develop 2022-07-26 00:53:04 +00:00
Ryan
674422eb13 Move keyboard USB IDs and strings to data driven: A (#17781) 2022-07-26 01:52:18 +01:00
QMK Bot
1e651dbdb0 Merge remote-tracking branch 'origin/master' into develop 2022-07-25 23:04:48 +00:00
Ryan
a939293aca Move keyboard USB IDs and strings to data driven: C (#17789) 2022-07-26 00:04:09 +01:00
QMK Bot
4baed8037d Merge remote-tracking branch 'origin/master' into develop 2022-07-25 22:56:05 +00:00
James Young
b6ac0ecf82 Runes Skjöldr Touch-Up (#17792)
* skjoldr.h: use ___ for KC_NO

* skjoldr.h: use K<row><column> notation

Matrix was previously defined using identifiers in the format of K<column><row>.

* skjoldr.h: add matrix diagram

* info.json: apply friendly formatting

- key legends as labels
- correct key sizes and positioning

* refactor keymaps

Refactors the `default` and `via` keymaps.

- use QMK-native keycode aliases
- grid-align keycodes for readability

* rename LAYOUT macro to LAYOUT_60_ansi_arrow

* enable Community Layout support

* info.json: correct maintainer value

Field is meant to reference the maintainer's GitHub username.
2022-07-25 23:55:26 +01:00
QMK Bot
4837bc50c4 Merge remote-tracking branch 'origin/master' into develop 2022-07-25 22:08:08 +00:00
Drashna Jaelre
68cc6be564 [Keyboard] Fix Charue Sunsetter_r2 compilation issues (#17793) 2022-07-25 23:07:32 +01:00
Drashna Jaelre
683eeca2e2 [Docs] Fix custom debug function and sample output (#17790) 2022-07-25 23:07:15 +01:00
Drashna Jaelre
325da02e57 Fix QK_MAKE's reboot check (#17795) 2022-07-25 23:06:26 +01:00
Drashna Jael're
99c48f1361 Merge remote-tracking branch 'origin/master' into develop 2022-07-25 10:15:47 -07:00
ILWrites
1df6322f10 Fixed spacebar position (#17784) 2022-07-25 17:21:09 +01:00
Ryan
50c2b151b2 Move keyboard USB IDs and strings to data driven: B (#17782) 2022-07-25 16:20:19 +01:00
QMK Bot
7d2260ab75 Merge remote-tracking branch 'origin/master' into develop 2022-07-25 14:59:45 +00:00
James Young
d2161f113b MechWild Mokulua: Correct QMK Configurator Data (#17783)
* Mokulua Mirrored: rebuild info.json file

* Mokulua Standard: rebuild info.json file
2022-07-25 15:58:58 +01:00
Charly Delay
50a12c06b9 [keyboard] bastardkb: restructure folder hierarchy (#16778)
* bastardkb: restructure folder hierarchy ahead of supporting other adapters/mcus

Upcoming support for the following (adapter, mcu) pairs will be
submitted in follow-up PRs:

- `v2/elitec`
- `v2/stemcell`
- `blackpill`

This PR contains the following changes:

- Move previous implementation to an inner `v1/elitec` folder
- Move keyboard USB IDs and strings to data driven
- Update headers to update maintainers list
- Run `qmk format-c`

* bastardkb/charybdis: remove broken acceleration implementation

* bastardkb/charybdis: fix debug output

* bastardkb: add support for BastardKb the `v2/elitec` (adapter, mcu) pair

* bastardkb: add Blackpill support

* bastardkb/charybdis/3x5: add `bstiq` keymap

* bastardkb/charybdis: add fake LEDs to the configuration

For the Charybdis 3x5 (respectively 4x6), the LED config now simulates
36 (respectively 58) LEDs instead of the actual 35 (respectively 56) to
prevent confusion when testing LEDs during assembly when handedness is
not set correctly.  Those fake LEDs are bound to the physical
bottom-left corner.

* bastardkbk/charybdis/readme.md: update build commands

Merge pull request #5 from Nathancooke7/update_charybdis_readme_v2_shield.

* bastardkb/charybdis: fix Via keymap with blackpill

* bastardkb/charybdis: add 3x6 configuration

* bastardkb/charybdis: remove unnecessary files

* bastardkb/charybdis: remove obsolete code

* bastardkb/charybdis/3x6: add Via keymap

* bastardkb: add support for Splinky (RP2040) board

* bastardkb: initial configuration for the Splinky (SPI not working yet)

* bastardkb/charybdis/3x5/v2/splinky: tentative change to enable trackball

* bastardkb/charybdis/3x5/v2/splinky: fix SCK, MISO, MOSI pins

* bastardkb/charybdis/3x5/v2/splinky: fix SCK, MISO, MOSI pins

* bastardkb/charybdis/4x6/v2/splinky: add SPI configuration and enable trackball

* bastardkb/charybdis/3x6: add splinky config

* bastardkb/*/v2/splinky: update drivers to `vendor`

* bastardkb/dilemma: add new board

* bastardkb/charybdis: fix infinite loop in `layer_state_set_user(…)` in the `via` keymaps

* bastardkb/dilemma: add `bstiq` keymap

* bastardkb: specify blackpill boards

* bastardkb/charybdis: fix blackpill-specific define syntax

* bastardkb: remove `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION` which are no longer valid options

* bastardkb: fix `QK_BOOT` keycodes

* bastardkb/dilemma: fix mouse direction on X axis

* bastardkb/charybdis/3x6: adjust CS

* bastardkb/dilemma: adjust trackpad configuration

* charybdis: fix `PWM33XX_CS_PIN` defines

This is a follow-up of https://github.com/qmk/qmk_firmware/pull/17613.

* bastardkb: remove Vial mentions from `bstiq` keymaps

* Cleanup unnecessary comments

Co-authored-by: Nathan <nathan.cooke@compass.com>
Co-authored-by: Charly Delay <0xcharly@codesink.dev>
2022-07-25 10:11:28 +01:00
QMK Bot
336df3297e Merge remote-tracking branch 'origin/master' into develop 2022-07-24 23:01:36 +00:00
Drashna Jaelre
c0763363db [Docs] Fix tables in Audio driver document (#17780) 2022-07-25 00:00:51 +01:00
QMK Bot
d5e619f472 Merge remote-tracking branch 'origin/master' into develop 2022-07-24 16:12:13 +00:00
James Young
00c02e3bd8 FJLabs Sinanju Refactor (#17773)
* sinanju.h: add matrix diagram

* add LAYOUT_60_ansi_wkl_split_bs_rshift macro

Same matrix as `LAYOUT_all`, but with position K2D (right half of split Backspace) moved to the end of the top row.

* refactor keymaps

- use `LAYOUT_60_ansi_wkl_split_bs_rshift` macro instead of `LAYOUT_all`
- polish four-space indent
- update grid alignment
- replace `RESET` keycode with `QK_BOOT`

* remove now-unused LAYOUT_all macro

* add LAYOUT_60_ansi_wkl macro with keymap

Add a layout with 2u Backspace and 2.75u right Shift.

* info.json: correct maintainer value
2022-07-24 17:11:28 +01:00
QMK Bot
c1783ff35d Merge remote-tracking branch 'origin/master' into develop 2022-07-24 16:07:21 +00:00
James Young
5f172b63f5 Chocofly v1: add info.json (#17772) 2022-07-24 17:06:30 +01:00
QMK Bot
62cd280c3b Merge remote-tracking branch 'origin/master' into develop 2022-07-24 12:40:43 +00:00
James Young
191f6e8069 Idobao ID63 Community Layout support (#17769)
* info.json: add key labels

* rename LAYOUT_63_ansi to LAYOUT_60_ansi_arrow

* enable community layout support
2022-07-24 05:39:53 -07:00
QMK Bot
f6612c219f Merge remote-tracking branch 'origin/master' into develop 2022-07-24 12:26:27 +00:00
James Young
049811be0d Add info.json files for Acheron Apollo series keyboards (#17770)
* add info.json file for Apollo87H

* add info.json file for Apollo87H-T-SC

* add info.json file for Apollo88H-T-SC
2022-07-24 05:25:46 -07:00
QMK Bot
7f938e969d Merge remote-tracking branch 'origin/master' into develop 2022-07-24 11:07:34 +00:00
James Young
592028c724 boardsource/beiwagon: correct QMK Configurator layout data (#17771) 2022-07-24 21:06:55 +10:00
QMK Bot
914861b07c Merge remote-tracking branch 'origin/master' into develop 2022-07-24 05:10:28 +00:00
4pplet
58d484ea28 Waffling80 layout fix (#17757) 2022-07-24 06:09:40 +01:00
QMK Bot
db3d9f9935 Merge remote-tracking branch 'origin/master' into develop 2022-07-24 03:28:12 +00:00
James Young
962dcbf3a3 Creatkeebs Thera Refactor (#17766) 2022-07-23 20:27:38 -07:00
QMK Bot
3825362a3b Merge remote-tracking branch 'origin/master' into develop 2022-07-24 00:10:33 +00:00
Álvaro A. Volpato
98c1f7a9ef [Keyboard] Apollo87H PCB support (#16817)
* Initial Apollo87H support

* Define RGB animations and default animation

* Add proper per-key RGB support

* Adjust LED positions

* Separate delta-gamma

* Fine-tune LED positions

* fix up GAMMA revision

* fix up tabs indentation to spaces indentation

* Fixed positioning and CS-SW defs for some LEDs

* Fix INS RGB position

* Fine-tune LED positions, fix default RGB

* Update readme's

* Rename LAYOUT_87H to lowercase 87h

* Formatting gamma's rules.mk

* Formatting delta's rules.mk

* Use smaller readme image

* Use smaller README image

* First support for 87H-T-SC and 88H-T-SC

* Update README

* Fix layout naming

* Remove

* Remove EEPROM definitions, fix missing RGB LED mod/alpha definer

* Add suggestions from noroadsleft
2022-07-23 17:09:52 -07:00
QMK Bot
f383f7d6e5 Merge remote-tracking branch 'origin/master' into develop 2022-07-24 00:04:24 +00:00
TJ
c3df1775bc [Keyboard] Le Chiffre rev 2 and HE additions (#17377)
* chiffre refactor for new revisions

* updated led matrix config

* updated per suggestions

* add tapdance enable

* revert tapdance (none defined in the default keymaps)

* clean up rules

* add readme for HE

* remove notes in readme

* fix perm

* fix perms

* Fix spacing on readme

* fix perm

* fix perms again?
2022-07-23 17:03:41 -07:00
QMK Bot
302fa11d1f Merge remote-tracking branch 'origin/master' into develop 2022-07-23 20:23:43 +00:00
4pplet
f1ccd60458 [Keyboard] 4pplet Perk60 (#16853)
* adding perk60 iso

adding perk60 iso

* Update info.json

* Update keyboards/4pplet/perk60_iso/rev_a/rev_a.c

* Update keyboards/4pplet/perk60_iso/rev_a/rev_a.c

* Delete chconf.h

* Update keyboards/4pplet/perk60_iso/rev_a/rules.mk

* Update keyboards/4pplet/perk60_iso/rev_a/rev_a.c

* Update keyboards/4pplet/perk60_iso/rev_a/rev_a.c

* Update rules.mk

* Update config.h

* removing a few RGB effects

* removing more effects

* Update keyboards/4pplet/perk60_iso/rev_a/config.h

* Update keyboards/4pplet/perk60_iso/keymaps/default/keymap.c

* Update keyboards/4pplet/perk60_iso/keymaps/default/keymap.c

* Update keyboards/4pplet/perk60_iso/keymaps/via/keymap.c

* Update keyboards/4pplet/perk60_iso/keymaps/via/keymap.c

* Update keyboards/4pplet/perk60_iso/keymaps/via/keymap.c

* Update keyboards/4pplet/perk60_iso/rev_a/rev_a.h

* Update keyboards/4pplet/perk60_iso/keymaps/via/keymap.c

* Update keyboards/4pplet/perk60_iso/info.json

* Update keyboards/4pplet/perk60_iso/rev_a/rules.mk
2022-07-23 13:23:14 -07:00
JayceFayne
d02cefe613 implement tap_code16_delay (#17748) 2022-07-23 19:21:20 +01:00
jack
a6f3194397 Add ability to enter bootloader mode from QK_MAKE (#17745) 2022-07-23 17:43:32 +01:00
QMK Bot
8254d73fd4 Merge remote-tracking branch 'origin/master' into develop 2022-07-23 16:42:55 +00:00
Niko Wenselowski
1f42a8ccdd Fix test logic to check for both keymaps (#17761)
Python will evaluate first the left and then the right side of the and operator.

The left side would previously return True based on the truthiness logic that treats any non-emptry string as true.

It would not check if the desired keymap exists.

If the left side is true it will evaluate the right side which will check for the existance of a specific keymap.

With this change the check for existance of two keymaps is implemented.
2022-07-23 17:42:19 +01:00
jpe230
c586cfda48 (develop) Update bootmagic for Adafruit Macropad (#17755) 2022-07-22 23:28:51 +01:00
QMK Bot
c39a902867 Merge remote-tracking branch 'origin/master' into develop 2022-07-22 20:20:43 +00:00
Yuannan
2202efaf0c Added autoclicker, better mouse, Vim like editing layer and more. (#15702)
* Added autoclicker, better mouse, vim like FN layer and more.

* Updated docs to comply with guidelines

* Fixed Imgur links

* increased step sizes

* updated readme to reflect step size

* Added second delay array for autoclicker to compensate for RGB animation CPU loads

* better RGB effects and updated docs

* better README.md formatting

* added DEBONCE libinput workaround for Linux

* fixed formatting

* fixed typos and clarified

* fixed layer picture order

* Update keyboards/dztech/dz65rgb/keymaps/yuannan/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/dztech/dz65rgb/keymaps/yuannan/README.md

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Updated Docs and rules

* Updated with the new deferred exec API to ensure more consistant CPS

* renamed README.md to be lower case to comply with fauxpark's request

* Remapped alt to be left instead of right for compatibility reasons

* Update keyboards/dztech/dz65rgb/keymaps/yuannan/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-22 21:20:02 +01:00
QMK Bot
536511a32a Merge remote-tracking branch 'origin/master' into develop 2022-07-22 14:58:18 +00:00
mechlovin
8de0427fec [Kay60] Change LED pin state and correct keycode. (#17746) 2022-07-22 15:57:03 +01:00
QMK Bot
0e81d63b64 Merge remote-tracking branch 'origin/master' into develop 2022-07-22 13:23:36 +00:00
Aidan Gauland
de10784799 Fix compilation error in Ploopy Nano maddie keymap (#17733) 2022-07-22 14:22:56 +01:00
QMK Bot
f1671ec720 Merge remote-tracking branch 'origin/master' into develop 2022-07-22 03:43:08 +00:00
Sắn
b9c7d4c48d [Keyboard] Add Krush65 Hotswap (#16692)
* Add Krush65 Hotswap

* Led fix

* small fix

* a

* B

* move ec action to VIA keymaps

* Update keyboards/sawnsprojects/krush/krush65/hotswap/readme.md

* Update keyboards/sawnsprojects/krush/krush65/hotswap/rules.mk

* Update readme.md

* Update readme.md

* Update readme.md

* Update keyboards/sawnsprojects/krush/krush65/hotswap/readme.md

* Update keyboards/sawnsprojects/krush/krush65/hotswap/rules.mk

* Update keyboards/sawnsprojects/krush/krush65/hotswap/info.json

* Update keyboards/sawnsprojects/krush/krush65/hotswap/readme.md

* Update keyboards/sawnsprojects/krush/krush65/hotswap/readme.md

* Update keyboards/sawnsprojects/krush/krush65/hotswap/info.json

* Update keyboards/sawnsprojects/krush/krush65/hotswap/hotswap.h
2022-07-21 20:42:29 -07:00
QMK Bot
d681eac0ad Merge remote-tracking branch 'origin/master' into develop 2022-07-21 20:24:51 +00:00
Joel Challis
5a0e47db5e Add reviewer/labels to dependabot PRs (#17743) 2022-07-21 21:24:07 +01:00
QMK Bot
bfed88dba2 Merge remote-tracking branch 'origin/master' into develop 2022-07-21 19:55:00 +00:00
dependabot[bot]
4ca99af8f5 Bump JamesIves/github-pages-deploy-action from 4.3.4 to 4.4.0 (#17742) 2022-07-21 20:54:27 +01:00
Drashna Jaelre
5f32690cba Move Pointing Device Initialization (#17740)
Move Pointing Device Initialization to after Split Post Initialization

If both pointing device and split is enabled, the pointing device init needs to be called after the split post init, otherwise the connection (serial/etc) isn't initialized yet, and any commands that need to send data over (such as calling the set cpi command) never get sent over.
2022-07-21 10:16:44 -07:00
jpe230
5c90732622 Adafruit Macropad: Add VIA keymap, fix default km (#17735) 2022-07-21 14:44:12 +01:00
QMK Bot
6081a8091d Merge remote-tracking branch 'origin/master' into develop 2022-07-21 12:45:28 +00:00
jonavin
7f0581cd35 Jonavin mercutio - reduce mem footprint (#17498)
* Reduce mem footprint - remove sprintf

* remove stdio reference and use get_u8_str

Co-authored-by: Jonavin <=>
2022-07-21 13:44:51 +01:00
Albert Y
d510e80b89 Add Blok 2040 conversion (#17603) 2022-07-21 00:54:05 +01:00
Wilba
4efe6330c4 VIA Encoder Map Support (#17734) 2022-07-21 09:53:42 +10:00
QMK Bot
493d422406 Merge remote-tracking branch 'origin/master' into develop 2022-07-20 23:20:34 +00:00
mechlovin
a6d70de96a [Keyboardo] Update PID for mechlovin zed60 (#17728) 2022-07-20 16:19:51 -07:00
mknj
9a31bbb3fa fix syntax error (#17732) 2022-07-20 22:59:18 +01:00
Albert Y
05f30f0787 Use Pro Micro pinout for SDA/SCL (#17595) 2022-07-20 18:24:34 +01:00
QMK Bot
ab45e3b993 Merge remote-tracking branch 'origin/master' into develop 2022-07-20 17:00:18 +00:00
takashicompany
62e3f8b885 Add miniZone Keymap (#17552) 2022-07-20 17:59:40 +01:00
Ben Fiedler
1db5272154 docs: fix default value of USB_SUSPEND_WAKEUP_DELAY (#17501)
Documents the change made in #12081
2022-07-20 17:43:41 +01:00
Drashna Jaelre
ee17ffadea Move Pointing Device code to a subdirectory (#17684) 2022-07-20 17:32:00 +01:00
QMK Bot
adfa36fee4 Merge remote-tracking branch 'origin/master' into develop 2022-07-20 15:02:35 +00:00
Felix Jen
55f16167e4 Added Windz Sinanju to QMK (#17566) 2022-07-20 16:01:35 +01:00
QMK Bot
fa44f2b21e Merge remote-tracking branch 'origin/master' into develop 2022-07-20 00:56:25 +00:00
Michal
00c8e24c6a [Keymap] Michal Keymap for Sofle rev1 (#17610) 2022-07-19 17:55:48 -07:00
Drashna Jaelre
12eb6444c6 Add support for PAW3204 Optical Sensor (#17669)
Co-authored-by: gompa <gompa@h-bomb.nl>
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2022-07-19 17:46:22 -07:00
QMK Bot
6992efb229 Merge remote-tracking branch 'origin/master' into develop 2022-07-19 23:24:53 +00:00
Duccio
a7893f207d Add rgb underglow support and change vendor_id (#17719) 2022-07-20 00:24:10 +01:00
QMK Bot
d0c095eec2 Merge remote-tracking branch 'origin/master' into develop 2022-07-19 15:43:59 +00:00
JW2586
32512bbf10 [Keyboard] Waterfowl keyboard support (#16760)
* Added waterfowl files

* Completing PR Checklist

* Added encoders to info.json

* Added license to default keymap

* Update keyboards/waterfowl/keymaps/cyanduck/keymap.c

* Update keyboards/waterfowl/keymaps/default/keymap.c

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/keymaps/default/keymap.c

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/keymaps/cyanduck/keymap.c

* Update keyboards/waterfowl/rules.mk

* Update readme.md

* Update keyboards/waterfowl/waterfowl.c

* Update keyboards/waterfowl/info.json

* Update keyboards/waterfowl/info.json
2022-07-19 08:43:19 -07:00
QMK Bot
d458df7698 Merge remote-tracking branch 'origin/master' into develop 2022-07-19 10:29:44 +00:00
takashicompany
819231afe1 Add keymap for Radialex (#17662)
* fix keymap

* fix keymaps
2022-07-19 11:28:45 +01:00
QMK Bot
7a10c3370f Merge remote-tracking branch 'origin/master' into develop 2022-07-19 10:14:23 +00:00
David Hoelscher
1bf95d60e4 [Keyboard] customMK EVO70 (#14907)
* added files for EVO70

* updated info.json and readme

* ran qmk lint and fixed typo in info.json

* removed defines from config.h in favor of info.json

* removed an unnecssary include

* removed unnecessary code

* updated rules.mk to remove mention of Bluetooth

* corrected edit to rules.mk

* added code for OLED menu display

* removed extraneous comments and spaces

* added bongo cat animation

* Update keyboards/custommk/evo70/rules.mk

* Update keyboards/custommk/evo70/config.h

* Modified Bongocat graphics to match original proportions

* updated info.json device version

* updated OLED splash screen display timing

* improved bongo cat tap detection and added backlight breathing to OLED menu

* various improvements to OLED, saving settings, and VIA keymap fix

* removed extraneous define

* custom encoder assignment retained upon powerup, backlight sleep upon suspend

* corrected bongo cat tap detection

* Changed splash screen and bongo cat encoder rotation to use the custom assignments

* removed _default from LAYOUT naming and changed keyboard image to be hosted from imgur

* Force smaller version of image to be used in readme
2022-07-19 03:13:16 -07:00
Nick Brassel
1cdde7ba6a Fix AVR compilation of FNV by using standard integer typenames. (#17716) 2022-07-19 05:30:01 +01:00
jack
59c7b15b4d [Keyboard] boardsource/microdox data driven (#17675) 2022-07-18 19:20:24 -07:00
QMK Bot
e8b14a52de Merge remote-tracking branch 'origin/master' into develop 2022-07-19 02:09:38 +00:00
James Young
7aea67980b Update noroadsleft userspace and keymaps (2022-07-18) (#17714)
* kbdfans/kbd75/rev1:noroadsleft - remove LAYOUT_75_ansi_wkl definition

* coseyfannitutti/discipline:noroadsleft - change KC_GESC to KC_ESC

* update Quantum keycode instances in noroadsleft keymaps

- `RESET` -> `QK_BOOT`
- `EEP_RST` -> `EE_CLR`
- `DEBUG` -> `DB_TOGG`

* create and add G_PWD macro
2022-07-18 19:09:05 -07:00
Joel Challis
c3f1ba7dd1 Remove full bootmagic config (#17702) 2022-07-19 02:28:23 +01:00
QMK Bot
eabbc04213 Merge remote-tracking branch 'origin/master' into develop 2022-07-18 19:53:40 +00:00
Sergey Vlasov
627e35b7ac Remove Nixpkgs-provided poetry from the environment (#17673)
The `poetry` package from the used Nixpkgs snapshot triggers the regex
compatibility issue in Nix >= 2.10.0 binaries for `x86_64-darwin`:

    https://www.github.com/NixOS/nix/issues/4758

Remove the `poetry` package from the Nix shell environment for now
(it is not really required to compile QMK, only to develop the Nix shell
environment itself).

In addition, all `poetry` version earlier than 1.1.14 became effectively
non-functional after a breaking change of the PyPI JSON API:

    https://www.github.com/python-poetry/poetry/pull/5973

Updating the `poetry` package is not trivial (just adding it it to
`pyproject.toml` does not work due to dependency version conflicts with
other modules), therefore removing it seems to be the easiest solution
to restore compatibility with new Nix versions while not creating any
major inconvenience for QMK users.
2022-07-18 22:52:55 +03:00
QMK Bot
0e4f953976 Merge remote-tracking branch 'origin/master' into develop 2022-07-18 12:20:54 +00:00
Jason Wihardja
c10d0fc785 Add Support for Massdrop's Stack Overflow The Key V2 (#17696)
* Default Factory Settings

* Change Keyboard Name in Readme

* Fix LED Orders

* Change Brightness Step

* Enable Lighting Layers

* Add RGB Control Mode

* Unblink Layer to Clear Stack

* Add MacOS RGB Control

* Comment Fixes
2022-07-18 13:20:19 +01:00
QMK Bot
11cfc8a0b6 Merge remote-tracking branch 'origin/master' into develop 2022-07-18 12:18:48 +00:00
Runheme
4be736c192 [Keyboard]modify ginkgo65hot (#17705)
modify ginkgo65hot
2022-07-18 13:18:08 +01:00
Joel Challis
42eff8c372 Allow dynamic keymap to compile without via.h (#17703) 2022-07-18 11:55:27 +01:00
QMK Bot
32cc8a7f43 Merge remote-tracking branch 'origin/master' into develop 2022-07-17 23:56:05 +00:00
Kyle McCreery
a444ccd27c Re-refactor Mokulua (#17125)
* allowing the kt60 file to be modified so I can do things while waiting for it to be fixed upstream

* initial commit for mokulua keyboard

* Split the board into mirrored and standard layouts.

* Prepping for PR. Silly keymap added.

* prepped for PR

* Apply suggestions from code review

* Fixing firmware from the refactor that removed the mirrored layout.

* Small tweaks using changes from refactor

* Changed the name of the layouts back to match the original to resolve conflict in info.json

* these files needed to be removed as well, they were added as a part of the refactor

* info.json moveds to be different for each build

* Another file had to be removed and the mirrored.c file changed to call mirrored.h instead of standard.h

* fixing chibios ver

* force deleting to revert

* fixing chibios shit

* Update keyboards/mechwild/mokulua/mirrored/mirrored.c

* Update keyboards/mechwild/mokulua/standard/standard.c

* Removing tabs and replacing with 4 spaces. Small style and formatting changes.
2022-07-17 16:55:32 -07:00
Stefan Kerkmann
a304a9b51e Use correct angle tune range of +/-127 on PMW33XX (#17708)
...partially reverts 580bcff4f6 as the
datasheet doesn't claim that the angle tuning as limited to +/- 30
degrees.
2022-07-17 21:08:55 +02:00
QMK Bot
4779539543 Merge remote-tracking branch 'origin/master' into develop 2022-07-17 16:50:28 +00:00
David Kühling
931c7539d2 [Keyboard] Handwired Maltron DQz11N1G contoured keyboard (#17237)
* Basic support for Maltron DQz11N1G controller replacement.

* Update keyboards/handwired/dqz11n1g/rules.mk

* Rehost images to cubeupload.com.

(They were previously hosted via github wiki)

* Apply suggestions from noroadsleft code review

* Update keyboards/handwired/dqz11n1g/dqz11n1g.h
2022-07-17 09:49:36 -07:00
QMK Bot
4f7be48758 Merge remote-tracking branch 'origin/master' into develop 2022-07-17 16:36:02 +00:00
Richard
747b33cb81 [Keyboard] Adding chocV keyboard (#15921)
* Adding chocV keyboard

* Fix checklist issues / community layout support

* Remove template cruft from readme

* Fix image url in readme

* Fix image url in readme to raw github content

* Change readme example to use default Keymap

* Remove vestigal config

* More informative keymap readme

* Config.h swapsies

* Remove deprecated features

* Conform / Modernize Rules

* Conform / Modernize Rules

* Clean up spacing

* Update keyboards/chocv/readme.md

Move build docs links to end 👍
2022-07-17 09:35:09 -07:00
QMK Bot
96c92d208f Merge remote-tracking branch 'origin/master' into develop 2022-07-17 16:25:12 +00:00
mechlovin
6025df79b3 [Keyboard] Add Zed60 PCB (#17304)
* add zed60

* update readme.md

* Delete chconf.h

* update readme.md

* Update keyboards/mechlovin/zed60/rules.mk

* Update keyboards/mechlovin/zed60/keymaps/via/keymap.c

* Update keyboards/mechlovin/zed60/keymaps/default/keymap.c

* Update keyboards/mechlovin/zed60/keymaps/default/keymap.c

* Update keyboards/mechlovin/zed60/keymaps/via/keymap.c

* Update keyboards/mechlovin/zed60/keymaps/via/keymap.c

* Update keyboards/mechlovin/zed60/keymaps/via/keymap.c

* Update keyboards/mechlovin/zed60/config.h

* Update keyboards/mechlovin/zed60/config.h

* Update keyboards/mechlovin/zed60/info.json

* Update keyboards/mechlovin/zed60/readme.md

* Update keyboards/mechlovin/zed60/info.json

* Update keyboards/mechlovin/zed60/zed60.h
2022-07-17 09:24:28 -07:00
QMK Bot
a1fb1405e4 Merge remote-tracking branch 'origin/master' into develop 2022-07-17 12:03:31 +00:00
Joel Challis
37cd5ad810 Remove full bootmagic config (#17701) 2022-07-17 13:02:56 +01:00
QMK Bot
859c1a6fc9 Merge remote-tracking branch 'origin/master' into develop 2022-07-17 07:18:04 +00:00
Jens-Petter Sandvik
4e5cc3c2ba Planck swap hand matrix for rev6, fixing issue #17388 (#17389)
* Add correct hand_swap_config matrix for planck_rev6 and planck_rev6_drop

* Make sure indentations are consistent

* Make the rev6 hand_swap_config matrix the default, also correct for ez.

* Move hand_swap_config matrix from planck.c to revision subdirectories
2022-07-17 00:17:22 -07:00
QMK Bot
54be228882 Merge remote-tracking branch 'origin/master' into develop 2022-07-17 00:32:15 +00:00
Teimor Epstein
28f9def219 [Keymap] teimor keymap for Keychron Q1 (#16396)
* teimor keymap

* quickfix and cleanup

* update readme

* quickfix and cleanup before pr

* clang

* clean layout

* add reset

* pr fix

* fix pr

* Rename README.md to readme.md
2022-07-16 17:31:21 -07:00
QMK Bot
06e93a8f5c Merge remote-tracking branch 'origin/master' into develop 2022-07-16 19:48:33 +00:00
Brian
05f6838f37 [Keymap] Added Layout Keymaps for BriianPowell (#17310)
* Keymaps for Gentleman65 and Discipline

* Apply suggestions from code review

* Update keyboards/coseyfannitutti/discipline/keymaps/briianpowell/keymap.c

* More custom configuration for Gentleman65

* Completed Gentleman65 Layout (for now)
2022-07-16 12:47:28 -07:00
QMK Bot
e50b1d33f3 Merge remote-tracking branch 'origin/master' into develop 2022-07-16 19:39:00 +00:00
HorrorTroll
92c3e6305b [Keyboard] Gopolar GG86 (#15425)
* Added keyboard GG86

* Rebased, resolved issue and updated code

* Delete 1000Hz on config

* Resolved fix

* Another resolved fix

* Last resolved fix

* Fixed LED position
2022-07-16 12:38:22 -07:00
QMK Bot
de545b8e21 Merge remote-tracking branch 'origin/master' into develop 2022-07-16 19:04:10 +00:00
ymlmkb
4d443d921b [Keyboard] KeebMonkey KBMG68 (#15909)
* added KeebMonkey KBMG68.

* Update keyboards/keebmonkey/kbmg68/config.h

* changes requested by fauxpark .

* Apply suggestions from code review

changes suggested by fauxpark

* Update readme.md

changes requested by fauxpark

* Apply suggestions from code review

changes requested by noroadsleft.

* Apply suggestions from code review per fauxpark
2022-07-16 12:03:39 -07:00
QMK Bot
9fa14655df Merge remote-tracking branch 'origin/master' into develop 2022-07-16 18:39:27 +00:00
bri
847cca541c Add .orig to .gitignore (#17626) 2022-07-17 04:38:56 +10:00
Stefan Kerkmann
580bcff4f6 Use correct angle tune range of +/-30 on PMW33XX (#17693)
Co-authored-by: Daniel Kao <daniel.m.kao@gmail.com>

Co-authored-by: Daniel Kao <daniel.m.kao@gmail.com>
2022-07-16 11:33:18 +02:00
QMK Bot
f5e16f94d5 Merge remote-tracking branch 'origin/master' into develop 2022-07-16 07:29:50 +00:00
Allen Choi
9cdccb12d1 [Keymap] Crkbd/thunderbird2086 (#16973)
* crkbd:thunderbird2086

* readme

* after code review

* coding format

* minor change

* changed file name

* correct image

* updated readme

* using query to get rgb status

* minor update
2022-07-16 00:29:09 -07:00
QMK Bot
c8ce87e044 Merge remote-tracking branch 'origin/master' into develop 2022-07-16 06:49:24 +00:00
James Young
66983f090c Suavity Ehan Refactor (#17694)
* info.json: apply friendly formatting, phase 1

* info.json: fix macro reference and layout

* info.json: apply friendly formatting, phase 2

Add key labels.

* refactor keymaps and layout macro

- apply four-space indent
- apply grid alignment to keycodes, matrix position identifiers, and matrix

* add LAYOUT_all

* ehan.h: add matrix diagram

* rename LAYOUT_ansi_default to LAYOUT_ansi_split_bs_rshift_lspace

* ehan.h: correct K3E position in LAYOUT_ansi_split_bs_rshift_lspace

Move location K3E to actually be on Column 14 (E); was previously on Column 13 (D) in source..

* add LAYOUT_iso_split_bs_rshift_lspace

Includes reference keymap.
2022-07-15 23:48:35 -07:00
QMK Bot
abdca8847d Merge remote-tracking branch 'origin/master' into develop 2022-07-16 05:21:50 +00:00
Wilfrid Li
1f93485aef feat(keebwerk): added VIA support keymap for keebwerk nano slider (#16761)
* feat(keebwerk): added VIA support keymap for keebwerk nano slider

Added VIA support for keebwerk nano slider, VIA json is keebwerk_nano_via.json
Fixed midi2vol keymap where comma symbol is missing from enum "custom_layers"

* feat(keebwerk): removed VIA json as requested

* Update keyboards/keebwerk/nano_slider/keymaps/via/keymap.c

* Update keyboards/keebwerk/nano_slider/keymaps/via/keymap.c

* Fix(PR): removed file as requested
2022-07-15 22:21:15 -07:00
QMK Bot
c84f68d4c8 Merge remote-tracking branch 'origin/master' into develop 2022-07-16 05:16:47 +00:00
James Young
303992da70 FJLabs Solanis Refactor (#17686)
* solanis.h: add matrix diagram

* refactor keymaps: apply grid alignment

* refactor LAYOUT_all macro

Moves the matrix position identifier for the right half of Split Backspace to the number row.
2022-07-15 22:16:14 -07:00
QMK Bot
82f806b1ab Merge remote-tracking branch 'origin/master' into develop 2022-07-16 01:02:25 +00:00
projectcain
f5333e9136 [Keyboard] add ProjectCain Relic (#15577)
* Adding relic keyboard

* Update keyboards/projectcain/relic/relic.c

* Update keyboards/projectcain/relic/relic.c

* Update keyboards/projectcain/relic/rules.mk

* Update keyboards/projectcain/relic/rules.mk

* Update keyboards/projectcain/relic/rules.mk

* Update config.h

* Update config.h

* Update keyboards/projectcain/relic/rules.mk

* Update keyboards/projectcain/relic/readme.md

* Update keyboards/projectcain/relic/info.json

* Update keyboards/projectcain/relic/config.h

* Update keyboards/projectcain/relic/config.h
2022-07-15 18:01:52 -07:00
QMK Bot
38cd3684e1 Merge remote-tracking branch 'origin/master' into develop 2022-07-15 21:07:17 +00:00
Henry Lum
ba4ba66b2f [Keyboard] eHan Keyboard (#15861)
* Compiled Suavity QMK Directory

* updated info.json's name from 'LAYOUT_default' to 'LAYOUT_default_split'

* updated rules.mk to reflect new layout name of each keymap

* Updated hanjie.h to reflect physical matrix of PCB

* switched info.json key matrix from split backspace to 2U backspace to better reflect electrical matrix

* updated keymap.c key matrix to reflect PCB electrical matrix

* updated keymap.c key matrix t oreflect PCB electrical matrix

* removed split left shift from physical matrix for default_split layout

* removed split left shift physical & electrical default_split layout

* removed split left shift from physical matrix for default_split layout

* removed split left shift from physical matrix for default_split layout

* updated qmk and via keymap.c and hanjie.h files to reflect pcb electrical matrix

* changed diode direction from row2col to col2row

* fixed false keycode triggers

* updated via keymaps

* added 's'

* added ehan branch for development

* updated readme.md

* updated ehan.h

* updated readme.md

* updated ehan.h layout

* added keymap.c and updated ehan.h

* progress

* compiled qmk

* updated matrix column and row pin out

* updated QMK default ansi keymap

* added VIA ansi_default keymaps

* corrected col 15's pin out to be pin B9, not C13

* Update keyboards/suavity/ehan/config.h

* Update keyboards/suavity/ehan/info.json

* Update keyboards/suavity/ehan/rules.mk

* Update keyboards/suavity/hanjie/rules.mk

* Update keyboards/suavity/hanjie/rules.mk

* Update keyboards/suavity/hanjie/keymaps/via/rules.mk

* Update keyboards/suavity/ehan/rules.mk

* changed readme.md's picturefrom html to markdown

* updated traces & diode placement

* Apply suggestions from code review

Remove trailing backslashes from keymaps (per fauxpark)

* Apply suggestions from code review

Remove `BOOTMAGIC_ENABLE = lite` from `keyboards/suavity/ehan/keymaps/via/rules.mk`

(per fauxpark)

* Apply suggestions from code review

Update formatting of `keyboards/suavity/ehan/rules.mk`

(per fauxpark)

* Update keyboards/suavity/ehan/readme.md

Fix image URL

* Update keyboards/suavity/ehan/config.h

Remove trailing comma in MATRIX_COL_PINS definition
2022-07-15 14:06:19 -07:00
QMK Bot
ce2dbe17b5 Merge remote-tracking branch 'origin/master' into develop 2022-07-15 08:57:19 +00:00
Evelien Dekkers
09b0d3e0ed Move ins, home and pgup keys to the left (#17690) 2022-07-15 09:56:06 +01:00
QMK Bot
c79818e703 Merge remote-tracking branch 'origin/master' into develop 2022-07-15 06:12:57 +00:00
Elliot Patros
0ececbcdb7 [Keymap] emp keymap for keebio/iris (#16858)
* added new layout for keebio/iris

* Update keyboards/keebio/iris/keymaps/emp/config.h

* Update keyboards/keebio/iris/keymaps/emp/keymap.c

Replace #defines with enum

* Update keyboards/keebio/iris/keymaps/emp/keymap.c

Made requested changes about formatting and the license.

* Update config.h

Cleaned up formatting

* Update keyboards/keebio/iris/keymaps/emp/keymap.c

Small changes to improve readability:
* changed whitespace in license
* added more whitespace around if/else blocks
* fixed bracket style in places
2022-07-14 23:11:44 -07:00
QMK Bot
64d2097a27 Merge remote-tracking branch 'origin/master' into develop 2022-07-15 02:58:03 +00:00
Joel Challis
3c6765b21c Ignore kbfirmware exports (#17687) 2022-07-15 03:57:34 +01:00
QMK Bot
f54a55dcfe Merge remote-tracking branch 'origin/master' into develop 2022-07-15 02:53:09 +00:00
Sam
16c91e0cf2 [Keyboard] Added TutelPad keyboard (#16975)
* TutelPad firmware v1.0

* Added VIA compatibility

* Update keyboards/0xcb/tutelpad/config.h

* Update keyboards/0xcb/tutelpad/keymaps/via/keymap.c

* Update keyboards/0xcb/tutelpad/keymaps/via/keymap.c

* Update keyboards/0xcb/tutelpad/keymaps/via/keymap.c

* Add new OLED image, implement suggested fixes

* Update keyboards/0xcb/tutelpad/rules.mk

* Update keyboards/0xcb/tutelpad/rules.mk
2022-07-14 19:52:39 -07:00
QMK Bot
15c09335e9 Merge remote-tracking branch 'origin/master' into develop 2022-07-15 02:45:47 +00:00
Will Winder
807620fa3c [Keyboard] Add Chocofly v1 (#17289)
* [Keyboard] Add Chocofly v1

* PR Feedback

* Small change to keymap.

* Replace KC__VOLUP and KC__VOLDOWN with single underscore version.

* Apply suggestions from code review

* Required for my PC

* Required for my PC
2022-07-14 19:45:08 -07:00
QMK Bot
7501523e1f Merge remote-tracking branch 'origin/master' into develop 2022-07-14 21:52:10 +00:00
James Young
be56817743 KB16-01: correct QMK Configurator key sequence (#17670) 2022-07-14 14:51:25 -07:00
QMK Bot
d547c0bea7 Merge remote-tracking branch 'origin/master' into develop 2022-07-14 21:32:20 +00:00
James Young
2d7de91888 Nayeon Community Layout support (#17665)
* Nayeon Community Layout support

- macro `LAYOUT_ansi` renamed to  `LAYOUT_tkl_f13_ansi_tsangan`
- macro `LAYOUT_iso` renamed to  `LAYOUT_tkl_f13_iso_tsangan`
- Community Layout support enabled in `rules.mk`

* add LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift

* add LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift

* info.json: update maintainer field

Field is meant to reference the GitHub username of the maintainer.
2022-07-14 14:31:37 -07:00
QMK Bot
8ee42cd6c4 Merge remote-tracking branch 'origin/master' into develop 2022-07-14 13:09:37 +00:00
Drashna Jaelre
67f9777b8f [Keyboard] Fix Tractyl Manuform 4x6 json (#17681) 2022-07-14 06:08:54 -07:00
Albert Y
2f73e65837 Add LED limit call (#17679) 2022-07-14 12:37:47 +01:00
Albert Y
1862ac5454 Fix the use of LED limits (#17678) 2022-07-14 12:36:51 +01:00
QMK Bot
da4689d6b5 Merge remote-tracking branch 'origin/master' into develop 2022-07-14 11:23:09 +00:00
Albert Y
300dab7962 [Code] Add solid reactive gradient mode (#17228) 2022-07-14 12:22:53 +01:00
Albert Y
2efad277ee [Keyboard] Readme file correction (#17674) 2022-07-14 12:22:31 +01:00
Stefan Kerkmann
3c58f98929 [Core] PMW33XX drivers overhaul (#17613)
* PMW33XX drivers overhaul

This combines the PMW3389 and PM3360 drivers as they only differ in the
firmware blobs and CPI get and set functions. The following changes have
been made:

* PMW3389 now gets the same multi-sensor feature that is already available on the
  PMW3360.

* Introduced a shared pmw33xx_report_t struct is now directly readable via SPI
  transactions instead of individual byte-sized reads, saving multiple
  copies and bitshift operations.

* pmw33(89/60)_get_report functions had unreachable branches in their motion
  detection logic these have been simplied as much as possible.

* The fast firmware upload option has been removed as this becomes obsolete by
  the newly introduced polled waiting functions for ChibiOS polled waiting

* PMW33(60/89)_SPI_LSBFIRST and PMW33(60/89)_SPI_MODE config options
  have been removed as they don't need to be configurable.

* All PMW3389 and PMW3360 defines have been unified to a PMW33XX prefix
  to reduce code duplication and make the defines interchangeable

* Adjust keyboards to PMW33XX naming scheme
2022-07-14 11:50:00 +02:00
QMK Bot
82685fc2ac Merge remote-tracking branch 'origin/master' into develop 2022-07-14 06:35:34 +00:00
James Young
928be32c83 KPrepublic BM80v2 ISO Refactor (#17660)
* bm80v2_iso.h: convert tabs to spaces

* bm80v2_iso.h: use ___ for KC_NO

* bm80v2_iso.h: use QMK 3-character notation

* refactor macro for tkl_iso Community Layout compatibility

- move the matrix position identifier for Enter to the home row

* info.json: correct layout data

* rules.mk: tidy-up formatting

* readme.md: tidy-up formatting

* update maintainer; re-assign copyright

* assign ISO-appropriate keycodes in keymaps
2022-07-13 23:34:51 -07:00
QMK Bot
9b04e9be04 Merge remote-tracking branch 'origin/master' into develop 2022-07-14 06:27:11 +00:00
Kyle McCreery
acc11f4941 [Keyboard] MechWild BB Steno (#17163)
* allowing the kt60 file to be modified so I can do things while waiting for it to be fixed upstream

* Initial commit

* testing modes

* working on puckbuddy firmware. This is all working for now but need to clean it up and personalize it.

* needs to be updated from vial build

* prepping for PR

* added rgb mode cycling to fn1 since it isn't on the encoder for these maps

* shipping firmware built. Need to clean up readme and info.json layout

* removing puckbuddy files from this branch

* readme done, prepping for PR

* info.json updated prepping for PR

* Restore cirque driver that was modified from puckbuddy testing on this branch

* applying changes from review

* Update keyboards/mechwild/bbs/bbs.c

* Fixed info.json

* Apply suggestions from code review
2022-07-13 23:26:13 -07:00
QMK Bot
633df1f365 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 22:25:18 +00:00
wangfuco
99e9e1b8e7 [Keyboard] Modelm101 teensy2 (#16805)
* Add modelm101_teensy2 files from modelm101

* Change info.json

* Update README.md

* Update pin def

* Fix file name

* Update readme.md

* Delete config.h

* Apply suggestions from code review

* Update keyboards/converter/modelm101_teensy2/config.h

* Delete keyboards/converter/modelm101_teensy2/keymaps/iw0rm3r directory

* Delete .noci
2022-07-13 15:24:42 -07:00
QMK Bot
ce2ac433d9 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 20:58:40 +00:00
James Young
4ef0c8230c Ducky One 2 SF touch-up (#17672)
* info.json: correct JSON syntax error

* info.json: correct key sizes

* update readme files

Moves nearly all of the information about this keyboard to the 1967st version's readme, because this readme is exposed in QMK Configurator.

Also updates the readme to align more closely with QMK's keyboard readme template.

* info.json: update metadata

Updates the keyboard name and maintainer fields.
2022-07-13 21:57:55 +01:00
QMK Bot
2cdaa639ee Merge remote-tracking branch 'origin/master' into develop 2022-07-13 19:40:36 +00:00
James Young
f7510ca202 Gentoo & Gentoo Hotswap: correct Configurator key sequence errors (#17668)
* Gentoo info.json: apply friendly formatting

* Gentoo info.json: correct key sequence error

* Gentoo Hotswap info.json: apply friendly formatting

* Gentoo Hotswap info.json: correct key sequence error
2022-07-13 12:40:03 -07:00
James Young
6eac98286a Swift65 Hotswap: correct key sizes (#17666)
Corrects the key sizes on the bottom row (1.5-1-1.5-7 instead of 1.25-1.25-1.25-7.25).
2022-07-13 12:39:39 -07:00
Nick Brassel
dc70ba612a Post-bootloader EFL/SPI fixes. (#17661)
* Fixup read address for EFL driver.

* Fixup sequencing of SPI.

* Lock during init of EFL backing store.
2022-07-14 00:41:08 +10:00
QMK Bot
2a0d490eb3 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 08:12:12 +00:00
Drashna Jaelre
d98f309429 [Keyboard] Fix compilation issue for runes/skoldjr (#17659) 2022-07-13 01:11:24 -07:00
Drashna Jaelre
09e4001bba [Bug] Fix compile issue with LED Matrix (#17658) 2022-07-13 01:10:51 -07:00
QMK Bot
4b108f7689 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 08:05:22 +00:00
Yizhen Liu
acf114315e [Keyboard] Kprepublic bm80v2 iso issue resolved (#17657)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-13 01:04:42 -07:00
Drashna Jaelre
b21a52c824 Fix compilation issue with Cirque Guestures file (#17656) 2022-07-13 09:01:30 +02:00
QMK Bot
2468be889b Merge remote-tracking branch 'origin/master' into develop 2022-07-13 05:35:44 +00:00
jack
2a3cd98fc6 boardsource/technik_o data driven (#17635) 2022-07-13 06:35:06 +01:00
QMK Bot
bc385435a7 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 05:33:00 +00:00
jack
320219d5d8 boardsource/5x12 data driven (#17630) 2022-07-13 06:32:22 +01:00
QMK Bot
38c8fc9baf Merge remote-tracking branch 'origin/master' into develop 2022-07-13 05:32:19 +00:00
jack
63154631ab boardsource/4x12 data driven (#17629) 2022-07-13 06:31:43 +01:00
QMK Bot
0052b03ee0 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 05:25:36 +00:00
James Young
4f4e72e44c ID75 v2: update info.json (#17653) 2022-07-12 22:25:04 -07:00
jack
98312417b5 [Keyboard] boardsource/lulu data driven (#17638) 2022-07-12 22:20:38 -07:00
QMK Bot
068d5688d8 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 05:19:48 +00:00
jack
2271b28386 [Keyboard] boardsource/the_mark data driven (#17637) 2022-07-12 22:19:36 -07:00
QMK Bot
590c2342fc Merge remote-tracking branch 'origin/master' into develop 2022-07-13 05:19:25 +00:00
jack
f80bb4a517 [Keyboard] boardsource/technik_s data driven (#17636) 2022-07-12 22:19:17 -07:00
jack
b99ccd4f06 [Keyboard] boardsource/beiwagon data driven (#17631) 2022-07-12 22:18:53 -07:00
Drashna Jaelre
1dfe2bb49a Update LED/RGB Matrix flag function behavior (#17651) 2022-07-12 22:18:02 -07:00
QMK Bot
34fec2c07d Merge remote-tracking branch 'origin/master' into develop 2022-07-13 04:58:34 +00:00
Vicktor Hutama
5a126e1a74 [Keyboard] Add Runes Skjoldr (#17305)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-12 21:58:31 -07:00
jack
a991d65e87 [Keyboard] boardsource/3x4 data driven (#17628)
* initial

* change to development board

* replaced KC_TRNS & use rules.mk template
2022-07-12 21:58:04 -07:00
QMK Bot
018fad6b95 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 04:53:38 +00:00
Zach Rice
019bfc4159 [Keymap] Add RAOEUS keymap for the XD75 (#17456)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-12 21:52:52 -07:00
jack
8a1ca7f6b8 [Keyboard] boardsource/holiday/spooky data driven (#17632) 2022-07-12 21:47:32 -07:00
Nick Brassel
dfff040433 Allow MCU-specific overrides for SPI flags. (#17650) 2022-07-13 14:42:24 +10:00
QMK Bot
f9724dfa67 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 04:37:54 +00:00
James Young
e68de95214 KBDfans KBD67 rev2 Layout Patch (#17649) 2022-07-12 21:37:23 -07:00
QMK Bot
27dd4dc91e Merge remote-tracking branch 'origin/master' into develop 2022-07-13 04:31:57 +00:00
Cipulot
5bc81d3a63 [Keyboard] Add Kallos keyboard (#17461)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-12 21:31:17 -07:00
Daniel Kao
5db705d054 Cirque trackpad features: circular scroll, inertial cursor (#17482) 2022-07-12 21:17:40 -07:00
QMK Bot
904ec0ce78 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 04:11:08 +00:00
Yizhen Liu
7a090bb3df [Keyboard] Kprepublic bm80v2 iso revised (#17571)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-12 21:10:31 -07:00
QMK Bot
9d6a94cfb5 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 04:10:07 +00:00
AnthonyNguyen168
257fc042df [Keyboard] Update layout for MechBrewery series (#17570) 2022-07-12 21:09:37 -07:00
James Young
36c2575658 Grammar fixes for docs/feature_converters.md (#17652) 2022-07-13 04:58:16 +01:00
QMK Bot
6bb2ed68a8 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 03:51:07 +00:00
Drashna Jaelre
26954bbc28 [Docs] Add Encoder requirements to PR Checklist doc (#17634)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2022-07-12 20:50:26 -07:00
zvecr
82f0263e41 Merge remote-tracking branch 'origin/master' into develop 2022-07-13 01:19:58 +01:00
Joel Challis
2a3dd95229 Add basic secure docs (#17577) 2022-07-13 00:06:19 +01:00
jack
ffb34fc082 Include stdint.h in avr/i2c_master.h (#17639) 2022-07-12 21:55:19 +02:00
Stefan Kerkmann
45ffe42f1a [Fix] Make ChibiOS _wait.h independent of quantum.h (#17645) 2022-07-12 21:54:33 +02:00
GloriousThrall
bbd6ea977c GMMK 2 WBG7 MCU compatibility (#16436)
* GMMK V2 QMK Compatibility

* fix problems

* Update keyboards/gmmk/gmmk2/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/gmmk/gmmk2/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Fix a minor problem

* Optimize the code

* Update config.h

* Update

* Update config.h

* Update keyboards/gmmk/gmmk2/p96/ansi/keymaps/via/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update config.h

* Update keyboards/gmmk/gmmk2/p96/iso/keymaps/via/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update config.h

* Update keyboards/gmmk/gmmk2/p65/ansi/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/gmmk/gmmk2/p96/ansi/keymaps/default/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/gmmk/gmmk2/p96/ansi/keymaps/via/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/gmmk/gmmk2/p96/ansi/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/gmmk/gmmk2/p96/iso/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/gmmk/gmmk2/p65/iso/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update config.h

* Update config.h

* Update config.h

* Modify device pid

* Add gmmk2_p96 keyboard.

* Add gmmk2_p96 keyboard.

* Update led matrix.

* Update led matrix.

* Delete eeprom_flash.c

* Update keyboards/gmmk/gmmk2/p96/ansi/rules.mk

Co-authored-by: Nick Brassel <nick@tzarc.org>

* Update from qmk develop branch

* Increased compatibility with wear_leveling.

* Update config.h

Co-authored-by: Joy <chang.li@westberrytech.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2022-07-12 17:30:54 +10:00
QMK Bot
a768ec265d Merge remote-tracking branch 'origin/master' into develop 2022-07-11 21:46:29 +00:00
Joel Challis
2714c70bd7 Fix layout macro for nightly_boards/paraluman (#17633) 2022-07-11 22:45:56 +01:00
QMK Bot
b78a7e42b1 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 21:15:45 +00:00
Danny
9a41a303cc [Keyboard] Add Quefrency Rev. 5 (#17503) 2022-07-11 14:14:55 -07:00
QMK Bot
85cdde1541 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 20:59:02 +00:00
Felix Jen
7c3b6c4bc4 [Keyboard] Add Swordfish keyboard (#17567) 2022-07-11 13:57:20 -07:00
FREEWING.JP
61df87ae2c Added Delay time dynamic keymap's macro feature (#16810)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-11 12:59:16 -07:00
QMK Bot
52e9ed75e8 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 19:47:42 +00:00
Alex Băluț
2bb0550707 [Keyboard] add kinesis/kintlc (#17301) 2022-07-11 12:46:51 -07:00
QMK Bot
51b7828540 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 18:54:26 +00:00
balloondogcaps
61a5059fc5 [Keyboard] TR90PM (#17060)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-11 11:53:51 -07:00
balloondogcaps
6663dd7288 [Keyboard] Add TR90 (#16838)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-11 11:53:25 -07:00
Stefan Kerkmann
3f5dc47296 [Core] Use polled waiting on ChibiOS platforms that support it (#17607)
* Use polled waiting on platforms that support it

Due to context switching overhead waiting a very short amount of time on
a sleeping thread is often not accurate and in fact not usable for timing
critical usage i.e. in a driver. Thus we use polled waiting for ranges
in the us range on platforms that support it instead. The fallback is
the thread sleeping mechanism.

This includes:

* ARM platforms with CYCCNT register (ARMv7, ARMv8) this is
  incremented at CPU clock frequency
* GD32VF103 RISC-V port with CSR_MCYCLE register this is incremented at
  CPU clock frequency
* RP2040 ARMv6 port which uses the integrated timer peripheral which is
  incremented with a fixed 1MHz frequency

* Use wait_us() instead of chSysPolledDelayX

...as it is powered by busy waiting now.

* Add chibios waiting methods test bench
2022-07-11 15:17:05 +02:00
QMK Bot
57021d6358 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 12:58:12 +00:00
Evelien Dekkers
61ce15f202 [Keyboard] Fin pad (#17523)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-07-11 05:57:39 -07:00
QMK Bot
5925ea3478 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 12:55:42 +00:00
Naphtaline
c8f969a3ce [Keyboard] kbdfans kbd67 rev 2 : add new LAYOUT_65_iso_split_bs (#16922)
* [Layout/Keymap] kbdfans kbd67 rev2 : add new LAYOUT_65_iso_split_bs and naphaline keymap as a working example

* Update keyboards/kbdfans/kbd67/rev2/keymaps/naphtaline/keymap.c

I do trust the reviewer, here goes the change :)

Co-authored-by: Ryan <fauxpark@gmail.com>

* Remove QMK custom keycodes 1/2

Co-authored-by: Nick Brassel <nick@tzarc.org>

* Remove QMK custom keycodes 2/2

Co-authored-by: Nick Brassel <nick@tzarc.org>

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2022-07-11 05:55:01 -07:00
QMK Bot
5e750cf039 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 12:52:03 +00:00
James Young
2dab029bcf Peej Rosaline Refactor (#17564) 2022-07-11 05:51:29 -07:00
Aidan Smith
7a73f9a6b3 [Keyboard] Add Fine!40 PCB Support (#17426)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-11 05:10:47 -07:00
QMK Bot
5e347f42a6 Merge remote-tracking branch 'origin/master' into develop 2022-07-11 11:31:19 +00:00
Joel Challis
5389f088b1 splitkb/kyria - Resolve CONVERT_TO_PROTON_C warnings (#17617) 2022-07-11 04:30:45 -07:00
QMK Bot
2e567150ea Merge remote-tracking branch 'origin/master' into develop 2022-07-11 11:23:48 +00:00
GG
16b837b35b [Keyboard] Add Promise87 (#17525) 2022-07-11 04:23:13 -07:00
Stefan Kerkmann
0348071810 Stabilize Half-duplex PIO split comms (#17612) 2022-07-11 04:05:04 -07:00
Joel Challis
35d78aa8a4 More DD encoder fixes (#17615) 2022-07-11 10:51:39 +01:00
QMK Bot
0bee7cbebe Merge remote-tracking branch 'origin/master' into develop 2022-07-10 22:45:26 +00:00
Joel Challis
a5eeee4ded Fix infinite recursion in checkerboards/quark_plus (#17616) 2022-07-10 23:44:56 +01:00
QMK Bot
a15e44cfb3 Merge remote-tracking branch 'origin/master' into develop 2022-07-09 17:27:37 +00:00
Joel Challis
2106acc24a merge/um80 - Fix WPM issues in configurator builds (#17608) 2022-07-09 18:26:48 +01:00
QMK Bot
39e1e27ea9 Merge remote-tracking branch 'origin/master' into develop 2022-07-09 12:33:33 +00:00
Nick Brassel
561c5e1d7a Add line to multibuild output log showing the actual build target. (#17606) 2022-07-09 22:32:43 +10:00
jpe230
13b2b93fb0 Add Adafruit Macropad (#17512) 2022-07-08 23:33:03 +01:00
QMK Bot
30f2556ae9 Merge remote-tracking branch 'origin/master' into develop 2022-07-08 21:50:28 +00:00
Dasky
06310e81e9 Allow only col or row pins for *_right extraction. (#17590) 2022-07-08 22:49:55 +01:00
Joel Challis
345e19f691 Add converter docs (#17593) 2022-07-08 22:49:16 +01:00
Joel Challis
81d317aa87 Fix rgbkb/sol/rev2 build issues (#17601) 2022-07-08 22:48:48 +01:00
QMK Bot
b0c3d61c17 Merge remote-tracking branch 'origin/master' into develop 2022-07-07 12:43:20 +00:00
Bartosz Nowak
e724801d33 [Keyboard] Clean up dactyl manuform unused files (#15890) 2022-07-07 05:42:28 -07:00
Stefan Kerkmann
643f6367a1 [Fix] Patches after printf library update (#17584)
* Add missing '(' to print_bin_reverse32 declaration
* Fix insufficient character buffers on satisfaction75
* Remove \0 character in format string and use corrected offset math
  instead on rocketboard 16
* Replace snprintf_ with snprintf for djinn
* Explicitly ignore format checks for tracktyl manuform that uses %b
  specifier
* Print properly escaped version string in command.c, as PRODUCT or
  other defines can contain constructs like 'Vendor keyboard 66%' which
  will be interpreted as a format specifier
2022-07-07 14:14:09 +02:00
Stefan Kerkmann
8224f62806 Make debounce() signal changes in the cooked matrix as return value (#17554) 2022-07-07 10:00:40 +02:00
Albert Y
cca5d35321 Update PM2040 I2C pins (#17578) 2022-07-07 09:33:11 +02:00
Stefan Kerkmann
d9bb189e25 [Core] Update mpaland/printf to eyalroz/printf fork (#16163)
mpaland printf implementation was abandoned in ~2019 and the fork by
eyalroz is now regarded to be the goto replacement of it. So this commit
incoporates the changes needed to use this fork in QMK.

Note that pointer ptrdiff_t is always supported since commit
51c90f93a97fdaef895783ecbe24569be0db7cb8
2022-07-07 09:27:50 +02:00
QMK Bot
8f086faf8a Merge remote-tracking branch 'origin/master' into develop 2022-07-07 05:44:58 +00:00
Zykrah
0d30565bb7 Fix/waka60 audio (#17561) 2022-07-06 22:44:21 -07:00
Joel Challis
744af003be Add kb2040 and sparkfun rp2040 converters (#17514) 2022-07-06 19:27:15 +01:00
Nick Brassel
29a2bac469 Fixup SPI. (#17534) 2022-07-05 22:41:35 +02:00
Nick Brassel
0e5d67145a Allow for keymaps array to be implemented in a file other than $(KEYMAP_C) (#17559) 2022-07-05 08:58:35 +10:00
QMK Bot
5cad58dfa9 Merge remote-tracking branch 'origin/master' into develop 2022-07-04 20:49:23 +00:00
James Young
75bc9e6496 TKL Community Layout Additions (#17563) 2022-07-04 13:48:44 -07:00
QMK Bot
d37db0c50c Merge remote-tracking branch 'origin/master' into develop 2022-07-03 23:41:36 +00:00
Joel Challis
8fa7b62011 Attempt to discourage manual MSYS install for new users (#17556) 2022-07-04 00:41:00 +01:00
QMK Bot
e68205db1b Merge remote-tracking branch 'origin/master' into develop 2022-07-03 21:25:42 +00:00
James Young
9a157a3a99 KP Republic BM60HSRGB_EC QMK Configurator and readme touch-up (#17541) 2022-07-03 14:25:29 -07:00
stanrc85
b7fee11e34 [Userspace] Add support for additional Mechlovin Adelais PCB version to my userspace (#17547) 2022-07-03 14:25:09 -07:00
QMK Bot
63474e2c17 Merge remote-tracking branch 'origin/master' into develop 2022-07-03 18:08:32 +00:00
李董睿煊
168a631720 Add support for MacroCat Keyboard (#17480) 2022-07-03 19:07:31 +01:00
QMK Bot
7d89dfe2dc Merge remote-tracking branch 'origin/master' into develop 2022-07-03 04:12:32 +00:00
James Young
d87d537b50 Remove dead space from Pierce QMK Configurator layout data (#17551) 2022-07-03 14:12:01 +10:00
QMK Bot
6154c184a8 Merge remote-tracking branch 'origin/master' into develop 2022-07-03 04:11:21 +00:00
jack
665feccca1 Fixup bounce/75 (#17548) 2022-07-03 14:10:51 +10:00
QMK Bot
e8c46fab96 Merge remote-tracking branch 'origin/master' into develop 2022-07-03 02:56:16 +00:00
Drashna Jaelre
1c43410e26 [Keymap] Updates to drashna Keymaps and Userspace (#17543) 2022-07-02 19:55:46 -07:00
QMK Bot
03909b8a3f Merge remote-tracking branch 'origin/master' into develop 2022-07-02 23:54:45 +00:00
duoshock
a3119385a4 Add keyboard 'UM-80' (#17035) 2022-07-03 00:54:15 +01:00
QMK Bot
2d5047a79c Merge remote-tracking branch 'origin/master' into develop 2022-07-02 23:43:38 +00:00
jack
c5215d4a06 initial (#17545) 2022-07-03 00:43:29 +01:00
moyi4681
4ba5102a50 add bounce keyboard (#17030) 2022-07-03 00:43:07 +01:00
QMK Bot
c8a78b1f04 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 23:38:39 +00:00
TW59420
f2d4424bb7 Add alicekk support (#17027) 2022-07-03 00:38:02 +01:00
nirim000
fb40abe2f2 Pca9505/6 driver (#17333) 2022-07-03 00:37:02 +01:00
QMK Bot
ce29cb0f10 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 23:15:32 +00:00
br
fbf3cbcd5c Added PLOOPY_DRAGSCROLL_H_INVERT (#17453) 2022-07-03 00:13:45 +01:00
QMK Bot
4d243e94fa Merge remote-tracking branch 'origin/master' into develop 2022-07-02 23:12:20 +00:00
James Young
71f9a07b0f 65% Community Layout Updates (#17476)
* update 65_ansi community layout keymap

- add license header
- add function layer

* update 65_ansi_blocker community layout keymap

- add license header
- add function layer

* update 65_ansi_blocker_split_bs community layout keymap

- add license header
- add function layer

* update 65_ansi_blocker_tsangan community layout keymap

- add license header
- add function layer
- remove trailing spaces in keymap readme

* add 65_ansi_blocker_tsangan_split_bs community layout keymap

* update 65_ansi_split_bs community layout keymap

- add license header
- add function layer

* update 65_iso community layout keymap

- add license header
- add function layer
- fix layout box drawing on Community Layout readme

* update 65_iso_blocker community layout keymap

- add license header
- add function layer
- fix layout box drawing on Community Layout readme

* update 65_iso_blocker_split_bs community layout keymap

- add license header
- add function layer
- fix layout box drawing on Community Layout readme

* add 65_iso_blocker_tsangan community layout keymap

* add 65_iso_blocker_tsangan_split_bs community layout keymap

* update 65_iso_split_bs community layout keymap

- add license header
- add function layer
- fix layout box drawing on Community Layout readme
2022-07-03 00:12:02 +01:00
yiancar
6a0814bb04 Update NK1 RGB animation defines (#17486) 2022-07-03 00:11:48 +01:00
QMK Bot
4b7c01c84b Merge remote-tracking branch 'origin/master' into develop 2022-07-02 23:11:36 +00:00
Ralph Bacolod
3ed4a7086e Update readme.md (#17489)
Fixed link to http://mkweb.bcgsc.ca/carpalx/?popular_alternatives
2022-07-03 00:10:30 +01:00
QMK Bot
8744d57578 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 22:19:13 +00:00
Andrew Kannan
43e33ba232 Add Gentoo Hotswap PCB to QMK (#17528) 2022-07-02 23:18:43 +01:00
QMK Bot
5f11d7b554 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 22:18:33 +00:00
Andrew Kannan
2011aec06f Add Gentoo Solderable PCB to QMK (#17527) 2022-07-02 23:17:53 +01:00
QMK Bot
ba1f184267 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 19:10:40 +00:00
stanrc85
bb1edf6676 [Userspace] Add Nasu to userspace code (#17524)
* Define Nasu indicator pins in userspace

* Add userspace indicator code to Nasu
2022-07-02 20:10:07 +01:00
QMK Bot
a41c5d8023 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 19:09:55 +00:00
Ciutadellla
4804b73540 Update info.json (#17530)
Change to correct keyboard name from reviung31 to reviung41
2022-07-02 20:09:21 +01:00
QMK Bot
6c7d549e31 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 18:10:05 +00:00
Evelien Dekkers
40d295abf6 [Keyboard] Add nt-650 (#17471)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-02 11:09:26 -07:00
QMK Bot
efd41fe9df Merge remote-tracking branch 'origin/master' into develop 2022-07-02 17:51:26 +00:00
James Young
18a1cbce75 Mikeneko 65 QMK Configurator touch-up and Community Layout Support (#17542)
* info.json: apply friendly formatting

* info.json: remove dead space from Configurator rendering

* rename LAYOUT_all to LAYOUT_65_ansi_blocker

* rules.mk: enable Community Layout support
2022-07-02 18:50:54 +01:00
Nick Brassel
f346c8400c Update ChibiOS-Contrib (#17540) 2022-07-03 00:47:28 +10:00
QMK Bot
36de989e6f Merge remote-tracking branch 'origin/master' into develop 2022-07-02 14:32:39 +00:00
James Young
9b8ae05796 Correct QMK Configurator layout data for Kin80 (#17526) 2022-07-03 00:32:09 +10:00
QMK Bot
b56edb5f11 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 14:23:42 +00:00
Nick Brassel
b9a6126518 Revert "[Keyboard]KPrepublic bm80v2 Keyboard ISO support " (#17537) 2022-07-03 00:23:21 +10:00
Nick Brassel
1b9491f8f3 Fixup builds for TzCI (#17538) 2022-07-03 00:23:08 +10:00
Nick Brassel
ea14a93718 Merge remote-tracking branch 'upstream/master' into develop 2022-07-03 00:16:33 +10:00
Ryan
ac5e6b6a3b Tentative Teensy 3.5 support (#14420)
* Tentative Teensy 3.5 support

* Set firmware format to .hex for ARM Teensys

* Got to "device descriptor failed" by comparing with Teensy 3.6 code

* Drop down to 96MHz...

* Bump back up to 120MHz
2022-07-03 00:12:45 +10:00
bruun-baer
5108d53169 Add a workman-miryoku hybrid keymap for the ferris sweep keyboard (#17511) 2022-07-03 00:11:53 +10:00
gourdo1
97dfdcb2bd [keymap] Update gourdo1 keymap for Q2 changes (#17398) 2022-07-03 00:11:26 +10:00
QMK Bot
11299b337b Merge remote-tracking branch 'origin/master' into develop 2022-07-02 14:10:26 +00:00
HorrorTroll
d694488e2e Added new keyboard KB16-01 (#17418) 2022-07-03 00:08:38 +10:00
Ryan
25033d5d9e MSYS2 install: use MinGW python-qmk package (#17302)
* MSYS2 install: use MinGW python-qmk package

* Add missing flashers

* Note VC Redist for manual install

* VC Redist no longer needed
2022-07-02 15:08:05 +01:00
QMK Bot
f083eb1a37 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 14:07:53 +00:00
IFo Hancroft
1cffe5b6ce My ErgoDox Keymap (finally perfected, I think) (#17208)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-03 00:06:23 +10:00
QMK Bot
61eca0c972 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 14:06:19 +00:00
TJ
7c64a2bcaa Add BigBoy macro pad (#16962)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-03 00:05:44 +10:00
QMK Bot
7de801ed9a Merge remote-tracking branch 'origin/master' into develop 2022-07-02 14:05:18 +00:00
Khairullah
81b7d6f67f [Keyboard] Add Support to Ducky One2 SF (#17260) 2022-07-03 00:04:46 +10:00
QMK Bot
3871c717da Merge remote-tracking branch 'origin/master' into develop 2022-07-02 14:01:44 +00:00
npspears
60ab61386e add rotary encoder support for Quark^2 (#17470) 2022-07-03 00:01:08 +10:00
Drashna Jaelre
0c74892e90 [Keyboard] Update Charybdis code for Extended Mouse reports (#17435) 2022-07-02 23:58:40 +10:00
QMK Bot
326d3ffad8 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 13:14:58 +00:00
Yizhen Liu
5ac71ef27a [Keyboard]KPrepublic bm80v2 Keyboard ANSI support (#17192)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 23:14:27 +10:00
QMK Bot
1bf67b808d Merge remote-tracking branch 'origin/master' into develop 2022-07-02 13:13:58 +00:00
Guilherme Bermêo
2aa4f7cf61 add crkbd/keymaps/bermeo (#17320)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 23:13:28 +10:00
QMK Bot
d9e311ad30 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 13:09:54 +00:00
zv0n
783d1cd458 [keyboard] annepro2 Add support for sticky keys (#17359) 2022-07-02 23:09:21 +10:00
QMK Bot
c1d9f9911c Merge remote-tracking branch 'origin/master' into develop 2022-07-02 13:08:54 +00:00
Nick Brassel
7e926f5c93 Cleanup post-#17314. (#17536) 2022-07-02 23:08:39 +10:00
Vega Deftwing
e25879e836 [keymap] Add tiny text, full width characters to Ergodone->Vega (#17427) 2022-07-02 23:08:18 +10:00
QMK Bot
414a387f22 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:53:52 +00:00
DeskDaily
d66b5db1d6 Added 3 new keyboards (#17314)
Co-authored-by: Neil Brian Ramirez <nightlyboards@gmail.com>
2022-07-02 22:53:01 +10:00
QMK Bot
84d9996b6d Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:51:09 +00:00
Radliński Ignacy
5a727dbc6d feat(keymap): add keebio/iris/rev6/radlinskii keymap (#17216)
Co-authored-by: ignacy-radlinski <ignacy.radlinski@schibsted.com>
2022-07-02 22:50:31 +10:00
QMK Bot
a6faf3bc9e Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:49:52 +00:00
CoffeeIsLife
0365f640af Allow for RGB actions to take place on Keydown instead of Keyup (#16886)
* Allow for switch on keydown

* add docs
2022-07-02 22:49:49 +10:00
QMK Bot
fcc14b8838 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:49:19 +00:00
ripdog
4e35697e1a Add note about qmk doctor in newbs_flashing.md (#15688)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:48:44 +10:00
Vino Rodrigues
ec6875af56 [Keyboard] New IDOBAO ID63 (a.k.a. Denwir D60) (#17144)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:46:42 +10:00
QMK Bot
bf44fc81bd Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:44:27 +00:00
InonL
feea704da7 Added VIA support for Drop CTRL (#17336)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:42:45 +10:00
QMK Bot
5f16a4ec62 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:42:41 +00:00
Murali S
0c84dd6bdc Add keymaps for muralis and kuru (#17337)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Sree Vidya Sobha Dharmarajan <ssd@Srees-MacBook-Pro.local>
2022-07-02 22:42:13 +10:00
QMK Bot
fd883890af Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:41:39 +00:00
spooknik
3059d7883c Swift65 Hotswap Support (#16987)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Steven Phillips <steven.phillips.17@me.com>
2022-07-02 22:41:32 +10:00
QMK Bot
90ad47b1f2 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:41:05 +00:00
jpe230
07f6fba6de Add Jpe230 Preonic Keymap (#17331) 2022-07-02 22:40:24 +10:00
Minke Zhang
4a3e0ef9ab Add personal YMDK Split64 keymap (#16980)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:39:31 +10:00
QMK Bot
f996a4c5b7 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:38:02 +00:00
Jairo Ramírez Ávila
56ecc86482 Added oriaj3 keymap with Matrix RGB support for Kimiko keyboard. (#17103)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:37:29 +10:00
QMK Bot
6285a1c0d3 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:37:05 +00:00
Wolf Van Herreweghe
627f9321a8 Add base Ryujin firmware (#17187)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Wolf Van Herreweghe <wolfvh@getupgamesofficial.com>
2022-07-02 22:36:32 +10:00
Vino Rodrigues
882eadd94d [Keyboard] IDOBAO ID67 code touch-ups and include factory keymap (#17231) 2022-07-02 22:35:37 +10:00
Vino Rodrigues
7a5f76d40a [Keyboard] IDOBAO ID87v2 code rewrite and include factory keymap (#17232) 2022-07-02 22:32:32 +10:00
Vino Rodrigues
4aca94d247 [Keyboard] IDOBAO ID80v3 code rewrite and include factory keymap (#17234) 2022-07-02 22:31:38 +10:00
QMK Bot
7a8a4b1938 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:21:26 +00:00
Nick Brassel
3b14383f48 Fix line endings. 2022-07-02 22:20:30 +10:00
-k
5699763d4c Update massdrop/alt:charlesrocket (#17297)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:19:35 +10:00
QMK Bot
5c5610074a Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:19:26 +00:00
jels
ac333016eb Add ATmega32u2 Support to HHKB (#17298) 2022-07-02 22:18:56 +10:00
QMK Bot
fa0aea2a5a Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:18:55 +00:00
David Kristoffersen
a80943579c [Keymap] Add prog_qgmlwb keymap (#16890) 2022-07-02 22:18:21 +10:00
QMK Bot
65832c0fc3 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:17:12 +00:00
Jean Bernard
ef633cf461 Added MS Sculpt ISO-layout conversion with STM32F401 (#17049) 2022-07-02 22:16:38 +10:00
Marek Wyborski
b8e8a20ca6 Improve ENCODER_DEFAULT_POS to recognize lost ticks (#16932) 2022-07-02 22:12:41 +10:00
Ryan
3ecb0a80af Feature-ify Send String (#17275) 2022-07-02 22:10:08 +10:00
QMK Bot
7e41eb0277 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:09:58 +00:00
Osamu Aoki
871eeae4ea PoC: Swap Escape and Caps (#16336) 2022-07-02 22:08:48 +10:00
foureight84
9c2505676c foureight84 keymap for sofle (#17246)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:08:13 +10:00
QMK Bot
c7d8adfeaa Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:08:11 +00:00
Will Winder
f03aec28fb [Keyboard] Add Avalanche v4 (#17288)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:07:35 +10:00
QMK Bot
5d711c89c3 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:07:22 +00:00
Yizhen Liu
c3ef70b9a6 [Keyboard]KPrepublic bm80v2 Keyboard ISO support (#17193)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 22:06:38 +10:00
QMK Bot
ca0a9d243c Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:03:45 +00:00
torkel104
8b78fac451 Fix keys being discarded after using the leader key (#17287) 2022-07-02 22:03:40 +10:00
Aidan Gauland
8c4a5f9ba2 Add lkbm keymap (#17218) 2022-07-02 22:03:11 +10:00
QMK Bot
08721b4125 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:00:37 +00:00
jack
ee26d3e77f Add Zsh note for tab complete (#17226) 2022-07-02 21:59:59 +10:00
QMK Bot
5d1bc92c64 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:58:55 +00:00
PixelSpaceStudio
a80461e264 Add pixelspace user space and capsule65i keyboard (#17235) 2022-07-02 21:58:00 +10:00
Jouke Witteveen
0112938140 Expose the time of the last change to the LED state (#17222) 2022-07-02 21:57:05 +10:00
mmccoyd
2af2c5e109 [Keyboard] Move/Rename to Hillside48, simplify default keymap (#17210)
Co-authored-by: mmccoyd <mmccoyd@cs.berkley.edu>
2022-07-02 21:56:23 +10:00
QMK Bot
a7179b188d Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:55:42 +00:00
Watson
48721b20fc Updated revisions and added a keyboard (#16731)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: WestM <93159069+WestMProducts@users.noreply.github.com>
2022-07-02 21:55:10 +10:00
Joel Challis
59e28b8958 Add cli command to import keyboard|keymap|kbfirmware (#16668) 2022-07-02 21:50:09 +10:00
FREEWING.JP
9dc7b9d40c Added Wait time to sending each Keys for Dynamic Macros function (#16800)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-07-02 21:48:26 +10:00
QMK Bot
0856b36139 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:47:16 +00:00
anubhav dhiman
c725f6f768 Add new keyboard AT3 (#17431)
Co-authored-by: zvecr <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-02 21:46:29 +10:00
QMK Bot
c679decb2b Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:45:40 +00:00
spx01
2f11509465 spx01 keymap for the kbd67mkiirgb (#17012) 2022-07-02 21:44:58 +10:00
QMK Bot
6b21f8369e Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:44:07 +00:00
Nick Krichevsky
69f0fc5868 Add workaround to allow Sesame to work without atomic interactions (#17034) 2022-07-02 21:43:36 +10:00
QMK Bot
6f1eca9c7b Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:43:17 +00:00
Xelus22
f8a56cd638 [Keyboard] RS108 Addition (#16989) 2022-07-02 21:42:48 +10:00
QMK Bot
05074cbdf0 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:27:40 +00:00
Josh Hinnebusch
096db8c8ca Add LED backlight/indicator info to reference_info_json.md (#17010)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-07-02 21:27:34 +10:00
Gardego5
6fce400ef5 Ut47.2 gardego5 layout (#16955) 2022-07-02 21:27:08 +10:00
QMK Bot
a949d32072 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:26:57 +00:00
Manna Harbour
3842b15cf1 [Keymap] Update Miryoku (#16482) 2022-07-02 21:26:23 +10:00
QMK Bot
5d8b6847c7 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:23:33 +00:00
Daniil Iastremskii
f2f88bcfcc Add elephant42 keyboard (#14336) 2022-07-02 21:22:51 +10:00
Nick Brassel
a9af4c928e Merge remote-tracking branch 'upstream/master' into develop 2022-07-02 21:13:06 +10:00
Batuhan Baserdem
fd44341cbf Userspace and keymap update for user bbaserdem. (#14484) 2022-07-02 21:09:04 +10:00
QMK Bot
92c0b29be9 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 11:01:36 +00:00
Kan-Ru Chen
f439fe6055 HHKB YDKB Yang BT Controller (#15759)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-07-02 21:01:03 +10:00
QMK Bot
e3cad4045a Merge remote-tracking branch 'origin/master' into develop 2022-07-02 10:57:59 +00:00
Taeyoon Kim
0eab24be26 Adding 34keys layout for kprepublic bm40 keyboard. (#15974) 2022-07-02 20:57:12 +10:00
QMK Bot
93e657fa99 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 10:55:05 +00:00
moyi4681
578a3e3505 add baguette66 keyboard (#16429)
* add baguette66 keyboard

* Update keyboards/kbdfans/baguette66/soldered/config.h

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/kbdfans/baguette66/rgb/config.h

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-02 20:54:22 +10:00
Nick Brassel
5846b40f74 RP2040 emulated EEPROM. (#17519) 2022-07-02 15:18:50 +10:00
Nick Brassel
9f1c4f304d Fixup #17438 (#17533) 2022-07-02 14:29:45 +10:00
QMK Bot
3def7b98d4 Merge remote-tracking branch 'origin/master' into develop 2022-07-02 03:23:21 +00:00
Nick Brassel
c8fbfca1b6 [QP] Explicit buffer alignment. (#17532) 2022-07-02 13:22:46 +10:00
Nick Brassel
b67ae67687 [QP] Add ILI9488 support. (#17438) 2022-07-02 13:20:45 +10:00
QMK Bot
d6c39490df Merge remote-tracking branch 'origin/master' into develop 2022-07-01 21:21:11 +00:00
Joel Challis
9d70162d53 Allow locate_keymap to handle DEFAULT_FOLDER (#17529) 2022-07-01 22:20:32 +01:00
QMK Bot
a61e549a31 Merge remote-tracking branch 'origin/master' into develop 2022-07-01 14:39:35 +00:00
Joel Challis
2757251218 Specify blackpill board files where relevant (#17521) 2022-07-01 15:38:57 +01:00
QMK Bot
dfb23456b1 Merge remote-tracking branch 'origin/master' into develop 2022-07-01 14:36:43 +00:00
Joel Challis
d978432812 Swap over F4x1 8MHz HSE boards over from blackpill board files (#17520) 2022-07-01 15:36:08 +01:00
QMK Bot
03630db506 Merge remote-tracking branch 'origin/master' into develop 2022-07-01 06:11:45 +00:00
yiancar
1e643ba1d1 [Keyboard] Nebula12b (#17308)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: yiancar <yiancar@gmail.com>
2022-06-30 23:11:13 -07:00
QMK Bot
5936e05a33 Merge remote-tracking branch 'origin/master' into develop 2022-07-01 03:02:42 +00:00
Jan Lindblom
38ca5e95e1 Adding Rev41lp keyboard (#15895)
* [keyboard] Add rev41lp

* [keymap] rev41lp: More layer, less clutter

* [keymap] rev41lp:whitespace cleanup

* [keymap] rev41lp: Remove outer shift & edit homerow timings

left-ctrl < left-shift
kc-enter < kc-sftent
lower + tab = grave
raise + tab = tilde

* Initial namnlos keymap for rev41lp.

* Updated according to PR checklist.

* Update keyboards/b_sides/rev41lp/config.h

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Update keyboards/b_sides/rev41lp/keymaps/default/keymap.c

Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>

* Updated to fulfill PR checklist.

* Update keyboards/b_sides/rev41lp/info.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/cyril/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/cyril/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/keymap.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Adding picture.

* Rename README.md to readme.md

* Cleaning up in rules.mk.

* Moving en- and em-dash from dedicated keys.

* Readme fixup.

There was a typo in the title, also changed the description a little.

* Update keyboards/b_sides/rev41lp/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/b_sides/rev41lp/keymaps/namnlos/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: cyril279 <cyril.x9@gmail.com>
Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-07-01 13:02:07 +10:00
QMK Bot
2f2d3e9c7b Merge remote-tracking branch 'origin/master' into develop 2022-06-30 22:40:36 +00:00
James Young
f2f2a7ace9 Add missing QMK Configurator layout data for chlx str.merro60 (#17518)
* add LAYOUT_60_ansi_split_bs_rshift layout data

* add LAYOUT_60_iso layout data
2022-06-30 23:39:49 +01:00
Joel Challis
a98f69850f Also check /run/media/ for uf2 drives (#17517) 2022-06-30 23:29:56 +01:00
QMK Bot
e5a15f404d Merge remote-tracking branch 'origin/master' into develop 2022-06-30 19:10:51 +00:00
James Young
c1d4950938 Add QMK Configurator layout data for ADM42 rev4 (#17515) 2022-06-30 20:10:15 +01:00
Stefan Kerkmann
77d960cce3 Disable clang-format for stage2_bootloaders (#17516) 2022-06-30 20:07:54 +01:00
Stefan Kerkmann
d717396708 [Core] Add Raspberry Pi RP2040 support (#14877)
* Disable RESET keycode because of naming conflicts

* Add Pico SDK as submodule

* Add RP2040 build support to QMK

* Adjust USB endpoint structs for RP2040

* Add RP2040 bootloader and double-tap reset routine

* Add generic and pro micro RP2040 boards

* Add RP2040 onekey keyboard

* Add WS2812 PIO DMA enabled driver and documentation

Supports regular and open-drain output configuration. RP2040 GPIOs are
sadly not 5V tolerant, so this is a bit use-less or needs extra hardware
or you take the risk to fry your hardware.

* Adjust SIO Driver for RP2040

* Adjust I2C Driver for RP2040

* Adjust SPI Driver for RP2040

* Add PIO serial driver and documentation

* Add general RP2040 documentation

* Apply suggestions from code review

Co-authored-by: Nick Brassel <nick@tzarc.org>

Co-authored-by: Nick Brassel <nick@tzarc.org>
2022-06-30 13:19:27 +02:00
jpe230
d206c1791e (develop)Keychron Q2: Enable support for WL EEPROM Driver (#17507) 2022-06-30 12:25:33 +10:00
jpe230
4f124574f1 (develop)AP2: Enable support for WL EEPROM Driver (#17506) 2022-06-30 11:07:43 +10:00
QMK Bot
fb05b491e7 Merge remote-tracking branch 'origin/master' into develop 2022-06-29 23:34:39 +00:00
Joel Challis
7326a0051b Allow module check to error out when piped to /dev/null (#17505) 2022-06-30 00:33:59 +01:00
Nick Brassel
34e244cecf Wear-leveling EEPROM drivers: embedded_flash, spi_flash, legacy (#17376) 2022-06-30 07:42:23 +10:00
ihatechoosingusernames
1204cbb7ea Update feature_split_keyboard.md to add extra detail about left and right matrices. (#17492) 2022-06-29 18:39:37 +10:00
Dasky
dcdc7290e5 RGB Matrix Heatmap - Skip positions with NO_LED (#17488) 2022-06-29 01:25:03 -07:00
QMK Bot
f7eb7926e8 Merge remote-tracking branch 'origin/master' into develop 2022-06-29 08:17:56 +00:00
Drashna Jaelre
74bec84740 [Bug] Fix 3 speed mousekey mode (#17500) 2022-06-29 01:16:31 -07:00
QMK Bot
0151f4c307 Merge remote-tracking branch 'origin/master' into develop 2022-06-29 06:45:13 +00:00
dependabot[bot]
88086a80b0 Bump JamesIves/github-pages-deploy-action from 3.7.1 to 4.3.4 (#17497)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 3.7.1 to 4.3.4.
- [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases)
- [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/3.7.1...v4.3.4)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-29 16:45:09 +10:00
dependabot[bot]
58f4e19503 Bump actions/checkout from 2 to 3 (#17496)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-29 16:44:54 +10:00
dependabot[bot]
b37a59a967 Bump peter-evans/create-pull-request from 3 to 4 (#17495)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-29 16:44:19 +10:00
QMK Bot
1f61fb33b4 Merge remote-tracking branch 'origin/master' into develop 2022-06-28 22:47:17 +00:00
Nick Brassel
2b094d4112 Enable dependabot for actions. 2022-06-29 08:46:47 +10:00
QMK Bot
2daad28ab1 Merge remote-tracking branch 'origin/master' into develop 2022-06-28 22:29:19 +00:00
Drashna Jaelre
43f8d365ba [Bug] Fix issue with mousekey movement getting stuck (#17493)
* [Bug] Fix issue with mousekey movement getting stuck

* Lint
2022-06-28 15:28:44 -07:00
QMK Bot
54383674db Merge remote-tracking branch 'origin/master' into develop 2022-06-28 22:14:09 +00:00
Nick Brassel
1e402060a6 Bump revision for auto-tagging.
Seems there was an error, but it wasn't failing the actions run.

https://github.com/anothrNick/github-tag-action/releases/tag/1.39.0
2022-06-29 08:13:38 +10:00
QMK Bot
33b62b6867 Merge remote-tracking branch 'origin/master' into develop 2022-06-26 22:59:06 +00:00
Joel Challis
fa3dd373b4 Fix error message in generated code (#17484) 2022-06-27 08:58:31 +10:00
Nick Brassel
01ecf332ff Generic wear-leveling algorithm (#16996)
* Initial import of wear-leveling algorithm.

* Alignment.

* Docs tweaks.

* Lock/unlock.

* Update quantum/wear_leveling/wear_leveling_internal.h

Co-authored-by: Stefan Kerkmann <karlk90@pm.me>

* More tests, fix issue with consolidation when unlocked.

* More tests.

* Review comments.

* Add plumbing for FNV1a.

* Another test checking that checksum mismatch clears the cache.

* Check that the write log still gets played back.

Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2022-06-27 07:18:21 +10:00
Thomas Kriechbaumer
0d013a21e1 [Split] Verify Split Pointing Device config (#17481) 2022-06-26 09:15:25 -07:00
Thomas Kriechbaumer
01bc974365 improvements for Cirque Pinnacle trackpads (#17091) 2022-06-25 22:22:28 +02:00
QMK Bot
60cbb25148 Merge remote-tracking branch 'origin/master' into develop 2022-06-25 19:46:15 +00:00
rooski15
410686dc03 [Keyboard] Add blockboy/ac980mini keyboard (#16839)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-25 12:45:45 -07:00
QMK Bot
99614bd89a Merge remote-tracking branch 'origin/master' into develop 2022-06-25 19:41:30 +00:00
precondition
e13bb58c40 Only omit paths containing "/keymaps/" (#17468)
This allows keyboard names to contain the word "keymaps"
2022-06-25 20:40:49 +01:00
QMK Bot
e30cd0fa16 Merge remote-tracking branch 'origin/master' into develop 2022-06-25 19:35:17 +00:00
Drashna Jaelre
7fd3d76faa [Split] Ensure SOFT_SERIAL_PIN is defined if USE_I2C isn't defined (#17466) 2022-06-25 12:34:40 -07:00
QMK Bot
c43e89bb4a Merge remote-tracking branch 'origin/master' into develop 2022-06-25 19:15:48 +00:00
jack
cbbdcec290 [Keyboard] Fixup skergo - missing keycode in keymaps (#17458) 2022-06-25 12:15:00 -07:00
QMK Bot
3c9f27e1c9 Merge remote-tracking branch 'origin/master' into develop 2022-06-24 22:03:10 +00:00
Evelien Dekkers
31dfdaa1ba [Keyboard] Fix firmware size for via keymap on Atom47 (#17472) 2022-06-24 15:02:33 -07:00
precondition
3b9e186019 Do not enable PERMISSIVE_HOLD when TAPPING_TERM exceeds 500ms (#15674) 2022-06-24 12:40:09 +02:00
QMK Bot
0e60b3a620 Merge remote-tracking branch 'origin/master' into develop 2022-06-24 04:11:58 +00:00
Nick Brassel
a8677ed296 Fix up Djinn fuse handling. (#17465) 2022-06-24 14:11:06 +10:00
precondition
7060cb7b26 Refactor steno and add STENO_PROTOCOL = [all|txbolt|geminipr] (#17065)
* Refactor steno into STENO_ENABLE_[ALL|GEMINI|BOLT]

* Update stenography documentation

* STENO_ENABLE_TXBOLT → STENO_ENABLE_BOLT

TXBOLT is a better name but BOLT is more consistent with the
pre-existing TX Bolt related constants, which all drop the "TX " prefix

* Comments

* STENO_ENABLE_[GEMINI|BOLT|ALL] → STENO_PROTOCOL = [geminipr|txbolt|all]

* Add note on lacking V-USB support

* Clear chord at the end of the switch(mode){send_steno_chord} block

* Return true if NOEVENT

* update_chord_xxx → add_xxx_key_to_chord

* Enable the defines for all the protocols if STENO_PROTOCOL = all

* Mention how to use `steno_set_mode`

* Set the default steno protocol to "all"

This is done so that existing keymaps invoking `steno_set_mode` don't
all suddenly break

* Add data driver equivalents for stenography feature

* Document format of serial steno packets

(Thanks dnaq)

* Add missing comma
2022-06-23 20:43:24 +02:00
SmugSam
2239527871 In honor of king terry (#17387) 2022-06-23 02:47:15 +01:00
QMK Bot
32792826a8 Merge remote-tracking branch 'origin/master' into develop 2022-06-23 01:26:43 +00:00
David Kosorin
71472a1692 Update ref_functions.md (replaced deprecated RESET) (#17436) 2022-06-23 02:26:08 +01:00
QMK Bot
25b5c2c538 Merge remote-tracking branch 'origin/master' into develop 2022-06-23 01:23:52 +00:00
Dasky
aaaf3ff66a Fix 0 delta results in size_regression.sh (#17457) 2022-06-23 11:23:13 +10:00
Jamal Bouajjaj
d3858585ac Added global current to all other issi drivers who don't have it (#17448) 2022-06-23 02:16:39 +01:00
QMK Bot
a0f857b7a2 Merge remote-tracking branch 'origin/master' into develop 2022-06-23 01:16:12 +00:00
James Young
666cba5c2e Cf/evyd13 wasdat (#17452)
* evyd13/wasdat: add LAYOUT_all Configurator data

* info.json: fix JSON syntax errors
2022-06-23 02:15:38 +01:00
QMK Bot
2f9145c6ea Merge remote-tracking branch 'origin/master' into develop 2022-06-23 00:52:50 +00:00
Salicylic-acid3
47fcb40a81 [Keyboard] Fix RGB_matrix coordinates for gl516/j73gl (#17450) 2022-06-22 17:52:16 -07:00
QMK Bot
b02f178c06 Merge remote-tracking branch 'origin/master' into develop 2022-06-23 00:39:54 +00:00
Kevin Zhao
8ea836f2b2 [Keyboard] Update SKErgo for hardware changes (#17449)
Co-authored-by: kevinzhao-tech <kevin@keyz.io>
2022-06-22 17:39:19 -07:00
Stefan Kerkmann
9aa9155e88 [Core] Mark GD32VF103 as ChibiOS-Contrib (#17444) 2022-06-23 08:37:40 +10:00
Kyle McCreery
eac0f6d4c9 Cirque Attenuation Setting (#17342) 2022-06-22 21:59:37 +02:00
QMK Bot
2e27eb318e Merge remote-tracking branch 'origin/master' into develop 2022-06-22 16:41:19 +00:00
James Young
0a04064362 Chaos 65 Community Layout Support (#17447)
* move ISO Enter position to home row

This commit makes the ISO layout macros compatible with QMK's `65_iso_blocker` and `65_iso_blocker_tsangan` community layouts.

* info.json: apply friendly formatting

- add key labels
- add line breaks between physical rows

* enable Community Layout support

* chaos65.h: add matrix diagram
2022-06-22 09:40:48 -07:00
QMK Bot
8ea9f13c67 Merge remote-tracking branch 'origin/master' into develop 2022-06-22 14:30:56 +00:00
James Young
27f9e4775e Checkerboards SNOP60 Refactor (#17446) 2022-06-22 07:29:47 -07:00
QMK Bot
b450ffc5c6 Merge remote-tracking branch 'origin/master' into develop 2022-06-22 05:10:58 +00:00
Greg Dietsche
701db278e4 [Keymap] farmergreg's kint41 Kinesis Advantage 2 Layout (#16784) 2022-06-21 22:10:17 -07:00
QMK Bot
267864e42c Merge remote-tracking branch 'origin/master' into develop 2022-06-22 02:15:13 +00:00
Muhammad Rivaldi
46644b0a64 [Keyboard] Add n60a pcb (#17273)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-21 19:14:36 -07:00
QMK Bot
86bfd8195c Merge remote-tracking branch 'origin/master' into develop 2022-06-22 01:53:38 +00:00
paulgali
3e9f000a97 [Keyboard] Zeno 60% Ergo PCB (#17403)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-21 18:53:04 -07:00
Daniel Kao
608404f874 Fix AVR I2C master 1ms timeout (#17174)
* avr i2c_master: Fix 1ms timeout

i2c_start() produces a minimum time_slice of 1ms for use as timeout
value.
The timer granularity is 1ms, it is entirely possible for timer_count
to tick up immediately after the last timer read and falsely trigger
timeout with a '>= 1' comparison.

* avr/drivers/i2c_master: Use timer_elapsed()
2022-06-22 00:00:04 +02:00
Dasky
be42c5fb98 Fix RGB heatmap to use XY positions and use correct led limits (#17184)
* Fix RGB heatmap to use XY positions

* lower effect area limit and make configurable

* tidy up macro

* Fix triggering in both directions.

* add docs

* fix bug when decreasing value

* performance tweak
2022-06-21 10:53:34 -07:00
QMK Bot
2d7a2dfad0 Merge remote-tracking branch 'origin/master' into develop 2022-06-21 15:50:58 +00:00
Joel Challis
de4262f9aa Add missing snop60 default keymap (#17443) 2022-06-21 16:49:58 +01:00
QMK Bot
65fcf951d3 Merge remote-tracking branch 'origin/master' into develop 2022-06-21 12:23:46 +00:00
James Young
03d0182541 alt34 rev1: Configurator Compilation Fix (#17442)
* move USE_I2C and EE_HANDS definitions to keyboard level

Allow this keyboard to be compiled by QMK Configurator.

* remove redundant DEFAULT_FOLDER rule
2022-06-21 13:22:53 +01:00
QMK Bot
d116cf5e9a Merge remote-tracking branch 'origin/master' into develop 2022-06-21 03:42:15 +00:00
bbrfkr
c2e5953bc1 [Keyboard] add dynamis keyboard (#15994)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-20 20:41:46 -07:00
QMK Bot
2b23ca876d Merge remote-tracking branch 'origin/master' into develop 2022-06-21 03:34:03 +00:00
alabbe9545
84718c0ab7 [Keyboard] Add labbeminiv1 (#16401)
* [Keyboard] Add labbeminiv1

* Adjust vendor id

The used vendor id was in use

* Remove comment in the rgb keymap

* Update keyboards/labbe/labbeminiv1/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Rename rgb matrix keymap folder

Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-20 20:33:29 -07:00
QMK Bot
503b40e748 Merge remote-tracking branch 'origin/master' into develop 2022-06-21 03:25:43 +00:00
Ryan Baker
712f6cf450 [Keyboard] Add rb18 keyboard (#17306) 2022-06-20 20:24:58 -07:00
QMK Bot
52c1517766 Merge remote-tracking branch 'origin/master' into develop 2022-06-21 03:16:43 +00:00
Ramon Imbao
7b7fb63f4b [Keyboard] Add Nayeon by Abats Keyboard Club (#16659)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2022-06-20 20:16:13 -07:00
Joel Challis
1a400d8644 Allow encoder config from info.json (#17295) 2022-06-20 20:15:06 -07:00
QMK Bot
4c39bad2e6 Merge remote-tracking branch 'origin/master' into develop 2022-06-21 03:12:14 +00:00
Albert Y
c114996034 [Keyboard] Add more bootloader options for id75 (#17441) 2022-06-20 20:11:37 -07:00
QMK Bot
a6eeb930ae Merge remote-tracking branch 'origin/master' into develop 2022-06-21 02:24:10 +00:00
Wolf Van Herreweghe
3077123bf0 [Keyboard] Add base FAve65H firmware (#17147)
Co-authored-by: Wolf Van Herreweghe <wolfvh@getupgamesofficial.com>
2022-06-20 19:23:50 -07:00
Wolf Van Herreweghe
1c26c0bc9b [Keyboard] Update firmware for the FAve 87H (#16920)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Wolf Van Herreweghe <wolfvh@getupgamesofficial.com>
2022-06-20 19:23:34 -07:00
QMK Bot
3370e2b74d Merge remote-tracking branch 'origin/master' into develop 2022-06-21 02:23:27 +00:00
Wolf Van Herreweghe
e8e45bca98 [Keyboard] Update FAve 84H RGB firmware (#16919)
* Add base FAve 84H firmware

* Update keyboards/linworks/fave84h/readme.md

Thank you, apologies for the oversight

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/linworks/fave84h/keymaps/via/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/linworks/fave84h/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Move LED config in ifdef

* update read me

* Update Product Name

* Update keyboards/linworks/fave84h/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Add Via RGB Matrix Control

* Add base FAve 84H firmware

* Add Via RGB Matrix Control

* fix merge conflict

* reduce max brightness

* remove action macro and action function

Co-authored-by: Joel Challis <git@zvecr.com>

* Remove / update code to work with the build in QMK via hack

* Update Read me

* Add newline at end of rules

Co-authored-by: Wolf Van Herreweghe <wolfvh@getupgamesofficial.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-20 19:22:53 -07:00
Nick Brassel
589e756e98 Fixup SPI mode 3 => 0 on tzarc/djinn. (#17440) 2022-06-21 10:56:47 +10:00
QMK Bot
2fb24c0298 Merge remote-tracking branch 'origin/master' into develop 2022-06-21 00:53:03 +00:00
evils
0a45a19801 [Docs] clarify inner array of direct pin matrix (#17437) 2022-06-21 01:52:11 +01:00
QMK Bot
93ee789387 Merge remote-tracking branch 'origin/master' into develop 2022-06-21 00:26:40 +00:00
bomb
5ab90cc72a [Keyboard] Add tegic for melgeek! (#17400)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-20 17:26:08 -07:00
Stefan Kerkmann
6a81cb44f2 [Fix] Fix compilation warning for non-split keebs after #17423 (#17439) 2022-06-21 09:31:20 +10:00
Stefan Kerkmann
2703ecc9e9 [BUG] Fix deadlocks on disconnected secondary half (#17423) 2022-06-21 08:24:53 +10:00
Dasky
62eaec52e0 Init eeconfig before reading handedness (#17256) 2022-06-20 15:31:27 +01:00
QMK Bot
36d60769f8 Merge remote-tracking branch 'origin/master' into develop 2022-06-20 04:21:32 +00:00
Nick Brassel
aa06893b58 Add Djinn. (#17382)
* Add Djinn.

* Review comments.

* Further cleanup.
2022-06-20 14:20:56 +10:00
Jamal Bouajjaj
2bddffeaec IS31FL3737 Global Current Setting (#17420) 2022-06-19 14:32:37 -07:00
QMK Bot
4e3db51e92 Merge remote-tracking branch 'origin/master' into develop 2022-06-19 18:17:00 +00:00
anubhav dhiman
ad2e853611 [Keyboard] add at6 keyboard (#17346)
Co-authored-by: zvecr <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-19 11:16:24 -07:00
Albert Y
c725b6bf89 [Core] Mouse key kinetic mode fix (#17176)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-19 11:15:55 -07:00
QMK Bot
d6eff188e9 Merge remote-tracking branch 'origin/master' into develop 2022-06-19 17:59:31 +00:00
Markus Weimar
7982957f75 [Keymap] Update XD75 keymap by markus (#17417) 2022-06-19 10:59:00 -07:00
QMK Bot
7f8886a1b7 Merge remote-tracking branch 'origin/master' into develop 2022-06-18 22:32:54 +00:00
coliss86
fd01feae4b Add a note about using differents MCU family (#17416) 2022-06-19 08:32:22 +10:00
Drashna Jaelre
0da6562c4d Make default layer size 16-bit (#15286)
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2022-06-19 07:37:51 +10:00
QMK Bot
cfcd647b2e Merge remote-tracking branch 'origin/master' into develop 2022-06-18 07:34:32 +00:00
Nick Brassel
b5104c3a93 Fixup stale labels lists. (#17415) 2022-06-18 17:33:55 +10:00
Joel Challis
17ec1650fd Additional schema fixes (#17414) 2022-06-18 15:30:46 +10:00
Yan-Fa Li
7b3ee1db8c Minor schema fixes (#14200)
Validating using AJV
2022-06-18 02:42:32 +01:00
Stefan Kerkmann
fe680a8568 [Core] Split ChibiOS usart split driver in protocol and hardware driver part (#16669) 2022-06-18 08:04:17 +10:00
Stefan Kerkmann
6d67e9df4b [Core] Allow usage of ChibiOS's SIO driver for split keyboards (#15907) 2022-06-17 22:06:44 +02:00
QMK Bot
e44604c256 Merge remote-tracking branch 'origin/master' into develop 2022-06-17 03:50:47 +00:00
jack
545923b0a0 Fixup handwired/macroboard (#17405) 2022-06-17 04:50:14 +01:00
QMK Bot
00872ea7e7 Merge remote-tracking branch 'origin/master' into develop 2022-06-16 22:36:12 +00:00
Dmitry Nosachev
6d2f9c9c1e [Keyboard] Atreus: add STM32F103C8T6 based variant (#16846)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-16 15:36:11 -07:00
QMK Bot
c251d88934 Merge remote-tracking branch 'origin/master' into develop 2022-06-16 22:35:55 +00:00
Michał Szczepaniak
82a7f4adda [handwired/macroboard] Add separate f401 and f411 configs… (#16338)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-16 15:35:40 -07:00
Gordon
89921e917a [Keyboard] Fix 1U space in Keebio/sinc/rev2 layout macros (#16901) 2022-06-16 15:35:13 -07:00
QMK Bot
4610a6bf49 Merge remote-tracking branch 'origin/master' into develop 2022-06-16 22:34:39 +00:00
minibois
6d7026e561 [Keyboard] mini_ten_key_plus edited info.json (#15574)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-16 15:34:05 -07:00
Nick Brassel
999b91fbd9 SPI Bugfix for ChibiOS 21.11.1 -- also rollback AW20216 mode change issue. (#17371) 2022-06-17 08:03:38 +10:00
QMK Bot
9e35a1f617 Merge remote-tracking branch 'origin/master' into develop 2022-06-16 21:46:41 +00:00
Yoshihiro Saito
811dbda20a [Keymap] Update yoshimaru46 keymap (#17402) 2022-06-16 14:46:04 -07:00
QMK Bot
4e8b864258 Merge remote-tracking branch 'origin/master' into develop 2022-06-16 21:16:35 +00:00
Nick Brassel
5ccb2fd003 Swap to actions/stale. (#17404) 2022-06-17 07:16:01 +10:00
QMK Bot
e312fa44e2 Merge remote-tracking branch 'origin/master' into develop 2022-06-16 18:21:12 +00:00
Lorenzo Leonini
8be0496347 [Keyboard] Add ADM42 Keyboard (#17366)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-16 11:20:31 -07:00
precondition
0b1bed1d41 Use --exclude-from=.gitignore in place of --exclude-standard (#17399) 2022-06-16 11:20:12 -07:00
Ryan
ef80a1dd67 Update V-USB submodule (#17385) 2022-06-16 21:02:40 +10:00
Jouke Witteveen
050fa9062f tap-dance: Rename tests so that tap_dance is used consistently (#17396) 2022-06-16 08:05:27 +02:00
QMK Bot
fa9ecc431d Merge remote-tracking branch 'origin/master' into develop 2022-06-16 02:08:34 +00:00
peepeetee
8e128452db [Keyboard] Idobao Montex V2(RGB) (#15865)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Christian Hofstede <4440939+chofstede@users.noreply.github.com>
Co-authored-by: Vino Rodrigues <github@m.vinorodrigues.com>
Co-authored-by: Vino Rodrigues <366673+vinorodrigues@users.noreply.github.com>
2022-06-16 12:08:01 +10:00
QMK Bot
cac5f96275 Merge remote-tracking branch 'origin/master' into develop 2022-06-16 02:05:06 +00:00
IBNobody
8e5f8a5ff9 [Keyboard] Add Idobao Montex RGB (V2) (#16897)
* Add Montex V2 (#10)

* Update readme.md

* Update rules.mk

* Update config.h

* Update keyboards/idobao/montex/v2/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/idobao/montex/v2/rules.mk

Add Layouts

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Merged code fron work done with @vinorodrigues

* Update keyboards/idobao/montex/v2/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/idobao/montex/v2/v2.h

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/idobao/montex/v2/config.h

Co-authored-by: Ryan <fauxpark@gmail.com>

* Removing via_nug keymap

* update to montex code (#11)

* remove VIA_QMK_RGBLIGHT_ENABLE

* more data driven config, simple copyright headers, some code cleanup

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Vino Rodrigues <366673+vinorodrigues@users.noreply.github.com>
2022-06-15 19:04:30 -07:00
Nick Brassel
fa8fb60279 Dump out the largest symbols in flash and in RAM. (#17397) 2022-06-16 09:55:15 +10:00
QMK Bot
589bdedc47 Merge remote-tracking branch 'origin/master' into develop 2022-06-15 21:44:32 +00:00
Joel Challis
d3dfa83b40 Fix clean arg handling (#17392) 2022-06-15 22:43:54 +01:00
QMK Bot
6e10a80174 Merge remote-tracking branch 'origin/master' into develop 2022-06-15 20:31:47 +00:00
Felicia Kuan
7224d84167 edit typo in comment (#17394) 2022-06-15 21:31:13 +01:00
QMK Bot
c40af06871 Merge remote-tracking branch 'origin/master' into develop 2022-06-15 20:31:09 +00:00
ALTAiN
afbba27f42 BLASTER75 info.json position fixes (#17395) 2022-06-15 21:30:35 +01:00
QMK Bot
81d2218cee Merge remote-tracking branch 'origin/master' into develop 2022-06-15 00:14:34 +00:00
Arturo Avila
de207b97fa [Keymap+] SnailMap port for the Kintsugi keyboard. (#17341) 2022-06-14 17:13:37 -07:00
QMK Bot
85d84938cf Merge remote-tracking branch 'origin/master' into develop 2022-06-14 23:42:47 +00:00
Forrest Cahoon
b7ce3b1967 [Keymap] New keymap for Keebio FoldKB (#17364) 2022-06-14 16:42:41 -07:00
kb-elmo
dc2ce36d63 [Keyboard] Add Chaos65 keyboard (#17369)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-14 16:42:15 -07:00
QMK Bot
adf4c27db2 Merge remote-tracking branch 'origin/master' into develop 2022-06-14 23:32:38 +00:00
Yutong Zhou
1c45845178 [Keyboard] Flip encoder pads on basketweave (#17375) 2022-06-14 16:32:07 -07:00
QMK Bot
4cde5c243b Merge remote-tracking branch 'origin/master' into develop 2022-06-14 13:55:32 +00:00
Joel Challis
f37de9a212 Perform stricter lint checks (#17348) 2022-06-14 14:54:46 +01:00
Joel Challis
87e1ff218d backlight|led 'on state' for DD configuration (#17383) 2022-06-14 12:30:31 +01:00
QMK Bot
2f4c7697a9 Merge remote-tracking branch 'origin/master' into develop 2022-06-14 10:16:16 +00:00
Nick Brassel
15dab01e6a Inform people that things may not work. (#17391) 2022-06-14 20:15:01 +10:00
QMK Bot
84d3575fdb Merge remote-tracking branch 'origin/master' into develop 2022-06-14 10:13:29 +00:00
Tom Barnes
026d0e8bf1 Update feature_midi.md (#17390)
Add caveat about usb endpoints.
2022-06-14 11:12:52 +01:00
Jouke Witteveen
1706da9054 tap-dance: Restructure code and document in more detail (#16394) 2022-06-13 22:12:55 +02:00
QMK Bot
b17324498e Merge remote-tracking branch 'origin/master' into develop 2022-06-13 18:31:17 +00:00
npspears
e49fa43a7f [Keyboard] add SNOP60 (#17131)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-13 11:30:35 -07:00
QMK Bot
0c82aafb8a Merge remote-tracking branch 'origin/master' into develop 2022-06-13 05:15:12 +00:00
ALTAiN
5149728b23 [Keyboard] Add BLASTER75 keyboard (#16887)
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-12 22:14:33 -07:00
QMK Bot
577e9d89fa Merge remote-tracking branch 'origin/master' into develop 2022-06-13 01:16:03 +00:00
Nick Brassel
f18afffc8d actions/stale: 150 operations, oldest-first. 2022-06-13 11:15:24 +10:00
QMK Bot
d21ee22cc5 Merge remote-tracking branch 'origin/master' into develop 2022-06-13 01:06:36 +00:00
Nick Brassel
856029f7c5 Swap to 1000 stale actions while debugging. 2022-06-13 11:05:25 +10:00
QMK Bot
5ba04d1204 Merge remote-tracking branch 'origin/master' into develop 2022-06-13 00:55:54 +00:00
Nick Brassel
9d07ab88af Fixup stale action. (#17373) 2022-06-13 10:55:16 +10:00
QMK Bot
10345adaa5 Merge remote-tracking branch 'origin/master' into develop 2022-06-13 00:44:22 +00:00
Nick Brassel
f7ab10a3c1 Add stale action. (#17372)
* Add stale action.

* Allow for manual trigger.
2022-06-13 10:43:52 +10:00
Ryan
0d64038b73 Update LUFA submodule (#17368) 2022-06-13 09:17:24 +10:00
QMK Bot
d288121f21 Merge remote-tracking branch 'origin/master' into develop 2022-06-12 18:30:50 +00:00
HorrorTroll
c2045558d9 [Keyboard] Add Lemon40 keyboard (#17357) 2022-06-12 11:30:08 -07:00
QMK Bot
191c180644 Merge remote-tracking branch 'origin/master' into develop 2022-06-12 14:35:07 +00:00
Albert Y
b5a53a9946 Add encoder map (#17361) 2022-06-12 15:34:29 +01:00
QMK Bot
90765aaefd Merge remote-tracking branch 'origin/master' into develop 2022-06-12 10:47:53 +00:00
Drashna Jaelre
3f841a24f0 [Keyboard] Remove terminal commands from m48 (#17363) 2022-06-12 20:47:24 +10:00
QMK Bot
0d991b8873 Merge remote-tracking branch 'origin/master' into develop 2022-06-11 18:25:28 +00:00
durken1
a50b09cba5 [Keyboard] add pierce (#17000)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Dan Abrahamsson <dan.abrahamsson@imsystech.com>
2022-06-11 11:24:58 -07:00
QMK Bot
1a7a6f313e Merge remote-tracking branch 'origin/master' into develop 2022-06-11 18:19:21 +00:00
Alin Marin Elena
51cfb1b457 [Keyboard] mlego fix product id and sync oled code (#16237)
* sync oled code over the keymaps

* put different product ids

* put different product ids for the rest

* put different product ids for the rest

* try to reduce code duplication

* make ifdefs nice and correct

* move the leds code out of keymap

* try to reduce code duplication

* move the rgb code outside the keymaps for reuse

* Update keyboards/mlego/m65/m65.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/mlego/m65/m65.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* move more code outside keymaps for reuse

* add few more xps

* add mic mute

* update to new name of macros for reset

* style for matrix

* clean split

* use tinyuf2 as bootloader

* Update keyboards/mlego/m65/rev4/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* radionalise product id and device version

* add tinyuf2 as default bootloader for stm32f4

* update tinyuf2

* update tinyuf2 and via. f411 remove tinyuf2 since is not really working. make the config more conditional

* sync the keymap with default

* revert via non building with gcc 11

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-11 11:18:45 -07:00
Ryan
af6435d44d qmk doctor: show arch for macOS (#17356) 2022-06-11 19:10:09 +01:00
QMK Bot
5887bf7158 Merge remote-tracking branch 'origin/master' into develop 2022-06-11 17:53:14 +00:00
jack
dbd4ac5a3f [Keyboard] Fix checkboards/quark_lp (another) (#17296) 2022-06-11 10:52:45 -07:00
Drashna Jaelre
80034a847f Ensure that rgb+via compiles in all cases (#17355) 2022-06-10 22:01:46 -07:00
Dasky
568924c76c Add missing bracket for VIA brightness scaling (#17354) 2022-06-10 19:07:58 -07:00
yiancar
0fd08da806 Scale brigthness for VIA (#17352)
Co-authored-by: yiancar <yiancar@gmail.com>
2022-06-10 17:20:01 -07:00
QMK Bot
d05a1deb7c Merge remote-tracking branch 'origin/master' into develop 2022-06-10 22:24:58 +00:00
Ryan
b4b34cd2cd Wasdat: move some stuff to info.json (#17327) 2022-06-11 08:24:29 +10:00
QMK Bot
6b838785b7 Merge remote-tracking branch 'origin/master' into develop 2022-06-10 10:45:24 +00:00
Joel Challis
92665aef33 Promote 'layouts require matrix data' to api error (#17349) 2022-06-10 11:44:48 +01:00
Joel Challis
7baf9b3f35 Promote label with newlines to lint error (#17347) 2022-06-10 11:44:23 +01:00
QMK Bot
97fc4f1b6a Merge remote-tracking branch 'origin/master' into develop 2022-06-10 07:46:24 +00:00
jack
d8ace624c8 initial (#17345) 2022-06-10 08:45:31 +01:00
QMK Bot
738cec9bd5 Merge remote-tracking branch 'origin/master' into develop 2022-06-10 03:43:25 +00:00
Derek
7c097ee6b4 [Keyboard] Add Sodium keyboards (#17078)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: nacly <nacly@pop-os.localdomain>
2022-06-09 20:42:53 -07:00
QMK Bot
ef8a30250b Merge remote-tracking branch 'origin/master' into develop 2022-06-10 03:41:14 +00:00
Zac Scott
93c3a959a7 [Keymap] Add planck/scottzach1 keymap (#17083) 2022-06-09 20:40:43 -07:00
QMK Bot
ed15a579a7 Merge remote-tracking branch 'origin/master' into develop 2022-06-10 03:26:21 +00:00
zv0n
9da1b86d71 [keyboard] annepro2 Add and use functions to directly control led colors (#17196) 2022-06-10 13:25:48 +10:00
QMK Bot
c84d058c8b Merge remote-tracking branch 'origin/master' into develop 2022-06-10 01:16:19 +00:00
Gabriel Oliveira
9316023290 [Keyboard] Improve the durgot k3x0 readme.md (#17214) 2022-06-09 18:15:44 -07:00
QMK Bot
e5e2cd94be Merge remote-tracking branch 'origin/master' into develop 2022-06-10 01:13:18 +00:00
ILWrites
2f8704143e [Keyboard] Adding Sunsetter R2 keyboard to Charue family (#17269)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-09 18:12:31 -07:00
QMK Bot
474b4083ae Merge remote-tracking branch 'origin/master' into develop 2022-06-09 20:02:58 +00:00
Joel Challis
a599550adb Add support for linting deprecated and removed functionality (#17063)
* Add support for more lint warnings/errors

* Develop currently needs extra deps installed

* Lint a few more scenarios

* fix tests
2022-06-09 21:02:16 +01:00
QMK Bot
c5f26b0e9a Merge remote-tracking branch 'origin/master' into develop 2022-06-09 18:54:04 +00:00
jack
de43b09d25 [Keyboard] Fix kprepublic/bm60hsrgb_ec/rev2 (#17334) 2022-06-09 11:53:28 -07:00
jack
d2abfaeacd Fixup Pimoroni trackball code (#17335) 2022-06-09 10:09:00 -07:00
Drashna Jaelre
0ab51ee29d Add support for large Mouse Reports (#16371)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-08 18:39:16 -07:00
QMK Bot
84944df6a6 Merge remote-tracking branch 'origin/master' into develop 2022-06-08 21:52:12 +00:00
Tomasz Janeczko
6567b21688 Move more UART-based keyboards to use timeout correctly. (#17329)
Co-authored-by: Tomasz Janeczko <tomasz.j@hey.com>
2022-06-08 14:51:41 -07:00
QMK Bot
728f7308af Merge remote-tracking branch 'origin/master' into develop 2022-06-08 19:21:10 +00:00
peepeetee
f6a7bf2a83 [Keyboard] Add KPrepublic BM60hsrgb_ec V1 and V2 (#15104)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-08 12:20:26 -07:00
QMK Bot
0e2009c669 Merge remote-tracking branch 'origin/master' into develop 2022-06-08 06:24:16 +00:00
Jason Dunsmore
c9b71f953f [Keymap] Update keymap for user jasondunsmore (#17312) 2022-06-07 23:23:41 -07:00
QMK Bot
8a6fd0dc7e Merge remote-tracking branch 'origin/master' into develop 2022-06-08 01:48:42 +00:00
JunZuloo
5f72d54299 Update other_vscode.md (#17317)
Bracket pair colorizer has been deprecated since it is now a native feature, and VIM Keymap no longer exists, so I removed those 2 links.
2022-06-08 02:47:57 +01:00
QMK Bot
1e1f387be7 Merge remote-tracking branch 'origin/master' into develop 2022-06-08 00:48:36 +00:00
Nick Brassel
1d75e20cd8 Add WB32 evaluation board onekey targets. (#17330) 2022-06-08 10:47:56 +10:00
Nick Brassel
1085500e89 Rework paths for eeprom locations. (#17326)
* Rework paths for eeprom locations.

* File relocation.

* Wrong file move.

* Fixup test paths.
2022-06-08 09:42:35 +10:00
QMK Bot
6df5fce073 Merge remote-tracking branch 'origin/master' into develop 2022-06-07 18:33:49 +00:00
jpe230
5c7972760c [Keymap] CRKBD: Update jpe230 Keymap (#17280) 2022-06-07 11:31:28 -07:00
QMK Bot
5141d6eeb1 Merge remote-tracking branch 'origin/master' into develop 2022-06-07 18:31:22 +00:00
Andrew Kannan
1c97a0375e [Keyboard] Add BrutalV2 65 Keyboard (#17252)
* Add Brutal65 V2 to QMK

* Update info.json and copyright notices

* Update info.json]

* Update readme and delete chconf

* Update matrix and keymaps to match info json

* Update keyboards/cannonkeys/brutalv2_65/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/cannonkeys/brutalv2_65/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/cannonkeys/brutalv2_65/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-07 11:30:35 -07:00
QMK Bot
fe08bbc4a0 Merge remote-tracking branch 'origin/master' into develop 2022-06-07 18:30:09 +00:00
Andrew Kannan
fbe236fa77 [Keyboard] Add Cloudline PCB support (#17253)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-07 11:29:31 -07:00
QMK Bot
da1c562ddf Merge remote-tracking branch 'origin/master' into develop 2022-06-07 18:28:46 +00:00
Uy Bui
b8bbd0cb9a [Keyboard] Add Stello65 keyboard (#17168)
* [Keyboard] add Stello65 keyboard

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Apply suggestions from code review

Co-authored-by: Ryan <fauxpark@gmail.com>

* [Keyboard] update config pinout for stello65_sl_rev1

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-07 11:28:13 -07:00
QMK Bot
36109a887a Merge remote-tracking branch 'origin/master' into develop 2022-06-07 18:23:09 +00:00
Tomasz Janeczko
c681b6dbf3 [Keyboard] Handle timeout on UART for Redox Wireless (#17203)
* Handle timeout on UART for Redox Wireless receiver-to-keyboard communication.

- This fixes the issue of a keyboard deadlocking on the first matrix
  scan with Redox Wireless keyboards

* Remove an explicit cast.

Co-authored-by: Tomasz Janeczko <tomasz.j@hey.com>
2022-06-07 11:22:13 -07:00
QMK Bot
b74509d4ae Merge remote-tracking branch 'origin/master' into develop 2022-06-07 18:15:24 +00:00
Tommy Alatalo
5d767f8361 [Keyboard] Add alt34 keyboard (#17223)
* Add files for alt34 keyboard

* Add link to hardware bill of materials for alt34

* Change keyboard image link to imgur

* Remove platform specific defines from rev1.h

* Remove bluetooth and sleep led rules etc

* Add GPL license header to all source code files

* Shorten comment for NKRO_ENABLE

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Simplify option usage comment in rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Set imgur link to largest size option

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Move rules.mk into rev1 folder entirely

* Remove .noci file

* Update keyboards/alt34/rev1/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-07 11:14:44 -07:00
QMK Bot
9d226b92a8 Merge remote-tracking branch 'origin/master' into develop 2022-06-07 18:01:59 +00:00
trwnh
cf1e66b352 [Keymap] add trwnh keymap for gmmk pro (#17267) 2022-06-07 11:01:23 -07:00
QMK Bot
11836128fc Merge remote-tracking branch 'origin/master' into develop 2022-06-07 13:32:48 +00:00
anubhav dhiman
f0b1c8ced9 add new keyboard atset (#17195)
Co-authored-by: zvecr <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2022-06-07 23:31:56 +10:00
QMK Bot
6f82647e8d Merge remote-tracking branch 'origin/master' into develop 2022-06-06 22:30:38 +00:00
Travis Rigg
b85c224b7c docs: reflect systemd's change in language (#17322)
Like much of our field, systemd has renamed their `master` branch to `main`
2022-06-06 23:29:59 +01:00
Dasky
85b3b98570 Move SPLIT_HAND_PIN setup to split_pre_init (#17271)
* Move SPLIT_HAND_PIN setup to split_pre_init

* doppelganger should use old behaviour

* Add comment for future

Co-authored-by: Joel Challis <git@zvecr.com>

Co-authored-by: Joel Challis <git@zvecr.com>
2022-06-06 01:33:32 +01:00
Stefan Kerkmann
e89478eb0f [Core] Update C standard to GNU11, C++ to GNU++14 (#17114) 2022-06-06 08:47:22 +10:00
QMK Bot
6221c86186 Merge remote-tracking branch 'origin/master' into develop 2022-06-05 19:06:37 +00:00
Stefan Kerkmann
4c48760558 Apply EXPECT_REPORT and EXPECT_EMPTY_REPORT (#17311)
...convenience macros to test cases that where missed during #17284
2022-06-05 20:06:05 +01:00
QMK Bot
d6402fe9fb Merge remote-tracking branch 'origin/master' into develop 2022-06-05 11:15:11 +02:00
Pascal Getreuer
95d20e6d8b Fix and add unit tests for Caps Word to work with Unicode Map, Auto Shift, Retro Shift. (#17284)
* Fix Caps Word and Unicode Map

* Tests for Caps Word + Auto Shift and Unicode Map.

* Fix formatting

* Add additional keyboard report expectation macros

This commit defines five test utilities, EXPECT_REPORT, EXPECT_UNICODE,
EXPECT_EMPTY_REPORT, EXPECT_ANY_REPORT and EXPECT_NO_REPORT for use with
TestDriver.

EXPECT_REPORT sets a gmock expectation that a given keyboard report will
be sent. For instance,

  EXPECT_REPORT(driver, (KC_LSFT, KC_A));

is shorthand for

  EXPECT_CALL(driver,
      send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));

EXPECT_UNICODE sets a gmock expectation that a given Unicode code point
will be sent using UC_LNX input mode. For instance for U+2013,

  EXPECT_UNICODE(driver, 0x2013);

expects the sequence of keys:

  "Ctrl+Shift+U, 2, 0, 1, 3, space".

EXPECT_EMPTY_REPORT sets a gmock expectation that a given keyboard
report will be sent. For instance

  EXPECT_EMPTY_REPORT(driver);

expects a single report without keypresses or modifiers.

EXPECT_ANY_REPORT sets a gmock expectation that a arbitrary keyboard
report will be sent, without matching its contents. For instance

  EXPECT_ANY_REPORT(driver).Times(1);

expects a single arbitrary keyboard report will be sent.

EXPECT_NO_REPORT sets a gmock expectation that no keyboard report will
be sent at all.

* Add tap_key() and tap_keys() to TestFixture.

This commit adds a `tap_key(key)` method to TestFixture that taps a
given KeymapKey, optionally with a specified delay between press and
release.

Similarly, the method `tap_keys(key_a, key_b, key_c)` taps a sequence of
KeymapKeys.

* Use EXPECT_REPORT, tap_keys, etc. in most tests.

This commit uses EXPECT_REPORT, EXPECT_UNICODE, EXPECT_EMPTY_REPORT,
EXPECT_NO_REPORT, tap_key() and tap_keys() test utilities from the
previous two commits in most tests. Particularly the EXPECT_REPORT
macro is frequently useful and makes a nice reduction in boilerplate
needed to express many tests.

Co-authored-by: David Kosorin <david@kosorin.net>
2022-06-05 09:14:02 +02:00
Nick Brassel
08c556b78b Add keymap wrappers for introspection into the keymap. (#17229)
* Introspection handlers for keymaps.

* Renaming.
2022-06-05 10:26:02 +10:00
Xelus22
af84772a5f initial 24lc32a (#16990) 2022-06-04 01:53:24 +01:00
QMK Bot
b1a3f806f5 Merge remote-tracking branch 'origin/master' into develop 2022-06-04 00:45:35 +00:00
eason
787165718d Disable features known to cause BIOS/suspend issues (#17270) 2022-06-04 01:44:53 +01:00
QMK Bot
bb324e5b3e Merge remote-tracking branch 'origin/master' into develop 2022-06-03 11:13:22 +00:00
Drashna Jaelre
706194b336 Add Encoder Map Swap Hands config for boards that support both features (#17294) 2022-06-03 12:12:15 +01:00
QMK Bot
267f392237 Merge remote-tracking branch 'origin/master' into develop 2022-06-02 18:30:44 +00:00
Joel Challis
5bcfc273ce Fix lint errors (#17293) 2022-06-02 19:30:07 +01:00
QMK Bot
b94baa8bc3 Merge remote-tracking branch 'origin/master' into develop 2022-06-02 17:20:59 +00:00
takishim
71b928fbec [Keyboard] Organized versions of mikeneko65 (#16985)
Co-authored-by: takishim <tadashi@kishimo.to>
2022-06-02 10:20:02 -07:00
QMK Bot
86e93d7654 Merge remote-tracking branch 'origin/master' into develop 2022-06-02 16:51:28 +00:00
Ryan Skidmore
9a587275cf keyboards: fix malformed info.json files (#17292) 2022-06-02 17:50:08 +01:00
QMK Bot
344b8410f7 Merge remote-tracking branch 'origin/master' into develop 2022-06-02 16:38:09 +00:00
Aidan Gauland
7c3cb99164 [Keymap] Fix maddie layout for ploopy/trackball_nano (#17213) 2022-06-02 09:37:28 -07:00
QMK Bot
8bb2c66c88 Merge remote-tracking branch 'origin/master' into develop 2022-06-02 16:18:53 +00:00
Václav Kučera
7ff666340c [Keyboard] Acheron Shark alpha Encoder support (#17266) 2022-06-02 09:17:47 -07:00
QMK Bot
73bd3dff8c Merge remote-tracking branch 'origin/master' into develop 2022-06-02 13:03:13 +00:00
wavtype
f330ef12b6 Add wavtype/p01_ultra (#16513)
* new fork (manta and foundation)

added foundation and manta firmware

* removed manta

* VIA compliant changes

added readme, info.json edits

* Update keyboards/wavtype/foundation/config.h

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/foundation/readme.md

Co-authored-by: Joel Challis <git@zvecr.com>

* removed via.json and updated readme

* Update keyboards/wavtype/foundation/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/wavtype/foundation/config.h

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/wavtype/foundation/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keymap.c

* added p01 ultra

* updated diode direction

proto used opposite diode direction

* removed foundation

* Update keyboards/wavtype/p01_ultra/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/wavtype/p01_ultra/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/wavtype/p01_ultra/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/wavtype/p01_ultra/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/wavtype/p01_ultra/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/wavtype/p01_ultra/readme.md

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/wavtype/p01_ultra/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/keymaps/via/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/keymaps/via/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/keymaps/via/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/wavtype/p01_ultra/rules.mk

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/wavtype/p01_ultra/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/wavtype/p01_ultra/config.h

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-06-02 14:02:36 +01:00
Dasky
af02baae78 Allow larger SPLIT_USB_TIMEOUT with default SPLIT_USB_TIMEOUT_POLL (#17272)
* Switch SPLIT_USB_DETECT loop to uint16_t

* Add assertion
2022-06-01 00:10:05 +01:00
QMK Bot
f9e97fd3c3 Merge remote-tracking branch 'origin/master' into develop 2022-05-31 21:38:36 +00:00
Carlo Sala
5b16671d7a move RESET to QK_BOOT (#17278)
* move RESET to QK_BOOT

* fix tapping_term
2022-05-31 22:37:28 +01:00
QMK Bot
38839a9105 Merge remote-tracking branch 'origin/master' into develop 2022-05-31 11:32:26 +00:00
Forrest Cahoon
8153b55e07 Add trailing parens to get_oneshot_mods in feature_advanced_keycodes.md (#17211) 2022-05-31 21:31:47 +10:00
QMK Bot
6fdce80822 Merge remote-tracking branch 'origin/master' into develop 2022-05-31 08:22:54 +00:00
moyi4681
d5ed3ae967 [Keyboard] fix dz64rgb rgb sleep (#17209) 2022-05-31 01:22:07 -07:00
Thomas Preisner
bbab8eb993 Make bootloader_jump for dualbank STM32 respect STM32_BOOTLOADER_DUAL_BANK_DELAY (#17178) 2022-05-30 23:20:10 -07:00
Andrew Dunai
ecce9900c9 Improve PS/2 mouse performance (#17111) 2022-05-30 23:15:17 -07:00
precondition
d44a950c10 Use TAP_HOLD_CAPS_DELAY for KC_LOCKING_CAPS_LOCK (#17099) 2022-05-30 22:55:33 -07:00
Nick Brassel
8545473307 Removes terminal from QMK. (#17258) 2022-05-30 22:38:08 -07:00
trwnh
9e2fe4eff6 Make SPI Mode configurable and change default mode to 3 (#17263) 2022-05-31 15:28:55 +10:00
QMK Bot
e869d089b7 Merge remote-tracking branch 'origin/master' into develop 2022-05-31 05:03:28 +00:00
Drashna Jaelre
cda343acbe [Keymap] Drashna update for post Q2 merge (#17241) 2022-05-30 22:02:55 -07:00
QMK Bot
f663f84413 Merge remote-tracking branch 'origin/master' into develop 2022-05-31 04:47:02 +00:00
trwnh
b554e4b612 Change AW20216 SPI Mode from 0 to 3, to fix RGB LEDs on GMMK Pro (#17262) 2022-05-31 14:46:21 +10:00
QMK Bot
044486500c Merge remote-tracking branch 'origin/master' into develop 2022-05-31 04:09:14 +00:00
Sergey Vlasov
650be92cf9 Nix shell updates (#17243) 2022-05-31 14:08:23 +10:00
QMK Bot
a099579aa0 Merge remote-tracking branch 'origin/master' into develop 2022-05-31 02:09:37 +00:00
Joel Challis
0e11b511e4 Convert ergodone to use core mcp23018 driver (#17005) 2022-05-31 03:08:56 +01:00
QMK Bot
67e80780bb Merge remote-tracking branch 'origin/master' into develop 2022-05-30 22:44:05 +00:00
Joel Challis
2879573688 Fix various lint errors (#17255)
* Fix various lint errors

* reduce complexity
2022-05-30 23:43:36 +01:00
QMK Bot
6e4e50d5aa Merge remote-tracking branch 'origin/master' into develop 2022-05-30 22:06:28 +00:00
Dasky
25ec68c408 Fix docs typo (#17254) 2022-05-30 23:05:57 +01:00
Dasky
2de70e6f2d Add uf2-split-* make targets. (#17257) 2022-05-31 08:04:50 +10:00
QMK Bot
31fb141528 Merge remote-tracking branch 'origin/master' into develop 2022-05-30 21:46:00 +00:00
chalex
3826fca637 [Keyboard] Add str.merro60 pcb (#17097)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Alexander Lee <aclee3@CGHan-Macbook-2015.local>
Co-authored-by: chalex <chlxbsmt@gmail.com>
2022-05-30 14:45:27 -07:00
QMK Bot
6b640db4bb Merge remote-tracking branch 'origin/master' into develop 2022-05-30 18:29:09 +00:00
Juno Nguyen
15a86d5c53 [Keymap] Updates to layouts/community/ortho_4x12/junonum (#17249) 2022-05-30 11:28:35 -07:00
QMK Bot
e4be4d282c Merge remote-tracking branch 'origin/master' into develop 2022-05-30 18:07:56 +00:00
Seth Barberee
cc7a3f8dc7 [Keymap] Update sethbarberee code to QK_BOOT and try out DVVORAK (#17230) 2022-05-30 11:07:16 -07:00
QMK Bot
9a2943d221 Merge remote-tracking branch 'origin/master' into develop 2022-05-30 14:34:54 +00:00
Joel Challis
a06b5cae41 Fix API errors (#17239) 2022-05-30 15:34:20 +01:00
QMK Bot
f03fe5b917 Merge remote-tracking branch 'origin/master' into develop 2022-05-29 19:16:27 +00:00
QMK Bot
6123698270 Merge remote-tracking branch 'origin/master' into develop 2022-05-29 05:18:24 +00:00
QMK Bot
a765f730b1 Merge remote-tracking branch 'origin/master' into develop 2022-05-29 05:10:23 +00:00
QMK Bot
3ce029c7fd Merge remote-tracking branch 'origin/master' into develop 2022-05-28 23:07:45 +00:00
Nick Brassel
87c3a53716 Branch point after 2022-05-28 Breaking Change. 2022-05-29 08:16:00 +10:00
Nick Brassel
103c08cc75 Merge branch 'master' into develop 2022-05-29 08:13:56 +10:00
468 changed files with 23954 additions and 7111 deletions

View File

@@ -1,36 +0,0 @@
---
name: Bug report
about: Create a report to help us improve QMK Firmware.
title: "[Bug] "
labels: bug, help wanted
assignees: ''
---
<!-- Provide a general summary of the bug in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
## Describe the Bug
<!-- A clear and concise description of what the bug is. -->
## System Information
**Keyboard:**
**Revision (if applicable):**
**Operating system:**
**`qmk doctor` output:**
```
(Paste output here)
```
**Any keyboard related software installed?**
- [ ] AutoHotKey (Windows)
- [ ] Karabiner (macOS)
- [ ] Other:
## Additional Context
<!-- Add any other relevant information about the problem here. -->

41
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Bug report
description: Create a report to help us improve QMK Firmware.
title: "[Bug] "
labels: ["bug", "help wanted"]
body:
- type: markdown
attributes:
value: |
Provide a general summary of the bug in the title above.
- type: textarea
attributes:
label: Describe the Bug
description: A clear and concise description of what the bug is.
- type: input
attributes:
label: Keyboard Used
description: The name of the keyboard from the `make` or `qmk compile`/`qmk flash` commands, eg. `planck/rev6`.
- type: input
attributes:
label: Link to product page (if applicable)
- type: input
attributes:
label: Operating System
- type: textarea
attributes:
label: qmk doctor Output
description: Output from running the `qmk doctor` command.
render: text
- type: checkboxes
attributes:
label: Is AutoHotKey / Karabiner installed
options:
- label: AutoHotKey (Windows)
- label: Karabiner (macOS)
- type: input
attributes:
label: Other keyboard-related software installed
- type: textarea
attributes:
label: Additional Context
description: Add any other relevant information about the problem here.

View File

@@ -1,24 +0,0 @@
---
name: Feature request
about: Suggest a new feature or changes to existing features.
title: "[Feature Request] "
labels: enhancement, help wanted
assignees: ''
---
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
## Feature Request Type
- [ ] Core functionality
- [ ] Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
- [ ] Alteration (enhancement/optimization) of existing feature(s)
- [ ] New behavior
## Description
<!-- A few sentences describing what it is that you'd like to see in QMK. Additional information (such as links to spec sheets, licensing info, other related issues or PRs, etc) would be helpful. -->

View File

@@ -0,0 +1,21 @@
name: Feature request
description: Suggest a new feature or changes to existing features.
title: "[Feature Request] "
labels: ["enhancement", "help wanted"]
body:
- type: markdown
attributes:
value: |
Provide a general summary of the changes you want in the title above.
- type: checkboxes
attributes:
label: Feature Request Type
options:
- label: Core functionality
- label: Add-on hardware support (eg. audio, RGB, OLED screen, etc.)
- label: Alteration (enhancement/optimization) of existing feature(s)
- label: New behavior
- type: textarea
attributes:
label: Description
description: A few sentences describing what it is that you'd like to see in QMK. Additional information (such as links to spec sheets, licensing info, other related issues or PRs, etc) would be helpful.

View File

@@ -1,14 +0,0 @@
---
name: Other issues
about: Anything else that doesn't fall into the above categories.
title: ''
labels: help wanted, question
assignees: ''
---
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
<!-- Please check https://docs.qmk.fm/#/support for additional resources first. If that doesn't answer your question, choose the bug report template instead, as that may be more appropriate. -->

16
.github/ISSUE_TEMPLATE/other_issues.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: Other issues
description: Anything else that doesn't fall into the above categories.
labels: ["help wanted", "question"]
body:
- type: markdown
attributes:
value: |
Provide a general summary of the changes you want in the title above.
- type: markdown
attributes:
value: |
Please check [https://docs.qmk.fm/#/support](https://docs.qmk.fm/#/support) for additional resources first. If that doesn't answer your question, choose the bug report template instead, as that may be more appropriate.
- type: textarea
attributes:
label: Issue Description
description: Describe your issue in as much detail as possible.

41
.github/labeler.yml vendored
View File

@@ -1,41 +0,0 @@
core:
- quantum/**/*
- tmk_core/**/*
- drivers/**/*
- tests/**/*
- util/**/*
- platforms/**/*
- Makefile
- '*.mk'
dependencies:
- any:
- 'lib/**/*'
- '!lib/python/**/*'
keyboard:
- any:
- 'keyboards/**/*'
- '!keyboards/**/keymaps/**/*'
keymap:
- users/**/*
- layouts/**/*
- keyboards/**/keymaps/**/*
via:
- keyboards/**/keymaps/via/*
cli:
- requirements.txt
- lib/python/**/*
python:
- '**/*.py'
documentation:
- docs/**/*
translation:
- docs/fr-fr/**/*
- docs/es/**/*
- docs/ja/**/*
- docs/he-il/**/*
- docs/pt-br/**/*
- docs/zh-cn/**/*
- docs/de/**/*
- docs/ru-ru/**/*
CI:
- .github/**/*

58
.github/stale.yml vendored
View File

@@ -1,58 +0,0 @@
# Configuration for probot-stale - https://github.com/probot/stale
# General configuration
# Pull request specific configuration
pulls:
staleLabel: awaiting changes
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 45
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 30
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
Thank you for your contribution!
This pull request has been automatically marked as stale because it has not had
activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
Please feel free to give a status update now, or re-open when it's ready.
For maintainers: Please label with `awaiting review`, `breaking_change`, `in progress`, or `on hold` to prevent
the issue from being re-flagged.
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
Thank you for your contribution!
This pull request has been automatically closed because it has not had activity in the last 30 days.
Please feel free to give a status update now, ping for review, or re-open when it's ready.
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
exemptLabels:
- awaiting review
- breaking_change
- in progress
- on hold
# Issue specific configuration
issues:
staleLabel: stale
limitPerRun: 10
daysUntilStale: 90
daysUntilClose: 30
markComment: >
This issue has been automatically marked as stale because it has not had activity in the
last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
occurs.
For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
the issue from being re-flagged.
closeComment: >
This issue has been automatically closed because it has not had activity in the last 30 days.
If this issue is still valid, re-open the issue and let us know.
exemptLabels:
- bug
- in progress
- on hold
- discussion
- to do

View File

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

View File

@@ -1,30 +0,0 @@
name: Update develop after master merge
on:
push:
branches:
- master
jobs:
develop_update:
runs-on: ubuntu-latest
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
fetch-depth: 0
- name: Checkout develop
run: |
git fetch origin master develop
git checkout develop
- name: Update develop from master
run: |
git config --global user.name "QMK Bot"
git config --global user.email "hello@qmk.fm"
git merge origin/master
git push origin develop

View File

@@ -1,35 +0,0 @@
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 }}

View File

@@ -19,7 +19,7 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0

View File

@@ -12,10 +12,14 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Disable automatic eol conversion
run: |
echo "* -text" > .git/info/attributes
- name: Install dependencies
run: |
pip3 install -r requirements-dev.txt
@@ -36,7 +40,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
uses: peter-evans/create-pull-request@v4
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}

View File

@@ -1,14 +0,0 @@
name: "Pull Request Labeler"
on:
pull_request_target:
types: [opened, synchronize, reopened, ready_for_review, locked]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@main
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: '.github/labeler.yml'

View File

@@ -12,10 +12,13 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install dependencies
run: pip3 install -r requirements-dev.txt
- uses: trilom/file-changes-action@v1.2.4
id: file_changes
with:

View File

@@ -22,7 +22,7 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Install dependencies

17
.gitignore vendored
View File

@@ -5,6 +5,10 @@
.DS_Store
._*
# Merge files
*.orig
*.rej
# Build artifacts
.clang_complete
.build/
@@ -27,7 +31,11 @@ quantum/version.h
*.uf2
# Old-style QMK Makefiles
/keyboards/*/Makefile
/keyboards/**/Makefile
# kbfirmware....
/keyboards/**/kb.h
/keyboards/**/kb.c
# Eclipse/PyCharm/Other IDE Settings
*.iml
@@ -58,10 +66,12 @@ CMakeLists.txt
.vscode/temp.sql
tags
# Ignore image files
# Ignore image/font files
*.gif
*.jpg
*.png
*.ttf
*.otf
# Things Travis sees
/.vs
@@ -83,9 +93,6 @@ user_song_list.h
/users/
/layouts/
/keyboards/*
!/keyboards/ergodox_ez/
!/keyboards/planck/
!/keyboards/moonlander/
# clangd
compile_commands.json

9
.gitmodules vendored
View File

@@ -4,17 +4,20 @@
branch = master
[submodule "lib/chibios-contrib"]
path = lib/chibios-contrib
url = https://github.com/qmk/ChibiOS-Contrib
branch = master
url = https://github.com/zsa/ChibiOS-Contrib
branch = main
[submodule "lib/googletest"]
path = lib/googletest
url = https://github.com/qmk/googletest
[submodule "lib/lufa"]
path = lib/lufa
url = https://github.com/zsa/lufa
url = https://github.com/qmk/lufa
[submodule "lib/vusb"]
path = lib/vusb
url = https://github.com/qmk/v-usb
[submodule "lib/printf"]
path = lib/printf
url = https://github.com/qmk/printf
[submodule "lib/pico-sdk"]
path = lib/pico-sdk
url = https://github.com/qmk/pico-sdk.git

View File

@@ -276,7 +276,7 @@ define PARSE_KEYMAP
# The rest of the rule is the target
# Remove the leading ":" from the target, as it acts as a separator
MAKE_TARGET := $$(patsubst :%,%,$$(RULE))
# We need to generate an unique indentifer to append to the COMMANDS list
# We need to generate an unique identifier to append to the COMMANDS list
CURRENT_KB_UNDER := $$(subst /,_,$$(CURRENT_KB))
COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB_UNDER)_KEYMAP_$$(CURRENT_KM)
# If we are compiling a keyboard without a subproject, we want to display just the name
@@ -413,6 +413,7 @@ ifndef SKIP_GIT
if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi
if [ ! -e lib/vusb ]; then git submodule sync lib/vusb && git submodule update --depth 50 --init lib/vusb; fi
if [ ! -e lib/printf ]; then git submodule sync lib/printf && git submodule update --depth 50 --init lib/printf; fi
if [ ! -e lib/pico-sdk ]; then git submodule sync lib/pico-sdk && git submodule update --depth 50 --init lib/pico-sdk; fi
git submodule status --recursive 2>/dev/null | \
while IFS= read -r x; do \
case "$$x" in \
@@ -440,9 +441,15 @@ lib/%:
.PHONY: git-submodule
git-submodule:
[ -e lib/ugfx ] && rm -rf lib/ugfx || true
[ -e lib/pico-sdk ] && rm -rf lib/pico-sdk || true
[ -e lib/chibios-contrib/ext/mcux-sdk ] && rm -rf lib/chibios-contrib/ext/mcux-sdk || true
git submodule sync --recursive
git submodule update --init --recursive --progress
.PHONY: git-submodules
git-submodules: git-submodule
.PHONY: list-keyboards
list-keyboards:
util/list_keyboards.sh | sort -u | tr '\n' ' '

View File

@@ -105,8 +105,8 @@ ifeq ($(strip $(BOOTLOADER)), halfkay)
ifeq ($(strip $(MCU)), at90usb1286)
BOOTLOADER_SIZE = 1024
endif
# Teensy LC, 3.x
ifneq (,$(filter $(MCU_ORIG), MKL26Z64 MK20DX128 MK20DX256 MK66FX1M0))
# Teensy LC, 3.0, 3.1/2, 3.5, 3.6
ifneq (,$(filter $(MCU_ORIG), MKL26Z64 MK20DX128 MK20DX256 MK64FX512 MK66FX1M0))
FIRMWARE_FORMAT = hex
endif
endif
@@ -199,6 +199,11 @@ endif
ifeq ($(strip $(BOOTLOADER)), tinyuf2)
OPT_DEFS += -DBOOTLOADER_TINYUF2
BOOTLOADER_TYPE = tinyuf2
FIRMWARE_FORMAT = uf2
endif
ifeq ($(strip $(BOOTLOADER)), rp2040)
OPT_DEFS += -DBOOTLOADER_RP2040
BOOTLOADER_TYPE = rp2040
endif
ifeq ($(strip $(BOOTLOADER)), halfkay)
OPT_DEFS += -DBOOTLOADER_HALFKAY
@@ -212,6 +217,12 @@ ifeq ($(strip $(BOOTLOADER)), wb32-dfu)
OPT_DEFS += -DBOOTLOADER_WB32_DFU
BOOTLOADER_TYPE = wb32_dfu
endif
ifeq ($(strip $(BOOTLOADER)), ignition)
OPT_DEFS += -DBOOTLOADER_IGNITION
BOOTLOADER_TYPE = ignition
MCU_LDSCRIPT = IGNITION
endif
ifeq ($(strip $(BOOTLOADER_TYPE)),)
$(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate 'BOOTLOADER' in your keyboard's 'rules.mk' file.)

View File

@@ -13,6 +13,14 @@ endif
include paths.mk
include $(BUILDDEFS_PATH)/message.mk
# Helper to add defines with a 'QMK_' prefix
define add_qmk_prefix_defs
ifdef $1
# Need to cater for 'STM32L4xx+'
OPT_DEFS += -DQMK_$(2)="$($1)" -DQMK_$(2)_$(shell echo $($1) | sed -e 's@+@Plus@g' -e 's@[^a-zA-Z0-9]@_@g' | tr '[:lower:]' '[:upper:]')
endif
endef
# Set the qmk cli to use
QMK_BIN ?= qmk
@@ -228,7 +236,7 @@ endif
# that the same keymap may be used on multiple keyboards.
#
# We grab the most top-level include file that we can. That file should
# use #ifdef statements to include all the neccesary subfolder includes,
# use #ifdef statements to include all the necessary subfolder includes,
# as described here:
#
# https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic
@@ -390,10 +398,18 @@ ifneq ("$(KEYMAP_H)","")
CONFIG_H += $(KEYMAP_H)
endif
OPT_DEFS += -DKEYMAP_C=\"$(KEYMAP_C)\"
# If a keymap or userspace places their keymap array in another file instead, allow for it to be included
# !!NOTE!! -- For this to work, the source file cannot be part of $(SRC), so users should not add it via `SRC += <file>`
ifneq ($(strip $(INTROSPECTION_KEYMAP_C)),)
OPT_DEFS += -DINTROSPECTION_KEYMAP_C=\"$(strip $(INTROSPECTION_KEYMAP_C))\"
endif
# project specific files
SRC += \
$(KEYBOARD_SRC) \
$(KEYMAP_C) \
$(QUANTUM_DIR)/keymap_introspection.c \
$(QUANTUM_SRC) \
$(QUANTUM_DIR)/main.c \
@@ -436,6 +452,14 @@ else
include $(TMK_PATH)/protocol/$(PLATFORM_KEY).mk
endif
# Setup definitions based on the selected MCU
$(eval $(call add_qmk_prefix_defs,MCU_ORIG,MCU))
$(eval $(call add_qmk_prefix_defs,MCU_ARCH,MCU_ARCH))
$(eval $(call add_qmk_prefix_defs,MCU_PORT_NAME,MCU_PORT_NAME))
$(eval $(call add_qmk_prefix_defs,MCU_FAMILY,MCU_FAMILY))
$(eval $(call add_qmk_prefix_defs,MCU_SERIES,MCU_SERIES))
$(eval $(call add_qmk_prefix_defs,BOARD,BOARD))
# TODO: remove this bodge?
PROJECT_DEFS := $(OPT_DEFS)
PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS)
@@ -469,6 +493,19 @@ check-size: build
check-md5: build
objs-size: build
ifeq ($(strip $(TOP_SYMBOLS)),yes)
all: top-symbols
check-size: top-symbols
top-symbols: build
echo "###########################################"
echo "# Highest flash usage:"
$(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep -i ' [t] ' | head -n10 | sed -e 's#^0000000# #g' -e 's#^000000# #g' -e 's#^00000# #g' -e 's#^0000# #g' -e 's#^000# #g' -e 's#^00# #g' -e 's#^0# #g'
echo "###########################################"
echo "# Highest RAM usage:"
$(NM) -Crtd --size-sort $(BUILD_DIR)/$(TARGET).elf | grep -i ' [dbv] ' | head -n10 | sed -e 's#^0000000# #g' -e 's#^000000# #g' -e 's#^00000# #g' -e 's#^0000# #g' -e 's#^000# #g' -e 's#^00# #g' -e 's#^0# #g'
echo "###########################################"
endif
include $(BUILDDEFS_PATH)/show_options.mk
include $(BUILDDEFS_PATH)/common_rules.mk

View File

@@ -38,11 +38,11 @@ CREATE_MAP := no
VPATH += \
$(LIB_PATH)/googletest \
$(LIB_PATH)/googlemock \
$(LIB_PATH)/printf
$(COMMON_VPATH) \
$(TEST_PATH)
all: elf
VPATH += $(COMMON_VPATH)
PLATFORM:=TEST
PLATFORM_KEY:=test
BOOTLOADER_TYPE:=none
@@ -63,6 +63,8 @@ include $(TMK_PATH)/protocol.mk
include $(QUANTUM_PATH)/debounce/tests/rules.mk
include $(QUANTUM_PATH)/encoder/tests/rules.mk
include $(QUANTUM_PATH)/sequencer/tests/rules.mk
include $(QUANTUM_PATH)/wear_leveling/tests/rules.mk
include $(QUANTUM_PATH)/logging/print.mk
include $(PLATFORM_PATH)/test/rules.mk
ifneq ($(filter $(FULL_TESTS),$(TEST)),)
include $(BUILDDEFS_PATH)/build_full_test.mk
@@ -70,7 +72,6 @@ endif
$(TEST)_SRC += \
tests/test_common/main.c \
$(LIB_PATH)/printf/printf.c \
$(QUANTUM_PATH)/logging/print.c
$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)

View File

@@ -15,7 +15,6 @@
QUANTUM_SRC += \
$(QUANTUM_DIR)/quantum.c \
$(QUANTUM_DIR)/send_string.c \
$(QUANTUM_DIR)/bitwise.c \
$(QUANTUM_DIR)/led.c \
$(QUANTUM_DIR)/action.c \
@@ -92,10 +91,29 @@ ifeq ($(MUSIC_ENABLE), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
endif
VALID_STENO_PROTOCOL_TYPES := geminipr txbolt all
STENO_PROTOCOL ?= all
ifeq ($(strip $(STENO_ENABLE)), yes)
OPT_DEFS += -DSTENO_ENABLE
VIRTSER_ENABLE ?= yes
SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
ifeq ($(filter $(STENO_PROTOCOL),$(VALID_STENO_PROTOCOL_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid STENO_PROTOCOL,STENO_PROTOCOL="$(STENO_PROTOCOL)" is not a valid stenography protocol)
else
OPT_DEFS += -DSTENO_ENABLE
VIRTSER_ENABLE ?= yes
ifeq ($(strip $(STENO_PROTOCOL)), geminipr)
OPT_DEFS += -DSTENO_ENABLE_GEMINI
endif
ifeq ($(strip $(STENO_PROTOCOL)), txbolt)
OPT_DEFS += -DSTENO_ENABLE_BOLT
endif
ifeq ($(strip $(STENO_PROTOCOL)), all)
OPT_DEFS += -DSTENO_ENABLE_ALL
OPT_DEFS += -DSTENO_ENABLE_GEMINI
OPT_DEFS += -DSTENO_ENABLE_BOLT
endif
SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
endif
endif
ifeq ($(strip $(VIRTSER_ENABLE)), yes)
@@ -108,15 +126,16 @@ ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/mousekey.c
endif
VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick cirque_pinnacle_i2c cirque_pinnacle_spi pmw3360 pmw3389 pimoroni_trackball custom
VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick cirque_pinnacle_i2c cirque_pinnacle_spi paw3204 pmw3360 pmw3389 pimoroni_trackball custom
ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
ifeq ($(filter $(POINTING_DEVICE_DRIVER),$(VALID_POINTING_DEVICE_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid POINTING_DEVICE_DRIVER,POINTING_DEVICE_DRIVER="$(POINTING_DEVICE_DRIVER)" is not a valid pointing device type)
else
OPT_DEFS += -DPOINTING_DEVICE_ENABLE
MOUSE_ENABLE := yes
SRC += $(QUANTUM_DIR)/pointing_device.c
SRC += $(QUANTUM_DIR)/pointing_device_drivers.c
VPATH += $(QUANTUM_DIR)/pointing_device
SRC += $(QUANTUM_DIR)/pointing_device/pointing_device.c
SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_drivers.c
ifneq ($(strip $(POINTING_DEVICE_DRIVER)), custom)
SRC += drivers/sensors/$(strip $(POINTING_DEVICE_DRIVER)).c
OPT_DEFS += -DPOINTING_DEVICE_DRIVER_$(strip $(shell echo $(POINTING_DEVICE_DRIVER) | tr '[:lower:]' '[:upper:]'))
@@ -131,19 +150,21 @@ ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_i2c)
OPT_DEFS += -DSTM32_I2C -DHAL_USE_I2C=TRUE
SRC += drivers/sensors/cirque_pinnacle.c
SRC += drivers/sensors/cirque_pinnacle_gestures.c
SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c
QUANTUM_LIB_SRC += i2c_master.c
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), cirque_pinnacle_spi)
OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
SRC += drivers/sensors/cirque_pinnacle.c
SRC += drivers/sensors/cirque_pinnacle_gestures.c
SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c
QUANTUM_LIB_SRC += spi_master.c
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pimoroni_trackball)
OPT_DEFS += -DSTM32_SPI -DHAL_USE_I2C=TRUE
QUANTUM_LIB_SRC += i2c_master.c
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pmw3360)
OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
QUANTUM_LIB_SRC += spi_master.c
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pmw3389)
else ifneq ($(filter $(strip $(POINTING_DEVICE_DRIVER)),pmw3360 pmw3389),)
OPT_DEFS += -DSTM32_SPI -DHAL_USE_SPI=TRUE
SRC += drivers/sensors/pmw33xx_common.c
QUANTUM_LIB_SRC += spi_master.c
endif
endif
@@ -154,33 +175,36 @@ ifeq ($(strip $(QUANTUM_PAINTER_ENABLE)), yes)
include $(QUANTUM_DIR)/painter/rules.mk
endif
VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi
VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi wear_leveling
EEPROM_DRIVER ?= vendor
ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid EEPROM_DRIVER,EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver)
else
OPT_DEFS += -DEEPROM_ENABLE
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
COMMON_VPATH += $(DRIVER_PATH)/eeprom
COMMON_VPATH += $(PLATFORM_COMMON_DIR)
ifeq ($(strip $(EEPROM_DRIVER)), custom)
# Custom EEPROM implementation -- only needs to implement init/erase/read_block/write_block
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
COMMON_VPATH += $(DRIVER_PATH)/eeprom
SRC += eeprom_driver.c
else ifeq ($(strip $(EEPROM_DRIVER)), wear_leveling)
# Wear-leveling EEPROM implementation
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
SRC += eeprom_driver.c eeprom_wear_leveling.c
else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
# External I2C EEPROM implementation
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
COMMON_VPATH += $(DRIVER_PATH)/eeprom
QUANTUM_LIB_SRC += i2c_master.c
SRC += eeprom_driver.c eeprom_i2c.c
else ifeq ($(strip $(EEPROM_DRIVER)), spi)
# External SPI EEPROM implementation
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
COMMON_VPATH += $(DRIVER_PATH)/eeprom
QUANTUM_LIB_SRC += spi_master.c
SRC += eeprom_driver.c eeprom_spi.c
else ifeq ($(strip $(EEPROM_DRIVER)), transient)
# Transient EEPROM implementation -- no data storage but provides runtime area for it
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
COMMON_VPATH += $(DRIVER_PATH)/eeprom
SRC += eeprom_driver.c eeprom_transient.c
else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
# Vendor-implemented EEPROM
@@ -188,20 +212,21 @@ else
ifeq ($(PLATFORM),AVR)
# Automatically provided by avr-libc, nothing required
else ifeq ($(PLATFORM),CHIBIOS)
ifneq ($(filter STM32F3xx_% STM32F1xx_% %_STM32F401xC %_STM32F401xE %_STM32F405xG %_STM32F411xE %_STM32F072xB %_STM32F042x6 %_GD32VF103xB %_GD32VF103x8, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
ifneq ($(filter STM32F3xx_% STM32F1xx_% %_STM32F401xC %_STM32F401xE %_STM32F405xG %_STM32F411xE %_STM32F072xB %_STM32F042x6 %_GD32VF103xB %_GD32VF103x8 %_GD32F303x6, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
# Emulated EEPROM
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_FLASH_EMULATED
COMMON_VPATH += $(DRIVER_PATH)/eeprom
SRC += eeprom_driver.c
SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
COMMON_VPATH += $(DRIVER_PATH)/flash
SRC += eeprom_driver.c eeprom_stm32.c flash_stm32.c
else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
# True EEPROM on STM32L0xx, L1xx
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1
COMMON_VPATH += $(DRIVER_PATH)/eeprom
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
SRC += eeprom_driver.c
SRC += eeprom_stm32_L0_L1.c
SRC += eeprom_driver.c eeprom_stm32_L0_L1.c
else ifneq ($(filter $(MCU_SERIES),RP2040),)
# Wear-leveling EEPROM implementation, backed by RP2040 flash
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
SRC += eeprom_driver.c eeprom_wear_leveling.c
WEAR_LEVELING_DRIVER = rp2040_flash
else ifneq ($(filter $(MCU_SERIES),KL2x K20x),)
# Teensy EEPROM implementations
OPT_DEFS += -DEEPROM_TEENSY
@@ -209,36 +234,69 @@ else
else
# Fall back to transient, i.e. non-persistent
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
COMMON_VPATH += $(DRIVER_PATH)/eeprom
SRC += eeprom_driver.c eeprom_transient.c
endif
else ifeq ($(PLATFORM),ARM_ATSAM)
# arm_atsam EEPROM
OPT_DEFS += -DEEPROM_SAMD
SRC += $(PLATFORM_COMMON_DIR)/eeprom_samd.c
SRC += eeprom_samd.c
else ifeq ($(PLATFORM),TEST)
# Test harness "EEPROM"
OPT_DEFS += -DEEPROM_TEST_HARNESS
SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
SRC += eeprom.c
endif
endif
endif
VALID_WEAR_LEVELING_DRIVER_TYPES := custom embedded_flash spi_flash rp2040_flash legacy
WEAR_LEVELING_DRIVER ?= none
ifneq ($(strip $(WEAR_LEVELING_DRIVER)),none)
ifeq ($(filter $(WEAR_LEVELING_DRIVER),$(VALID_WEAR_LEVELING_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid WEAR_LEVELING_DRIVER,WEAR_LEVELING_DRIVER="$(WEAR_LEVELING_DRIVER)" is not a valid wear leveling driver)
else
FNV_ENABLE := yes
OPT_DEFS += -DWEAR_LEVELING_ENABLE
OPT_DEFS += -DWEAR_LEVELING_$(strip $(shell echo $(WEAR_LEVELING_DRIVER) | tr '[:lower:]' '[:upper:]'))
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/wear_leveling
COMMON_VPATH += $(DRIVER_PATH)/wear_leveling
COMMON_VPATH += $(QUANTUM_DIR)/wear_leveling
SRC += wear_leveling.c
ifeq ($(strip $(WEAR_LEVELING_DRIVER)), embedded_flash)
OPT_DEFS += -DHAL_USE_EFL
SRC += wear_leveling_efl.c
POST_CONFIG_H += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/wear_leveling/wear_leveling_efl_config.h
else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), spi_flash)
FLASH_DRIVER := spi
SRC += wear_leveling_flash_spi.c
POST_CONFIG_H += $(DRIVER_PATH)/wear_leveling/wear_leveling_flash_spi_config.h
else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), rp2040_flash)
SRC += wear_leveling_rp2040_flash.c
POST_CONFIG_H += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_PATH)/wear_leveling/wear_leveling_rp2040_flash_config.h
else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), legacy)
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
SRC += flash_stm32.c wear_leveling_legacy.c
POST_CONFIG_H += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/wear_leveling/wear_leveling_legacy_config.h
endif
endif
endif
VALID_FLASH_DRIVER_TYPES := spi
FLASH_DRIVER ?= no
ifneq ($(strip $(FLASH_DRIVER)), no)
FLASH_DRIVER ?= none
ifneq ($(strip $(FLASH_DRIVER)), none)
ifeq ($(filter $(FLASH_DRIVER),$(VALID_FLASH_DRIVER_TYPES)),)
$(error FLASH_DRIVER="$(FLASH_DRIVER)" is not a valid FLASH driver)
$(call CATASTROPHIC_ERROR,Invalid FLASH_DRIVER,FLASH_DRIVER="$(FLASH_DRIVER)" is not a valid flash driver)
else
OPT_DEFS += -DFLASH_ENABLE
ifeq ($(strip $(FLASH_DRIVER)), spi)
ifeq ($(strip $(FLASH_DRIVER)),spi)
OPT_DEFS += -DFLASH_DRIVER -DFLASH_SPI
COMMON_VPATH += $(DRIVER_PATH)/flash
SRC += flash_spi.c
QUANTUM_LIB_SRC += spi_master.c
endif
endif
endif
RGBLIGHT_ENABLE ?= no
VALID_RGBLIGHT_TYPES := WS2812 APA102 custom
@@ -275,7 +333,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
endif
LED_MATRIX_ENABLE ?= no
VALID_LED_MATRIX_TYPES := IS31FL3731 IS31FL3742A IS31FL3743A IS31FL3745 IS31FL3746A custom
VALID_LED_MATRIX_TYPES := IS31FL3731 IS31FL3742A IS31FL3743A IS31FL3745 IS31FL3746A CKLED2001 custom
# TODO: IS31FL3733 IS31FL3737 IS31FL3741
ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
@@ -331,6 +389,13 @@ endif
QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(LED_MATRIX_DRIVER)), CKLED2001)
OPT_DEFS += -DCKLED2001 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/led
SRC += ckled2001-simple.c
QUANTUM_LIB_SRC += i2c_master.c
endif
endif
RGB_MATRIX_ENABLE ?= no
@@ -500,7 +565,7 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
endif
endif
VALID_WS2812_DRIVER_TYPES := bitbang pwm spi i2c
VALID_WS2812_DRIVER_TYPES := bitbang pwm spi i2c vendor
WS2812_DRIVER ?= bitbang
ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
@@ -542,12 +607,6 @@ ifeq ($(strip $(LED_TABLES)), yes)
SRC += $(QUANTUM_DIR)/led_tables.c
endif
ifeq ($(strip $(TERMINAL_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c
OPT_DEFS += -DTERMINAL_ENABLE
OPT_DEFS += -DUSER_PRINT
endif
ifeq ($(strip $(ORYX_ENABLE)), yes)
RAW_ENABLE := yes
SRC += $(QUANTUM_DIR)/oryx.c
@@ -601,6 +660,14 @@ ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
QUANTUM_SRC += $(QUANTUM_DIR)/debounce/$(strip $(DEBOUNCE_TYPE)).c
endif
VALID_SERIAL_DRIVER_TYPES := bitbang usart vendor
SERIAL_DRIVER ?= bitbang
ifeq ($(filter $(SERIAL_DRIVER),$(VALID_SERIAL_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid SERIAL_DRIVER,SERIAL_DRIVER="$(SERIAL_DRIVER)" is not a valid SERIAL driver)
endif
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
POST_CONFIG_H += $(QUANTUM_DIR)/split_common/post_config.h
OPT_DEFS += -DSPLIT_KEYBOARD
@@ -625,11 +692,11 @@ ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
endif
endif
SERIAL_DRIVER ?= bitbang
OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]'))
ifeq ($(strip $(SERIAL_DRIVER)), bitbang)
QUANTUM_LIB_SRC += serial.c
else
QUANTUM_LIB_SRC += serial_protocol.c
QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c
endif
endif
@@ -641,6 +708,12 @@ ifeq ($(strip $(CRC_ENABLE)), yes)
SRC += crc.c
endif
ifeq ($(strip $(FNV_ENABLE)), yes)
OPT_DEFS += -DFNV_ENABLE
VPATH += $(LIB_PATH)/fnv
SRC += qmk_fnv_type_validation.c hash_32a.c hash_64a.c
endif
ifeq ($(strip $(HAPTIC_ENABLE)),yes)
COMMON_VPATH += $(DRIVER_PATH)/haptic
@@ -717,6 +790,13 @@ ifeq ($(strip $(MAGIC_ENABLE)), yes)
OPT_DEFS += -DMAGIC_KEYCODE_ENABLE
endif
SEND_STRING_ENABLE ?= yes
ifeq ($(strip $(SEND_STRING_ENABLE)), yes)
OPT_DEFS += -DSEND_STRING_ENABLE
COMMON_VPATH += $(QUANTUM_DIR)/send_string
SRC += $(QUANTUM_DIR)/send_string/send_string.c
endif
ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
OPT_DEFS += -DAUTO_SHIFT_ENABLE
@@ -827,3 +907,11 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
QUANTUM_LIB_SRC += uart.c
endif
endif
ifeq ($(strip $(ENCODER_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/encoder.c
OPT_DEFS += -DENCODER_ENABLE
ifeq ($(strip $(ENCODER_MAP_ENABLE)), yes)
OPT_DEFS += -DENCODER_MAP_ENABLE
endif
endif

View File

@@ -1,21 +1,7 @@
# Hey Emacs, this is a -*- makefile -*-
#----------------------------------------------------------------------------
# WinAVR Makefile Template written by Eric B. Weddington, Jg Wunsch, et al.
#
# Released to the Public Domain
#
# Additional material for this makefile was written by:
# Peter Fleury
# Tim Henigan
# Colin O'Flynn
# Reiner Patommel
# Markus Pfaff
# Sander Pool
# Frederik Rouleau
# Carlos Lamas
#
# Enable vpath seraching for source files only
# Enable vpath searching for source files only
# Without this, output files, could be read from the wrong .build directories
VPATH_SRC := $(VPATH)
vpath %.c $(VPATH_SRC)
@@ -38,36 +24,15 @@ NO_LTO_OBJ := $(filter %.a,$(OBJ))
MASTER_OUTPUT := $(firstword $(OUTPUTS))
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT ?= s
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=gnu99
# Place -D or -U options here for C sources
#CDEFS +=
# Place -D or -U options here for ASM sources
#ADEFS +=
# Place -D or -U options here for C++ sources
#CXXDEFS += -D__STDC_LIMIT_MACROS
#CXXDEFS += -D__STDC_CONSTANT_MACROS
#CXXDEFS +=
# Compiler flag to set the C and C++ language standard level
CSTANDARD = -std=gnu11
CXXSTANDARD = -std=gnu++14
# Speed up recompilations by opt-in usage of ccache
USE_CCACHE ?= no
@@ -75,12 +40,8 @@ ifneq ($(USE_CCACHE),no)
CC_PREFIX ?= ccache
endif
#---------------- Compiler Options C ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
#---------------- C Compiler Options ----------------
ifeq ($(strip $(LTO_ENABLE)), yes)
ifeq ($(PLATFORM),ARM_ATSAM)
$(info Enabling LTO on arm_atsam-targeting boards is known to have a high likelihood of failure.)
@@ -111,29 +72,20 @@ CFLAGS += -Wstrict-prototypes
ifneq ($(strip $(ALLOW_WARNINGS)), yes)
CFLAGS += -Werror
endif
#CFLAGS += -mshort-calls
#CFLAGS += -fno-unit-at-a-time
#CFLAGS += -Wundef
#CFLAGS += -Wunreachable-code
#CFLAGS += -Wsign-compare
CFLAGS += $(CSTANDARD)
# This fixes lots of keyboards linking errors but SHOULDN'T BE A FINAL SOLUTION
# Fixing of multiple variable definitions must be made.
CFLAGS += -fcommon
#---------------- Compiler Options C++ ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
#---------------- C++ Compiler Options ----------------
ifeq ($(strip $(DEBUG_ENABLE)),yes)
CXXFLAGS += -g$(DEBUG)
endif
CXXFLAGS += $(CXXDEFS)
CXXFLAGS += -O$(OPT)
# to supress "warning: only initialized variables can be placed into program memory area"
# to suppress "warning: only initialized variables can be placed into program memory area"
CXXFLAGS += -w
CXXFLAGS += -Wall
CXXFLAGS += -Wundef
@@ -141,57 +93,17 @@ CXXFLAGS += -Wundef
ifneq ($(strip $(ALLOW_WARNINGS)), yes)
CXXFLAGS += -Werror
endif
#CXXFLAGS += -mshort-calls
#CXXFLAGS += -fno-unit-at-a-time
#CXXFLAGS += -Wstrict-prototypes
#CXXFLAGS += -Wunreachable-code
#CXXFLAGS += -Wsign-compare
#CXXFLAGS += $(CSTANDARD)
#---------------- Assembler Options ----------------
ASFLAGS += $(ADEFS)
ifeq ($(VERBOSE_AS_CMD),yes)
ASFLAGS += -v
endif
#---------------- Library Options ----------------
# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
# If this is left blank, then it will use the Standard printf version.
PRINTF_LIB =
#PRINTF_LIB = $(PRINTF_LIB_MIN)
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
# Minimalistic scanf version
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
# If this is left blank, then it will use the Standard scanf version.
SCANF_LIB =
#SCANF_LIB = $(SCANF_LIB_MIN)
#SCANF_LIB = $(SCANF_LIB_FLOAT)
MATH_LIB = -lm
CREATE_MAP ?= yes
#---------------- Linker Options ----------------
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
#
# Comennt out "--relax" option to avoid a error such:
# (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
#
CREATE_MAP ?= yes
ifeq ($(CREATE_MAP),yes)
LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
endif
@@ -201,20 +113,11 @@ endif
#LDFLAGS += -Wl,--relax
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
#LDFLAGS += -T linker_script.x
LDFLAGS += -lm
# You can give EXTRALDFLAGS at 'make' command line.
LDFLAGS += $(EXTRALDFLAGS)
#---------------- Assembler Listings ----------------
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
# -listing-cont-lines: Sets the maximum number of continuation lines of hex
# dump that will be displayed for a given single line of source input.
ADHLNS_ENABLE ?= no
ifeq ($(ADHLNS_ENABLE),yes)
@@ -468,6 +371,7 @@ show_path:
dump_vars: ERROR_IF_EMPTY=""
dump_vars: ERROR_IF_NONBOOL=""
dump_vars: ERROR_IF_UNSET=""
dump_vars: CATASTROPHIC_ERROR=""
dump_vars:
@$(foreach V,$(sort $(.VARIABLES)),$(if $(filter-out environment% default automatic,$(origin $V)),$(info $V=$($V))))

View File

@@ -25,8 +25,6 @@ GENERIC_FEATURES = \
DIP_SWITCH \
DYNAMIC_KEYMAP \
DYNAMIC_MACRO \
ENCODER \
ENCODER_MAP \
GRAVE_ESC \
HAPTIC \
KEY_LOCK \

View File

@@ -87,6 +87,33 @@ ifneq ($(findstring MK20DX256, $(MCU)),)
BOARD ?= PJRC_TEENSY_3_1
endif
ifneq ($(findstring MK64FX512, $(MCU)),)
# Cortex version
MCU = cortex-m4
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
ARMV = 7
## chip/board settings
# - the next two should match the directories in
# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
MCU_FAMILY = KINETIS
MCU_SERIES = K60x
# Linker script to use
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
# or <keyboard_dir>/ld/
MCU_LDSCRIPT ?= MK64FX512
# Startup code to use
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
MCU_STARTUP ?= k60x
# Board: it should exist either in <chibios>/os/hal/boards/,
# <keyboard_dir>/boards/, or drivers/boards/
BOARD ?= PJRC_TEENSY_3_5
endif
ifneq ($(findstring MK66FX1M0, $(MCU)),)
# Cortex version
MCU = cortex-m4
@@ -116,6 +143,41 @@ ifneq ($(findstring MK66FX1M0, $(MCU)),)
BOARD ?= PJRC_TEENSY_3_6
endif
ifneq ($(findstring RP2040, $(MCU)),)
# Cortex version
MCU = cortex-m0plus
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
CHIBIOS_PORT = ARMv6-M-RP2
## chip/board settings
# - the next two should match the directories in
# <chibios[-contrib]>/os/hal/ports/$(MCU_PORT_NAME)/$(MCU_SERIES)
# OR
# <chibios[-contrib]>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
MCU_FAMILY = RP
MCU_SERIES = RP2040
# Linker script to use
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
# or <keyboard_dir>/ld/
STARTUPLD_CONTRIB = $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/ld
MCU_LDSCRIPT ?= RP2040_FLASH_TIMECRIT
LDFLAGS += -L $(STARTUPLD_CONTRIB)
# Startup code to use
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
MCU_STARTUP ?= rp2040
# Board: it should exist either in <chibios>/os/hal/boards/,
# <keyboard_dir>/boards/, or drivers/boards/
BOARD ?= GENERIC_PROMICRO_RP2040
# Default UF2 Bootloader settings
UF2_FAMILY ?= RP2040
FIRMWARE_FORMAT ?= uf2
endif
ifneq ($(findstring STM32F042, $(MCU)),)
# Cortex version
MCU = cortex-m0
@@ -286,7 +348,8 @@ ifneq ($(findstring STM32F401, $(MCU)),)
# or <keyboard_dir>/ld/
ifeq ($(strip $(BOOTLOADER)), tinyuf2)
MCU_LDSCRIPT ?= STM32F401xC_tinyuf2
FIRMWARE_FORMAT ?= uf2
EEPROM_DRIVER ?= wear_leveling
WEAR_LEVELING_DRIVER ?= legacy
else
MCU_LDSCRIPT ?= STM32F401xC
endif
@@ -297,7 +360,7 @@ ifneq ($(findstring STM32F401, $(MCU)),)
# Board: it should exist either in <chibios>/os/hal/boards/,
# <keyboard_dir>/boards/, or drivers/boards/
BOARD ?= BLACKPILL_STM32_F401
BOARD ?= GENERIC_STM32_F401XC
USE_FPU ?= yes
@@ -402,7 +465,8 @@ ifneq ($(findstring STM32F411, $(MCU)),)
# or <keyboard_dir>/ld/
ifeq ($(strip $(BOOTLOADER)), tinyuf2)
MCU_LDSCRIPT ?= STM32F411xE_tinyuf2
FIRMWARE_FORMAT ?= uf2
EEPROM_DRIVER ?= wear_leveling
WEAR_LEVELING_DRIVER ?= legacy
else
MCU_LDSCRIPT ?= STM32F411xE
endif
@@ -413,7 +477,7 @@ ifneq ($(findstring STM32F411, $(MCU)),)
# Board: it should exist either in <chibios>/os/hal/boards/,
# <keyboard_dir>/boards/, or drivers/boards/
BOARD ?= BLACKPILL_STM32_F411
BOARD ?= GENERIC_STM32_F411XE
USE_FPU ?= yes
@@ -751,6 +815,40 @@ ifneq ($(findstring GD32VF103, $(MCU)),)
USE_FPU ?= no
endif
ifneq ($(findstring GD32F303, $(MCU)),)
# Cortex version
MCU = cortex-m4
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
ARMV = 7
## chip/board settings
# - the next two should match the directories in
# <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 = GD32F
MCU_SERIES = GD32F303
# Linker script to use
# - it should exist either in <chibios>/os/common/startup/ARMCMx/compilers/GCC/ld/
# or <keyboard_dir>/ld/
MCU_LDSCRIPT ?= GD32F303x6
# Startup code to use
# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
MCU_STARTUP ?= gd32f30x
# Board: it should exist either in <chibios>/os/hal/boards/,
# <keyboard_dir>/boards/, or drivers/boards/
BOARD ?= GD32F303C_EVAL
STM32_BOOTLOADER_ADDRESS ?= 0x08002000
USE_FPU ?= no
endif
ifneq (,$(filter $(MCU),at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647 at90usb1286 at90usb1287))
PROTOCOL = LUFA
@@ -845,4 +943,4 @@ ifneq (,$(filter $(MCU),attiny85))
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
F_CPU ?= 16500000
endif
endif

View File

@@ -5,7 +5,6 @@ BUILD_OPTION_NAMES = \
CONSOLE_ENABLE \
COMMAND_ENABLE \
NKRO_ENABLE \
TERMINAL_ENABLE \
CUSTOM_MATRIX \
DEBOUNCE_TYPE \
SPLIT_KEYBOARD \
@@ -46,6 +45,7 @@ OTHER_OPTION_NAMES = \
LEADER_ENABLE \
PRINTING_ENABLE \
STENO_ENABLE \
STENO_PROTOCOL \
TAP_DANCE_ENABLE \
VIRTSER_ENABLE \
OLED_ENABLE \

View File

@@ -4,6 +4,7 @@ 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 $(QUANTUM_PATH)/wear_leveling/tests/testlist.mk
include $(PLATFORM_PATH)/test/testlist.mk
define VALIDATE_TEST_LIST

View File

@@ -16,6 +16,30 @@
"board": "QMK_PROTON_C",
"pin_compatible": "promicro"
},
"kb2040": {
"processor": "RP2040",
"bootloader": "rp2040",
"board": "QMK_PM2040",
"pin_compatible": "promicro"
},
"promicro_rp2040": {
"processor": "RP2040",
"bootloader": "rp2040",
"board": "QMK_PM2040",
"pin_compatible": "promicro"
},
"blok": {
"processor": "RP2040",
"bootloader": "rp2040",
"board": "QMK_PM2040",
"pin_compatible": "promicro"
},
"bit_c_pro": {
"processor": "RP2040",
"bootloader": "rp2040",
"board": "QMK_PM2040",
"pin_compatible": "promicro"
},
"bluepill": {
"processor": "STM32F103",
"bootloader": "stm32duino",
@@ -30,6 +54,18 @@
"processor": "STM32F411",
"bootloader": "stm32-dfu",
"board": "BLACKPILL_STM32_F411"
},
"stemcell": {
"processor": "STM32F411",
"bootloader": "tinyuf2",
"board": "STEMCELL",
"pin_compatible": "promicro"
},
"bonsai_c4": {
"processor": "STM32F411",
"bootloader": "stm32-dfu",
"board": "GENERIC_STM32_F411XE",
"pin_compatible": "promicro"
}
}
}
}

View File

@@ -7,9 +7,14 @@
# 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
# deprecated: Default `false`. Set to `true` to turn on warning when a value exists
# invalid: Default `false`. Set to `true` to generate errors when a value exists
# replace_with: use with a key marked deprecated or invalid to designate a replacement
"AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"},
"BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"},
"BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"},
"BACKLIGHT_LEVELS": {"info_key": "backlight.levels", "value_type": "int"},
"BACKLIGHT_ON_STATE": {"info_key": "backlight.on_state", "value_type": "int"},
"BACKLIGHT_PIN": {"info_key": "backlight.pin"},
"BOTH_SHIFTS_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.both_shifts_turns_on", "value_type": "bool"},
"CAPS_WORD_IDLE_TIMEOUT": {"info_key": "caps_word.idle_timeout", "value_type": "int"},
@@ -19,7 +24,6 @@
"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", "value_type": "str", "to_json": false},
"DIODE_DIRECTION": {"info_key": "diode_direction"},
"DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.double_tap_shift_turns_on", "value_type": "bool"},
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"},
@@ -34,6 +38,9 @@
"LED_CAPS_LOCK_PIN": {"info_key": "indicators.caps_lock"},
"LED_NUM_LOCK_PIN": {"info_key": "indicators.num_lock"},
"LED_SCROLL_LOCK_PIN": {"info_key": "indicators.scroll_lock"},
"LED_COMPOSE_PIN": {"info_key": "indicators.compose"},
"LED_KANA_PIN": {"info_key": "indicators.kana"},
"LED_PIN_ON_STATE": {"info_key": "indicators.on_state", "value_type": "int"},
"MANUFACTURER": {"info_key": "manufacturer"},
"MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "bool"},
"MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"},
@@ -51,7 +58,6 @@
"RGB_DI_PIN": {"info_key": "rgblight.pin"},
"RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"},
"RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"},
"RGBLIGHT_ANIMATIONS": {"info_key": "rgblight.animations.all", "value_type": "bool"},
"RGBLIGHT_EFFECT_ALTERNATING": {"info_key": "rgblight.animations.alternating", "value_type": "bool"},
"RGBLIGHT_EFFECT_BREATHING": {"info_key": "rgblight.animations.breathing", "value_type": "bool"},
"RGBLIGHT_EFFECT_CHRISTMAS": {"info_key": "rgblight.animations.christmas", "value_type": "bool"},
@@ -78,7 +84,6 @@
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"},
"QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"},
"QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"},
"QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int"},
"QMK_LED": {"info_key": "qmk_lufa_bootloader.led"},
"QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"},
"SECURE_UNLOCK_SEQUENCE": {"info_key": "secure.unlock_sequence", "value_type": "array.array.int", "to_json": false},
@@ -102,4 +107,14 @@
"USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"},
"USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"},
"USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"},
# Items we want flagged in lint
"NO_ACTION_MACRO": {"info_key": "_invalid.no_action_macro", "invalid": true},
"NO_ACTION_FUNCTION": {"info_key": "_invalid.no_action_function", "invalid": true},
"DESCRIPTION": {"info_key": "_invalid.usb_description", "invalid": true},
"DEBOUNCING_DELAY": {"info_key": "_invalid.debouncing_delay", "invalid": true, "replace_with": "DEBOUNCE"},
"PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true},
"UNUSED_PINS": {"info_key": "_invalid.unused_pins", "deprecated": true},
"RGBLIGHT_ANIMATIONS": {"info_key": "rgblight.animations.all", "value_type": "bool", "deprecated": true},
"QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int", "deprecated": true}
}

View File

@@ -7,15 +7,21 @@
# 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
# deprecated: Default `false`. Set to `true` to turn on warning when a value exists
# invalid: Default `false`. Set to `true` to generate errors when a value exists
# replace_with: use with a key marked deprecated or invalid to designate a replacement
"BOARD": {"info_key": "board"},
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
"BLUETOOTH": {"info_key": "bluetooth.driver"},
"CAPS_WORD_ENABLE": {"info_key": "caps_word.enabled", "value_type": "bool"},
"DEBOUNCE_TYPE": {"info_key": "build.debounce_type"},
"ENCODER_ENABLE": {"info_key": "encoder.enabled", "value_type": "bool"},
"FIRMWARE_FORMAT": {"info_key": "build.firmware_format"},
"KEYBOARD_SHARED_EP": {"info_key": "usb.shared_endpoint.keyboard", "value_type": "bool"},
"MOUSE_SHARED_EP": {"info_key": "usb.shared_endpoint.mouse", "value_type": "bool"},
"LAYOUTS": {"info_key": "community_layouts", "value_type": "list"},
"LED_MATRIX_DRIVER": {"info_key": "led_matrix.driver"},
"RGB_MATRIX_DRIVER": {"info_key": "rgb_matrix.driver"},
"LTO_ENABLE": {"info_key": "build.lto", "value_type": "bool"},
"MCU": {"info_key": "processor", "warn_duplicate": false},
"MOUSEKEY_ENABLE": {"info_key": "mouse_key.enabled", "value_type": "bool"},
@@ -24,5 +30,12 @@
"SECURE_ENABLE": {"info_key": "secure.enabled", "value_type": "bool"},
"SPLIT_KEYBOARD": {"info_key": "split.enabled", "value_type": "bool"},
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "to_c": false},
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
"STENO_ENABLE": {"info_key": "stenography.enabled", "value_type": "bool"},
"STENO_PROTOCOL": {"info_key": "stenography.protocol"},
# Items we want flagged in lint
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
"CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
"VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true}
}

View File

@@ -242,9 +242,6 @@
honeycomb: {
target: 'keyhive/honeycomb'
},
id80: {
target: 'id80/ansi'
},
idb_60: {
target: 'idb/idb_60',
layouts: {
@@ -826,6 +823,9 @@
geminate60: {
target: 'weirdo/geminate60'
},
gentleman65: {
target: 'jkeys_design/gentleman65'
},
georgi: {
target: 'gboards/georgi'
},
@@ -844,6 +844,9 @@
halberd: {
target: 'kagizaraya/halberd'
},
handwired/hillside/0_1: {
target: 'handwired/hillside/48'
}
hecomi/alpha: {
target: 'takashiski/hecomi/alpha'
},
@@ -857,7 +860,13 @@
target: 'idobao/id67/rgb'
},
id80: {
target: 'idobao/id80/v1'
target: 'idobao/id80/v2/ansi'
},
idobao/id80/v1/ansi: {
target: 'idobao/id80/v2/ansi'
},
idobao/id80/v1/iso: {
target: 'idobao/id80/v2/iso'
},
id87: {
target: 'idobao/id87/v1'

View File

@@ -9,7 +9,6 @@
"properties": {
"url": {"type": "string"}
}
},
"parse_errors": {"$ref": "qmk.definitions.v1#/string_array"},
"parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"},

View File

@@ -1,5 +1,5 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$schema": "https://json-schema.org/draft/2020-12/schema#",
"$id": "qmk.definitions.v1",
"title": "Common definitions used across QMK's jsonschemas.",
"type": "object",
@@ -65,8 +65,7 @@
]
},
"key_unit": {
"type": "number",
"min": 0.25
"type": "number"
},
"keyboard": {
"oneOf": [
@@ -103,8 +102,11 @@
"pattern": "^LINE_PIN\\d{1,2}$"
},
{
"type": "number",
"multipleOf": 1
"type": "string",
"pattern": "^GP\\d{1,2}$"
},
{
"type": "integer"
},
{
"type": "null"
@@ -115,14 +117,12 @@
"type": "number"
},
"signed_int": {
"type": "number",
"multipleOf": 1
"type": "integer"
},
"signed_int_8": {
"type": "number",
"min": -127,
"max": 127,
"multipleOf": 1
"type": "integer",
"minimum": -127,
"maximum": 127
},
"string_array": {
"type": "array",
@@ -138,17 +138,20 @@
},
"unsigned_decimal": {
"type": "number",
"min": 0
"minimum": 0
},
"unsigned_int": {
"type": "number",
"min": 0,
"multipleOf": 1
"type": "integer",
"minimum": 0
},
"unsigned_int_8": {
"type": "number",
"min": 0,
"max": 255,
"multipleOf": 1
"type": "integer",
"minimum": 0,
"maximum": 255
},
"bit": {
"type": "integer",
"minimum": 0,
"maximum": 1
}
}

View File

@@ -1,7 +1,27 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$schema": "https://json-schema.org/draft/2020-12/schema#",
"$id": "qmk.keyboard.v1",
"title": "Keyboard Information",
"definitions": {
"encoder_config": {
"type": "object",
"properties": {
"rotary": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["pin_a", "pin_b"],
"properties": {
"pin_a": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"pin_b": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
}
}
}
}
},
"type": "object",
"properties": {
"keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
@@ -14,7 +34,7 @@
},
"development_board": {
"type": "string",
"enum": ["promicro", "elite_c", "proton_c", "bluepill", "blackpill_f401", "blackpill_f411"]
"enum": ["promicro", "elite_c", "proton_c", "kb2040", "promicro_rp2040", "blok", "bit_c_pro", "stemcell", "bluepill", "blackpill_f401", "blackpill_f411", "bonsai_c4"]
},
"pin_compatible": {
"type": "string",
@@ -22,7 +42,7 @@
},
"processor": {
"type": "string",
"enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66FX1M0", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L432", "STM32L433", "STM32L442", "STM32L443", "GD32VF103", "WB32F3G71", "WB32FQ95", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
"enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK64FX512", "MK66FX1M0", "RP2040", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L432", "STM32L433", "STM32L442", "STM32L443", "GD32VF103", "WB32F3G71", "WB32FQ95", "GD32F303", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
},
"audio": {
"type": "object",
@@ -40,12 +60,12 @@
"breathing": {"type": "boolean"},
"breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"levels": {
"type": "number",
"min": 1,
"max": 31,
"multipleOf": 1
"type": "integer",
"minimum": 1,
"maximum": 31
},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"on_state": {"$ref": "qmk.definitions.v1#/bit"}
}
},
"bluetooth": {
@@ -56,7 +76,7 @@
"type": "string",
"enum": ["BluefruitLE", "RN42"]
},
"lto": {"type": "boolean"},
"lto": {"type": "boolean"}
}
},
"board": {
@@ -66,7 +86,30 @@
},
"bootloader": {
"type": "string",
"enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "custom", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "md-boot", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "gd32v-dfu", "wb32-dfu", "unknown", "usbasploader", "USBasp", "tinyuf2"],
"enum": [
"atmel-dfu",
"bootloadhid",
"bootloadHID",
"caterina",
"custom",
"gd32v-dfu",
"halfkay",
"kiibohd",
"lufa-dfu",
"lufa-ms",
"md-boot",
"qmk-dfu",
"qmk-hid",
"rp2040",
"stm32-dfu",
"stm32duino",
"tinyuf2",
"unknown",
"usbasploader",
"USBasp",
"wb32-dfu",
"ignition"
]
},
"bootloader_instructions": {
"type": "string",
@@ -78,13 +121,13 @@
"properties": {
"debounce_type": {
"type": "string",
"enum": ["custom", "eager_pk", "eager_pr", "sym_defer_pk", "sym_defer_pr", "sym_eager_pk"]
"enum": ["asym_eager_defer_pk", "custom", "sym_defer_g", "sym_defer_pk", "sym_defer_pr", "sym_eager_pk", "sym_eager_pr"]
},
"firmware_format": {
"type": "string",
"enum": ["bin", "hex", "uf2"]
},
"lto": {"type": "boolean"},
"lto": {"type": "boolean"}
}
},
"diode_direction": {
@@ -99,8 +142,8 @@
"enabled": {"type": "boolean"},
"both_shifts_turns_on": {"type": "boolean"},
"double_tap_shift_turns_on": {"type": "boolean"},
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
},
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"combo": {
"type": "object",
@@ -113,13 +156,22 @@
"type": "array",
"items": {"$ref": "qmk.definitions.v1#/filename"}
},
"encoder": {
"$ref": "#/definitions/encoder_config",
"properties": {
"enabled": {"type": "boolean"}
}
},
"features": {"$ref": "qmk.definitions.v1#/boolean_array"},
"indicators": {
"type": "object",
"properties": {
"caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}
"scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"compose": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"kana": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"on_state": {"$ref": "qmk.definitions.v1#/bit"}
}
},
"layout_aliases": {
@@ -145,18 +197,20 @@
"type": "object",
"additionalProperties": false,
"properties": {
"label": {"type": "string"},
"label": {
"type": "string",
"pattern": "^[^\\n]*$"
},
"matrix": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number",
"min": 0,
"multipleOf": 1
"type": "integer",
"minimum": 0
}
},
"r": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
"r": {"$ref": "qmk.definitions.v1#/signed_decimal"},
"rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
"ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"},
"h": {"$ref": "qmk.definitions.v1#/key_unit"},
@@ -190,18 +244,17 @@
"items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
},
"cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}
}
},
"mouse_key": {
"type": "object",
"properties": {
"enabled": {"type": "boolean"},
"delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
"delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
}
},
@@ -227,14 +280,13 @@
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number",
"min": 0,
"multipleOf": 1
"type": "integer",
"minimum": 0
}
},
"x": {"$ref": "qmk.definitions.v1#/key_unit"},
"y": {"$ref": "qmk.definitions.v1#/key_unit"},
"flags": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}
"flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
}
}
}
@@ -255,14 +307,13 @@
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number",
"min": 0,
"multipleOf": 1
"type": "integer",
"minimum": 0
}
},
"x": {"$ref": "qmk.definitions.v1#/key_unit"},
"y": {"$ref": "qmk.definitions.v1#/key_unit"},
"flags": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}
"flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
}
}
}
@@ -287,10 +338,9 @@
"blink": {"type": "boolean"},
"enabled": {"type": "boolean"},
"max": {
"type": "number",
"min": 1,
"max": 32,
"multipleOf": 1
"type": "integer",
"minimum": 1,
"maximum": 32
},
"override_rgb": {"type": "boolean"}
}
@@ -304,8 +354,8 @@
"split": {"type": "boolean"},
"split_count": {
"type": "array",
"minLength": 2,
"maxLength": 2,
"minItems": 2,
"maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
}
@@ -319,21 +369,31 @@
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"unlock_sequence": {
"type": "array",
"minLength": 1,
"maxLength": 5,
"minItems": 1,
"maxItems": 5,
"items": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "number",
"min": 0,
"multipleOf": 1
"type": "integer",
"minimum": 0
}
}
}
}
},
"stenography": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {"type": "boolean"},
"protocol": {
"type": "string",
"enum": ["all", "geminipr", "txbolt"]
}
}
},
"split": {
"type": "object",
"additionalProperties": false,
@@ -362,16 +422,24 @@
}
}
},
"encoder": {
"type": "object",
"additionalProperties": false,
"properties": {
"right": {
"$ref": "#/definitions/encoder_config"
}
}
},
"main": {
"type": "string",
"enum": ["eeprom", "left", "matrix_grid", "pin", "right"]
},
"soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"soft_serial_speed": {
"type": "number",
"min": 0,
"max": 5,
"multipleOf": 1
"type": "integer",
"minimum": 0,
"maximum": 5
},
"transport": {
"type": "object",
@@ -413,7 +481,7 @@
"retro_per_key": {"type": "boolean"},
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"term_per_key": {"type": "boolean"},
"toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"usb": {
@@ -425,7 +493,7 @@
"force_nkro": {"type": "boolean"},
"pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
"vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
"max_power": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"max_power": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"no_startup_check": {"type": "boolean"},
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"shared_endpoint": {
@@ -436,8 +504,8 @@
"mouse": {"type": "boolean"}
}
},
"suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"wait_for": {"type": "boolean"},
"suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"wait_for": {"type": "boolean"}
}
},
"qmk": {
@@ -445,8 +513,8 @@
"additionalProperties": false,
"properties": {
"keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"qmk_lufa_bootloader": {

View File

@@ -1,5 +1,5 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$schema": "https://json-schema.org/draft/2020-12/schema#",
"$id": "qmk.keymap.v1",
"title": "Keymap Information",
"type": "object",
@@ -31,7 +31,7 @@
"properties": {
"action": {
"type": "string",
"enum": ['beep', 'delay', 'down', 'tap', 'up']
"enum": ["beep", "delay", "down", "tap", "up"]
},
"keycodes": {
"type": "array",
@@ -50,8 +50,7 @@
},
"config": {"$ref": "qmk.keyboard.v1"},
"notes": {
"type": "string",
"description": "asdf"
"type": "string"
}
},
"required": [

View File

@@ -24,4 +24,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -54,6 +54,11 @@
# define EXTERNAL_EEPROM_PAGE_SIZE 32
# define EXTERNAL_EEPROM_ADDRESS_SIZE 2
# define EXTERNAL_EEPROM_WRITE_TIME 5
#elif defined(EEPROM_I2C_24LC32A)
# define EXTERNAL_EEPROM_BYTE_COUNT 4096
# define EXTERNAL_EEPROM_PAGE_SIZE 32
# define EXTERNAL_EEPROM_ADDRESS_SIZE 2
# define EXTERNAL_EEPROM_WRITE_TIME 5
#elif defined(EEPROM_I2C_MB85RC256V)
# define EXTERNAL_EEPROM_BYTE_COUNT 32768
# define EXTERNAL_EEPROM_PAGE_SIZE 128

View File

@@ -58,14 +58,20 @@ static bool spi_eeprom_start(void) {
static spi_status_t spi_eeprom_wait_while_busy(int timeout) {
uint32_t deadline = timer_read32() + timeout;
spi_status_t response;
do {
spi_status_t response = SR_WIP;
while (response & SR_WIP) {
if (!spi_eeprom_start()) {
return SPI_STATUS_ERROR;
}
spi_write(CMD_RDSR);
response = spi_read();
spi_stop();
if (timer_read32() >= deadline) {
return SPI_STATUS_TIMEOUT;
}
} while (response & SR_WIP);
}
return SPI_STATUS_SUCCESS;
}
@@ -105,27 +111,21 @@ void eeprom_driver_erase(void) {
void eeprom_read_block(void *buf, const void *addr, size_t len) {
//-------------------------------------------------
// Wait for the write-in-progress bit to be cleared
bool res = spi_eeprom_start();
if (!res) {
dprint("failed to start SPI for WIP check\n");
memset(buf, 0, len);
return;
}
spi_status_t response = spi_eeprom_wait_while_busy(EXTERNAL_EEPROM_SPI_TIMEOUT);
spi_stop();
if (response == SPI_STATUS_TIMEOUT) {
dprint("SPI timeout for WIP check\n");
if (response != SPI_STATUS_SUCCESS) {
spi_stop();
memset(buf, 0, len);
dprint("SPI timeout for WIP check\n");
return;
}
//-------------------------------------------------
// Perform read
res = spi_eeprom_start();
bool res = spi_eeprom_start();
if (!res) {
dprint("failed to start SPI for read\n");
spi_stop();
memset(buf, 0, len);
dprint("failed to start SPI for read\n");
return;
}
@@ -158,15 +158,9 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
//-------------------------------------------------
// Wait for the write-in-progress bit to be cleared
res = spi_eeprom_start();
if (!res) {
dprint("failed to start SPI for WIP check\n");
return;
}
spi_status_t response = spi_eeprom_wait_while_busy(EXTERNAL_EEPROM_SPI_TIMEOUT);
spi_stop();
if (response == SPI_STATUS_TIMEOUT) {
if (response != SPI_STATUS_SUCCESS) {
spi_stop();
dprint("SPI timeout for WIP check\n");
return;
}
@@ -175,6 +169,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
// Enable writes
res = spi_eeprom_start();
if (!res) {
spi_stop();
dprint("failed to start SPI for write-enable\n");
return;
}
@@ -186,6 +181,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
// Perform the write
res = spi_eeprom_start();
if (!res) {
spi_stop();
dprint("failed to start SPI for write\n");
return;
}

View File

@@ -0,0 +1,23 @@
// Copyright 2022 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
#include <stdint.h>
#include <string.h>
#include "eeprom_driver.h"
#include "wear_leveling.h"
void eeprom_driver_init(void) {
wear_leveling_init();
}
void eeprom_driver_erase(void) {
wear_leveling_erase();
}
void eeprom_read_block(void *buf, const void *addr, size_t len) {
wear_leveling_read((uint32_t)addr, buf, len);
}
void eeprom_write_block(const void *buf, void *addr, size_t len) {
wear_leveling_write((uint32_t)addr, buf, len);
}

View File

@@ -207,7 +207,7 @@ flash_status_t flash_erase_sector(uint32_t addr) {
/* Check that the address exceeds the limit. */
if ((addr + (EXTERNAL_FLASH_SECTOR_SIZE)) >= (EXTERNAL_FLASH_SIZE) || ((addr % (EXTERNAL_FLASH_SECTOR_SIZE)) != 0)) {
dprintf("Flash erase sector address over limit! [addr:0x%x]\n", (uint32_t)addr);
dprintf("Flash erase sector address over limit! [addr:0x%lx]\n", (uint32_t)addr);
return FLASH_STATUS_ERROR;
}
@@ -247,7 +247,7 @@ flash_status_t flash_erase_block(uint32_t addr) {
/* Check that the address exceeds the limit. */
if ((addr + (EXTERNAL_FLASH_BLOCK_SIZE)) >= (EXTERNAL_FLASH_SIZE) || ((addr % (EXTERNAL_FLASH_BLOCK_SIZE)) != 0)) {
dprintf("Flash erase block address over limit! [addr:0x%x]\n", (uint32_t)addr);
dprintf("Flash erase block address over limit! [addr:0x%lx]\n", (uint32_t)addr);
return FLASH_STATUS_ERROR;
}
@@ -303,7 +303,7 @@ flash_status_t flash_read_block(uint32_t addr, void *buf, size_t len) {
}
#if defined(CONSOLE_ENABLE) && defined(DEBUG_FLASH_SPI_OUTPUT)
dprintf("[SPI FLASH R] 0x%08lX: ", addr);
dprintf("[SPI FLASH R] 0x%08lx: ", addr);
for (size_t i = 0; i < len; ++i) {
dprintf(" %02X", (int)(((uint8_t *)read_buf)[i]));
}
@@ -339,7 +339,7 @@ flash_status_t flash_write_block(uint32_t addr, const void *buf, size_t len) {
}
#if defined(CONSOLE_ENABLE) && defined(DEBUG_FLASH_SPI_OUTPUT)
dprintf("[SPI FLASH W] 0x%08lX: ", addr);
dprintf("[SPI FLASH W] 0x%08lx: ", addr);
for (size_t i = 0; i < write_length; i++) {
dprintf(" %02X", (int)(uint8_t)(write_buf[i]));
}

166
drivers/gpio/pca9505.c Normal file
View File

@@ -0,0 +1,166 @@
// Copyright 2022 nirim000
// SPDX-License-Identifier: GPL-2.0-or-later
#include "i2c_master.h"
#include "pca9505.h"
#include "debug.h"
#define SLAVE_TO_ADDR(n) (n << 1)
#define TIMEOUT 100
enum {
CMD_INPUT_0 = 0,
CMD_INPUT_1,
CMD_INPUT_2,
CMD_INPUT_3,
CMD_INPUT_4,
CMD_OUTPUT_0 = 8,
CMD_OUTPUT_1,
CMD_OUTPUT_2,
CMD_OUTPUT_3,
CMD_OUTPUT_4,
CMD_INVERSION_0 = 16,
CMD_INVERSION_1,
CMD_INVERSION_2,
CMD_INVERSION_3,
CMD_INVERSION_4,
CMD_CONFIG_0 = 24,
CMD_CONFIG_1,
CMD_CONFIG_2,
CMD_CONFIG_3,
CMD_CONFIG_4,
};
void pca9505_init(uint8_t slave_addr) {
static uint8_t s_init = 0;
if (!s_init) {
i2c_init();
s_init = 1;
}
// TODO: could check device connected
// i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE);
// i2c_stop();
}
bool pca9505_set_config(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
uint8_t cmd = 0;
switch (port) {
case 0:
cmd = CMD_CONFIG_0;
break;
case 1:
cmd = CMD_CONFIG_1;
break;
case 2:
cmd = CMD_CONFIG_2;
break;
case 3:
cmd = CMD_CONFIG_3;
break;
case 4:
cmd = CMD_CONFIG_4;
break;
}
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
print("pca9505_set_config::FAILED\n");
return false;
}
return true;
}
bool pca9505_set_polarity(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
uint8_t cmd = 0;
switch (port) {
case 0:
cmd = CMD_INVERSION_0;
break;
case 1:
cmd = CMD_INVERSION_1;
break;
case 2:
cmd = CMD_INVERSION_2;
break;
case 3:
cmd = CMD_INVERSION_3;
break;
case 4:
cmd = CMD_INVERSION_4;
break;
}
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
print("pca9505_set_polarity::FAILED\n");
return false;
}
return true;
}
bool pca9505_set_output(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
uint8_t cmd = 0;
switch (port) {
case 0:
cmd = CMD_OUTPUT_0;
break;
case 1:
cmd = CMD_OUTPUT_1;
break;
case 2:
cmd = CMD_OUTPUT_2;
break;
case 3:
cmd = CMD_OUTPUT_3;
break;
case 4:
cmd = CMD_OUTPUT_4;
break;
}
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
print("pca9505_set_output::FAILED\n");
return false;
}
return true;
}
bool pca9505_readPins(uint8_t slave_addr, pca9505_port_t port, uint8_t* out) {
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
uint8_t cmd = 0;
switch (port) {
case 0:
cmd = CMD_INPUT_0;
break;
case 1:
cmd = CMD_INPUT_1;
break;
case 2:
cmd = CMD_INPUT_2;
break;
case 3:
cmd = CMD_INPUT_3;
break;
case 4:
cmd = CMD_INPUT_4;
break;
}
i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT);
if (ret != I2C_STATUS_SUCCESS) {
print("pca9505_readPins::FAILED\n");
return false;
}
return true;
}

67
drivers/gpio/pca9505.h Normal file
View File

@@ -0,0 +1,67 @@
// Copyright 2022 nirim000
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <stdint.h>
#include <stdbool.h>
/**
* Port ID
*/
typedef enum {
PCA9505_PORT0,
PCA9505_PORT1,
PCA9505_PORT2,
PCA9505_PORT3,
PCA9505_PORT4,
} pca9505_port_t;
/**
* Helpers for set_config
*/
enum {
ALL_NORMAL = 0,
ALL_INVERTED = 0xFF,
};
/**
* Helpers for set_config
*/
enum {
ALL_OUTPUT = 0,
ALL_INPUT = 0xFF,
};
/**
* Helpers for set_output
*/
enum {
ALL_LOW = 0,
ALL_HIGH = 0xFF,
};
/**
* Init expander and any other dependent drivers
*/
void pca9505_init(uint8_t slave_addr);
/**
* Configure input/output to a given port
*/
bool pca9505_set_config(uint8_t slave_addr, pca9505_port_t port, uint8_t conf);
/**
* Configure polarity to a given port
*/
bool pca9505_set_polarity(uint8_t slave_addr, pca9505_port_t port, uint8_t conf);
/**
* Write high/low to a given port
*/
bool pca9505_set_output(uint8_t slave_addr, pca9505_port_t port, uint8_t conf);
/**
* Read state of a given port
*/
bool pca9505_readPins(uint8_t slave_addr, pca9505_port_t port, uint8_t* ret);

View File

@@ -53,6 +53,10 @@
# define AW_GLOBAL_CURRENT_MAX 150
#endif
#ifndef AW_SPI_MODE
# define AW_SPI_MODE 0
#endif
#ifndef AW_SPI_DIVISOR
# define AW_SPI_DIVISOR 4
#endif
@@ -63,7 +67,7 @@ bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
bool AW20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) {
static uint8_t s_spi_transfer_buffer[2] = {0};
if (!spi_start(cs_pin, false, 0, AW_SPI_DIVISOR)) {
if (!spi_start(cs_pin, false, AW_SPI_MODE, AW_SPI_DIVISOR)) {
spi_stop();
return false;
}

View File

@@ -0,0 +1,218 @@
/* Copyright 2021 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ckled2001-simple.h"
#include "i2c_master.h"
#include "wait.h"
#ifndef CKLED2001_TIMEOUT
# define CKLED2001_TIMEOUT 100
#endif
#ifndef CKLED2001_PERSISTENCE
# define CKLED2001_PERSISTENCE 0
#endif
#ifndef PHASE_CHANNEL
# define PHASE_CHANNEL MSKPHASE_12CHANNEL
#endif
#ifndef CKLED2001_CURRENT_TUNE
# define CKLED2001_CURRENT_TUNE \
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];
// These buffers match the CKLED2001 PWM registers.
// The control buffers match the PG0 LED On/Off registers.
// Storing them like this is optimal for I2C transfers to the registers.
// We could optimize this and take out the unused registers from these
// buffers and the transfers in CKLED2001_write_pwm_buffer() but it's
// probably not worth the extra complexity.
uint8_t g_pwm_buffer[DRIVER_COUNT][192];
bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][24] = {0};
bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
// If the transaction fails function returns false.
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
#if CKLED2001_PERSISTENCE > 0
for (uint8_t i = 0; i < CKLED2001_PERSISTENCE; i++) {
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, CKLED2001_TIMEOUT) != 0) {
return false;
}
}
#else
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, CKLED2001_TIMEOUT) != 0) {
return false;
}
#endif
return true;
}
bool CKLED2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// Assumes PG1 is already selected.
// If any of the transactions fails function returns false.
// Transmit PWM registers in 12 transfers of 16 bytes.
// g_twi_transfer_buffer[] is 20 bytes
// Iterate over the pwm_buffer contents at 16 byte intervals.
for (int i = 0; i < 192; i += 16) {
g_twi_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
for (int j = 0; j < 16; j++) {
g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
}
#if CKLED2001_PERSISTENCE > 0
for (uint8_t i = 0; i < CKLED2001_PERSISTENCE; i++) {
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, CKLED2001_TIMEOUT) != 0) {
return false;
}
}
#else
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, CKLED2001_TIMEOUT) != 0) {
return false;
}
#endif
}
return true;
}
void CKLED2001_init(uint8_t addr) {
// Select to function page
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
// Setting LED driver to shutdown mode
CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
// Setting internal channel pulldown/pullup
CKLED2001_write_register(addr, PDU_REG, MSKSET_CA_CB_CHANNEL);
// Select number of scan phase
CKLED2001_write_register(addr, SCAN_PHASE_REG, PHASE_CHANNEL);
// Setting PWM Delay Phase
CKLED2001_write_register(addr, SLEW_RATE_CONTROL_MODE1_REG, MSKPWM_DELAY_PHASE_ENABLE);
// Setting Driving/Sinking Channel Slew Rate
CKLED2001_write_register(addr, SLEW_RATE_CONTROL_MODE2_REG, MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE);
// Setting Iref
CKLED2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_DISABLE);
// Set LED CONTROL PAGE (Page 0)
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
CKLED2001_write_register(addr, i, 0x00);
}
// Set PWM PAGE (Page 1)
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
CKLED2001_write_register(addr, i, 0x00);
}
// Set CURRENT PAGE (Page 4)
uint8_t current_tuen_reg_list[LED_CURRENT_TUNE_LENGTH] = CKLED2001_CURRENT_TUNE;
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, CURRENT_TUNE_PAGE);
for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
CKLED2001_write_register(addr, i, current_tuen_reg_list[i]);
}
// Enable LEDs ON/OFF
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
for (int i = 0; i < LED_CONTROL_ON_OFF_LENGTH; i++) {
CKLED2001_write_register(addr, i, 0xFF);
}
// Select to function page
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
// Setting LED driver to normal mode
CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
}
void CKLED2001_set_value(int index, uint8_t value) {
ckled2001_led led;
if (index >= 0 && index < DRIVER_LED_TOTAL) {
memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
g_pwm_buffer[led.driver][led.v] = value;
g_pwm_buffer_update_required[led.driver] = true;
}
}
void CKLED2001_set_value_all(uint8_t value) {
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
CKLED2001_set_value(i, value);
}
}
void CKLED2001_set_led_control_register(uint8_t index, bool value) {
ckled2001_led led;
memcpy_P(&led, (&g_ckled2001_leds[index]), sizeof(led));
uint8_t control_register = led.v / 8;
uint8_t bit_value = led.v % 8;
if (value) {
g_led_control_registers[led.driver][control_register] |= (1 << bit_value);
} else {
g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value);
}
g_led_control_registers_update_required[led.driver] = true;
}
void CKLED2001_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_PWM_PAGE);
// If any of the transactions fail we risk writing dirty PG0,
// refresh page 0 just in case.
if (!CKLED2001_write_pwm_buffer(addr, g_pwm_buffer[index])) {
g_led_control_registers_update_required[index] = true;
}
}
g_pwm_buffer_update_required[index] = false;
}
void CKLED2001_update_led_control_registers(uint8_t addr, uint8_t index) {
if (g_led_control_registers_update_required[index]) {
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, LED_CONTROL_PAGE);
for (int i = 0; i < 24; i++) {
CKLED2001_write_register(addr, i, g_led_control_registers[index][i]);
}
}
g_led_control_registers_update_required[index] = false;
}
void CKLED2001_sw_return_normal(uint8_t addr) {
// Select to function page
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
// Setting LED driver to normal mode
CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
}
void CKLED2001_sw_shutdown(uint8_t addr) {
// Select to function page
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
// Setting LED driver to shutdown mode
CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_SHUT_DOWN_MODE);
// Write SW Sleep Register
CKLED2001_write_register(addr, SOFTWARE_SLEEP_REG, MSKSLEEP_ENABLE);
}

View File

@@ -0,0 +1,337 @@
/* Copyright 2021 @ Keychron (https://www.keychron.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "progmem.h"
typedef struct ckled2001_led {
uint8_t driver : 2;
uint8_t v;
} __attribute__((packed)) ckled2001_led;
extern const ckled2001_led PROGMEM g_ckled2001_leds[DRIVER_LED_TOTAL];
void CKLED2001_init(uint8_t addr);
bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data);
bool CKLED2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void CKLED2001_set_value(int index, uint8_t value);
void CKLED2001_set_value_all(uint8_t value);
void CKLED2001_set_led_control_register(uint8_t index, bool value);
// This should not be called from an interrupt
// (eg. from a timer interrupt).
// Call this while idle (in between matrix scans).
// If the buffer is dirty, it will update the driver with the buffer.
void CKLED2001_update_pwm_buffers(uint8_t addr, uint8_t index);
void CKLED2001_update_led_control_registers(uint8_t addr, uint8_t index);
void CKLED2001_sw_return_normal(uint8_t addr);
void CKLED2001_sw_shutdown(uint8_t addr);
// Registers Page Define
#define CONFIGURE_CMD_PAGE 0xFD
#define LED_CONTROL_PAGE 0x00
#define LED_PWM_PAGE 0x01
#define FUNCTION_PAGE 0x03
#define CURRENT_TUNE_PAGE 0x04
// Function Register: address 0x00
#define CONFIGURATION_REG 0x00
#define MSKSW_SHUT_DOWN_MODE (0x0 << 0)
#define MSKSW_NORMAL_MODE (0x1 << 0)
#define DRIVER_ID_REG 0x11
#define CKLED2001_ID 0x8A
#define PDU_REG 0x13
#define MSKSET_CA_CB_CHANNEL 0xAA
#define MSKCLR_CA_CB_CHANNEL 0x00
#define SCAN_PHASE_REG 0x14
#define MSKPHASE_12CHANNEL 0x00
#define MSKPHASE_11CHANNEL 0x01
#define MSKPHASE_10CHANNEL 0x02
#define MSKPHASE_9CHANNEL 0x03
#define MSKPHASE_8CHANNEL 0x04
#define MSKPHASE_7CHANNEL 0x05
#define MSKPHASE_6CHANNEL 0x06
#define MSKPHASE_5CHANNEL 0x07
#define MSKPHASE_4CHANNEL 0x08
#define MSKPHASE_3CHANNEL 0x09
#define MSKPHASE_2CHANNEL 0x0A
#define MSKPHASE_1CHANNEL 0x0B
#define SLEW_RATE_CONTROL_MODE1_REG 0x15
#define MSKPWM_DELAY_PHASE_ENABLE 0x04
#define MSKPWM_DELAY_PHASE_DISABLE 0x00
#define SLEW_RATE_CONTROL_MODE2_REG 0x16
#define MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_ENABLE 0xC0
#define MSKDRIVING_SINKING_CHHANNEL_SLEWRATE_DISABLE 0x00
#define OPEN_SHORT_ENABLE_REG 0x17
#define MSKOPEN_DETECTION_ENABLE (0x01 << 7)
#define MSKOPEN_DETECTION_DISABLE (0x00)
#define MSKSHORT_DETECTION_ENABLE (0x01 << 6)
#define MSKSHORT_DETECTION_DISABLE (0x00)
#define OPEN_SHORT_DUTY_REG 0x18
#define OPEN_SHORT_FLAG_REG 0x19
#define MSKOPEN_DETECTION_INTERRUPT_ENABLE (0x01 << 7)
#define MSKOPEN_DETECTION_INTERRUPT_DISABLE (0x00)
#define MSKSHORT_DETECTION_INTERRUPT_ENABLE (0x01 << 6)
#define MSKSHORT_DETECTION_INTERRUPT_DISABLE (0x00)
#define SOFTWARE_SLEEP_REG 0x1A
#define MSKSLEEP_ENABLE 0x02
#define MSKSLEEP_DISABLE 0x00
// LED Control Registers
#define LED_CONTROL_ON_OFF_FIRST_ADDR 0x0
#define LED_CONTROL_ON_OFF_LAST_ADDR 0x17
#define LED_CONTROL_ON_OFF_LENGTH ((LED_CONTROL_ON_OFF_LAST_ADDR - LED_CONTROL_ON_OFF_FIRST_ADDR) + 1)
#define LED_CONTROL_OPEN_FIRST_ADDR 0x18
#define LED_CONTROL_OPEN_LAST_ADDR 0x2F
#define LED_CONTROL_OPEN_LENGTH ((LED_CONTROL_OPEN_LAST_ADDR - LED_CONTROL_OPEN_FIRST_ADDR) + 1)
#define LED_CONTROL_SHORT_FIRST_ADDR 0x30
#define LED_CONTROL_SHORT_LAST_ADDR 0x47
#define LED_CONTROL_SHORT_LENGTH ((LED_CONTROL_SHORT_LAST_ADDR - LED_CONTROL_SHORT_FIRST_ADDR) + 1)
#define LED_CONTROL_PAGE_LENGTH 0x48
// LED Control Registers
#define LED_PWM_FIRST_ADDR 0x00
#define LED_PWM_LAST_ADDR 0xBF
#define LED_PWM_LENGTH 0xC0
// Current Tune Registers
#define LED_CURRENT_TUNE_FIRST_ADDR 0x00
#define LED_CURRENT_TUNE_LAST_ADDR 0x0B
#define LED_CURRENT_TUNE_LENGTH 0x0C
#define A_1 0x00
#define A_2 0x01
#define A_3 0x02
#define A_4 0x03
#define A_5 0x04
#define A_6 0x05
#define A_7 0x06
#define A_8 0x07
#define A_9 0x08
#define A_10 0x09
#define A_11 0x0A
#define A_12 0x0B
#define A_13 0x0C
#define A_14 0x0D
#define A_15 0x0E
#define A_16 0x0F
#define B_1 0x10
#define B_2 0x11
#define B_3 0x12
#define B_4 0x13
#define B_5 0x14
#define B_6 0x15
#define B_7 0x16
#define B_8 0x17
#define B_9 0x18
#define B_10 0x19
#define B_11 0x1A
#define B_12 0x1B
#define B_13 0x1C
#define B_14 0x1D
#define B_15 0x1E
#define B_16 0x1F
#define C_1 0x20
#define C_2 0x21
#define C_3 0x22
#define C_4 0x23
#define C_5 0x24
#define C_6 0x25
#define C_7 0x26
#define C_8 0x27
#define C_9 0x28
#define C_10 0x29
#define C_11 0x2A
#define C_12 0x2B
#define C_13 0x2C
#define C_14 0x2D
#define C_15 0x2E
#define C_16 0x2F
#define D_1 0x30
#define D_2 0x31
#define D_3 0x32
#define D_4 0x33
#define D_5 0x34
#define D_6 0x35
#define D_7 0x36
#define D_8 0x37
#define D_9 0x38
#define D_10 0x39
#define D_11 0x3A
#define D_12 0x3B
#define D_13 0x3C
#define D_14 0x3D
#define D_15 0x3E
#define D_16 0x3F
#define E_1 0x40
#define E_2 0x41
#define E_3 0x42
#define E_4 0x43
#define E_5 0x44
#define E_6 0x45
#define E_7 0x46
#define E_8 0x47
#define E_9 0x48
#define E_10 0x49
#define E_11 0x4A
#define E_12 0x4B
#define E_13 0x4C
#define E_14 0x4D
#define E_15 0x4E
#define E_16 0x4F
#define F_1 0x50
#define F_2 0x51
#define F_3 0x52
#define F_4 0x53
#define F_5 0x54
#define F_6 0x55
#define F_7 0x56
#define F_8 0x57
#define F_9 0x58
#define F_10 0x59
#define F_11 0x5A
#define F_12 0x5B
#define F_13 0x5C
#define F_14 0x5D
#define F_15 0x5E
#define F_16 0x5F
#define G_1 0x60
#define G_2 0x61
#define G_3 0x62
#define G_4 0x63
#define G_5 0x64
#define G_6 0x65
#define G_7 0x66
#define G_8 0x67
#define G_9 0x68
#define G_10 0x69
#define G_11 0x6A
#define G_12 0x6B
#define G_13 0x6C
#define G_14 0x6D
#define G_15 0x6E
#define G_16 0x6F
#define H_1 0x70
#define H_2 0x71
#define H_3 0x72
#define H_4 0x73
#define H_5 0x74
#define H_6 0x75
#define H_7 0x76
#define H_8 0x77
#define H_9 0x78
#define H_10 0x79
#define H_11 0x7A
#define H_12 0x7B
#define H_13 0x7C
#define H_14 0x7D
#define H_15 0x7E
#define H_16 0x7F
#define I_1 0x80
#define I_2 0x81
#define I_3 0x82
#define I_4 0x83
#define I_5 0x84
#define I_6 0x85
#define I_7 0x86
#define I_8 0x87
#define I_9 0x88
#define I_10 0x89
#define I_11 0x8A
#define I_12 0x8B
#define I_13 0x8C
#define I_14 0x8D
#define I_15 0x8E
#define I_16 0x8F
#define J_1 0x90
#define J_2 0x91
#define J_3 0x92
#define J_4 0x93
#define J_5 0x94
#define J_6 0x95
#define J_7 0x96
#define J_8 0x97
#define J_9 0x98
#define J_10 0x99
#define J_11 0x9A
#define J_12 0x9B
#define J_13 0x9C
#define J_14 0x9D
#define J_15 0x9E
#define J_16 0x9F
#define K_1 0xA0
#define K_2 0xA1
#define K_3 0xA2
#define K_4 0xA3
#define K_5 0xA4
#define K_6 0xA5
#define K_7 0xA6
#define K_8 0xA7
#define K_9 0xA8
#define K_10 0xA9
#define K_11 0xAA
#define K_12 0xAB
#define K_13 0xAC
#define K_14 0xAD
#define K_15 0xAE
#define K_16 0xAF
#define L_1 0xB0
#define L_2 0xB1
#define L_3 0xB2
#define L_4 0xB3
#define L_5 0xB4
#define L_6 0xB5
#define L_7 0xB6
#define L_8 0xB7
#define L_9 0xB8
#define L_10 0xB9
#define L_11 0xBA
#define L_12 0xBB
#define L_13 0xBC
#define L_14 0xBD
#define L_15 0xBE
#define L_16 0xBF

View File

@@ -30,8 +30,13 @@
# define PHASE_CHANNEL MSKPHASE_12CHANNEL
#endif
#ifndef CKLED2001_CURRENT_TUNE
# define CKLED2001_CURRENT_TUNE \
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];
uint8_t g_twi_transfer_buffer[65];
// These buffers match the CKLED2001 PWM registers.
// The control buffers match the PG0 LED On/Off registers.
@@ -67,27 +72,26 @@ bool CKLED2001_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
bool CKLED2001_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
// Assumes PG1 is already selected.
// If any of the transactions fails function returns false.
// Transmit PWM registers in 12 transfers of 16 bytes.
// g_twi_transfer_buffer[] is 20 bytes
// Transmit PWM registers in 3 transfers of 64 bytes.
// Iterate over the pwm_buffer contents at 16 byte intervals.
for (int i = 0; i < 192; i += 16) {
// Iterate over the pwm_buffer contents at 64 byte intervals.
for (uint8_t i = 0; i < 192; i += 64) {
g_twi_transfer_buffer[0] = i;
// Copy the data from i to i+15.
// Copy the data from i to i+63.
// Device will auto-increment register for data after the first byte
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
for (int j = 0; j < 16; j++) {
for (uint8_t j = 0; j < 64; j++) {
g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
}
#if CKLED2001_PERSISTENCE > 0
for (uint8_t i = 0; i < CKLED2001_PERSISTENCE; i++) {
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, CKLED2001_TIMEOUT) != 0) {
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, CKLED2001_TIMEOUT) != 0) {
return false;
}
}
#else
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, CKLED2001_TIMEOUT) != 0) {
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 65, CKLED2001_TIMEOUT) != 0) {
return false;
}
#endif
@@ -123,18 +127,10 @@ void CKLED2001_init(uint8_t addr) {
}
// Set CURRENT PAGE (Page 4)
uint8_t current_tuen_reg_list[LED_CURRENT_TUNE_LENGTH] = CKLED2001_CURRENT_TUNE;
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, CURRENT_TUNE_PAGE);
for (int i = 0; i < LED_CURRENT_TUNE_LENGTH; i++) {
switch (i) {
case 2:
case 5:
case 8:
case 11:
CKLED2001_write_register(addr, i, 0xA0);
break;
default:
CKLED2001_write_register(addr, i, 0xFF);
}
CKLED2001_write_register(addr, i, current_tuen_reg_list[i]);
}
// Enable LEDs ON/OFF
@@ -220,14 +216,14 @@ void CKLED2001_update_led_control_registers(uint8_t addr, uint8_t index) {
g_led_control_registers_update_required[index] = false;
}
void CKLED2001_return_normal(uint8_t addr) {
void CKLED2001_sw_return_normal(uint8_t addr) {
// Select to function page
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
// Setting LED driver to normal mode
CKLED2001_write_register(addr, CONFIGURATION_REG, MSKSW_NORMAL_MODE);
}
void CKLED2001_shutdown(uint8_t addr) {
void CKLED2001_sw_shutdown(uint8_t addr) {
// Select to function page
CKLED2001_write_register(addr, CONFIGURE_CMD_PAGE, FUNCTION_PAGE);
// Setting LED driver to shutdown mode

View File

@@ -45,8 +45,8 @@ void CKLED2001_set_led_control_register(uint8_t index, bool red, bool green, boo
void CKLED2001_update_pwm_buffers(uint8_t addr, uint8_t index);
void CKLED2001_update_led_control_registers(uint8_t addr, uint8_t index);
void CKLED2001_return_normal(uint8_t addr);
void CKLED2001_shutdown(uint8_t addr);
void CKLED2001_sw_return_normal(uint8_t addr);
void CKLED2001_sw_shutdown(uint8_t addr);
// Registers Page Define
#define CONFIGURE_CMD_PAGE 0xFD

View File

@@ -70,6 +70,10 @@
# define ISSI_CSPULLUP PUR_0R
#endif
#ifndef ISSI_GLOBALCURRENT
# define ISSI_GLOBALCURRENT 0xFF
#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];
@@ -182,7 +186,7 @@ void IS31FL3733_init(uint8_t addr, uint8_t sync) {
// Set de-ghost pull-down resistors (CSx)
IS31FL3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
// Set global current to maximum.
IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
// Disable software shutdown.
IS31FL3733_write_register(addr, ISSI_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);

View File

@@ -69,6 +69,10 @@
# define ISSI_CSPULLUP PUR_0R
#endif
#ifndef ISSI_GLOBALCURRENT
# define ISSI_GLOBALCURRENT 0xFF
#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];
@@ -172,7 +176,7 @@ void IS31FL3733_init(uint8_t addr, uint8_t sync) {
// Set de-ghost pull-down resistors (CSx)
IS31FL3733_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
// Set global current to maximum.
IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
IS31FL3733_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
// Disable software shutdown.
IS31FL3733_write_register(addr, ISSI_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);

View File

@@ -63,6 +63,10 @@
# define ISSI_CSPULLUP PUR_0R
#endif
#ifndef ISSI_GLOBALCURRENT
# define ISSI_GLOBALCURRENT 0xFF
#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];
@@ -154,7 +158,7 @@ void IS31FL3736_init(uint8_t addr) {
// Set de-ghost pull-down resistors (CSx)
IS31FL3736_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
// Set global current to maximum.
IS31FL3736_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
IS31FL3736_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
// Disable software shutdown.
IS31FL3736_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);

View File

@@ -69,6 +69,10 @@
# define ISSI_CSPULLUP PUR_0R
#endif
#ifndef ISSI_GLOBALCURRENT
# define ISSI_GLOBALCURRENT 0xFF
#endif
// Transfer buffer for TWITransmitData()
uint8_t g_twi_transfer_buffer[20];
@@ -161,7 +165,7 @@ void IS31FL3737_init(uint8_t addr) {
// Set de-ghost pull-down resistors (CSx)
IS31FL3737_write_register(addr, ISSI_REG_CSPULLUP, ISSI_CSPULLUP);
// Set global current to maximum.
IS31FL3737_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
IS31FL3737_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
// Disable software shutdown.
IS31FL3737_write_register(addr, ISSI_REG_CONFIGURATION, ((ISSI_PWM_FREQUENCY & 0b111) << 3) | 0x01);

View File

@@ -69,6 +69,10 @@
# define ISSI_CSPULLUP PUR_32KR
#endif
#ifndef ISSI_GLOBALCURRENT
# define ISSI_GLOBALCURRENT 0xFF
#endif
#define ISSI_MAX_LEDS 351
// Transfer buffer for TWITransmitData()
@@ -163,7 +167,7 @@ void IS31FL3741_init(uint8_t addr) {
IS31FL3741_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
// Set Golbal Current Control Register
IS31FL3741_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
IS31FL3741_write_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT);
// Set Pull up & Down for SWx CSy
IS31FL3741_write_register(addr, ISSI_REG_PULLDOWNUP, ((ISSI_CSPULLUP << 4) | ISSI_SWPULLUP));

View File

@@ -260,7 +260,7 @@ void oled_write_ln_P(const char *data, bool invert);
void oled_write_raw_P(const char *data, uint16_t size);
#else
# define oled_write_P(data, invert) oled_write(data, invert)
# define oled_write_ln_P(data, invert) oled_write(data, invert)
# define oled_write_ln_P(data, invert) oled_write_ln(data, invert)
# define oled_write_raw_P(data, size) oled_write_raw(data, size)
#endif // defined(__AVR__)

View File

@@ -102,12 +102,11 @@ const struct tft_panel_dc_reset_painter_driver_vtable_t gc9a01_driver_vtable = {
.flush = qp_tft_panel_flush,
.pixdata = qp_tft_panel_pixdata,
.viewport = qp_tft_panel_viewport,
.palette_convert = qp_tft_panel_palette_convert,
.append_pixels = qp_tft_panel_append_pixels,
.palette_convert = qp_tft_panel_palette_convert_rgb565_swapped,
.append_pixels = qp_tft_panel_append_pixels_rgb565,
},
.rgb888_to_native16bit = qp_rgb888_to_rgb565_swapped,
.num_window_bytes = 2,
.swap_window_coords = false,
.num_window_bytes = 2,
.swap_window_coords = false,
.opcodes =
{
.display_on = GC9A01_CMD_DISPLAY_ON,

View File

@@ -67,12 +67,11 @@ const struct tft_panel_dc_reset_painter_driver_vtable_t ili9163_driver_vtable =
.flush = qp_tft_panel_flush,
.pixdata = qp_tft_panel_pixdata,
.viewport = qp_tft_panel_viewport,
.palette_convert = qp_tft_panel_palette_convert,
.append_pixels = qp_tft_panel_append_pixels,
.palette_convert = qp_tft_panel_palette_convert_rgb565_swapped,
.append_pixels = qp_tft_panel_append_pixels_rgb565,
},
.rgb888_to_native16bit = qp_rgb888_to_rgb565_swapped,
.num_window_bytes = 2,
.swap_window_coords = false,
.num_window_bytes = 2,
.swap_window_coords = false,
.opcodes =
{
.display_on = ILI9XXX_CMD_DISPLAY_ON,

View File

@@ -74,12 +74,11 @@ const struct tft_panel_dc_reset_painter_driver_vtable_t ili9341_driver_vtable =
.flush = qp_tft_panel_flush,
.pixdata = qp_tft_panel_pixdata,
.viewport = qp_tft_panel_viewport,
.palette_convert = qp_tft_panel_palette_convert,
.append_pixels = qp_tft_panel_append_pixels,
.palette_convert = qp_tft_panel_palette_convert_rgb565_swapped,
.append_pixels = qp_tft_panel_append_pixels_rgb565,
},
.rgb888_to_native16bit = qp_rgb888_to_rgb565_swapped,
.num_window_bytes = 2,
.swap_window_coords = false,
.num_window_bytes = 2,
.swap_window_coords = false,
.opcodes =
{
.display_on = ILI9XXX_CMD_DISPLAY_ON,

View File

@@ -0,0 +1,120 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "qp_internal.h"
#include "qp_comms.h"
#include "qp_ili9488.h"
#include "qp_ili9xxx_opcodes.h"
#include "qp_tft_panel.h"
#ifdef QUANTUM_PAINTER_ILI9488_SPI_ENABLE
# include <qp_comms_spi.h>
#endif // QUANTUM_PAINTER_ILI9488_SPI_ENABLE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Common
// Driver storage
tft_panel_dc_reset_painter_device_t ili9488_drivers[ILI9488_NUM_DEVICES] = {0};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Initialization
bool qp_ili9488_init(painter_device_t device, painter_rotation_t rotation) {
// clang-format off
const uint8_t ili9488_init_sequence[] = {
// Command, Delay, N, Data[N]
ILI9XXX_CMD_RESET, 120, 0,
ILI9XXX_SET_PGAMMA, 0, 15, 0x00, 0x03, 0x09, 0x08, 0x16, 0x0A, 0x3F, 0x78, 0x4C, 0x09, 0x0A, 0x08, 0x16, 0x1A, 0x0F,
ILI9XXX_SET_NGAMMA, 0, 15, 0x00, 0x16, 0x19, 0x03, 0x0F, 0x05, 0x32, 0x45, 0x46, 0x04, 0x0E, 0x0D, 0x35, 0x37, 0x0F,
ILI9XXX_SET_POWER_CTL_1, 0, 2, 0x17, 0x15,
ILI9XXX_SET_POWER_CTL_2, 0, 1, 0x41,
ILI9XXX_SET_VCOM_CTL_1, 0, 3, 0x00, 0x12, 0x80,
ILI9XXX_SET_PIX_FMT, 0, 1, 0x66,
ILI9XXX_SET_RGB_IF_SIG_CTL, 0, 1, 0x80,
ILI9XXX_SET_FRAME_CTL_NORMAL, 0, 1, 0xA0,
ILI9XXX_SET_INVERSION_CTL, 0, 1, 0x02,
ILI9XXX_SET_FUNCTION_CTL, 0, 2, 0x02, 0x02,
ILI9XXX_SET_IMAGE_FUNCTION, 0, 1, 0x00,
ILI9XXX_SET_PUMP_RATIO_CTL, 0, 4, 0xA9, 0x51, 0x2C, 0x82,
ILI9XXX_CMD_SLEEP_OFF, 5, 0,
ILI9XXX_CMD_DISPLAY_ON, 20, 0
};
// clang-format on
qp_comms_bulk_command_sequence(device, ili9488_init_sequence, sizeof(ili9488_init_sequence));
// Configure the rotation (i.e. the ordering and direction of memory writes in GRAM)
const uint8_t madctl[] = {
[QP_ROTATION_0] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MY,
[QP_ROTATION_90] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MX | ILI9XXX_MADCTL_MV | ILI9XXX_MADCTL_MY,
[QP_ROTATION_180] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MX,
[QP_ROTATION_270] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MV,
};
qp_comms_command_databyte(device, ILI9XXX_SET_MEM_ACS_CTL, madctl[rotation]);
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Driver vtable
const struct tft_panel_dc_reset_painter_driver_vtable_t ili9488_driver_vtable = {
.base =
{
.init = qp_ili9488_init,
.power = qp_tft_panel_power,
.clear = qp_tft_panel_clear,
.flush = qp_tft_panel_flush,
.pixdata = qp_tft_panel_pixdata,
.viewport = qp_tft_panel_viewport,
.palette_convert = qp_tft_panel_palette_convert_rgb888,
.append_pixels = qp_tft_panel_append_pixels_rgb888,
},
.num_window_bytes = 2,
.swap_window_coords = false,
.opcodes =
{
.display_on = ILI9XXX_CMD_DISPLAY_ON,
.display_off = ILI9XXX_CMD_DISPLAY_OFF,
.set_column_address = ILI9XXX_SET_COL_ADDR,
.set_row_address = ILI9XXX_SET_PAGE_ADDR,
.enable_writes = ILI9XXX_SET_MEM,
},
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SPI
#ifdef QUANTUM_PAINTER_ILI9488_SPI_ENABLE
// Factory function for creating a handle to the ILI9488 device
painter_device_t qp_ili9488_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) {
for (uint32_t i = 0; i < ILI9488_NUM_DEVICES; ++i) {
tft_panel_dc_reset_painter_device_t *driver = &ili9488_drivers[i];
if (!driver->base.driver_vtable) {
driver->base.driver_vtable = (const struct painter_driver_vtable_t *)&ili9488_driver_vtable;
driver->base.comms_vtable = (const struct painter_comms_vtable_t *)&spi_comms_with_dc_vtable;
driver->base.native_bits_per_pixel = 24; // RGB888
driver->base.panel_width = panel_width;
driver->base.panel_height = panel_height;
driver->base.rotation = QP_ROTATION_0;
driver->base.offset_x = 0;
driver->base.offset_y = 0;
// SPI and other pin configuration
driver->base.comms_config = &driver->spi_dc_reset_config;
driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
driver->spi_dc_reset_config.spi_config.lsb_first = false;
driver->spi_dc_reset_config.spi_config.mode = spi_mode;
driver->spi_dc_reset_config.dc_pin = dc_pin;
driver->spi_dc_reset_config.reset_pin = reset_pin;
return (painter_device_t)driver;
}
}
return NULL;
}
#endif // QUANTUM_PAINTER_ILI9488_SPI_ENABLE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,37 @@
// Copyright 2021 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "gpio.h"
#include "qp_internal.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Quantum Painter ILI9488 configurables (add to your keyboard's config.h)
#ifndef ILI9488_NUM_DEVICES
/**
* @def This controls the maximum number of ILI9488 devices that Quantum Painter can communicate with at any one time.
* Increasing this number allows for multiple displays to be used.
*/
# define ILI9488_NUM_DEVICES 1
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Quantum Painter ILI9488 device factories
#ifdef QUANTUM_PAINTER_ILI9488_SPI_ENABLE
/**
* Factory method for an ILI9488 SPI LCD device.
*
* @param panel_width[in] the width of the display panel
* @param panel_height[in] the height of the display panel
* @param chip_select_pin[in] the GPIO pin used for SPI chip select
* @param dc_pin[in] the GPIO pin used for D/C control
* @param reset_pin[in] the GPIO pin used for RST
* @param spi_divisor[in] the SPI divisor to use when communicating with the display
* @param spi_mode[in] the SPI mode to use when communicating with the display
* @return the device handle used with all drawing routines in Quantum Painter
*/
painter_device_t qp_ili9488_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
#endif // QUANTUM_PAINTER_ILI9488_SPI_ENABLE

View File

@@ -85,6 +85,7 @@
#define ILI9XXX_SET_NGAMMA 0xE1 // Set negative gamma
#define ILI9XXX_SET_DGAMMA_CTL_1 0xE2 // Set digital gamma ctl 1
#define ILI9XXX_SET_DGAMMA_CTL_2 0xE3 // Set digital gamma ctl 2
#define ILI9XXX_SET_IMAGE_FUNCTION 0xE9 // Set image function
#define ILI9XXX_ENABLE_3_GAMMA 0xF2 // Enable 3 gamma
#define ILI9XXX_SET_IF_CTL 0xF6 // Set interface control
#define ILI9XXX_SET_PUMP_RATIO_CTL 0xF7 // Set pump ratio control

View File

@@ -71,12 +71,11 @@ const struct tft_panel_dc_reset_painter_driver_vtable_t ssd1351_driver_vtable =
.flush = qp_tft_panel_flush,
.pixdata = qp_tft_panel_pixdata,
.viewport = qp_tft_panel_viewport,
.palette_convert = qp_tft_panel_palette_convert,
.append_pixels = qp_tft_panel_append_pixels,
.palette_convert = qp_tft_panel_palette_convert_rgb565_swapped,
.append_pixels = qp_tft_panel_append_pixels_rgb565,
},
.rgb888_to_native16bit = qp_rgb888_to_rgb565_swapped,
.num_window_bytes = 1,
.swap_window_coords = true,
.num_window_bytes = 1,
.swap_window_coords = true,
.opcodes =
{
.display_on = SSD1351_DISPLAYON,

View File

@@ -0,0 +1,144 @@
// Copyright 2021 Paul Cotter (@gr1mr3aver)
// Copyright 2021 Nick Brassel (@tzarc)
// Copyright 2022 David Hoelscher (@customMK)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "qp_internal.h"
#include "qp_comms.h"
#include "qp_st7735.h"
#include "qp_st77xx_opcodes.h"
#include "qp_st7735_opcodes.h"
#include "qp_tft_panel.h"
#ifdef QUANTUM_PAINTER_ST7735_SPI_ENABLE
# include "qp_comms_spi.h"
#endif // QUANTUM_PAINTER_ST7735_SPI_ENABLE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Common
// Driver storage
tft_panel_dc_reset_painter_device_t st7735_drivers[ST7735_NUM_DEVICES] = {0};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Automatic viewport offsets
#ifndef ST7735_NO_AUTOMATIC_OFFSETS
static inline void st7735_automatic_viewport_offsets(painter_device_t device, painter_rotation_t rotation) {
struct painter_driver_t *driver = (struct painter_driver_t *)device;
// clang-format off
const struct {
uint16_t offset_x;
uint16_t offset_y;
} rotation_offsets_80x160[] = {
[QP_ROTATION_0] = { .offset_x = 24, .offset_y = 0 },
[QP_ROTATION_90] = { .offset_x = 0, .offset_y = 24 },
[QP_ROTATION_180] = { .offset_x = 24, .offset_y = 0 },
[QP_ROTATION_270] = { .offset_x = 0, .offset_y = 24 },
};
// clang-format on
if (driver->panel_width == 80 && driver->panel_height == 160) {
driver->offset_x = rotation_offsets_80x160[rotation].offset_x;
driver->offset_y = rotation_offsets_80x160[rotation].offset_y;
}
}
#endif // ST7735_NO_AUTOMATIC_OFFSETS
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Initialization
bool qp_st7735_init(painter_device_t device, painter_rotation_t rotation) {
// clang-format off
const uint8_t st7735_init_sequence[] = {
// Command, Delay, N, Data[N]
ST77XX_CMD_RESET, 120, 0,
ST77XX_CMD_SLEEP_OFF, 5, 0,
ST77XX_SET_PIX_FMT, 0, 1, 0x55,
ST77XX_CMD_INVERT_OFF, 0, 0,
ST77XX_CMD_NORMAL_ON, 0, 0,
ST77XX_CMD_DISPLAY_ON, 20, 0
};
// clang-format on
qp_comms_bulk_command_sequence(device, st7735_init_sequence, sizeof(st7735_init_sequence));
// Configure the rotation (i.e. the ordering and direction of memory writes in GRAM)
const uint8_t madctl[] = {
[QP_ROTATION_0] = ST77XX_MADCTL_BGR,
[QP_ROTATION_90] = ST77XX_MADCTL_BGR | ST77XX_MADCTL_MX | ST77XX_MADCTL_MV,
[QP_ROTATION_180] = ST77XX_MADCTL_BGR | ST77XX_MADCTL_MX | ST77XX_MADCTL_MY,
[QP_ROTATION_270] = ST77XX_MADCTL_BGR | ST77XX_MADCTL_MV | ST77XX_MADCTL_MY,
};
qp_comms_command_databyte(device, ST77XX_SET_MADCTL, madctl[rotation]);
#ifndef ST7735_NO_AUTOMATIC_VIEWPORT_OFFSETS
st7735_automatic_viewport_offsets(device, rotation);
#endif // ST7735_NO_AUTOMATIC_VIEWPORT_OFFSETS
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Driver vtable
const struct tft_panel_dc_reset_painter_driver_vtable_t st7735_driver_vtable = {
.base =
{
.init = qp_st7735_init,
.power = qp_tft_panel_power,
.clear = qp_tft_panel_clear,
.flush = qp_tft_panel_flush,
.pixdata = qp_tft_panel_pixdata,
.viewport = qp_tft_panel_viewport,
.palette_convert = qp_tft_panel_palette_convert_rgb565_swapped,
.append_pixels = qp_tft_panel_append_pixels_rgb565,
},
.num_window_bytes = 2,
.swap_window_coords = false,
.opcodes =
{
.display_on = ST77XX_CMD_DISPLAY_ON,
.display_off = ST77XX_CMD_DISPLAY_OFF,
.set_column_address = ST77XX_SET_COL_ADDR,
.set_row_address = ST77XX_SET_ROW_ADDR,
.enable_writes = ST77XX_SET_MEM,
},
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SPI
#ifdef QUANTUM_PAINTER_ST7735_SPI_ENABLE
// Factory function for creating a handle to the ST7735 device
painter_device_t qp_st7735_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) {
for (uint32_t i = 0; i < ST7735_NUM_DEVICES; ++i) {
tft_panel_dc_reset_painter_device_t *driver = &st7735_drivers[i];
if (!driver->base.driver_vtable) {
driver->base.driver_vtable = (const struct painter_driver_vtable_t *)&st7735_driver_vtable;
driver->base.comms_vtable = (const struct painter_comms_vtable_t *)&spi_comms_with_dc_vtable;
driver->base.panel_width = panel_width;
driver->base.panel_height = panel_height;
driver->base.rotation = QP_ROTATION_0;
driver->base.offset_x = 0;
driver->base.offset_y = 0;
driver->base.native_bits_per_pixel = 16; // RGB565
// SPI and other pin configuration
driver->base.comms_config = &driver->spi_dc_reset_config;
driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin;
driver->spi_dc_reset_config.spi_config.divisor = spi_divisor;
driver->spi_dc_reset_config.spi_config.lsb_first = false;
driver->spi_dc_reset_config.spi_config.mode = spi_mode;
driver->spi_dc_reset_config.dc_pin = dc_pin;
driver->spi_dc_reset_config.reset_pin = reset_pin;
return (painter_device_t)driver;
}
}
return NULL;
}
#endif // QUANTUM_PAINTER_ST7735_SPI_ENABLE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,45 @@
// Copyright 2021 Paul Cotter (@gr1mr3aver)
// Copyright 2021 Nick Brassel (@tzarc)
// Copyright 2022 David Hoelscher (@customMK)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "gpio.h"
#include "qp_internal.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Quantum Painter ST7735 configurables (add to your keyboard's config.h)
#ifndef ST7735_NUM_DEVICES
/**
* @def This controls the maximum number of ST7735 devices that Quantum Painter can communicate with at any one time.
* Increasing this number allows for multiple displays to be used.
*/
# define ST7735_NUM_DEVICES 1
#endif
// Additional configuration options to be copied to your keyboard's config.h (don't change here):
// If you know exactly which offsets should be used on your panel with respect to selected rotation, then this config
// option allows you to save some flash space -- you'll need to invoke qp_set_viewport_offsets() instead from your keyboard.
// #define ST7735_NO_AUTOMATIC_VIEWPORT_OFFSETS
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Quantum Painter ST7735 device factories
#ifdef QUANTUM_PAINTER_ST7735_SPI_ENABLE
/**
* Factory method for an ST7735 SPI LCD device.
*
* @param panel_width[in] the width of the display panel
* @param panel_height[in] the height of the display panel
* @param chip_select_pin[in] the GPIO pin used for SPI chip select
* @param dc_pin[in] the GPIO pin used for D/C control
* @param reset_pin[in] the GPIO pin used for RST
* @param spi_divisor[in] the SPI divisor to use when communicating with the display
* @param spi_mode[in] the SPI mode to use when communicating with the display
* @return the device handle used with all drawing routines in Quantum Painter
*/
painter_device_t qp_st7735_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
#endif // QUANTUM_PAINTER_ST7735_SPI_ENABLE

View File

@@ -0,0 +1,31 @@
// Copyright 2022 David Hoelscher (@customMK)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Quantum Painter ST7735 additional command opcodes
// Panel Function Commands
#define ST7735_SET_FRAME_RATE_CTL_1 0xB1 // Set frame rate control 1
#define ST7735_SET_FRAME_RATE_CTL_2 0xB2 // Set frame rate control 2
#define ST7735_SET_FRAME_RATE_CTL_3 0xB3 // Set frame rate control 3
#define ST7735_SET_INVERSION_CTL 0xB4 // Set inversion mode control
#define ST7735_SET_DISPLAY_CTL 0xB6 // Set display control 5
#define ST7735_SET_POWER_CTL_1 0xC0 // Set GVDD
#define ST7735_SET_POWER_CTL_2 0xC1 // Set VGH and VGL
#define ST7735_SET_POWER_CTL_3 0xC2 // Set normal mode op amp current
#define ST7735_SET_POWER_CTL_4 0xC3 // Set idle mode op amp current
#define ST7735_SET_POWER_CTL_5 0xC4 // Set partial mode op amp current
#define ST7735_SET_VCOM_CTL 0xC5 // Set VCOM voltages
#define ST7735_SET_VCOM_OFFSET_CTL 0xC7 // Set VCOM offset ctl
#define ST7735_SET_LCD_ID 0xD1 // Set LCD module version
#define ST7735_SET_PROJECT_ID 0xD2 // Set product project ID
#define ST7735_SET_POWER_CTL_6 0xFC // Set partial+idle op amp current
#define ST7735_SET_NVMEM_CTL_STATUS 0xD9 // EEPROM Control Status
#define ST7735_SET_NVMEM_READ_CMD 0xCC // EEPROM Read Command
#define ST7735_SET_NVMEM_WRITE_CMD 0xDF // EEPROM Write Command
#define ST7735_SET_PGAMMA 0xE0 // Set positive gamma
#define ST7735_SET_NGAMMA 0xE1 // Set negative gamma
#define ST7735_SET_EXTENSION_ENABLE 0xF0 // Enable extension command
#define ST7735_SET_VCOM_DELAY 0xFF // Set VCOM delay time

View File

@@ -90,12 +90,11 @@ const struct tft_panel_dc_reset_painter_driver_vtable_t st7789_driver_vtable = {
.flush = qp_tft_panel_flush,
.pixdata = qp_tft_panel_pixdata,
.viewport = qp_tft_panel_viewport,
.palette_convert = qp_tft_panel_palette_convert,
.append_pixels = qp_tft_panel_append_pixels,
.palette_convert = qp_tft_panel_palette_convert_rgb565_swapped,
.append_pixels = qp_tft_panel_append_pixels_rgb565,
},
.rgb888_to_native16bit = qp_rgb888_to_rgb565_swapped,
.num_window_bytes = 2,
.swap_window_coords = false,
.num_window_bytes = 2,
.swap_window_coords = false,
.opcodes =
{
.display_on = ST77XX_CMD_DISPLAY_ON,

View File

@@ -9,29 +9,6 @@
#define BYTE_SWAP(x) (((((uint16_t)(x)) >> 8) & 0x00FF) | ((((uint16_t)(x)) << 8) & 0xFF00))
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Native pixel format conversion
uint16_t qp_rgb888_to_rgb565(uint8_t r, uint8_t g, uint8_t b) {
uint16_t rgb565 = (((uint16_t)r) >> 3) << 11 | (((uint16_t)g) >> 2) << 5 | (((uint16_t)b) >> 3);
return rgb565;
}
uint16_t qp_rgb888_to_rgb565_swapped(uint8_t r, uint8_t g, uint8_t b) {
uint16_t rgb565 = (((uint16_t)r) >> 3) << 11 | (((uint16_t)g) >> 2) << 5 | (((uint16_t)b) >> 3);
return BYTE_SWAP(rgb565);
}
uint16_t qp_rgb888_to_bgr565(uint8_t r, uint8_t g, uint8_t b) {
uint16_t bgr565 = (((uint16_t)b) >> 3) << 11 | (((uint16_t)g) >> 2) << 5 | (((uint16_t)r) >> 3);
return bgr565;
}
uint16_t qp_rgb888_to_bgr565_swapped(uint8_t r, uint8_t g, uint8_t b) {
uint16_t bgr565 = (((uint16_t)b) >> 3) << 11 | (((uint16_t)g) >> 2) << 5 | (((uint16_t)r) >> 3);
return BYTE_SWAP(bgr565);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Quantum Painter API implementations
@@ -105,26 +82,49 @@ bool qp_tft_panel_viewport(painter_device_t device, uint16_t left, uint16_t top,
// Stream pixel data to the current write position in GRAM
bool qp_tft_panel_pixdata(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count) {
qp_comms_send(device, pixel_data, native_pixel_count * sizeof(uint16_t));
struct painter_driver_t *driver = (struct painter_driver_t *)device;
qp_comms_send(device, pixel_data, native_pixel_count * driver->native_bits_per_pixel / 8);
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Convert supplied palette entries into their native equivalents
bool qp_tft_panel_palette_convert(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) {
struct painter_driver_t * driver = (struct painter_driver_t *)device;
struct tft_panel_dc_reset_painter_driver_vtable_t *vtable = (struct tft_panel_dc_reset_painter_driver_vtable_t *)driver->driver_vtable;
bool qp_tft_panel_palette_convert_rgb565_swapped(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) {
for (int16_t i = 0; i < palette_size; ++i) {
RGB rgb = hsv_to_rgb_nocie((HSV){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v});
palette[i].rgb565 = vtable->rgb888_to_native16bit(rgb.r, rgb.g, rgb.b);
RGB rgb = hsv_to_rgb_nocie((HSV){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v});
uint16_t rgb565 = (((uint16_t)rgb.r) >> 3) << 11 | (((uint16_t)rgb.g) >> 2) << 5 | (((uint16_t)rgb.b) >> 3);
palette[i].rgb565 = BYTE_SWAP(rgb565);
}
return true;
}
bool qp_tft_panel_palette_convert_rgb888(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) {
for (int16_t i = 0; i < palette_size; ++i) {
RGB rgb = hsv_to_rgb_nocie((HSV){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v});
palette[i].rgb888.r = rgb.r;
palette[i].rgb888.g = rgb.g;
palette[i].rgb888.b = rgb.b;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Append pixels to the target location, keyed by the pixel index
bool qp_tft_panel_append_pixels(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) {
bool qp_tft_panel_append_pixels_rgb565(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) {
uint16_t *buf = (uint16_t *)target_buffer;
for (uint32_t i = 0; i < pixel_count; ++i) {
buf[pixel_offset + i] = palette[palette_indices[i]].rgb565;
}
return true;
}
bool qp_tft_panel_append_pixels_rgb888(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) {
for (uint32_t i = 0; i < pixel_count; ++i) {
target_buffer[(pixel_offset + i) * 3 + 0] = palette[palette_indices[i]].rgb888.r;
target_buffer[(pixel_offset + i) * 3 + 1] = palette[palette_indices[i]].rgb888.g;
target_buffer[(pixel_offset + i) * 3 + 2] = palette[palette_indices[i]].rgb888.b;
}
return true;
}

View File

@@ -11,15 +11,10 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Common TFT panel implementation using D/C, and RST pins.
typedef uint16_t (*rgb888_to_native_uint16_t)(uint8_t r, uint8_t g, uint8_t b);
// Driver vtable with extras
struct tft_panel_dc_reset_painter_driver_vtable_t {
struct painter_driver_vtable_t base; // must be first, so it can be cast to/from the painter_driver_vtable_t* type
// Conversion function for palette entries
rgb888_to_native_uint16_t rgb888_to_native16bit;
// Number of bytes for transmitting x/y coordinates
uint8_t num_window_bytes;
@@ -58,10 +53,9 @@ bool qp_tft_panel_clear(painter_device_t device);
bool qp_tft_panel_flush(painter_device_t device);
bool qp_tft_panel_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom);
bool qp_tft_panel_pixdata(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count);
bool qp_tft_panel_palette_convert(painter_device_t device, int16_t palette_size, qp_pixel_t *palette);
bool qp_tft_panel_append_pixels(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices);
uint16_t qp_rgb888_to_rgb565(uint8_t r, uint8_t g, uint8_t b);
uint16_t qp_rgb888_to_rgb565_swapped(uint8_t r, uint8_t g, uint8_t b);
uint16_t qp_rgb888_to_bgr565(uint8_t r, uint8_t g, uint8_t b);
uint16_t qp_rgb888_to_bgr565_swapped(uint8_t r, uint8_t g, uint8_t b);
bool qp_tft_panel_palette_convert_rgb565_swapped(painter_device_t device, int16_t palette_size, qp_pixel_t *palette);
bool qp_tft_panel_palette_convert_rgb888(painter_device_t device, int16_t palette_size, qp_pixel_t *palette);
bool qp_tft_panel_append_pixels_rgb565(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices);
bool qp_tft_panel_append_pixels_rgb888(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices);

View File

@@ -89,6 +89,7 @@ uint8_t ps2_host_send(uint8_t data);
uint8_t ps2_host_recv_response(void);
uint8_t ps2_host_recv(void);
void ps2_host_set_led(uint8_t usb_led);
bool pbuf_has_data(void);
/*--------------------------------------------------------------------
* static functions

View File

@@ -66,8 +66,8 @@ uint8_t ps2_error = PS2_ERR_NONE;
static inline uint8_t pbuf_dequeue(void);
static inline void pbuf_enqueue(uint8_t data);
static inline bool pbuf_has_data(void);
static inline void pbuf_clear(void);
bool pbuf_has_data(void);
#if defined(PROTOCOL_CHIBIOS)
void ps2_interrupt_service_routine(void);
@@ -76,17 +76,18 @@ void palCallback(void *arg) {
}
# define PS2_INT_INIT() \
{ palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_INPUT); } \
while (0)
do { \
palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_INPUT); \
} while (0)
# define PS2_INT_ON() \
{ \
do { \
palEnableLineEvent(PS2_CLOCK_PIN, PAL_EVENT_MODE_FALLING_EDGE); \
palSetLineCallback(PS2_CLOCK_PIN, palCallback, NULL); \
} \
while (0)
} while (0)
# define PS2_INT_OFF() \
{ palDisableLineEvent(PS2_CLOCK_PIN); } \
while (0)
do { \
palDisableLineEvent(PS2_CLOCK_PIN); \
} while (0)
#endif // PROTOCOL_CHIBIOS
void ps2_host_init(void) {
@@ -309,7 +310,7 @@ static inline uint8_t pbuf_dequeue(void) {
return val;
}
static inline bool pbuf_has_data(void) {
bool pbuf_has_data(void) {
#if defined(__AVR__)
uint8_t sreg = SREG;
cli();

View File

@@ -53,6 +53,7 @@ void ps2_mouse_init(void) {
ps2_mouse_set_remote_mode();
#else
ps2_mouse_enable_data_reporting();
ps2_mouse_set_stream_mode();
#endif
#ifdef PS2_MOUSE_ENABLE_SCROLLING
@@ -75,19 +76,33 @@ void ps2_mouse_task(void) {
extern int tp_buttons;
/* receives packet from mouse */
#ifdef PS2_MOUSE_USE_REMOTE_MODE
uint8_t rcv;
rcv = ps2_host_send(PS2_MOUSE_READ_DATA);
if (rcv == PS2_ACK) {
mouse_report.buttons = ps2_host_recv_response() | tp_buttons;
mouse_report.x = ps2_host_recv_response() * PS2_MOUSE_X_MULTIPLIER;
mouse_report.y = ps2_host_recv_response() * PS2_MOUSE_Y_MULTIPLIER;
#ifdef PS2_MOUSE_ENABLE_SCROLLING
# ifdef PS2_MOUSE_ENABLE_SCROLLING
mouse_report.v = -(ps2_host_recv_response() & PS2_MOUSE_SCROLL_MASK) * PS2_MOUSE_V_MULTIPLIER;
#endif
# endif
} else {
if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
return;
}
#else
if (pbuf_has_data()) {
mouse_report.buttons = ps2_host_recv_response() | tp_buttons;
mouse_report.x = ps2_host_recv_response() * PS2_MOUSE_X_MULTIPLIER;
mouse_report.y = ps2_host_recv_response() * PS2_MOUSE_Y_MULTIPLIER;
# ifdef PS2_MOUSE_ENABLE_SCROLLING
mouse_report.v = -(ps2_host_recv_response() & PS2_MOUSE_SCROLL_MASK) * PS2_MOUSE_V_MULTIPLIER;
# endif
} else {
if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
return;
}
#endif
/* if mouse moves or buttons state changes */
if (mouse_report.x || mouse_report.y || mouse_report.v || ((mouse_report.buttons ^ buttons_prev) & PS2_MOUSE_BTN_MASK)) {

View File

@@ -40,15 +40,27 @@
// Definitions for the ADNS serial line.
#ifndef ADNS5050_SCLK_PIN
# error "No clock pin defined -- missing ADNS5050_SCLK_PIN"
# ifdef POINTING_DEVICE_SCLK_PIN
# define ADNS5050_SCLK_PIN POINTING_DEVICE_SCLK_PIN
# else
# error "No clock pin defined -- missing POINTING_DEVICE_SCLK_PIN or ADNS5050_SCLK_PIN"
# endif
#endif
#ifndef ADNS5050_SDIO_PIN
# error "No data pin defined -- missing ADNS5050_SDIO_PIN"
# ifdef POINTING_DEVICE_SDIO_PIN
# define ADNS5050_SDIO_PIN POINTING_DEVICE_SDIO_PIN
# else
# error "No data pin defined -- missing POINTING_DEVICE_SDIO_PIN or ADNS5050_SDIO_PIN"
# endif
#endif
#ifndef ADNS5050_CS_PIN
# error "No chip select pin defined -- missing ADNS5050_CS_PIN"
# ifdef POINTING_DEVICE_CS_PIN
# define ADNS5050_CS_PIN POINTING_DEVICE_CS_PIN
# else
# error "No chip select pin defined -- missing POINTING_DEVICE_CS_PIN or ADNS5050_CS_PIN define"
# endif
#endif
typedef struct {

View File

@@ -43,7 +43,11 @@
#endif
#ifndef ADNS9800_CS_PIN
# error "No chip select pin defined -- missing ADNS9800_CS_PIN"
# ifdef POINTING_DEVICE_CS_PIN
# define ADNS9800_CS_PIN POINTING_DEVICE_CS_PIN
# else
# error "No chip select pin defined -- missing POINTING_DEVICE_CS_PIN or ADNS9800_CS_PIN"
# endif
#endif
typedef struct {

View File

@@ -1,52 +1,26 @@
// Copyright (c) 2018 Cirque Corp. Restrictions apply. See: www.cirque.com/sw-license
// based on https://github.com/cirque-corp/Cirque_Pinnacle_1CA027/tree/master/Circular_Trackpad
// with modifications and changes for QMK
// refer to documentation: Gen2 and Gen3 (Pinnacle ASIC) at https://www.cirque.com/documentation
#include "cirque_pinnacle.h"
#include "print.h"
#include "debug.h"
#include "wait.h"
#include "timer.h"
// Registers for RAP
// clang-format off
#define FIRMWARE_ID 0x00
#define FIRMWARE_VERSION_C 0x01
#define STATUS_1 0x02
#define SYSCONFIG_1 0x03
#define FEEDCONFIG_1 0x04
#define FEEDCONFIG_2 0x05
#define CALIBRATION_CONFIG_1 0x07
#define PS2_AU_CONTROL 0x08
#define SAMPLE_RATE 0x09
#define Z_IDLE_COUNT 0x0A
#define Z_SCALER 0x0B
#define SLEEP_INTERVAL 0x0C
#define SLEEP_TIMER 0x0D
#define PACKET_BYTE_0 0x12
#define PACKET_BYTE_1 0x13
#define PACKET_BYTE_2 0x14
#define PACKET_BYTE_3 0x15
#define PACKET_BYTE_4 0x16
#define PACKET_BYTE_5 0x17
#include <stdlib.h>
#define ERA_VALUE 0x1B
#define ERA_HIGH_BYTE 0x1C
#define ERA_LOW_BYTE 0x1D
#define ERA_CONTROL 0x1E
// ADC-attenuation settings (held in BIT_7 and BIT_6)
// 1X = most sensitive, 4X = least sensitive
#define ADC_ATTENUATE_1X 0x00
#define ADC_ATTENUATE_2X 0x40
#define ADC_ATTENUATE_3X 0x80
#define ADC_ATTENUATE_4X 0xC0
// Register config values for this demo
#define SYSCONFIG_1_VALUE 0x00
#define FEEDCONFIG_1_VALUE 0x03 // 0x03 for absolute mode 0x01 for relative mode
#define FEEDCONFIG_2_VALUE 0x1C // 0x1F for normal functionality 0x1E for intellimouse disabled
#define Z_IDLE_COUNT_VALUE 0x05
// clang-format on
#ifndef CIRQUE_PINNACLE_ATTENUATION
# ifdef CIRQUE_PINNACLE_CURVED_OVERLAY
# define CIRQUE_PINNACLE_ATTENUATION EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_2X
# else
# define CIRQUE_PINNACLE_ATTENUATION EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_4X
# endif
#endif
bool touchpad_init;
uint16_t scale_data = 1024;
uint16_t scale_data = CIRQUE_PINNACLE_DEFAULT_SCALE;
void cirque_pinnacle_clear_flags(void);
void cirque_pinnacle_enable_feed(bool feedEnable);
@@ -59,6 +33,7 @@ void print_byte(uint8_t byte) {
}
#endif
#if CIRQUE_PINNACLE_POSITION_MODE
/* Logical Scaling Functions */
// Clips raw coordinates to "reachable" window of sensor
// NOTE: values outside this window can only appear as a result of noise
@@ -74,6 +49,7 @@ void ClipCoordinates(pinnacle_data_t* coordinates) {
coordinates->yValue = CIRQUE_PINNACLE_Y_UPPER;
}
}
#endif
uint16_t cirque_pinnacle_get_scale(void) {
return scale_data;
@@ -84,6 +60,7 @@ void cirque_pinnacle_set_scale(uint16_t scale) {
// Scales data to desired X & Y resolution
void cirque_pinnacle_scale_data(pinnacle_data_t* coordinates, uint16_t xResolution, uint16_t yResolution) {
#if CIRQUE_PINNACLE_POSITION_MODE
uint32_t xTemp = 0;
uint32_t yTemp = 0;
@@ -99,49 +76,65 @@ void cirque_pinnacle_scale_data(pinnacle_data_t* coordinates, uint16_t xResoluti
// scale coordinates to (xResolution, yResolution) range
coordinates->xValue = (uint16_t)(xTemp * xResolution / CIRQUE_PINNACLE_X_RANGE);
coordinates->yValue = (uint16_t)(yTemp * yResolution / CIRQUE_PINNACLE_Y_RANGE);
#else
int32_t xTemp = 0, yTemp = 0;
ldiv_t temp;
static int32_t xRemainder, yRemainder;
temp = ldiv(((int32_t)coordinates->xDelta) * (int32_t)xResolution + xRemainder, (int32_t)CIRQUE_PINNACLE_X_RANGE);
xTemp = temp.quot;
xRemainder = temp.rem;
temp = ldiv(((int32_t)coordinates->yDelta) * (int32_t)yResolution + yRemainder, (int32_t)CIRQUE_PINNACLE_Y_RANGE);
yTemp = temp.quot;
yRemainder = temp.rem;
coordinates->xDelta = (int16_t)xTemp;
coordinates->yDelta = (int16_t)yTemp;
#endif
}
// Clears Status1 register flags (SW_CC and SW_DR)
void cirque_pinnacle_clear_flags() {
RAP_Write(STATUS_1, 0x00);
RAP_Write(HOSTREG__STATUS1, HOSTREG__STATUS1_DEFVAL & ~(HOSTREG__STATUS1__COMMAND_COMPLETE | HOSTREG__STATUS1__DATA_READY));
wait_us(50);
}
// Enables/Disables the feed
void cirque_pinnacle_enable_feed(bool feedEnable) {
uint8_t temp;
RAP_ReadBytes(FEEDCONFIG_1, &temp, 1); // Store contents of FeedConfig1 register
uint8_t feedconfig1;
RAP_ReadBytes(HOSTREG__FEEDCONFIG1, &feedconfig1, 1);
if (feedEnable) {
temp |= 0x01; // Set Feed Enable bit
RAP_Write(0x04, temp);
feedconfig1 |= HOSTREG__FEEDCONFIG1__FEED_ENABLE;
} else {
temp &= ~0x01; // Clear Feed Enable bit
RAP_Write(0x04, temp);
feedconfig1 &= ~HOSTREG__FEEDCONFIG1__FEED_ENABLE;
}
RAP_Write(HOSTREG__FEEDCONFIG1, feedconfig1);
}
/* ERA (Extended Register Access) Functions */
// Reads <count> bytes from an extended register at <address> (16-bit address),
// stores values in <*data>
void ERA_ReadBytes(uint16_t address, uint8_t* data, uint16_t count) {
uint8_t ERAControlValue = 0xFF;
uint8_t ERAControlValue = 0xFF;
uint16_t timeout_timer;
cirque_pinnacle_enable_feed(false); // Disable feed
RAP_Write(ERA_HIGH_BYTE, (uint8_t)(address >> 8)); // Send upper byte of ERA address
RAP_Write(ERA_LOW_BYTE, (uint8_t)(address & 0x00FF)); // Send lower byte of ERA address
RAP_Write(HOSTREG__EXT_REG_AXS_ADDR_HIGH, (uint8_t)(address >> 8)); // Send upper byte of ERA address
RAP_Write(HOSTREG__EXT_REG_AXS_ADDR_LOW, (uint8_t)(address & 0x00FF)); // Send lower byte of ERA address
for (uint16_t i = 0; i < count; i++) {
RAP_Write(ERA_CONTROL, 0x05); // Signal ERA-read (auto-increment) to Pinnacle
RAP_Write(HOSTREG__EXT_REG_AXS_CTRL, HOSTREG__EREG_AXS__INC_ADDR_READ | HOSTREG__EREG_AXS__READ); // Signal ERA-read (auto-increment) to Pinnacle
// Wait for status register 0x1E to clear
timeout_timer = timer_read();
do {
RAP_ReadBytes(ERA_CONTROL, &ERAControlValue, 1);
} while (ERAControlValue != 0x00);
RAP_ReadBytes(HOSTREG__EXT_REG_AXS_CTRL, &ERAControlValue, 1);
} while ((ERAControlValue != 0x00) && (timer_elapsed(timeout_timer) <= CIRQUE_PINNACLE_TIMEOUT));
RAP_ReadBytes(ERA_VALUE, data + i, 1);
RAP_ReadBytes(HOSTREG__EXT_REG_AXS_VALUE, data + i, 1);
cirque_pinnacle_clear_flags();
}
@@ -149,49 +142,89 @@ void ERA_ReadBytes(uint16_t address, uint8_t* data, uint16_t count) {
// Writes a byte, <data>, to an extended register at <address> (16-bit address)
void ERA_WriteByte(uint16_t address, uint8_t data) {
uint8_t ERAControlValue = 0xFF;
uint8_t ERAControlValue = 0xFF;
uint16_t timeout_timer;
cirque_pinnacle_enable_feed(false); // Disable feed
RAP_Write(ERA_VALUE, data); // Send data byte to be written
RAP_Write(HOSTREG__EXT_REG_AXS_VALUE, data); // Send data byte to be written
RAP_Write(ERA_HIGH_BYTE, (uint8_t)(address >> 8)); // Upper byte of ERA address
RAP_Write(ERA_LOW_BYTE, (uint8_t)(address & 0x00FF)); // Lower byte of ERA address
RAP_Write(HOSTREG__EXT_REG_AXS_ADDR_HIGH, (uint8_t)(address >> 8)); // Upper byte of ERA address
RAP_Write(HOSTREG__EXT_REG_AXS_ADDR_LOW, (uint8_t)(address & 0x00FF)); // Lower byte of ERA address
RAP_Write(ERA_CONTROL, 0x02); // Signal an ERA-write to Pinnacle
RAP_Write(HOSTREG__EXT_REG_AXS_CTRL, HOSTREG__EREG_AXS__WRITE); // Signal an ERA-write to Pinnacle
// Wait for status register 0x1E to clear
timeout_timer = timer_read();
do {
RAP_ReadBytes(ERA_CONTROL, &ERAControlValue, 1);
} while (ERAControlValue != 0x00);
RAP_ReadBytes(HOSTREG__EXT_REG_AXS_CTRL, &ERAControlValue, 1);
} while ((ERAControlValue != 0x00) && (timer_elapsed(timeout_timer) <= CIRQUE_PINNACLE_TIMEOUT));
cirque_pinnacle_clear_flags();
}
void cirque_pinnacle_set_adc_attenuation(uint8_t adcGain) {
uint8_t temp = 0x00;
bool cirque_pinnacle_set_adc_attenuation(uint8_t adcGain) {
uint8_t adcconfig = 0x00;
ERA_ReadBytes(0x0187, &temp, 1);
temp &= 0x3F; // clear top two bits
temp |= adcGain;
ERA_WriteByte(0x0187, temp);
ERA_ReadBytes(0x0187, &temp, 1);
ERA_ReadBytes(EXTREG__TRACK_ADCCONFIG, &adcconfig, 1);
adcGain &= EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_MASK;
if (adcGain == (adcconfig & EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_MASK)) {
return false;
}
adcconfig &= ~EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_MASK;
adcconfig |= adcGain;
ERA_WriteByte(EXTREG__TRACK_ADCCONFIG, adcconfig);
ERA_ReadBytes(EXTREG__TRACK_ADCCONFIG, &adcconfig, 1);
return true;
}
// Changes thresholds to improve detection of fingers
// Not needed for flat overlay?
void cirque_pinnacle_tune_edge_sensitivity(void) {
uint8_t temp = 0x00;
uint8_t widezmin = 0x00;
ERA_ReadBytes(0x0149, &temp, 1);
ERA_WriteByte(0x0149, 0x04);
ERA_ReadBytes(0x0149, &temp, 1);
ERA_ReadBytes(EXTREG__XAXIS_WIDEZMIN, &widezmin, 1);
ERA_WriteByte(EXTREG__XAXIS_WIDEZMIN, 0x04); // magic number from Cirque sample code
ERA_ReadBytes(EXTREG__XAXIS_WIDEZMIN, &widezmin, 1);
ERA_ReadBytes(0x0168, &temp, 1);
ERA_WriteByte(0x0168, 0x03);
ERA_ReadBytes(0x0168, &temp, 1);
ERA_ReadBytes(EXTREG__YAXIS_WIDEZMIN, &widezmin, 1);
ERA_WriteByte(EXTREG__YAXIS_WIDEZMIN, 0x03); // magic number from Cirque sample code
ERA_ReadBytes(EXTREG__YAXIS_WIDEZMIN, &widezmin, 1);
}
/* Pinnacle-based TM040040 Functions */
// Perform calibration
void cirque_pinnacle_calibrate(void) {
uint8_t calconfig;
uint16_t timeout_timer;
RAP_ReadBytes(HOSTREG__CALCONFIG1, &calconfig, 1);
calconfig |= HOSTREG__CALCONFIG1__CALIBRATE;
RAP_Write(HOSTREG__CALCONFIG1, calconfig);
// Calibration takes ~100ms according to GT-AN-090624, doubling the timeout just to be safe
timeout_timer = timer_read();
do {
RAP_ReadBytes(HOSTREG__CALCONFIG1, &calconfig, 1);
} while ((calconfig & HOSTREG__CALCONFIG1__CALIBRATE) && (timer_elapsed(timeout_timer) <= 200));
cirque_pinnacle_clear_flags();
}
// Enable/disable cursor smoothing, smoothing is enabled by default
void cirque_pinnacle_cursor_smoothing(bool enable) {
uint8_t feedconfig3;
RAP_ReadBytes(HOSTREG__FEEDCONFIG3, &feedconfig3, 1);
if (enable) {
feedconfig3 &= ~HOSTREG__FEEDCONFIG3__DISABLE_CROSS_RATE_SMOOTHING;
} else {
feedconfig3 |= HOSTREG__FEEDCONFIG3__DISABLE_CROSS_RATE_SMOOTHING;
}
RAP_Write(HOSTREG__FEEDCONFIG3, feedconfig3);
}
/* Pinnacle-based TM040040/TM035035/TM023023 Functions */
void cirque_pinnacle_init(void) {
#if defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_spi)
spi_init();
@@ -200,39 +233,101 @@ void cirque_pinnacle_init(void) {
#endif
touchpad_init = true;
// send a RESET command now, in case QMK had a soft-reset without a power cycle
RAP_Write(HOSTREG__SYSCONFIG1, HOSTREG__SYSCONFIG1__RESET);
wait_ms(30); // Pinnacle needs 10-15ms to boot, so wait long enough before configuring
RAP_Write(HOSTREG__SYSCONFIG1, HOSTREG__SYSCONFIG1_DEFVAL);
wait_us(50);
// Host clears SW_CC flag
cirque_pinnacle_clear_flags();
// Host configures bits of registers 0x03 and 0x05
RAP_Write(SYSCONFIG_1, SYSCONFIG_1_VALUE);
RAP_Write(FEEDCONFIG_2, FEEDCONFIG_2_VALUE);
#if CIRQUE_PINNACLE_POSITION_MODE
RAP_Write(HOSTREG__FEEDCONFIG2, HOSTREG__FEEDCONFIG2_DEFVAL);
#else
// FeedConfig2 (Feature flags for Relative Mode Only)
uint8_t feedconfig2 = HOSTREG__FEEDCONFIG2__GLIDE_EXTEND_DISABLE | HOSTREG__FEEDCONFIG2__INTELLIMOUSE_MODE;
# if !defined(CIRQUE_PINNACLE_TAP_ENABLE)
feedconfig2 |= HOSTREG__FEEDCONFIG2__ALL_TAP_DISABLE;
# endif
# if !defined(CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE)
feedconfig2 |= HOSTREG__FEEDCONFIG2__SECONDARY_TAP_DISABLE;
# elif !defined(CIRQUE_PINNACLE_TAP_ENABLE)
# error CIRQUE_PINNACLE_TAP_ENABLE must be defined for CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE to work
# endif
# if !defined(CIRQUE_PINNACLE_SIDE_SCROLL_ENABLE)
feedconfig2 |= HOSTREG__FEEDCONFIG2__SCROLL_DISABLE;
# endif
RAP_Write(HOSTREG__FEEDCONFIG2, feedconfig2);
#endif
// Host enables preferred output mode (absolute)
RAP_Write(FEEDCONFIG_1, FEEDCONFIG_1_VALUE);
// FeedConfig1 (Data Output Flags)
RAP_Write(HOSTREG__FEEDCONFIG1, CIRQUE_PINNACLE_POSITION_MODE ? HOSTREG__FEEDCONFIG1__DATA_TYPE__REL0_ABS1 : HOSTREG__FEEDCONFIG1_DEFVAL);
// Host sets z-idle packet count to 5 (default is 30)
RAP_Write(Z_IDLE_COUNT, Z_IDLE_COUNT_VALUE);
#if CIRQUE_PINNACLE_POSITION_MODE
// Host sets z-idle packet count to 5 (default is 0x1E/30)
RAP_Write(HOSTREG__ZIDLE, 5);
#endif
cirque_pinnacle_set_adc_attenuation(0xFF);
bool calibrate = cirque_pinnacle_set_adc_attenuation(CIRQUE_PINNACLE_ATTENUATION);
#ifdef CIRQUE_PINNACLE_CURVED_OVERLAY
cirque_pinnacle_tune_edge_sensitivity();
calibrate = true;
#endif
if (calibrate) {
// Force a calibration after setting ADC attenuation
cirque_pinnacle_calibrate();
}
cirque_pinnacle_enable_feed(true);
}
// Reads XYZ data from Pinnacle registers 0x14 through 0x17
// Stores result in pinnacle_data_t struct with xValue, yValue, and zValue members
pinnacle_data_t cirque_pinnacle_read_data(void) {
uint8_t data[6] = {0};
pinnacle_data_t result = {0};
RAP_ReadBytes(PACKET_BYTE_0, data, 6);
uint8_t data_ready = 0;
uint8_t data[6] = {0};
pinnacle_data_t result = {0};
// Check if there is valid data available
RAP_ReadBytes(HOSTREG__STATUS1, &data_ready, 1);
if ((data_ready & HOSTREG__STATUS1__DATA_READY) == 0) {
// no data available yet
result.valid = false; // be explicit
return result;
}
// Read all data bytes
RAP_ReadBytes(HOSTREG__PACKETBYTE_0, data, 6);
// Get ready for the next data sample
cirque_pinnacle_clear_flags();
result.buttonFlags = data[0] & 0x3F;
result.xValue = data[2] | ((data[4] & 0x0F) << 8);
result.yValue = data[3] | ((data[4] & 0xF0) << 4);
result.zValue = data[5] & 0x3F;
result.touchDown = (result.xValue != 0 || result.yValue != 0);
#if CIRQUE_PINNACLE_POSITION_MODE
// Decode data for absolute mode
// Register 0x13 is unused in this mode (palm detection area)
result.buttonFlags = data[0] & 0x3F; // bit0 to bit5 are switch 0-5, only hardware button presses (from input pin on the Pinnacle chip)
result.xValue = data[2] | ((data[4] & 0x0F) << 8); // merge high and low bits for X
result.yValue = data[3] | ((data[4] & 0xF0) << 4); // merge high and low bits for Y
result.zValue = data[5] & 0x3F; // Z is only lower 6 bits, upper 2 bits are reserved/unused
result.touchDown = (result.xValue != 0 || result.yValue != 0); // (0,0) is a "magic coordinate" to indicate "finger touched down"
#else
// Decode data for relative mode
// Registers 0x16 and 0x17 are unused in this mode
result.buttons = data[0] & 0x07; // Only three buttons are supported
if ((data[0] & 0x10) && data[1] != 0) {
result.xDelta = -((int16_t)256 - (int16_t)(data[1]));
} else {
result.xDelta = data[1];
}
if ((data[0] & 0x20) && data[2] != 0) {
result.yDelta = ((int16_t)256 - (int16_t)(data[2]));
} else {
result.yDelta = -((int16_t)data[2]);
}
result.wheelCount = ((int8_t*)data)[3];
#endif
result.valid = true;
return result;
}

View File

@@ -2,53 +2,63 @@
#pragma once
#include "cirque_pinnacle_regdefs.h"
#include <stdint.h>
#include <stdbool.h>
// Convenient way to store and access measurements
typedef struct {
uint16_t xValue;
uint16_t yValue;
uint16_t zValue;
uint8_t buttonFlags;
bool touchDown;
} pinnacle_data_t;
void cirque_pinnacle_init(void);
pinnacle_data_t cirque_pinnacle_read_data(void);
void cirque_pinnacle_scale_data(pinnacle_data_t* coordinates, uint16_t xResolution, uint16_t yResolution);
uint16_t cirque_pinnacle_get_scale(void);
void cirque_pinnacle_set_scale(uint16_t scale);
#ifndef CIRQUE_PINNACLE_TIMEOUT
# define CIRQUE_PINNACLE_TIMEOUT 20
# define CIRQUE_PINNACLE_TIMEOUT 20 // I2C timeout in milliseconds
#endif
#define CIRQUE_PINNACLE_ABSOLUTE_MODE 1
#define CIRQUE_PINNACLE_RELATIVE_MODE 0
#ifndef CIRQUE_PINNACLE_POSITION_MODE
# define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_ABSOLUTE_MODE
#endif
#define CIRQUE_PINNACLE_DEFAULT_SCALE 1024
#ifndef CIRQUE_PINNACLE_DIAMETER_MM
# define CIRQUE_PINNACLE_DIAMETER_MM 40
#endif
#if CIRQUE_PINNACLE_POSITION_MODE
// Coordinate scaling values
#ifndef CIRQUE_PINNACLE_X_LOWER
# define CIRQUE_PINNACLE_X_LOWER 127 // min "reachable" X value
# ifndef CIRQUE_PINNACLE_X_LOWER
# define CIRQUE_PINNACLE_X_LOWER 127 // min "reachable" X value
# endif
# ifndef CIRQUE_PINNACLE_X_UPPER
# define CIRQUE_PINNACLE_X_UPPER 1919 // max "reachable" X value
# endif
# ifndef CIRQUE_PINNACLE_Y_LOWER
# define CIRQUE_PINNACLE_Y_LOWER 63 // min "reachable" Y value
# endif
# ifndef CIRQUE_PINNACLE_Y_UPPER
# define CIRQUE_PINNACLE_Y_UPPER 1471 // max "reachable" Y value
# endif
# ifndef CIRQUE_PINNACLE_X_RANGE
# define CIRQUE_PINNACLE_X_RANGE (CIRQUE_PINNACLE_X_UPPER - CIRQUE_PINNACLE_X_LOWER)
# endif
# ifndef CIRQUE_PINNACLE_Y_RANGE
# define CIRQUE_PINNACLE_Y_RANGE (CIRQUE_PINNACLE_Y_UPPER - CIRQUE_PINNACLE_Y_LOWER)
# endif
# if defined(POINTING_DEVICE_GESTURES_SCROLL_ENABLE)
# define CIRQUE_PINNACLE_CIRCULAR_SCROLL_ENABLE
# endif
#else
# define CIRQUE_PINNACLE_X_RANGE 256
# define CIRQUE_PINNACLE_Y_RANGE 256
# if defined(POINTING_DEVICE_GESTURES_SCROLL_ENABLE)
# define CIRQUE_PINNACLE_SIDE_SCROLL_ENABLE
# endif
#endif
#ifndef CIRQUE_PINNACLE_X_UPPER
# define CIRQUE_PINNACLE_X_UPPER 1919 // max "reachable" X value
#if !defined(POINTING_DEVICE_TASK_THROTTLE_MS)
# define POINTING_DEVICE_TASK_THROTTLE_MS 10 // Cirque Pinnacle in normal operation produces data every 10ms. Advanced configuration for pen/stylus usage might require lower values.
#endif
#ifndef CIRQUE_PINNACLE_Y_LOWER
# define CIRQUE_PINNACLE_Y_LOWER 63 // min "reachable" Y value
#endif
#ifndef CIRQUE_PINNACLE_Y_UPPER
# define CIRQUE_PINNACLE_Y_UPPER 1471 // max "reachable" Y value
#endif
#ifndef CIRQUE_PINNACLE_X_RANGE
# define CIRQUE_PINNACLE_X_RANGE (CIRQUE_PINNACLE_X_UPPER - CIRQUE_PINNACLE_X_LOWER)
#endif
#ifndef CIRQUE_PINNACLE_Y_RANGE
# define CIRQUE_PINNACLE_Y_RANGE (CIRQUE_PINNACLE_Y_UPPER - CIRQUE_PINNACLE_Y_LOWER)
#endif
#if defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_i2c)
# include "i2c_master.h"
// Cirque's 7-bit I2C Slave Address
# ifndef CIRQUE_PINNACLE_ADDR
# define CIRQUE_PINNACLE_ADDR 0x2A
# define CIRQUE_PINNACLE_ADDR I2C_ADDRESS_DEFAULT
# endif
#elif defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_spi)
# include "spi_master.h"
@@ -68,7 +78,40 @@ void cirque_pinnacle_set_scale(uint16_t scale);
# define CIRQUE_PINNACLE_SPI_DIVISOR 64
# endif
# ifndef CIRQUE_PINNACLE_SPI_CS_PIN
# error "No Chip Select pin has been defined -- missing CIRQUE_PINNACLE_SPI_CS_PIN define"
# ifdef POINTING_DEVICE_CS_PIN
# define CIRQUE_PINNACLE_SPI_CS_PIN POINTING_DEVICE_CS_PIN
# else
# error "No Chip Select pin has been defined -- missing POINTING_DEVICE_CS_PIN or CIRQUE_PINNACLE_SPI_CS_PIN define"
# endif
# endif
# endif
#endif
#define DIVIDE_UNSIGNED_ROUND(numerator, denominator) (((numerator) + ((denominator) / 2)) / (denominator))
#define CIRQUE_PINNACLE_INCH_TO_PX(inch) (DIVIDE_UNSIGNED_ROUND((inch) * (uint32_t)CIRQUE_PINNACLE_DIAMETER_MM * 10, 254))
#define CIRQUE_PINNACLE_PX_TO_INCH(px) (DIVIDE_UNSIGNED_ROUND((px) * (uint32_t)254, CIRQUE_PINNACLE_DIAMETER_MM * 10))
// Convenient way to store and access measurements
typedef struct {
bool valid; // true if valid data was read, false if no data was ready
#if CIRQUE_PINNACLE_POSITION_MODE
uint16_t xValue;
uint16_t yValue;
uint16_t zValue;
uint8_t buttonFlags;
bool touchDown;
#else
int16_t xDelta;
int16_t yDelta;
int8_t wheelCount;
uint8_t buttons;
#endif
} pinnacle_data_t;
void cirque_pinnacle_init(void);
void cirque_pinnacle_calibrate(void);
void cirque_pinnacle_cursor_smoothing(bool enable);
pinnacle_data_t cirque_pinnacle_read_data(void);
void cirque_pinnacle_scale_data(pinnacle_data_t* coordinates, uint16_t xResolution, uint16_t yResolution);
uint16_t cirque_pinnacle_get_scale(void);
void cirque_pinnacle_set_scale(uint16_t scale);

View File

@@ -0,0 +1,238 @@
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2022 Daniel Kao <daniel.m.kao@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <lib/lib8tion/lib8tion.h>
#include "cirque_pinnacle_gestures.h"
#include "pointing_device.h"
#include "timer.h"
#include "wait.h"
#if defined(SPLIT_POINTING_ENABLE) && defined(POINTING_DEVICE_COMBINED)
# include "keyboard.h"
#endif
#if (defined(CIRQUE_PINNACLE_TAP_ENABLE) || defined(CIRQUE_PINNACLE_CIRCULAR_SCROLL_ENABLE)) && CIRQUE_PINNACLE_POSITION_MODE
static cirque_pinnacle_features_t features = {.tap_enable = true, .circular_scroll_enable = true};
#endif
#if defined(CIRQUE_PINNACLE_TAP_ENABLE) && CIRQUE_PINNACLE_POSITION_MODE
static trackpad_tap_context_t tap;
static report_mouse_t trackpad_tap(report_mouse_t mouse_report, pinnacle_data_t touchData) {
if (touchData.touchDown != tap.touchDown) {
tap.touchDown = touchData.touchDown;
if (!touchData.zValue) {
if (timer_elapsed(tap.timer) < CIRQUE_PINNACLE_TAPPING_TERM && tap.timer != 0) {
mouse_report.buttons = pointing_device_handle_buttons(mouse_report.buttons, true, POINTING_DEVICE_BUTTON1);
pointing_device_set_report(mouse_report);
pointing_device_send();
# if TAP_CODE_DELAY > 0
wait_ms(TAP_CODE_DELAY);
# endif
mouse_report.buttons = pointing_device_handle_buttons(mouse_report.buttons, false, POINTING_DEVICE_BUTTON1);
pointing_device_set_report(mouse_report);
pointing_device_send();
}
}
tap.timer = timer_read();
}
if (timer_elapsed(tap.timer) > (CIRQUE_PINNACLE_TOUCH_DEBOUNCE)) {
tap.timer = 0;
}
return mouse_report;
}
void cirque_pinnacle_enable_tap(bool enable) {
features.tap_enable = enable;
}
#endif
#ifdef CIRQUE_PINNACLE_CIRCULAR_SCROLL_ENABLE
# if !CIRQUE_PINNACLE_POSITION_MODE
# error "Circular scroll is not supported in relative mode"
# endif
/* To set a trackpad exclusively as scroll wheel: outer_ring_pct = 100, trigger_px = 0, trigger_ang = 0 */
static circular_scroll_context_t scroll = {.config = {.outer_ring_pct = 33,
.trigger_px = 16,
.trigger_ang = 9102, /* 50 degrees */
.wheel_clicks = 18}};
static inline uint16_t atan2_16(int32_t dy, int32_t dx) {
if (dy == 0) {
if (dx >= 0) {
return 0;
} else {
return 32768;
}
}
int32_t abs_y = dy > 0 ? dy : -dy;
int16_t a;
if (dx >= 0) {
a = 8192 - (8192 * (dx - abs_y) / (dx + abs_y));
} else {
a = 24576 - (8192 * (dx + abs_y) / (abs_y - dx));
}
if (dy < 0) {
return -a; // negate if in quad III or IV
}
return a;
}
static circular_scroll_t circular_scroll(pinnacle_data_t touchData) {
circular_scroll_t report = {0, 0, false};
int8_t x, y, wheel_clicks;
uint8_t center = INT8_MAX, mag;
int16_t ang, dot, det, opposite_side, adjacent_side;
uint16_t scale = cirque_pinnacle_get_scale();
if (touchData.zValue) {
/*
* Place origin at center of trackpad, treat coordinates as vectors.
* Scale to +/-INT8_MAX; angles are independent of resolution.
*/
if (scale) {
/* Rotate coordinates into a consistent orientation */
report_mouse_t rot = {.x = (int8_t)((int32_t)touchData.xValue * INT8_MAX * 2 / scale - center), .y = (int8_t)((int32_t)touchData.yValue * INT8_MAX * 2 / scale - center)};
# if defined(SPLIT_POINTING_ENABLE) && defined(POINTING_DEVICE_COMBINED)
if (!is_keyboard_left()) {
rot = pointing_device_adjust_by_defines_right(rot);
} else
# endif
{
rot = pointing_device_adjust_by_defines(rot);
}
x = rot.x;
y = rot.y;
} else {
x = 0;
y = 0;
}
/* Check if first touch */
if (!scroll.z) {
report.suppress_touch = false;
/* Check if touch falls within outer ring */
mag = sqrt16(x * x + y * y);
if (mag * 100 / center >= 100 - scroll.config.outer_ring_pct) {
scroll.state = SCROLL_DETECTING;
scroll.x = x;
scroll.y = y;
scroll.mag = mag;
/*
* Decide scroll axis:
* Vertical if started from righ half
* Horizontal if started from left half
* Flipped for left-handed
*/
scroll.axis = x < 0;
}
} else if (scroll.state == SCROLL_DETECTING) {
report.suppress_touch = true;
/* Already detecting scroll, check movement from touchdown location */
mag = sqrt16((x - scroll.x) * (x - scroll.x) + (y - scroll.y) * (y - scroll.y));
if (mag >= scroll.config.trigger_px) {
/*
* Find angle of movement.
* 0 degrees here means movement towards center of circle
*/
dot = scroll.x * x + scroll.y * y;
det = scroll.x * y - scroll.y * x;
opposite_side = abs(det); /* Based on scalar rejection */
adjacent_side = abs(scroll.mag * scroll.mag - abs(dot)); /* Based on scalar projection */
ang = (int16_t)atan2_16(opposite_side, adjacent_side);
if (ang < scroll.config.trigger_ang) {
/* Not a scroll, release coordinates */
report.suppress_touch = false;
scroll.state = NOT_SCROLL;
} else {
/* Scroll detected */
scroll.state = SCROLL_VALID;
}
}
}
if (scroll.state == SCROLL_VALID) {
report.suppress_touch = true;
dot = scroll.x * x + scroll.y * y;
det = scroll.x * y - scroll.y * x;
ang = (int16_t)atan2_16(det, dot);
wheel_clicks = ((int32_t)ang * scroll.config.wheel_clicks) / 65536;
if (wheel_clicks >= 1 || wheel_clicks <= -1) {
if (scroll.config.left_handed) {
if (scroll.axis == 0) {
report.h = -wheel_clicks;
} else {
report.v = wheel_clicks;
}
} else {
if (scroll.axis == 0) {
report.v = -wheel_clicks;
} else {
report.h = wheel_clicks;
}
}
scroll.x = x;
scroll.y = y;
}
}
}
scroll.z = touchData.zValue;
if (!scroll.z) scroll.state = SCROLL_UNINITIALIZED;
return report;
}
void cirque_pinnacle_enable_circular_scroll(bool enable) {
features.circular_scroll_enable = enable;
}
void cirque_pinnacle_configure_circular_scroll(uint8_t outer_ring_pct, uint8_t trigger_px, uint16_t trigger_ang, uint8_t wheel_clicks, bool left_handed) {
scroll.config.outer_ring_pct = outer_ring_pct;
scroll.config.trigger_px = trigger_px;
scroll.config.trigger_ang = trigger_ang;
scroll.config.wheel_clicks = wheel_clicks;
scroll.config.left_handed = left_handed;
}
#endif
bool cirque_pinnacle_gestures(report_mouse_t* mouse_report, pinnacle_data_t touchData) {
bool suppress_mouse_update = false;
#ifdef CIRQUE_PINNACLE_CIRCULAR_SCROLL_ENABLE
# if !CIRQUE_PINNACLE_POSITION_MODE
# error "Circular scroll is not supported in relative mode"
# endif
circular_scroll_t scroll_report;
if (features.circular_scroll_enable) {
scroll_report = circular_scroll(touchData);
mouse_report->v = scroll_report.v;
mouse_report->h = scroll_report.h;
suppress_mouse_update = scroll_report.suppress_touch;
}
#endif
#if defined(CIRQUE_PINNACLE_TAP_ENABLE) && CIRQUE_PINNACLE_POSITION_MODE
if (features.tap_enable) {
*mouse_report = trackpad_tap(*mouse_report, touchData);
}
#endif
return suppress_mouse_update;
}

View File

@@ -0,0 +1,110 @@
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2022 Daniel Kao <daniel.m.kao@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "cirque_pinnacle.h"
#include "report.h"
typedef struct {
bool tap_enable;
bool circular_scroll_enable;
} cirque_pinnacle_features_t;
#if defined(CIRQUE_PINNACLE_TAP_ENABLE) && CIRQUE_PINNACLE_POSITION_MODE
# ifndef CIRQUE_PINNACLE_TAPPING_TERM
# include "action.h"
# include "action_tapping.h"
# define CIRQUE_PINNACLE_TAPPING_TERM GET_TAPPING_TERM(KC_BTN1, &(keyrecord_t){})
# endif
# ifndef CIRQUE_PINNACLE_TOUCH_DEBOUNCE
# define CIRQUE_PINNACLE_TOUCH_DEBOUNCE (CIRQUE_PINNACLE_TAPPING_TERM * 8)
# endif
typedef struct {
uint16_t timer;
bool touchDown;
} trackpad_tap_context_t;
/* Enable/disable tap gesture */
void cirque_pinnacle_enable_tap(bool enable);
#endif
#ifdef CIRQUE_PINNACLE_CIRCULAR_SCROLL_ENABLE
# if !CIRQUE_PINNACLE_POSITION_MODE
# error "Circular scroll is not supported in relative mode"
# endif
typedef enum {
SCROLL_UNINITIALIZED,
SCROLL_DETECTING,
SCROLL_VALID,
NOT_SCROLL,
} circular_scroll_status_t;
typedef struct {
int8_t v;
int8_t h;
bool suppress_touch;
} circular_scroll_t;
typedef struct {
uint8_t outer_ring_pct; /* Width of outer ring, given as a percentage of the radius */
uint8_t trigger_px; /* Amount of movement before triggering scroll validation, in pixels 0~127 */
uint16_t trigger_ang; /* Angle required to validate scroll, in radians where pi = 32768 */
uint8_t wheel_clicks; /* How many clicks to report in a circle */
bool left_handed; /* Whether scrolling should be flipped for left handed use */
} circular_scroll_config_t;
typedef struct {
circular_scroll_config_t config;
circular_scroll_status_t state;
uint8_t mag;
int8_t x;
int8_t y;
uint16_t z;
bool axis;
} circular_scroll_context_t;
/* Enable/disable circular scroll gesture */
void cirque_pinnacle_enable_circular_scroll(bool enable);
/*
* Configure circular scroll gesture.
* Trackpad can be configured to act exclusively as a scroll wheel with outer_ring_pct = 0, trigger_px = 0, trigger_ang = 0.
* @param outer_ring_pct Width of outer ring from which to begin scroll validation, given as a percentage of the radius.
* @param trigger_px Amount of movement before triggering scroll validation. Expressed in pixels, trackpad coordinates are scaled to radius of 128 pixels for circular scroll.
* @param triger_ang Angle required to validate scroll, angle smaller than this will invalidate scroll. In radians where pi = 32768, 0 means movement towards center of trackpad, 16384 means movement perpendicular to center.
* @param wheel_clicks Number of scroll wheel clicks to report in a full rotation.
* @param left_handed Whether scrolling should be flipped for left-handed use.
*/
void cirque_pinnacle_configure_circular_scroll(uint8_t outer_ring_pct, uint8_t trigger_px, uint16_t trigger_ang, uint8_t wheel_clicks, bool left_handed);
#endif
#ifdef POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
/* Implementation in pointing_device_drivers.c */
/* Enable/disable inertial cursor */
void cirque_pinnacle_enable_cursor_glide(bool enable);
/*
* Configure inertial cursor.
* @param trigger_px Movement required to trigger cursor glide, set this to non-zero if you have some amount of hover.
*/
void cirque_pinnacle_configure_cursor_glide(float trigger_px);
#endif
/* Process available gestures */
bool cirque_pinnacle_gestures(report_mouse_t* mouse_report, pinnacle_data_t touchData);

View File

@@ -19,7 +19,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, NULL, 0, CIRQUE_PINNACLE_TIMEOUT);
if (i2c_readReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, data, count, CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
#ifdef CONSOLE_ENABLE
dprintf("error right touchpad\n");
dprintf("error cirque_pinnacle i2c_readReg\n");
#endif
touchpad_init = false;
}
@@ -34,7 +34,7 @@ void RAP_Write(uint8_t address, uint8_t data) {
if (touchpad_init) {
if (i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, &data, sizeof(data), CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
#ifdef CONSOLE_ENABLE
dprintf("error right touchpad\n");
dprintf("error cirque_pinnacle i2c_writeReg\n");
#endif
touchpad_init = false;
}

View File

@@ -0,0 +1,405 @@
// Copyright (c) 2018 Cirque Corp. Restrictions apply. See: www.cirque.com/sw-license
// based on https://github.com/cirque-corp/Cirque_Pinnacle_1CA027/tree/master/Additional_Examples
// with modifications and changes for QMK
// refer to documentation: Gen2 and Gen3 (Pinnacle ASIC) at https://www.cirque.com/gen2gen3-asic-details
#pragma once
// clang-format off
#define HostReg__0 (0x00)
#define HostReg__1 (0x01)
#define HostReg__2 (0x02)
#define HostReg__3 (0x03)
#define HostReg__4 (0x04)
#define HostReg__5 (0x05)
#define HostReg__6 (0x06)
#define HostReg__7 (0x07)
#define HostReg__8 (0x08)
#define HostReg__9 (0x09)
#define HostReg__10 (0x0A)
#define HostReg__11 (0x0B)
#define HostReg__12 (0x0C)
#define HostReg__13 (0x0D)
#define HostReg__14 (0x0E)
#define HostReg__15 (0x0F)
#define HostReg__16 (0x10)
#define HostReg__17 (0x11)
#define HostReg__18 (0x12)
#define HostReg__19 (0x13)
#define HostReg__20 (0x14)
#define HostReg__21 (0x15)
#define HostReg__22 (0x16)
#define HostReg__23 (0x17)
#define HostReg__24 (0x18)
#define HostReg__25 (0x19)
#define HostReg__26 (0x1A)
#define HostReg__27 (0x1B)
#define HostReg__28 (0x1C)
#define HostReg__29 (0x1D)
#define HostReg__30 (0x1E)
#define HostReg__31 (0x1F)
// ---------------- Register Assignments -------------------------------------
/*--------------------------------------------------------------------------*\
Chip ID / Version
\*--------------------------------------------------------------------------*/
// Chip ID Register
#define HOSTREG__CHIPID HostReg__0
// Chip Version Register
#define HOSTREG__VERSION HostReg__1
/*--------------------------------------------------------------------------*\
Status Register
\*--------------------------------------------------------------------------*/
// Status 1 Register -- MUST BE HOSTREG__2
#define HOSTREG__STATUS1 HostReg__2
# define HOSTREG__STATUS1__DATA_READY 0x04
# define HOSTREG__STATUS1__COMMAND_COMPLETE 0x08
#define HOSTREG__STATUS1_DEFVAL 0x00
/*--------------------------------------------------------------------------*\
System Config Register
\*--------------------------------------------------------------------------*/
#define HOSTREG__SYSCONFIG1 HostReg__3
# define HOSTREG__SYSCONFIG1__RESET 0x01
# define HOSTREG__SYSCONFIG1__STANDBY 0x02
# define HOSTREG__SYSCONFIG1__AUTO_SLEEP 0x04
# define HOSTREG__SYSCONFIG1__TRACK_DISABLE 0x08
# define HOSTREG__SYSCONFIG1__ANYMEAS_ENABLE 0x10
# define HOSTREG__SYSCONFIG1__GPIO_CTRL_ENABLE 0x20
# define HOSTREG__SYSCONFIG1__WAKEUP_TOGGLE 0x40
# define HOSTREG__SYSCONFIG1__FORCE_WAKEUP 0x80
#define HOSTREG__SYSCONFIG1_DEFVAL 0x00
/*--------------------------------------------------------------------------*\
Feed Config Registers
\*--------------------------------------------------------------------------*/
// Feed Config Register1
#define HOSTREG__FEEDCONFIG1 HostReg__4
# define HOSTREG__FEEDCONFIG1__FEED_ENABLE 0x01
# define HOSTREG__FEEDCONFIG1__DATA_TYPE__REL0_ABS1 0x02
# define HOSTREG__FEEDCONFIG1__FILTER_DISABLE 0x04
# define HOSTREG__FEEDCONFIG1__X_AXIS_DISABLE 0x08
# define HOSTREG__FEEDCONFIG1__Y_AXIS_DISABLE 0x10
# define HOSTREG__FEEDCONFIG1__AXIS_FOR_Z__Y0_X1 0x20
# define HOSTREG__FEEDCONFIG1__X_DATA_INVERT 0x40
# define HOSTREG__FEEDCONFIG1__Y_DATA_INVERT 0x80
#define HOSTREG__FEEDCONFIG1_DEFVAL 0x00
// Feed Config Register2
#define HOSTREG__FEEDCONFIG2 HostReg__5
# define HOSTREG__FEEDCONFIG2__INTELLIMOUSE_MODE 0x01
# define HOSTREG__FEEDCONFIG2__ALL_TAP_DISABLE 0x02
# define HOSTREG__FEEDCONFIG2__SECONDARY_TAP_DISABLE 0x04
# define HOSTREG__FEEDCONFIG2__SCROLL_DISABLE 0x08
# define HOSTREG__FEEDCONFIG2__GLIDE_EXTEND_DISABLE 0x10
# define HOSTREG__FEEDCONFIG2__PALM_BEFORE_Z_ENABLE 0x20
# define HOSTREG__FEEDCONFIG2__BUTNS_46_SCROLL_5_MIDDLE 0x40
# define HOSTREG__FEEDCONFIG2__SWAP_XY_RELATIVE 0x80
#define HOSTREG__FEEDCONFIG2_DEFVAL 0x00
// Feed Config Register3
#define HOSTREG__FEEDCONFIG3 HostReg__6
# define HOSTREG__FEEDCONFIG3__BTNS_456_TO_123_IN_REL 0x01
# define HOSTREG__FEEDCONFIG3__DISABLE_CROSS_RATE_SMOOTHING 0x02
# define HOSTREG__FEEDCONFIG3__DISABLE_PALM_NERD_MEAS 0x04
# define HOSTREG__FEEDCONFIG3__DISABLE_NOISE_AVOIDANCE 0x08
# define HOSTREG__FEEDCONFIG3__DISABLE_WRAP_LOCKOUT 0x10
# define HOSTREG__FEEDCONFIG3__DISABLE_DYNAMIC_EMI_ADJUST 0x20
# define HOSTREG__FEEDCONFIG3__DISABLE_HW_EMI_DETECT 0x40
# define HOSTREG__FEEDCONFIG3__DISABLE_SW_EMI_DETECT 0x80
#define HOSTREG__FEEDCONFIG3_DEFVAL 0x00
/*--------------------------------------------------------------------------*\
Calibration Config
\*--------------------------------------------------------------------------*/
#define HOSTREG__CALCONFIG1 HostReg__7
# define HOSTREG__CALCONFIG1__CALIBRATE 0x01
# define HOSTREG__CALCONFIG1__BACKGROUND_COMP_ENABLE 0x02
# define HOSTREG__CALCONFIG1__NERD_COMP_ENABLE 0x04
# define HOSTREG__CALCONFIG1__TRACK_ERROR_COMP_ENABLE 0x08
# define HOSTREG__CALCONFIG1__TAP_COMP_ENABLE 0x10
# define HOSTREG__CALCONFIG1__PALM_ERROR_COMP_ENABLE 0x20
# define HOSTREG__CALCONFIG1__CALIBRATION_MATRIX_DISABLE 0x40
# define HOSTREG__CALCONFIG1__FORCE_PRECALIBRATION_NOISE_CHECK 0x80
#define HOSTREG__CALCONFIG1_DEFVAL (HOSTREG__CALCONFIG1__BACKGROUND_COMP_ENABLE | HOSTREG__CALCONFIG1__NERD_COMP_ENABLE | HOSTREG__CALCONFIG1__TRACK_ERROR_COMP_ENABLE | HOSTREG__CALCONFIG1__TAP_COMP_ENABLE | HOSTREG__CALCONFIG1__PALM_ERROR_COMP_ENABLE)
/*--------------------------------------------------------------------------*\
PS2 Aux Control Register
\*--------------------------------------------------------------------------*/
#define HOSTREG__PS2AUX_CTRL HostReg__8
# define HOSTREG__PS2AUX_CTRL__CMD_PASSTHRU_ENABLE 0x01
# define HOSTREG__PS2AUX_CTRL__SP_EXTENDED_MODE 0x02
# define HOSTREG__PS2AUX_CTRL__GS_DISABLE 0x04
# define HOSTREG__PS2AUX_CTRL__SP_DISABLE 0x08
# define HOSTREG__PS2AUX_CTRL__GS_COORDINATE_DISABLE 0x10
# define HOSTREG__PS2AUX_CTRL__SP_COORDINATE_DISABLE 0x20
# define HOSTREG__PS2AUX_CTRL__DISABLE_AA00_DETECT 0x40
# define HOSTREG__PS2AUX_CTRL__AUX_PRESENT 0x80
#define HOSTREG__PR2AUX_CTRL_DEFVAL 0x00
/*--------------------------------------------------------------------------*\
Sample Rate Value
\*--------------------------------------------------------------------------*/
#define HOSTREG__SAMPLERATE HostReg__9
# define HOSTREG__SAMPLERATE__10_SPS 0x0A
# define HOSTREG__SAMPLERATE__20_SPS 0x14
# define HOSTREG__SAMPLERATE__40_SPS 0x28
# define HOSTREG__SAMPLERATE__60_SPS 0x3C
# define HOSTREG__SAMPLERATE__80_SPS 0x50
# define HOSTREG__SAMPLERATE__100_SPS 0x64
# define HOSTREG__SAMPLERATE__200_SPS 0xC8 // 200sps not supported
// only for ps2 compatibility
// rate set to 100sps
#define HOSTREG__SAMPLERATE_DEFVAL HOSTREG__SAMPLERATE__100_SPS
/*--------------------------------------------------------------------------*\
Z Idle Value
\*--------------------------------------------------------------------------*/
#define HOSTREG__ZIDLE HostReg__10
#define HOSTREG__ZIDLE_DEFVAL 30 // 0x1E
/*--------------------------------------------------------------------------*\
Z Scaler Value
\*--------------------------------------------------------------------------*/
#define HOSTREG__ZSCALER HostReg__11
#define HOSTREG__ZSCALER_DEFVAL 8 // 0x08
/*--------------------------------------------------------------------------*\
Sleep Interval Value
\*--------------------------------------------------------------------------*/
#define HOSTREG__SLEEP_INTERVAL HostReg__12
#define HOSTREG__SLEEP_INTERVAL_DEFVAL 73 // 0x49
/*--------------------------------------------------------------------------*\
Sleep Delay Value
\*--------------------------------------------------------------------------*/
#define HOSTREG__SLEEP_DELAY HostReg__13
#define HOSTREG__SLEEP_DELAY_DEFVAL 39 // 0x27
/*--------------------------------------------------------------------------*\
Dynamic EMI Bad Channel Count Thresholds
\*--------------------------------------------------------------------------*/
#define HOSTREG__DYNAMIC_EMI_ADJUST_THRESHOLD HostReg__14
#define HOSTREG__DYNAMIC_EMI_ADJUST_THRESHOLD_DEFVAL 66 // 0x42
/*--------------------------------------------------------------------------*\
Packet Registers
\*--------------------------------------------------------------------------*/
#define HOSTREG__PACKETBYTE_0 HostReg__18
#define HOSTREG__PACKETBYTE_1 HostReg__19
#define HOSTREG__PACKETBYTE_2 HostReg__20
#define HOSTREG__PACKETBYTE_3 HostReg__21
#define HOSTREG__PACKETBYTE_4 HostReg__22
#define HOSTREG__PACKETBYTE_5 HostReg__23
/*--------------------------------------------------------------------------*\
Port A GPIO Control
\*--------------------------------------------------------------------------*/
#define HOSTREG__PORTA_GPIO_CTRL HostReg__24
#define HOSTREG__PORTA_GPIO_CTRL_DEFVAL 0xFF
/*--------------------------------------------------------------------------*\
Port A GPIO Data
\*--------------------------------------------------------------------------*/
#define HOSTREG__PORTA_GPIO_DATA HostReg__25
#define HOSTREG__PORTA_GPIO_DATA_DEFVAL 0x00
/*--------------------------------------------------------------------------*\
Port B GPIO Control And Data
\*--------------------------------------------------------------------------*/
#define HOSTREG__PORTB_GPIO_CTRL_DATA HostReg__26
# define HOSTREG__PORTB_GPIO_DATA__PB0 0x01
# define HOSTREG__PORTB_GPIO_DATA__PB1 0x02
# define HOSTREG__PORTB_GPIO_DATA__PB2 0x04
# define HOSTREG__PORTB_GPIO_CTRL__PB0 0x08
# define HOSTREG__PORTB_GPIO_CTRL__PB1 0x10
# define HOSTREG__PORTB_GPIO_CTRL__PB2 0x20
# define HOSTREG__PORTB_GPIO_RSVD_0 0x40
# define HOSTREG__PORTB_GPIO_READ1_WRITE0 0x80
#define HOSTREG__PORTB_GPIO_CTRL_DATA_DEFVAL (HOSTREG__PORTB_GPIO_CTRL__PB0 | HOSTREG__PORTB_GPIO_CTRL__PB1 | HOSTREG__PORTB_GPIO_CTRL__PB2)
/*--------------------------------------------------------------------------*\
Extended Register Access
\*--------------------------------------------------------------------------*/
#define HOSTREG__EXT_REG_AXS_VALUE HostReg__27
#define HOSTREG__EXT_REG_AXS_ADDR_HIGH HostReg__28
#define HOSTREG__EXT_REG_AXS_ADDR_LOW HostReg__29
#define HOSTREG__EXT_REG_AXS_CTRL HostReg__30
# define HOSTREG__EREG_AXS__READ 0x01
# define HOSTREG__EREG_AXS__WRITE 0x02
# define HOSTREG__EREG_AXS__INC_ADDR_READ 0x04
# define HOSTREG__EREG_AXS__INC_ADDR_WRITE 0x08
# define HOSTREG__EREG_AXS__RSVD_3 0x10
# define HOSTREG__EREG_AXS__RSVD_2 0x20
# define HOSTREG__EREG_AXS__RSVD_1 0x40
# define HOSTREG__EREG_AXS__RSVD_0 0x80
#define HOSTREG__EXT_REG_AXS_VALUE_DEFVAL 0x00
#define HOSTREG__EXT_REG_AXS_ADDR_HIGH_DEFVAL 0x00
#define HOSTREG__EXT_REG_AXS_ADDR_LOW_DEFVAL 0x00
#define HOSTREG__EXT_REG_AXS_CTRL_DEFVAL 0x00
/*--------------------------------------------------------------------------*\
Product ID
\*--------------------------------------------------------------------------*/
#define HOSTREG__PRODUCT_ID HostReg__31
//Some useful values
#define I2C_ADDRESS_DEFAULT 0x2A
#define FIRMWARE_ID 0x07
#define FIRMWARE_VERSION 0x9D
//Anymeas config options
//First setting is HostReg 5. This sets toggle frequency (EF) and gain.
//Gain is upper two bits (0xC0), frequency is lower 6 bits (0x3F)
#define AnyMeas_AccumBits_ElecFreq HostReg__5
# define ADCCNFG_ELEC_FREQ 0x3F /* Bit 4, 3, 2, 1, 0 */
# define ADCCNFG_EF_0 0x02 // 500,000Hz
# define ADCCNFG_EF_1 0x03 // 444,444Hz
# define ADCCNFG_EF_2 0x04 // 400,000Hz
# define ADCCNFG_EF_3 0x05 // 363,636Hz
# define ADCCNFG_EF_4 0x06 // 333,333Hz
# define ADCCNFG_EF_5 0x07 // 307,692Hz
# define ADCCNFG_EF_6 0x09 // 267,000Hz
# define ADCCNFG_EF_7 0x0B // 235,000Hz
# define ADCCNFG_ACCUMBITSSELECT 0xC0 /* Bit 7, 6 */
# define ADCCNFG_ACCBITS_17_14_0 0x00 //This is about 2x gain
# define ADCCNFG_ACCBITS_17_15_1 0x40 //This is about 1.6x gain
# define ADCCNFG_ACCBITS_17_2__80 0x80 //This is about 1.3x gain
# define ADCCNFG_ACCBITS_17_2__C0 0xC0 //This is lowest gain
//Note, all frequencies above are based on default 500ns aperture. If aperture is shorter the frequencies will be faster and if aperture is longer the frequencies will be slower.
//Next is HostReg 6. This sets the sample length. There are four possible settings to bit length. All other settings are not normally used and should be a 0.
#define AnyMeas_BitLength HostReg__6
# define ADCCTRL_BIT_LENGTH 0x03 /* Bit 1, 0 */
# define ADCCTRL_SAMPLES_32 0x00 //Note: this does not work.
# define ADCCTRL_SAMPLES_128 0x01
# define ADCCTRL_SAMPLES_256 0x02
# define ADCCTRL_SAMPLES_512 0x03
# define ADCCTRL_ENABLE 0x20 /* Bit 5 */
# define ADCCTRL_INT_FLAG 0x40 /* Bit 6 */
# define ADCCTRL_START_BUSY 0x80 /* Bit 7 */
//The smaller the sample length the faster the measurement but the lower the SNR. For high SNR requirements 512 sample length is recommended. Alternatively, multiple 128 or 256 length measurements could be averaged.
//Next is HostReg 7. This sets the sense mux. Pinnacle has 2 sense lines, Sense N and Sense P1. There is also a Sense P2 but it is not bonded out, it is only internal.
//Signal on Sense N will be inverted from signal on Sense P1. Other than sign inversion, signal strength should be the same.
#define AnyMeas_ADC_MuxControl HostReg__7
# define ADCMUXCTRL_SENSEP1GATE 0x01 //Enables Sense P1. Can be combined with Sense N input or exclusivly Sense P1 alone.
# define ADCMUXCTRL_SENSEP2GATE 0x02 //Not used.
# define ADCMUXCTRL_SENSENGATE 0x04 //Enables Sense N. Can be combined with Sense P inputs or exclusivly Sense N alone.
# define ADCMUXCTRL_REF0GATE 0x08 //This enables the RefCap0. This is a capacitor inside the chip that is roughly 0.25pF. It is also controlled with the toggle and polarity bits so those bits must be set properly as well in order to use it.
# define ADCMUXCTRL_REF1GATE 0x10 //This enables the RefCap1. This is a capacitor inside the chip that is roughly 0.5pF. It is also controlled with the toggle and polarity bits so those bits must be set properly as well in order to use it.
# define ADCMUXCTRL_OSCMEASEN 0x80 //this is a test mode for measuring the internal oscillator. It is for IC test only.
//Next is HostReg 8. This contains various ADC config settings that are not likely to be used.
#define AnyMeas_ADC_Config2 HostReg__8
# define ADCCNFG2_ADC_CLK_SELECT 0x01 /* Bit 0 */ //If 0 use the standard 8Mhz clock. If 1 use a divide by 2, 4Mhz clock. Only used if extra slow toggle frequencies are required.
# define ADCCNFG2_EMI_FLAG 0x02 /* Bit 1 */ //EMI flag threshold only used with internal FW. Not valid in anymeas mode.
# define ADCCNFG2_EMI_FLAG_THRESHOLD_0 0x04 /* Bit 2 */ //EMI flag threshold only used with internal FW. Not valid in anymeas mode.
# define ADCCNFG2_EMI_FLAG_THRESHOLD_1 0x08 /* Bit 3 */ //EMI flag threshold only used with internal FW. Not valid in anymeas mode.
# define ADCCNFG2_DSX2_EXTEND 0x10 /* Bit 4 */ //extend one signal on the receive. Could also be helpful in situations where sensor cap is extremely high.
# define ADCCNFG2_ETOGGLE_DELAY 0x20 /* Bit 5 */ //delay a bit before toggling electrodes. Could be helpful in situations where sensor cap is extremely high.
//Next is HostReg 9. This sets the aperture length. Bottom 4 bits set the aperture width
#define AnyMeas_ADC_AWidth HostReg__9
# define ADCAWIDTH_AWIDTHMASK 0x0F
# define ADCAWIDTH_APERTURE_OPEN 0x00 //does not work
# define ADCAWIDTH_APERTURE_125NS 0x01 //does not work
# define ADCAWIDTH_APERTURE_250NS 0x02
# define ADCAWIDTH_APERTURE_375NS 0x03
# define ADCAWIDTH_APERTURE_500NS 0x04
# define ADCAWIDTH_APERTURE_625NS 0x05
# define ADCAWIDTH_APERTURE_750NS 0x06
# define ADCAWIDTH_APERTURE_875NS 0x07
# define ADCAWIDTH_APERTURE_1000NS 0x08
# define ADCAWIDTH_APERTURE_1125NS 0x09
# define ADCAWIDTH_APERTURE_1250NS 0x0A
# define ADCAWIDTH_APERTURE_1375NS 0x0B
# define ADCAWIDTH_APERTURE_1500NS 0x0C
# define ADCAWIDTH_APERTURE_1625NS 0x0D
# define ADCAWIDTH_APERTURE_1750NS 0x0E
# define ADCAWIDTH_APERTURE_1875NS 0x0F
# define ADCAWIDTH_AWIDTHPLUSHALF 0x10
# define ADCAWIDTH_AOPEN 0x20
# define ADCAWIDTH_W2WAIT 0x40
//next two registers give the high and low bytes to the 16 bit address where Pinnacle will pull the measurement data. Normally these addresses are within the base 32 registers.
#define AnyMeas_pADCMeasInfoStart_High_Byte HostReg__10
#define AnyMeas_pADCMeasInfoStart_Low_Byte HostReg__11
//Next is the measurement index, this sets the measurement state machine to the start and should be a 0 at start.
#define AnyMeas_MeasIndex HostReg__12
# define ANYMEASSTATE_RESET_START 0x00
# define ANYMEASSTATE_START_MEASUREMENT 0x01
# define ANYMEASSTATE_WAIT_FOR_MEASUREMENT_AND_HOST 0x02
//next is the state itself of the measurement, should always be 0.
#define AnyMeas_State HostReg__13
//next is the number of measurements. Use 0x80 to repeat the single measurement or repeat a number of measurements.
//0x40 will turn the ADC off after measurements. This will result in longer startup time for a subsequent measurement, but lower idle power draw.
#define AnyMeas_Control_NumMeas HostReg__14
# define ANYMEAS_CONTROL__NUM_MEAS_MASK 0x3F
# define ANYMEAS_CONTROL__ADC_POST_MEAS_PWR 0x40
# define ANYMEAS_CONTROL__REPEAT 0x80
//These are not used
#define AnyMeas_pADCMeasInfo_High_Byte HostReg__15
#define AnyMeas_pADCMeasInfo_Low_Byte HostReg__16
//16 bit result of measurement will be found in these two registers.
#define AnyMeas_Result_High_Byte HostReg__17
#define AnyMeas_Result_Low_Byte HostReg__18
// ---------------- Extended Register Assignments ----------------------------
/*--------------------------------------------------------------------------*\
ADC Mux Control
\*--------------------------------------------------------------------------*/
#define EXTREG__ADCMUX_CTRL 0x00EB
# define EXTREG__ADCMUX_CTRL__SNSP_ENABLE 0x01
# define EXTREG__ADCMUX_CTRL__SNSN_ENABLE 0x04
/*--------------------------------------------------------------------------*\
Timer Reload Registers
\*--------------------------------------------------------------------------*/
#define EXTREG__PACKET_TIMER_RELOAD 0x019F
#define EXTREG__TRACK_TIMER_RELOAD 0x019E
// These two registers should have matching content.
# define EXTREG__TIMER_RELOAD__300_SPS 0x06
# define EXTREG__TIMER_RELOAD__200_SPS 0x09
# define EXTREG__TIMER_RELOAD__100_SPS 0x13
/*--------------------------------------------------------------------------*\
Track ADC Config
\*--------------------------------------------------------------------------*/
#define EXTREG__TRACK_ADCCONFIG 0x0187
// ADC-attenuation settings (held in BIT_7 and BIT_6)
// 1X = most sensitive, 4X = least sensitive
# define EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_MASK 0xC0
# define EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_1X 0x00
# define EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_2X 0x40
# define EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_3X 0x80
# define EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_4X 0xC0
#define EXTREG__TRACK_ADCCONFIG_DEFVAL 0x4E
/*--------------------------------------------------------------------------*\
Tune Edge Sensitivity
\*--------------------------------------------------------------------------*/
// These registers are not detailed in any publically available documentation
// Names inferred from debug prints in https://github.com/cirque-corp/Cirque_Pinnacle_1CA027/blob/master/Circular_Trackpad
#define EXTREG__XAXIS_WIDEZMIN 0x0149
#define EXTREG__YAXIS_WIDEZMIN 0x0168
#define EXTREG__XAXIS_WIDEZMIN_DEFVAL 0x06
#define EXTREG__YAXIS_WIDEZMIN_DEFVAL 0x05
// clang-format on

View File

@@ -25,7 +25,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
}
} else {
#ifdef CONSOLE_ENABLE
dprintf("error right touchpad\n");
dprintf("error cirque_pinnacle spi_start read\n");
#endif
touchpad_init = false;
}
@@ -43,7 +43,7 @@ void RAP_Write(uint8_t address, uint8_t data) {
spi_write(data);
} else {
#ifdef CONSOLE_ENABLE
dprintf("error right touchpad\n");
dprintf("error cirque_pinnacle spi_start write\n");
#endif
touchpad_init = false;
}

172
drivers/sensors/paw3204.c Normal file
View File

@@ -0,0 +1,172 @@
/* Copyright 2021 Gompa (@Gompa)
*
* 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/>.
*/
// https://github.com/shinoaliceKabocha/choco60_track/tree/master/keymaps/default
#include "paw3204.h"
#include "wait.h"
#include "debug.h"
#include "gpio.h"
#define REG_PID1 0x00
#define REG_PID2 0x01
#define REG_STAT 0x02
#define REG_X 0x03
#define REG_Y 0x04
#define REG_SETUP 0x06
#define REG_IMGQUAL 0x07
#define REG_IMGREC 0x0E
#define REG_IMGTRASH 0x0D
#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
// CPI values
enum cpi_values {
CPI400, // 0b000
CPI500, // 0b001
CPI600, // 0b010
CPI800, // 0b011
CPI1000, // 0b100
CPI1200, // 0b101
CPI1600, // 0b110
};
uint8_t paw3204_serial_read(void);
void paw3204_serial_write(uint8_t reg_addr);
uint8_t paw3204_read_reg(uint8_t reg_addr);
void paw3204_write_reg(uint8_t reg_addr, uint8_t data);
void paw3204_init(void) {
setPinOutput(PAW3204_SCLK_PIN); // setclockpin to output
setPinInputHigh(PAW3204_SDIO_PIN); // set datapin input high
paw3204_write_reg(REG_SETUP, 0x86); // reset sensor and set 1600cpi
wait_us(5);
paw3204_read_reg(0x00); // read id
paw3204_read_reg(0x01); // read id2
// PAW3204_write_reg(REG_SETUP,0x06); // dont reset sensor and set cpi 1600
paw3204_write_reg(REG_IMGTRASH, 0x32); // write image trashhold
}
uint8_t paw3204_serial_read(void) {
setPinInput(PAW3204_SDIO_PIN);
uint8_t byte = 0;
for (uint8_t i = 0; i < 8; ++i) {
writePinLow(PAW3204_SCLK_PIN);
wait_us(1);
byte = (byte << 1) | readPin(PAW3204_SDIO_PIN);
writePinHigh(PAW3204_SCLK_PIN);
wait_us(1);
}
return byte;
}
void paw3204_serial_write(uint8_t data) {
writePinLow(PAW3204_SDIO_PIN);
setPinOutput(PAW3204_SDIO_PIN);
for (int8_t b = 7; b >= 0; b--) {
writePinLow(PAW3204_SCLK_PIN);
if (data & (1 << b)) {
writePinHigh(PAW3204_SDIO_PIN);
} else {
writePinLow(PAW3204_SDIO_PIN);
}
writePinHigh(PAW3204_SCLK_PIN);
}
wait_us(4);
}
report_paw3204_t paw3204_read(void) {
report_paw3204_t data = {0};
data.isMotion = paw3204_read_reg(REG_STAT) & (1 << 7); // check for motion only (bit 7 in field)
data.x = (int8_t)paw3204_read_reg(REG_X);
data.y = (int8_t)paw3204_read_reg(REG_Y);
return data;
}
void paw3204_write_reg(uint8_t reg_addr, uint8_t data) {
paw3204_serial_write(0b10000000 | reg_addr);
paw3204_serial_write(data);
}
uint8_t paw3204_read_reg(uint8_t reg_addr) {
paw3204_serial_write(reg_addr);
wait_us(5);
return paw3204_serial_read();
}
void paw3204_set_cpi(uint16_t cpi) {
uint8_t cpival = CPI1000;
if (cpi <= 450) {
cpival = CPI400;
} else if (cpi <= 550) {
cpival = CPI500;
} else if (cpi <= 700) {
cpival = CPI600;
} else if (cpi <= 900) {
cpival = CPI800;
} else if (cpi <= 1100) {
cpival = CPI1000;
} else if (cpi <= 1400) {
cpival = CPI1200;
} else if (cpi > 1400) {
cpival = CPI1600;
}
paw3204_write_reg(REG_SETUP, cpival);
}
uint16_t paw3204_get_cpi(void) {
uint16_t cpival = 1000;
switch (paw3204_read_reg(REG_SETUP) & 0b111) {
case CPI400:
cpival = 400;
break;
case CPI500:
cpival = 500;
break;
case CPI600:
cpival = 600;
break;
case CPI800:
cpival = 800;
break;
case CPI1000:
cpival = 1000;
break;
case CPI1200:
cpival = 1200;
break;
case CPI1600:
cpival = 1600;
break;
}
return cpival;
}
uint8_t read_pid_paw3204(void) {
return paw3204_read_reg(REG_PID1);
}

76
drivers/sensors/paw3204.h Normal file
View File

@@ -0,0 +1,76 @@
/* Copyright 2021 Gompa (@Gompa)
*
* 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>
#ifndef PAW3204_SCLK_PIN
# ifdef POINTING_DEVICE_SCLK_PIN
# define PAW3204_SCLK_PIN POINTING_DEVICE_SCLK_PIN
# else
# error "No clock pin defined -- missing POINTING_DEVICE_SCLK_PIN or PAW3204_SCLK_PIN"
# endif
#endif
#ifndef PAW3204_SDIO_PIN
# ifdef POINTING_DEVICE_SDIO_PIN
# define PAW3204_SDIO_PIN POINTING_DEVICE_SDIO_PIN
# else
# error "No data pin defined -- missing POINTING_DEVICE_SDIO_PIN or PAW3204_SDIO_PIN"
# endif
#endif
typedef struct {
int16_t x;
int16_t y;
bool isMotion;
} report_paw3204_t;
/**
* @brief Initializes the sensor so it is in a working state and ready to
* be polled for data.
*
* @return true Initialization was a success
* @return false Initialization failed, do not proceed operation
*/
void paw3204_init(void);
/**
* @brief Reads and clears the current delta, and motion register values on the
* given sensor.
*
* @return pmw33xx_report_t Current values of the sensor, if errors occurred all
* fields are set to zero
*/
report_paw3204_t paw3204_read(void);
/**
* @brief Sets the given CPI value the sensor. CPI is often refereed to
* as the sensors sensitivity. Values outside of the allowed range are
* constrained into legal values.
*
* @param cpi CPI value to set
*/
void paw3204_set_cpi(uint16_t cpi);
/**
* @brief Gets the currently set CPI value from the sensor. CPI is often
* refereed to as the sensors sensitivity.
*
* @return uint16_t Current CPI value of the sensor
*/
uint16_t paw3204_get_cpi(void);

View File

@@ -95,16 +95,3 @@ int16_t pimoroni_trackball_get_offsets(uint8_t negative_dir, uint8_t positive_di
uint16_t magnitude = (scale * offset * offset * precision) >> 7;
return isnegative ? -(int16_t)(magnitude) : (int16_t)(magnitude);
}
void pimoroni_trackball_adapt_values(int8_t* mouse, int16_t* offset) {
if (*offset > 127) {
*mouse = 127;
*offset -= 127;
} else if (*offset < -127) {
*mouse = -127;
*offset += 127;
} else {
*mouse = *offset;
*offset = 0;
}
}

View File

@@ -52,7 +52,6 @@ typedef struct {
void pimoroni_trackball_device_init(void);
void pimoroni_trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white);
int16_t pimoroni_trackball_get_offsets(uint8_t negative_dir, uint8_t positive_dir, uint8_t scale);
void pimoroni_trackball_adapt_values(int8_t* mouse, int16_t* offset);
uint16_t pimoroni_trackball_get_cpi(void);
void pimoroni_trackball_set_cpi(uint16_t cpi);
i2c_status_t read_pimoroni_trackball(pimoroni_data_t* data);

View File

@@ -1,291 +1,294 @@
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2019 Sunjun Kim
* Copyright 2020 Ploopy Corporation
* Copyright 2022 Ulrich Spörlein
*
* 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/>.
*/
// Copyright 2022 Stefan Kerkmann (KarlK90)
// Copyright 2022 Ulrich Spörlein (@uqs)
// Copyright 2021 Alabastard (@Alabastard-64)
// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
// Copyright 2019 Sunjun Kim
// Copyright 2020 Ploopy Corporation
// SPDX-License-Identifier: GPL-2.0-or-later
#include "spi_master.h"
#include "pmw3360.h"
#include "wait.h"
#include "debug.h"
#include "print.h"
#include "pmw3360_firmware.h"
#include "pmw33xx_common.h"
#include "progmem.h"
// Registers
extern const size_t pmw33xx_number_of_sensors;
uint16_t pmw33xx_get_cpi(uint8_t sensor) {
if (sensor >= pmw33xx_number_of_sensors) {
return 0;
}
uint8_t cpival = pmw33xx_read(sensor, REG_Config1);
return (uint16_t)((cpival + 1) & 0xFF) * PMW33XX_CPI_STEP;
}
void pmw33xx_set_cpi(uint8_t sensor, uint16_t cpi) {
if (sensor >= pmw33xx_number_of_sensors) {
return;
}
uint8_t cpival = CONSTRAIN((cpi / PMW33XX_CPI_STEP) - 1, 0, (PMW33XX_CPI_MAX / PMW33XX_CPI_STEP) - 1U);
pmw33xx_write(sensor, REG_Config1, cpival);
}
// PID, Inverse PID, SROM version
const uint8_t pmw33xx_firmware_signature[3] PROGMEM = {0x42, 0xBD, 0x04};
// Firmware Blob for PMW3360
// clang-format off
#define REG_Product_ID 0x00
#define REG_Revision_ID 0x01
#define REG_Motion 0x02
#define REG_Delta_X_L 0x03
#define REG_Delta_X_H 0x04
#define REG_Delta_Y_L 0x05
#define REG_Delta_Y_H 0x06
#define REG_SQUAL 0x07
#define REG_Raw_Data_Sum 0x08
#define REG_Maximum_Raw_data 0x09
#define REG_Minimum_Raw_data 0x0a
#define REG_Shutter_Lower 0x0b
#define REG_Shutter_Upper 0x0c
#define REG_Control 0x0d
#define REG_Config1 0x0f
#define REG_Config2 0x10
#define REG_Angle_Tune 0x11
#define REG_Frame_Capture 0x12
#define REG_SROM_Enable 0x13
#define REG_Run_Downshift 0x14
#define REG_Rest1_Rate_Lower 0x15
#define REG_Rest1_Rate_Upper 0x16
#define REG_Rest1_Downshift 0x17
#define REG_Rest2_Rate_Lower 0x18
#define REG_Rest2_Rate_Upper 0x19
#define REG_Rest2_Downshift 0x1a
#define REG_Rest3_Rate_Lower 0x1b
#define REG_Rest3_Rate_Upper 0x1c
#define REG_Observation 0x24
#define REG_Data_Out_Lower 0x25
#define REG_Data_Out_Upper 0x26
#define REG_Raw_Data_Dump 0x29
#define REG_SROM_ID 0x2a
#define REG_Min_SQ_Run 0x2b
#define REG_Raw_Data_Threshold 0x2c
#define REG_Config5 0x2f
#define REG_Power_Up_Reset 0x3a
#define REG_Shutdown 0x3b
#define REG_Inverse_Product_ID 0x3f
#define REG_LiftCutoff_Tune3 0x41
#define REG_Angle_Snap 0x42
#define REG_LiftCutoff_Tune1 0x4a
#define REG_Motion_Burst 0x50
#define REG_LiftCutoff_Tune_Timeout 0x58
#define REG_LiftCutoff_Tune_Min_Length 0x5a
#define REG_SROM_Load_Burst 0x62
#define REG_Lift_Config 0x63
#define REG_Raw_Data_Burst 0x64
#define REG_LiftCutoff_Tune2 0x65
#define CPI_STEP 100
// clang-format on
// limits to 0--119, resulting in a CPI range of 100 -- 12000 (as only steps of 100 are possible).
#ifndef MAX_CPI
# define MAX_CPI 0x77
#endif
static const pin_t pins[] = PMW3360_CS_PINS;
#define NUMBER_OF_SENSORS (sizeof(pins) / sizeof(pin_t))
// per-sensor driver state
static bool _inBurst[NUMBER_OF_SENSORS] = {0};
#ifdef CONSOLE_ENABLE
void print_byte(uint8_t byte) {
dprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0'));
}
#endif
#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
bool pmw3360_spi_start(int8_t index) {
bool status = spi_start(pins[index], PMW3360_SPI_LSBFIRST, PMW3360_SPI_MODE, PMW3360_SPI_DIVISOR);
// tNCS-SCLK, 120ns
wait_us(1);
return status;
}
spi_status_t pmw3360_write(int8_t index, uint8_t reg_addr, uint8_t data) {
pmw3360_spi_start(index);
if (reg_addr != REG_Motion_Burst) {
_inBurst[index] = false;
}
// send address of the register, with MSBit = 1 to indicate it's a write
spi_status_t status = spi_write(reg_addr | 0x80);
status = spi_write(data);
// tSCLK-NCS for write operation is 35us
wait_us(35);
spi_stop();
// tSWW/tSWR (=180us) minus tSCLK-NCS. Could be shortened, but it looks like a safe lower bound
wait_us(145);
return status;
}
uint8_t pmw3360_read(int8_t index, uint8_t reg_addr) {
pmw3360_spi_start(index);
// send adress of the register, with MSBit = 0 to indicate it's a read
spi_write(reg_addr & 0x7f);
// tSRAD (=160us)
wait_us(160);
uint8_t data = spi_read();
// tSCLK-NCS for read operation is 120ns
wait_us(1);
spi_stop();
// tSRW/tSRR (=20us) minus tSCLK-NCS
wait_us(19);
return data;
}
bool pmw3360_check_signature(int8_t index) {
uint8_t pid = pmw3360_read(index, REG_Product_ID);
uint8_t iv_pid = pmw3360_read(index, REG_Inverse_Product_ID);
uint8_t SROM_ver = pmw3360_read(index, REG_SROM_ID);
return (pid == firmware_signature[0] && iv_pid == firmware_signature[1] && SROM_ver == firmware_signature[2]); // signature for SROM 0x04
}
void pmw3360_upload_firmware(int8_t index) {
// Datasheet claims we need to disable REST mode first, but during startup
// it's already disabled and we're not turning it on ...
// pmw3360_write(index, REG_Config2, 0x00); // disable REST mode
pmw3360_write(index, REG_SROM_Enable, 0x1d);
wait_ms(10);
pmw3360_write(index, REG_SROM_Enable, 0x18);
pmw3360_spi_start(index);
spi_write(REG_SROM_Load_Burst | 0x80);
wait_us(15);
for (uint16_t i = 0; i < FIRMWARE_LENGTH; i++) {
spi_write(pgm_read_byte(firmware_data + i));
#ifndef PMW3360_FIRMWARE_UPLOAD_FAST
wait_us(15);
#endif
}
wait_us(200);
pmw3360_read(index, REG_SROM_ID);
pmw3360_write(index, REG_Config2, 0x00);
}
bool pmw3360_init(int8_t index) {
if (index >= NUMBER_OF_SENSORS) {
return false;
}
spi_init();
// power up, need to first drive NCS high then low.
// the datasheet does not say for how long, 40us works well in practice.
pmw3360_spi_start(index);
wait_us(40);
spi_stop();
wait_us(40);
pmw3360_write(index, REG_Power_Up_Reset, 0x5a);
wait_ms(50);
// read registers and discard
pmw3360_read(index, REG_Motion);
pmw3360_read(index, REG_Delta_X_L);
pmw3360_read(index, REG_Delta_X_H);
pmw3360_read(index, REG_Delta_Y_L);
pmw3360_read(index, REG_Delta_Y_H);
pmw3360_upload_firmware(index);
spi_stop();
wait_ms(10);
pmw3360_set_cpi(PMW3360_CPI);
wait_ms(1);
pmw3360_write(index, REG_Config2, 0x00);
pmw3360_write(index, REG_Angle_Tune, constrain(ROTATIONAL_TRANSFORM_ANGLE, -127, 127));
pmw3360_write(index, REG_Lift_Config, PMW3360_LIFTOFF_DISTANCE);
bool init_success = pmw3360_check_signature(index);
#ifdef CONSOLE_ENABLE
if (init_success) {
dprintf("pmw3360 signature verified");
} else {
dprintf("pmw3360 signature verification failed!");
}
#endif
return init_success;
}
// Only support reading the value from sensor #0, no one is using this anyway.
uint16_t pmw3360_get_cpi(void) {
uint8_t cpival = pmw3360_read(0, REG_Config1);
return (uint16_t)((cpival + 1) & 0xFF) * CPI_STEP;
}
// Write same CPI to all sensors.
void pmw3360_set_cpi(uint16_t cpi) {
uint8_t cpival = constrain((cpi / CPI_STEP) - 1, 0, MAX_CPI);
for (size_t i = 0; i < NUMBER_OF_SENSORS; i++) {
pmw3360_write(i, REG_Config1, cpival);
}
}
report_pmw3360_t pmw3360_read_burst(int8_t index) {
report_pmw3360_t report = {0};
if (index >= NUMBER_OF_SENSORS) {
return report;
}
if (!_inBurst[index]) {
#ifdef CONSOLE_ENABLE
dprintf("burst on for index %d", index);
#endif
pmw3360_write(index, REG_Motion_Burst, 0x00);
_inBurst[index] = true;
}
pmw3360_spi_start(index);
spi_write(REG_Motion_Burst);
wait_us(35); // waits for tSRAD_MOTBR
report.motion = spi_read();
spi_read(); // skip Observation
// delta registers
report.dx = spi_read();
report.mdx = spi_read();
report.dy = spi_read();
report.mdy = spi_read();
if (report.motion & 0b111) { // panic recovery, sometimes burst mode works weird.
_inBurst[index] = false;
}
spi_stop();
#ifdef CONSOLE_ENABLE
if (debug_mouse) {
print_byte(report.motion);
print_byte(report.dx);
print_byte(report.mdx);
print_byte(report.dy);
print_byte(report.mdy);
dprintf("\n");
}
#endif
report.isMotion = (report.motion & 0x80) != 0;
report.isOnSurface = (report.motion & 0x08) == 0;
report.dx |= (report.mdx << 8);
report.dx = report.dx * -1;
report.dy |= (report.mdy << 8);
report.dy = report.dy * -1;
return report;
}
const uint8_t pmw33xx_firmware_data[PMW33XX_FIRMWARE_LENGTH] PROGMEM = {
0x01, 0x04, 0x8E, 0x96, 0x6E, 0x77, 0x3E, 0xFE, 0x7E, 0x5F, 0x1D, 0xB8, 0xF2, 0x66, 0x4E, 0xFF,
0x5D, 0x19, 0xB0, 0xC2, 0x04, 0x69, 0x54, 0x2A, 0xD6, 0x2E, 0xBF, 0xDD, 0x19, 0xB0, 0xC3, 0xE5,
0x29, 0xB1, 0xE0, 0x23, 0xA5, 0xA9, 0xB1, 0xC1, 0x00, 0x82, 0x67, 0x4C, 0x1A, 0x97, 0x8D, 0x79,
0x51, 0x20, 0xC7, 0x06, 0x8E, 0x7C, 0x7C, 0x7A, 0x76, 0x4F, 0xFD, 0x59, 0x30, 0xE2, 0x46, 0x0E,
0x9E, 0xBE, 0xDF, 0x1D, 0x99, 0x91, 0xA0, 0xA5, 0xA1, 0xA9, 0xD0, 0x22, 0xC6, 0xEF, 0x5C, 0x1B,
0x95, 0x89, 0x90, 0xA2, 0xA7, 0xCC, 0xFB, 0x55, 0x28, 0xB3, 0xE4, 0x4A, 0xF7, 0x6C, 0x3B, 0xF4,
0x6A, 0x56, 0x2E, 0xDE, 0x1F, 0x9D, 0xB8, 0xD3, 0x05, 0x88, 0x92, 0xA6, 0xCE, 0x1E, 0xBE, 0xDF,
0x1D, 0x99, 0xB0, 0xE2, 0x46, 0xEF, 0x5C, 0x07, 0x11, 0x5D, 0x98, 0x0B, 0x9D, 0x94, 0x97, 0xEE,
0x4E, 0x45, 0x33, 0x6B, 0x44, 0xC7, 0x29, 0x56, 0x27, 0x30, 0xC6, 0xA7, 0xD5, 0xF2, 0x56, 0xDF,
0xB4, 0x38, 0x62, 0xCB, 0xA0, 0xB6, 0xE3, 0x0F, 0x84, 0x06, 0x24, 0x05, 0x65, 0x6F, 0x76, 0x89,
0xB5, 0x77, 0x41, 0x27, 0x82, 0x66, 0x65, 0x82, 0xCC, 0xD5, 0xE6, 0x20, 0xD5, 0x27, 0x17, 0xC5,
0xF8, 0x03, 0x23, 0x7C, 0x5F, 0x64, 0xA5, 0x1D, 0xC1, 0xD6, 0x36, 0xCB, 0x4C, 0xD4, 0xDB, 0x66,
0xD7, 0x8B, 0xB1, 0x99, 0x7E, 0x6F, 0x4C, 0x36, 0x40, 0x06, 0xD6, 0xEB, 0xD7, 0xA2, 0xE4, 0xF4,
0x95, 0x51, 0x5A, 0x54, 0x96, 0xD5, 0x53, 0x44, 0xD7, 0x8C, 0xE0, 0xB9, 0x40, 0x68, 0xD2, 0x18,
0xE9, 0xDD, 0x9A, 0x23, 0x92, 0x48, 0xEE, 0x7F, 0x43, 0xAF, 0xEA, 0x77, 0x38, 0x84, 0x8C, 0x0A,
0x72, 0xAF, 0x69, 0xF8, 0xDD, 0xF1, 0x24, 0x83, 0xA3, 0xF8, 0x4A, 0xBF, 0xF5, 0x94, 0x13, 0xDB,
0xBB, 0xD8, 0xB4, 0xB3, 0xA0, 0xFB, 0x45, 0x50, 0x60, 0x30, 0x59, 0x12, 0x31, 0x71, 0xA2, 0xD3,
0x13, 0xE7, 0xFA, 0xE7, 0xCE, 0x0F, 0x63, 0x15, 0x0B, 0x6B, 0x94, 0xBB, 0x37, 0x83, 0x26, 0x05,
0x9D, 0xFB, 0x46, 0x92, 0xFC, 0x0A, 0x15, 0xD1, 0x0D, 0x73, 0x92, 0xD6, 0x8C, 0x1B, 0x8C, 0xB8,
0x55, 0x8A, 0xCE, 0xBD, 0xFE, 0x8E, 0xFC, 0xED, 0x09, 0x12, 0x83, 0x91, 0x82, 0x51, 0x31, 0x23,
0xFB, 0xB4, 0x0C, 0x76, 0xAD, 0x7C, 0xD9, 0xB4, 0x4B, 0xB2, 0x67, 0x14, 0x09, 0x9C, 0x7F, 0x0C,
0x18, 0xBA, 0x3B, 0xD6, 0x8E, 0x14, 0x2A, 0xE4, 0x1B, 0x52, 0x9F, 0x2B, 0x7D, 0xE1, 0xFB, 0x6A,
0x33, 0x02, 0xFA, 0xAC, 0x5A, 0xF2, 0x3E, 0x88, 0x7E, 0xAE, 0xD1, 0xF3, 0x78, 0xE8, 0x05, 0xD1,
0xE3, 0xDC, 0x21, 0xF6, 0xE1, 0x9A, 0xBD, 0x17, 0x0E, 0xD9, 0x46, 0x9B, 0x88, 0x03, 0xEA, 0xF6,
0x66, 0xBE, 0x0E, 0x1B, 0x50, 0x49, 0x96, 0x40, 0x97, 0xF1, 0xF1, 0xE4, 0x80, 0xA6, 0x6E, 0xE8,
0x77, 0x34, 0xBF, 0x29, 0x40, 0x44, 0xC2, 0xFF, 0x4E, 0x98, 0xD3, 0x9C, 0xA3, 0x32, 0x2B, 0x76,
0x51, 0x04, 0x09, 0xE7, 0xA9, 0xD1, 0xA6, 0x32, 0xB1, 0x23, 0x53, 0xE2, 0x47, 0xAB, 0xD6, 0xF5,
0x69, 0x5C, 0x3E, 0x5F, 0xFA, 0xAE, 0x45, 0x20, 0xE5, 0xD2, 0x44, 0xFF, 0x39, 0x32, 0x6D, 0xFD,
0x27, 0x57, 0x5C, 0xFD, 0xF0, 0xDE, 0xC1, 0xB5, 0x99, 0xE5, 0xF5, 0x1C, 0x77, 0x01, 0x75, 0xC5,
0x6D, 0x58, 0x92, 0xF2, 0xB2, 0x47, 0x00, 0x01, 0x26, 0x96, 0x7A, 0x30, 0xFF, 0xB7, 0xF0, 0xEF,
0x77, 0xC1, 0x8A, 0x5D, 0xDC, 0xC0, 0xD1, 0x29, 0x30, 0x1E, 0x77, 0x38, 0x7A, 0x94, 0xF1, 0xB8,
0x7A, 0x7E, 0xEF, 0xA4, 0xD1, 0xAC, 0x31, 0x4A, 0xF2, 0x5D, 0x64, 0x3D, 0xB2, 0xE2, 0xF0, 0x08,
0x99, 0xFC, 0x70, 0xEE, 0x24, 0xA7, 0x7E, 0xEE, 0x1E, 0x20, 0x69, 0x7D, 0x44, 0xBF, 0x87, 0x42,
0xDF, 0x88, 0x3B, 0x0C, 0xDA, 0x42, 0xC9, 0x04, 0xF9, 0x45, 0x50, 0xFC, 0x83, 0x8F, 0x11, 0x6A,
0x72, 0xBC, 0x99, 0x95, 0xF0, 0xAC, 0x3D, 0xA7, 0x3B, 0xCD, 0x1C, 0xE2, 0x88, 0x79, 0x37, 0x11,
0x5F, 0x39, 0x89, 0x95, 0x0A, 0x16, 0x84, 0x7A, 0xF6, 0x8A, 0xA4, 0x28, 0xE4, 0xED, 0x83, 0x80,
0x3B, 0xB1, 0x23, 0xA5, 0x03, 0x10, 0xF4, 0x66, 0xEA, 0xBB, 0x0C, 0x0F, 0xC5, 0xEC, 0x6C, 0x69,
0xC5, 0xD3, 0x24, 0xAB, 0xD4, 0x2A, 0xB7, 0x99, 0x88, 0x76, 0x08, 0xA0, 0xA8, 0x95, 0x7C, 0xD8,
0x38, 0x6D, 0xCD, 0x59, 0x02, 0x51, 0x4B, 0xF1, 0xB5, 0x2B, 0x50, 0xE3, 0xB6, 0xBD, 0xD0, 0x72,
0xCF, 0x9E, 0xFD, 0x6E, 0xBB, 0x44, 0xC8, 0x24, 0x8A, 0x77, 0x18, 0x8A, 0x13, 0x06, 0xEF, 0x97,
0x7D, 0xFA, 0x81, 0xF0, 0x31, 0xE6, 0xFA, 0x77, 0xED, 0x31, 0x06, 0x31, 0x5B, 0x54, 0x8A, 0x9F,
0x30, 0x68, 0xDB, 0xE2, 0x40, 0xF8, 0x4E, 0x73, 0xFA, 0xAB, 0x74, 0x8B, 0x10, 0x58, 0x13, 0xDC,
0xD2, 0xE6, 0x78, 0xD1, 0x32, 0x2E, 0x8A, 0x9F, 0x2C, 0x58, 0x06, 0x48, 0x27, 0xC5, 0xA9, 0x5E,
0x81, 0x47, 0x89, 0x46, 0x21, 0x91, 0x03, 0x70, 0xA4, 0x3E, 0x88, 0x9C, 0xDA, 0x33, 0x0A, 0xCE,
0xBC, 0x8B, 0x8E, 0xCF, 0x9F, 0xD3, 0x71, 0x80, 0x43, 0xCF, 0x6B, 0xA9, 0x51, 0x83, 0x76, 0x30,
0x82, 0xC5, 0x6A, 0x85, 0x39, 0x11, 0x50, 0x1A, 0x82, 0xDC, 0x1E, 0x1C, 0xD5, 0x7D, 0xA9, 0x71,
0x99, 0x33, 0x47, 0x19, 0x97, 0xB3, 0x5A, 0xB1, 0xDF, 0xED, 0xA4, 0xF2, 0xE6, 0x26, 0x84, 0xA2,
0x28, 0x9A, 0x9E, 0xDF, 0xA6, 0x6A, 0xF4, 0xD6, 0xFC, 0x2E, 0x5B, 0x9D, 0x1A, 0x2A, 0x27, 0x68,
0xFB, 0xC1, 0x83, 0x21, 0x4B, 0x90, 0xE0, 0x36, 0xDD, 0x5B, 0x31, 0x42, 0x55, 0xA0, 0x13, 0xF7,
0xD0, 0x89, 0x53, 0x71, 0x99, 0x57, 0x09, 0x29, 0xC5, 0xF3, 0x21, 0xF8, 0x37, 0x2F, 0x40, 0xF3,
0xD4, 0xAF, 0x16, 0x08, 0x36, 0x02, 0xFC, 0x77, 0xC5, 0x8B, 0x04, 0x90, 0x56, 0xB9, 0xC9, 0x67,
0x9A, 0x99, 0xE8, 0x00, 0xD3, 0x86, 0xFF, 0x97, 0x2D, 0x08, 0xE9, 0xB7, 0xB3, 0x91, 0xBC, 0xDF,
0x45, 0xC6, 0xED, 0x0F, 0x8C, 0x4C, 0x1E, 0xE6, 0x5B, 0x6E, 0x38, 0x30, 0xE4, 0xAA, 0xE3, 0x95,
0xDE, 0xB9, 0xE4, 0x9A, 0xF5, 0xB2, 0x55, 0x9A, 0x87, 0x9B, 0xF6, 0x6A, 0xB2, 0xF2, 0x77, 0x9A,
0x31, 0xF4, 0x7A, 0x31, 0xD1, 0x1D, 0x04, 0xC0, 0x7C, 0x32, 0xA2, 0x9E, 0x9A, 0xF5, 0x62, 0xF8,
0x27, 0x8D, 0xBF, 0x51, 0xFF, 0xD3, 0xDF, 0x64, 0x37, 0x3F, 0x2A, 0x6F, 0x76, 0x3A, 0x7D, 0x77,
0x06, 0x9E, 0x77, 0x7F, 0x5E, 0xEB, 0x32, 0x51, 0xF9, 0x16, 0x66, 0x9A, 0x09, 0xF3, 0xB0, 0x08,
0xA4, 0x70, 0x96, 0x46, 0x30, 0xFF, 0xDA, 0x4F, 0xE9, 0x1B, 0xED, 0x8D, 0xF8, 0x74, 0x1F, 0x31,
0x92, 0xB3, 0x73, 0x17, 0x36, 0xDB, 0x91, 0x30, 0xD6, 0x88, 0x55, 0x6B, 0x34, 0x77, 0x87, 0x7A,
0xE7, 0xEE, 0x06, 0xC6, 0x1C, 0x8C, 0x19, 0x0C, 0x48, 0x46, 0x23, 0x5E, 0x9C, 0x07, 0x5C, 0xBF,
0xB4, 0x7E, 0xD6, 0x4F, 0x74, 0x9C, 0xE2, 0xC5, 0x50, 0x8B, 0xC5, 0x8B, 0x15, 0x90, 0x60, 0x62,
0x57, 0x29, 0xD0, 0x13, 0x43, 0xA1, 0x80, 0x88, 0x91, 0x00, 0x44, 0xC7, 0x4D, 0x19, 0x86, 0xCC,
0x2F, 0x2A, 0x75, 0x5A, 0xFC, 0xEB, 0x97, 0x2A, 0x70, 0xE3, 0x78, 0xD8, 0x91, 0xB0, 0x4F, 0x99,
0x07, 0xA3, 0x95, 0xEA, 0x24, 0x21, 0xD5, 0xDE, 0x51, 0x20, 0x93, 0x27, 0x0A, 0x30, 0x73, 0xA8,
0xFF, 0x8A, 0x97, 0xE9, 0xA7, 0x6A, 0x8E, 0x0D, 0xE8, 0xF0, 0xDF, 0xEC, 0xEA, 0xB4, 0x6C, 0x1D,
0x39, 0x2A, 0x62, 0x2D, 0x3D, 0x5A, 0x8B, 0x65, 0xF8, 0x90, 0x05, 0x2E, 0x7E, 0x91, 0x2C, 0x78,
0xEF, 0x8E, 0x7A, 0xC1, 0x2F, 0xAC, 0x78, 0xEE, 0xAF, 0x28, 0x45, 0x06, 0x4C, 0x26, 0xAF, 0x3B,
0xA2, 0xDB, 0xA3, 0x93, 0x06, 0xB5, 0x3C, 0xA5, 0xD8, 0xEE, 0x8F, 0xAF, 0x25, 0xCC, 0x3F, 0x85,
0x68, 0x48, 0xA9, 0x62, 0xCC, 0x97, 0x8F, 0x7F, 0x2A, 0xEA, 0xE0, 0x15, 0x0A, 0xAD, 0x62, 0x07,
0xBD, 0x45, 0xF8, 0x41, 0xD8, 0x36, 0xCB, 0x4C, 0xDB, 0x6E, 0xE6, 0x3A, 0xE7, 0xDA, 0x15, 0xE9,
0x29, 0x1E, 0x12, 0x10, 0xA0, 0x14, 0x2C, 0x0E, 0x3D, 0xF4, 0xBF, 0x39, 0x41, 0x92, 0x75, 0x0B,
0x25, 0x7B, 0xA3, 0xCE, 0x39, 0x9C, 0x15, 0x64, 0xC8, 0xFA, 0x3D, 0xEF, 0x73, 0x27, 0xFE, 0x26,
0x2E, 0xCE, 0xDA, 0x6E, 0xFD, 0x71, 0x8E, 0xDD, 0xFE, 0x76, 0xEE, 0xDC, 0x12, 0x5C, 0x02, 0xC5,
0x3A, 0x4E, 0x4E, 0x4F, 0xBF, 0xCA, 0x40, 0x15, 0xC7, 0x6E, 0x8D, 0x41, 0xF1, 0x10, 0xE0, 0x4F,
0x7E, 0x97, 0x7F, 0x1C, 0xAE, 0x47, 0x8E, 0x6B, 0xB1, 0x25, 0x31, 0xB0, 0x73, 0xC7, 0x1B, 0x97,
0x79, 0xF9, 0x80, 0xD3, 0x66, 0x22, 0x30, 0x07, 0x74, 0x1E, 0xE4, 0xD0, 0x80, 0x21, 0xD6, 0xEE,
0x6B, 0x6C, 0x4F, 0xBF, 0xF5, 0xB7, 0xD9, 0x09, 0x87, 0x2F, 0xA9, 0x14, 0xBE, 0x27, 0xD9, 0x72,
0x50, 0x01, 0xD4, 0x13, 0x73, 0xA6, 0xA7, 0x51, 0x02, 0x75, 0x25, 0xE1, 0xB3, 0x45, 0x34, 0x7D,
0xA8, 0x8E, 0xEB, 0xF3, 0x16, 0x49, 0xCB, 0x4F, 0x8C, 0xA1, 0xB9, 0x36, 0x85, 0x39, 0x75, 0x5D,
0x08, 0x00, 0xAE, 0xEB, 0xF6, 0xEA, 0xD7, 0x13, 0x3A, 0x21, 0x5A, 0x5F, 0x30, 0x84, 0x52, 0x26,
0x95, 0xC9, 0x14, 0xF2, 0x57, 0x55, 0x6B, 0xB1, 0x10, 0xC2, 0xE1, 0xBD, 0x3B, 0x51, 0xC0, 0xB7,
0x55, 0x4C, 0x71, 0x12, 0x26, 0xC7, 0x0D, 0xF9, 0x51, 0xA4, 0x38, 0x02, 0x05, 0x7F, 0xB8, 0xF1,
0x72, 0x4B, 0xBF, 0x71, 0x89, 0x14, 0xF3, 0x77, 0x38, 0xD9, 0x71, 0x24, 0xF3, 0x00, 0x11, 0xA1,
0xD8, 0xD4, 0x69, 0x27, 0x08, 0x37, 0x35, 0xC9, 0x11, 0x9D, 0x90, 0x1C, 0x0E, 0xE7, 0x1C, 0xFF,
0x2D, 0x1E, 0xE8, 0x92, 0xE1, 0x18, 0x10, 0x95, 0x7C, 0xE0, 0x80, 0xF4, 0x96, 0x43, 0x21, 0xF9,
0x75, 0x21, 0x64, 0x38, 0xDD, 0x9F, 0x1E, 0x95, 0x16, 0xDA, 0x56, 0x1D, 0x4F, 0x9A, 0x53, 0xB2,
0xE2, 0xE4, 0x18, 0xCB, 0x6B, 0x1A, 0x65, 0xEB, 0x56, 0xC6, 0x3B, 0xE5, 0xFE, 0xD8, 0x26, 0x3F,
0x3A, 0x84, 0x59, 0x72, 0x66, 0xA2, 0xF3, 0x75, 0xFF, 0xFB, 0x60, 0xB3, 0x22, 0xAD, 0x3F, 0x2D,
0x6B, 0xF9, 0xEB, 0xEA, 0x05, 0x7C, 0xD8, 0x8F, 0x6D, 0x2C, 0x98, 0x9E, 0x2B, 0x93, 0xF1, 0x5E,
0x46, 0xF0, 0x87, 0x49, 0x29, 0x73, 0x68, 0xD7, 0x7F, 0xF9, 0xF0, 0xE5, 0x7D, 0xDB, 0x1D, 0x75,
0x19, 0xF3, 0xC4, 0x58, 0x9B, 0x17, 0x88, 0xA8, 0x92, 0xE0, 0xBE, 0xBD, 0x8B, 0x1D, 0x8D, 0x9F,
0x56, 0x76, 0xAD, 0xAF, 0x29, 0xE2, 0xD9, 0xD5, 0x52, 0xF6, 0xB5, 0x56, 0x35, 0x57, 0x3A, 0xC8,
0xE1, 0x56, 0x43, 0x19, 0x94, 0xD3, 0x04, 0x9B, 0x6D, 0x35, 0xD8, 0x0B, 0x5F, 0x4D, 0x19, 0x8E,
0xEC, 0xFA, 0x64, 0x91, 0x0A, 0x72, 0x20, 0x2B, 0xBC, 0x1A, 0x4A, 0xFE, 0x8B, 0xFD, 0xBB, 0xED,
0x1B, 0x23, 0xEA, 0xAD, 0x72, 0x82, 0xA1, 0x29, 0x99, 0x71, 0xBD, 0xF0, 0x95, 0xC1, 0x03, 0xDD,
0x7B, 0xC2, 0xB2, 0x3C, 0x28, 0x54, 0xD3, 0x68, 0xA4, 0x72, 0xC8, 0x66, 0x96, 0xE0, 0xD1, 0xD8,
0x7F, 0xF8, 0xD1, 0x26, 0x2B, 0xF7, 0xAD, 0xBA, 0x55, 0xCA, 0x15, 0xB9, 0x32, 0xC3, 0xE5, 0x88,
0x97, 0x8E, 0x5C, 0xFB, 0x92, 0x25, 0x8B, 0xBF, 0xA2, 0x45, 0x55, 0x7A, 0xA7, 0x6F, 0x8B, 0x57,
0x5B, 0xCF, 0x0E, 0xCB, 0x1D, 0xFB, 0x20, 0x82, 0x77, 0xA8, 0x8C, 0xCC, 0x16, 0xCE, 0x1D, 0xFA,
0xDE, 0xCC, 0x0B, 0x62, 0xFE, 0xCC, 0xE1, 0xB7, 0xF0, 0xC3, 0x81, 0x64, 0x73, 0x40, 0xA0, 0xC2,
0x4D, 0x89, 0x11, 0x75, 0x33, 0x55, 0x33, 0x8D, 0xE8, 0x4A, 0xFD, 0xEA, 0x6E, 0x30, 0x0B, 0xD7,
0x31, 0x2C, 0xDE, 0x47, 0xE3, 0xBF, 0xF8, 0x55, 0x42, 0xE2, 0x7F, 0x59, 0xE5, 0x17, 0xEF, 0x99,
0x34, 0x69, 0x91, 0xB1, 0x23, 0x8E, 0x20, 0x87, 0x2D, 0xA8, 0xFE, 0xD5, 0x8A, 0xF3, 0x84, 0x3A,
0xF0, 0x37, 0xE4, 0x09, 0x00, 0x54, 0xEE, 0x67, 0x49, 0x93, 0xE4, 0x81, 0x70, 0xE3, 0x90, 0x4D,
0xEF, 0xFE, 0x41, 0xB7, 0x99, 0x7B, 0xC1, 0x83, 0xBA, 0x62, 0x12, 0x6F, 0x7D, 0xDE, 0x6B, 0xAF,
0xDA, 0x16, 0xF9, 0x55, 0x51, 0xEE, 0xA6, 0x0C, 0x2B, 0x02, 0xA3, 0xFD, 0x8D, 0xFB, 0x30, 0x17,
0xE4, 0x6F, 0xDF, 0x36, 0x71, 0xC4, 0xCA, 0x87, 0x25, 0x48, 0xB0, 0x47, 0xEC, 0xEA, 0xB4, 0xBF,
0xA5, 0x4D, 0x9B, 0x9F, 0x02, 0x93, 0xC4, 0xE3, 0xE4, 0xE8, 0x42, 0x2D, 0x68, 0x81, 0x15, 0x0A,
0xEB, 0x84, 0x5B, 0xD6, 0xA8, 0x74, 0xFB, 0x7D, 0x1D, 0xCB, 0x2C, 0xDA, 0x46, 0x2A, 0x76, 0x62,
0xCE, 0xBC, 0x5C, 0x9E, 0x8B, 0xE7, 0xCF, 0xBE, 0x78, 0xF5, 0x7C, 0xEB, 0xB3, 0x3A, 0x9C, 0xAA,
0x6F, 0xCC, 0x72, 0xD1, 0x59, 0xF2, 0x11, 0x23, 0xD6, 0x3F, 0x48, 0xD1, 0xB7, 0xCE, 0xB0, 0xBF,
0xCB, 0xEA, 0x80, 0xDE, 0x57, 0xD4, 0x5E, 0x97, 0x2F, 0x75, 0xD1, 0x50, 0x8E, 0x80, 0x2C, 0x66,
0x79, 0xBF, 0x72, 0x4B, 0xBD, 0x8A, 0x81, 0x6C, 0xD3, 0xE1, 0x01, 0xDC, 0xD2, 0x15, 0x26, 0xC5,
0x36, 0xDA, 0x2C, 0x1A, 0xC0, 0x27, 0x94, 0xED, 0xB7, 0x9B, 0x85, 0x0B, 0x5E, 0x80, 0x97, 0xC5,
0xEC, 0x4F, 0xEC, 0x88, 0x5D, 0x50, 0x07, 0x35, 0x47, 0xDC, 0x0B, 0x3B, 0x3D, 0xDD, 0x60, 0xAF,
0xA8, 0x5D, 0x81, 0x38, 0x24, 0x25, 0x5D, 0x5C, 0x15, 0xD1, 0xDE, 0xB3, 0xAB, 0xEC, 0x05, 0x69,
0xEF, 0x83, 0xED, 0x57, 0x54, 0xB8, 0x64, 0x64, 0x11, 0x16, 0x32, 0x69, 0xDA, 0x9F, 0x2D, 0x7F,
0x36, 0xBB, 0x44, 0x5A, 0x34, 0xE8, 0x7F, 0xBF, 0x03, 0xEB, 0x00, 0x7F, 0x59, 0x68, 0x22, 0x79,
0xCF, 0x73, 0x6C, 0x2C, 0x29, 0xA7, 0xA1, 0x5F, 0x38, 0xA1, 0x1D, 0xF0, 0x20, 0x53, 0xE0, 0x1A,
0x63, 0x14, 0x58, 0x71, 0x10, 0xAA, 0x08, 0x0C, 0x3E, 0x16, 0x1A, 0x60, 0x22, 0x82, 0x7F, 0xBA,
0xA4, 0x43, 0xA0, 0xD0, 0xAC, 0x1B, 0xD5, 0x6B, 0x64, 0xB5, 0x14, 0x93, 0x31, 0x9E, 0x53, 0x50,
0xD0, 0x57, 0x66, 0xEE, 0x5A, 0x4F, 0xFB, 0x03, 0x2A, 0x69, 0x58, 0x76, 0xF1, 0x83, 0xF7, 0x4E,
0xBA, 0x8C, 0x42, 0x06, 0x60, 0x5D, 0x6D, 0xCE, 0x60, 0x88, 0xAE, 0xA4, 0xC3, 0xF1, 0x03, 0xA5,
0x4B, 0x98, 0xA1, 0xFF, 0x67, 0xE1, 0xAC, 0xA2, 0xB8, 0x62, 0xD7, 0x6F, 0xA0, 0x31, 0xB4, 0xD2,
0x77, 0xAF, 0x21, 0x10, 0x06, 0xC6, 0x9A, 0xFF, 0x1D, 0x09, 0x17, 0x0E, 0x5F, 0xF1, 0xAA, 0x54,
0x34, 0x4B, 0x45, 0x8A, 0x87, 0x63, 0xA6, 0xDC, 0xF9, 0x24, 0x30, 0x67, 0xC6, 0xB2, 0xD6, 0x61,
0x33, 0x69, 0xEE, 0x50, 0x61, 0x57, 0x28, 0xE7, 0x7E, 0xEE, 0xEC, 0x3A, 0x5A, 0x73, 0x4E, 0xA8,
0x8D, 0xE4, 0x18, 0xEA, 0xEC, 0x41, 0x64, 0xC8, 0xE2, 0xE8, 0x66, 0xB6, 0x2D, 0xB6, 0xFB, 0x6A,
0x6C, 0x16, 0xB3, 0xDD, 0x46, 0x43, 0xB9, 0x73, 0x00, 0x6A, 0x71, 0xED, 0x4E, 0x9D, 0x25, 0x1A,
0xC3, 0x3C, 0x4A, 0x95, 0x15, 0x99, 0x35, 0x81, 0x14, 0x02, 0xD6, 0x98, 0x9B, 0xEC, 0xD8, 0x23,
0x3B, 0x84, 0x29, 0xAF, 0x0C, 0x99, 0x83, 0xA6, 0x9A, 0x34, 0x4F, 0xFA, 0xE8, 0xD0, 0x3C, 0x4B,
0xD0, 0xFB, 0xB6, 0x68, 0xB8, 0x9E, 0x8F, 0xCD, 0xF7, 0x60, 0x2D, 0x7A, 0x22, 0xE5, 0x7D, 0xAB,
0x65, 0x1B, 0x95, 0xA7, 0xA8, 0x7F, 0xB6, 0x77, 0x47, 0x7B, 0x5F, 0x8B, 0x12, 0x72, 0xD0, 0xD4,
0x91, 0xEF, 0xDE, 0x19, 0x50, 0x3C, 0xA7, 0x8B, 0xC4, 0xA9, 0xB3, 0x23, 0xCB, 0x76, 0xE6, 0x81,
0xF0, 0xC1, 0x04, 0x8F, 0xA3, 0xB8, 0x54, 0x5B, 0x97, 0xAC, 0x19, 0xFF, 0x3F, 0x55, 0x27, 0x2F,
0xE0, 0x1D, 0x42, 0x9B, 0x57, 0xFC, 0x4B, 0x4E, 0x0F, 0xCE, 0x98, 0xA9, 0x43, 0x57, 0x03, 0xBD,
0xE7, 0xC8, 0x94, 0xDF, 0x6E, 0x36, 0x73, 0x32, 0xB4, 0xEF, 0x2E, 0x85, 0x7A, 0x6E, 0xFC, 0x6C,
0x18, 0x82, 0x75, 0x35, 0x90, 0x07, 0xF3, 0xE4, 0x9F, 0x3E, 0xDC, 0x68, 0xF3, 0xB5, 0xF3, 0x19,
0x80, 0x92, 0x06, 0x99, 0xA2, 0xE8, 0x6F, 0xFF, 0x2E, 0x7F, 0xAE, 0x42, 0xA4, 0x5F, 0xFB, 0xD4,
0x0E, 0x81, 0x2B, 0xC3, 0x04, 0xFF, 0x2B, 0xB3, 0x74, 0x4E, 0x36, 0x5B, 0x9C, 0x15, 0x00, 0xC6,
0x47, 0x2B, 0xE8, 0x8B, 0x3D, 0xF1, 0x9C, 0x03, 0x9A, 0x58, 0x7F, 0x9B, 0x9C, 0xBF, 0x85, 0x49,
0x79, 0x35, 0x2E, 0x56, 0x7B, 0x41, 0x14, 0x39, 0x47, 0x83, 0x26, 0xAA, 0x07, 0x89, 0x98, 0x11,
0x1B, 0x86, 0xE7, 0x73, 0x7A, 0xD8, 0x7D, 0x78, 0x61, 0x53, 0xE9, 0x79, 0xF5, 0x36, 0x8D, 0x44,
0x92, 0x84, 0xF9, 0x13, 0x50, 0x58, 0x3B, 0xA4, 0x6A, 0x36, 0x65, 0x49, 0x8E, 0x3C, 0x0E, 0xF1,
0x6F, 0xD2, 0x84, 0xC4, 0x7E, 0x8E, 0x3F, 0x39, 0xAE, 0x7C, 0x84, 0xF1, 0x63, 0x37, 0x8E, 0x3C,
0xCC, 0x3E, 0x44, 0x81, 0x45, 0xF1, 0x4B, 0xB9, 0xED, 0x6B, 0x36, 0x5D, 0xBB, 0x20, 0x60, 0x1A,
0x0F, 0xA3, 0xAA, 0x55, 0x77, 0x3A, 0xA9, 0xAE, 0x37, 0x4D, 0xBA, 0xB8, 0x86, 0x6B, 0xBC, 0x08,
0x50, 0xF6, 0xCC, 0xA4, 0xBD, 0x1D, 0x40, 0x72, 0xA5, 0x86, 0xFA, 0xE2, 0x10, 0xAE, 0x3D, 0x58,
0x4B, 0x97, 0xF3, 0x43, 0x74, 0xA9, 0x9E, 0xEB, 0x21, 0xB7, 0x01, 0xA4, 0x86, 0x93, 0x97, 0xEE,
0x2F, 0x4F, 0x3B, 0x86, 0xA1, 0x41, 0x6F, 0x41, 0x26, 0x90, 0x78, 0x5C, 0x7F, 0x30, 0x38, 0x4B,
0x3F, 0xAA, 0xEC, 0xED, 0x5C, 0x6F, 0x0E, 0xAD, 0x43, 0x87, 0xFD, 0x93, 0x35, 0xE6, 0x01, 0xEF,
0x41, 0x26, 0x90, 0x99, 0x9E, 0xFB, 0x19, 0x5B, 0xAD, 0xD2, 0x91, 0x8A, 0xE0, 0x46, 0xAF, 0x65,
0xFA, 0x4F, 0x84, 0xC1, 0xA1, 0x2D, 0xCF, 0x45, 0x8B, 0xD3, 0x85, 0x50, 0x55, 0x7C, 0xF9, 0x67,
0x88, 0xD4, 0x4E, 0xE9, 0xD7, 0x6B, 0x61, 0x54, 0xA1, 0xA4, 0xA6, 0xA2, 0xC2, 0xBF, 0x30, 0x9C,
0x40, 0x9F, 0x5F, 0xD7, 0x69, 0x2B, 0x24, 0x82, 0x5E, 0xD9, 0xD6, 0xA7, 0x12, 0x54, 0x1A, 0xF7,
0x55, 0x9F, 0x76, 0x50, 0xA9, 0x95, 0x84, 0xE6, 0x6B, 0x6D, 0xB5, 0x96, 0x54, 0xD6, 0xCD, 0xB3,
0xA1, 0x9B, 0x46, 0xA7, 0x94, 0x4D, 0xC4, 0x94, 0xB4, 0x98, 0xE3, 0xE1, 0xE2, 0x34, 0xD5, 0x33,
0x16, 0x07, 0x54, 0xCD, 0xB7, 0x77, 0x53, 0xDB, 0x4F, 0x4D, 0x46, 0x9D, 0xE9, 0xD4, 0x9C, 0x8A,
0x36, 0xB6, 0xB8, 0x38, 0x26, 0x6C, 0x0E, 0xFF, 0x9C, 0x1B, 0x43, 0x8B, 0x80, 0xCC, 0xB9, 0x3D,
0xDA, 0xC7, 0xF1, 0x8A, 0xF2, 0x6D, 0xB8, 0xD7, 0x74, 0x2F, 0x7E, 0x1E, 0xB7, 0xD3, 0x4A, 0xB4,
0xAC, 0xFC, 0x79, 0x48, 0x6C, 0xBC, 0x96, 0xB6, 0x94, 0x46, 0x57, 0x2D, 0xB0, 0xA3, 0xFC, 0x1E,
0xB9, 0x52, 0x60, 0x85, 0x2D, 0x41, 0xD0, 0x43, 0x01, 0x1E, 0x1C, 0xD5, 0x7D, 0xFC, 0xF3, 0x96,
0x0D, 0xC7, 0xCB, 0x2A, 0x29, 0x9A, 0x93, 0xDD, 0x88, 0x2D, 0x37, 0x5D, 0xAA, 0xFB, 0x49, 0x68,
0xA0, 0x9C, 0x50, 0x86, 0x7F, 0x68, 0x56, 0x57, 0xF9, 0x79, 0x18, 0x39, 0xD4, 0xE0, 0x01, 0x84,
0x33, 0x61, 0xCA, 0xA5, 0xD2, 0xD6, 0xE4, 0xC9, 0x8A, 0x4A, 0x23, 0x44, 0x4E, 0xBC, 0xF0, 0xDC,
0x24, 0xA1, 0xA0, 0xC4, 0xE2, 0x07, 0x3C, 0x10, 0xC4, 0xB5, 0x25, 0x4B, 0x65, 0x63, 0xF4, 0x80,
0xE7, 0xCF, 0x61, 0xB1, 0x71, 0x82, 0x21, 0x87, 0x2C, 0xF5, 0x91, 0x00, 0x32, 0x0C, 0xEC, 0xA9,
0xB5, 0x9A, 0x74, 0x85, 0xE3, 0x36, 0x8F, 0x76, 0x4F, 0x9C, 0x6D, 0xCE, 0xBC, 0xAD, 0x0A, 0x4B,
0xED, 0x76, 0x04, 0xCB, 0xC3, 0xB9, 0x33, 0x9E, 0x01, 0x93, 0x96, 0x69, 0x7D, 0xC5, 0xA2, 0x45,
0x79, 0x9B, 0x04, 0x5C, 0x84, 0x09, 0xED, 0x88, 0x43, 0xC7, 0xAB, 0x93, 0x14, 0x26, 0xA1, 0x40,
0xB5, 0xCE, 0x4E, 0xBF, 0x2A, 0x42, 0x85, 0x3E, 0x2C, 0x3B, 0x54, 0xE8, 0x12, 0x1F, 0x0E, 0x97,
0x59, 0xB2, 0x27, 0x89, 0xFA, 0xF2, 0xDF, 0x8E, 0x68, 0x59, 0xDC, 0x06, 0xBC, 0xB6, 0x85, 0x0D,
0x06, 0x22, 0xEC, 0xB1, 0xCB, 0xE5, 0x04, 0xE6, 0x3D, 0xB3, 0xB0, 0x41, 0x73, 0x08, 0x3F, 0x3C,
0x58, 0x86, 0x63, 0xEB, 0x50, 0xEE, 0x1D, 0x2C, 0x37, 0x74, 0xA9, 0xD3, 0x18, 0xA3, 0x47, 0x6E,
0x93, 0x54, 0xAD, 0x0A, 0x5D, 0xB8, 0x2A, 0x55, 0x5D, 0x78, 0xF6, 0xEE, 0xBE, 0x8E, 0x3C, 0x76,
0x69, 0xB9, 0x40, 0xC2, 0x34, 0xEC, 0x2A, 0xB9, 0xED, 0x7E, 0x20, 0xE4, 0x8D, 0x00, 0x38, 0xC7,
0xE6, 0x8F, 0x44, 0xA8, 0x86, 0xCE, 0xEB, 0x2A, 0xE9, 0x90, 0xF1, 0x4C, 0xDF, 0x32, 0xFB, 0x73,
0x1B, 0x6D, 0x92, 0x1E, 0x95, 0xFE, 0xB4, 0xDB, 0x65, 0xDF, 0x4D, 0x23, 0x54, 0x89, 0x48, 0xBF,
0x4A, 0x2E, 0x70, 0xD6, 0xD7, 0x62, 0xB4, 0x33, 0x29, 0xB1, 0x3A, 0x33, 0x4C, 0x23, 0x6D, 0xA6,
0x76, 0xA5, 0x21, 0x63, 0x48, 0xE6, 0x90, 0x5D, 0xED, 0x90, 0x95, 0x0B, 0x7A, 0x84, 0xBE, 0xB8,
0x0D, 0x5E, 0x63, 0x0C, 0x62, 0x26, 0x4C, 0x14, 0x5A, 0xB3, 0xAC, 0x23, 0xA4, 0x74, 0xA7, 0x6F,
0x33, 0x30, 0x05, 0x60, 0x01, 0x42, 0xA0, 0x28, 0xB7, 0xEE, 0x19, 0x38, 0xF1, 0x64, 0x80, 0x82,
0x43, 0xE1, 0x41, 0x27, 0x1F, 0x1F, 0x90, 0x54, 0x7A, 0xD5, 0x23, 0x2E, 0xD1, 0x3D, 0xCB, 0x28,
0xBA, 0x58, 0x7F, 0xDC, 0x7C, 0x91, 0x24, 0xE9, 0x28, 0x51, 0x83, 0x6E, 0xC5, 0x56, 0x21, 0x42,
0xED, 0xA0, 0x56, 0x22, 0xA1, 0x40, 0x80, 0x6B, 0xA8, 0xF7, 0x94, 0xCA, 0x13, 0x6B, 0x0C, 0x39,
0xD9, 0xFD, 0xE9, 0xF3, 0x6F, 0xA6, 0x9E, 0xFC, 0x70, 0x8A, 0xB3, 0xBC, 0x59, 0x3C, 0x1E, 0x1D,
0x6C, 0xF9, 0x7C, 0xAF, 0xF9, 0x88, 0x71, 0x95, 0xEB, 0x57, 0x00, 0xBD, 0x9F, 0x8C, 0x4F, 0xE1,
0x24, 0x83, 0xC5, 0x22, 0xEA, 0xFD, 0xD3, 0x0C, 0xE2, 0x17, 0x18, 0x7C, 0x6A, 0x4C, 0xDE, 0x77,
0xB4, 0x53, 0x9B, 0x4C, 0x81, 0xCD, 0x23, 0x60, 0xAA, 0x0E, 0x25, 0x73, 0x9C, 0x02, 0x79, 0x32,
0x30, 0xDF, 0x74, 0xDF, 0x75, 0x19, 0xF4, 0xA5, 0x14, 0x5C, 0xF7, 0x7A, 0xA8, 0xA5, 0x91, 0x84,
0x7C, 0x60, 0x03, 0x06, 0x3B, 0xCD, 0x50, 0xB6, 0x27, 0x9C, 0xFE, 0xB1, 0xDD, 0xCC, 0xD3, 0xB0,
0x59, 0x24, 0xB2, 0xCA, 0xE2, 0x1C, 0x81, 0x22, 0x9D, 0x07, 0x8F, 0x8E, 0xB9, 0xBE, 0x4E, 0xFA,
0xFC, 0x39, 0x65, 0xBA, 0xBF, 0x9D, 0x12, 0x37, 0x5E, 0x97, 0x7E, 0xF3, 0x89, 0xF5, 0x5D, 0xF5,
0xE3, 0x09, 0x8C, 0x62, 0xB5, 0x20, 0x9D, 0x0C, 0x53, 0x8A, 0x68, 0x1B, 0xD2, 0x8F, 0x75, 0x17,
0x5D, 0xD4, 0xE5, 0xDA, 0x75, 0x62, 0x19, 0x14, 0x6A, 0x26, 0x2D, 0xEB, 0xF8, 0xAF, 0x37, 0xF0,
0x6C, 0xA4, 0x55, 0xB1, 0xBC, 0xE2, 0x33, 0xC0, 0x9A, 0xCA, 0xB0, 0x11, 0x49, 0x4F, 0x68, 0x9B,
0x3B, 0x6B, 0x3C, 0xCC, 0x13, 0xF6, 0xC7, 0x85, 0x61, 0x68, 0x42, 0xAE, 0xBB, 0xDD, 0xCD, 0x45,
0x16, 0x29, 0x1D, 0xEA, 0xDB, 0xC8, 0x03, 0x94, 0x3C, 0xEE, 0x4F, 0x82, 0x11, 0xC3, 0xEC, 0x28,
0xBD, 0x97, 0x05, 0x99, 0xDE, 0xD7, 0xBB, 0x5E, 0x22, 0x1F, 0xD4, 0xEB, 0x64, 0xD9, 0x92, 0xD9,
0x85, 0xB7, 0x6A, 0x05, 0x6A, 0xE4, 0x24, 0x41, 0xF1, 0xCD, 0xF0, 0xD8, 0x3F, 0xF8, 0x9E, 0x0E,
0xCD, 0x0B, 0x7A, 0x70, 0x6B, 0x5A, 0x75, 0x0A, 0x6A, 0x33, 0x88, 0xEC, 0x17, 0x75, 0x08, 0x70,
0x10, 0x2F, 0x24, 0xCF, 0xC4, 0xE9, 0x42, 0x00, 0x61, 0x94, 0xCA, 0x1F, 0x3A, 0x76, 0x06, 0xFA,
0xD2, 0x48, 0x81, 0xF0, 0x77, 0x60, 0x03, 0x45, 0xD9, 0x61, 0xF4, 0xA4, 0x6F, 0x3D, 0xD9, 0x30,
0xC3, 0x04, 0x6B, 0x54, 0x2A, 0xB7, 0xEC, 0x3B, 0xF4, 0x4B, 0xF5, 0x68, 0x52, 0x26, 0xCE, 0xFF,
0x5D, 0x19, 0x91, 0xA0, 0xA3, 0xA5, 0xA9, 0xB1, 0xE0, 0x23, 0xC4, 0x0A, 0x77, 0x4D, 0xF9, 0x51,
0x20, 0xA3, 0xA5, 0xA9, 0xB1, 0xC1, 0x00, 0x82, 0x86, 0x8E, 0x7F, 0x5D, 0x19, 0x91, 0xA0, 0xA3,
0xC4, 0xEB, 0x54, 0x0B, 0x75, 0x68, 0x52, 0x07, 0x8C, 0x9A, 0x97, 0x8D, 0x79, 0x70, 0x62, 0x46,
0xEF, 0x5C, 0x1B, 0x95, 0x89, 0x71, 0x41, 0xE1, 0x21, 0xA1, 0xA1, 0xA1, 0xC0, 0x02, 0x67, 0x4C,
0x1A, 0xB6, 0xCF, 0xFD, 0x78, 0x53, 0x24, 0xAB, 0xB5, 0xC9, 0xF1, 0x60, 0x23, 0xA5, 0xC8, 0x12,
0x87, 0x6D, 0x58, 0x13, 0x85, 0x88, 0x92, 0x87, 0x6D, 0x58, 0x32, 0xC7, 0x0C, 0x9A, 0x97, 0xAC,
0xDA, 0x36, 0xEE, 0x5E, 0x3E, 0xDF, 0x1D, 0xB8, 0xF2, 0x66, 0x2F, 0xBD, 0xF8, 0x72, 0x47, 0xED,
0x58, 0x13, 0x85, 0x88, 0x92, 0x87, 0x8C, 0x7B, 0x55, 0x09, 0x90, 0xA2, 0xC6, 0xEF, 0x3D, 0xF8,
0x53, 0x24, 0xAB, 0xD4, 0x2A, 0xB7, 0xEC, 0x5A, 0x36, 0xEE, 0x5E, 0x3E, 0xDF, 0x3C, 0xFA, 0x76,
0x4F, 0xFD, 0x59, 0x30, 0xE2, 0x46, 0xEF, 0x3D, 0xF8, 0x53, 0x05, 0x69, 0x31, 0xC1, 0x00, 0x82,
0x86, 0x8E, 0x7F, 0x5D, 0x19, 0xB0, 0xE2, 0x27, 0xCC, 0xFB, 0x74, 0x4B, 0x14, 0x8B, 0x94, 0x8B,
0x75, 0x68, 0x33, 0xC5, 0x08, 0x92, 0x87, 0x8C, 0x9A, 0xB6, 0xCF, 0x1C, 0xBA, 0xD7, 0x0D, 0x98,
0xB2, 0xE6, 0x2F, 0xDC, 0x1B, 0x95, 0x89, 0x71, 0x60, 0x23, 0xC4, 0x0A, 0x96, 0x8F, 0x9C, 0xBA,
0xF6, 0x6E, 0x3F, 0xFC, 0x5B, 0x15, 0xA8, 0xD2, 0x26, 0xAF, 0xBD, 0xF8, 0x72, 0x66, 0x2F, 0xDC,
0x1B, 0xB4, 0xCB, 0x14, 0x8B, 0x94, 0xAA, 0xB7, 0xCD, 0xF9, 0x51, 0x01, 0x80, 0x82, 0x86, 0x6F,
0x3D, 0xD9, 0x30, 0xE2, 0x27, 0xCC, 0xFB, 0x74, 0x4B, 0x14, 0xAA, 0xB7, 0xCD, 0xF9, 0x70, 0x43,
0x04, 0x6B, 0x35, 0xC9, 0xF1, 0x60, 0x23, 0xA5, 0xC8, 0xF3, 0x45, 0x08, 0x92, 0x87, 0x6D, 0x58,
0x32, 0xE6, 0x2F, 0xBD, 0xF8, 0x72, 0x66, 0x4E, 0x1E, 0xBE, 0xFE, 0x7E, 0x7E, 0x7E, 0x5F, 0x1D,
0x99, 0x91, 0xA0, 0xA3, 0xC4, 0x0A, 0x77, 0x4D, 0x18, 0x93, 0xA4, 0xAB, 0xD4, 0x0B, 0x75, 0x49,
0x10, 0xA2, 0xC6, 0xEF, 0x3D, 0xF8, 0x53, 0x24, 0xAB, 0xB5, 0xE8, 0x33, 0xE4, 0x4A, 0x16, 0xAE,
0xDE, 0x1F, 0xBC, 0xDB, 0x15, 0xA8, 0xB3, 0xC5, 0x08, 0x73, 0x45, 0xE9, 0x31, 0xC1, 0xE1, 0x21,
0xA1, 0xA1, 0xA1, 0xC0, 0x02, 0x86, 0x6F, 0x5C, 0x3A, 0xD7, 0x0D, 0x98, 0x93, 0xA4, 0xCA, 0x16,
0xAE, 0xDE, 0x1F, 0x9D, 0x99, 0xB0, 0xE2, 0x46, 0xEF, 0x3D, 0xF8, 0x72, 0x47, 0x0C, 0x9A, 0xB6,
0xCF, 0xFD, 0x59, 0x11, 0xA0, 0xA3, 0xA5, 0xC8, 0xF3, 0x45, 0x08, 0x92, 0x87, 0x6D, 0x39, 0xF0,
0x43, 0x04, 0x8A, 0x96, 0xAE, 0xDE, 0x3E, 0xDF, 0x1D, 0x99, 0x91, 0xA0, 0xC2, 0x06, 0x6F, 0x3D,
0xF8, 0x72, 0x47, 0x0C, 0x9A, 0x97, 0x8D, 0x98, 0x93, 0x85, 0x88, 0x73, 0x45, 0xE9, 0x31, 0xE0,
0x23, 0xA5, 0xA9, 0xD0, 0x03, 0x84, 0x8A, 0x96, 0xAE, 0xDE, 0x1F, 0xBC, 0xDB, 0x15, 0xA8, 0xD2,
0x26, 0xCE, 0xFF, 0x5D, 0x19, 0x91, 0x81, 0x80, 0x82, 0x67, 0x2D, 0xD8, 0x13, 0xA4, 0xAB, 0xD4,
0x0B, 0x94, 0xAA, 0xB7, 0xCD, 0xF9, 0x51, 0x20, 0xA3, 0xA5, 0xC8, 0xF3, 0x45, 0xE9, 0x50, 0x22,
0xC6, 0xEF, 0x5C, 0x3A, 0xD7, 0x0D, 0x98, 0x93, 0x85, 0x88, 0x73, 0x64, 0x4A, 0xF7, 0x4D, 0xF9,
0x51, 0x20, 0xA3, 0xC4, 0x0A, 0x96, 0xAE, 0xDE, 0x3E, 0xFE, 0x7E, 0x7E, 0x7E, 0x5F, 0x3C, 0xFA,
0x76, 0x4F, 0xFD, 0x78, 0x72, 0x66, 0x2F, 0xBD, 0xD9, 0x30, 0xC3, 0xE5, 0x48, 0x12, 0x87, 0x8C,
0x7B, 0x55, 0x28, 0xD2, 0x07, 0x8C, 0x9A, 0x97, 0xAC, 0xDA, 0x17, 0x8D, 0x79, 0x51, 0x20, 0xA3,
0xC4, 0xEB, 0x54, 0x0B, 0x94, 0x8B, 0x94, 0xAA, 0xD6, 0x2E, 0xBF, 0xFC, 0x5B, 0x15, 0xA8, 0xD2,
0x26, 0xAF, 0xDC, 0x1B, 0xB4, 0xEA, 0x37, 0xEC, 0x3B, 0xF4, 0x6A, 0x37, 0xCD, 0x18, 0x93, 0x85,
0x69, 0x31, 0xC1, 0xE1, 0x40, 0xE3, 0x25, 0xC8, 0x12, 0x87, 0x8C, 0x9A, 0xB6, 0xCF, 0xFD, 0x59,
0x11, 0xA0, 0xC2, 0x06, 0x8E, 0x7F, 0x5D, 0x38, 0xF2, 0x47, 0x0C, 0x7B, 0x74, 0x6A, 0x37, 0xEC,
0x5A, 0x36, 0xEE, 0x3F, 0xFC, 0x7A, 0x76, 0x4F, 0x1C, 0x9B, 0x95, 0x89, 0x71, 0x41, 0x00, 0x63,
0x44, 0xEB, 0x54, 0x2A, 0xD6, 0x0F, 0x9C, 0xBA, 0xD7, 0x0D, 0x98, 0x93, 0x85, 0x69, 0x31, 0xC1,
0x00, 0x82, 0x86, 0x8E, 0x9E, 0xBE, 0xDF, 0x3C, 0xFA, 0x57, 0x2C, 0xDA, 0x36, 0xEE, 0x3F, 0xFC,
0x5B, 0x15, 0x89, 0x71, 0x41, 0x00, 0x82, 0x86, 0x8E, 0x7F, 0x5D, 0x38, 0xF2, 0x47, 0xED, 0x58,
0x13, 0xA4, 0xCA, 0xF7, 0x4D, 0xF9, 0x51, 0x01, 0x80, 0x63, 0x44, 0xEB, 0x54, 0x2A, 0xD6, 0x2E,
0xBF, 0xDD, 0x19, 0x91, 0xA0, 0xA3, 0xA5, 0xA9, 0xB1, 0xE0, 0x42, 0x06, 0x8E, 0x7F, 0x5D, 0x19,
0x91, 0xA0, 0xA3, 0xC4, 0x0A, 0x96, 0x8F, 0x7D, 0x78, 0x72, 0x47, 0x0C, 0x7B, 0x74, 0x6A, 0x56,
0x2E, 0xDE, 0x1F, 0xBC, 0xFA, 0x57, 0x0D, 0x79, 0x51, 0x01, 0x61, 0x21, 0xA1, 0xC0, 0xE3, 0x25,
0xA9, 0xB1, 0xC1, 0xE1, 0x40, 0x02, 0x67, 0x4C, 0x1A, 0x97, 0x8D, 0x98, 0x93, 0xA4, 0xAB, 0xD4,
0x2A, 0xD6, 0x0F, 0x9C, 0x9B, 0xB4, 0xCB, 0x14, 0xAA, 0xB7, 0xCD, 0xF9, 0x51, 0x20, 0xA3, 0xC4,
0xEB, 0x35, 0xC9, 0xF1, 0x60, 0x42, 0x06, 0x8E, 0x7F, 0x7C, 0x7A, 0x76, 0x6E, 0x3F, 0xFC, 0x7A,
0x76, 0x6E, 0x5E, 0x3E, 0xFE, 0x7E, 0x5F, 0x3C, 0xDB, 0x15, 0x89, 0x71, 0x41, 0xE1, 0x21, 0xC0,
0xE3, 0x44, 0xEB, 0x54, 0x2A, 0xB7, 0xCD, 0xF9, 0x70, 0x62, 0x27, 0xAD, 0xD8, 0x32, 0xC7, 0x0C,
0x7B, 0x74, 0x4B, 0x14, 0xAA, 0xB7, 0xEC, 0x3B, 0xD5, 0x28, 0xD2, 0x07, 0x6D, 0x39, 0xD1, 0x20,
0xC2, 0xE7, 0x4C, 0x1A, 0x97, 0x8D, 0x98, 0xB2, 0xC7, 0x0C, 0x59, 0x28, 0xF3, 0x9B
};

View File

@@ -1,79 +1,73 @@
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2019 Sunjun Kim
* Copyright 2020 Ploopy Corporation
*
* 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/>.
*/
// Copyright 2022 Stefan Kerkmann (KarlK90)
// Copyright 2022 Ulrich Spörlein (@uqs)
// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
// Copyright 2019 Sunjun Kim
// Copyright 2020 Ploopy Corporation
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <stdint.h>
#ifndef PMW3360_CPI
# define PMW3360_CPI 1600
#if !defined(PMW33XX_CPI)
# define PMW33XX_CPI 1600U
#endif
#ifndef PMW3360_CLOCK_SPEED
# define PMW3360_CLOCK_SPEED 2000000
#endif
#define PMW33XX_CPI_STEP 100
#define PMW33XX_CPI_MIN 100
#define PMW33XX_CPI_MAX 12000
#ifndef PMW3360_SPI_LSBFIRST
# define PMW3360_SPI_LSBFIRST false
#endif
#define PMW33XX_FIRMWARE_LENGTH 4094
#ifndef PMW3360_SPI_MODE
# define PMW3360_SPI_MODE 3
#endif
#ifndef PMW3360_SPI_DIVISOR
# ifdef __AVR__
# define PMW3360_SPI_DIVISOR (F_CPU / PMW3360_CLOCK_SPEED)
# else
# define PMW3360_SPI_DIVISOR 64
# endif
#endif
#ifndef PMW3360_LIFTOFF_DISTANCE
# define PMW3360_LIFTOFF_DISTANCE 0x02
#endif
#ifndef ROTATIONAL_TRANSFORM_ANGLE
# define ROTATIONAL_TRANSFORM_ANGLE 0x00
#endif
// Support single and plural spellings
#ifndef PMW3360_CS_PINS
# ifndef PMW3360_CS_PIN
# error "No chip select pin defined -- missing PMW3360_CS_PIN or PMW3360_CS_PINS"
# else
# define PMW3360_CS_PINS \
{ PMW3360_CS_PIN }
# endif
#endif
typedef struct {
int8_t motion;
bool isMotion; // True if a motion is detected.
bool isOnSurface; // True when a chip is on a surface
int16_t dx; // displacement on x directions. Unit: Count. (CPI * Count = Inch value)
int8_t mdx;
int16_t dy; // displacement on y directions.
int8_t mdy;
} report_pmw3360_t;
bool pmw3360_init(int8_t index);
uint16_t pmw3360_get_cpi(void);
void pmw3360_set_cpi(uint16_t cpi);
/* Reads and clears the current delta values on the sensor */
report_pmw3360_t pmw3360_read_burst(int8_t index);
// PMW3360 register addresses
// clang-format off
#define REG_Product_ID 0x00
#define REG_Revision_ID 0x01
#define REG_Motion 0x02
#define REG_Delta_X_L 0x03
#define REG_Delta_X_H 0x04
#define REG_Delta_Y_L 0x05
#define REG_Delta_Y_H 0x06
#define REG_SQUAL 0x07
#define REG_Raw_Data_Sum 0x08
#define REG_Maximum_Raw_data 0x09
#define REG_Minimum_Raw_data 0x0a
#define REG_Shutter_Lower 0x0b
#define REG_Shutter_Upper 0x0c
#define REG_Control 0x0d
#define REG_Config1 0x0f
#define REG_Config2 0x10
#define REG_Angle_Tune 0x11
#define REG_Frame_Capture 0x12
#define REG_SROM_Enable 0x13
#define REG_Run_Downshift 0x14
#define REG_Rest1_Rate_Lower 0x15
#define REG_Rest1_Rate_Upper 0x16
#define REG_Rest1_Downshift 0x17
#define REG_Rest2_Rate_Lower 0x18
#define REG_Rest2_Rate_Upper 0x19
#define REG_Rest2_Downshift 0x1a
#define REG_Rest3_Rate_Lower 0x1b
#define REG_Rest3_Rate_Upper 0x1c
#define REG_Observation 0x24
#define REG_Data_Out_Lower 0x25
#define REG_Data_Out_Upper 0x26
#define REG_Raw_Data_Dump 0x29
#define REG_SROM_ID 0x2a
#define REG_Min_SQ_Run 0x2b
#define REG_Raw_Data_Threshold 0x2c
#define REG_Config5 0x2f
#define REG_Power_Up_Reset 0x3a
#define REG_Shutdown 0x3b
#define REG_Inverse_Product_ID 0x3f
#define REG_LiftCutoff_Tune3 0x41
#define REG_Angle_Snap 0x42
#define REG_LiftCutoff_Tune1 0x4a
#define REG_Motion_Burst 0x50
#define REG_LiftCutoff_Tune_Timeout 0x58
#define REG_LiftCutoff_Tune_Min_Length 0x5a
#define REG_SROM_Load_Burst 0x62
#define REG_Lift_Config 0x63
#define REG_Raw_Data_Burst 0x64
#define REG_LiftCutoff_Tune2 0x65
// clang-format on

View File

@@ -1,288 +0,0 @@
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2019 Sunjun Kim
* Copyright 2020 Ploopy Corporation
*
* 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 "progmem.h"
// PID, Inverse PID, SROM version
const uint8_t firmware_signature[] PROGMEM = {0x42, 0xBD, 0x04};
#define FIRMWARE_LENGTH 4094
// Firmware Blob foor PMW3360
// clang-format off
const uint8_t firmware_data[FIRMWARE_LENGTH] PROGMEM = {
0x01, 0x04, 0x8E, 0x96, 0x6E, 0x77, 0x3E, 0xFE, 0x7E, 0x5F, 0x1D, 0xB8, 0xF2, 0x66, 0x4E, 0xFF,
0x5D, 0x19, 0xB0, 0xC2, 0x04, 0x69, 0x54, 0x2A, 0xD6, 0x2E, 0xBF, 0xDD, 0x19, 0xB0, 0xC3, 0xE5,
0x29, 0xB1, 0xE0, 0x23, 0xA5, 0xA9, 0xB1, 0xC1, 0x00, 0x82, 0x67, 0x4C, 0x1A, 0x97, 0x8D, 0x79,
0x51, 0x20, 0xC7, 0x06, 0x8E, 0x7C, 0x7C, 0x7A, 0x76, 0x4F, 0xFD, 0x59, 0x30, 0xE2, 0x46, 0x0E,
0x9E, 0xBE, 0xDF, 0x1D, 0x99, 0x91, 0xA0, 0xA5, 0xA1, 0xA9, 0xD0, 0x22, 0xC6, 0xEF, 0x5C, 0x1B,
0x95, 0x89, 0x90, 0xA2, 0xA7, 0xCC, 0xFB, 0x55, 0x28, 0xB3, 0xE4, 0x4A, 0xF7, 0x6C, 0x3B, 0xF4,
0x6A, 0x56, 0x2E, 0xDE, 0x1F, 0x9D, 0xB8, 0xD3, 0x05, 0x88, 0x92, 0xA6, 0xCE, 0x1E, 0xBE, 0xDF,
0x1D, 0x99, 0xB0, 0xE2, 0x46, 0xEF, 0x5C, 0x07, 0x11, 0x5D, 0x98, 0x0B, 0x9D, 0x94, 0x97, 0xEE,
0x4E, 0x45, 0x33, 0x6B, 0x44, 0xC7, 0x29, 0x56, 0x27, 0x30, 0xC6, 0xA7, 0xD5, 0xF2, 0x56, 0xDF,
0xB4, 0x38, 0x62, 0xCB, 0xA0, 0xB6, 0xE3, 0x0F, 0x84, 0x06, 0x24, 0x05, 0x65, 0x6F, 0x76, 0x89,
0xB5, 0x77, 0x41, 0x27, 0x82, 0x66, 0x65, 0x82, 0xCC, 0xD5, 0xE6, 0x20, 0xD5, 0x27, 0x17, 0xC5,
0xF8, 0x03, 0x23, 0x7C, 0x5F, 0x64, 0xA5, 0x1D, 0xC1, 0xD6, 0x36, 0xCB, 0x4C, 0xD4, 0xDB, 0x66,
0xD7, 0x8B, 0xB1, 0x99, 0x7E, 0x6F, 0x4C, 0x36, 0x40, 0x06, 0xD6, 0xEB, 0xD7, 0xA2, 0xE4, 0xF4,
0x95, 0x51, 0x5A, 0x54, 0x96, 0xD5, 0x53, 0x44, 0xD7, 0x8C, 0xE0, 0xB9, 0x40, 0x68, 0xD2, 0x18,
0xE9, 0xDD, 0x9A, 0x23, 0x92, 0x48, 0xEE, 0x7F, 0x43, 0xAF, 0xEA, 0x77, 0x38, 0x84, 0x8C, 0x0A,
0x72, 0xAF, 0x69, 0xF8, 0xDD, 0xF1, 0x24, 0x83, 0xA3, 0xF8, 0x4A, 0xBF, 0xF5, 0x94, 0x13, 0xDB,
0xBB, 0xD8, 0xB4, 0xB3, 0xA0, 0xFB, 0x45, 0x50, 0x60, 0x30, 0x59, 0x12, 0x31, 0x71, 0xA2, 0xD3,
0x13, 0xE7, 0xFA, 0xE7, 0xCE, 0x0F, 0x63, 0x15, 0x0B, 0x6B, 0x94, 0xBB, 0x37, 0x83, 0x26, 0x05,
0x9D, 0xFB, 0x46, 0x92, 0xFC, 0x0A, 0x15, 0xD1, 0x0D, 0x73, 0x92, 0xD6, 0x8C, 0x1B, 0x8C, 0xB8,
0x55, 0x8A, 0xCE, 0xBD, 0xFE, 0x8E, 0xFC, 0xED, 0x09, 0x12, 0x83, 0x91, 0x82, 0x51, 0x31, 0x23,
0xFB, 0xB4, 0x0C, 0x76, 0xAD, 0x7C, 0xD9, 0xB4, 0x4B, 0xB2, 0x67, 0x14, 0x09, 0x9C, 0x7F, 0x0C,
0x18, 0xBA, 0x3B, 0xD6, 0x8E, 0x14, 0x2A, 0xE4, 0x1B, 0x52, 0x9F, 0x2B, 0x7D, 0xE1, 0xFB, 0x6A,
0x33, 0x02, 0xFA, 0xAC, 0x5A, 0xF2, 0x3E, 0x88, 0x7E, 0xAE, 0xD1, 0xF3, 0x78, 0xE8, 0x05, 0xD1,
0xE3, 0xDC, 0x21, 0xF6, 0xE1, 0x9A, 0xBD, 0x17, 0x0E, 0xD9, 0x46, 0x9B, 0x88, 0x03, 0xEA, 0xF6,
0x66, 0xBE, 0x0E, 0x1B, 0x50, 0x49, 0x96, 0x40, 0x97, 0xF1, 0xF1, 0xE4, 0x80, 0xA6, 0x6E, 0xE8,
0x77, 0x34, 0xBF, 0x29, 0x40, 0x44, 0xC2, 0xFF, 0x4E, 0x98, 0xD3, 0x9C, 0xA3, 0x32, 0x2B, 0x76,
0x51, 0x04, 0x09, 0xE7, 0xA9, 0xD1, 0xA6, 0x32, 0xB1, 0x23, 0x53, 0xE2, 0x47, 0xAB, 0xD6, 0xF5,
0x69, 0x5C, 0x3E, 0x5F, 0xFA, 0xAE, 0x45, 0x20, 0xE5, 0xD2, 0x44, 0xFF, 0x39, 0x32, 0x6D, 0xFD,
0x27, 0x57, 0x5C, 0xFD, 0xF0, 0xDE, 0xC1, 0xB5, 0x99, 0xE5, 0xF5, 0x1C, 0x77, 0x01, 0x75, 0xC5,
0x6D, 0x58, 0x92, 0xF2, 0xB2, 0x47, 0x00, 0x01, 0x26, 0x96, 0x7A, 0x30, 0xFF, 0xB7, 0xF0, 0xEF,
0x77, 0xC1, 0x8A, 0x5D, 0xDC, 0xC0, 0xD1, 0x29, 0x30, 0x1E, 0x77, 0x38, 0x7A, 0x94, 0xF1, 0xB8,
0x7A, 0x7E, 0xEF, 0xA4, 0xD1, 0xAC, 0x31, 0x4A, 0xF2, 0x5D, 0x64, 0x3D, 0xB2, 0xE2, 0xF0, 0x08,
0x99, 0xFC, 0x70, 0xEE, 0x24, 0xA7, 0x7E, 0xEE, 0x1E, 0x20, 0x69, 0x7D, 0x44, 0xBF, 0x87, 0x42,
0xDF, 0x88, 0x3B, 0x0C, 0xDA, 0x42, 0xC9, 0x04, 0xF9, 0x45, 0x50, 0xFC, 0x83, 0x8F, 0x11, 0x6A,
0x72, 0xBC, 0x99, 0x95, 0xF0, 0xAC, 0x3D, 0xA7, 0x3B, 0xCD, 0x1C, 0xE2, 0x88, 0x79, 0x37, 0x11,
0x5F, 0x39, 0x89, 0x95, 0x0A, 0x16, 0x84, 0x7A, 0xF6, 0x8A, 0xA4, 0x28, 0xE4, 0xED, 0x83, 0x80,
0x3B, 0xB1, 0x23, 0xA5, 0x03, 0x10, 0xF4, 0x66, 0xEA, 0xBB, 0x0C, 0x0F, 0xC5, 0xEC, 0x6C, 0x69,
0xC5, 0xD3, 0x24, 0xAB, 0xD4, 0x2A, 0xB7, 0x99, 0x88, 0x76, 0x08, 0xA0, 0xA8, 0x95, 0x7C, 0xD8,
0x38, 0x6D, 0xCD, 0x59, 0x02, 0x51, 0x4B, 0xF1, 0xB5, 0x2B, 0x50, 0xE3, 0xB6, 0xBD, 0xD0, 0x72,
0xCF, 0x9E, 0xFD, 0x6E, 0xBB, 0x44, 0xC8, 0x24, 0x8A, 0x77, 0x18, 0x8A, 0x13, 0x06, 0xEF, 0x97,
0x7D, 0xFA, 0x81, 0xF0, 0x31, 0xE6, 0xFA, 0x77, 0xED, 0x31, 0x06, 0x31, 0x5B, 0x54, 0x8A, 0x9F,
0x30, 0x68, 0xDB, 0xE2, 0x40, 0xF8, 0x4E, 0x73, 0xFA, 0xAB, 0x74, 0x8B, 0x10, 0x58, 0x13, 0xDC,
0xD2, 0xE6, 0x78, 0xD1, 0x32, 0x2E, 0x8A, 0x9F, 0x2C, 0x58, 0x06, 0x48, 0x27, 0xC5, 0xA9, 0x5E,
0x81, 0x47, 0x89, 0x46, 0x21, 0x91, 0x03, 0x70, 0xA4, 0x3E, 0x88, 0x9C, 0xDA, 0x33, 0x0A, 0xCE,
0xBC, 0x8B, 0x8E, 0xCF, 0x9F, 0xD3, 0x71, 0x80, 0x43, 0xCF, 0x6B, 0xA9, 0x51, 0x83, 0x76, 0x30,
0x82, 0xC5, 0x6A, 0x85, 0x39, 0x11, 0x50, 0x1A, 0x82, 0xDC, 0x1E, 0x1C, 0xD5, 0x7D, 0xA9, 0x71,
0x99, 0x33, 0x47, 0x19, 0x97, 0xB3, 0x5A, 0xB1, 0xDF, 0xED, 0xA4, 0xF2, 0xE6, 0x26, 0x84, 0xA2,
0x28, 0x9A, 0x9E, 0xDF, 0xA6, 0x6A, 0xF4, 0xD6, 0xFC, 0x2E, 0x5B, 0x9D, 0x1A, 0x2A, 0x27, 0x68,
0xFB, 0xC1, 0x83, 0x21, 0x4B, 0x90, 0xE0, 0x36, 0xDD, 0x5B, 0x31, 0x42, 0x55, 0xA0, 0x13, 0xF7,
0xD0, 0x89, 0x53, 0x71, 0x99, 0x57, 0x09, 0x29, 0xC5, 0xF3, 0x21, 0xF8, 0x37, 0x2F, 0x40, 0xF3,
0xD4, 0xAF, 0x16, 0x08, 0x36, 0x02, 0xFC, 0x77, 0xC5, 0x8B, 0x04, 0x90, 0x56, 0xB9, 0xC9, 0x67,
0x9A, 0x99, 0xE8, 0x00, 0xD3, 0x86, 0xFF, 0x97, 0x2D, 0x08, 0xE9, 0xB7, 0xB3, 0x91, 0xBC, 0xDF,
0x45, 0xC6, 0xED, 0x0F, 0x8C, 0x4C, 0x1E, 0xE6, 0x5B, 0x6E, 0x38, 0x30, 0xE4, 0xAA, 0xE3, 0x95,
0xDE, 0xB9, 0xE4, 0x9A, 0xF5, 0xB2, 0x55, 0x9A, 0x87, 0x9B, 0xF6, 0x6A, 0xB2, 0xF2, 0x77, 0x9A,
0x31, 0xF4, 0x7A, 0x31, 0xD1, 0x1D, 0x04, 0xC0, 0x7C, 0x32, 0xA2, 0x9E, 0x9A, 0xF5, 0x62, 0xF8,
0x27, 0x8D, 0xBF, 0x51, 0xFF, 0xD3, 0xDF, 0x64, 0x37, 0x3F, 0x2A, 0x6F, 0x76, 0x3A, 0x7D, 0x77,
0x06, 0x9E, 0x77, 0x7F, 0x5E, 0xEB, 0x32, 0x51, 0xF9, 0x16, 0x66, 0x9A, 0x09, 0xF3, 0xB0, 0x08,
0xA4, 0x70, 0x96, 0x46, 0x30, 0xFF, 0xDA, 0x4F, 0xE9, 0x1B, 0xED, 0x8D, 0xF8, 0x74, 0x1F, 0x31,
0x92, 0xB3, 0x73, 0x17, 0x36, 0xDB, 0x91, 0x30, 0xD6, 0x88, 0x55, 0x6B, 0x34, 0x77, 0x87, 0x7A,
0xE7, 0xEE, 0x06, 0xC6, 0x1C, 0x8C, 0x19, 0x0C, 0x48, 0x46, 0x23, 0x5E, 0x9C, 0x07, 0x5C, 0xBF,
0xB4, 0x7E, 0xD6, 0x4F, 0x74, 0x9C, 0xE2, 0xC5, 0x50, 0x8B, 0xC5, 0x8B, 0x15, 0x90, 0x60, 0x62,
0x57, 0x29, 0xD0, 0x13, 0x43, 0xA1, 0x80, 0x88, 0x91, 0x00, 0x44, 0xC7, 0x4D, 0x19, 0x86, 0xCC,
0x2F, 0x2A, 0x75, 0x5A, 0xFC, 0xEB, 0x97, 0x2A, 0x70, 0xE3, 0x78, 0xD8, 0x91, 0xB0, 0x4F, 0x99,
0x07, 0xA3, 0x95, 0xEA, 0x24, 0x21, 0xD5, 0xDE, 0x51, 0x20, 0x93, 0x27, 0x0A, 0x30, 0x73, 0xA8,
0xFF, 0x8A, 0x97, 0xE9, 0xA7, 0x6A, 0x8E, 0x0D, 0xE8, 0xF0, 0xDF, 0xEC, 0xEA, 0xB4, 0x6C, 0x1D,
0x39, 0x2A, 0x62, 0x2D, 0x3D, 0x5A, 0x8B, 0x65, 0xF8, 0x90, 0x05, 0x2E, 0x7E, 0x91, 0x2C, 0x78,
0xEF, 0x8E, 0x7A, 0xC1, 0x2F, 0xAC, 0x78, 0xEE, 0xAF, 0x28, 0x45, 0x06, 0x4C, 0x26, 0xAF, 0x3B,
0xA2, 0xDB, 0xA3, 0x93, 0x06, 0xB5, 0x3C, 0xA5, 0xD8, 0xEE, 0x8F, 0xAF, 0x25, 0xCC, 0x3F, 0x85,
0x68, 0x48, 0xA9, 0x62, 0xCC, 0x97, 0x8F, 0x7F, 0x2A, 0xEA, 0xE0, 0x15, 0x0A, 0xAD, 0x62, 0x07,
0xBD, 0x45, 0xF8, 0x41, 0xD8, 0x36, 0xCB, 0x4C, 0xDB, 0x6E, 0xE6, 0x3A, 0xE7, 0xDA, 0x15, 0xE9,
0x29, 0x1E, 0x12, 0x10, 0xA0, 0x14, 0x2C, 0x0E, 0x3D, 0xF4, 0xBF, 0x39, 0x41, 0x92, 0x75, 0x0B,
0x25, 0x7B, 0xA3, 0xCE, 0x39, 0x9C, 0x15, 0x64, 0xC8, 0xFA, 0x3D, 0xEF, 0x73, 0x27, 0xFE, 0x26,
0x2E, 0xCE, 0xDA, 0x6E, 0xFD, 0x71, 0x8E, 0xDD, 0xFE, 0x76, 0xEE, 0xDC, 0x12, 0x5C, 0x02, 0xC5,
0x3A, 0x4E, 0x4E, 0x4F, 0xBF, 0xCA, 0x40, 0x15, 0xC7, 0x6E, 0x8D, 0x41, 0xF1, 0x10, 0xE0, 0x4F,
0x7E, 0x97, 0x7F, 0x1C, 0xAE, 0x47, 0x8E, 0x6B, 0xB1, 0x25, 0x31, 0xB0, 0x73, 0xC7, 0x1B, 0x97,
0x79, 0xF9, 0x80, 0xD3, 0x66, 0x22, 0x30, 0x07, 0x74, 0x1E, 0xE4, 0xD0, 0x80, 0x21, 0xD6, 0xEE,
0x6B, 0x6C, 0x4F, 0xBF, 0xF5, 0xB7, 0xD9, 0x09, 0x87, 0x2F, 0xA9, 0x14, 0xBE, 0x27, 0xD9, 0x72,
0x50, 0x01, 0xD4, 0x13, 0x73, 0xA6, 0xA7, 0x51, 0x02, 0x75, 0x25, 0xE1, 0xB3, 0x45, 0x34, 0x7D,
0xA8, 0x8E, 0xEB, 0xF3, 0x16, 0x49, 0xCB, 0x4F, 0x8C, 0xA1, 0xB9, 0x36, 0x85, 0x39, 0x75, 0x5D,
0x08, 0x00, 0xAE, 0xEB, 0xF6, 0xEA, 0xD7, 0x13, 0x3A, 0x21, 0x5A, 0x5F, 0x30, 0x84, 0x52, 0x26,
0x95, 0xC9, 0x14, 0xF2, 0x57, 0x55, 0x6B, 0xB1, 0x10, 0xC2, 0xE1, 0xBD, 0x3B, 0x51, 0xC0, 0xB7,
0x55, 0x4C, 0x71, 0x12, 0x26, 0xC7, 0x0D, 0xF9, 0x51, 0xA4, 0x38, 0x02, 0x05, 0x7F, 0xB8, 0xF1,
0x72, 0x4B, 0xBF, 0x71, 0x89, 0x14, 0xF3, 0x77, 0x38, 0xD9, 0x71, 0x24, 0xF3, 0x00, 0x11, 0xA1,
0xD8, 0xD4, 0x69, 0x27, 0x08, 0x37, 0x35, 0xC9, 0x11, 0x9D, 0x90, 0x1C, 0x0E, 0xE7, 0x1C, 0xFF,
0x2D, 0x1E, 0xE8, 0x92, 0xE1, 0x18, 0x10, 0x95, 0x7C, 0xE0, 0x80, 0xF4, 0x96, 0x43, 0x21, 0xF9,
0x75, 0x21, 0x64, 0x38, 0xDD, 0x9F, 0x1E, 0x95, 0x16, 0xDA, 0x56, 0x1D, 0x4F, 0x9A, 0x53, 0xB2,
0xE2, 0xE4, 0x18, 0xCB, 0x6B, 0x1A, 0x65, 0xEB, 0x56, 0xC6, 0x3B, 0xE5, 0xFE, 0xD8, 0x26, 0x3F,
0x3A, 0x84, 0x59, 0x72, 0x66, 0xA2, 0xF3, 0x75, 0xFF, 0xFB, 0x60, 0xB3, 0x22, 0xAD, 0x3F, 0x2D,
0x6B, 0xF9, 0xEB, 0xEA, 0x05, 0x7C, 0xD8, 0x8F, 0x6D, 0x2C, 0x98, 0x9E, 0x2B, 0x93, 0xF1, 0x5E,
0x46, 0xF0, 0x87, 0x49, 0x29, 0x73, 0x68, 0xD7, 0x7F, 0xF9, 0xF0, 0xE5, 0x7D, 0xDB, 0x1D, 0x75,
0x19, 0xF3, 0xC4, 0x58, 0x9B, 0x17, 0x88, 0xA8, 0x92, 0xE0, 0xBE, 0xBD, 0x8B, 0x1D, 0x8D, 0x9F,
0x56, 0x76, 0xAD, 0xAF, 0x29, 0xE2, 0xD9, 0xD5, 0x52, 0xF6, 0xB5, 0x56, 0x35, 0x57, 0x3A, 0xC8,
0xE1, 0x56, 0x43, 0x19, 0x94, 0xD3, 0x04, 0x9B, 0x6D, 0x35, 0xD8, 0x0B, 0x5F, 0x4D, 0x19, 0x8E,
0xEC, 0xFA, 0x64, 0x91, 0x0A, 0x72, 0x20, 0x2B, 0xBC, 0x1A, 0x4A, 0xFE, 0x8B, 0xFD, 0xBB, 0xED,
0x1B, 0x23, 0xEA, 0xAD, 0x72, 0x82, 0xA1, 0x29, 0x99, 0x71, 0xBD, 0xF0, 0x95, 0xC1, 0x03, 0xDD,
0x7B, 0xC2, 0xB2, 0x3C, 0x28, 0x54, 0xD3, 0x68, 0xA4, 0x72, 0xC8, 0x66, 0x96, 0xE0, 0xD1, 0xD8,
0x7F, 0xF8, 0xD1, 0x26, 0x2B, 0xF7, 0xAD, 0xBA, 0x55, 0xCA, 0x15, 0xB9, 0x32, 0xC3, 0xE5, 0x88,
0x97, 0x8E, 0x5C, 0xFB, 0x92, 0x25, 0x8B, 0xBF, 0xA2, 0x45, 0x55, 0x7A, 0xA7, 0x6F, 0x8B, 0x57,
0x5B, 0xCF, 0x0E, 0xCB, 0x1D, 0xFB, 0x20, 0x82, 0x77, 0xA8, 0x8C, 0xCC, 0x16, 0xCE, 0x1D, 0xFA,
0xDE, 0xCC, 0x0B, 0x62, 0xFE, 0xCC, 0xE1, 0xB7, 0xF0, 0xC3, 0x81, 0x64, 0x73, 0x40, 0xA0, 0xC2,
0x4D, 0x89, 0x11, 0x75, 0x33, 0x55, 0x33, 0x8D, 0xE8, 0x4A, 0xFD, 0xEA, 0x6E, 0x30, 0x0B, 0xD7,
0x31, 0x2C, 0xDE, 0x47, 0xE3, 0xBF, 0xF8, 0x55, 0x42, 0xE2, 0x7F, 0x59, 0xE5, 0x17, 0xEF, 0x99,
0x34, 0x69, 0x91, 0xB1, 0x23, 0x8E, 0x20, 0x87, 0x2D, 0xA8, 0xFE, 0xD5, 0x8A, 0xF3, 0x84, 0x3A,
0xF0, 0x37, 0xE4, 0x09, 0x00, 0x54, 0xEE, 0x67, 0x49, 0x93, 0xE4, 0x81, 0x70, 0xE3, 0x90, 0x4D,
0xEF, 0xFE, 0x41, 0xB7, 0x99, 0x7B, 0xC1, 0x83, 0xBA, 0x62, 0x12, 0x6F, 0x7D, 0xDE, 0x6B, 0xAF,
0xDA, 0x16, 0xF9, 0x55, 0x51, 0xEE, 0xA6, 0x0C, 0x2B, 0x02, 0xA3, 0xFD, 0x8D, 0xFB, 0x30, 0x17,
0xE4, 0x6F, 0xDF, 0x36, 0x71, 0xC4, 0xCA, 0x87, 0x25, 0x48, 0xB0, 0x47, 0xEC, 0xEA, 0xB4, 0xBF,
0xA5, 0x4D, 0x9B, 0x9F, 0x02, 0x93, 0xC4, 0xE3, 0xE4, 0xE8, 0x42, 0x2D, 0x68, 0x81, 0x15, 0x0A,
0xEB, 0x84, 0x5B, 0xD6, 0xA8, 0x74, 0xFB, 0x7D, 0x1D, 0xCB, 0x2C, 0xDA, 0x46, 0x2A, 0x76, 0x62,
0xCE, 0xBC, 0x5C, 0x9E, 0x8B, 0xE7, 0xCF, 0xBE, 0x78, 0xF5, 0x7C, 0xEB, 0xB3, 0x3A, 0x9C, 0xAA,
0x6F, 0xCC, 0x72, 0xD1, 0x59, 0xF2, 0x11, 0x23, 0xD6, 0x3F, 0x48, 0xD1, 0xB7, 0xCE, 0xB0, 0xBF,
0xCB, 0xEA, 0x80, 0xDE, 0x57, 0xD4, 0x5E, 0x97, 0x2F, 0x75, 0xD1, 0x50, 0x8E, 0x80, 0x2C, 0x66,
0x79, 0xBF, 0x72, 0x4B, 0xBD, 0x8A, 0x81, 0x6C, 0xD3, 0xE1, 0x01, 0xDC, 0xD2, 0x15, 0x26, 0xC5,
0x36, 0xDA, 0x2C, 0x1A, 0xC0, 0x27, 0x94, 0xED, 0xB7, 0x9B, 0x85, 0x0B, 0x5E, 0x80, 0x97, 0xC5,
0xEC, 0x4F, 0xEC, 0x88, 0x5D, 0x50, 0x07, 0x35, 0x47, 0xDC, 0x0B, 0x3B, 0x3D, 0xDD, 0x60, 0xAF,
0xA8, 0x5D, 0x81, 0x38, 0x24, 0x25, 0x5D, 0x5C, 0x15, 0xD1, 0xDE, 0xB3, 0xAB, 0xEC, 0x05, 0x69,
0xEF, 0x83, 0xED, 0x57, 0x54, 0xB8, 0x64, 0x64, 0x11, 0x16, 0x32, 0x69, 0xDA, 0x9F, 0x2D, 0x7F,
0x36, 0xBB, 0x44, 0x5A, 0x34, 0xE8, 0x7F, 0xBF, 0x03, 0xEB, 0x00, 0x7F, 0x59, 0x68, 0x22, 0x79,
0xCF, 0x73, 0x6C, 0x2C, 0x29, 0xA7, 0xA1, 0x5F, 0x38, 0xA1, 0x1D, 0xF0, 0x20, 0x53, 0xE0, 0x1A,
0x63, 0x14, 0x58, 0x71, 0x10, 0xAA, 0x08, 0x0C, 0x3E, 0x16, 0x1A, 0x60, 0x22, 0x82, 0x7F, 0xBA,
0xA4, 0x43, 0xA0, 0xD0, 0xAC, 0x1B, 0xD5, 0x6B, 0x64, 0xB5, 0x14, 0x93, 0x31, 0x9E, 0x53, 0x50,
0xD0, 0x57, 0x66, 0xEE, 0x5A, 0x4F, 0xFB, 0x03, 0x2A, 0x69, 0x58, 0x76, 0xF1, 0x83, 0xF7, 0x4E,
0xBA, 0x8C, 0x42, 0x06, 0x60, 0x5D, 0x6D, 0xCE, 0x60, 0x88, 0xAE, 0xA4, 0xC3, 0xF1, 0x03, 0xA5,
0x4B, 0x98, 0xA1, 0xFF, 0x67, 0xE1, 0xAC, 0xA2, 0xB8, 0x62, 0xD7, 0x6F, 0xA0, 0x31, 0xB4, 0xD2,
0x77, 0xAF, 0x21, 0x10, 0x06, 0xC6, 0x9A, 0xFF, 0x1D, 0x09, 0x17, 0x0E, 0x5F, 0xF1, 0xAA, 0x54,
0x34, 0x4B, 0x45, 0x8A, 0x87, 0x63, 0xA6, 0xDC, 0xF9, 0x24, 0x30, 0x67, 0xC6, 0xB2, 0xD6, 0x61,
0x33, 0x69, 0xEE, 0x50, 0x61, 0x57, 0x28, 0xE7, 0x7E, 0xEE, 0xEC, 0x3A, 0x5A, 0x73, 0x4E, 0xA8,
0x8D, 0xE4, 0x18, 0xEA, 0xEC, 0x41, 0x64, 0xC8, 0xE2, 0xE8, 0x66, 0xB6, 0x2D, 0xB6, 0xFB, 0x6A,
0x6C, 0x16, 0xB3, 0xDD, 0x46, 0x43, 0xB9, 0x73, 0x00, 0x6A, 0x71, 0xED, 0x4E, 0x9D, 0x25, 0x1A,
0xC3, 0x3C, 0x4A, 0x95, 0x15, 0x99, 0x35, 0x81, 0x14, 0x02, 0xD6, 0x98, 0x9B, 0xEC, 0xD8, 0x23,
0x3B, 0x84, 0x29, 0xAF, 0x0C, 0x99, 0x83, 0xA6, 0x9A, 0x34, 0x4F, 0xFA, 0xE8, 0xD0, 0x3C, 0x4B,
0xD0, 0xFB, 0xB6, 0x68, 0xB8, 0x9E, 0x8F, 0xCD, 0xF7, 0x60, 0x2D, 0x7A, 0x22, 0xE5, 0x7D, 0xAB,
0x65, 0x1B, 0x95, 0xA7, 0xA8, 0x7F, 0xB6, 0x77, 0x47, 0x7B, 0x5F, 0x8B, 0x12, 0x72, 0xD0, 0xD4,
0x91, 0xEF, 0xDE, 0x19, 0x50, 0x3C, 0xA7, 0x8B, 0xC4, 0xA9, 0xB3, 0x23, 0xCB, 0x76, 0xE6, 0x81,
0xF0, 0xC1, 0x04, 0x8F, 0xA3, 0xB8, 0x54, 0x5B, 0x97, 0xAC, 0x19, 0xFF, 0x3F, 0x55, 0x27, 0x2F,
0xE0, 0x1D, 0x42, 0x9B, 0x57, 0xFC, 0x4B, 0x4E, 0x0F, 0xCE, 0x98, 0xA9, 0x43, 0x57, 0x03, 0xBD,
0xE7, 0xC8, 0x94, 0xDF, 0x6E, 0x36, 0x73, 0x32, 0xB4, 0xEF, 0x2E, 0x85, 0x7A, 0x6E, 0xFC, 0x6C,
0x18, 0x82, 0x75, 0x35, 0x90, 0x07, 0xF3, 0xE4, 0x9F, 0x3E, 0xDC, 0x68, 0xF3, 0xB5, 0xF3, 0x19,
0x80, 0x92, 0x06, 0x99, 0xA2, 0xE8, 0x6F, 0xFF, 0x2E, 0x7F, 0xAE, 0x42, 0xA4, 0x5F, 0xFB, 0xD4,
0x0E, 0x81, 0x2B, 0xC3, 0x04, 0xFF, 0x2B, 0xB3, 0x74, 0x4E, 0x36, 0x5B, 0x9C, 0x15, 0x00, 0xC6,
0x47, 0x2B, 0xE8, 0x8B, 0x3D, 0xF1, 0x9C, 0x03, 0x9A, 0x58, 0x7F, 0x9B, 0x9C, 0xBF, 0x85, 0x49,
0x79, 0x35, 0x2E, 0x56, 0x7B, 0x41, 0x14, 0x39, 0x47, 0x83, 0x26, 0xAA, 0x07, 0x89, 0x98, 0x11,
0x1B, 0x86, 0xE7, 0x73, 0x7A, 0xD8, 0x7D, 0x78, 0x61, 0x53, 0xE9, 0x79, 0xF5, 0x36, 0x8D, 0x44,
0x92, 0x84, 0xF9, 0x13, 0x50, 0x58, 0x3B, 0xA4, 0x6A, 0x36, 0x65, 0x49, 0x8E, 0x3C, 0x0E, 0xF1,
0x6F, 0xD2, 0x84, 0xC4, 0x7E, 0x8E, 0x3F, 0x39, 0xAE, 0x7C, 0x84, 0xF1, 0x63, 0x37, 0x8E, 0x3C,
0xCC, 0x3E, 0x44, 0x81, 0x45, 0xF1, 0x4B, 0xB9, 0xED, 0x6B, 0x36, 0x5D, 0xBB, 0x20, 0x60, 0x1A,
0x0F, 0xA3, 0xAA, 0x55, 0x77, 0x3A, 0xA9, 0xAE, 0x37, 0x4D, 0xBA, 0xB8, 0x86, 0x6B, 0xBC, 0x08,
0x50, 0xF6, 0xCC, 0xA4, 0xBD, 0x1D, 0x40, 0x72, 0xA5, 0x86, 0xFA, 0xE2, 0x10, 0xAE, 0x3D, 0x58,
0x4B, 0x97, 0xF3, 0x43, 0x74, 0xA9, 0x9E, 0xEB, 0x21, 0xB7, 0x01, 0xA4, 0x86, 0x93, 0x97, 0xEE,
0x2F, 0x4F, 0x3B, 0x86, 0xA1, 0x41, 0x6F, 0x41, 0x26, 0x90, 0x78, 0x5C, 0x7F, 0x30, 0x38, 0x4B,
0x3F, 0xAA, 0xEC, 0xED, 0x5C, 0x6F, 0x0E, 0xAD, 0x43, 0x87, 0xFD, 0x93, 0x35, 0xE6, 0x01, 0xEF,
0x41, 0x26, 0x90, 0x99, 0x9E, 0xFB, 0x19, 0x5B, 0xAD, 0xD2, 0x91, 0x8A, 0xE0, 0x46, 0xAF, 0x65,
0xFA, 0x4F, 0x84, 0xC1, 0xA1, 0x2D, 0xCF, 0x45, 0x8B, 0xD3, 0x85, 0x50, 0x55, 0x7C, 0xF9, 0x67,
0x88, 0xD4, 0x4E, 0xE9, 0xD7, 0x6B, 0x61, 0x54, 0xA1, 0xA4, 0xA6, 0xA2, 0xC2, 0xBF, 0x30, 0x9C,
0x40, 0x9F, 0x5F, 0xD7, 0x69, 0x2B, 0x24, 0x82, 0x5E, 0xD9, 0xD6, 0xA7, 0x12, 0x54, 0x1A, 0xF7,
0x55, 0x9F, 0x76, 0x50, 0xA9, 0x95, 0x84, 0xE6, 0x6B, 0x6D, 0xB5, 0x96, 0x54, 0xD6, 0xCD, 0xB3,
0xA1, 0x9B, 0x46, 0xA7, 0x94, 0x4D, 0xC4, 0x94, 0xB4, 0x98, 0xE3, 0xE1, 0xE2, 0x34, 0xD5, 0x33,
0x16, 0x07, 0x54, 0xCD, 0xB7, 0x77, 0x53, 0xDB, 0x4F, 0x4D, 0x46, 0x9D, 0xE9, 0xD4, 0x9C, 0x8A,
0x36, 0xB6, 0xB8, 0x38, 0x26, 0x6C, 0x0E, 0xFF, 0x9C, 0x1B, 0x43, 0x8B, 0x80, 0xCC, 0xB9, 0x3D,
0xDA, 0xC7, 0xF1, 0x8A, 0xF2, 0x6D, 0xB8, 0xD7, 0x74, 0x2F, 0x7E, 0x1E, 0xB7, 0xD3, 0x4A, 0xB4,
0xAC, 0xFC, 0x79, 0x48, 0x6C, 0xBC, 0x96, 0xB6, 0x94, 0x46, 0x57, 0x2D, 0xB0, 0xA3, 0xFC, 0x1E,
0xB9, 0x52, 0x60, 0x85, 0x2D, 0x41, 0xD0, 0x43, 0x01, 0x1E, 0x1C, 0xD5, 0x7D, 0xFC, 0xF3, 0x96,
0x0D, 0xC7, 0xCB, 0x2A, 0x29, 0x9A, 0x93, 0xDD, 0x88, 0x2D, 0x37, 0x5D, 0xAA, 0xFB, 0x49, 0x68,
0xA0, 0x9C, 0x50, 0x86, 0x7F, 0x68, 0x56, 0x57, 0xF9, 0x79, 0x18, 0x39, 0xD4, 0xE0, 0x01, 0x84,
0x33, 0x61, 0xCA, 0xA5, 0xD2, 0xD6, 0xE4, 0xC9, 0x8A, 0x4A, 0x23, 0x44, 0x4E, 0xBC, 0xF0, 0xDC,
0x24, 0xA1, 0xA0, 0xC4, 0xE2, 0x07, 0x3C, 0x10, 0xC4, 0xB5, 0x25, 0x4B, 0x65, 0x63, 0xF4, 0x80,
0xE7, 0xCF, 0x61, 0xB1, 0x71, 0x82, 0x21, 0x87, 0x2C, 0xF5, 0x91, 0x00, 0x32, 0x0C, 0xEC, 0xA9,
0xB5, 0x9A, 0x74, 0x85, 0xE3, 0x36, 0x8F, 0x76, 0x4F, 0x9C, 0x6D, 0xCE, 0xBC, 0xAD, 0x0A, 0x4B,
0xED, 0x76, 0x04, 0xCB, 0xC3, 0xB9, 0x33, 0x9E, 0x01, 0x93, 0x96, 0x69, 0x7D, 0xC5, 0xA2, 0x45,
0x79, 0x9B, 0x04, 0x5C, 0x84, 0x09, 0xED, 0x88, 0x43, 0xC7, 0xAB, 0x93, 0x14, 0x26, 0xA1, 0x40,
0xB5, 0xCE, 0x4E, 0xBF, 0x2A, 0x42, 0x85, 0x3E, 0x2C, 0x3B, 0x54, 0xE8, 0x12, 0x1F, 0x0E, 0x97,
0x59, 0xB2, 0x27, 0x89, 0xFA, 0xF2, 0xDF, 0x8E, 0x68, 0x59, 0xDC, 0x06, 0xBC, 0xB6, 0x85, 0x0D,
0x06, 0x22, 0xEC, 0xB1, 0xCB, 0xE5, 0x04, 0xE6, 0x3D, 0xB3, 0xB0, 0x41, 0x73, 0x08, 0x3F, 0x3C,
0x58, 0x86, 0x63, 0xEB, 0x50, 0xEE, 0x1D, 0x2C, 0x37, 0x74, 0xA9, 0xD3, 0x18, 0xA3, 0x47, 0x6E,
0x93, 0x54, 0xAD, 0x0A, 0x5D, 0xB8, 0x2A, 0x55, 0x5D, 0x78, 0xF6, 0xEE, 0xBE, 0x8E, 0x3C, 0x76,
0x69, 0xB9, 0x40, 0xC2, 0x34, 0xEC, 0x2A, 0xB9, 0xED, 0x7E, 0x20, 0xE4, 0x8D, 0x00, 0x38, 0xC7,
0xE6, 0x8F, 0x44, 0xA8, 0x86, 0xCE, 0xEB, 0x2A, 0xE9, 0x90, 0xF1, 0x4C, 0xDF, 0x32, 0xFB, 0x73,
0x1B, 0x6D, 0x92, 0x1E, 0x95, 0xFE, 0xB4, 0xDB, 0x65, 0xDF, 0x4D, 0x23, 0x54, 0x89, 0x48, 0xBF,
0x4A, 0x2E, 0x70, 0xD6, 0xD7, 0x62, 0xB4, 0x33, 0x29, 0xB1, 0x3A, 0x33, 0x4C, 0x23, 0x6D, 0xA6,
0x76, 0xA5, 0x21, 0x63, 0x48, 0xE6, 0x90, 0x5D, 0xED, 0x90, 0x95, 0x0B, 0x7A, 0x84, 0xBE, 0xB8,
0x0D, 0x5E, 0x63, 0x0C, 0x62, 0x26, 0x4C, 0x14, 0x5A, 0xB3, 0xAC, 0x23, 0xA4, 0x74, 0xA7, 0x6F,
0x33, 0x30, 0x05, 0x60, 0x01, 0x42, 0xA0, 0x28, 0xB7, 0xEE, 0x19, 0x38, 0xF1, 0x64, 0x80, 0x82,
0x43, 0xE1, 0x41, 0x27, 0x1F, 0x1F, 0x90, 0x54, 0x7A, 0xD5, 0x23, 0x2E, 0xD1, 0x3D, 0xCB, 0x28,
0xBA, 0x58, 0x7F, 0xDC, 0x7C, 0x91, 0x24, 0xE9, 0x28, 0x51, 0x83, 0x6E, 0xC5, 0x56, 0x21, 0x42,
0xED, 0xA0, 0x56, 0x22, 0xA1, 0x40, 0x80, 0x6B, 0xA8, 0xF7, 0x94, 0xCA, 0x13, 0x6B, 0x0C, 0x39,
0xD9, 0xFD, 0xE9, 0xF3, 0x6F, 0xA6, 0x9E, 0xFC, 0x70, 0x8A, 0xB3, 0xBC, 0x59, 0x3C, 0x1E, 0x1D,
0x6C, 0xF9, 0x7C, 0xAF, 0xF9, 0x88, 0x71, 0x95, 0xEB, 0x57, 0x00, 0xBD, 0x9F, 0x8C, 0x4F, 0xE1,
0x24, 0x83, 0xC5, 0x22, 0xEA, 0xFD, 0xD3, 0x0C, 0xE2, 0x17, 0x18, 0x7C, 0x6A, 0x4C, 0xDE, 0x77,
0xB4, 0x53, 0x9B, 0x4C, 0x81, 0xCD, 0x23, 0x60, 0xAA, 0x0E, 0x25, 0x73, 0x9C, 0x02, 0x79, 0x32,
0x30, 0xDF, 0x74, 0xDF, 0x75, 0x19, 0xF4, 0xA5, 0x14, 0x5C, 0xF7, 0x7A, 0xA8, 0xA5, 0x91, 0x84,
0x7C, 0x60, 0x03, 0x06, 0x3B, 0xCD, 0x50, 0xB6, 0x27, 0x9C, 0xFE, 0xB1, 0xDD, 0xCC, 0xD3, 0xB0,
0x59, 0x24, 0xB2, 0xCA, 0xE2, 0x1C, 0x81, 0x22, 0x9D, 0x07, 0x8F, 0x8E, 0xB9, 0xBE, 0x4E, 0xFA,
0xFC, 0x39, 0x65, 0xBA, 0xBF, 0x9D, 0x12, 0x37, 0x5E, 0x97, 0x7E, 0xF3, 0x89, 0xF5, 0x5D, 0xF5,
0xE3, 0x09, 0x8C, 0x62, 0xB5, 0x20, 0x9D, 0x0C, 0x53, 0x8A, 0x68, 0x1B, 0xD2, 0x8F, 0x75, 0x17,
0x5D, 0xD4, 0xE5, 0xDA, 0x75, 0x62, 0x19, 0x14, 0x6A, 0x26, 0x2D, 0xEB, 0xF8, 0xAF, 0x37, 0xF0,
0x6C, 0xA4, 0x55, 0xB1, 0xBC, 0xE2, 0x33, 0xC0, 0x9A, 0xCA, 0xB0, 0x11, 0x49, 0x4F, 0x68, 0x9B,
0x3B, 0x6B, 0x3C, 0xCC, 0x13, 0xF6, 0xC7, 0x85, 0x61, 0x68, 0x42, 0xAE, 0xBB, 0xDD, 0xCD, 0x45,
0x16, 0x29, 0x1D, 0xEA, 0xDB, 0xC8, 0x03, 0x94, 0x3C, 0xEE, 0x4F, 0x82, 0x11, 0xC3, 0xEC, 0x28,
0xBD, 0x97, 0x05, 0x99, 0xDE, 0xD7, 0xBB, 0x5E, 0x22, 0x1F, 0xD4, 0xEB, 0x64, 0xD9, 0x92, 0xD9,
0x85, 0xB7, 0x6A, 0x05, 0x6A, 0xE4, 0x24, 0x41, 0xF1, 0xCD, 0xF0, 0xD8, 0x3F, 0xF8, 0x9E, 0x0E,
0xCD, 0x0B, 0x7A, 0x70, 0x6B, 0x5A, 0x75, 0x0A, 0x6A, 0x33, 0x88, 0xEC, 0x17, 0x75, 0x08, 0x70,
0x10, 0x2F, 0x24, 0xCF, 0xC4, 0xE9, 0x42, 0x00, 0x61, 0x94, 0xCA, 0x1F, 0x3A, 0x76, 0x06, 0xFA,
0xD2, 0x48, 0x81, 0xF0, 0x77, 0x60, 0x03, 0x45, 0xD9, 0x61, 0xF4, 0xA4, 0x6F, 0x3D, 0xD9, 0x30,
0xC3, 0x04, 0x6B, 0x54, 0x2A, 0xB7, 0xEC, 0x3B, 0xF4, 0x4B, 0xF5, 0x68, 0x52, 0x26, 0xCE, 0xFF,
0x5D, 0x19, 0x91, 0xA0, 0xA3, 0xA5, 0xA9, 0xB1, 0xE0, 0x23, 0xC4, 0x0A, 0x77, 0x4D, 0xF9, 0x51,
0x20, 0xA3, 0xA5, 0xA9, 0xB1, 0xC1, 0x00, 0x82, 0x86, 0x8E, 0x7F, 0x5D, 0x19, 0x91, 0xA0, 0xA3,
0xC4, 0xEB, 0x54, 0x0B, 0x75, 0x68, 0x52, 0x07, 0x8C, 0x9A, 0x97, 0x8D, 0x79, 0x70, 0x62, 0x46,
0xEF, 0x5C, 0x1B, 0x95, 0x89, 0x71, 0x41, 0xE1, 0x21, 0xA1, 0xA1, 0xA1, 0xC0, 0x02, 0x67, 0x4C,
0x1A, 0xB6, 0xCF, 0xFD, 0x78, 0x53, 0x24, 0xAB, 0xB5, 0xC9, 0xF1, 0x60, 0x23, 0xA5, 0xC8, 0x12,
0x87, 0x6D, 0x58, 0x13, 0x85, 0x88, 0x92, 0x87, 0x6D, 0x58, 0x32, 0xC7, 0x0C, 0x9A, 0x97, 0xAC,
0xDA, 0x36, 0xEE, 0x5E, 0x3E, 0xDF, 0x1D, 0xB8, 0xF2, 0x66, 0x2F, 0xBD, 0xF8, 0x72, 0x47, 0xED,
0x58, 0x13, 0x85, 0x88, 0x92, 0x87, 0x8C, 0x7B, 0x55, 0x09, 0x90, 0xA2, 0xC6, 0xEF, 0x3D, 0xF8,
0x53, 0x24, 0xAB, 0xD4, 0x2A, 0xB7, 0xEC, 0x5A, 0x36, 0xEE, 0x5E, 0x3E, 0xDF, 0x3C, 0xFA, 0x76,
0x4F, 0xFD, 0x59, 0x30, 0xE2, 0x46, 0xEF, 0x3D, 0xF8, 0x53, 0x05, 0x69, 0x31, 0xC1, 0x00, 0x82,
0x86, 0x8E, 0x7F, 0x5D, 0x19, 0xB0, 0xE2, 0x27, 0xCC, 0xFB, 0x74, 0x4B, 0x14, 0x8B, 0x94, 0x8B,
0x75, 0x68, 0x33, 0xC5, 0x08, 0x92, 0x87, 0x8C, 0x9A, 0xB6, 0xCF, 0x1C, 0xBA, 0xD7, 0x0D, 0x98,
0xB2, 0xE6, 0x2F, 0xDC, 0x1B, 0x95, 0x89, 0x71, 0x60, 0x23, 0xC4, 0x0A, 0x96, 0x8F, 0x9C, 0xBA,
0xF6, 0x6E, 0x3F, 0xFC, 0x5B, 0x15, 0xA8, 0xD2, 0x26, 0xAF, 0xBD, 0xF8, 0x72, 0x66, 0x2F, 0xDC,
0x1B, 0xB4, 0xCB, 0x14, 0x8B, 0x94, 0xAA, 0xB7, 0xCD, 0xF9, 0x51, 0x01, 0x80, 0x82, 0x86, 0x6F,
0x3D, 0xD9, 0x30, 0xE2, 0x27, 0xCC, 0xFB, 0x74, 0x4B, 0x14, 0xAA, 0xB7, 0xCD, 0xF9, 0x70, 0x43,
0x04, 0x6B, 0x35, 0xC9, 0xF1, 0x60, 0x23, 0xA5, 0xC8, 0xF3, 0x45, 0x08, 0x92, 0x87, 0x6D, 0x58,
0x32, 0xE6, 0x2F, 0xBD, 0xF8, 0x72, 0x66, 0x4E, 0x1E, 0xBE, 0xFE, 0x7E, 0x7E, 0x7E, 0x5F, 0x1D,
0x99, 0x91, 0xA0, 0xA3, 0xC4, 0x0A, 0x77, 0x4D, 0x18, 0x93, 0xA4, 0xAB, 0xD4, 0x0B, 0x75, 0x49,
0x10, 0xA2, 0xC6, 0xEF, 0x3D, 0xF8, 0x53, 0x24, 0xAB, 0xB5, 0xE8, 0x33, 0xE4, 0x4A, 0x16, 0xAE,
0xDE, 0x1F, 0xBC, 0xDB, 0x15, 0xA8, 0xB3, 0xC5, 0x08, 0x73, 0x45, 0xE9, 0x31, 0xC1, 0xE1, 0x21,
0xA1, 0xA1, 0xA1, 0xC0, 0x02, 0x86, 0x6F, 0x5C, 0x3A, 0xD7, 0x0D, 0x98, 0x93, 0xA4, 0xCA, 0x16,
0xAE, 0xDE, 0x1F, 0x9D, 0x99, 0xB0, 0xE2, 0x46, 0xEF, 0x3D, 0xF8, 0x72, 0x47, 0x0C, 0x9A, 0xB6,
0xCF, 0xFD, 0x59, 0x11, 0xA0, 0xA3, 0xA5, 0xC8, 0xF3, 0x45, 0x08, 0x92, 0x87, 0x6D, 0x39, 0xF0,
0x43, 0x04, 0x8A, 0x96, 0xAE, 0xDE, 0x3E, 0xDF, 0x1D, 0x99, 0x91, 0xA0, 0xC2, 0x06, 0x6F, 0x3D,
0xF8, 0x72, 0x47, 0x0C, 0x9A, 0x97, 0x8D, 0x98, 0x93, 0x85, 0x88, 0x73, 0x45, 0xE9, 0x31, 0xE0,
0x23, 0xA5, 0xA9, 0xD0, 0x03, 0x84, 0x8A, 0x96, 0xAE, 0xDE, 0x1F, 0xBC, 0xDB, 0x15, 0xA8, 0xD2,
0x26, 0xCE, 0xFF, 0x5D, 0x19, 0x91, 0x81, 0x80, 0x82, 0x67, 0x2D, 0xD8, 0x13, 0xA4, 0xAB, 0xD4,
0x0B, 0x94, 0xAA, 0xB7, 0xCD, 0xF9, 0x51, 0x20, 0xA3, 0xA5, 0xC8, 0xF3, 0x45, 0xE9, 0x50, 0x22,
0xC6, 0xEF, 0x5C, 0x3A, 0xD7, 0x0D, 0x98, 0x93, 0x85, 0x88, 0x73, 0x64, 0x4A, 0xF7, 0x4D, 0xF9,
0x51, 0x20, 0xA3, 0xC4, 0x0A, 0x96, 0xAE, 0xDE, 0x3E, 0xFE, 0x7E, 0x7E, 0x7E, 0x5F, 0x3C, 0xFA,
0x76, 0x4F, 0xFD, 0x78, 0x72, 0x66, 0x2F, 0xBD, 0xD9, 0x30, 0xC3, 0xE5, 0x48, 0x12, 0x87, 0x8C,
0x7B, 0x55, 0x28, 0xD2, 0x07, 0x8C, 0x9A, 0x97, 0xAC, 0xDA, 0x17, 0x8D, 0x79, 0x51, 0x20, 0xA3,
0xC4, 0xEB, 0x54, 0x0B, 0x94, 0x8B, 0x94, 0xAA, 0xD6, 0x2E, 0xBF, 0xFC, 0x5B, 0x15, 0xA8, 0xD2,
0x26, 0xAF, 0xDC, 0x1B, 0xB4, 0xEA, 0x37, 0xEC, 0x3B, 0xF4, 0x6A, 0x37, 0xCD, 0x18, 0x93, 0x85,
0x69, 0x31, 0xC1, 0xE1, 0x40, 0xE3, 0x25, 0xC8, 0x12, 0x87, 0x8C, 0x9A, 0xB6, 0xCF, 0xFD, 0x59,
0x11, 0xA0, 0xC2, 0x06, 0x8E, 0x7F, 0x5D, 0x38, 0xF2, 0x47, 0x0C, 0x7B, 0x74, 0x6A, 0x37, 0xEC,
0x5A, 0x36, 0xEE, 0x3F, 0xFC, 0x7A, 0x76, 0x4F, 0x1C, 0x9B, 0x95, 0x89, 0x71, 0x41, 0x00, 0x63,
0x44, 0xEB, 0x54, 0x2A, 0xD6, 0x0F, 0x9C, 0xBA, 0xD7, 0x0D, 0x98, 0x93, 0x85, 0x69, 0x31, 0xC1,
0x00, 0x82, 0x86, 0x8E, 0x9E, 0xBE, 0xDF, 0x3C, 0xFA, 0x57, 0x2C, 0xDA, 0x36, 0xEE, 0x3F, 0xFC,
0x5B, 0x15, 0x89, 0x71, 0x41, 0x00, 0x82, 0x86, 0x8E, 0x7F, 0x5D, 0x38, 0xF2, 0x47, 0xED, 0x58,
0x13, 0xA4, 0xCA, 0xF7, 0x4D, 0xF9, 0x51, 0x01, 0x80, 0x63, 0x44, 0xEB, 0x54, 0x2A, 0xD6, 0x2E,
0xBF, 0xDD, 0x19, 0x91, 0xA0, 0xA3, 0xA5, 0xA9, 0xB1, 0xE0, 0x42, 0x06, 0x8E, 0x7F, 0x5D, 0x19,
0x91, 0xA0, 0xA3, 0xC4, 0x0A, 0x96, 0x8F, 0x7D, 0x78, 0x72, 0x47, 0x0C, 0x7B, 0x74, 0x6A, 0x56,
0x2E, 0xDE, 0x1F, 0xBC, 0xFA, 0x57, 0x0D, 0x79, 0x51, 0x01, 0x61, 0x21, 0xA1, 0xC0, 0xE3, 0x25,
0xA9, 0xB1, 0xC1, 0xE1, 0x40, 0x02, 0x67, 0x4C, 0x1A, 0x97, 0x8D, 0x98, 0x93, 0xA4, 0xAB, 0xD4,
0x2A, 0xD6, 0x0F, 0x9C, 0x9B, 0xB4, 0xCB, 0x14, 0xAA, 0xB7, 0xCD, 0xF9, 0x51, 0x20, 0xA3, 0xC4,
0xEB, 0x35, 0xC9, 0xF1, 0x60, 0x42, 0x06, 0x8E, 0x7F, 0x7C, 0x7A, 0x76, 0x6E, 0x3F, 0xFC, 0x7A,
0x76, 0x6E, 0x5E, 0x3E, 0xFE, 0x7E, 0x5F, 0x3C, 0xDB, 0x15, 0x89, 0x71, 0x41, 0xE1, 0x21, 0xC0,
0xE3, 0x44, 0xEB, 0x54, 0x2A, 0xB7, 0xCD, 0xF9, 0x70, 0x62, 0x27, 0xAD, 0xD8, 0x32, 0xC7, 0x0C,
0x7B, 0x74, 0x4B, 0x14, 0xAA, 0xB7, 0xEC, 0x3B, 0xD5, 0x28, 0xD2, 0x07, 0x6D, 0x39, 0xD1, 0x20,
0xC2, 0xE7, 0x4C, 0x1A, 0x97, 0x8D, 0x98, 0xB2, 0xC7, 0x0C, 0x59, 0x28, 0xF3, 0x9B
};

View File

@@ -1,294 +1,314 @@
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2019 Sunjun Kim
* Copyright 2020 Ploopy Corporation
*
* 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/>.
*/
// Copyright 2022 Stefan Kerkmann (KarlK90)
// Copyright 2021 Alabastard (@Alabastard-64)
// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
// Copyright 2019 Sunjun Kim
// Copyright 2020 Ploopy Corporation
// SPDX-License-Identifier: GPL-2.0-or-later
#include "spi_master.h"
#include "pmw3389.h"
#include "wait.h"
#include "debug.h"
#include "print.h"
#include "pmw3389_firmware.h"
#include "pmw33xx_common.h"
#include "progmem.h"
// Registers
// clang-format off
#define REG_Product_ID 0x00
#define REG_Revision_ID 0x01
#define REG_Motion 0x02
#define REG_Delta_X_L 0x03
#define REG_Delta_X_H 0x04
#define REG_Delta_Y_L 0x05
#define REG_Delta_Y_H 0x06
#define REG_SQUAL 0x07
#define REG_RawData_Sum 0x08
#define REG_Maximum_RawData 0x09
#define REG_Minimum_RawData 0x0a
#define REG_Shutter_Lower 0x0b
#define REG_Shutter_Upper 0x0c
#define REG_Ripple_Control 0x0d
#define REG_Resolution_L 0x0e
#define REG_Resolution_H 0x0f
#define REG_Config2 0x10
#define REG_Angle_Tune 0x11
#define REG_Frame_Capture 0x12
#define REG_SROM_Enable 0x13
#define REG_Run_Downshift 0x14
#define REG_Rest1_Rate_Lower 0x15
#define REG_Rest1_Rate_Upper 0x16
#define REG_Rest1_Downshift 0x17
#define REG_Rest2_Rate_Lower 0x18
#define REG_Rest2_Rate_Upper 0x19
#define REG_Rest2_Downshift 0x1a
#define REG_Rest3_Rate_Lower 0x1b
#define REG_Rest3_Rate_Upper 0x1c
#define REG_Observation 0x24
#define REG_Data_Out_Lower 0x25
#define REG_Data_Out_Upper 0x26
#define REG_SROM_ID 0x2a
#define REG_Min_SQ_Run 0x2b
#define REG_RawData_Threshold 0x2c
#define REG_Control2 0x2d
#define REG_Config5_L 0x2e
#define REG_Config5_H 0x2f
#define REG_Power_Up_Reset 0X3a
#define REG_Shutdown 0x3b
#define REG_Inverse_Product_ID 0x3f
#define REG_LiftCutoff_Cal3 0x41
#define REG_Angle_Snap 0x42
#define REG_LiftCutoff_Cal1 0x4a
#define REG_Motion_Burst 0x50
#define REG_SROM_Load_Burst 0x62
#define REG_Lift_Config 0x63
#define REG_RawData_Burst 0x64
#define REG_LiftCutoff_Cal2 0x65
#define REG_LiftCutoff_Cal_Timeout 0x71
#define REG_LiftCutoff_Cal_Min_Length 0x72
#define REG_PWM_Period_Cnt 0x73
#define REG_PWM_Width_Cnt 0x74
extern const size_t pmw33xx_number_of_sensors;
#define CPI_STEP 50
// clang-format on
// limits to 0--319, resulting in a CPI range of 50 -- 16000 (as only steps of 50 are possible).
#ifndef MAX_CPI
# define MAX_CPI 0x013f
#endif
bool _inBurst = false;
#ifdef CONSOLE_ENABLE
void print_byte(uint8_t byte) {
dprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0'));
}
#endif
#define constrain(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
bool pmw3389_spi_start(void) {
bool status = spi_start(PMW3389_CS_PIN, PMW3389_SPI_LSBFIRST, PMW3389_SPI_MODE, PMW3389_SPI_DIVISOR);
// tNCS-SCLK, 120ns
wait_us(1);
return status;
}
spi_status_t pmw3389_write(uint8_t reg_addr, uint8_t data) {
pmw3389_spi_start();
if (reg_addr != REG_Motion_Burst) {
_inBurst = false;
uint16_t pmw33xx_get_cpi(uint8_t sensor) {
if (sensor >= pmw33xx_number_of_sensors) {
return 0;
}
// send address of the register, with MSBit = 1 to indicate it's a write
spi_status_t status = spi_write(reg_addr | 0x80);
status = spi_write(data);
// tSCLK-NCS for write operation is 35 us
wait_us(35);
spi_stop();
// tSWW/tSWR (=180us) minus tSCLK-NCS. Could be shortened, but is looks like a safe lower bound
wait_us(145);
return status;
uint16_t cpival = (pmw33xx_read(sensor, REG_Resolution_H) << 8) | pmw33xx_read(sensor, REG_Resolution_L);
return (uint16_t)((cpival + 1) & 0xFFFF) * PMW33XX_CPI_STEP;
}
uint8_t pmw3389_read(uint8_t reg_addr) {
pmw3389_spi_start();
// send adress of the register, with MSBit = 0 to indicate it's a read
spi_write(reg_addr & 0x7f);
// tSRAD (=160us)
wait_us(160);
uint8_t data = spi_read();
// tSCLK-NCS, 120ns
wait_us(1);
spi_stop();
// tSRW/tSRR (=20us) minus tSCLK-NCS
wait_us(19);
return data;
}
bool pmw3389_init(void) {
setPinOutput(PMW3389_CS_PIN);
spi_init();
_inBurst = false;
spi_stop();
pmw3389_spi_start();
spi_stop();
pmw3389_write(REG_Shutdown, 0xb6); // Shutdown first
wait_ms(300);
pmw3389_spi_start();
wait_us(40);
spi_stop();
wait_us(40);
// power up, need to first drive NCS high then low, see above.
pmw3389_write(REG_Power_Up_Reset, 0x5a);
wait_ms(50);
// read registers and discard
pmw3389_read(REG_Motion);
pmw3389_read(REG_Delta_X_L);
pmw3389_read(REG_Delta_X_H);
pmw3389_read(REG_Delta_Y_L);
pmw3389_read(REG_Delta_Y_H);
pmw3389_upload_firmware();
spi_stop();
wait_ms(10);
pmw3389_set_cpi(PMW3389_CPI);
wait_ms(1);
pmw3389_write(REG_Config2, 0x00);
pmw3389_write(REG_Angle_Tune, constrain(ROTATIONAL_TRANSFORM_ANGLE, -127, 127));
pmw3389_write(REG_Lift_Config, PMW3389_LIFTOFF_DISTANCE);
bool init_success = pmw3389_check_signature();
#ifdef CONSOLE_ENABLE
if (init_success) {
dprintf("pmw3389 signature verified");
} else {
dprintf("pmw3389 signature verification failed!");
void pmw33xx_set_cpi(uint8_t sensor, uint16_t cpi) {
if (sensor >= pmw33xx_number_of_sensors) {
return;
}
#endif
writePinLow(PMW3389_CS_PIN);
return init_success;
}
void pmw3389_upload_firmware(void) {
// Datasheet claims we need to disable REST mode first, but during startup
// it's already disabled and we're not turning it on ...
// pmw3389_write(REG_Config2, 0x00); // disable REST mode
pmw3389_write(REG_SROM_Enable, 0x1d);
wait_ms(10);
pmw3389_write(REG_SROM_Enable, 0x18);
pmw3389_spi_start();
spi_write(REG_SROM_Load_Burst | 0x80);
wait_us(15);
for (uint16_t i = 0; i < FIRMWARE_LENGTH; i++) {
spi_write(pgm_read_byte(firmware_data + i));
#ifndef PMW3389_FIRMWARE_UPLOAD_FAST
wait_us(15);
#endif
}
wait_us(200);
pmw3389_read(REG_SROM_ID);
pmw3389_write(REG_Config2, 0x00);
}
bool pmw3389_check_signature(void) {
uint8_t pid = pmw3389_read(REG_Product_ID);
uint8_t iv_pid = pmw3389_read(REG_Inverse_Product_ID);
uint8_t SROM_ver = pmw3389_read(REG_SROM_ID);
return (pid == firmware_signature[0] && iv_pid == firmware_signature[1] && SROM_ver == firmware_signature[2]); // signature for SROM 0x04
}
uint16_t pmw3389_get_cpi(void) {
uint16_t cpival = (pmw3389_read(REG_Resolution_H) << 8) | pmw3389_read(REG_Resolution_L);
return (uint16_t)((cpival + 1) & 0xffff) * CPI_STEP;
}
void pmw3389_set_cpi(uint16_t cpi) {
uint16_t cpival = constrain((cpi / CPI_STEP) - 1, 0, MAX_CPI);
uint16_t cpival = CONSTRAIN((cpi / PMW33XX_CPI_STEP) - 1, 0, (PMW33XX_CPI_MAX / PMW33XX_CPI_STEP) - 1U);
// Sets upper byte first for more consistent setting of cpi
pmw3389_write(REG_Resolution_H, (cpival >> 8) & 0xff);
pmw3389_write(REG_Resolution_L, cpival & 0xff);
pmw33xx_write(sensor, REG_Resolution_H, (cpival >> 8) & 0xFF);
pmw33xx_write(sensor, REG_Resolution_L, cpival & 0xFF);
}
report_pmw3389_t pmw3389_read_burst(void) {
report_pmw3389_t report = {0};
// PID, Inverse PID, SROM version
const uint8_t pmw33xx_firmware_signature[3] PROGMEM = {0x42, 0xBD, 0x04};
if (!_inBurst) {
#ifdef CONSOLE_ENABLE
dprintf("burst on");
#endif
pmw3389_write(REG_Motion_Burst, 0x00);
_inBurst = true;
}
// Firmware Blob for PMW3389
// clang-format off
const uint8_t pmw33xx_firmware_data[PMW33XX_FIRMWARE_LENGTH] PROGMEM = {
0x01, 0xe8, 0xba, 0x26, 0x0b, 0xb2, 0xbe, 0xfe, 0x7e, 0x5f, 0x3c, 0xdb, 0x15, 0xa8, 0xb3,
0xe4, 0x2b, 0xb5, 0xe8, 0x53, 0x07, 0x6d, 0x3b, 0xd1, 0x20, 0xc2, 0x06, 0x6f, 0x3d, 0xd9,
0x11, 0xa0, 0xc2, 0xe7, 0x2d, 0xb9, 0xd1, 0x20, 0xa3, 0xa5, 0xc8, 0xf3, 0x64, 0x4a, 0xf7,
0x4d, 0x18, 0x93, 0xa4, 0xca, 0xf7, 0x6c, 0x5a, 0x36, 0xee, 0x5e, 0x3e, 0xfe, 0x7e, 0x7e,
0x5f, 0x1d, 0x99, 0xb0, 0xc3, 0xe5, 0x29, 0xd3, 0x03, 0x65, 0x48, 0x12, 0x87, 0x6d, 0x58,
0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xf2, 0x4f, 0xfd, 0x59, 0x11, 0x81, 0x61, 0x21, 0xc0, 0x02,
0x86, 0x8e, 0x7f, 0x5d, 0x38, 0xf2, 0x47, 0x0c, 0x7b, 0x55, 0x28, 0xb3, 0xe4, 0x4a, 0x16,
0xab, 0xbf, 0xdd, 0x38, 0xf2, 0x66, 0x4e, 0xff, 0x5d, 0x19, 0x91, 0xa0, 0xa3, 0xa5, 0xc8,
0x12, 0xa6, 0xaf, 0xdc, 0x3a, 0xd1, 0x41, 0x60, 0x75, 0x58, 0x24, 0x92, 0xd4, 0x72, 0x6c,
0xe0, 0x2f, 0xfd, 0x23, 0x8d, 0x1c, 0x5b, 0xb2, 0x97, 0x36, 0x3d, 0x0b, 0xa2, 0x49, 0xb1,
0x58, 0xf2, 0x1f, 0xc0, 0xcb, 0xf8, 0x41, 0x4f, 0xcd, 0x1e, 0x6b, 0x39, 0xa7, 0x2b, 0xe9,
0x30, 0x16, 0x83, 0xd2, 0x0e, 0x47, 0x8f, 0xe3, 0xb1, 0xdf, 0xa2, 0x15, 0xdb, 0x5d, 0x30,
0xc5, 0x1a, 0xab, 0x31, 0x99, 0xf3, 0xfa, 0xb2, 0x86, 0x69, 0xad, 0x7a, 0xe8, 0xa7, 0x18,
0x6a, 0xcc, 0xc8, 0x65, 0x23, 0x87, 0xa8, 0x5f, 0xf5, 0x21, 0x59, 0x75, 0x09, 0x71, 0x45,
0x55, 0x25, 0x4b, 0xda, 0xa1, 0xc3, 0xf7, 0x41, 0xab, 0x59, 0xd9, 0x74, 0x12, 0x55, 0x5f,
0xbc, 0xaf, 0xd9, 0xfd, 0xb0, 0x1e, 0xa3, 0x0f, 0xff, 0xde, 0x11, 0x16, 0x6a, 0xae, 0x0e,
0xe1, 0x5d, 0x3c, 0x10, 0x43, 0x9a, 0xa1, 0x0b, 0x24, 0x8f, 0x0d, 0x7f, 0x0b, 0x5e, 0x4c,
0x42, 0xa4, 0x84, 0x2c, 0x40, 0xd0, 0x55, 0x39, 0xe6, 0x4b, 0xf8, 0x9b, 0x2f, 0xdc, 0x28,
0xff, 0xfa, 0xb5, 0x85, 0x19, 0xe5, 0x28, 0xa1, 0x77, 0xaa, 0x73, 0xf3, 0x03, 0xc7, 0x62,
0xa6, 0x91, 0x18, 0xc9, 0xb0, 0xcd, 0x05, 0xdc, 0xca, 0x81, 0x26, 0x1a, 0x47, 0x40, 0xda,
0x36, 0x7d, 0x6a, 0x53, 0xc8, 0x5a, 0x77, 0x5d, 0x19, 0xa4, 0x1b, 0x23, 0x83, 0xd0, 0xb2,
0xaa, 0x0e, 0xbf, 0x77, 0x4e, 0x3a, 0x3b, 0x59, 0x00, 0x31, 0x0d, 0x02, 0x1b, 0x88, 0x7a,
0xd4, 0xbd, 0x9d, 0xcc, 0x58, 0x04, 0x69, 0xf6, 0x3b, 0xca, 0x42, 0xe2, 0xfd, 0xc3, 0x3d,
0x39, 0xc5, 0xd0, 0x71, 0xe4, 0xc8, 0xb7, 0x3e, 0x3f, 0xc8, 0xe9, 0xca, 0xc9, 0x3f, 0x04,
0x4e, 0x1b, 0x79, 0xca, 0xa5, 0x61, 0xc2, 0xed, 0x1d, 0xa6, 0xda, 0x5a, 0xe9, 0x7f, 0x65,
0x8c, 0xbe, 0x12, 0x6e, 0xa4, 0x5b, 0x33, 0x2f, 0x84, 0x28, 0x9c, 0x1c, 0x88, 0x2d, 0xff,
0x07, 0xbf, 0xa6, 0xd7, 0x5a, 0x88, 0x86, 0xb0, 0x3f, 0xf6, 0x31, 0x5b, 0x11, 0x6d, 0xf5,
0x58, 0xeb, 0x58, 0x02, 0x9e, 0xb5, 0x9a, 0xb1, 0xff, 0x25, 0x9d, 0x8b, 0x4f, 0xb6, 0x0a,
0xf9, 0xea, 0x3e, 0x3f, 0x21, 0x09, 0x65, 0x21, 0x22, 0xfe, 0x3d, 0x4e, 0x11, 0x5b, 0x9e,
0x5a, 0x59, 0x8b, 0xdd, 0xd8, 0xce, 0xd6, 0xd9, 0x59, 0xd2, 0x1e, 0xfd, 0xef, 0x0d, 0x1b,
0xd9, 0x61, 0x7f, 0xd7, 0x2d, 0xad, 0x62, 0x09, 0xe5, 0x22, 0x63, 0xea, 0xc7, 0x31, 0xd9,
0xa1, 0x38, 0x80, 0x5c, 0xa7, 0x32, 0x82, 0xec, 0x1b, 0xa2, 0x49, 0x5a, 0x06, 0xd2, 0x7c,
0xc9, 0x96, 0x57, 0xbb, 0x17, 0x75, 0xfc, 0x7a, 0x8f, 0x0d, 0x77, 0xb5, 0x7a, 0x8e, 0x3e,
0xf4, 0xba, 0x2f, 0x69, 0x13, 0x26, 0xd6, 0xd9, 0x21, 0x60, 0x2f, 0x21, 0x3e, 0x87, 0xee,
0xfd, 0x87, 0x16, 0x0d, 0xc8, 0x08, 0x00, 0x25, 0x71, 0xac, 0x2c, 0x03, 0x2a, 0x37, 0x2d,
0xb3, 0x34, 0x09, 0x91, 0xe3, 0x06, 0x2c, 0x38, 0x37, 0x95, 0x3b, 0x17, 0x7a, 0xaf, 0xac,
0x99, 0x55, 0xab, 0x41, 0x39, 0x5f, 0x8e, 0xa6, 0x43, 0x80, 0x03, 0x88, 0x6f, 0x7d, 0xbd,
0x5a, 0xb4, 0x2b, 0x32, 0x23, 0x5a, 0xa9, 0x31, 0x32, 0x39, 0x4c, 0x5b, 0xf4, 0x6b, 0xaf,
0x66, 0x6f, 0x3c, 0x8e, 0x2d, 0x82, 0x97, 0x9f, 0x4a, 0x01, 0xdc, 0x99, 0x98, 0x00, 0xec,
0x38, 0x7a, 0x79, 0x70, 0xa6, 0x85, 0xd6, 0x21, 0x63, 0x0d, 0x45, 0x9a, 0x2e, 0x5e, 0xa7,
0xb1, 0xea, 0x66, 0x6a, 0xbc, 0x62, 0x2d, 0x7b, 0x7d, 0x85, 0xea, 0x95, 0x2f, 0xc0, 0xe8,
0x6f, 0x35, 0xa0, 0x3a, 0x02, 0x25, 0xbc, 0xb2, 0x5f, 0x5c, 0x43, 0x96, 0xcc, 0x26, 0xd2,
0x16, 0xb4, 0x96, 0x73, 0xd7, 0x13, 0xc7, 0xae, 0x53, 0x15, 0x31, 0x89, 0x68, 0x66, 0x6d,
0x2c, 0x92, 0x1f, 0xcc, 0x5b, 0xa7, 0x8f, 0x5d, 0xbb, 0xc9, 0xdb, 0xe8, 0x3b, 0x9d, 0x61,
0x74, 0x8b, 0x05, 0xa1, 0x58, 0x52, 0x68, 0xee, 0x3d, 0x39, 0x79, 0xa0, 0x9b, 0xdd, 0xe1,
0x55, 0xc9, 0x60, 0xeb, 0xad, 0xb8, 0x5b, 0xc2, 0x5a, 0xb5, 0x2c, 0x18, 0x55, 0xa9, 0x50,
0xc3, 0xf6, 0x72, 0x5f, 0xcc, 0xe2, 0xf4, 0x55, 0xb5, 0xd6, 0xb5, 0x4a, 0x99, 0xa5, 0x28,
0x74, 0x97, 0x18, 0xe8, 0xc0, 0x84, 0x89, 0x50, 0x03, 0x86, 0x4d, 0x1a, 0xb7, 0x09, 0x90,
0xa2, 0x01, 0x04, 0xbb, 0x73, 0x62, 0xcb, 0x97, 0x22, 0x70, 0x5d, 0x52, 0x41, 0x8e, 0xd9,
0x90, 0x15, 0xaa, 0xab, 0x0a, 0x31, 0x65, 0xb4, 0xda, 0xd0, 0xee, 0x24, 0xc9, 0x41, 0x91,
0x1e, 0xbc, 0x46, 0x70, 0x40, 0x9d, 0xda, 0x0e, 0x2a, 0xe4, 0xb2, 0x4c, 0x9f, 0xf2, 0xfc,
0xf3, 0x84, 0x17, 0x44, 0x1e, 0xd7, 0xca, 0x23, 0x1f, 0x3f, 0x5a, 0x22, 0x3d, 0xaf, 0x9b,
0x2d, 0xfc, 0x41, 0xad, 0x26, 0xb4, 0x45, 0x67, 0x0b, 0x80, 0x0e, 0xf9, 0x61, 0x37, 0xec,
0x3b, 0xf4, 0x4b, 0x14, 0xdf, 0x5a, 0x0c, 0x3a, 0x50, 0x0b, 0x14, 0x0c, 0x72, 0xae, 0xc6,
0xc5, 0xec, 0x35, 0x53, 0x2d, 0x59, 0xed, 0x91, 0x74, 0xe2, 0xc4, 0xc8, 0xf2, 0x25, 0x6b,
0x97, 0x6f, 0xc9, 0x76, 0xce, 0xa9, 0xb1, 0x99, 0x8f, 0x5a, 0x92, 0x3b, 0xc4, 0x8d, 0x54,
0x50, 0x40, 0x72, 0xd6, 0x90, 0x83, 0xfc, 0xe5, 0x49, 0x8b, 0x17, 0xf5, 0xfd, 0x6b, 0x8d,
0x32, 0x02, 0xe9, 0x0a, 0xfe, 0xbf, 0x00, 0x6b, 0xa3, 0xad, 0x5f, 0x09, 0x4b, 0x97, 0x2b,
0x00, 0x58, 0x65, 0x2e, 0x07, 0x49, 0x0a, 0x3b, 0x6b, 0x2e, 0x50, 0x6c, 0x1d, 0xac, 0xb7,
0x6a, 0x26, 0xd8, 0x13, 0xa4, 0xca, 0x16, 0xae, 0xab, 0x93, 0xb9, 0x1c, 0x1c, 0xb4, 0x47,
0x6a, 0x38, 0x36, 0x17, 0x27, 0xc9, 0x7f, 0xc7, 0x64, 0xcb, 0x89, 0x58, 0xc5, 0x61, 0xc2,
0xc6, 0xea, 0x15, 0x0b, 0x34, 0x0c, 0x5d, 0x61, 0x76, 0x6e, 0x2b, 0x62, 0x40, 0x92, 0xa3,
0x6c, 0xef, 0xf4, 0xe4, 0xc3, 0xa1, 0xa8, 0xf5, 0x94, 0x79, 0x0d, 0xd1, 0x3d, 0xcb, 0x3d,
0x40, 0xb6, 0xd0, 0xf0, 0x10, 0x54, 0xd8, 0x47, 0x25, 0x51, 0xc5, 0x41, 0x79, 0x00, 0xe5,
0xa0, 0x72, 0xde, 0xbb, 0x3b, 0x62, 0x17, 0xf6, 0xbc, 0x5d, 0x00, 0x76, 0x2e, 0xa7, 0x3b,
0xb6, 0xf1, 0x98, 0x72, 0x59, 0x2a, 0x73, 0xb0, 0x21, 0xd6, 0x49, 0xe0, 0xc0, 0xd5, 0xeb,
0x02, 0x7d, 0x4b, 0x41, 0x28, 0x70, 0x2d, 0xec, 0x2b, 0x71, 0x1f, 0x0b, 0xb9, 0x71, 0x63,
0x06, 0xe6, 0xbc, 0x60, 0xbb, 0xf4, 0x9a, 0x62, 0x43, 0x09, 0x18, 0x4e, 0x93, 0x06, 0x4d,
0x76, 0xfa, 0x7f, 0xbd, 0x02, 0xe4, 0x50, 0x91, 0x12, 0xe5, 0x86, 0xff, 0x64, 0x1e, 0xaf,
0x7e, 0xb3, 0xb2, 0xde, 0x89, 0xc1, 0xa2, 0x6f, 0x40, 0x7b, 0x41, 0x51, 0x63, 0xea, 0x25,
0xd1, 0x97, 0x57, 0x92, 0xa8, 0x45, 0xa1, 0xa5, 0x45, 0x21, 0x43, 0x7f, 0x83, 0x15, 0x29,
0xd0, 0x30, 0x53, 0x32, 0xb4, 0x5a, 0x17, 0x96, 0xbc, 0xc2, 0x68, 0xa9, 0xb7, 0xaf, 0xac,
0xdf, 0xf1, 0xe3, 0x89, 0xba, 0x24, 0x79, 0x54, 0xc6, 0x14, 0x07, 0x1c, 0x1e, 0x0d, 0x3a,
0x6b, 0xe5, 0x3d, 0x4e, 0x10, 0x60, 0x96, 0xec, 0x6c, 0xda, 0x47, 0xae, 0x03, 0x25, 0x39,
0x1d, 0x74, 0xc8, 0xac, 0x6a, 0xf2, 0x6b, 0x05, 0x2a, 0x9a, 0xe7, 0xe8, 0x92, 0xd6, 0xc2,
0x6d, 0xfa, 0xe8, 0xa7, 0x9d, 0x5f, 0x48, 0xc9, 0x75, 0xf1, 0x66, 0x6a, 0xdb, 0x5d, 0x9a,
0xcd, 0x27, 0xdd, 0xb9, 0x24, 0x04, 0x9c, 0x18, 0xc2, 0x6d, 0x0c, 0x91, 0x34, 0x48, 0x42,
0x6f, 0xe9, 0x59, 0x70, 0xc4, 0x7e, 0x81, 0x0e, 0x32, 0x0a, 0x93, 0x48, 0xb0, 0xc0, 0x15,
0x9e, 0x05, 0xac, 0x36, 0x16, 0xcb, 0x59, 0x65, 0xa0, 0x83, 0xdf, 0x3e, 0xda, 0xfb, 0x1d,
0x1a, 0xdb, 0x65, 0xec, 0x9a, 0xc6, 0xc3, 0x8e, 0x3c, 0x45, 0xfd, 0xc8, 0xf5, 0x1c, 0x6a,
0x67, 0x0d, 0x8f, 0x99, 0x7d, 0x30, 0x21, 0x8c, 0xea, 0x22, 0x87, 0x65, 0xc9, 0xb2, 0x4c,
0xe4, 0x1b, 0x46, 0xba, 0x54, 0xbd, 0x7c, 0xca, 0xd5, 0x8f, 0x5b, 0xa5, 0x01, 0x04, 0xd8,
0x0a, 0x16, 0xbf, 0xb9, 0x50, 0x2e, 0x37, 0x2f, 0x64, 0xf3, 0x70, 0x11, 0x02, 0x05, 0x31,
0x9b, 0xa0, 0xb2, 0x01, 0x5e, 0x4f, 0x19, 0xc9, 0xd4, 0xea, 0xa1, 0x79, 0x54, 0x53, 0xa7,
0xde, 0x2f, 0x49, 0xd3, 0xd1, 0x63, 0xb5, 0x03, 0x15, 0x4e, 0xbf, 0x04, 0xb3, 0x26, 0x8b,
0x20, 0xb2, 0x45, 0xcf, 0xcd, 0x5b, 0x82, 0x32, 0x88, 0x61, 0xa7, 0xa8, 0xb2, 0xa0, 0x72,
0x96, 0xc0, 0xdb, 0x2b, 0xe2, 0x5f, 0xba, 0xe3, 0xf5, 0x8a, 0xde, 0xf1, 0x18, 0x01, 0x16,
0x40, 0xd9, 0x86, 0x12, 0x09, 0x18, 0x1b, 0x05, 0x0c, 0xb1, 0xb5, 0x47, 0xe2, 0x43, 0xab,
0xfe, 0x92, 0x63, 0x7e, 0x95, 0x2b, 0xf0, 0xaf, 0xe1, 0xf1, 0xc3, 0x4a, 0xff, 0x2b, 0x09,
0xbb, 0x4a, 0x0e, 0x9a, 0xc4, 0xd8, 0x64, 0x7d, 0x83, 0xa0, 0x4f, 0x44, 0xdb, 0xc4, 0xa8,
0x58, 0xef, 0xfc, 0x9e, 0x77, 0xf9, 0xa6, 0x8f, 0x58, 0x8b, 0x12, 0xf4, 0xe9, 0x81, 0x12,
0x47, 0x51, 0x41, 0x83, 0xef, 0xf6, 0x73, 0xbc, 0x8e, 0x0f, 0x4c, 0x8f, 0x4e, 0x69, 0x90,
0x77, 0x29, 0x5d, 0x92, 0xb0, 0x6d, 0x06, 0x67, 0x29, 0x60, 0xbd, 0x4b, 0x17, 0xc8, 0x89,
0x69, 0x28, 0x29, 0xd6, 0x78, 0xcb, 0x11, 0x4c, 0xba, 0x8b, 0x68, 0xae, 0x7e, 0x9f, 0xef,
0x95, 0xda, 0xe2, 0x9e, 0x7f, 0xe9, 0x55, 0xe5, 0xe1, 0xe2, 0xb7, 0xe6, 0x5f, 0xbb, 0x2c,
0xa2, 0xe6, 0xee, 0xc7, 0x0a, 0x60, 0xa9, 0xd1, 0x80, 0xdf, 0x7f, 0xd6, 0x97, 0xab, 0x1d,
0x22, 0x25, 0xfc, 0x79, 0x23, 0xe0, 0xae, 0xc5, 0xef, 0x16, 0xa4, 0xa1, 0x0f, 0x92, 0xa9,
0xc7, 0xe3, 0x3a, 0x55, 0xdf, 0x62, 0x49, 0xd9, 0xf5, 0x84, 0x49, 0xc5, 0x90, 0x34, 0xd3,
0xe1, 0xac, 0x99, 0x21, 0xb1, 0x02, 0x76, 0x4a, 0xfa, 0xd4, 0xbb, 0xa4, 0x9c, 0xa2, 0xe2,
0xcb, 0x3d, 0x3b, 0x14, 0x75, 0x60, 0xd1, 0x02, 0xb4, 0xa3, 0xb4, 0x72, 0x06, 0xf9, 0x19,
0x9c, 0xe2, 0xe4, 0xa7, 0x0f, 0x25, 0x88, 0xc6, 0x86, 0xd6, 0x8c, 0x74, 0x4e, 0x6e, 0xfc,
0xa8, 0x48, 0x9e, 0xa7, 0x9d, 0x1a, 0x4b, 0x37, 0x09, 0xc8, 0xb0, 0x10, 0xbe, 0x6f, 0xfe,
0xa3, 0xc4, 0x7a, 0xb5, 0x3d, 0xe8, 0x30, 0xf1, 0x0d, 0xa0, 0xb2, 0x44, 0xfc, 0x9b, 0x8c,
0xf8, 0x61, 0xed, 0x81, 0xd1, 0x62, 0x11, 0xb4, 0xe1, 0xd5, 0x39, 0x52, 0x89, 0xd3, 0xa8,
0x49, 0x31, 0xdf, 0xb6, 0xf9, 0x91, 0xf4, 0x1c, 0x9d, 0x09, 0x95, 0x40, 0x56, 0xe7, 0xe3,
0xcd, 0x5c, 0x92, 0xc1, 0x1d, 0x6b, 0xe9, 0x78, 0x6f, 0x8e, 0x94, 0x42, 0x66, 0xa2, 0xaa,
0xd3, 0xc8, 0x2e, 0xe3, 0xf6, 0x07, 0x72, 0x0b, 0x6b, 0x1e, 0x7b, 0xb9, 0x7c, 0xe0, 0xa0,
0xbc, 0xd9, 0x25, 0xdf, 0x87, 0xa8, 0x5f, 0x9c, 0xcc, 0xf0, 0xdb, 0x42, 0x8e, 0x07, 0x31,
0x13, 0x01, 0x66, 0x32, 0xd1, 0xb8, 0xd6, 0xe3, 0x5e, 0x12, 0x76, 0x61, 0xd3, 0x38, 0x89,
0xe6, 0x17, 0x6f, 0xa5, 0xf2, 0x71, 0x0e, 0xa5, 0xe2, 0x88, 0x30, 0xbb, 0xbe, 0x8a, 0xea,
0xc7, 0x62, 0xc4, 0xcf, 0xb8, 0xcd, 0x33, 0x8d, 0x3d, 0x3e, 0xb5, 0x60, 0x3a, 0x03, 0x92,
0xe4, 0x6d, 0x1b, 0xe0, 0xb4, 0x84, 0x08, 0x55, 0x88, 0xa7, 0x3a, 0xb9, 0x3d, 0x43, 0xc3,
0xc0, 0xfa, 0x07, 0x6a, 0xca, 0x94, 0xad, 0x99, 0x55, 0xf1, 0xf1, 0xc0, 0x23, 0x87, 0x1d,
0x3d, 0x1c, 0xd1, 0x66, 0xa0, 0x57, 0x10, 0x52, 0xa2, 0x7f, 0xbe, 0xf9, 0x88, 0xb6, 0x02,
0xbf, 0x08, 0x23, 0xa9, 0x0c, 0x63, 0x17, 0x2a, 0xae, 0xf5, 0xf7, 0xb7, 0x21, 0x83, 0x92,
0x31, 0x23, 0x0d, 0x20, 0xc3, 0xc2, 0x05, 0x21, 0x62, 0x8e, 0x45, 0xe8, 0x14, 0xc1, 0xda,
0x75, 0xb8, 0xf8, 0x92, 0x01, 0xd0, 0x5d, 0x18, 0x9f, 0x99, 0x11, 0x19, 0xf5, 0x35, 0xe8,
0x7f, 0x20, 0x88, 0x8c, 0x05, 0x75, 0xf5, 0xd7, 0x40, 0x17, 0xbb, 0x1e, 0x36, 0x52, 0xd9,
0xa4, 0x9c, 0xc2, 0x9d, 0x42, 0x81, 0xd8, 0xc7, 0x8a, 0xe7, 0x4c, 0x81, 0xe0, 0xb7, 0x57,
0xed, 0x48, 0x8b, 0xf0, 0x97, 0x15, 0x61, 0xd9, 0x2c, 0x7c, 0x45, 0xaf, 0xc2, 0xcd, 0xfc,
0xaa, 0x13, 0xad, 0x59, 0xcc, 0xb2, 0xb2, 0x6e, 0xdd, 0x63, 0x9c, 0x32, 0x0f, 0xec, 0x83,
0xbe, 0x78, 0xac, 0x91, 0x44, 0x1a, 0x1f, 0xea, 0xfd, 0x5d, 0x8e, 0xb4, 0xc0, 0x84, 0xd4,
0xac, 0xb4, 0x87, 0x5f, 0xac, 0xef, 0xdf, 0xcd, 0x12, 0x56, 0xc8, 0xcd, 0xfe, 0xc5, 0xda,
0xd3, 0xc1, 0x69, 0xf3, 0x61, 0x05, 0xea, 0x25, 0xe2, 0x12, 0x05, 0x8f, 0x39, 0x08, 0x08,
0x7c, 0x37, 0xb6, 0x7e, 0x5b, 0xd8, 0xb1, 0x0e, 0xf2, 0xdb, 0x4b, 0xf1, 0xad, 0x90, 0x01,
0x57, 0xcd, 0xa0, 0xb4, 0x52, 0xe8, 0xf3, 0xd7, 0x8a, 0xbd, 0x4f, 0x9f, 0x21, 0x40, 0x72,
0xa4, 0xfc, 0x0b, 0x01, 0x2b, 0x2f, 0xb6, 0x4c, 0x95, 0x2d, 0x35, 0x33, 0x41, 0x6b, 0xa0,
0x93, 0xe7, 0x2c, 0xf2, 0xd3, 0x72, 0x8b, 0xf4, 0x4f, 0x15, 0x3c, 0xaf, 0xd6, 0x12, 0xde,
0x3f, 0x83, 0x3f, 0xff, 0xf8, 0x7f, 0xf6, 0xcc, 0xa6, 0x7f, 0xc9, 0x9a, 0x6e, 0x1f, 0xc1,
0x0c, 0xfb, 0xee, 0x9c, 0xe7, 0xaf, 0xc9, 0x26, 0x54, 0xef, 0xb0, 0x39, 0xef, 0xb2, 0xe9,
0x23, 0xc4, 0xef, 0xd1, 0xa1, 0xa4, 0x25, 0x24, 0x6f, 0x8d, 0x6a, 0xe5, 0x8a, 0x32, 0x3a,
0xaf, 0xfc, 0xda, 0xce, 0x18, 0x25, 0x42, 0x07, 0x4d, 0x45, 0x8b, 0xdf, 0x85, 0xcf, 0x55,
0xb2, 0x24, 0xfe, 0x9c, 0x69, 0x74, 0xa7, 0x6e, 0xa0, 0xce, 0xc0, 0x39, 0xf4, 0x86, 0xc6,
0x8d, 0xae, 0xb9, 0x48, 0x64, 0x13, 0x0b, 0x40, 0x81, 0xa2, 0xc9, 0xa8, 0x85, 0x51, 0xee,
0x9f, 0xcf, 0xa2, 0x8c, 0x19, 0x52, 0x48, 0xe2, 0xc1, 0xa8, 0x58, 0xb4, 0x10, 0x24, 0x06,
0x58, 0x51, 0xfc, 0xb9, 0x12, 0xec, 0xfd, 0x73, 0xb4, 0x6d, 0x84, 0xfa, 0x06, 0x8b, 0x05,
0x0b, 0x2d, 0xd6, 0xd6, 0x1f, 0x29, 0x82, 0x9f, 0x19, 0x12, 0x1e, 0xb2, 0x04, 0x8f, 0x7f,
0x4d, 0xbd, 0x30, 0x2e, 0xe3, 0xe0, 0x88, 0x29, 0xc5, 0x93, 0xd6, 0x6c, 0x1f, 0x29, 0x45,
0x91, 0xa7, 0x58, 0xcd, 0x05, 0x17, 0xd6, 0x6d, 0xb3, 0xca, 0x66, 0xcc, 0x3c, 0x4a, 0x74,
0xfd, 0x08, 0x10, 0xa6, 0x99, 0x92, 0x10, 0xd2, 0x85, 0xab, 0x6e, 0x1d, 0x0e, 0x8b, 0x26,
0x46, 0xd1, 0x6c, 0x84, 0xc0, 0x26, 0x43, 0x59, 0x68, 0xf0, 0x13, 0x1d, 0xfb, 0xe3, 0xd1,
0xd2, 0xb4, 0x71, 0x9e, 0xf2, 0x59, 0x6a, 0x33, 0x29, 0x79, 0xd2, 0xd7, 0x26, 0xf1, 0xae,
0x78, 0x9e, 0x1f, 0x0f, 0x3f, 0xe3, 0xe8, 0xd0, 0x27, 0x78, 0x77, 0xf6, 0xac, 0x9c, 0x56,
0x39, 0x73, 0x8a, 0x6b, 0x2f, 0x34, 0x78, 0xb1, 0x11, 0xdb, 0xa4, 0x5c, 0x80, 0x01, 0x71,
0x6a, 0xc2, 0xd1, 0x2e, 0x5e, 0x76, 0x28, 0x70, 0x93, 0xae, 0x3e, 0x78, 0xb0, 0x1f, 0x0f,
0xda, 0xbf, 0xfb, 0x8a, 0x67, 0x65, 0x4f, 0x91, 0xed, 0x49, 0x75, 0x78, 0x62, 0xa2, 0x93,
0xb5, 0x70, 0x7f, 0x4d, 0x08, 0x4e, 0x79, 0x61, 0xa8, 0x5f, 0x7f, 0xb4, 0x65, 0x9f, 0x91,
0x54, 0x3a, 0xe8, 0x50, 0x33, 0xd3, 0xd5, 0x8a, 0x7c, 0xf3, 0x9e, 0x8b, 0x77, 0x7b, 0xc6,
0xc6, 0x0c, 0x45, 0x95, 0x1f, 0xb0, 0xd0, 0x0b, 0x27, 0x4a, 0xfd, 0xc7, 0xf7, 0x0d, 0x5a,
0x43, 0xc9, 0x7d, 0x35, 0xb0, 0x7d, 0xc4, 0x9c, 0x57, 0x1e, 0x76, 0x0d, 0xf1, 0x95, 0x30,
0x71, 0xcc, 0xb3, 0x66, 0x3b, 0x63, 0xa8, 0x6c, 0xa3, 0x43, 0xa0, 0x24, 0xcc, 0xb7, 0x53,
0xfe, 0xfe, 0xbc, 0x6e, 0x60, 0x89, 0xaf, 0x16, 0x21, 0xc8, 0x91, 0x6a, 0x89, 0xce, 0x80,
0x2c, 0xf1, 0x59, 0xce, 0xc3, 0x60, 0x61, 0x3b, 0x0b, 0x19, 0xfe, 0x99, 0xac, 0x65, 0x90,
0x15, 0x12, 0x05, 0xac, 0x7e, 0xff, 0x98, 0x7b, 0x66, 0x64, 0x0e, 0x4b, 0x5b, 0xaa, 0x8d,
0x3b, 0xd2, 0x56, 0xcf, 0x99, 0x39, 0xee, 0x22, 0x81, 0xd0, 0x60, 0x06, 0x66, 0x20, 0x81,
0x48, 0x3c, 0x6f, 0x3a, 0x77, 0xba, 0xcb, 0x52, 0xac, 0x79, 0x56, 0xaf, 0xe9, 0x16, 0x17,
0x0a, 0xa3, 0x82, 0x08, 0xd5, 0x3c, 0x97, 0xcb, 0x09, 0xff, 0x7f, 0xf9, 0x4f, 0x60, 0x05,
0xb9, 0x53, 0x26, 0xaa, 0xb8, 0x50, 0xaa, 0x19, 0x25, 0xae, 0x5f, 0xea, 0x8a, 0xd0, 0x89,
0x12, 0x80, 0x43, 0x50, 0x24, 0x12, 0x21, 0x14, 0xcd, 0x77, 0xeb, 0x21, 0xcc, 0x5c, 0x09,
0x64, 0xf3, 0xc7, 0xcb, 0xc5, 0x4b, 0xc3, 0xe7, 0xed, 0xe7, 0x86, 0x2c, 0x1d, 0x8e, 0x19,
0x52, 0x9b, 0x2a, 0x0c, 0x18, 0x72, 0x0b, 0x1e, 0x1b, 0xb0, 0x0f, 0x42, 0x99, 0x04, 0xae,
0xd5, 0xb7, 0x89, 0x1a, 0xb9, 0x4f, 0xd6, 0xaf, 0xf3, 0xc9, 0x93, 0x6f, 0xb0, 0x60, 0x83,
0x6e, 0x6b, 0xd1, 0x5f, 0x3f, 0x1a, 0x83, 0x1e, 0x24, 0x00, 0x87, 0xb5, 0x3e, 0xdb, 0xf9,
0x4d, 0xa7, 0x16, 0x2e, 0x19, 0x5b, 0x8f, 0x1b, 0x0d, 0x47, 0x72, 0x42, 0xe9, 0x0a, 0x11,
0x08, 0x2d, 0x88, 0x1c, 0xbc, 0xc7, 0xb4, 0xbe, 0x29, 0x4d, 0x03, 0x5e, 0xec, 0xdf, 0xf3,
0x3d, 0x2f, 0xe8, 0x1d, 0x9a, 0xd2, 0xd1, 0xab, 0x41, 0x3d, 0x87, 0x11, 0x45, 0xb0, 0x0d,
0x46, 0xf5, 0xe8, 0x95, 0x62, 0x1c, 0x68, 0xf7, 0xa6, 0x5b, 0x39, 0x4e, 0xbf, 0x47, 0xba,
0x5d, 0x7f, 0xb7, 0x6a, 0xf4, 0xba, 0x1d, 0x69, 0xf6, 0xa4, 0xe7, 0xe4, 0x6b, 0x3b, 0x0d,
0x23, 0x16, 0x4a, 0xb2, 0x68, 0xf0, 0xb2, 0x0d, 0x09, 0x17, 0x6a, 0x63, 0x8c, 0x83, 0xd3,
0xbd, 0x05, 0xc9, 0xf6, 0xf0, 0xa1, 0x31, 0x0b, 0x2c, 0xac, 0x83, 0xac, 0x80, 0x34, 0x32,
0xb4, 0xec, 0xd0, 0xbc, 0x54, 0x82, 0x9a, 0xc8, 0xf6, 0xa0, 0x7d, 0xc6, 0x79, 0x73, 0xf4,
0x20, 0x99, 0xf3, 0xb4, 0x01, 0xde, 0x91, 0x27, 0xf2, 0xc0, 0xdc, 0x81, 0x00, 0x4e, 0x7e,
0x07, 0x99, 0xc8, 0x3a, 0x51, 0xbc, 0x38, 0xd6, 0x8a, 0xa2, 0xde, 0x3b, 0x6a, 0x8c, 0x1a,
0x7c, 0x81, 0x0f, 0x3a, 0x1f, 0xe4, 0x05, 0x7b, 0x20, 0x35, 0x6b, 0xa5, 0x6a, 0xa7, 0xe7,
0xbc, 0x9c, 0x20, 0xec, 0x00, 0x15, 0xe2, 0x51, 0xaf, 0x77, 0xeb, 0x29, 0x3c, 0x7d, 0x2e,
0x00, 0x5c, 0x81, 0x21, 0xfa, 0x35, 0x6f, 0x40, 0xef, 0xfb, 0xd1, 0x3f, 0xcc, 0x9d, 0x55,
0x53, 0xfb, 0x5a, 0xa5, 0x56, 0x89, 0x0b, 0x52, 0xeb, 0x57, 0x73, 0x4f, 0x1b, 0x67, 0x24,
0xcb, 0xb8, 0x6a, 0x10, 0x69, 0xd6, 0xfb, 0x52, 0x40, 0xff, 0x20, 0xa5, 0xf3, 0x72, 0xe1,
0x3d, 0xa4, 0x8c, 0x81, 0x66, 0x16, 0x0d, 0x5d, 0xad, 0xa8, 0x50, 0x25, 0x78, 0x31, 0x77,
0x0c, 0x57, 0xe4, 0xe9, 0x15, 0x2d, 0xdb, 0x07, 0x87, 0xc8, 0xb0, 0x43, 0xde, 0xfc, 0xfe,
0xa9, 0xeb, 0xf5, 0xb0, 0xd3, 0x7b, 0xe9, 0x1f, 0x6e, 0xca, 0xe4, 0x03, 0x95, 0xc5, 0xd1,
0x59, 0x72, 0x63, 0xf0, 0x86, 0x54, 0xe8, 0x16, 0x62, 0x0b, 0x35, 0x29, 0xc2, 0x68, 0xd0,
0xd6, 0x3e, 0x90, 0x60, 0x57, 0x1d, 0xc9, 0xed, 0x3f, 0xed, 0xb0, 0x2f, 0x7e, 0x97, 0x02,
0x51, 0xec, 0xee, 0x6f, 0x82, 0x74, 0x76, 0x7f, 0xfb, 0xd6, 0xc4, 0xc3, 0xdd, 0xe8, 0xb1,
0x60, 0xfc, 0xc6, 0xb9, 0x0d, 0x6a, 0x33, 0x78, 0xc6, 0xc1, 0xbf, 0x86, 0x2c, 0x50, 0xcc,
0x9a, 0x70, 0x8e, 0x7b, 0xec, 0xab, 0x95, 0xac, 0x53, 0xa0, 0x4b, 0x07, 0x88, 0xaf, 0x42,
0xed, 0x19, 0x8d, 0xf6, 0x32, 0x17, 0x48, 0x47, 0x1d, 0x41, 0x6f, 0xfe, 0x2e, 0xa7, 0x8f,
0x4b, 0xa0, 0x51, 0xf3, 0xbf, 0x02, 0x0a, 0x48, 0x58, 0xf7, 0xa1, 0x6d, 0xea, 0xa5, 0x13,
0x5a, 0x5b, 0xea, 0x0c, 0x9e, 0x52, 0x4f, 0x9e, 0xb9, 0x71, 0x7f, 0x23, 0x83, 0xda, 0x1b,
0x86, 0x9a, 0x41, 0x29, 0xda, 0x70, 0xe7, 0x64, 0xa1, 0x7b, 0xd5, 0x0a, 0x22, 0x0d, 0x5c,
0x40, 0xc4, 0x81, 0x07, 0x25, 0x35, 0x4a, 0x1c, 0x10, 0xdb, 0x45, 0x0a, 0xff, 0x36, 0xd4,
0xe0, 0xeb, 0x5f, 0x68, 0xd6, 0x67, 0xc6, 0xd0, 0x8b, 0x76, 0x1a, 0x7d, 0x59, 0x42, 0xa1,
0xcb, 0x96, 0x4d, 0x84, 0x09, 0x9a, 0x3d, 0xe0, 0x52, 0x85, 0x6e, 0x48, 0x90, 0x85, 0x2a,
0x63, 0xb2, 0x69, 0xd2, 0x00, 0x43, 0x31, 0x37, 0xb3, 0x52, 0xaf, 0x62, 0xfa, 0xc1, 0xe0,
0x03, 0xfb, 0x62, 0xaa, 0x88, 0xc9, 0xb2, 0x2c, 0xd5, 0xa8, 0xf5, 0xa5, 0x4c, 0x12, 0x59,
0x4e, 0x06, 0x5e, 0x9b, 0x15, 0x66, 0x11, 0xb2, 0x27, 0x92, 0xdc, 0x98, 0x59, 0xde, 0xdf,
0xfa, 0x9a, 0x32, 0x2e, 0xc0, 0x5d, 0x3c, 0x33, 0x41, 0x6d, 0xaf, 0xb2, 0x25, 0x23, 0x14,
0xa5, 0x7b, 0xc7, 0x9b, 0x68, 0xf3, 0xda, 0xeb, 0xe3, 0xa9, 0xe2, 0x6f, 0x0e, 0x1d, 0x1c,
0xba, 0x55, 0xb6, 0x34, 0x6a, 0x93, 0x1f, 0x1f, 0xb8, 0x34, 0xc8, 0x84, 0x08, 0xb1, 0x6b,
0x6a, 0x28, 0x74, 0x74, 0xe5, 0xeb, 0x75, 0xe9, 0x7c, 0xd8, 0xba, 0xd8, 0x42, 0xa5, 0xee,
0x1f, 0x80, 0xd9, 0x96, 0xb2, 0x2e, 0xe7, 0xbf, 0xba, 0xeb, 0xd1, 0x69, 0xbb, 0x8f, 0xfd,
0x5a, 0x63, 0x8f, 0x39, 0x7f, 0xdf, 0x1d, 0x37, 0xd2, 0x18, 0x35, 0x9d, 0xb6, 0xcc, 0xe4,
0x27, 0x81, 0x89, 0x38, 0x38, 0x68, 0x33, 0xe7, 0x78, 0xd8, 0x76, 0xf5, 0xee, 0xd0, 0x4a,
0x07, 0x69, 0x19, 0x7a, 0xad, 0x18, 0xb1, 0x94, 0x61, 0x45, 0x53, 0xa2, 0x48, 0xda, 0x96,
0x4a, 0xf9, 0xee, 0x94, 0x2a, 0x1f, 0x6e, 0x18, 0x3c, 0x92, 0x46, 0xd1, 0x1a, 0x28, 0x18,
0x32, 0x1f, 0x3a, 0x45, 0xbe, 0x04, 0x35, 0x92, 0xe5, 0xa3, 0xcb, 0xb5, 0x2e, 0x32, 0x43,
0xac, 0x65, 0x17, 0x89, 0x99, 0x15, 0x03, 0x9e, 0xb1, 0x23, 0x2f, 0xed, 0x76, 0x4d, 0xd8,
0xac, 0x21, 0x40, 0xc4, 0x99, 0x4e, 0x65, 0x71, 0x2c, 0xb3, 0x45, 0xab, 0xfb, 0xe7, 0x72,
0x39, 0x56, 0x30, 0x6d, 0xfb, 0x74, 0xeb, 0x99, 0xf3, 0xcd, 0x57, 0x5c, 0x78, 0x75, 0xe9,
0x8d, 0xc3, 0xa2, 0xfb, 0x5d, 0xe0, 0x90, 0xc5, 0x55, 0xad, 0x91, 0x53, 0x4e, 0x9e, 0xbd,
0x8c, 0x49, 0xa4, 0xa4, 0x69, 0x10, 0x0c, 0xc5, 0x76, 0xe9, 0x25, 0x86, 0x8d, 0x66, 0x23,
0xa8, 0xdb, 0x5c, 0xe8, 0xd9, 0x30, 0xe1, 0x15, 0x7b, 0xc0, 0x99, 0x0f, 0x03, 0xec, 0xaa,
0x12, 0xef, 0xce, 0xd4, 0xea, 0x55, 0x5c, 0x08, 0x86, 0xf4, 0xf4, 0xb0, 0x83, 0x42, 0x95,
0x37, 0xb6, 0x38, 0xe0, 0x2b, 0x54, 0x89, 0xbd, 0x4e, 0x20, 0x9d, 0x3f, 0xc3, 0x4b, 0xb7,
0xec, 0xfa, 0x5a, 0x14, 0x03, 0xcb, 0x64, 0xc8, 0x34, 0x4a, 0x4b, 0x6e, 0xf8, 0x6e, 0x56,
0xf6, 0xdd, 0x5f, 0xa1, 0x24, 0xe2, 0xd4, 0xd0, 0x82, 0x64, 0x1f, 0x8e, 0x9b, 0xfa, 0xb4,
0xcb, 0xdb, 0x0a, 0xe8, 0x15, 0xfc, 0x15, 0xab, 0x4b, 0x18, 0xbf, 0xd4, 0x42, 0x14, 0x48,
0x82, 0x85, 0xdd, 0xeb, 0x49, 0x1b, 0x0b, 0x0b, 0x05, 0xe9, 0xb4, 0xa1, 0x33, 0x0a, 0x5d,
0x0e, 0x6c, 0x4b, 0xc0, 0xd6, 0x6c, 0x7c, 0xfb, 0x69, 0x0b, 0x53, 0x19, 0xe4, 0xf3, 0x35,
0xfc, 0xbe, 0xa1, 0x34, 0x02, 0x09, 0x4f, 0x74, 0x86, 0x92, 0xcd, 0x5d, 0x1a, 0xc1, 0x27,
0x0c, 0xf2, 0xc5, 0xcf, 0xdd, 0x23, 0x93, 0x02, 0xbd, 0x41, 0x5e, 0x42, 0xf0, 0xa0, 0x9d,
0x0c, 0x72, 0xc8, 0xec, 0x32, 0x0a, 0x8a, 0xfd, 0x3d, 0x5a, 0x41, 0x27, 0x0c, 0x88, 0x59,
0xad, 0x94, 0x2e, 0xef, 0x5d, 0x8f, 0xc7, 0xdf, 0x66, 0xe4, 0xdd, 0x56, 0x6c, 0x7b, 0xca,
0x55, 0x81, 0xae, 0xae, 0x5c, 0x1b, 0x1a, 0xab, 0xae, 0x99, 0x8d, 0xcc, 0x42, 0x97, 0x59,
0xf4, 0x14, 0x3f, 0x75, 0xc6, 0xd1, 0x88, 0xba, 0xaa, 0x84, 0x4a, 0xd0, 0x34, 0x08, 0x3b,
0x7d, 0xdb, 0x15, 0x06, 0xb0, 0x5c, 0xbd, 0x40, 0xf5, 0xa8, 0xec, 0xae, 0x36, 0x40, 0xdd,
0x90, 0x1c, 0x3e, 0x0d, 0x7e, 0x73, 0xc7, 0xc2, 0xc5, 0x6a, 0xff, 0x52, 0x05, 0x7f, 0xbe,
0xd0, 0x92, 0xfd, 0xb3, 0x6f, 0xff, 0x5d, 0xb7, 0x97, 0x64, 0x73, 0x7b, 0xca, 0xd1, 0x98,
0x24, 0x6b, 0x0b, 0x01, 0x68, 0xdd, 0x27, 0x85, 0x85, 0xb5, 0x83, 0xc1, 0xe0, 0x50, 0x64,
0xc7, 0xaf, 0xf1, 0xc6, 0x4d, 0xb1, 0xef, 0xc9, 0xb4, 0x0a, 0x6d, 0x65, 0xf3, 0x47, 0xcc,
0xa3, 0x02, 0x21, 0x0c, 0xbe, 0x22, 0x29, 0x05, 0xcf, 0x5f, 0xe8, 0x94, 0x6c, 0xe5, 0xdc,
0xc4, 0xdf, 0xbe, 0x3e, 0xa8, 0xb4, 0x18, 0xb0, 0x99, 0xb8, 0x6f, 0xff, 0x5d, 0xb9, 0xfd,
0x3b, 0x5d, 0x16, 0xbf, 0x3e, 0xd8, 0xb3, 0xd8, 0x08, 0x34, 0xf6, 0x47, 0x35, 0x5b, 0x72,
0x1a, 0x33, 0xad, 0x52, 0x5d, 0xb8, 0xd0, 0x77, 0xc6, 0xab, 0xba, 0x55, 0x09, 0x5f, 0x02,
0xf8, 0xd4, 0x5f, 0x53, 0x06, 0x91, 0xcd, 0x74, 0x42, 0xae, 0x54, 0x91, 0x81, 0x62, 0x13,
0x6f, 0xd8, 0xa9, 0x77, 0xc3, 0x6c, 0xcb, 0xf1, 0x29, 0x5a, 0xcc, 0xda, 0x35, 0xbd, 0x52,
0x23, 0xbe, 0x59, 0xeb, 0x12, 0x6d, 0xb7, 0x53, 0xee, 0xfc, 0xb4, 0x1b, 0x13, 0x5e, 0xba,
0x16, 0x7c, 0xc5, 0xf3, 0xe3, 0x6d, 0x07, 0x78, 0xf5, 0x2b, 0x21, 0x05, 0x88, 0x4c, 0xc0,
0xa1, 0xe3, 0x36, 0x10, 0xf8, 0x1b, 0xd8, 0x17, 0xfb, 0x6a, 0x4e, 0xd8, 0xb3, 0x47, 0x2d,
0x99, 0xbd, 0xbb, 0x5d, 0x37, 0x7d, 0xba, 0xf1, 0xe1, 0x7c, 0xc0, 0xc5, 0x54, 0x62, 0x7f,
0xcf, 0x5a, 0x4a, 0x93, 0xcc, 0xf1, 0x1b, 0x34, 0xc8, 0xa6, 0x05, 0x4c, 0x55, 0x8b, 0x54,
0x84, 0xd5, 0x77, 0xeb, 0xc0, 0x6d, 0x3a, 0x29, 0xbd, 0x75, 0x61, 0x09, 0x9a, 0x2c, 0xbb,
0xf7, 0x18, 0x79, 0x34, 0x90, 0x24, 0xa5, 0x81, 0x70, 0x87, 0xc5, 0x02, 0x7c, 0xba, 0xd4,
0x5e, 0x14, 0x8e, 0xe4, 0xed, 0xa2, 0x61, 0x6a, 0xb9, 0x6e, 0xb5, 0x4a, 0xb9, 0x01, 0x46,
0xf4, 0xcf, 0xbc, 0x09, 0x2f, 0x27, 0x4b, 0xbd, 0x86, 0x7a, 0x10, 0xe1, 0xd4, 0xc8, 0xd9,
0x20, 0x8d, 0x8a, 0x63, 0x00, 0x63, 0x44, 0xeb, 0x54, 0x0b, 0x75, 0x49, 0x10, 0xa2, 0xa7,
0xad, 0xb9, 0xd1, 0x01, 0x80, 0x63, 0x25, 0xc8, 0x12, 0xa6, 0xce, 0x1e, 0xbe, 0xfe, 0x7e,
0x5f, 0x3c, 0xdb, 0x34, 0xea, 0x37, 0xec, 0x3b, 0xd5, 0x28, 0xd2, 0x07, 0x8c, 0x9a, 0xb6,
0xee, 0x5e, 0x3e, 0xdf, 0x1d, 0x99, 0xb0, 0xe2, 0x46, 0xef, 0x5c, 0x1b, 0xb4, 0xea, 0x56,
0x2e, 0xde, 0x1f, 0x9d, 0xb8, 0xd3, 0x24, 0xab, 0xd4, 0x2a, 0xd6, 0x2e, 0xde, 0x1f, 0x9d,
0xb8, 0xf2, 0x66, 0x2f, 0xbd, 0xf8, 0x72, 0x66, 0x4e, 0x1e, 0x9f, 0x9d, 0xb8, 0xf2, 0x47,
0x0c, 0x9a, 0xb6, 0xee, 0x3f, 0xfc, 0x7a, 0x57, 0x0d, 0x79, 0x70, 0x62, 0x27, 0xad, 0xb9,
0xd1, 0x01, 0x61, 0x40, 0x02, 0x67, 0x2d, 0xd8, 0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xd7, 0x2c,
0xbb, 0xf4, 0x4b, 0xf5, 0x49, 0xf1, 0x60, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0xf9, 0x51, 0x01,
0x80, 0x63, 0x25, 0xa9, 0xb1, 0xe0, 0x42, 0xe7, 0x4c, 0x1a, 0x97, 0xac, 0xbb, 0xf4, 0x6a,
0x37, 0xcd, 0x18, 0xb2, 0xe6, 0x2f, 0xdc, 0x1b, 0x95, 0xa8, 0xd2, 0x07, 0x6d, 0x58, 0x32,
0xe6, 0x4e, 0x1e, 0x9f, 0xbc, 0xfa, 0x57, 0x0d, 0x79, 0x51, 0x20, 0xc2, 0x06, 0x6f, 0x5c,
0x1b, 0x95, 0xa8, 0xb3, 0xc5, 0xe9, 0x31, 0xe0, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0x18, 0x93,
0x85, 0x69, 0x31, 0xc1, 0xe1, 0x21, 0xc0, 0xe3, 0x44, 0x0a, 0x77, 0x6c, 0x5a, 0x17, 0x8d,
0x98, 0x93, 0xa4, 0xab, 0xd4, 0x2a, 0xb7, 0xec, 0x5a, 0x17, 0xac, 0xbb, 0xf4, 0x4b, 0x14,
0xaa, 0xb7, 0xec, 0x3b, 0xd5, 0x28, 0xb3, 0xc5, 0xe9, 0x31, 0xc1, 0x00, 0x82, 0x67, 0x4c,
0xfb, 0x55, 0x28, 0xd2, 0x26, 0xaf, 0xbd, 0xd9, 0x11, 0x81, 0x61, 0x21, 0xa1, 0xa1, 0xc0,
0x02, 0x86, 0x6f, 0x5c, 0x1b, 0xb4, 0xcb, 0x14, 0x8b, 0x94, 0xaa, 0xd6, 0x2e, 0xbf, 0xdd,
0x19, 0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x7c, 0x5b, 0x15, 0x89, 0x90, 0x83, 0x84, 0x6b, 0x54,
0x0b, 0x75, 0x68, 0x52, 0x07, 0x6d, 0x58, 0x32, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0xed, 0x58,
0x32, 0xe6, 0x4e, 0xff, 0x7c, 0x7a, 0x76, 0x6e, 0x3f, 0xdd, 0x38, 0xd3, 0x05, 0x88, 0x92,
0xa6, 0xaf, 0xdc, 0x1b, 0xb4, 0xcb, 0xf5, 0x68, 0x52, 0x07, 0x8c, 0x7b, 0x55, 0x09, 0x90,
0x83, 0x84, 0x6b, 0x54, 0x2a, 0xb7, 0xec, 0x3b, 0xd5, 0x09, 0x90, 0xa2, 0xc6, 0x0e, 0x7f,
0x7c, 0x7a, 0x57, 0x0d, 0x98, 0xb2, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0x0c, 0x7b, 0x74, 0x4b,
0x14, 0x8b, 0x94, 0xaa, 0xb7, 0xcd, 0x18, 0x93, 0xa4, 0xca, 0x16, 0xae, 0xbf, 0xdd, 0x19,
0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x5d, 0x19, 0x91, 0x81, 0x80, 0x63, 0x44, 0xeb, 0x35, 0xc9,
0x10, 0x83, 0x65, 0x48, 0x12, 0xa6, 0xce, 0x1e, 0x9f, 0xbc, 0xdb, 0x15, 0x89, 0x71, 0x60,
0x23, 0xc4, 0xeb, 0x54, 0x2a, 0xb7, 0xec, 0x5a, 0x36, 0xcf, 0x81, 0x10, 0xac, 0x74
};
pmw3389_spi_start();
spi_write(REG_Motion_Burst);
wait_us(35); // waits for tSRAD_MOTBR
report.motion = spi_read();
spi_read(); // skip Observation
// delta registers
report.dx = spi_read();
report.mdx = spi_read();
report.dy = spi_read();
report.mdy = spi_read();
if (report.motion & 0b111) { // panic recovery, sometimes burst mode works weird.
_inBurst = false;
}
spi_stop();
#ifdef CONSOLE_ENABLE
if (debug_mouse) {
print_byte(report.motion);
print_byte(report.dx);
print_byte(report.mdx);
print_byte(report.dy);
print_byte(report.mdy);
dprintf("\n");
}
#endif
report.isMotion = (report.motion & 0x80) != 0;
report.isOnSurface = (report.motion & 0x08) == 0;
report.dx |= (report.mdx << 8);
report.dx = report.dx * -1;
report.dy |= (report.mdy << 8);
report.dy = report.dy * -1;
return report;
}
// clang-format off

View File

@@ -1,76 +1,77 @@
/* Copyright 2021 Alabastard (@Alabastard-64)
* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2019 Sunjun Kim
* Copyright 2020 Ploopy Corporation
*
* 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/>.
*/
// Copyright 2022 Stefan Kerkmann (KarlK90)
// Copyright 2021 Alabastard (@Alabastard-64)
// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
// Copyright 2019 Sunjun Kim
// Copyright 2020 Ploopy Corporation
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <stdint.h>
#ifndef PMW3389_CPI
# define PMW3389_CPI 2000
#if !defined(PMW33XX_CPI)
# define PMW33XX_CPI 2000
#endif
#ifndef PMW3389_CLOCK_SPEED
# define PMW3389_CLOCK_SPEED 2000000
#endif
#define PMW33XX_CPI_STEP 50
#define PMW33XX_CPI_MIN 50
#define PMW33XX_CPI_MAX 16000
#ifndef PMW3389_SPI_LSBFIRST
# define PMW3389_SPI_LSBFIRST false
#endif
#define PMW33XX_FIRMWARE_LENGTH 4094
#ifndef PMW3389_SPI_MODE
# define PMW3389_SPI_MODE 3
#endif
#ifndef PMW3389_SPI_DIVISOR
# ifdef __AVR__
# define PMW3389_SPI_DIVISOR (F_CPU / PMW3389_CLOCK_SPEED)
# else
# define PMW3389_SPI_DIVISOR 64
# endif
#endif
#ifndef PMW3389_LIFTOFF_DISTANCE
# define PMW3389_LIFTOFF_DISTANCE 0x02
#endif
#ifndef ROTATIONAL_TRANSFORM_ANGLE
# define ROTATIONAL_TRANSFORM_ANGLE 0x00
#endif
#ifndef PMW3389_CS_PIN
# error "No chip select pin defined -- missing PMW3389_CS_PIN"
#endif
typedef struct {
int8_t motion;
bool isMotion; // True if a motion is detected.
bool isOnSurface; // True when a chip is on a surface
int16_t dx; // displacement on x directions. Unit: Count. (CPI * Count = Inch value)
int8_t mdx;
int16_t dy; // displacement on y directions.
int8_t mdy;
} report_pmw3389_t;
bool pmw3389_init(void);
void pmw3389_upload_firmware(void);
bool pmw3389_check_signature(void);
uint16_t pmw3389_get_cpi(void);
void pmw3389_set_cpi(uint16_t cpi);
/* Reads and clears the current delta values on the sensor */
report_pmw3389_t pmw3389_read_burst(void);
// PMW3389 register addresses
// clang-format off
#define REG_Product_ID 0x00
#define REG_Revision_ID 0x01
#define REG_Motion 0x02
#define REG_Delta_X_L 0x03
#define REG_Delta_X_H 0x04
#define REG_Delta_Y_L 0x05
#define REG_Delta_Y_H 0x06
#define REG_SQUAL 0x07
#define REG_RawData_Sum 0x08
#define REG_Maximum_RawData 0x09
#define REG_Minimum_RawData 0x0a
#define REG_Shutter_Lower 0x0b
#define REG_Shutter_Upper 0x0c
#define REG_Ripple_Control 0x0d
#define REG_Resolution_L 0x0e
#define REG_Resolution_H 0x0f
#define REG_Config2 0x10
#define REG_Angle_Tune 0x11
#define REG_Frame_Capture 0x12
#define REG_SROM_Enable 0x13
#define REG_Run_Downshift 0x14
#define REG_Rest1_Rate_Lower 0x15
#define REG_Rest1_Rate_Upper 0x16
#define REG_Rest1_Downshift 0x17
#define REG_Rest2_Rate_Lower 0x18
#define REG_Rest2_Rate_Upper 0x19
#define REG_Rest2_Downshift 0x1a
#define REG_Rest3_Rate_Lower 0x1b
#define REG_Rest3_Rate_Upper 0x1c
#define REG_Observation 0x24
#define REG_Data_Out_Lower 0x25
#define REG_Data_Out_Upper 0x26
#define REG_SROM_ID 0x2a
#define REG_Min_SQ_Run 0x2b
#define REG_RawData_Threshold 0x2c
#define REG_Control2 0x2d
#define REG_Config5_L 0x2e
#define REG_Config5_H 0x2f
#define REG_Power_Up_Reset 0X3a
#define REG_Shutdown 0x3b
#define REG_Inverse_Product_ID 0x3f
#define REG_LiftCutoff_Cal3 0x41
#define REG_Angle_Snap 0x42
#define REG_LiftCutoff_Cal1 0x4a
#define REG_Motion_Burst 0x50
#define REG_SROM_Load_Burst 0x62
#define REG_Lift_Config 0x63
#define REG_RawData_Burst 0x64
#define REG_LiftCutoff_Cal2 0x65
#define REG_LiftCutoff_Cal_Timeout 0x71
#define REG_LiftCutoff_Cal_Min_Length 0x72
#define REG_PWM_Period_Cnt 0x73
#define REG_PWM_Width_Cnt 0x74
// clang-format on

View File

@@ -1,307 +0,0 @@
/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
* Copyright 2019 Sunjun Kim
* Copyright 2020 Ploopy Corporation
*
* 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 "progmem.h"
// PID, Inverse PID, SROM version
const uint8_t firmware_signature[] PROGMEM = {0x42, 0xBD, 0x04};
#define FIRMWARE_LENGTH 4094
// Firmware Blob for PMW3389
// clang-format off
const uint8_t firmware_data[FIRMWARE_LENGTH] PROGMEM = {
0x01, 0xe8, 0xba, 0x26, 0x0b, 0xb2, 0xbe, 0xfe, 0x7e, 0x5f, 0x3c, 0xdb, 0x15, 0xa8, 0xb3,
0xe4, 0x2b, 0xb5, 0xe8, 0x53, 0x07, 0x6d, 0x3b, 0xd1, 0x20, 0xc2, 0x06, 0x6f, 0x3d, 0xd9,
0x11, 0xa0, 0xc2, 0xe7, 0x2d, 0xb9, 0xd1, 0x20, 0xa3, 0xa5, 0xc8, 0xf3, 0x64, 0x4a, 0xf7,
0x4d, 0x18, 0x93, 0xa4, 0xca, 0xf7, 0x6c, 0x5a, 0x36, 0xee, 0x5e, 0x3e, 0xfe, 0x7e, 0x7e,
0x5f, 0x1d, 0x99, 0xb0, 0xc3, 0xe5, 0x29, 0xd3, 0x03, 0x65, 0x48, 0x12, 0x87, 0x6d, 0x58,
0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xf2, 0x4f, 0xfd, 0x59, 0x11, 0x81, 0x61, 0x21, 0xc0, 0x02,
0x86, 0x8e, 0x7f, 0x5d, 0x38, 0xf2, 0x47, 0x0c, 0x7b, 0x55, 0x28, 0xb3, 0xe4, 0x4a, 0x16,
0xab, 0xbf, 0xdd, 0x38, 0xf2, 0x66, 0x4e, 0xff, 0x5d, 0x19, 0x91, 0xa0, 0xa3, 0xa5, 0xc8,
0x12, 0xa6, 0xaf, 0xdc, 0x3a, 0xd1, 0x41, 0x60, 0x75, 0x58, 0x24, 0x92, 0xd4, 0x72, 0x6c,
0xe0, 0x2f, 0xfd, 0x23, 0x8d, 0x1c, 0x5b, 0xb2, 0x97, 0x36, 0x3d, 0x0b, 0xa2, 0x49, 0xb1,
0x58, 0xf2, 0x1f, 0xc0, 0xcb, 0xf8, 0x41, 0x4f, 0xcd, 0x1e, 0x6b, 0x39, 0xa7, 0x2b, 0xe9,
0x30, 0x16, 0x83, 0xd2, 0x0e, 0x47, 0x8f, 0xe3, 0xb1, 0xdf, 0xa2, 0x15, 0xdb, 0x5d, 0x30,
0xc5, 0x1a, 0xab, 0x31, 0x99, 0xf3, 0xfa, 0xb2, 0x86, 0x69, 0xad, 0x7a, 0xe8, 0xa7, 0x18,
0x6a, 0xcc, 0xc8, 0x65, 0x23, 0x87, 0xa8, 0x5f, 0xf5, 0x21, 0x59, 0x75, 0x09, 0x71, 0x45,
0x55, 0x25, 0x4b, 0xda, 0xa1, 0xc3, 0xf7, 0x41, 0xab, 0x59, 0xd9, 0x74, 0x12, 0x55, 0x5f,
0xbc, 0xaf, 0xd9, 0xfd, 0xb0, 0x1e, 0xa3, 0x0f, 0xff, 0xde, 0x11, 0x16, 0x6a, 0xae, 0x0e,
0xe1, 0x5d, 0x3c, 0x10, 0x43, 0x9a, 0xa1, 0x0b, 0x24, 0x8f, 0x0d, 0x7f, 0x0b, 0x5e, 0x4c,
0x42, 0xa4, 0x84, 0x2c, 0x40, 0xd0, 0x55, 0x39, 0xe6, 0x4b, 0xf8, 0x9b, 0x2f, 0xdc, 0x28,
0xff, 0xfa, 0xb5, 0x85, 0x19, 0xe5, 0x28, 0xa1, 0x77, 0xaa, 0x73, 0xf3, 0x03, 0xc7, 0x62,
0xa6, 0x91, 0x18, 0xc9, 0xb0, 0xcd, 0x05, 0xdc, 0xca, 0x81, 0x26, 0x1a, 0x47, 0x40, 0xda,
0x36, 0x7d, 0x6a, 0x53, 0xc8, 0x5a, 0x77, 0x5d, 0x19, 0xa4, 0x1b, 0x23, 0x83, 0xd0, 0xb2,
0xaa, 0x0e, 0xbf, 0x77, 0x4e, 0x3a, 0x3b, 0x59, 0x00, 0x31, 0x0d, 0x02, 0x1b, 0x88, 0x7a,
0xd4, 0xbd, 0x9d, 0xcc, 0x58, 0x04, 0x69, 0xf6, 0x3b, 0xca, 0x42, 0xe2, 0xfd, 0xc3, 0x3d,
0x39, 0xc5, 0xd0, 0x71, 0xe4, 0xc8, 0xb7, 0x3e, 0x3f, 0xc8, 0xe9, 0xca, 0xc9, 0x3f, 0x04,
0x4e, 0x1b, 0x79, 0xca, 0xa5, 0x61, 0xc2, 0xed, 0x1d, 0xa6, 0xda, 0x5a, 0xe9, 0x7f, 0x65,
0x8c, 0xbe, 0x12, 0x6e, 0xa4, 0x5b, 0x33, 0x2f, 0x84, 0x28, 0x9c, 0x1c, 0x88, 0x2d, 0xff,
0x07, 0xbf, 0xa6, 0xd7, 0x5a, 0x88, 0x86, 0xb0, 0x3f, 0xf6, 0x31, 0x5b, 0x11, 0x6d, 0xf5,
0x58, 0xeb, 0x58, 0x02, 0x9e, 0xb5, 0x9a, 0xb1, 0xff, 0x25, 0x9d, 0x8b, 0x4f, 0xb6, 0x0a,
0xf9, 0xea, 0x3e, 0x3f, 0x21, 0x09, 0x65, 0x21, 0x22, 0xfe, 0x3d, 0x4e, 0x11, 0x5b, 0x9e,
0x5a, 0x59, 0x8b, 0xdd, 0xd8, 0xce, 0xd6, 0xd9, 0x59, 0xd2, 0x1e, 0xfd, 0xef, 0x0d, 0x1b,
0xd9, 0x61, 0x7f, 0xd7, 0x2d, 0xad, 0x62, 0x09, 0xe5, 0x22, 0x63, 0xea, 0xc7, 0x31, 0xd9,
0xa1, 0x38, 0x80, 0x5c, 0xa7, 0x32, 0x82, 0xec, 0x1b, 0xa2, 0x49, 0x5a, 0x06, 0xd2, 0x7c,
0xc9, 0x96, 0x57, 0xbb, 0x17, 0x75, 0xfc, 0x7a, 0x8f, 0x0d, 0x77, 0xb5, 0x7a, 0x8e, 0x3e,
0xf4, 0xba, 0x2f, 0x69, 0x13, 0x26, 0xd6, 0xd9, 0x21, 0x60, 0x2f, 0x21, 0x3e, 0x87, 0xee,
0xfd, 0x87, 0x16, 0x0d, 0xc8, 0x08, 0x00, 0x25, 0x71, 0xac, 0x2c, 0x03, 0x2a, 0x37, 0x2d,
0xb3, 0x34, 0x09, 0x91, 0xe3, 0x06, 0x2c, 0x38, 0x37, 0x95, 0x3b, 0x17, 0x7a, 0xaf, 0xac,
0x99, 0x55, 0xab, 0x41, 0x39, 0x5f, 0x8e, 0xa6, 0x43, 0x80, 0x03, 0x88, 0x6f, 0x7d, 0xbd,
0x5a, 0xb4, 0x2b, 0x32, 0x23, 0x5a, 0xa9, 0x31, 0x32, 0x39, 0x4c, 0x5b, 0xf4, 0x6b, 0xaf,
0x66, 0x6f, 0x3c, 0x8e, 0x2d, 0x82, 0x97, 0x9f, 0x4a, 0x01, 0xdc, 0x99, 0x98, 0x00, 0xec,
0x38, 0x7a, 0x79, 0x70, 0xa6, 0x85, 0xd6, 0x21, 0x63, 0x0d, 0x45, 0x9a, 0x2e, 0x5e, 0xa7,
0xb1, 0xea, 0x66, 0x6a, 0xbc, 0x62, 0x2d, 0x7b, 0x7d, 0x85, 0xea, 0x95, 0x2f, 0xc0, 0xe8,
0x6f, 0x35, 0xa0, 0x3a, 0x02, 0x25, 0xbc, 0xb2, 0x5f, 0x5c, 0x43, 0x96, 0xcc, 0x26, 0xd2,
0x16, 0xb4, 0x96, 0x73, 0xd7, 0x13, 0xc7, 0xae, 0x53, 0x15, 0x31, 0x89, 0x68, 0x66, 0x6d,
0x2c, 0x92, 0x1f, 0xcc, 0x5b, 0xa7, 0x8f, 0x5d, 0xbb, 0xc9, 0xdb, 0xe8, 0x3b, 0x9d, 0x61,
0x74, 0x8b, 0x05, 0xa1, 0x58, 0x52, 0x68, 0xee, 0x3d, 0x39, 0x79, 0xa0, 0x9b, 0xdd, 0xe1,
0x55, 0xc9, 0x60, 0xeb, 0xad, 0xb8, 0x5b, 0xc2, 0x5a, 0xb5, 0x2c, 0x18, 0x55, 0xa9, 0x50,
0xc3, 0xf6, 0x72, 0x5f, 0xcc, 0xe2, 0xf4, 0x55, 0xb5, 0xd6, 0xb5, 0x4a, 0x99, 0xa5, 0x28,
0x74, 0x97, 0x18, 0xe8, 0xc0, 0x84, 0x89, 0x50, 0x03, 0x86, 0x4d, 0x1a, 0xb7, 0x09, 0x90,
0xa2, 0x01, 0x04, 0xbb, 0x73, 0x62, 0xcb, 0x97, 0x22, 0x70, 0x5d, 0x52, 0x41, 0x8e, 0xd9,
0x90, 0x15, 0xaa, 0xab, 0x0a, 0x31, 0x65, 0xb4, 0xda, 0xd0, 0xee, 0x24, 0xc9, 0x41, 0x91,
0x1e, 0xbc, 0x46, 0x70, 0x40, 0x9d, 0xda, 0x0e, 0x2a, 0xe4, 0xb2, 0x4c, 0x9f, 0xf2, 0xfc,
0xf3, 0x84, 0x17, 0x44, 0x1e, 0xd7, 0xca, 0x23, 0x1f, 0x3f, 0x5a, 0x22, 0x3d, 0xaf, 0x9b,
0x2d, 0xfc, 0x41, 0xad, 0x26, 0xb4, 0x45, 0x67, 0x0b, 0x80, 0x0e, 0xf9, 0x61, 0x37, 0xec,
0x3b, 0xf4, 0x4b, 0x14, 0xdf, 0x5a, 0x0c, 0x3a, 0x50, 0x0b, 0x14, 0x0c, 0x72, 0xae, 0xc6,
0xc5, 0xec, 0x35, 0x53, 0x2d, 0x59, 0xed, 0x91, 0x74, 0xe2, 0xc4, 0xc8, 0xf2, 0x25, 0x6b,
0x97, 0x6f, 0xc9, 0x76, 0xce, 0xa9, 0xb1, 0x99, 0x8f, 0x5a, 0x92, 0x3b, 0xc4, 0x8d, 0x54,
0x50, 0x40, 0x72, 0xd6, 0x90, 0x83, 0xfc, 0xe5, 0x49, 0x8b, 0x17, 0xf5, 0xfd, 0x6b, 0x8d,
0x32, 0x02, 0xe9, 0x0a, 0xfe, 0xbf, 0x00, 0x6b, 0xa3, 0xad, 0x5f, 0x09, 0x4b, 0x97, 0x2b,
0x00, 0x58, 0x65, 0x2e, 0x07, 0x49, 0x0a, 0x3b, 0x6b, 0x2e, 0x50, 0x6c, 0x1d, 0xac, 0xb7,
0x6a, 0x26, 0xd8, 0x13, 0xa4, 0xca, 0x16, 0xae, 0xab, 0x93, 0xb9, 0x1c, 0x1c, 0xb4, 0x47,
0x6a, 0x38, 0x36, 0x17, 0x27, 0xc9, 0x7f, 0xc7, 0x64, 0xcb, 0x89, 0x58, 0xc5, 0x61, 0xc2,
0xc6, 0xea, 0x15, 0x0b, 0x34, 0x0c, 0x5d, 0x61, 0x76, 0x6e, 0x2b, 0x62, 0x40, 0x92, 0xa3,
0x6c, 0xef, 0xf4, 0xe4, 0xc3, 0xa1, 0xa8, 0xf5, 0x94, 0x79, 0x0d, 0xd1, 0x3d, 0xcb, 0x3d,
0x40, 0xb6, 0xd0, 0xf0, 0x10, 0x54, 0xd8, 0x47, 0x25, 0x51, 0xc5, 0x41, 0x79, 0x00, 0xe5,
0xa0, 0x72, 0xde, 0xbb, 0x3b, 0x62, 0x17, 0xf6, 0xbc, 0x5d, 0x00, 0x76, 0x2e, 0xa7, 0x3b,
0xb6, 0xf1, 0x98, 0x72, 0x59, 0x2a, 0x73, 0xb0, 0x21, 0xd6, 0x49, 0xe0, 0xc0, 0xd5, 0xeb,
0x02, 0x7d, 0x4b, 0x41, 0x28, 0x70, 0x2d, 0xec, 0x2b, 0x71, 0x1f, 0x0b, 0xb9, 0x71, 0x63,
0x06, 0xe6, 0xbc, 0x60, 0xbb, 0xf4, 0x9a, 0x62, 0x43, 0x09, 0x18, 0x4e, 0x93, 0x06, 0x4d,
0x76, 0xfa, 0x7f, 0xbd, 0x02, 0xe4, 0x50, 0x91, 0x12, 0xe5, 0x86, 0xff, 0x64, 0x1e, 0xaf,
0x7e, 0xb3, 0xb2, 0xde, 0x89, 0xc1, 0xa2, 0x6f, 0x40, 0x7b, 0x41, 0x51, 0x63, 0xea, 0x25,
0xd1, 0x97, 0x57, 0x92, 0xa8, 0x45, 0xa1, 0xa5, 0x45, 0x21, 0x43, 0x7f, 0x83, 0x15, 0x29,
0xd0, 0x30, 0x53, 0x32, 0xb4, 0x5a, 0x17, 0x96, 0xbc, 0xc2, 0x68, 0xa9, 0xb7, 0xaf, 0xac,
0xdf, 0xf1, 0xe3, 0x89, 0xba, 0x24, 0x79, 0x54, 0xc6, 0x14, 0x07, 0x1c, 0x1e, 0x0d, 0x3a,
0x6b, 0xe5, 0x3d, 0x4e, 0x10, 0x60, 0x96, 0xec, 0x6c, 0xda, 0x47, 0xae, 0x03, 0x25, 0x39,
0x1d, 0x74, 0xc8, 0xac, 0x6a, 0xf2, 0x6b, 0x05, 0x2a, 0x9a, 0xe7, 0xe8, 0x92, 0xd6, 0xc2,
0x6d, 0xfa, 0xe8, 0xa7, 0x9d, 0x5f, 0x48, 0xc9, 0x75, 0xf1, 0x66, 0x6a, 0xdb, 0x5d, 0x9a,
0xcd, 0x27, 0xdd, 0xb9, 0x24, 0x04, 0x9c, 0x18, 0xc2, 0x6d, 0x0c, 0x91, 0x34, 0x48, 0x42,
0x6f, 0xe9, 0x59, 0x70, 0xc4, 0x7e, 0x81, 0x0e, 0x32, 0x0a, 0x93, 0x48, 0xb0, 0xc0, 0x15,
0x9e, 0x05, 0xac, 0x36, 0x16, 0xcb, 0x59, 0x65, 0xa0, 0x83, 0xdf, 0x3e, 0xda, 0xfb, 0x1d,
0x1a, 0xdb, 0x65, 0xec, 0x9a, 0xc6, 0xc3, 0x8e, 0x3c, 0x45, 0xfd, 0xc8, 0xf5, 0x1c, 0x6a,
0x67, 0x0d, 0x8f, 0x99, 0x7d, 0x30, 0x21, 0x8c, 0xea, 0x22, 0x87, 0x65, 0xc9, 0xb2, 0x4c,
0xe4, 0x1b, 0x46, 0xba, 0x54, 0xbd, 0x7c, 0xca, 0xd5, 0x8f, 0x5b, 0xa5, 0x01, 0x04, 0xd8,
0x0a, 0x16, 0xbf, 0xb9, 0x50, 0x2e, 0x37, 0x2f, 0x64, 0xf3, 0x70, 0x11, 0x02, 0x05, 0x31,
0x9b, 0xa0, 0xb2, 0x01, 0x5e, 0x4f, 0x19, 0xc9, 0xd4, 0xea, 0xa1, 0x79, 0x54, 0x53, 0xa7,
0xde, 0x2f, 0x49, 0xd3, 0xd1, 0x63, 0xb5, 0x03, 0x15, 0x4e, 0xbf, 0x04, 0xb3, 0x26, 0x8b,
0x20, 0xb2, 0x45, 0xcf, 0xcd, 0x5b, 0x82, 0x32, 0x88, 0x61, 0xa7, 0xa8, 0xb2, 0xa0, 0x72,
0x96, 0xc0, 0xdb, 0x2b, 0xe2, 0x5f, 0xba, 0xe3, 0xf5, 0x8a, 0xde, 0xf1, 0x18, 0x01, 0x16,
0x40, 0xd9, 0x86, 0x12, 0x09, 0x18, 0x1b, 0x05, 0x0c, 0xb1, 0xb5, 0x47, 0xe2, 0x43, 0xab,
0xfe, 0x92, 0x63, 0x7e, 0x95, 0x2b, 0xf0, 0xaf, 0xe1, 0xf1, 0xc3, 0x4a, 0xff, 0x2b, 0x09,
0xbb, 0x4a, 0x0e, 0x9a, 0xc4, 0xd8, 0x64, 0x7d, 0x83, 0xa0, 0x4f, 0x44, 0xdb, 0xc4, 0xa8,
0x58, 0xef, 0xfc, 0x9e, 0x77, 0xf9, 0xa6, 0x8f, 0x58, 0x8b, 0x12, 0xf4, 0xe9, 0x81, 0x12,
0x47, 0x51, 0x41, 0x83, 0xef, 0xf6, 0x73, 0xbc, 0x8e, 0x0f, 0x4c, 0x8f, 0x4e, 0x69, 0x90,
0x77, 0x29, 0x5d, 0x92, 0xb0, 0x6d, 0x06, 0x67, 0x29, 0x60, 0xbd, 0x4b, 0x17, 0xc8, 0x89,
0x69, 0x28, 0x29, 0xd6, 0x78, 0xcb, 0x11, 0x4c, 0xba, 0x8b, 0x68, 0xae, 0x7e, 0x9f, 0xef,
0x95, 0xda, 0xe2, 0x9e, 0x7f, 0xe9, 0x55, 0xe5, 0xe1, 0xe2, 0xb7, 0xe6, 0x5f, 0xbb, 0x2c,
0xa2, 0xe6, 0xee, 0xc7, 0x0a, 0x60, 0xa9, 0xd1, 0x80, 0xdf, 0x7f, 0xd6, 0x97, 0xab, 0x1d,
0x22, 0x25, 0xfc, 0x79, 0x23, 0xe0, 0xae, 0xc5, 0xef, 0x16, 0xa4, 0xa1, 0x0f, 0x92, 0xa9,
0xc7, 0xe3, 0x3a, 0x55, 0xdf, 0x62, 0x49, 0xd9, 0xf5, 0x84, 0x49, 0xc5, 0x90, 0x34, 0xd3,
0xe1, 0xac, 0x99, 0x21, 0xb1, 0x02, 0x76, 0x4a, 0xfa, 0xd4, 0xbb, 0xa4, 0x9c, 0xa2, 0xe2,
0xcb, 0x3d, 0x3b, 0x14, 0x75, 0x60, 0xd1, 0x02, 0xb4, 0xa3, 0xb4, 0x72, 0x06, 0xf9, 0x19,
0x9c, 0xe2, 0xe4, 0xa7, 0x0f, 0x25, 0x88, 0xc6, 0x86, 0xd6, 0x8c, 0x74, 0x4e, 0x6e, 0xfc,
0xa8, 0x48, 0x9e, 0xa7, 0x9d, 0x1a, 0x4b, 0x37, 0x09, 0xc8, 0xb0, 0x10, 0xbe, 0x6f, 0xfe,
0xa3, 0xc4, 0x7a, 0xb5, 0x3d, 0xe8, 0x30, 0xf1, 0x0d, 0xa0, 0xb2, 0x44, 0xfc, 0x9b, 0x8c,
0xf8, 0x61, 0xed, 0x81, 0xd1, 0x62, 0x11, 0xb4, 0xe1, 0xd5, 0x39, 0x52, 0x89, 0xd3, 0xa8,
0x49, 0x31, 0xdf, 0xb6, 0xf9, 0x91, 0xf4, 0x1c, 0x9d, 0x09, 0x95, 0x40, 0x56, 0xe7, 0xe3,
0xcd, 0x5c, 0x92, 0xc1, 0x1d, 0x6b, 0xe9, 0x78, 0x6f, 0x8e, 0x94, 0x42, 0x66, 0xa2, 0xaa,
0xd3, 0xc8, 0x2e, 0xe3, 0xf6, 0x07, 0x72, 0x0b, 0x6b, 0x1e, 0x7b, 0xb9, 0x7c, 0xe0, 0xa0,
0xbc, 0xd9, 0x25, 0xdf, 0x87, 0xa8, 0x5f, 0x9c, 0xcc, 0xf0, 0xdb, 0x42, 0x8e, 0x07, 0x31,
0x13, 0x01, 0x66, 0x32, 0xd1, 0xb8, 0xd6, 0xe3, 0x5e, 0x12, 0x76, 0x61, 0xd3, 0x38, 0x89,
0xe6, 0x17, 0x6f, 0xa5, 0xf2, 0x71, 0x0e, 0xa5, 0xe2, 0x88, 0x30, 0xbb, 0xbe, 0x8a, 0xea,
0xc7, 0x62, 0xc4, 0xcf, 0xb8, 0xcd, 0x33, 0x8d, 0x3d, 0x3e, 0xb5, 0x60, 0x3a, 0x03, 0x92,
0xe4, 0x6d, 0x1b, 0xe0, 0xb4, 0x84, 0x08, 0x55, 0x88, 0xa7, 0x3a, 0xb9, 0x3d, 0x43, 0xc3,
0xc0, 0xfa, 0x07, 0x6a, 0xca, 0x94, 0xad, 0x99, 0x55, 0xf1, 0xf1, 0xc0, 0x23, 0x87, 0x1d,
0x3d, 0x1c, 0xd1, 0x66, 0xa0, 0x57, 0x10, 0x52, 0xa2, 0x7f, 0xbe, 0xf9, 0x88, 0xb6, 0x02,
0xbf, 0x08, 0x23, 0xa9, 0x0c, 0x63, 0x17, 0x2a, 0xae, 0xf5, 0xf7, 0xb7, 0x21, 0x83, 0x92,
0x31, 0x23, 0x0d, 0x20, 0xc3, 0xc2, 0x05, 0x21, 0x62, 0x8e, 0x45, 0xe8, 0x14, 0xc1, 0xda,
0x75, 0xb8, 0xf8, 0x92, 0x01, 0xd0, 0x5d, 0x18, 0x9f, 0x99, 0x11, 0x19, 0xf5, 0x35, 0xe8,
0x7f, 0x20, 0x88, 0x8c, 0x05, 0x75, 0xf5, 0xd7, 0x40, 0x17, 0xbb, 0x1e, 0x36, 0x52, 0xd9,
0xa4, 0x9c, 0xc2, 0x9d, 0x42, 0x81, 0xd8, 0xc7, 0x8a, 0xe7, 0x4c, 0x81, 0xe0, 0xb7, 0x57,
0xed, 0x48, 0x8b, 0xf0, 0x97, 0x15, 0x61, 0xd9, 0x2c, 0x7c, 0x45, 0xaf, 0xc2, 0xcd, 0xfc,
0xaa, 0x13, 0xad, 0x59, 0xcc, 0xb2, 0xb2, 0x6e, 0xdd, 0x63, 0x9c, 0x32, 0x0f, 0xec, 0x83,
0xbe, 0x78, 0xac, 0x91, 0x44, 0x1a, 0x1f, 0xea, 0xfd, 0x5d, 0x8e, 0xb4, 0xc0, 0x84, 0xd4,
0xac, 0xb4, 0x87, 0x5f, 0xac, 0xef, 0xdf, 0xcd, 0x12, 0x56, 0xc8, 0xcd, 0xfe, 0xc5, 0xda,
0xd3, 0xc1, 0x69, 0xf3, 0x61, 0x05, 0xea, 0x25, 0xe2, 0x12, 0x05, 0x8f, 0x39, 0x08, 0x08,
0x7c, 0x37, 0xb6, 0x7e, 0x5b, 0xd8, 0xb1, 0x0e, 0xf2, 0xdb, 0x4b, 0xf1, 0xad, 0x90, 0x01,
0x57, 0xcd, 0xa0, 0xb4, 0x52, 0xe8, 0xf3, 0xd7, 0x8a, 0xbd, 0x4f, 0x9f, 0x21, 0x40, 0x72,
0xa4, 0xfc, 0x0b, 0x01, 0x2b, 0x2f, 0xb6, 0x4c, 0x95, 0x2d, 0x35, 0x33, 0x41, 0x6b, 0xa0,
0x93, 0xe7, 0x2c, 0xf2, 0xd3, 0x72, 0x8b, 0xf4, 0x4f, 0x15, 0x3c, 0xaf, 0xd6, 0x12, 0xde,
0x3f, 0x83, 0x3f, 0xff, 0xf8, 0x7f, 0xf6, 0xcc, 0xa6, 0x7f, 0xc9, 0x9a, 0x6e, 0x1f, 0xc1,
0x0c, 0xfb, 0xee, 0x9c, 0xe7, 0xaf, 0xc9, 0x26, 0x54, 0xef, 0xb0, 0x39, 0xef, 0xb2, 0xe9,
0x23, 0xc4, 0xef, 0xd1, 0xa1, 0xa4, 0x25, 0x24, 0x6f, 0x8d, 0x6a, 0xe5, 0x8a, 0x32, 0x3a,
0xaf, 0xfc, 0xda, 0xce, 0x18, 0x25, 0x42, 0x07, 0x4d, 0x45, 0x8b, 0xdf, 0x85, 0xcf, 0x55,
0xb2, 0x24, 0xfe, 0x9c, 0x69, 0x74, 0xa7, 0x6e, 0xa0, 0xce, 0xc0, 0x39, 0xf4, 0x86, 0xc6,
0x8d, 0xae, 0xb9, 0x48, 0x64, 0x13, 0x0b, 0x40, 0x81, 0xa2, 0xc9, 0xa8, 0x85, 0x51, 0xee,
0x9f, 0xcf, 0xa2, 0x8c, 0x19, 0x52, 0x48, 0xe2, 0xc1, 0xa8, 0x58, 0xb4, 0x10, 0x24, 0x06,
0x58, 0x51, 0xfc, 0xb9, 0x12, 0xec, 0xfd, 0x73, 0xb4, 0x6d, 0x84, 0xfa, 0x06, 0x8b, 0x05,
0x0b, 0x2d, 0xd6, 0xd6, 0x1f, 0x29, 0x82, 0x9f, 0x19, 0x12, 0x1e, 0xb2, 0x04, 0x8f, 0x7f,
0x4d, 0xbd, 0x30, 0x2e, 0xe3, 0xe0, 0x88, 0x29, 0xc5, 0x93, 0xd6, 0x6c, 0x1f, 0x29, 0x45,
0x91, 0xa7, 0x58, 0xcd, 0x05, 0x17, 0xd6, 0x6d, 0xb3, 0xca, 0x66, 0xcc, 0x3c, 0x4a, 0x74,
0xfd, 0x08, 0x10, 0xa6, 0x99, 0x92, 0x10, 0xd2, 0x85, 0xab, 0x6e, 0x1d, 0x0e, 0x8b, 0x26,
0x46, 0xd1, 0x6c, 0x84, 0xc0, 0x26, 0x43, 0x59, 0x68, 0xf0, 0x13, 0x1d, 0xfb, 0xe3, 0xd1,
0xd2, 0xb4, 0x71, 0x9e, 0xf2, 0x59, 0x6a, 0x33, 0x29, 0x79, 0xd2, 0xd7, 0x26, 0xf1, 0xae,
0x78, 0x9e, 0x1f, 0x0f, 0x3f, 0xe3, 0xe8, 0xd0, 0x27, 0x78, 0x77, 0xf6, 0xac, 0x9c, 0x56,
0x39, 0x73, 0x8a, 0x6b, 0x2f, 0x34, 0x78, 0xb1, 0x11, 0xdb, 0xa4, 0x5c, 0x80, 0x01, 0x71,
0x6a, 0xc2, 0xd1, 0x2e, 0x5e, 0x76, 0x28, 0x70, 0x93, 0xae, 0x3e, 0x78, 0xb0, 0x1f, 0x0f,
0xda, 0xbf, 0xfb, 0x8a, 0x67, 0x65, 0x4f, 0x91, 0xed, 0x49, 0x75, 0x78, 0x62, 0xa2, 0x93,
0xb5, 0x70, 0x7f, 0x4d, 0x08, 0x4e, 0x79, 0x61, 0xa8, 0x5f, 0x7f, 0xb4, 0x65, 0x9f, 0x91,
0x54, 0x3a, 0xe8, 0x50, 0x33, 0xd3, 0xd5, 0x8a, 0x7c, 0xf3, 0x9e, 0x8b, 0x77, 0x7b, 0xc6,
0xc6, 0x0c, 0x45, 0x95, 0x1f, 0xb0, 0xd0, 0x0b, 0x27, 0x4a, 0xfd, 0xc7, 0xf7, 0x0d, 0x5a,
0x43, 0xc9, 0x7d, 0x35, 0xb0, 0x7d, 0xc4, 0x9c, 0x57, 0x1e, 0x76, 0x0d, 0xf1, 0x95, 0x30,
0x71, 0xcc, 0xb3, 0x66, 0x3b, 0x63, 0xa8, 0x6c, 0xa3, 0x43, 0xa0, 0x24, 0xcc, 0xb7, 0x53,
0xfe, 0xfe, 0xbc, 0x6e, 0x60, 0x89, 0xaf, 0x16, 0x21, 0xc8, 0x91, 0x6a, 0x89, 0xce, 0x80,
0x2c, 0xf1, 0x59, 0xce, 0xc3, 0x60, 0x61, 0x3b, 0x0b, 0x19, 0xfe, 0x99, 0xac, 0x65, 0x90,
0x15, 0x12, 0x05, 0xac, 0x7e, 0xff, 0x98, 0x7b, 0x66, 0x64, 0x0e, 0x4b, 0x5b, 0xaa, 0x8d,
0x3b, 0xd2, 0x56, 0xcf, 0x99, 0x39, 0xee, 0x22, 0x81, 0xd0, 0x60, 0x06, 0x66, 0x20, 0x81,
0x48, 0x3c, 0x6f, 0x3a, 0x77, 0xba, 0xcb, 0x52, 0xac, 0x79, 0x56, 0xaf, 0xe9, 0x16, 0x17,
0x0a, 0xa3, 0x82, 0x08, 0xd5, 0x3c, 0x97, 0xcb, 0x09, 0xff, 0x7f, 0xf9, 0x4f, 0x60, 0x05,
0xb9, 0x53, 0x26, 0xaa, 0xb8, 0x50, 0xaa, 0x19, 0x25, 0xae, 0x5f, 0xea, 0x8a, 0xd0, 0x89,
0x12, 0x80, 0x43, 0x50, 0x24, 0x12, 0x21, 0x14, 0xcd, 0x77, 0xeb, 0x21, 0xcc, 0x5c, 0x09,
0x64, 0xf3, 0xc7, 0xcb, 0xc5, 0x4b, 0xc3, 0xe7, 0xed, 0xe7, 0x86, 0x2c, 0x1d, 0x8e, 0x19,
0x52, 0x9b, 0x2a, 0x0c, 0x18, 0x72, 0x0b, 0x1e, 0x1b, 0xb0, 0x0f, 0x42, 0x99, 0x04, 0xae,
0xd5, 0xb7, 0x89, 0x1a, 0xb9, 0x4f, 0xd6, 0xaf, 0xf3, 0xc9, 0x93, 0x6f, 0xb0, 0x60, 0x83,
0x6e, 0x6b, 0xd1, 0x5f, 0x3f, 0x1a, 0x83, 0x1e, 0x24, 0x00, 0x87, 0xb5, 0x3e, 0xdb, 0xf9,
0x4d, 0xa7, 0x16, 0x2e, 0x19, 0x5b, 0x8f, 0x1b, 0x0d, 0x47, 0x72, 0x42, 0xe9, 0x0a, 0x11,
0x08, 0x2d, 0x88, 0x1c, 0xbc, 0xc7, 0xb4, 0xbe, 0x29, 0x4d, 0x03, 0x5e, 0xec, 0xdf, 0xf3,
0x3d, 0x2f, 0xe8, 0x1d, 0x9a, 0xd2, 0xd1, 0xab, 0x41, 0x3d, 0x87, 0x11, 0x45, 0xb0, 0x0d,
0x46, 0xf5, 0xe8, 0x95, 0x62, 0x1c, 0x68, 0xf7, 0xa6, 0x5b, 0x39, 0x4e, 0xbf, 0x47, 0xba,
0x5d, 0x7f, 0xb7, 0x6a, 0xf4, 0xba, 0x1d, 0x69, 0xf6, 0xa4, 0xe7, 0xe4, 0x6b, 0x3b, 0x0d,
0x23, 0x16, 0x4a, 0xb2, 0x68, 0xf0, 0xb2, 0x0d, 0x09, 0x17, 0x6a, 0x63, 0x8c, 0x83, 0xd3,
0xbd, 0x05, 0xc9, 0xf6, 0xf0, 0xa1, 0x31, 0x0b, 0x2c, 0xac, 0x83, 0xac, 0x80, 0x34, 0x32,
0xb4, 0xec, 0xd0, 0xbc, 0x54, 0x82, 0x9a, 0xc8, 0xf6, 0xa0, 0x7d, 0xc6, 0x79, 0x73, 0xf4,
0x20, 0x99, 0xf3, 0xb4, 0x01, 0xde, 0x91, 0x27, 0xf2, 0xc0, 0xdc, 0x81, 0x00, 0x4e, 0x7e,
0x07, 0x99, 0xc8, 0x3a, 0x51, 0xbc, 0x38, 0xd6, 0x8a, 0xa2, 0xde, 0x3b, 0x6a, 0x8c, 0x1a,
0x7c, 0x81, 0x0f, 0x3a, 0x1f, 0xe4, 0x05, 0x7b, 0x20, 0x35, 0x6b, 0xa5, 0x6a, 0xa7, 0xe7,
0xbc, 0x9c, 0x20, 0xec, 0x00, 0x15, 0xe2, 0x51, 0xaf, 0x77, 0xeb, 0x29, 0x3c, 0x7d, 0x2e,
0x00, 0x5c, 0x81, 0x21, 0xfa, 0x35, 0x6f, 0x40, 0xef, 0xfb, 0xd1, 0x3f, 0xcc, 0x9d, 0x55,
0x53, 0xfb, 0x5a, 0xa5, 0x56, 0x89, 0x0b, 0x52, 0xeb, 0x57, 0x73, 0x4f, 0x1b, 0x67, 0x24,
0xcb, 0xb8, 0x6a, 0x10, 0x69, 0xd6, 0xfb, 0x52, 0x40, 0xff, 0x20, 0xa5, 0xf3, 0x72, 0xe1,
0x3d, 0xa4, 0x8c, 0x81, 0x66, 0x16, 0x0d, 0x5d, 0xad, 0xa8, 0x50, 0x25, 0x78, 0x31, 0x77,
0x0c, 0x57, 0xe4, 0xe9, 0x15, 0x2d, 0xdb, 0x07, 0x87, 0xc8, 0xb0, 0x43, 0xde, 0xfc, 0xfe,
0xa9, 0xeb, 0xf5, 0xb0, 0xd3, 0x7b, 0xe9, 0x1f, 0x6e, 0xca, 0xe4, 0x03, 0x95, 0xc5, 0xd1,
0x59, 0x72, 0x63, 0xf0, 0x86, 0x54, 0xe8, 0x16, 0x62, 0x0b, 0x35, 0x29, 0xc2, 0x68, 0xd0,
0xd6, 0x3e, 0x90, 0x60, 0x57, 0x1d, 0xc9, 0xed, 0x3f, 0xed, 0xb0, 0x2f, 0x7e, 0x97, 0x02,
0x51, 0xec, 0xee, 0x6f, 0x82, 0x74, 0x76, 0x7f, 0xfb, 0xd6, 0xc4, 0xc3, 0xdd, 0xe8, 0xb1,
0x60, 0xfc, 0xc6, 0xb9, 0x0d, 0x6a, 0x33, 0x78, 0xc6, 0xc1, 0xbf, 0x86, 0x2c, 0x50, 0xcc,
0x9a, 0x70, 0x8e, 0x7b, 0xec, 0xab, 0x95, 0xac, 0x53, 0xa0, 0x4b, 0x07, 0x88, 0xaf, 0x42,
0xed, 0x19, 0x8d, 0xf6, 0x32, 0x17, 0x48, 0x47, 0x1d, 0x41, 0x6f, 0xfe, 0x2e, 0xa7, 0x8f,
0x4b, 0xa0, 0x51, 0xf3, 0xbf, 0x02, 0x0a, 0x48, 0x58, 0xf7, 0xa1, 0x6d, 0xea, 0xa5, 0x13,
0x5a, 0x5b, 0xea, 0x0c, 0x9e, 0x52, 0x4f, 0x9e, 0xb9, 0x71, 0x7f, 0x23, 0x83, 0xda, 0x1b,
0x86, 0x9a, 0x41, 0x29, 0xda, 0x70, 0xe7, 0x64, 0xa1, 0x7b, 0xd5, 0x0a, 0x22, 0x0d, 0x5c,
0x40, 0xc4, 0x81, 0x07, 0x25, 0x35, 0x4a, 0x1c, 0x10, 0xdb, 0x45, 0x0a, 0xff, 0x36, 0xd4,
0xe0, 0xeb, 0x5f, 0x68, 0xd6, 0x67, 0xc6, 0xd0, 0x8b, 0x76, 0x1a, 0x7d, 0x59, 0x42, 0xa1,
0xcb, 0x96, 0x4d, 0x84, 0x09, 0x9a, 0x3d, 0xe0, 0x52, 0x85, 0x6e, 0x48, 0x90, 0x85, 0x2a,
0x63, 0xb2, 0x69, 0xd2, 0x00, 0x43, 0x31, 0x37, 0xb3, 0x52, 0xaf, 0x62, 0xfa, 0xc1, 0xe0,
0x03, 0xfb, 0x62, 0xaa, 0x88, 0xc9, 0xb2, 0x2c, 0xd5, 0xa8, 0xf5, 0xa5, 0x4c, 0x12, 0x59,
0x4e, 0x06, 0x5e, 0x9b, 0x15, 0x66, 0x11, 0xb2, 0x27, 0x92, 0xdc, 0x98, 0x59, 0xde, 0xdf,
0xfa, 0x9a, 0x32, 0x2e, 0xc0, 0x5d, 0x3c, 0x33, 0x41, 0x6d, 0xaf, 0xb2, 0x25, 0x23, 0x14,
0xa5, 0x7b, 0xc7, 0x9b, 0x68, 0xf3, 0xda, 0xeb, 0xe3, 0xa9, 0xe2, 0x6f, 0x0e, 0x1d, 0x1c,
0xba, 0x55, 0xb6, 0x34, 0x6a, 0x93, 0x1f, 0x1f, 0xb8, 0x34, 0xc8, 0x84, 0x08, 0xb1, 0x6b,
0x6a, 0x28, 0x74, 0x74, 0xe5, 0xeb, 0x75, 0xe9, 0x7c, 0xd8, 0xba, 0xd8, 0x42, 0xa5, 0xee,
0x1f, 0x80, 0xd9, 0x96, 0xb2, 0x2e, 0xe7, 0xbf, 0xba, 0xeb, 0xd1, 0x69, 0xbb, 0x8f, 0xfd,
0x5a, 0x63, 0x8f, 0x39, 0x7f, 0xdf, 0x1d, 0x37, 0xd2, 0x18, 0x35, 0x9d, 0xb6, 0xcc, 0xe4,
0x27, 0x81, 0x89, 0x38, 0x38, 0x68, 0x33, 0xe7, 0x78, 0xd8, 0x76, 0xf5, 0xee, 0xd0, 0x4a,
0x07, 0x69, 0x19, 0x7a, 0xad, 0x18, 0xb1, 0x94, 0x61, 0x45, 0x53, 0xa2, 0x48, 0xda, 0x96,
0x4a, 0xf9, 0xee, 0x94, 0x2a, 0x1f, 0x6e, 0x18, 0x3c, 0x92, 0x46, 0xd1, 0x1a, 0x28, 0x18,
0x32, 0x1f, 0x3a, 0x45, 0xbe, 0x04, 0x35, 0x92, 0xe5, 0xa3, 0xcb, 0xb5, 0x2e, 0x32, 0x43,
0xac, 0x65, 0x17, 0x89, 0x99, 0x15, 0x03, 0x9e, 0xb1, 0x23, 0x2f, 0xed, 0x76, 0x4d, 0xd8,
0xac, 0x21, 0x40, 0xc4, 0x99, 0x4e, 0x65, 0x71, 0x2c, 0xb3, 0x45, 0xab, 0xfb, 0xe7, 0x72,
0x39, 0x56, 0x30, 0x6d, 0xfb, 0x74, 0xeb, 0x99, 0xf3, 0xcd, 0x57, 0x5c, 0x78, 0x75, 0xe9,
0x8d, 0xc3, 0xa2, 0xfb, 0x5d, 0xe0, 0x90, 0xc5, 0x55, 0xad, 0x91, 0x53, 0x4e, 0x9e, 0xbd,
0x8c, 0x49, 0xa4, 0xa4, 0x69, 0x10, 0x0c, 0xc5, 0x76, 0xe9, 0x25, 0x86, 0x8d, 0x66, 0x23,
0xa8, 0xdb, 0x5c, 0xe8, 0xd9, 0x30, 0xe1, 0x15, 0x7b, 0xc0, 0x99, 0x0f, 0x03, 0xec, 0xaa,
0x12, 0xef, 0xce, 0xd4, 0xea, 0x55, 0x5c, 0x08, 0x86, 0xf4, 0xf4, 0xb0, 0x83, 0x42, 0x95,
0x37, 0xb6, 0x38, 0xe0, 0x2b, 0x54, 0x89, 0xbd, 0x4e, 0x20, 0x9d, 0x3f, 0xc3, 0x4b, 0xb7,
0xec, 0xfa, 0x5a, 0x14, 0x03, 0xcb, 0x64, 0xc8, 0x34, 0x4a, 0x4b, 0x6e, 0xf8, 0x6e, 0x56,
0xf6, 0xdd, 0x5f, 0xa1, 0x24, 0xe2, 0xd4, 0xd0, 0x82, 0x64, 0x1f, 0x8e, 0x9b, 0xfa, 0xb4,
0xcb, 0xdb, 0x0a, 0xe8, 0x15, 0xfc, 0x15, 0xab, 0x4b, 0x18, 0xbf, 0xd4, 0x42, 0x14, 0x48,
0x82, 0x85, 0xdd, 0xeb, 0x49, 0x1b, 0x0b, 0x0b, 0x05, 0xe9, 0xb4, 0xa1, 0x33, 0x0a, 0x5d,
0x0e, 0x6c, 0x4b, 0xc0, 0xd6, 0x6c, 0x7c, 0xfb, 0x69, 0x0b, 0x53, 0x19, 0xe4, 0xf3, 0x35,
0xfc, 0xbe, 0xa1, 0x34, 0x02, 0x09, 0x4f, 0x74, 0x86, 0x92, 0xcd, 0x5d, 0x1a, 0xc1, 0x27,
0x0c, 0xf2, 0xc5, 0xcf, 0xdd, 0x23, 0x93, 0x02, 0xbd, 0x41, 0x5e, 0x42, 0xf0, 0xa0, 0x9d,
0x0c, 0x72, 0xc8, 0xec, 0x32, 0x0a, 0x8a, 0xfd, 0x3d, 0x5a, 0x41, 0x27, 0x0c, 0x88, 0x59,
0xad, 0x94, 0x2e, 0xef, 0x5d, 0x8f, 0xc7, 0xdf, 0x66, 0xe4, 0xdd, 0x56, 0x6c, 0x7b, 0xca,
0x55, 0x81, 0xae, 0xae, 0x5c, 0x1b, 0x1a, 0xab, 0xae, 0x99, 0x8d, 0xcc, 0x42, 0x97, 0x59,
0xf4, 0x14, 0x3f, 0x75, 0xc6, 0xd1, 0x88, 0xba, 0xaa, 0x84, 0x4a, 0xd0, 0x34, 0x08, 0x3b,
0x7d, 0xdb, 0x15, 0x06, 0xb0, 0x5c, 0xbd, 0x40, 0xf5, 0xa8, 0xec, 0xae, 0x36, 0x40, 0xdd,
0x90, 0x1c, 0x3e, 0x0d, 0x7e, 0x73, 0xc7, 0xc2, 0xc5, 0x6a, 0xff, 0x52, 0x05, 0x7f, 0xbe,
0xd0, 0x92, 0xfd, 0xb3, 0x6f, 0xff, 0x5d, 0xb7, 0x97, 0x64, 0x73, 0x7b, 0xca, 0xd1, 0x98,
0x24, 0x6b, 0x0b, 0x01, 0x68, 0xdd, 0x27, 0x85, 0x85, 0xb5, 0x83, 0xc1, 0xe0, 0x50, 0x64,
0xc7, 0xaf, 0xf1, 0xc6, 0x4d, 0xb1, 0xef, 0xc9, 0xb4, 0x0a, 0x6d, 0x65, 0xf3, 0x47, 0xcc,
0xa3, 0x02, 0x21, 0x0c, 0xbe, 0x22, 0x29, 0x05, 0xcf, 0x5f, 0xe8, 0x94, 0x6c, 0xe5, 0xdc,
0xc4, 0xdf, 0xbe, 0x3e, 0xa8, 0xb4, 0x18, 0xb0, 0x99, 0xb8, 0x6f, 0xff, 0x5d, 0xb9, 0xfd,
0x3b, 0x5d, 0x16, 0xbf, 0x3e, 0xd8, 0xb3, 0xd8, 0x08, 0x34, 0xf6, 0x47, 0x35, 0x5b, 0x72,
0x1a, 0x33, 0xad, 0x52, 0x5d, 0xb8, 0xd0, 0x77, 0xc6, 0xab, 0xba, 0x55, 0x09, 0x5f, 0x02,
0xf8, 0xd4, 0x5f, 0x53, 0x06, 0x91, 0xcd, 0x74, 0x42, 0xae, 0x54, 0x91, 0x81, 0x62, 0x13,
0x6f, 0xd8, 0xa9, 0x77, 0xc3, 0x6c, 0xcb, 0xf1, 0x29, 0x5a, 0xcc, 0xda, 0x35, 0xbd, 0x52,
0x23, 0xbe, 0x59, 0xeb, 0x12, 0x6d, 0xb7, 0x53, 0xee, 0xfc, 0xb4, 0x1b, 0x13, 0x5e, 0xba,
0x16, 0x7c, 0xc5, 0xf3, 0xe3, 0x6d, 0x07, 0x78, 0xf5, 0x2b, 0x21, 0x05, 0x88, 0x4c, 0xc0,
0xa1, 0xe3, 0x36, 0x10, 0xf8, 0x1b, 0xd8, 0x17, 0xfb, 0x6a, 0x4e, 0xd8, 0xb3, 0x47, 0x2d,
0x99, 0xbd, 0xbb, 0x5d, 0x37, 0x7d, 0xba, 0xf1, 0xe1, 0x7c, 0xc0, 0xc5, 0x54, 0x62, 0x7f,
0xcf, 0x5a, 0x4a, 0x93, 0xcc, 0xf1, 0x1b, 0x34, 0xc8, 0xa6, 0x05, 0x4c, 0x55, 0x8b, 0x54,
0x84, 0xd5, 0x77, 0xeb, 0xc0, 0x6d, 0x3a, 0x29, 0xbd, 0x75, 0x61, 0x09, 0x9a, 0x2c, 0xbb,
0xf7, 0x18, 0x79, 0x34, 0x90, 0x24, 0xa5, 0x81, 0x70, 0x87, 0xc5, 0x02, 0x7c, 0xba, 0xd4,
0x5e, 0x14, 0x8e, 0xe4, 0xed, 0xa2, 0x61, 0x6a, 0xb9, 0x6e, 0xb5, 0x4a, 0xb9, 0x01, 0x46,
0xf4, 0xcf, 0xbc, 0x09, 0x2f, 0x27, 0x4b, 0xbd, 0x86, 0x7a, 0x10, 0xe1, 0xd4, 0xc8, 0xd9,
0x20, 0x8d, 0x8a, 0x63, 0x00, 0x63, 0x44, 0xeb, 0x54, 0x0b, 0x75, 0x49, 0x10, 0xa2, 0xa7,
0xad, 0xb9, 0xd1, 0x01, 0x80, 0x63, 0x25, 0xc8, 0x12, 0xa6, 0xce, 0x1e, 0xbe, 0xfe, 0x7e,
0x5f, 0x3c, 0xdb, 0x34, 0xea, 0x37, 0xec, 0x3b, 0xd5, 0x28, 0xd2, 0x07, 0x8c, 0x9a, 0xb6,
0xee, 0x5e, 0x3e, 0xdf, 0x1d, 0x99, 0xb0, 0xe2, 0x46, 0xef, 0x5c, 0x1b, 0xb4, 0xea, 0x56,
0x2e, 0xde, 0x1f, 0x9d, 0xb8, 0xd3, 0x24, 0xab, 0xd4, 0x2a, 0xd6, 0x2e, 0xde, 0x1f, 0x9d,
0xb8, 0xf2, 0x66, 0x2f, 0xbd, 0xf8, 0x72, 0x66, 0x4e, 0x1e, 0x9f, 0x9d, 0xb8, 0xf2, 0x47,
0x0c, 0x9a, 0xb6, 0xee, 0x3f, 0xfc, 0x7a, 0x57, 0x0d, 0x79, 0x70, 0x62, 0x27, 0xad, 0xb9,
0xd1, 0x01, 0x61, 0x40, 0x02, 0x67, 0x2d, 0xd8, 0x32, 0xe6, 0x2f, 0xdc, 0x3a, 0xd7, 0x2c,
0xbb, 0xf4, 0x4b, 0xf5, 0x49, 0xf1, 0x60, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0xf9, 0x51, 0x01,
0x80, 0x63, 0x25, 0xa9, 0xb1, 0xe0, 0x42, 0xe7, 0x4c, 0x1a, 0x97, 0xac, 0xbb, 0xf4, 0x6a,
0x37, 0xcd, 0x18, 0xb2, 0xe6, 0x2f, 0xdc, 0x1b, 0x95, 0xa8, 0xd2, 0x07, 0x6d, 0x58, 0x32,
0xe6, 0x4e, 0x1e, 0x9f, 0xbc, 0xfa, 0x57, 0x0d, 0x79, 0x51, 0x20, 0xc2, 0x06, 0x6f, 0x5c,
0x1b, 0x95, 0xa8, 0xb3, 0xc5, 0xe9, 0x31, 0xe0, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0x18, 0x93,
0x85, 0x69, 0x31, 0xc1, 0xe1, 0x21, 0xc0, 0xe3, 0x44, 0x0a, 0x77, 0x6c, 0x5a, 0x17, 0x8d,
0x98, 0x93, 0xa4, 0xab, 0xd4, 0x2a, 0xb7, 0xec, 0x5a, 0x17, 0xac, 0xbb, 0xf4, 0x4b, 0x14,
0xaa, 0xb7, 0xec, 0x3b, 0xd5, 0x28, 0xb3, 0xc5, 0xe9, 0x31, 0xc1, 0x00, 0x82, 0x67, 0x4c,
0xfb, 0x55, 0x28, 0xd2, 0x26, 0xaf, 0xbd, 0xd9, 0x11, 0x81, 0x61, 0x21, 0xa1, 0xa1, 0xc0,
0x02, 0x86, 0x6f, 0x5c, 0x1b, 0xb4, 0xcb, 0x14, 0x8b, 0x94, 0xaa, 0xd6, 0x2e, 0xbf, 0xdd,
0x19, 0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x7c, 0x5b, 0x15, 0x89, 0x90, 0x83, 0x84, 0x6b, 0x54,
0x0b, 0x75, 0x68, 0x52, 0x07, 0x6d, 0x58, 0x32, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0xed, 0x58,
0x32, 0xe6, 0x4e, 0xff, 0x7c, 0x7a, 0x76, 0x6e, 0x3f, 0xdd, 0x38, 0xd3, 0x05, 0x88, 0x92,
0xa6, 0xaf, 0xdc, 0x1b, 0xb4, 0xcb, 0xf5, 0x68, 0x52, 0x07, 0x8c, 0x7b, 0x55, 0x09, 0x90,
0x83, 0x84, 0x6b, 0x54, 0x2a, 0xb7, 0xec, 0x3b, 0xd5, 0x09, 0x90, 0xa2, 0xc6, 0x0e, 0x7f,
0x7c, 0x7a, 0x57, 0x0d, 0x98, 0xb2, 0xc7, 0xed, 0x58, 0x32, 0xc7, 0x0c, 0x7b, 0x74, 0x4b,
0x14, 0x8b, 0x94, 0xaa, 0xb7, 0xcd, 0x18, 0x93, 0xa4, 0xca, 0x16, 0xae, 0xbf, 0xdd, 0x19,
0xb0, 0xe2, 0x46, 0x0e, 0x7f, 0x5d, 0x19, 0x91, 0x81, 0x80, 0x63, 0x44, 0xeb, 0x35, 0xc9,
0x10, 0x83, 0x65, 0x48, 0x12, 0xa6, 0xce, 0x1e, 0x9f, 0xbc, 0xdb, 0x15, 0x89, 0x71, 0x60,
0x23, 0xc4, 0xeb, 0x54, 0x2a, 0xb7, 0xec, 0x5a, 0x36, 0xcf, 0x81, 0x10, 0xac, 0x74
};
// clang-format off

View File

@@ -0,0 +1,219 @@
// Copyright 2022 Daniel Kao (dkao)
// Copyright 2022 Stefan Kerkmann (KarlK90)
// Copyright 2022 Ulrich Spörlein (@uqs)
// Copyright 2021 Alabastard (@Alabastard-64)
// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
// Copyright 2019 Sunjun Kim
// Copyright 2020 Ploopy Corporation
// SPDX-License-Identifier: GPL-2.0-or-later
#include "debug.h"
#include "pmw33xx_common.h"
#include "print.h"
#include "string.h"
#include "wait.h"
#include "spi_master.h"
#include "progmem.h"
extern const uint8_t pmw33xx_firmware_data[PMW33XX_FIRMWARE_LENGTH] PROGMEM;
extern const uint8_t pmw33xx_firmware_signature[3] PROGMEM;
static const pin_t cs_pins[] = PMW33XX_CS_PINS;
static bool in_burst[sizeof(cs_pins) / sizeof(pin_t)] = {0};
const size_t pmw33xx_number_of_sensors = sizeof(cs_pins) / sizeof(pin_t);
bool __attribute__((cold)) pmw33xx_upload_firmware(uint8_t sensor);
bool __attribute__((cold)) pmw33xx_check_signature(uint8_t sensor);
void pmw33xx_set_cpi_all_sensors(uint16_t cpi) {
for (uint8_t sensor = 0; sensor < pmw33xx_number_of_sensors; sensor++) {
pmw33xx_set_cpi(sensor, cpi);
}
}
bool pmw33xx_spi_start(uint8_t sensor) {
if (!spi_start(cs_pins[sensor], false, 3, PMW33XX_SPI_DIVISOR)) {
spi_stop();
return false;
}
// tNCS-SCLK, 10ns
wait_us(1);
return true;
}
bool pmw33xx_write(uint8_t sensor, uint8_t reg_addr, uint8_t data) {
if (!pmw33xx_spi_start(sensor)) {
return false;
}
if (reg_addr != REG_Motion_Burst) {
in_burst[sensor] = false;
}
// send address of the register, with MSBit = 1 to indicate it's a write
uint8_t command[2] = {reg_addr | 0x80, data};
if (spi_transmit(command, sizeof(command)) != SPI_STATUS_SUCCESS) {
return false;
}
// tSCLK-NCS for write operation is 35us
wait_us(35);
spi_stop();
// tSWW/tSWR (=18us) minus tSCLK-NCS. Could be shortened, but it looks like
// a safe lower bound
wait_us(145);
return true;
}
uint8_t pmw33xx_read(uint8_t sensor, uint8_t reg_addr) {
if (!pmw33xx_spi_start(sensor)) {
return 0;
}
// send adress of the register, with MSBit = 0 to indicate it's a read
spi_write(reg_addr & 0x7f);
// tSRAD (=160us)
wait_us(160);
uint8_t data = spi_read();
// tSCLK-NCS, 120ns
wait_us(1);
spi_stop();
// tSRW/tSRR (=20us) mins tSCLK-NCS
wait_us(19);
return data;
}
bool pmw33xx_check_signature(uint8_t sensor) {
uint8_t signature_dump[3] = {
pmw33xx_read(sensor, REG_Product_ID),
pmw33xx_read(sensor, REG_Inverse_Product_ID),
pmw33xx_read(sensor, REG_SROM_ID),
};
return memcmp(pmw33xx_firmware_signature, signature_dump, sizeof(signature_dump)) == 0;
}
bool pmw33xx_upload_firmware(uint8_t sensor) {
// Datasheet claims we need to disable REST mode first, but during startup
// it's already disabled and we're not turning it on ...
// pmw33xx_write(REG_Config2, 0x00); // disable REST mode
if (!pmw33xx_write(sensor, REG_SROM_Enable, 0x1d)) {
return false;
}
wait_ms(10);
pmw33xx_write(sensor, REG_SROM_Enable, 0x18);
if (!pmw33xx_spi_start(sensor)) {
return false;
}
spi_write(REG_SROM_Load_Burst | 0x80);
wait_us(15);
for (size_t i = 0; i < PMW33XX_FIRMWARE_LENGTH; i++) {
spi_write(pgm_read_byte(pmw33xx_firmware_data + i));
wait_us(15);
}
wait_us(200);
pmw33xx_read(sensor, REG_SROM_ID);
pmw33xx_write(sensor, REG_Config2, 0x00);
return true;
}
bool pmw33xx_init(uint8_t sensor) {
if (sensor >= pmw33xx_number_of_sensors) {
return false;
}
spi_init();
// power up, need to first drive NCS high then low. the datasheet does not
// say for how long, 40us works well in practice.
if (!pmw33xx_spi_start(sensor)) {
return false;
}
wait_us(40);
spi_stop();
wait_us(40);
if (!pmw33xx_write(sensor, REG_Power_Up_Reset, 0x5a)) {
return false;
}
wait_ms(50);
// read registers and discard
pmw33xx_read(sensor, REG_Motion);
pmw33xx_read(sensor, REG_Delta_X_L);
pmw33xx_read(sensor, REG_Delta_X_H);
pmw33xx_read(sensor, REG_Delta_Y_L);
pmw33xx_read(sensor, REG_Delta_Y_H);
if (!pmw33xx_upload_firmware(sensor)) {
dprintf("PMW33XX (%d): firmware upload failed!\n", sensor);
return false;
}
spi_stop();
wait_ms(10);
pmw33xx_set_cpi(sensor, PMW33XX_CPI);
wait_ms(1);
pmw33xx_write(sensor, REG_Config2, 0x00);
pmw33xx_write(sensor, REG_Angle_Tune, CONSTRAIN(ROTATIONAL_TRANSFORM_ANGLE, -127, 127));
pmw33xx_write(sensor, REG_Lift_Config, PMW33XX_LIFTOFF_DISTANCE);
if (!pmw33xx_check_signature(sensor)) {
dprintf("PMW33XX (%d): firmware signature verification failed!\n", sensor);
return false;
}
return true;
}
pmw33xx_report_t pmw33xx_read_burst(uint8_t sensor) {
pmw33xx_report_t report = {0};
if (sensor >= pmw33xx_number_of_sensors) {
return report;
}
if (!in_burst[sensor]) {
dprintf("PMW33XX (%d): burst\n", sensor);
if (!pmw33xx_write(sensor, REG_Motion_Burst, 0x00)) {
return report;
}
in_burst[sensor] = true;
}
if (!pmw33xx_spi_start(sensor)) {
return report;
}
spi_write(REG_Motion_Burst);
wait_us(35); // waits for tSRAD_MOTBR
spi_receive((uint8_t*)&report, sizeof(report));
// panic recovery, sometimes burst mode works weird.
if (report.motion.w & 0b111) {
in_burst[sensor] = false;
}
spi_stop();
if (debug_config.mouse) {
dprintf("PMW33XX (%d): motion: 0x%x dx: %i dy: %i\n", sensor, report.motion.w, report.delta_x, report.delta_y);
}
report.delta_x *= -1;
report.delta_y *= -1;
return report;
}

View File

@@ -0,0 +1,156 @@
// Copyright 2022 Daniel Kao (dkao)
// Copyright 2022 Stefan Kerkmann (KarlK90)
// Copyright 2022 Ulrich Spörlein (@uqs)
// Copyright 2021 Alabastard (@Alabastard-64)
// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
// Copyright 2019 Sunjun Kim
// Copyright 2020 Ploopy Corporation
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <stdint.h>
#include "spi_master.h"
#include "util.h"
#if defined(POINTING_DEVICE_DRIVER_pmw3360)
# include "pmw3360.h"
#elif defined(POINTING_DEVICE_DRIVER_pmw3389)
# include "pmw3389.h"
#endif
typedef struct __attribute__((packed)) {
union {
struct {
bool capture_from_raw_data : 1; // FRAME_RData_1st
uint8_t operation_mode : 2; // OP_MODE
bool is_lifted : 1; // Lift_stat
bool raw_data_grab_is_raw_data : 1; // RData_1st
uint8_t _reserved : 2; // 1 + Reserved
bool is_motion : 1; // MOT
} b;
uint8_t w;
} motion;
uint8_t observation;
int16_t delta_x; // displacement on x directions. Unit: Count. (CPI * Count = Inch value)
int16_t delta_y; // displacement on y directions.
} pmw33xx_report_t;
_Static_assert(sizeof(pmw33xx_report_t) == 6, "pmw33xx_report_t must be 6 bytes in size");
_Static_assert(sizeof((pmw33xx_report_t){0}.motion) == 1, "pmw33xx_report_t.motion must be 1 byte in size");
#if !defined(PMW33XX_CLOCK_SPEED)
# define PMW33XX_CLOCK_SPEED 2000000
#endif
#if !defined(PMW33XX_SPI_DIVISOR)
# ifdef __AVR__
# define PMW33XX_SPI_DIVISOR (F_CPU / PMW33XX_CLOCK_SPEED)
# else
# define PMW33XX_SPI_DIVISOR 64
# endif
#endif
#if !defined(PMW33XX_LIFTOFF_DISTANCE)
# define PMW33XX_LIFTOFF_DISTANCE 0x02
#endif
#if !defined(ROTATIONAL_TRANSFORM_ANGLE)
# define ROTATIONAL_TRANSFORM_ANGLE 0x00
#endif
#if ROTATIONAL_TRANSFORM_ANGLE > 127 || ROTATIONAL_TRANSFORM_ANGLE < (-127)
# error ROTATIONAL_TRANSFORM_ANGLE has to be in the range of +/- 127 for all PMW33XX sensors.
#endif
// Support single and plural spellings
#ifndef PMW33XX_CS_PINS
# ifndef PMW33XX_CS_PIN
# ifdef POINTING_DEVICE_CS_PIN
# define PMW33XX_CS_PIN POINTING_DEVICE_CS_PIN
# define PMW33XX_CS_PINS \
{ PMW33XX_CS_PIN }
# else
# error "No chip select pin defined -- missing PMW33XX_CS_PIN or PMW33XX_CS_PINS"
# endif
# else
# define PMW33XX_CS_PINS \
{ PMW33XX_CS_PIN }
# endif
#endif
#if PMW33XX_CPI > PMW33XX_CPI_MAX || PMW33XX_CPI < PMW33XX_CPI_MIN || (PMW33XX_CPI % PMW33XX_CPI_STEP) != 0U
# pragma message "PMW33XX_CPI has to be in the range of " STR(PMW33XX_CPI_MAX) "-" STR(PMW33XX_CPI_MIN) " in increments of " STR(PMW33XX_CPI_STEP) ". But it is " STR(PMW33XX_CPI) "."
# error Use correct PMW33XX_CPI value.
#endif
#define CONSTRAIN(amt, low, high) ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt)))
/**
* @brief Initializes the given sensor so it is in a working state and ready to
* be polled for data.
*
* @param sensor Index of the sensors chip select pin
* @return true Initialization was a success
* @return false Initialization failed, do not proceed operation
*/
bool __attribute__((cold)) pmw33xx_init(uint8_t sensor);
/**
* @brief Gets the currently set CPI value from the sensor. CPI is often
* refereed to as the sensors sensitivity.
*
* @param sensor Index of the sensors chip select pin
* @return uint16_t Current CPI value of the sensor
*/
uint16_t pmw33xx_get_cpi(uint8_t sensor);
/**
* @brief Sets the given CPI value for the given PMW33XX sensor. CIP is often
* refereed to as the sensors sensitivity. Values outside of the allow range are
* constrained into legal values.
*
* @param sensor Index of the sensors chip select pin
* @param cpi CPI value to set, legal range depends on the PMW sensor type
*/
void pmw33xx_set_cpi(uint8_t sensor, uint16_t cpi);
/**
* @brief Sets the given CPI value to all registered PMW33XX sensors. CPI is
* often refereed to as the sensors sensitivity. Values outside of the allow
* range are constrained into legal values.
*
* @param sensor Index of the sensors chip select pin
* @param cpi CPI value to set, legal range depends on the PMW sensor type
*/
void pmw33xx_set_cpi_all_sensors(uint16_t cpi);
/**
* @brief Reads and clears the current delta, and motion register values on the
* given sensor.
*
* @param sensor Index of the sensors chip select pin
* @return pmw33xx_report_t Current values of the sensor, if errors occurred all
* fields are set to zero
*/
pmw33xx_report_t pmw33xx_read_burst(uint8_t sensor);
/**
* @brief Read one byte of data from the given register on the sensor
*
* @param sensor Index of the sensors chip select pin
* @param reg_addr Register address to read from
* @return uint8_t
*/
uint8_t pmw33xx_read(uint8_t sensor, uint8_t reg_addr);
/**
* @brief Writes one byte of data to the given register on the sensor
*
* @param sensor Index of the sensors chip select pin
* @param reg_addr Registers address to write to
* @param data Data to write to the register
* @return true Write was a success
* @return false Write failed, do not proceed operation
*/
bool pmw33xx_write(uint8_t sensor, uint8_t reg_addr, uint8_t data);

View File

@@ -27,3 +27,13 @@ void soft_serial_initiator_init(void);
void soft_serial_target_init(void);
bool soft_serial_transaction(int sstd_index);
#ifdef SERIAL_DEBUG
# include <debug.h>
# include <print.h>
# define serial_dprintf(...) dprintf(__VA_ARGS__)
#else
# define serial_dprintf(...) \
do { \
} while (0)
#endif

View File

@@ -0,0 +1,101 @@
// Copyright 2022 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
#include <stdbool.h>
#include <hal.h>
#include "util.h"
#include "timer.h"
#include "wear_leveling.h"
#include "wear_leveling_internal.h"
#ifndef WEAR_LEVELING_EXTERNAL_FLASH_BULK_COUNT
# define WEAR_LEVELING_EXTERNAL_FLASH_BULK_COUNT 32
#endif // WEAR_LEVELING_EXTERNAL_FLASH_BULK_COUNT
bool backing_store_init(void) {
bs_dprintf("Init\n");
flash_init();
return true;
}
bool backing_store_unlock(void) {
bs_dprintf("Unlock\n");
// No-op -- handled by the flash driver as it is.
return true;
}
bool backing_store_erase(void) {
#ifdef WEAR_LEVELING_DEBUG_OUTPUT
uint32_t start = timer_read32();
#endif
bool ret = true;
for (int i = 0; i < (WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_COUNT); ++i) {
flash_status_t status = flash_erase_block(((WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_OFFSET) + i) * (EXTERNAL_FLASH_BLOCK_SIZE));
if (status != FLASH_STATUS_SUCCESS) {
ret = false;
break;
}
}
bs_dprintf("Backing store erase took %ldms to complete\n", ((long)(timer_read32() - start)));
return ret;
}
bool backing_store_write(uint32_t address, backing_store_int_t value) {
return backing_store_write_bulk(address, &value, 1);
}
bool backing_store_lock(void) {
bs_dprintf("Lock \n");
// No-op -- handled by the flash driver as it is.
return true;
}
bool backing_store_read(uint32_t address, backing_store_int_t *value) {
return backing_store_read_bulk(address, value, 1);
}
bool backing_store_read_bulk(uint32_t address, backing_store_int_t *values, size_t item_count) {
bs_dprintf("Read ");
uint32_t offset = (WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_OFFSET) * (EXTERNAL_FLASH_BLOCK_SIZE) + address;
flash_status_t status = flash_read_block(offset, values, sizeof(backing_store_int_t) * item_count);
if (status == FLASH_STATUS_SUCCESS) {
for (size_t i = 0; i < item_count; ++i) {
values[i] = ~values[i];
}
wl_dump(offset, values, sizeof(backing_store_int_t) * item_count);
}
return status == FLASH_STATUS_SUCCESS;
}
bool backing_store_write_bulk(uint32_t address, backing_store_int_t *values, size_t item_count) {
uint32_t offset = (WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_OFFSET) * (EXTERNAL_FLASH_BLOCK_SIZE) + address;
size_t index = 0;
backing_store_int_t temp[WEAR_LEVELING_EXTERNAL_FLASH_BULK_COUNT];
do {
// Copy out the block of data we want to transmit first
size_t this_loop = MIN(item_count, WEAR_LEVELING_EXTERNAL_FLASH_BULK_COUNT);
for (size_t i = 0; i < this_loop; ++i) {
temp[i] = values[index + i];
}
bs_dprintf("Write ");
wl_dump(offset, temp, sizeof(backing_store_int_t) * this_loop);
// Take the complement instead
for (size_t i = 0; i < this_loop; ++i) {
temp[i] = ~temp[i];
}
// Write out the block
if (flash_write_block(offset, temp, sizeof(backing_store_int_t) * this_loop) != FLASH_STATUS_SUCCESS) {
return false;
}
offset += this_loop * sizeof(backing_store_int_t);
index += this_loop;
item_count -= this_loop;
} while (item_count > 0);
return true;
}

View File

@@ -0,0 +1,34 @@
// Copyright 2022 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#ifndef __ASSEMBLER__
# include <stdlib.h>
# include <stdint.h>
# include "flash_spi.h"
#endif
// Use 1 block -- check the config for the SPI flash to determine how big it is
#ifndef WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_COUNT
# define WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_COUNT 1
#endif // WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_COUNT
// Start at the first block of the external flash
#ifndef WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_OFFSET
# define WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_OFFSET 0
#endif // WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_OFFSET
// 8-byte writes by default
#ifndef BACKING_STORE_WRITE_SIZE
# define BACKING_STORE_WRITE_SIZE 8
#endif
// The space allocated by the block
#ifndef WEAR_LEVELING_BACKING_SIZE
# define WEAR_LEVELING_BACKING_SIZE ((EXTERNAL_FLASH_BLOCK_SIZE) * (WEAR_LEVELING_EXTERNAL_FLASH_BLOCK_COUNT))
#endif // WEAR_LEVELING_BACKING_SIZE
// Use half of the backing size for logical EEPROM
#ifndef WEAR_LEVELING_LOGICAL_SIZE
# define WEAR_LEVELING_LOGICAL_SIZE ((WEAR_LEVELING_BACKING_SIZE) / 2)
#endif // WEAR_LEVELING_LOGICAL_SIZE

View File

@@ -0,0 +1,6 @@
{
"keyboard_name": "ErgoDox EZ",
"usb": {
"pid": "0x4974"
}
}

View File

View File

@@ -22,13 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x3297
#define DEVICE_VER 0x0001
#define MANUFACTURER ZSA Technology Labs
#define PRODUCT_ID 0x4974
#define PRODUCT ErgoDox EZ
/* key matrix size */
#define MATRIX_ROWS 14
#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2)
@@ -81,7 +74,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D7
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 255
#define RGBLIGHT_VAL_STEP 12
@@ -177,6 +169,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#define TAPPING_TOGGLE 1
// Enable rgb light animations for the shine
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_TWINKLE
// #define RGBLIGHT_COLOR_LAYER_0 0x00, 0x00, 0xFF
/* #define RGBLIGHT_COLOR_LAYER_1 0x00, 0x00, 0xFF */
/* #define RGBLIGHT_COLOR_LAYER_2 0xFF, 0x00, 0x00 */

View File

@@ -389,11 +389,6 @@ void eeconfig_init_kb(void) { // EEPROM is getting reset!
eeconfig_init_user();
}
#ifdef ORYX_ENABLE
static uint16_t loops = 0;
static bool is_on = false;
#endif
#ifdef DYNAMIC_MACRO_ENABLE
static bool is_dynamic_recording = false;
static uint16_t dynamic_loop_timer;
@@ -411,33 +406,6 @@ void dynamic_macro_record_end_user(int8_t direction) {
#endif
void matrix_scan_kb(void) {
#ifdef ORYX_ENABLE
if(rawhid_state.pairing == true) {
if(loops == 0) {
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
}
if(loops % PAIRING_BLINK_STEPS == 0) {
if(is_on) {
ergodox_right_led_2_off();
} else {
ergodox_right_led_2_on();
}
is_on ^= 1;
}
if(loops > PAIRING_BLINK_END) {
rawhid_state.pairing = false;
layer_state_set_user(layer_state);
loops = 0;
}
loops++;
} else if(loops > 0) {
loops = 0;
layer_state_set_user(layer_state);
}
#endif
#ifdef DYNAMIC_MACRO_ENABLE
if (is_dynamic_recording) {
ergodox_right_led_1_off();

View File

@@ -1,35 +0,0 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
Copyright 2015 ZSA Technology Labs Inc (@zsa)
Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
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
#undef PRODUCT_ID
#define PRODUCT_ID 0x4976
#undef PRODUCT
#define PRODUCT ErgoDox EZ Glow
#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
#undef ENABLE_RGB_MATRIX_HUE_BREATHING
#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
#undef ENABLE_RGB_MATRIX_HUE_WAVE
#undef RGBLIGHT_EFFECT_CHRISTMAS
#undef ENABLE_RGB_MATRIX_CYCLE_ALL

View File

@@ -0,0 +1,6 @@
{
"keyboard_name": "ErgoDox EZ Glow",
"usb": {
"pid": "0x4976"
}
}

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