Tuesday, June 21, 2011

By Request: Kindle 3 Keyboard Map

In a previous post, loyal reader Blaketh requested that I post the keyboard map information I'm using for this project.  I immediately broke a promise to post it in the following few days, so I'll try to make up for it today. 

First, let's look at the connector itself, so you can figure out which end is up.  With the rear cover removed, you can see the keyboard connector in the lower-right corner of the main board.  It's a thin white FFC (Flat Flex Cable) type, and has 20 very small pins. 


As seen in this picture, pin 1 is at the bottom, and pin 20 on top. 

The keyboard itself is nothing more than a bunch of dry-contact switches, which is to say there aren't any sensitive electronics to worry about damaging or cloning.  To simulate a keystroke, all you have to do is short two wires together.  The trick is figuring out which pairs do what...

For your consideration, I present the keyboard map of the Kindle-3. 

(Format: (Short this pin)  (to this pin)  (to generate this keystroke) )


1 7
Menu
1 8
Home
1 9
Back
2 12
Q
2 13
W
2 14
E
3 7
R
3 8
T
3 9
Y
3 10
U
3 11
I
3 12
O
3 13
P
3 14
A
4 7
S
4 8
D
4 9
F
4 10
G
4 11
Home
4 12
J
4 13
K
4 14
L
5 7
Del
5 8
Z
5 9
X
5 10
C
5 11
V
5 12
Back
5 13
N
5 14
M
6 7
.
6 9
Enter
6 10
^ (shift)
6 11
Alt
6 12
Space
6 13
Aa
6 14
Sym
20 15
FW_UP
20 16
FW_DN
20 17
FW_LEFT
20 18
FW_RIGHT
20 19
FW_CENTER

A simple pushbutton can be used to mimic the stock Kindle keys. 

One word of caution - the auto-repeat delay is very short.  You don't notice this on the stock Kindle because those tiny little buttons don't maintain contact when pressed.  I won't pretend to know much about their internal structure, but I can tell you that a standard button will generate a lot of duplicate keystrokes in rapid succession if held down or even pressed slowly.  In my case I'm using a microcontroller to handle all the timing so it's not a big issue.  However, if you're just cloning the keyboard with no additional electronics, you might want to investigate a debounce circuit of some sort or you'll get a lot of duplicate keystrokes.

That's it!  Once again, thanks for reading!