top: stock FC660C controller; bottom: Hasu FC660C controller
I’m the proud owner of a Leopold FC660C keyboard. I love the feel of the Topre switches, and it’s the perfect size. The layout, however, is not quite perfect.
For instance, I prefer to use Caps Lock as an Escape key. The backtick/tilde key on the FC660C shares a spot with Escape, which is slightly weird. I also like to switch LCtrl and LGui. I cobbled together a software solution to get the layout I wanted, using a combination of Karabiner Elements and the macOS keyboard options. But if I ever wanted to use my keyboard on a different computer, I’d have to set it up all over again.
This weekend I switched out the keyboard’s stock controller for the Hasu FC660C Controller. Now my keyboard is fully programmable! No extra software configuration on different computers.
I’m not well-versed in electronics, and I was terrified of screwing up my precious keyboard or the Hasu controller. But the installation turned out to be super straightforward. I’m really happy with the results.
- Installation instructions from Hasu himself
- Great video on installing controller (flashing steps are Windows-only, though)
- Keymap editor to generate the hex file
Steps followed (macOS)
brew install dfu-programmer
- On the back of the keyboard, remove the “OK” warranty sticker and the black screw underneath
- Gently pry open the gap between the back and the front bezel; insert a few credit cards to keep it open
- Slowly, carefully, pry and pop off the bezel
- Unscrew the controller from the back (2 smaller silver screws)
- Remove the ribbon cable from the stock controller
- Insert the ribbon cable into the Hasu controller
- Screw down the Hasu controller
- Replace the screw on the back
- Pop the front bezel back on
- Plug the keyboard in and verify that it works
- Use the keymap
editor to set the
desired layout and download the resulting hex file (
- Press the button on the back of the keyboard on the Hasu controller (where the dipswitches on the stock controller used to be) to put the controller in bootloader mode
- Clear the controller memory
$ dfu-programmer atmega32u4 erase --force Erasing flash... Success Checking memory from 0x0 to 0x6FFF... Empty.
- Load the new hex file
$ dfu-programmer atmega32u4 flash ~/Downloads/unimap.hex Checking memory from 0x0 to 0x6FFF... Empty. 0% 100% Programming 0x7000 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success 0% 100% Reading 0x7000 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success Validating... Success 0x7000 bytes written into 0x7000 bytes memory (100.00%).
- Reset the controller state
$ dfu-programmer atmega32u4 reset