"unselecting" left-hand rows is a wasted i2c transaction.
On the left-hand side, the ergodox uses a GPIO expander. It
does *not* change "direction" (input/output) of pins, it just
sets pins high or low.
But all the pins are written at once. There's no way to
change just one pin's value; you send a full byte of all eight
row pins. (Not all of them are in use, but that doesn't matter.)
So every pin is either +V or ground. This is in contrast
with the right-hand side, which is using input mode to make pins
be neutral.
So there's no need to "deselect" the rows on the left side
at all. To select row 0, you set the GPIO register for the
rows to 0xFE. The previous code would then set it back to
0xFF, then set it to 0xFD on the next cycle. But we can just
omit the intervening step, and set it to 0xFD next cycle,
and get the same results.
And yes, I tested that the keyboard still works.
On my system, scan rate as reported by DEBUG_SCAN_RATE goes
from 445 or so to 579 or so, thus, from ~2.24ms to ~1.73ms.
Signed-off-by: seebs <seebs@seebs.net>
* pull fuse settings for bootloader jump
* fix 32a chips
* make automatic bootloader selection optional
* quantify bootloaders
* fixs #164, speeds up dfu reset
* fix for chips w/o usb
* missing an n
* fix bootloader sizes, use words for addresses
* fix bmini, pearl, and [[ issue, make things quiet
* ignore avr errors on arm for now
* update settings for the light
* document bootloader stuff
* add bootloader title
With these changes, the ergodox ez goes from 315 scans per second
when no keys are pressed (~3.17ms/scan) to 447 (~2.24ms/scan).
The changes to the pin read are just condensing the logic, and
replacing a lot of conditional operations with a single bitwise
inversion.
The change to row scanning is more significant, and merits
explanation. In general, you can only scan one row of a keyboard
at a time, because if you scan two rows, you no longer know
which row is pulling a given column down. But in the Ergodox
design, this isn't the case; the left hand is controlled by an
I2C-based GPIO expander, and the columns and rows are *completely
separate* electrically from the columns and rows on the right-hand
side.
So simply reading rows in parallel offers two significant
improvements. One is that we no longer need the 30us delay after
each right-hand row, because we're spending more than 30us
communicating with the left hand over i2c. Another is that we're
no longer wastefully sending i2c messages to the left hand
to unselect rows when no rows had actually been selected in the
first place. These delays were, between them, coming out to
nearly 30% of the time spent in each scan.
Signed-off-by: seebs <seebs@seebs.net>
This is particularly relevant for, e.g., the ergodox EZ and
other keyboards with slow scan rates. Without changing the API or
behavior of individual process_record() calls, we allow a
configuration flag to make multiple calls in a single scan.
This will probably have miniscule effects on non-steno users,
and it's not enabled by default for any keyboards. Added note
about it to ergodox README.
Signed-off-by: seebs <seebs@seebs.net>
* move underglow led count from parent to child
* Added pearl support
* Added personal keymap for pearl
* start splitting up ps2avrGB boards
* clean up ps2avrgb boards
* Move keycodes to their own section
* Clarify `KC_PWR` vs `KC_POWER`. Fixes#1994.
* Cleaned uppersonal userspace and keymaps (#1998)
* Cleanup of keymaps
* Remove Tap Dance from Orthodox keymap
* Cleaned up userspace and keymaps
* Added sample (template)userspace files to my folder
* Document the Teensy hardware reset problem
* add mfluid keymap to atreus62
* Update hand_wire.md
Change "Resin" to "Rosin"
* Add keyboard: mt40 (#2001)
* add keyboard: chinese planck clone
* rename chinese_planck to mt40
* add image for the mt40 board
* lets_split: Fix matrix_init for ROW2COL
Signed-off-by: Marian Rusu <rusumarian91@gmail.com>
* Add Keymap for Whitefox Truefox layout
* Add keyboard: ACR60 (#1999)
* base acr60 keyboard folder created
* mitch acr60 keymap updates, documentation
* latest keymap updates
* slight modifications to layer switching
* Changes to Atreus and Ergodox EZ Dvorak 42key layout (#1997)
* importing 42 key dvorak layout
* added comment for build instructions
* adding atreus dvorak 42 key layout
* added readme
* add readme
* build instructions
* additional MEH shortcuts
* added shifted symbols on symbols layer
* working extra symbols on COMBINED layer
* bring atreus layout inline with the ergodox one
* add necessary macros
* working ls macro
* added more shell macros
* added screen rename / screen number macros
* add ctrl-a key in shell-nav to use screen more easily
* added shell screen layer
* assign screen switching macros to screen layer
* define all screen switching macros
* more screen-related shortcuts added on shell screen layer
* change shell nav bottom right row to match base layer (backspace / delete)
* remove some mappings on SHELL_NAV layer as they are now in the screen layer
* added more screen macros
* changes to COMBINED layer (pipe on the right) and modified shell nav
* moved pipe/backslash to then right
* documented SHELL_SCREEN layer
* put backspace/delete on SHELL_NAV layer
* add an explicit lisence file for github to pickup
* Updated keymaps to allow base layer alternation for QWERTY, Colemak & Dvorak (#1962)
* First commit of the Terminus_Mini firmware and the DivergeJM version of the Nyquist firmware
* Fix terminus_mini & nyquist/DivergeJM readme files
Previously an outdated copy of the default readme. Updated to match the Nyquist/DivergeJM format (DivergeJM is a split 5x12 implementation of the terminus_mini layout)
* Update makefiles to rules.mk
Renamed both Makefiles to rules.mk, removed references to makefiles
* Updated rules.mk
Inadvertantly removed important code from the rules.mk in previous commit. This has been restored.
Also disabled Tap_Dance in both rules.mk files
* Moved terminus_mini to handwired
Realised that existing directory was not appropriate for the terminus_mini project, moved to handwired.
* New Frosty Flake layout for QFR TKL
Added a TKL layout for the Frosty Flake with a navigation cluster on LOWER under the left hand and a similarly functioning MOUSE layer that includes mouse navigation functionality.
* README fix & keymap update for 3 keyboards
Fixed the markdown for the handwired/terminus_mini:default, Nyqyist:DivergeJM & frosty_flake:QFR_JM.
Added TAPPING_TERM = 150 to config.h for all keyboards
Switched LT(LOWER) and LAlt on the mod row for ortholinear boards.
* Update readme for QFR_JM to include make instructions
* Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware"
This reverts commit a45f264ada, reversing
changes made to 62349c3341.
* Revert "Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware""
This reverts commit eae54fb3be.
* Added QWERTY support to the QFR_JM
Implemented variable default base layer from the Planck default keymap.
* Update README to reflect QWERTY support
* Nyquist:DivergeJM - Update RESET location
Add a reset button to both hands, accessible when halves are disconnected.
* Typo fix
* Update DivergeJM
Switched master to Left hand,
Moved Reset key to a different location
* Added macros to send R pointer & dplyr pipe
Macros added as a string of keypresses, couldn't figure out how to get SEND_STRING to work.
* Added ADJUST -> QWERTY, DVORAK, COLEMAK
Re-implemented update_tri_layer fuctionality to reset base layer for Terminus_Mini & DivergeJM Nyquist keymaps to QWERTY, DVORAK or COLEMAK via the ADJUST layer.
Updated ReadMe files accordingly.
* Fix base layout diagram for Terminus_Mini
Remove split from diagram
* Changed the R operators to SEND_STRING, rather than keypress macros
* Added Dvorak to the QFR_JM keymap
* fixed duplicate row in Nyquist keymap
* Fix readme - LAlt location on mouse layer
* Set EE_HANDS to allow either Nyquist hand to work as master.
* Update R operator strings, clean up layering for terminus_mini, QFR_JM and DivergeJM
"<-" to " <- "
"%>%" to " %>% "
Also played around with the layering, removed unnecessary TAP_TOGGLE for LOWER and shuffled FUNCTION and MOUSE momentary actions to reflect layer order.
* Update bottom alpha row to output symbols on LOWER
This row now outputs the following (z -> /) when in the LOWER layer:
<-
%>%
{
[
`
|
]
}
.
/
* Updated readme files for QFR_JM, terminus_mini & DivergeJM
QFR_JM readme reflects correct LOWER bottom row symbol output,
terminus_mini & DivergeJM reflect correct command line make instructions.
* Add media keys to QFR_JM LOWER - Replicate QFR default functionality
* Fix issue with Mouse layering
Stuck on mouse layer because the wrong macro was assigned to the 'exit layer' key. Reassigned that key.
* Changed " <- " to "<- " for QFR_JM, terminus_mini & DivergeJM
* Add "KC_MAKE" to userspace example
* QMK DFU bootloader generation (#2009)
* adds :bootloader target
* update planck and preonic revisions
* remove references to .h files for planck
* update preonic keymap
* only add keyboard.h files that exist
* add production target
* hook things up with the new lufa variables
* update rules for planck/preonic
* back backlight key turn of status led when pressed
* add manufacturer/product strings to bootloader
* fix push script
* Added support for let's split kailh socket version (#2010)
* Added support for socket version of the let's split
* renamed files
* socket-version-works
* fix up lets_split keymaps
* fix up lets_split keymaps
* shrink preonic by a bit
* fix lets_split keyboards
* update travis script
* update travis script
* update version silencing
* importing 42 key dvorak layout
* added comment for build instructions
* adding atreus dvorak 42 key layout
* added readme
* add readme
* build instructions
* additional MEH shortcuts
* added shifted symbols on symbols layer
* working extra symbols on COMBINED layer
* bring atreus layout inline with the ergodox one
* add necessary macros
* working ls macro
* added more shell macros
* added screen rename / screen number macros
* add ctrl-a key in shell-nav to use screen more easily
* added shell screen layer
* assign screen switching macros to screen layer
* define all screen switching macros
* more screen-related shortcuts added on shell screen layer
* change shell nav bottom right row to match base layer (backspace / delete)
* remove some mappings on SHELL_NAV layer as they are now in the screen layer
* added more screen macros
* changes to COMBINED layer (pipe on the right) and modified shell nav
* moved pipe/backslash to then right
* documented SHELL_SCREEN layer
* put backspace/delete on SHELL_NAV layer
* Add woodpad
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add woodpad
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Fix rebasing issues
* remove head files
* Fix "macro" issue
* Rename ez keymaps for userspace
* Revert "Rename ez keymaps for userspace"
This reverts commit c25425911852e41711a5f0273b5741adb16e5bd4.
* Renamed Ergodox EZ layouts so that all of my personal layouts are on the same name, in prep for using userspaces
* Fix ergodox code
* Remove "drashna-ez" keymap as it's no longer needed
* Migrate majority of code to Userspace
* Add woodpad
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add woodpad
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Fix rebasing issues
* remove head files
* Fix "macro" issue
* Rename ez keymaps for userspace
* Revert "Rename ez keymaps for userspace"
This reverts commit c25425911852e41711a5f0273b5741adb16e5bd4.
* Renamed Ergodox EZ layouts so that all of my personal layouts are on the same name, in prep for using userspaces
* Fix ergodox code
* Remove "drashna-ez" keymap as it's no longer needed
* importing 42 key dvorak layout
* added comment for build instructions
* adding atreus dvorak 42 key layout
* added readme
* add readme
* build instructions
* additional MEH shortcuts
* added shifted symbols on symbols layer
* working extra symbols on COMBINED layer
* bring atreus layout inline with the ergodox one
* add necessary macros
* working ls macro
* added more shell macros
* added screen rename / screen number macros
* add ctrl-a key in shell-nav to use screen more easily
* added shell screen layer
* assign screen switching macros to screen layer
* define all screen switching macros
* more screen-related shortcuts added on shell screen layer
* change shell nav bottom right row to match base layer (backspace / delete)
* remove some mappings on SHELL_NAV layer as they are now in the screen layer
* added more screen macros
* Fix RGBLIGHT startup color
While it's awesome to see the layer indicating code in here (no really!), and the general rule is to not alter the default keymap/code....
The problem with the layer_state_set_kb call handling this, is that the code doesn't seem to be called at startup. So the default layer color won't ever get set on startup. It needs to be called in the init function to be properly set.
I've played with this extensively, and if you check my keymaps, that is precisely why I have the setrgb/sethsv in the init function.
* Removed typo (pipe)
* Add woodpad
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Fix odd merge issue
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add forced NKRO
* Added Colemak and Dvorak layers to default orthodox keymap
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix accidental commit because I don't know how to git
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* missing underscore in init function declaration
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
Previously, this code was implemented in keymap.c, but I'm unaware of
someone with a different implementation of this particular hack. [If
someone has it, we can add another #ifdef in the future.]
* redo make args to use colons, better folder structuring system [skip ci]
* don't put spaces after statements - hard lessons in makefile development
* fix-up some other rules.mk
* give travis a chance
* reset KEYMAPS variable
* start converting keyboards to new system
* try making all with travis
* redo make args to use colons, better folder structuring system [skip ci]
* don't put spaces after statements - hard lessons in makefile development
* fix-up some other rules.mk
* give travis a chance
* reset KEYMAPS variable
* start converting keyboards to new system
* try making all with travis
* start to update readmes and keyboards
* look in keyboard directories for board.mk
* update visualizer rules
* fix up some other keyboards/keymaps
* fix arm board ld includes
* fix board rules
* fix up remaining keyboards
* reset layout variable
* reset keyboard_layouts
* fix remainging keymaps/boards
* update readmes, docs
* add note to makefile error
* update readmes
* remove planck keymap warnings
* update references and docs
* test out tarvis build stages
* don't use stages for now
* don't use stages for now
* Remove all Makefiles from the keyboards directory.
* update keymaps added in the last 8 days
* Ignore keyboard/keymap makefiles
* update hand_wire to reflect our new Makefile-less reality
* Update the make guide to reflect the new reality
* move planck keymap options to rules.mk
* update planck keymaps 4real
* trigger travis
* add back build_keyboard.mk
* restore changes to build_keyboard
* include variables and .h files as pp directives
* start layout compilation
* split ergodoxes up
* don't compile all layouts for everything
* might seg fault
* reset layouts variable
* actually reset layouts
* include rules.mk instead
* remove includes from rules.mk
* update variable setting
* load visualizer from path
* adds some more examples
* adds more layouts
* more boards added
* more boards added
* adds documentation for layouts
* use lowercase names for LAYOUT_
* add layout.json files for each layout
* add community folder, default keymaps for layouts
* touch-up default layouts
* touch-up layouts, some keyboard rules.mk
* update documentation for layouts
* fix up serial/i2c switches
* When toggling the key logging on or off, the LEDs will do a little dance.
* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it.
* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key.
* The `-`/`_` key was turned into a tap-dance key too.
* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`.
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>