Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
AVR keyboard firmware with PS/2 trackpoint support & macro mode.


The code is by no means in a state I would normally want to present it, but merely a snapshot of my current work in progress.

Due to the numerous requests I nonetheless chose to open it to the public, in the hopes that someone may find valuable information or hints even though it is documented poorly and hackish at best - maybe this encourages me enough to clean it up a little, too.


This is a firmware for avr controllers like the teensy to simulate a keyboard and a mouse. It was created for a custom split keyboard design with 4x6 keys on each side in a matrix layout but could be adapted easily for other hardware. A presentation of my current keyboard prototype can be found here.

It enables a different, more ergonomic layout without any further drivers on any host operating system. In its current state, the well evolved AdNW layout is implemented with layers 3&4 (special characters, navigational keys and numpad) from the neo layout. In addition, an integrated IBM trackpoint is also supported, but any PS/2 compatible device can also be hooked-up to the controller.


The driver was originally based on humblehackers hhkb firmware, but I found some things (while pretty neat and cleanly implemented) a little too difficult to adjust, so I revamped everything but the most basic USB code.

Implementation of mousekey layer, KEYMAP macro and other neat ideas borrowed from the very advanced tmk_firmware.

Klaus Weber contributed greatly to an enhanced secondary use state machine and provided several other modifications, including alternate layouts as well as PC/Mac and host language differentiations.

PS/2 support is credited in large part to Akshay Srinivasan


You will need a recent version of the LUFA usb stack to compile this software. If you want scrollwheel support for the mouse, the included patch needs to be applied. From this root directory, execute

$ git submodule init
$ git submodule update

To build, please adjust controller type and build switches in makefile. The hardware wiring needs to be specified in matrix.h . Further configuration can be achieved by editing src/config.h . If you change the code, you are at least required to change the vendor and product id! Valid ids can be retrieved from AVR demoes, or the keyboard examples of the LUFA lib.

Then simply call $ make

Current Layout

Current default layout as implemented in keymap.h : ( discussion at deskthority )

Thumb keys & modifiers
                        Macro    TP
                        -        -
LShft LAlt LCtrl Space                  Mod1 Mod3 AltGr Fx
 -     Esc  Tab  Space                  BkSp Ret  -     -
                        LWin     Mod2
                        -        -
Layer 0 & Mod1 ( letters shifted)
K  U  Q  .: J     V  G  C  L  F
H  I  E  A  O     D  T  R  N  S
X  Y  -  ,; /\    B  P  W  M  Z
M2 / special
@  _  [  ]  #     !  <  >  =  &
\  /  {  }  *     ?  (  )  +  :
   $  |  ~  `     ^  %  "  '
M3 / MoveNum
PgUp BkSp  Up  Del  PgDo   ß 7 8 9 ä Ä
Pos1 Left Down Righ End    . 4 5 6 ö Ö
Esc  Tab  Ins  Ret  Undo   0 1 2 3 ü Ü
tbd, see keymap.h
Something went wrong with that request. Please try again.