summaryrefslogtreecommitdiff
path: root/quantum/split_common/split_util.c
AgeCommit message (Collapse)Author
2021-08-22Make solo half of split keyboards (more) usable. (#13523)Joakim Tufvegren
* Make solo half of split keyboards (more) usable. Using only one half of a split keyboard (that's using the split_common framework to communicate) is not a great experience, since several read timeouts per scan cycle cause an unusably slow scan rate. This change blocks all split communication attempts for 500 ms (configurable) after an error occurs, causing the scan rate to become at least _more_ usable, but might need some tweaking to work fully on most keyboards. One read timeout still needs to occur after the 500 ms has passed, and if that timeout isn't low enough, some scan cycles may still be too slow. * Fix lint complaint. * Require 25 consecutive comm errors to see comms as disconnected. The number of max errors can be overridden by defining `SPLIT_MAX_CONNECTION_ERRORS`. * Add comments to new defines, and ability to disable disconnection check. Also increase `SPLIT_MAX_CONNECTION_ERRORS` to 40, since it's divisible by most relevant numbers for the description. * Make lint happy ...again * Only update `connection_check_timer` when needed. * Add new defines to split keyboard documentation. * Move connection timeout logic to transport.c, add `is_transport_connected`. * Use split_common disconnection logic in matrix.c. Instead of doing more or less the same thing twice. * Move disconnection logic to `transport_master`. Is a cleaner implementation, and causes the scan rate while disconnected to increase instead of decrease. * Lint fixes. * Lower default `SERIAL_USART_TIMEOUT` to 20 ms. The read timeout must be low enough to not cause exessively long scan cycles when using a solo split half. 10 ms was determined from testing to work fine even with the slowest defined baudrate of 19200 (5 ms was too low for that case), so 20 ms should be fine for most cases. * Remove `SERIAL_USART_TIMEOUT` from ergodox_infinity/config.h Was somewhat mistakenly included in an earlier PR. * Fix building with `USE_I2C`. * Reduce built firmware size. Not really sure why this works, the idea was taken from tzarc's work on split disconnection. * Tweak and improve opt-out for split disconnection logic. There are now two ways to opt out from this feature: * Set `SPLIT_MAX_CONNECTION_ERRORS` to 0. This will completely disable the connection status checks (also affects the slave matrix reset logic in matrix.c, though). * Set `SPLIT_CONNECTION_CHECK_TIMEOUT` to 0. This will only disable the communication throttling while disconnected. Will make the firmware smaller. * Make split disconnection logic work with custom transports. Includes a fallback implementation for keyboards using a custom split_util.c but not a custom matrix.c (currently no such keyboard seems to be merged, though). * Remove unnecessary include of timer.h Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Joel Challis <git@zvecr.com>
2021-07-24Avoid LTO conficts on arm_atsam (#13676)Joel Challis
2021-07-05Allow invert of SPLIT_HAND_PIN logic (#13433)Jameson Thatcher
* added support for inverting the hand pin for split keyboards * Added docs about SPLIT_HAND_LOW_IS_LEFT * Update docs/feature_split_keyboard.md bring #define for split hand pin low for left half name in line with grid pin define Co-authored-by: Joel Challis <git@zvecr.com> * Update quantum/split_common/split_util.c update split hand pin low is left name to match split hand grid define Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Joel Challis <git@zvecr.com>
2021-02-28Refactor of USB code within split_common (#11890)Joel Challis
* Initial refactor of usb code within split_common * Add headers * Correct disable condition * Format * Align func name
2020-12-17Run cformat and dos2unix manually (#11235)Ryan
2020-12-11Normalise include statements in core code (#11153)Ryan
* Normalise include statements in core code * Missed one
2020-10-02Fix SPLIT_KEYBOARD compilation for ATMega*U2, which doesn't have VBUS/OTG ↵sol
control (#10460) Co-authored-by: s-ol <s-ol@users.noreply.github.com>
2020-07-04add SPLIT_HAND_MATRIX_GRID support (#8685)Takeshi ISHII
Co-authored-by: Danny <nooges@users.noreply.github.com>
2020-06-10Fixed slave-side keyboard half unresponsiveness (#9360)Adrian
* Fixed slave-side keyboard half unresponsiveness due to how LUFA handles USB_Disable() * changes to formatting Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Joel Challis <git@zvecr.com>
2020-05-22Fix build. (#9163)Nick Brassel
2020-05-21Use LUFA funcs for split_util (#8594)Joel Challis
2020-02-25Split - Avoid race condition during matrix_init_quantum (#8235)Joel Challis
* Avoid race condition during matrix_init_quantum * spelling is hard
2020-02-04Reduce SPLIT_USB_TIMEOUT by 500ms (#7637)Joel Challis
* Update SPLIT_USB_TIMEOUT -500ms * Align keyboard level SPLIT_USB_TIMEOUT defaults * Align keyboard level SPLIT_USB_TIMEOUT_POLL * Review fixes
2019-12-16Disable usb on slave half to resolve random 'lockup' (#7649)Joel Challis
2019-12-02Remove check for EH define (#7525)Danny
Its use in lets_split_eh was factored out in https://github.com/qmk/qmk_firmware/pull/6411
2019-10-17SPLIT - Remove NO_USB_STARTUP_CHECK requirement for usb detection (#7053)Joel Challis
* Avoid NO_USB_STARTUP_CHECK - Disable USB as checks seem to enable it somehow * Update quantum/split_common/split_util.c Co-Authored-By: fauxpark <fauxpark@gmail.com> * Also remove NO_USB_STARTUP_CHECK from vitamins_included/rev1
2019-10-11ARM split - detect USB to select master/slave (#6424)Joel Challis
* Initial split refactor to allow usb master detection * Add split USB detect docs * Add SPLIT_USB_DETECT demo mode limitation * fix rebase issues * clang-format
2019-09-24ARM split - Add bootmagic/magic keycodes for setting handedness (#6545)Joel Challis
* Add docs on bootmagic/magic keycodes for setting handedness * Clang format fixes * Maintain backwards compatibility * Maintain backwards compatibility
2019-08-30clang-format changesskullY
2019-07-05Small fix to allow board to override split keyboard master checkzvecr
2019-03-23Add support for RGB LEDs wired directly to each half's controller (#5392)Danny
* Add support for wiring RGB LEDs for both halves directly to their respective controllers RGB LEDs for each half don't need to be chained together across the TRRS cable with this * Add split RGB LED support for serial * Update config/rules for bakingpy layout * Un-nest ifdefs for hand detection * Read RGB config state from memory instead of EEPROM for serial updates * Reuse existing LED pointer instead of creating new one
2019-03-12Next set of split_common changes (#4974)James Churchill
* Update split_common to use standard i2c drivers * Eliminate RGB_DIRTY/BACKLIT_DIRTY * Fix avr i2c_master error handling * Fix i2c_slave addressing * Remove unneeded timeout on i2c_stop() * Fix RGB I2C transfers * Remove incorrect comment
2019-01-17Simplify split_common Code significantly (#4772)James Churchill
* Eliminate separate slave loop Both master and slave run the standard keyboard_task main loop now. * Refactor i2c/serial specific code Simplify some of the preprocessor mess by using common function names. * Fix missing #endif * Move direct pin mapping support from miniaxe to split_common For boards with more pins than sense--sorry, switches. * Reordering and reformatting only * Don't run matrix_scan_quantum on slave side * Clean up the offset/slaveOffset calculations * Cut undebounced matrix size in half * Refactor debouncing * Minor fixups * Split split_common transport and debounce code into their own files Can now be replaced with custom versions per keyboard using CUSTOM_TRANSPORT = yes and CUSTOM_DEBOUNCE = yes * Refactor debounce for non-split keyboards too * Update handwired/xealous to build using new split_common * Fix debounce breaking basic test * Dodgy method to allow a split kb to only include one of i2c/serial SPLIT_TRANSPORT = serial or SPLIT_TRANSPORT = i2c will include only that driver code in the binary. SPLIT_TRANSPORT = custom (or anything else) will include neither, the keyboard must supply it's own code if SPLIT_TRANSPORT is not defined then the original behaviour (include both avr i2c and serial code) is maintained. This could be better but it would require explicitly updating all the existing split keyboards. * Enable LTO to get lets_split/sockets under the line * Add docs for SPLIT_TRANSPORT, CUSTOM_MATRIX, CUSTOM_DEBOUNCE * Remove avr-specific sei() from split matrix_setup Not needed now that slave doesn't have a separate main loop. Both sides (on avr) call sei() in lufa's main() after exiting keyboard_setup(). * Fix QUANTUM_LIB_SRC references and simplify SPLIT_TRANSPORT. * Add comments and fix formatting.
2019-01-03Add explicit eeprom include in split_commonJames Churchill
Fixes builds that set EE_HANDS.
2019-01-03Convert split_common to use generic GPIO apiJames Churchill
2018-12-28Fix Split Common Split_util.c typoDrashna Jaelre
2018-12-28Update split keyboard docs (#4735)Danny
* Remove unused I2C_MASTER_RIGHT setting * Update documentation about split keyboard options
2018-12-24Replace serial.c of quantum/split_common/ (#4669)Takeshi ISHII
* Add provisional Helix implementation to test the quantum/split_common. * copy keyboards/helix/serial.[ch] to quantum/split_common/ * Make serial.c a pure driver. Remove buffer name and buffer size from serial.c. They should be placed in the caller(matrix.c, split_utils.c). * remove quantum/split_common/serial_backward_compatibility.h * Changed array serial_master_buffer to structure serial_m2s_buffer. * Changed array serial_slave_buffer to structure serial_s2m_buffer. * Change keyboards/miniaxe/matrix.c I also made changes to quantum/split_comon/matrix.c to keyboards/miniaxe/matrix.c. Note: I contacted @ka2hiro, creator of miniaxe, and I got permission to change keyboards/miniaxe/matrix.c. * update history comment in quantum/split_common/serial.c * Revert "Add provisional Helix implementation to test the quantum/split_common." This reverts commit 168c82ef82c88e79979d9796bab9cc819cc2f685. * fix keyboards/miniaxe/matrix.c, quantum/split_common/matrix.c avr-gcc 4.9.[23] report error. avr-gcc 5.4.0, avr-gcc 7.3.0 pass. It is funny. * update comment quantum/split_common/serial.c * Reserve RGBLIGHT_SPLIT macro in quantum/split_common
2018-11-02Remove old declarationDrashna Jaelre
Co-Authored-By: nooges <nooges@users.noreply.github.com>
2018-11-02Move disable JTAG code from `keyboard_init` to `keyboard_setup`Danny Nguyen
This way all split keyboards are using that code instead of just those using split_common with the fix
2018-10-31Add pointer(?) to disable_JTAG to prevent compiler errors (#4310)Drashna Jaelre
2018-10-31Added JTAG disable code to the split_common (#4309)That-Canadian
Added JTAG disable code to the split_common slave code since the slave never calls keyboard_init(). In the future the slave should likely be modified to call keyboard_init() in some way, but without calling any of the unnecessary USB initialization code.
2018-09-27split_common: fix backlight update for serial boardsChiang Fong Lee
2018-07-17Split common (#3429)That-Canadian
* Line ending stuff again * Added Let's Split Eh? Files and updated #USE_IC2 checks to also include th EH revision (can only be used in I2C) * Added personal keymap, updated some of the EH files * Created new keyboard file for testing "lets_split_eh" will merge into lets_split once fully functional * Added split code from lets_split, removed pro micro imports and LED code THIS IS WORKING CODE, WITHOUT RGB AND BACKLIGHT * Took back original Lets Slit files for the lets_split keyboard, working in the lets_split_eh folder for now * Updated eh.c * More rework of the I2C code, added global flags for split boards. * Introduced RGB over I2C, having weird edge case issues at the moment though * Fixed weird I2C edgecase with RGB, although still would like to track down route cause.. * Changed RGB keycodes (static ones) to activate on key-up instead of key-down to elimate weird ghosting issue over I2C * Lots of changes, mainly externalized the Split keyboard code and added logic for only including when needed. - Added makefile option "SPLIT_KEYBOARD" that when = yes will include the split keyboard files and custom matrix - Split keyboard files placed into quantum/split_common/ - Added define option for config files "SPLIT_HAND_PIN" FOr using high/low pin to determine handedness, low = right hand, high = left hand - Cleaned up split logic for RGB and Backlight so it is only exectuted / included when needed * Updated documentation for the new makefile options and #defines specific to split keyboards * Added a bit more info to docs, so people aren't confused * Modifed Let's Split to use externalized code, also added left and right hand eeprom files to the split_common folder * Removed some debugging from eh.c * Small changes to keyboard configs. Also added a default keymap (just a copy of my that_canadian keymap). * Added a README file to the Let's Split Eh? * Changed it so RGB static updates are done on key-up ONLY for split boards rather than all boards. Also fixed leftover un-used variable in rgblight.c * Updated default keymap and my keymap for Let's Split Eh? Updated the comments so it reflects RGB control, and removed audio functions. * Fixed lets_split_eh not having a default version * Removed "eh" references from lets_split folder for now * Took lets_split folder from master to fix travis build errors, weird my local was overriding. * Changed LAYOUT_ortho_4x12_kc -> LAYOUT_kc_ortho_4x12 to match bakingpy and others * Removed rules.mk from my lets_split keymap, not needed * Updated the config_options doc to better explain the usage of "#define SPLIT_HAND_PIN" * Fixed split_common assuming I2C for RGB and Backlight. Added serial backlight support (stole from bakingpy's Levinson code ;) ) Serial RGB not implemented yet. Also Added "USE_IC2" to the lets_split_eh/eh as that was looked over. * Fixed stupid mistake, forgot to set BACKLIT_DIRTY to false after setting slave backlit settings for serial * Updated backlight data block to be cleaner (thanks drashna ;) )
2018-07-16Lets split eh (#3120)That-Canadian
* Line ending stuff again * Added Let's Split Eh? Files and updated #USE_IC2 checks to also include th EH revision (can only be used in I2C) * Added personal keymap, updated some of the EH files * Created new keyboard file for testing "lets_split_eh" will merge into lets_split once fully functional * Added split code from lets_split, removed pro micro imports and LED code THIS IS WORKING CODE, WITHOUT RGB AND BACKLIGHT * Took back original Lets Slit files for the lets_split keyboard, working in the lets_split_eh folder for now * Updated eh.c * More rework of the I2C code, added global flags for split boards. * Introduced RGB over I2C, having weird edge case issues at the moment though * Fixed weird I2C edgecase with RGB, although still would like to track down route cause.. * Changed RGB keycodes (static ones) to activate on key-up instead of key-down to elimate weird ghosting issue over I2C * Lots of changes, mainly externalized the Split keyboard code and added logic for only including when needed. - Added makefile option "SPLIT_KEYBOARD" that when = yes will include the split keyboard files and custom matrix - Split keyboard files placed into quantum/split_common/ - Added define option for config files "SPLIT_HAND_PIN" FOr using high/low pin to determine handedness, low = right hand, high = left hand - Cleaned up split logic for RGB and Backlight so it is only exectuted / included when needed * Updated documentation for the new makefile options and #defines specific to split keyboards * Added a bit more info to docs, so people aren't confused * Modifed Let's Split to use externalized code, also added left and right hand eeprom files to the split_common folder * Removed some debugging from eh.c * Small changes to keyboard configs. Also added a default keymap (just a copy of my that_canadian keymap). * Added a README file to the Let's Split Eh? * Changed it so RGB static updates are done on key-up ONLY for split boards rather than all boards. Also fixed leftover un-used variable in rgblight.c * Updated default keymap and my keymap for Let's Split Eh? Updated the comments so it reflects RGB control, and removed audio functions. * Fixed lets_split_eh not having a default version * Removed "eh" references from lets_split folder for now * Took lets_split folder from master to fix travis build errors, weird my local was overriding. * Changed LAYOUT_ortho_4x12_kc -> LAYOUT_kc_ortho_4x12 to match bakingpy and others * Removed rules.mk from my lets_split keymap, not needed * Updated the config_options doc to better explain the usage of "#define SPLIT_HAND_PIN"