Author | SHA1 | Message | Date |
---|---|---|---|
Ryan |
bd70f5261c
|
Remove `matrix_key_count()` (#16603)
* Remove `matrix_key_count()` * Remove `matrix_bitpop()` |
2 years ago |
Stefan Kerkmann |
c1297ceb97
|
[Core] Remove matrix_is_modified() and debounce_is_active() (#15349) | 2 years ago |
Drashna Jaelre |
e443fa2892
|
Fix wait_us overflow in matrix for dactyl based boards (#14039) | 2 years ago |
Joel Challis |
f5a38b95c1
|
Remove legacy print backward compatiblitly (#11805)
* Remove legacy print backward compatiblitly * Remove legacy print backward compatiblitly - core * revert comment changes |
3 years ago |
myoung34 |
e02f4798f9
|
[Keyboard] Pterodactyl handwired (#9884)
* Working bluetooth fork of dactyl * Refactor thanks to zvecr * Final refactor per PR comments * Pragma once * Update keyboards/handwired/pterodactyl/pterodactyl.h * Update keyboards/handwired/pterodactyl/readme.md * Update keyboards/handwired/pterodactyl/rules.mk * Update keyboards/handwired/pterodactyl/rules.mk * Update keyboards/handwired/pterodactyl/config.h * Update keyboards/handwired/pterodactyl/pterodactyl.h * Update keyboards/handwired/pterodactyl/config.h * Update keyboards/handwired/pterodactyl/pterodactyl.h * update readme * Update keyboards/handwired/pterodactyl/keymaps/default/keymap.c * Update keyboards/handwired/pterodactyl/info.json * Update keyboards/handwired/pterodactyl/readme.md * Update keyboards/handwired/pterodactyl/config.h * Update keyboards/handwired/pterodactyl/info.json * Update keyboards/handwired/pterodactyl/keymaps/default/keymap.c * Update keyboards/handwired/pterodactyl/keymaps/default/keymap.c * Update keyboards/handwired/pterodactyl/keymaps/default/keymap.c * Update keyboards/handwired/pterodactyl/keymaps/default/keymap.c * Update keyboards/handwired/pterodactyl/pterodactyl.h * Update keyboards/handwired/pterodactyl/keymaps/default/keymap.c * Update keyboards/handwired/pterodactyl/matrix.c * Fix/add formatting and info/keymap.json * Update keyboards/handwired/pterodactyl/keymaps/default/keymap.json * lint default/keymap.json * format info.json |
3 years ago |
Joel Challis |
cc5edb9eeb
|
Port DEBUG_MATRIX_SCAN_RATE to core (#7029)
* Port DEBUG_MATRIX_SCAN_RATE to core * Remove duplicate DEBUG_MATRIX_SCAN_RATE implementations * Remove duplicate DEBUG_MATRIX_SCAN_RATE implementation from handwired/xealous * Add console logic from ergodox_ez |
4 years ago |
roggan87 | 1cd26607bd |
[Keyboard] Made it possible for real to choose register on io expander for cols and rows (#6124)
* Replace deprecated EXPANDER_MASK with dynamic expander_pin_input_mask * Made it possible to switch rows and cols registers on expander |
5 years ago |
Drashna Jaelre | faaaa134fd | Replace DEBOUNCING_DELAY (deprecated) with DEBOUNCE (#5997) | 5 years ago |
Daniel Burkholder | af5f59636e |
Keyboard: Dactyl - Only initialize relevant variables (#3771)
This small change prevents an unused variable from being initialized, throwing a warning during compilation, thus ending fatally. [07:47:10] [Daniels-MacBook-Pro-3] [dburkhol] [ /Users/dburkhol/git/qmk_firmware ] [develop ] : make handwired/dactyl:default QMK Firmware 0.6.97 Making handwired/dactyl with keymap default avr-gcc (GCC) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Size before: text data bss dec hex filename 0 19972 0 19972 4e04 .build/handwired_dactyl_default.hex Compiling: keyboards/handwired/dactyl/twimaster.c [OK] Compiling: keyboards/handwired/dactyl/matrix.c keyboards/handwired/dactyl/matrix.c:52:22: error: 'expander_col_pins' defined but not used [-Werror=unused-const-variable=] static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS; ^~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors [ERRORS] | | | make[1]: *** [.build/obj_handwired_dactyl_default/matrix.o] Error 1 make: *** [handwired/dactyl:default] Error 1 Make finished with errors |
5 years ago |
Erin Call | 050c21d35f |
Bring dactyl/matrix.c in line with quantum/matrix.c (#2613)
* Use the new debounce algorithm in dactyl/matrix.c [#2065] This incorporates the fixed/optimized debounce code added to quantum/matrix.c in: * |
6 years ago |
Erin Call | f2a0b0ee20 |
Handwired/Dactyl keyboard (#2058)
* Copy the ergodox_ez code to handwired/dactyl
Differences from the Ergodox:
* Use QMK_SUBPROJECT_H instead of QMK_KEYBOARD_H, since it's under
handwired
* Omitted several keymaps. They'll eventually be broken (since the
Dactyl has fewer keys), and I don't want to try to fix them.
* Omitted the keymap images for the default layout, since they depict
a different keyboard.
* Everything that said Ergodox now says Dactyl, naturally.
* [whitespace] Delete trailing whitespace
My editor does this automatically so it's just gonna keep cropping up...
* Cut the dactyl down to the right number of columns
(Remember, throughout matrix.c, everything called "row" is really a
column, and vice-versa).
* Remove LED-related code
* Tighten up the Dactyl's build options
* Whitespace cleanup in twimaster.c
* Hardtabs -> spaces
* No more trailing whitespace
* Typo fix
* Correct the CPU frequency units
The Teensy's CPU definitely doesn't run at 16 petahertz...
* Restore access to ONEHAND_ENABLE
I turned it off in
|
6 years ago |
Seebs | 7fbe6c3594 |
improve ergodox ez performance
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> |
6 years ago |
Don Armstrong | 2e3b99f7f1 | update left led support | 6 years ago |
Jack Humbert | d2ff66a985 |
Creates a layouts/ folder for keymaps shared between keyboards (#1609)
* 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 |
6 years ago |
Stick | 4b50ab029d |
Revert "ugly workaround for ErgoDoxEZ LED bugs: turn 'em all off"
This reverts commit
|
7 years ago |
Stick | f397402e10 | ugly workaround for ErgoDoxEZ LED bugs: turn 'em all off | 7 years ago |
Andrew Pritchard | cd30a60d0e |
Change to per-key eager debouncing for ErgoDox EZ.
Empirically, waiting for N consecutive identical scans as a debouncing strategy doesn't work very well for the ErgoDox EZ where scans are very slow compared to most keyboards. Instead, debounce the signals by eagerly reporting a change as soon as one scan observes it, but then ignoring further changes from that key for the next N scans. This is implemented by keeping an extra matrix of uint8 countdowns, such that only keys whose countdown is currently zero are eligible to change. When we do observe a change, we bump that key's countdown to DEBOUNCE. During each scan, every nonzero countdown is decremented. With this approach to debouncing, much higher debounce constants are tolerable, because latency does not increase with the constant, and debounce countdowns on one key do not interfere with events on other keys. The only negative effect of increasing the constant is that the minimum duration of a keypress increases. Perhaps I'm just extremely unlucky w.r.t. key switch quality, but I saw occasional bounces even with DEBOUNCE=10; with 15, I've seen none so far. That's around 47ms, which seems like an absolutely insane amount of time for a key to be bouncy, but at least it works. |
7 years ago |
Jack Humbert | e9f7487518 | mostly working | 7 years ago |
Fred Sundvik | 9af995c59b |
Initial structure for Ergodox as subprojects
Only the EZ default keymaps compiles at the moment though. |
7 years ago |
Jack Humbert | 3577e26fd9 | fix/annotate wait_us lines | 7 years ago |
Jack Humbert | 86a7b060ef | Adds wait to i2c (debounce) | 7 years ago |
Jack Humbert | eafaba6b53 | Improves debounce | 7 years ago |
Jack Humbert | 65faab3b89 |
Moves features to their own files (process_*), adds tap dance feature (#460)
* non-working commit * working * subprojects implemented for planck * pass a subproject variable through to c * consolidates clueboard revisions * thanks for letting me know about conflicts.. * turn off audio for yang's * corrects starting paths for subprojects * messing around with travis * semicolon * travis script * travis script * script for travis * correct directory (probably), amend files to commit * remove origin before adding * git pull, correct syntax * git checkout * git pull origin branch * where are we? * where are we? * merging * force things to happen * adds commit message, adds add * rebase, no commit message * rebase branch * idk! * try just pull * fetch - merge * specify repo branch * checkout * goddammit * merge? idk * pls * after all * don't split up keyboards * syntax * adds quick for all-keyboards * trying out new script * script update * lowercase * all keyboards * stop replacing compiled.hex automatically * adds if statement * skip automated build branches * forces push to automated build branch * throw an add in there * upstream? * adds AUTOGEN * ignore all .hex files again * testing out new repo * global ident * generate script, keyboard_keymap.hex * skip generation for now, print pandoc info, submodule update * try trusty * and sudo * try generate * updates subprojects to keyboards * no idea * updates to keyboards * cleans up clueboard stuff * setup to use local readme * updates cluepad, planck experimental * remove extra led.c [ci skip] * audio and midi moved over to separate files * chording, leader, unicode separated * consolidate each [skip ci] * correct include * quantum: Add a tap dance feature (#451) * quantum: Add a tap dance feature With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter. To make it clear how this is different from `ACTION_FUNCTION_TAP`, lets explore a certain setup! We want one key to send `Space` on single tap, but `Enter` on double-tap. With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and has the problem that when the sequence is interrupted, the interrupting key will be send first. Thus, `SPC a` will result in `a SPC` being sent, if they are typed within `TAPPING_TERM`. With the tap dance feature, that'll come out as `SPC a`, correctly. The implementation hooks into two parts of the system, to achieve this: into `process_record_quantum()`, and the matrix scan. We need the latter to be able to time out a tap sequence even when a key is not being pressed, so `SPC` alone will time out and register after `TAPPING_TERM` time. But lets start with how to use it, first! First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array. This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are two possible options: * `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. * `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the current state of the tap-dance action. The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. And that's the bulk of it! Do note, however, that this implementation does have some consequences: keys do not register until either they reach the tapping ceiling, or they time out. This means that if you hold the key, nothing happens, no repeat, no nothing. It is possible to detect held state, and register an action then too, but that's not implemented yet. Keys also unregister immediately after being registered, so you can't even hold the second tap. This is intentional, to be consistent. And now, on to the explanation of how it works! The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and the timer. This means that you have `TAPPING_TERM` time to tap the key again, you do not have to input all the taps within that timeframe. This allows for longer tap counts, with minimal impact on responsiveness. Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-dance keys. For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros. In the end, lets see a full example! ```c enum { CT_SE = 0, CT_CLN, CT_EGG }; /* Have the above three on the keymap, TD(CT_SE), etc... */ void dance_cln (qk_tap_dance_state_t *state) { if (state->count == 1) { register_code (KC_RSFT); register_code (KC_SCLN); unregister_code (KC_SCLN); unregister_code (KC_RSFT); } else { register_code (KC_SCLN); unregister_code (KC_SCLN); reset_tap_dance (state); } } void dance_egg (qk_tap_dance_state_t *state) { if (state->count >= 100) { SEND_STRING ("Safety dance!"); reset_tap_dance (state); } } const qk_tap_dance_action_t tap_dance_actions[] = { [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln) ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) }; ``` This addresses #426. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org> * hhkb: Fix the build with the new tap-dance feature Signed-off-by: Gergely Nagy <algernon@madhouse-project.org> * tap_dance: Move process_tap_dance further down Process the tap dance stuff after midi and audio, because those don't process keycodes, but row/col positions. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org> * tap_dance: Use conditionals instead of dummy functions To be consistent with how the rest of the quantum features are implemented, use ifdefs instead of dummy functions. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org> * Merge branch 'master' into quantum-keypress-process # Conflicts: # Makefile # keyboards/planck/rev3/config.h # keyboards/planck/rev4/config.h * update build script |
8 years ago |
Jack Humbert | b68b722325 | updates ez's matrix to spec | 8 years ago |
Jack Humbert | 649b33d778 |
Renames keyboard folder to keyboards, adds couple of tmk's fixes (#432)
* fixes from tmk's repo * rename keyboard to keyboards |
8 years ago |
Jack Humbert | de326d078d | prevents ergodox_ez from waking up machine (#375) | 8 years ago |
Dave Jones | 4ae86e6ff7 |
Squash the prototype compiler warning
unselect_rows declared with no parameter list; requires (void) to prevent compiler warning |
8 years ago |
yoyoerx | 641859df84 | Addressed void* return warning in all keymaps | 8 years ago |
Erez Zukerman | d3db8d62f6 | More work on ErgoDox EZ default keymap | 8 years ago |
Erez Zukerman | 0c47e8b008 | [Jack & Erez] Comments + tiny updates and cleanup | 8 years ago |
Jack Humbert | 35a81f5b8b | added ergodox | 8 years ago |