Aproveitei o embalo e organizei os scancodes em uma tabela com 132 entradas correspondentes aos códigos das teclas entre 0 e 0x83.
O valor _NONE corresponde a um código que não tem ação. Para popular a tabela basta substituir a entrada _NONE pelo código correspondente à posição da tecla na matriz do teclado.
Tomando por exemplo a tecla "Q". Na matriz do TK90 ela corresponde ao bit 2 da linha 0 de varredura (conforme explicado no post anterior).
Assim, a linha da tecla "Q" fica:
0x02, // 0x14 Q
Para simplificar mais ainda, basta definir as constantes das teclas:
#define _Q 0x02 // Tecla Q
E na tabela usar o valor definido
_Q // 0x14 Q
const uint8_t PS2Keymap_Normal[] PROGMEM = {
_NONE, // 0x00
_NONE, // 0x01 F9
_NONE, // 0x02
_NONE, // 0x03 F5
_NONE, // 0x04 F3
_NONE, // 0x05 F1
_NONE, // 0x06 F2
_NONE, // 0x07 F12
_NONE, // 0x08
_NONE, // 0x09 F10
_NONE, // 0x0A F8
_NONE, // 0x0B F6
_NONE, // 0x0C F4
_NONE, // 0x0D TAB
_NONE, // 0x0E APOSTROPHE '
_NONE, // 0x0F
_NONE, // 0x10
_NONE, // 0x11 L ALT
_NONE, // 0x12 L SHFT
_NONE, // 0x13 L CTRL
_NONE, // 0x14 Q
_NONE, // 0x15 1
_NONE, // 0x16
_NONE, // 0x17
_NONE, // 0x18
_NONE, // 0x19
_NONE, // 0x1A Z
_NONE, // 0x1B S
_NONE, // 0x1C A
_NONE, // 0x1D W
_NONE, // 0x1E 2
_NONE, // 0x1F
_NONE, // 0x20
_NONE, // 0x21 C
_NONE, // 0x22 X
_NONE, // 0x23 D
_NONE, // 0x24 E
_NONE, // 0x25 4
_NONE, // 0x26 3
_NONE, // 0x27
_NONE, // 0x28
_NONE, // 0x29 SPACE
_NONE, // 0x2A V
_NONE, // 0x2B F
_NONE, // 0x2C T
_NONE, // 0x2D R
_NONE, // 0x2E 5
_NONE, // 0x2F
_NONE, // 0x30
_NONE, // 0x31 N
_NONE, // 0x32 B
_NONE, // 0x33 H
_NONE, // 0x34 G
_NONE, // 0x35 Y
_NONE, // 0x36 6
_NONE, // 0x37
_NONE, // 0x38
_NONE, // 0x39
_NONE, // 0x3A M
_NONE, // 0x3B J
_NONE, // 0x3C U
_NONE, // 0x3D 7
_NONE, // 0x3E 8
_NONE, // 0x3F
_NONE, // 0x40
_NONE, // 0x41 COMMA ,
_NONE, // 0x42 K
_NONE, // 0x43 I
_NONE, // 0x44 O
_NONE, // 0x45 0
_NONE, // 0x46 9
_NONE, // 0x47
_NONE, // 0x48
_NONE, // 0x49 DOT .
_NONE, // 0x4A SEMICOLON ;
_NONE, // 0x4B L
_NONE, // 0x4C CCCEDIL Ç
_NONE, // 0x4D P
_NONE, // 0x4E MINUS -
_NONE, // 0x4F
_NONE, // 0x50
_NONE, // 0x51 SLASH /
_NONE, // 0x52 TILDE ~
_NONE, // 0x53
_NONE, // 0x54 ACUTE `
_NONE, // 0x55 EQUAL =
_NONE, // 0x56
_NONE, // 0x57
_NONE, // 0x58 CAPS
_NONE, // 0x59 R SHFT
_NONE, // 0x5A ENTER
_NONE, // 0x5B OPENBRACKET [
_NONE, // 0x5C
_NONE, // 0x5D CLOSEBRACKET ]
_NONE, // 0x5E
_NONE, // 0x5F
_NONE, // 0x60
_NONE, // 0x61 BACKSLASH \
_NONE, // 0x62
_NONE, // 0x63
_NONE, // 0x64
_NONE, // 0x65
_NONE, // 0x66 BKSP
_NONE, // 0x67
_NONE, // 0x68
_NONE, // 0x69 KP1
_NONE, // 0x6A
_NONE, // 0x6B KP4
_NONE, // 0x6C KP7
_NONE, // 0x6D KPDOT .
_NONE, // 0x6E
_NONE, // 0x6F
_NONE, // 0x70 KP0
_NONE, // 0x71 KPCOMMA ,
_NONE, // 0x72 KP2
_NONE, // 0x73 KP5
_NONE, // 0x74 KP6
_NONE, // 0x75 KP8
_NONE, // 0x76 ESC
_NONE, // 0x77 NUM
_NONE, // 0x78 F11
_NONE, // 0x79 KPPLUS +
_NONE, // 0x7A KP3
_NONE, // 0x7B KPMINUS -
_NONE, // 0x7C KPTIMES *
_NONE, // 0x7D KP9
_NONE, // 0x7E SCROLL
_NONE, // 0x7F
_NONE, // 0x80
_NONE, // 0x81
_NONE, // 0x82
_NONE // 0x83 F7
};
Pode-se replicar esta tabela para as teclas ativadas com a tecla SHIFT, como por exemplo as teclas sobre os números e as teclas de acentuação, colhetes, etc
Também é possível utilizar uma tabela para as teclas de códigos estendidos (como as setas de cursor), mas como estas teclas não são muitas é mais fácil tratar cada uma caso a caso. O mesmo se aplica à tecla F7. Caso esta tecla seja tratada separadamente dá para deixar a tabela com menos de 128 entradas.
2 comentários:
Daniel, nao ta faltando o / do teclado numerico (seria KPSlash)?
Seria essa mesma, KP de keypad.
Postar um comentário