PS/2 to USB keyboard converter ============================== This firmware converts PS/2 keyboard protocol to USB. Demostration build ------------------ In this demo build, you can try several layouts, mouse keys and USB NKRO. Special keys: Magic+0: Qwerty with mouse keys(default) Magic+1: Qwerty Magic+2: Colemak Magic+3: Dvorak Magic+4: Workman Magic+N: toggles NKRO/6KRO(6KRO by default) Magic+Esc: sends Power Event where Magic=(LShift+RShift) or (LControl+RShift) Keybinds: Fn0+(hjkl): Mouse key move(vi cursor) Fn0+(yuio): Mouse wheel(left,down,up,right) Fn0+space: Mouse button1 Fn0+(mnb): Mouse buttons(1,2,3) Fn0+(zxc): Media control(Volup, Voldown, Mute) Fn1+(hjkl): Cursor move(vi cursor) Fn1+(nm,.): Cursor move(Home,PageDown,PageUp,End) Fn2+(esdf): Mouse key move(invert T cursor) Fn2+(qwrt): Mouse wheel(left,down,up,right) Fn2+space: Mouse button1 Fn2+(,./): Media control(Volup, Voldown, Mute) where Fn0=;, Fn1=/, Fn2=a 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/6KRO.(Not tested on Mac.) Keymap customization You can customize keymaps easily by editing source code. Build for Teensy ---------------- 0. Connect PS/2 keyboard to Teensy by 4 lines(Vcc, GND, Data, Clock). 1. Define following macros for PS/2 connection in config_pjrc.h: PS2_DATA_PORT PS2_DATA_PIN PS2_DATA_DDR PS2_DATA_BIT PS2_CLOCK_PORT PS2_CLOCK_PIN PS2_CLOCK_DDR PS2_CLOCK_BIT 2. Edit Makefile for build options and MCU setting. 2. make 3. program Teensy. http://www.pjrc.com/teensy/loader.html Build for V-USB --------------- 0. Build V-USB controller board and connect PS/2 keyboard. 1. Define macros in config_vusb.h if needed. 2. Edit Makefile.vusb for build options and MCU setting. 3. make -f Makefile.vusb 4. program your V-USB controller. V-USB Circuit ------------- +---+ +---------------+ USB GND | | ATmega168 | === C3 | | 5V <-------+--------+---|Vcc,AVCC | PS/2 R1 | | ==== D- <----+--+-----R2-----|INT1 RXD|------->DATA D+ <----|---+----R3-----|INT0 XCK|------->CLOCK Z1 Z2 | | ->5V GND<----+---+--+--+-----|GND | ->GND | | | | | C2-+--|XTAL1 | | X1 | | +--C3-+--|XTAL2 | +---------------+ R1: 1.5K Ohm R2,R3: 68 Ohm Z1,Z2: Zenner 3.6V C1,C2: 22pF C3: 0.1uF X1: Crystal 20MHz(16MHz/12MHz) 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. If you want to define more than one keymap, see hhkb/keymap.c and macway/keymap.c as examples. 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 ), Multimedia keys --------------- Following lists PS/2 special keys supported by Windows. http://msdn.microsoft.com/en-us/windows/hardware/gg463372.aspx Key PS/2(Set2) HID --------------------------------------------------- System Power E0 37 01 0081 System Sleep E0 3F 01 0082 System Wake E0 5E 01 0083 System Mute E0 23 0C 00E2 Volume Up E0 32 0C 00E9 Volume Down E0 21 0C 00EA Scan Next Track E0 4D 0C 00B5 Scan Previous Track E0 15 0C 00B6 Stop E0 3B 0C 00B7 Play/Pause E0 34 0C 00CD Media Select E0 50 0C 0183 Mail E0 48 0C 018A Calculator E0 2B 0C 0192 My Computer E0 40 0C 0194 WWW Search E0 10 0C 0221 WWW Home E0 3A 0C 0223 WWW Back E0 38 0C 0224 WWW Forward E0 30 0C 0225 WWW Stop E0 28 0C 0226 WWW Refresh E0 20 0C 0227 WWW Favorites E0 18 0C 022A EOF