PS/2 to USB keyboard converter
==============================
This firmware converts PS/2 keyboard protocol to USB and for now supports only Scan Code Set 2.
This will works on USB AVR(ATMega32U4, AT90USB) or V-USB.


Features
--------
Mouse keys
    You can emulates mouse move and button click using keyboard.
System/Media control
    You can sends Power event, Volume down/up and Mute.
USB NKRO(actually 120KRO+8Modifiers)
    You can tolggles NKRO feature.
Keymap customization
    You can customize keymaps easily by editing source code. See keymap.c.


PS/2 signal handling implementations
------------------------------------
Following three methods are used to implement PS/2 signal handling.
a. Simple and stupid wait & read loop(intensive use of cycles)
    This is implemented with (expected) portable C code for reference. See ps2.c.
b. Interrupt driven
    See ps2_intr.c
c. Using USART hardware module(no cycle needed)
    This uses AVR USART function to recevie PS/2 signal and be used in V-USB converter.
    See ps2_usart.c.


Build Converter
---------------
Connect PS/2 keyboard into Teensy with 4 lines(Vcc, GND, Data, Clock).
For a. Simple and stupid and b. Interrupt implementaion:
    By default Clock is on PF0 and Data on PF1.
    You can change this pin configuration by editing config_pjrc.h.
    In this photo Vcc is yellow, GND is green, Data is red and Clock is black.
    http://img17.imageshack.us/img17/7243/201101181933.jpg
For c. USART implementation:
    In case of Teensny(ATMega32u4) CLock is on PD5 and Data on PD2.


Build Frimware
--------------
1. Edit Makefile for build options and MCU setting.
    Use 'atmega32u4' for Teensy 2.0 or 'at90usb1286' for Teensy++ 2.0.
2. make
    Just type 'make' in a terminal.
    Use '-f Makefile.pjrc_intr' option to use b. Interrupt.
    Use '-f Makefile.pjrc_usart' option to use c. USART.
    Use '-f Makefile.vusb' option to build V-USB converter.
3. program with Teensy Loader.
    http://www.pjrc.com/teensy/loader.html


Demonstration of Features
-------------------------
In default configuration, you can try several keymaps, mousekeys and USB NKRO.
Use following magic key combinations to enable some features.

keymaps and NKRO:
    Magic+0:    Qwerty with mousekeys(default)
    Magic+1:    Qwerty without mousekeys
    Magic+2:    Colemak
    Magic+3:    Dvorak
    Magic+4:    Workman
    Magic+N:    toggles NKRO/6KRO(6KRO by default)
    Magic+Esc:  sends Power Event(Power button)

    where Magic=(LShift+RShift) or (LControl+RShift)

Fn layer function:
    Fn0+(hjkl): Mousekey move(vi cursor like)
    Fn0+(yuio): Mouse wheel(left,down,up,right)
    Fn0+space:  Mouse left button
    Fn0+(mnb):  Mouse buttons(m=left, n=right, b=middle)
    Fn0+(zxc):  Media control(Volup, Voldown, Mute)
    Fn1+(hjkl): Cursor move(vi cursor like)
    Fn1+(nm,.): Cursor move(Home,PageDown,PageUp,End)

    where Fn0=;, Fn1=/


Keymap
------
You can change a keymap by editing code of keymap.c like following.
How to define the keymap is probably obvious. You can find  key symbols in usb_keycodes.h.
To define keymap layer switching may needs a bit of your effort at this time.

    /* Default Layer: plain keymap
     * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.     ,-----------.
     * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|     |Pwr|Slp|Wak|
     * `---'   `---------------' `---------------' `---------------' `-----------'     `-----------'
     * ,-----------------------------------------------------------. ,-----------. ,---------------.
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa| |Ins|Hom|PgU| |NmL|  /|  *|  -|
     * |-----------------------------------------------------------| |-----------| |---------------|
     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD| |  7|  8|  9|   |
     * |-----------------------------------------------------------| `-----------' |-----------|  +|
     * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |               |  4|  5|  6|   |
     * |-----------------------------------------------------------|     ,---.     |---------------|
     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift     |     |Up |     |  1|  2|  3|   |
     * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
     * |Ctrl |Gui |Alt |         Space         |Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| |      0|  .|   |
     * `-----------------------------------------------------------' `-----------' `---------------'
     */
    KEYMAP(
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,BRK,          PWR, F13, F14,
    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,     INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,     DEL, END, PGDN,    P7,  P8,  P9,
    CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,                         P4,  P5,  P6,  PPLS,
    LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,          RSFT,          UP,           P1,  P2,  P3,
    LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
    ),


EOF
