qmk-combos / combos

This repo is merged into QMK every few weeks. This repo exists to take PR strain off the core QMK team
34 stars 21 forks source link

Ginny does not return to typing layer... #5

Open russsharek opened 3 years ago

russsharek commented 3 years ago

At long last, I received my Ginny today!

While I was poking around at the firmware, I noticed a bug:

If you enter any layer, you can exit again by hitting that layer chord as expected. However, if you try to go from num to command, or vice versa, the board becomes unresponsive.

I fired up xev, and it's not sending keypresses at this point.

The "hit all the keys twice to reset" mentioned in the documentation doesn't seem to work.

Disconnecting and reconnecting the USB resets the board as expected, and it returns to sending keypresses.

I'm new to playing with this board, so if I'm missing anything obvious please let me know. I'm happy to test fixes, as I absolutely love this thing and want to help make it better.

On that note, are there a decent set of instructions on how to reflash the Ginny?

roddymetanez commented 3 years ago

I've been having some success flashing using the QMK toolbox on Windows10. (LINKY-CLICKY)

I have the same bug too, The Germ notes that its;

I believe what's happening is once both the USR and SYM layers are toggled on, it starts looking for entries starting with USR | SYM... ...need to add in stuff for that layer to return down

My C is in its infancy somewhat, (and this a bit monkey bashing the jaw-bones before the monolith) but going by what I can garner from the code, the SET_STICKY(NUM) is compounded with the SET_STICKY(SYM) and as The Germ notes off the engine goes looking for NUM|SYM... Engine.C Line235 & Line414 I suppose one fudge would be to interrupt the sending of the SET_STICKY(arg) with a flag that checks if NUM or SYM or FOO is set and if so quickly send an SET_STICKY(0) and then send that inputted code. Will have a crack at it I suppose. Any thoughts?

roddymetanez commented 3 years ago

In the engine.c file, to replace the existing SET_STICKY function, and as a first pass ;

void SET_STICKY(C_SIZE stick) { if (stickyBits > 0) { stickyBits = 0; } else { stickyBits ^= stick;} return; }

Now that requires you to press the next dictionary cue. Probably something I'm missing here for the edge cases... As soon as I read the instructions for gitHub I'll see if I can make some kind of PR for Germ's kind review.