Voiding the warranty on my keyboard

top: original; bottom: hasu 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.

Steps followed (macOS)

  1. brew install dfu-programmer
  2. On the back of the keyboard, remove the “OK” warranty sticker and the black screw underneath
  3. Gently pry open the gap between the back and the front bezel; insert a few credit cards to keep it open
  4. Slowly, carefully, pry and pop off the bezel
  5. Unscrew the controller from the back (2 smaller silver screws)
  6. Remove the ribbon cable from the stock controller
  7. Insert the ribbon cable into the Hasu controller
  8. Screw down the Hasu controller
  9. Replace the screw on the back
  10. Pop the front bezel back on
  11. Plug the keyboard in and verify that it works
  12. Use the keymap editor to set the desired layout and download the resulting hex file (unimap.hex)
  13. 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
  14. Clear the controller memory
      $ dfu-programmer atmega32u4 erase --force
      Erasing flash...  Success
      Checking memory from 0x0 to 0x6FFF...  Empty.
  15. 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%).
  16. Reset the controller state
      $ dfu-programmer atmega32u4 reset