Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom matrix lite support for split keyboards #14674

Merged
merged 5 commits into from
Dec 27, 2021

Conversation

jaygreco
Copy link
Contributor

@jaygreco jaygreco commented Oct 2, 2021

Description

Until recently, split boards with a custom matrix needed to use CUSTOM_MATRIX = yes rather than the simpler lite option.
The new unified split common + regular matrix introduced in #13330 is really close to supporting CUSTOM_MATRIX = lite. If the debounce code is omitted from quantum/matrix_common/matrix_scan() when the SPLIT_KEYBOARD and CUSTOM_MATRIX options are set, the lite option can be used.

Tested with split board that will be added in a follow-on PR and also on a NIBBLE, which uses CUSTOM_MATRIX = lite but is not a split board in order to make sure the changes didn't break existing non-split boards.

Types of Changes

  • Core
  • Bugfix
  • New feature
  • Enhancement/optimization
  • Keyboard (addition or update)
  • Keymap/layout/userspace (addition or update)
  • Documentation

Issues Fixed or Closed by This PR

Checklist

  • My code follows the code style of this project: C, Python
  • I have read the PR Checklist document and have made the appropriate changes.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • I have tested the changes and verified that they work and don't break anything (as well as I can manage).

@github-actions github-actions bot added the core label Oct 2, 2021
Copy link
Member

@drashna drashna left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems to compile as is.

Also, it may make more sense to move even more of the split code into matrix_common, so that matrix.c is mostly just handling the matrix read, and matrix_common is doing all the heavy lifting?

quantum/matrix_common.c Outdated Show resolved Hide resolved
quantum/matrix_common.c Outdated Show resolved Hide resolved
@drashna drashna requested review from zvecr and a team October 2, 2021 21:25
@jaygreco
Copy link
Contributor Author

jaygreco commented Oct 2, 2021

Great suggestion. I agree. I was considering that but was apprehensive about moving too much functionality across without discussing it. I'll make and test that change & update the PR.

@jaygreco
Copy link
Contributor Author

jaygreco commented Oct 2, 2021

Alright, I tested the changes as suggested. The order of the debounce matters for split keyboards. The debounce routine needs to be run before the slave matrix is read in, or it will double-debounce and toggle held keys each read, which is what I'm seeing.

quantum/matrix.c:362

#ifdef SPLIT_KEYBOARD
    debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
    changed = (changed || matrix_post_scan());
#else
    debounce(raw_matrix, matrix, ROWS_PER_HAND, changed);
    matrix_scan_quantum();
#endif

Any thoughts?

@jaygreco
Copy link
Contributor Author

jaygreco commented Oct 3, 2021

@drashna I pushed a commit that takes a hack at this. If nothing else, it's a starting point. It adds the debouncing in the right sequence. It also adds a new weak function prototype for matrix_post_scan_custom. A question that's probably worth asking is if it's worth it (and/or appropriate) to move the standard matrix_post_scan over to matrix_common entirely, since right now my matrix_post_scan_custom is just a carbon copy of that code.

I also made a gist that has the meat of my custom_matrix function just to add some context: https://gist.github.com/jaygreco/56319ffc5b15a567f125fabfff796649

@jaygreco jaygreco changed the base branch from master to develop October 3, 2021 00:41

matrix_init_quantum();
}

