Close

Prototype 1: Keyboard and trackpad success!

A project log for The Outlander Cyberdeck

A handheld fantasy console built around CM4 form-factor SoMs, featuring multiple radios and a physical keyboard.

janusprotocoljanusprotocol 03/20/2025 at 18:310 Comments

After eight months of working on this project in my "spare" time, I've finally got something checked off my list: I got the keyboard module completed! Well, nearly completed, but I know what the problem is.


Rather than redesigning a new board to try out is RP2350B based WeAct Studio module, I decided to use some of my training from the 1990s and acquired some prototyping circuit boards, or protoboards. I realized I could just solder some wires to the delicate pads on the boards I already designed, then solder those down to the protoboard and connect everything with wires underneath. The bigger protoboard also provided a nice surface to tape down the Q20 keyboard, which prevents it from coming loose from the Hirose connector; those things aren't meant to bear any sort of load, after all. Finally, this is my first time building with an RP2350 chip, and wow is it cheating! You can just stick any old IO to any old pin on that thing with very few limitations and you can expect it to do what you need. An incredible piece of technology and one that is sorely underused IMO.

In any event, once I got the RP2350B board all connected to my adapter board and fired it up, I was able to kludge together code to emulate a keyboard and mouse using CircuitPython. The keyboard was fairly straight forward, but now that I was able to confirm the functionality of a keyboard with a reliable setup I could tell that there's only six columns in the keyboard, with the seventh being reserved solely for the End Call button in the topmost right corner. That switch just connects the Column 7 input with ground, which means to use the End Call button I told that pin to act as a pull-up input. This seems to have worked absolutely fine with no circuit modifications, another big plus to the RP2350.

I was really worried about the trackpad because I Do. NOT. KNOW. What I am doing. I realized that the trackpad was communicating with the MCU using a logic-level shifted I2C connection, and slowly over months I figured out what that actually meant in terms of using it as a protocol (the bus, pull up resistors, etc.). I dug around and found other software for devices making use of the Q20 keyboard and trackpad, which led me to realize that this trackpad sensor was writing data like binary motion detection and motion in the X and Y axes as value in various registers, which can be read out by the MCU via I2C. I rigged up a script to read a bunch of these registers, and confirmed my speculation. My jank code scans the trackpad register tied to motion detection, and if it detects motion it reads those X and Y registers it moves the mouse cursor according to the intensity of the movement detected.

So what's the problem? I can't get the full keyboard to work because when I soldered the adapter board down I must've popped a weak solder joint on the ROW5 pad, which obviously means there's no way to get a signal through on that pin. I tried to do some jank resolder and botch wire patching but to no avail. Oh well, that's prototyping for you. So it works! But....I kinda hate the Q20 keyboard. The trackpad sensor is great, but my fingers really appreciate a bit more button room. So, I may try to just make my own keyboard directly on the PCB with some tactile switches under buttons. If you know of any good online resources for making keypads on handheld devices in this way, please send those resources my way! 

The things that still need testing are the power system, the LCD system (I'm not going through HDMI FFS), and the radio system. My plan is to spool up these prototypes and have them ordered by the end of the month.

Discussions