Colossus Universal Model M Controller Version 2
Current operation/details are as such:
Fits all Model M's (with the exception of the later -and current- style mounted underneath the LED cluster). You can even use it in combination with the M13's stock controller to retain use of the TrackPoint.
Has provisions for all of the standard LED connector locations, and extra expandability for custom LEDs. Drops right in to the later style 122's with the cable/port cutout in the middle of the case, and the early 122's using a 3D printed bracket. Sub-boards are part of the design to allow for port options aside from USB-B (even though that's still my favorite) including Mini, Micro, and USB-C. And if one were so inclined, they could solder a non-detachable cable.
Borrowed heavily from hasu's BT-HHKB, with a slightly different hardware approach.
Slide the switch on, and Bluetooth connects automatically to the last paired device in about 3 seconds. While in use, you can plug it in and continue using while the battery charges. Slide the switch off and you can use it as a USB keyboard while the battery charges, or plug it into a wall adapter for a slightly faster charge rate. During fast charge you can press a key combination to enable Bluetooth. LED indicators near the port cover indicate when the battery is getting low (red), when the battery is fully charged (green), and the current status of Bluetooth connectivity (blue). These indicators can also be expanded to a more visible location.
The Bluetooth module is the RN-42, but the UART pins are available so you could technically use other modules if you modify the firmware.
At the moment (using a 1200mAh battery) I get ~30 hours of use when left on, but that's low because I haven't figured out the power saving code yet. With just the MCU running, it draws 9mA. With Bluetooth on and connected, the total draw is 40mA. So, once the power saving gets implemented I'm expecting closer to 100 hours before needing charged.
I'll figure it out through trial and error eventually, but I would love some pointers in how to implement the matrix_last_modified timer to switch off the MOSFET controlling the RN-42 and turn it back on when a key gets pressed, as well as modifying the scan rate to lower power consumption. The code base is already there, I just need to adapt it.
I've attempted to make the layout friendly to hand solder all of the components, or for reflow.
The basic design is super simple. The only complex part is packaging it to suit various iterations of M's on a single board, with various choices being up to the user, and I feel I've just about accomplished that. Porting the base design to other (matrix based) keyboards would be a definite option.
The time is coming for me to release the whole shebang into the wild and let the community build on what I think has grown into a pretty neat board.
A few sub-notes...
There are two main features I want to implement:
- A soft power switch instead of the slide switch. I want a single push button to turn the entire board on/off, which would also enable the MCU to control the main power. (Probably in Version 3...
- Pressing a key combination to blink the battery charge status. Example: a series of fast green blinks to indicate, say, 90%, slower and less blinks for less than 80%, and maybe switch to blinking the red LED for under 50%. Or something to that effect.