__attribute__((weak)) uint8_t matrix_scan(void) {
bool changed = matrix_scan_custom(raw_matrix);

debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
#ifdef SPLIT_KEYBOARD
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't love doing this with an #ifdef, but IMO doing something like setting thisHand to 0 and passing that for a non-split seems like it would be confusing.

@drashna
Copy link
Member

drashna commented Oct 3, 2021

The post scan function should be probably moved wholesale, without any custom option, as its sole purpose is to handle the transport code, and doesn't actually touch the matrix, directly.

@jaygreco
Copy link
Contributor Author

jaygreco commented Oct 5, 2021

Shuffled things to make matrix_post_scan live in matrix_common, which cleans things up considerably on the keyboard side.

@jaygreco jaygreco requested review from drashna and removed request for a team October 8, 2021 08:20
@drashna
Copy link
Member

drashna commented Oct 11, 2021

Merge conflicts.

@drashna drashna requested a review from a team December 7, 2021 05:13
@jaygreco
Copy link
Contributor Author

jaygreco commented Dec 9, 2021

Checking in on this (I thought it had been merged before the breaking changes but was mistaken). If I resolve the conflicts, can it be merged into the dev branch?

@tzarc tzarc merged commit ac31863 into qmk:develop Dec 27, 2021
@drashna
Copy link
Member

drashna commented Dec 27, 2021

This is cause errors during compile, on ARM split boards.

build_keyboard.mk:461: *** [.build/obj_handwired_tractyl_manuform_5x6_right_f411_drashna/quantum/matrix_common.o] error 1

#0  .build/obj_handwired_tractyl_manuform_5x6_right_f411_drashna/quantum/process_keycode/process_tap_dance.o at /Users/drashna/repos/qmk_firmware/build_keyboard.mk:457
#1  .build/handwired_tractyl_manuform_5x6_right_f411_drashna.elf at /Users/drashna/repos/qmk_firmware/tmk_core/rules.mk:362
#2  elf at /Users/drashna/repos/qmk_firmware/tmk_core/rules.mk:283
#3  build at /Users/drashna/repos/qmk_firmware/build_keyboard.mk:445
#4  all at /Users/drashna/repos/qmk_firmware/build_keyboard.mk:439
Compiling: quantum/matrix_common.c                                                                 In file included from quantum/logging/debug.h:21,
                 from quantum/keymap.h:34,
                 from quantum/quantum.h:21,
                 from quantum/matrix_common.c:1:
quantum/matrix_common.c: In function 'matrix_print':
quantum/logging/print.h:85:39: error: unknown conversion type character 'b' in format [-Werror=format=]
   85 | #define print_bin_reverse8(i) xprintf("%08b", bitrev(i))
      |                                       ^~~~~~
quantum/matrix_common.c:63:35: note: in expansion of macro 'print_bin_reverse8'
   63 | #    define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
      |                                   ^~~~~~~~~~~~~~~~~~
quantum/matrix_common.c:81:9: note: in expansion of macro 'print_matrix_row'
   81 |         print_matrix_row(row);
      |         ^~~~~~~~~~~~~~~~
quantum/logging/print.h:85:43: note: format string is defined here
   85 | #define print_bin_reverse8(i) xprintf("%08b", bitrev(i))
      |                                           ^
quantum/logging/print.h:85:39: error: too many arguments for format [-Werror=format-extra-args]
   85 | #define print_bin_reverse8(i) xprintf("%08b", bitrev(i))
      |                                       ^~~~~~
quantum/matrix_common.c:63:35: note: in expansion of macro 'print_bin_reverse8'
   63 | #    define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
      |                                   ^~~~~~~~~~~~~~~~~~
quantum/matrix_common.c:81:9: note: in expansion of macro 'print_matrix_row'
   81 |         print_matrix_row(row);
      |         ^~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
 [ERRORS]
`

roccojiang added a commit to roccojiang/qmk_firmware that referenced this pull request Feb 26, 2022
* Start `develop` for 2022q1.

* Added cancel_key_lock function (qmk#15321)

* [Core] Remove matrix_is_modified() and debounce_is_active() (qmk#15349)

* [Keyboard] Added Wakizashi 40 (qmk#15336)

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

* Change default USB Polling rate to 1kHz (qmk#15352)

* [Keyboard] Convert ergoinu to SPLIT_KEYBOARD (qmk#15305)

* Implement MAGIC_TOGGLE_CONTROL_CAPSLOCK (qmk#15368)

* Convert not_so_minidox to SPLIT_KEYBOARD (qmk#15306)

* Convert ai03/orbit to SPLIT_KEYBOARD (qmk#15340)

* Tidy up existing i2c_master implementations (qmk#15376)

* Move chibios defines out of header

* Make some avr defines internal

* Generalize Unicode defines (qmk#15409)

* Add missing define for unicode common (qmk#15416)

* Remove Deprecated USB Polling comment from vusb.c (qmk#15420)

* Expand rotational range for PMW3360 Optical Sensor (qmk#15431)

* Add support for 21.11.x, remove 21.6.x as ChibiOS "canceled" it. (qmk#15435)

* added missing audio_off_user() callback (qmk#15457)

Co-authored-by: Raoul Rubien <raoul.rubienr@gmail.com>

* [Core] Don't send keyboard reports that propagate no changes to the host  (qmk#14065)

* Migrate serial_uart usages to UART driver (qmk#15479)

* Migrate Thermal Printer feature to UART driver

* Migrate 40percentclub UT47 to UART driver

* Migrate Centromere to UART driver

* Migrate Chimera Ergo to UART driver

* Migrate Chimera Let's Split to UART driver

* Migrate Chimera Ortho to UART driver

* Migrate Chimera Ortho Plus to UART driver

* Migrate Comet46 to UART driver

* Migrate Palm USB converter to UART driver

* Migrate Sun USB converter to UART driver

* Migrate Dichotomy to UART driver

* Migrate Honeycomb to UART driver

* Migrate Mitosis to UART driver

* Migrate Redox W to UART driver

* Migrate Uni660 to UART driver

* Migrate Telophase to UART driver

* Fix build failure for UT47 (qmk#15483)

* Use the PR title rather than parsing the commit message. (qmk#15537)

* Migrate RN42 to UART driver and refactor (qmk#15492)

* [CI] Format code according to conventions (qmk#15541)

* Documentation Typo fix (qmk#15538)

* Fix some typos, especially the sensor name. (qmk#15557)

* Add open-drain GPIO support. (qmk#15282)

* Add open-drain GPIO support.

* `qmk format-c`

* Wording.

* Remove port GPIO implementations as the only board that uses it has its own internal defs anyway. Will wait for first-class handling of ports in core before reimplementing.

* Fixes potential wpm sampling overflow, along with code comment fixes (qmk#15277)

Co-authored-by: Trevor Powell <trevor@vectorstorm.com.au>

* Add a clarification to an error message (qmk#15207)

Makes this a bit more foolproof.

See qmk#15202

* [Core] Split support for pointing devices. (qmk#15304)

* Draft implementation

* formatting

* fix combined buttons

* remove pimoroni throttle

* sync pointing on a throttle loop with checksum

* no longer used

* doh

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

* switch pimoroni to a cpi equivalent

* add cpi support

* allow user modification of seperate mouse reports

* a little tidy up

* add *_RIGHT defines.

* docs

* doxygen comments

* basic changelog

* clean up pimoroni

* small doc fixes

* Update docs/feature_pointing_device.md

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

* performance tweak if side has usb

* Don't run init funtions on wrong side

* renamed some variables for consistency

* fix pimoroni typos

* Clamp instead of OR

* Promote combined values to uint16_t

* Update pointing_device.c

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>

* Format code according to conventions (qmk#15588)

* Make (un)register code functions weak (qmk#15285)

* Defer pin operations to gpio.h (qmk#15589)

* Add sym_defer_pr debouncer type (qmk#14948)

* Durgod: Increase scan rate by using wait_us GPT timer (qmk#14091)

Lower the tick rate from 10kHz to 1kHz (otherwise all the extra interrupts
reduce the achievable scan rate). Enable the WAIT_US_TIMER using GPT TIM3.

Observed scan rate on the K320 is increased from 625Hz to 2090-2120Hz.

* Format code according to conventions (qmk#15590)

* Fixup line endings

* More GPIO compilation fixes. (qmk#15592)

* Custom matrix lite support for split keyboards (qmk#14674)

* Custom matrix lite support for split keyboards

* WIP: matrix -> matrix_common refactor

* Move matrix_post_scan() to matrix_common.c

* Refactor `bootloader_jump()` implementations (qmk#15450)

* Refactor `bootloader_jump()` implementations

* Fix tests?

* Rename `atmel-samba` to `md-boot`

* [Keymap] Add vitoni keymap for GMMK Pro (ISO) (qmk#15006)

* [Keymap] Add vitoni layout for GMMK Pro (ISO)

Keymap has layered cursor keys similar to laptop keyboards.

* Configure RGB defaults for startup

* Configure encoder to change value/brightness on FN layer

* Remove FN layer and add dedicated RGB layer

* Make RGB layer sticky (using TG) to avoid holding FN while configuring RGB

* Add RGB indicators for active layers

* Add RGB indicator for active RESET mode

Signed-off-by: Victor Toni <victor.toni@gmail.com>

* Configure idle / USB suspend settings

* Add RGB fade in when resuming after suspend

* Add RGB fade out before suspend

* Add fade out before idle

* Add breathe effect when idle

* Convert some more boards to Matrix Lite (qmk#15489)

* Fix for SPI write timing in PMW3360 driver (qmk#15519)

Timing does not match Pixart documentation for this sensor (may have been carried forward from adns9800).
Not aware of any issues coming from this currently.
It should only cause issues when writing to multiple registers in succession which currently only happens during initialization for the PMW3360.
This should prevent future issues with write operations if other features of the sensor are added.

* Format code according to conventions (qmk#15593)

* pwm3360 driver cleanup and diff reduction to adns9800 (qmk#15559)

* Diff reduction between ADNS9800 and PMW3360 drivers.

They are very similar devices. This (somewhat) unreadable diff is
essentially a no-op, but it makes a `vimdiff` between the 2 drivers much
more readable.

* Cleanup pwm3360 driver some more.

Remove redundant calls to spi_start() and spi_stop(), as pmw3360_write()
will already call these.

* [Core] Fix bug and code regression for Split Common (qmk#15603)

* Format code according to conventions (qmk#15604)

* [Bug] Include missing string.h include (qmk#15606)

* move bm65hsrgb_iso and bm68hsrgb to rev1/ (qmk#15132)

* Move to organization folder (qmk#15481)

* move directory

* fix

* move wings42 to dailycraft

* Adjust wings42 to work with organization folder.

* [Keyboard] Update Tractyl Manuform to use Split Pointing Device Sync

* [Keyboard] Update grs_70ec to use newer custom matrix (qmk#15609)

* [Keyboard] Fix compiler issue with tractyl manuform 4x6 (qmk#15646)

* Fix split pointing for analog joystick (qmk#15691)

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

* Format code according to conventions (qmk#15693)

* Update pmw3360 comments to match the datasheet better, fix delays. (qmk#15682)

* move @yangdigi 's keyboards to a YDKB folder (qmk#15681)

* Format code according to conventions (qmk#15705)

Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: QMK Bot <hello@qmk.fm>
Co-authored-by: wheredoesyourmindgo <moemanchu@icloud.com>
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
Co-authored-by: xiao <307671+xia0@users.noreply.github.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Dipl.-Ing. Raoul Rubien, BSc <rubienr@sbox.tugraz.at>
Co-authored-by: Raoul Rubien <raoul.rubienr@gmail.com>
Co-authored-by: SmollChungus <38044391+SmollChungus@users.noreply.github.com>
Co-authored-by: uqs <uqs@FreeBSD.org>
Co-authored-by: vectorstorm <github@gridbug.org>
Co-authored-by: Trevor Powell <trevor@vectorstorm.com.au>
Co-authored-by: Hugo Osvaldo Barrera <hugo@barrera.io>
Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
Co-authored-by: Chad Austin <chad@chadaustin.me>
Co-authored-by: Simon Arlott <70171+nomis@users.noreply.github.com>
Co-authored-by: Jay Greco <jayv.greco@gmail.com>
Co-authored-by: Victor Toni <ViToni@users.noreply.github.com>
Co-authored-by: Alabastard-64 <96358682+Alabastard-64@users.noreply.github.com>
Co-authored-by: peepeetee <43021794+peepeetee@users.noreply.github.com>
Co-authored-by: yfuku <30647434+yfuku@users.noreply.github.com>
@jaygreco jaygreco deleted the split_matrix_lite branch July 27, 2022 04:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants