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 akshaysrinivasan@nitk.ac.in
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 default layout as implemented in keymap.h : ( discussion at deskthority )
Macro TP
- -
LShft LAlt LCtrl Space Mod1 Mod3 AltGr Fx
- Esc Tab Space BkSp Ret - -
LWin Mod2
- -
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
@ _ [ ] # ! < > = &
\ / { } * ? ( ) + :
$ | ~ ` ^ % " '
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