This is a review for hasu's TMK
USB to USB converter.
I decided to write a review for this little dongle because I think it's one of the most ingenious, exciting keyboard-related devices I've come across, yet a lot of folks still don't know it exists. Hopefully this review will help shed some light on this game-changing device. Let's start by taking a look at what the USB to USB converter is and what it does.
USB to USB Converter by
Nick Bair, on Flickr
For the uninitiated, TMK is a
highly-customizable keyboard firmware developed by GeekHack user hasu. TMK is primarily designed for AVR controllers, but it also has support for ARM-based boards like the Infinity. TMK supports a ton of features, including multiple layers, custom function key operation media keys, and mouse keys.
TMK also supports a lot of other PCB-specific features, such as LED backlighting and even Trackpoint support, but those don't apply to a converter like this one. If you have an AVR-based keyboard controller, I highly recommend giving TMK a try. hasu also sells a custom TMK controller for the HHKB, and phosphorglow has created a custom Model M controller that runs TMK out of the box.
BackgroundI'm no TMK historian, but from what I've found, hasu's first TMK firmware threads date back to late 2012. hasu developed converter devices for ADB, PS/2, and IBM terminal boards, among others, which created a funny situation--through TMK, these old keyboards running obsolete protocols actually had access to more advanced capabilities than a lot of newer USB-based boards. To fix this, hasu created the USB to USB converter.
What It DoesThe name
USB to USB Converter is a bit tongue-in-cheek, as there is obviously no need to convert a protocol to itself. But for those familiar with the capabilities of hasu's other converters, this name makes total sense. This device can take any USB keyboard, old or new, and turn it into a fully-programmable one, customized precisely to your own specifications. And the best part is, this device provides that customizability to
all of your USB keyboards.
This, I believe, is the true magic of the USB to USB converter. Many 60% enthusiasts can recount the hours upon hours spent reprogramming their keyboards. This is kind of fun while you're experimenting with things like SpaceFn and macros, and perfecting a layout that's just right for you, but it quickly gets old as you have to reiterate the same configuration across all your boards every single time you make a change. Add to this the annoyance of switching to a full-sized board and realizing that you don't have access to the function layer controls you've grown used to.
With the USB to USB converter, all of these problems go away. Simply flash your configuration once and it will work with any board you plug into it. Dvorak and Colemak users, never worry about hunting and pecking on a strange computer again. Simply throw the converter in your bag so you have it with you for use on other machines (granted, this may not be practical if the keyboard is plugged into the back of the tower under the desk, but still).
How It WorksThe technical operation of the converter is surprisingly simple. On the keyboard end, the converter acts as a USB host device, so as far as your keyboard is concerned it's plugged into a computer. On the computer end, it uses the same HID protocol as any USB keyboard. That means it supports USB HID features such as media keys and LED lock indicators.
HardwareThe converter is a small dongle with a male USB plug on one end and a female USB plug on the other. The PCB is double-sided, with the ATmega32u4 chip on the bottom, and the USB host controller and most of the other components on the top. The dongle is wrapped in clear heat-shrink tubing to keep it protected. The heat-shrink covers everything, including the reset button used to place the device in bootloader mode for flashing the firmware.
I noticed two little slits had been cut in the wrapping on either side of the button, presumably to loosen the wrapping enough for the button to work. Even with the slits, the wrapping was still a little tight around the button, at least on mine, making it hard to tell when the button was pressed. Although the button worked fine as-is, I decided to cut away the wrapping and expose the button completely. This makes button presses much more apparent and gives me confidence that the button will not be accidentally triggered.
LimitationsThe converter does not support NKRO output. I believe that an NKRO board will work with the converter, but the converter will only do 6KRO (boot protocol) on the computer side.
The converter can't read Fn keys on boards like the Poker, since those keys are handled internally (boards don't send keycodes when the Fn key is pressed). Any functions or layers already programmed on the board will still work from behind the converter, but the converter has no way of knowing whether the keycodes it's receiving came from a Fn command. Any other key can be set up as a Fn key, so you can do things like SpaceFn with the converter. You can even daisy-chain converters...
Photo credit: hasu
...although there's really no point in doing this other than to show off. Besides Fn keys, the converter also doesn't receive media key codes from the keyboard. It sends media key codes just fine, though, so you can program your own custom key combinations for media control.
TMK normally supports
virtual DIP-switches, persistent settings that automatically load every time you plug in the keyboard. Known as
boot magic, these settings provide a simple way to configure common options such as Ctrl/Capslock switching, winkeyless operation, and default layer selection. But boot magic requires special key combinations to be pressed while plugging in the board, and this doesn't work with hasu's converters because they can't read the keycodes until the keyboard is finished booting. So for now, if you want to change these settings you'll need to manually modify the keymaps and reflash the firmware. hasu has suggested a possible workaround by adding a boot magic delay on startup, but this has yet to be implemented and there is no concrete roadmap to add this feature at the time of this writing.
Open Sourcehasu initially developed the converter using an Arduino Leonardo with an add-on shield providing USB host support. Although he's now developed the smaller dongle version pictured above, he's made all the code and instructions available to build your own Arduino-based converter. He even provides enthusiastic support to those opting to build their own, even though he profits from the sale of his pre-made converters. I truly get the sense that hasu is deeply committed to the keyboard community. For what it's worth, I received my converter shipped from Japan to Cleveland, for about the same cost as I would have spent on an Arduino and a USB host shield.
Another benefit of hasu's open-source approach is, of course, access to the code itself. If you've ever used another converter such as Soarer's teensy-based IBM converter, you may have found yourself frustrated by the limitations of a config file-based approach. Although it's well-documented, there are some things you just can't do, and support is purely on a best-effort basis. This is becoming increasingly problematic as Soarer has not been around much lately and hasn't updated the converter in a long time. Because nobody has the source code besides Soarer, nobody can fix bugs, add features, or otherwise improve it.
Because TMK is open-source, you can customize it any way you like, provided you have the programming skills to do it. hasu has provided callbacks so users can create their own custom functions in C code without hacking the core. But if you don't know C, it's still relatively easy to learn how to create your own keymaps, or you can just copy an existing keymap from a large number of examples and modify it to your liking.
My biggest complaint about the converter--really, a complaint about TMK in general--is the initial time investment to set up and learn. I run Windows on my main work computer, and I have not yet been able to compile TMK natively in Windows. Instead, I have a VirtualBox VM running Ubuntu Linux (something I already had for other reasons). I do all my configuration and compilation in Ubuntu, then copy the .hex file over the virtual network to my Windows desktop, then use Atmel's FLIP software to flash the firmware. There is a bit of a learning curve associated with setting up a development environment and compiling your firmware, but that is a one-time investment that pays dividends in custom keyboard bliss. And having used a few of the alternatives, I consider this initial investment a small price to pay for TMK's broad feature set and immense configurability.
The VerdictI wholeheartedly recommend hasu's USB to USB converter. It's an incredibly useful device, and at $50 USD + shipping, one of the most economical in terms of bang for your keyboard buck.
If you are someone who has found your one "end game" keyboard and never switches, you probably don't need this converter. But if you've ever found yourself accidentally entering HHKB shortcuts on your 1800, you may want to think about picking one up or building your own. Personally, I intend to try building another one based on the Arduino to use on my desk, and to keep this portable dongle in my bag for travel.
Links