I just replaced a keyswitch in my Model 01 that wasn’t working, and on first plugging the keyboard back in everything was fine. I proceeded to try and reflash the keyboard – not for any particular reason but to check that my custom firmware still worked with the latest Kaleidoscope.
At some point, after a reflash, it seems that nearly every key “after” the “S” key (as if you were reading the keys left to right and top to bottom) is now not working.
To be more specific, these keys are working:
All of the first and second row
The first three keys of the third row
Tab and Enter
Left Ctrl, Bksp
Right Space, Ctrl
As far as I can tell everything else has stopped working. Could this possibly be a hardware failure or have I screwed something up with the firmware flash? All LEDs continue to work.
I have since reflashed with what should be “stock” firmware, i.e. the master branch in the Model01-Firmware repository and Kaleidoscope 1.99.5 using the Arduino IDE.
The only other things that seem to be worth mentioning are this error I get when installing the Kaleidoscope board library:
Invalid library found in C:\Users\...\AppData\Local\Arduino15\packages\keyboardio\hardware\avr\1.99.5\libraries\Kaleidoscope-LEDControl: no headers files (.h) found in C:\Users\...\AppData\Local\Arduino15\packages\keyboardio\hardware\avr\1.99.5\libraries\Kaleidoscope-LEDControl
I thought to try Chrysalis, which I haven’t used until now, and while 0.9.5 failed to connect to the keyboard (“connection timeout”), 0.9.6-snapshot.220 immediately showed me this:
I don’t for the life of me understand how it got into this state, but at least that has now confirmed that this isn’t a hardware problem. I will try reflashing from a Linux machine, because something is clearly not working correctly with Arduino on Windows.
I’m afraid I’m still stuck here. I’m attempting to reflash with stock Model01 firmware using Kaleidoscope 0.99.3 (which doesn’t throw the error/warning about Kaleidoscope-LEDControl: no headers files (.h) found in ...\Kaleidoscope-LEDControl) and it doesn’t seem to take.
The build works correctly, there are no errors reported on upload, and the red lights do their usual flashy thing. Once that’s complete the keyboard is just not working. The only keys that now work are the ones previously configured through Chrysalis.
Well, after a frustrating few hours I can now say that what I was missing was the fact that Chrysalis works by storing a new and independent layout in EEPROM which overrides the burned-in layout. This wasn’t part of my mental model at all, and it took this comment from Jesse to hint that to my brain.
I think what must have happened initially was that I tried to connect Chrysalis 0.9.5 to the keyboard, and that failed in an interesting way that left the EEPROM data in an inconsistent and unusable state. I am assuming this in part because it would either fail to connect with a “Connection timeout!” error, or it would connect for just a moment and then flip back to the disconnected/keyboard selector screen.
The solution for me was to use the “Reset EEPROM to factory settings” option in Chrysalis and then everything started working again.
Kaleidoscope is finding the keymap defined in the EEPROM, which overrides the keymap defined in your sketch. You can compile a version without the EEPROM-Keymap plugin, use Chrysalis to erase the whole EEPROM, or define your keymap in Chrysalis.