From GeekHackWiki
Jump to: navigation, search

The Bathroom Epiphanies AVR-Keyboard firmware. The files are available at this github page.

This firmware is used on the Phantom and the HID Liberation device, a replacement controller for the Filco's TKL boards.

File list

Filename Description
firmwares/ Folder with pre-compiled firmwares.
hid_liber/ Each physical board has its own folder with files defining the matrix layout and other parameters.
hid_liber/board.h Includes board parameters for number of rows/columns, microcontroller specifics, and declarations of the functions to interface the board.
hid_liber/board.c This is where the microcontroller pin-out is defined, and the function definitions for the interface can be found.
hid_liber/ansi_iso_jis.h Pretty much just a dummy file.
hid_liber/ansi_iso_jis.h Here is where the actual layout is defined.
[other board specific folders]
Makefile Magic make stuff to compile everything correctly. This is where the board and layout to be compiled is selected.
avr.h Extra definitions to make life easier..
avr_keyboard.c The main program code.
hid_listen A monitor that listens to debug data sent back from the keyboard. Compiled on Ubuntu 12.04 64-bit.
print.h Includes functions for debug printing.
print.c Includes functions for debug printing.
usb_keyboard_debug.h The HID keyboard framework supplied by pjrc.com.
usb_keyboard_debug.c The HID keyboard framework supplied by pjrc.com.


Building the firmware

The make system keeps track of what needs to be compiled and how that is supposed to be done. It does not work perfectly for this project. Changing the microcontroller used requires a 'make clean' to be done.

Each board has a section in the beginning of the file. The correct one needs to be un-commented before compiling.

Parameters that need to be defined.

BOARD = hid_liber          // Folder for board specifics
LAYOUT = ansi_iso_jis      // Required layout for that board. Located in the BOARD folder.
MCU = atmega32u4           // Microcontroller the board uses
F_CPU = 16000000           // CPU speed
B_LOADER = \"jmp\ 0x7000\" // Memory location of the bootloader section

To compile the firmware run the commands

make clean; make

Flashing the firmware

You need the Atmel Flip software installed to your system. If you find that USB comms is not working, use these directions: Flip-USB

  1. Plug in your keyboard
  2. Start Flip
  3. Click the Chip icon (first one)
  4. Select the ATmega32U4 from the list
  5. Click the USB icon
  6. Get your KB to jump to the bootloader (both shifts, or a magnet over the controller)
  7. Click Open (keep trying, takes a moment for the chip to be ready after jumping to the bootloader)
  8. Click the File menu and select your HEX file
  9. Click Run on the bottom left
  10. Click Start Application on the bottom right
  11. Wait a moment and your KB should be live with your new firmware

Hints to having a comfortable programming experience

  • Install Linux (Ubuntu recommended for beginners).
  • Install a worthy text editor - emacs if you are a bit crazy, vim if you are flat out insane, but gedit will do nicely.
sudo apt-get install emacs
  • Make sure you have the needed software installed
sudo apt-get install gcc-avr binutils-avr avr-libc

External links