Updates to mapping table for Wyse KB3926
This commit is contained in:
@@ -46,30 +46,32 @@
|
||||
// Row D7 D6 D5 D4 D3 D2 D1 D0
|
||||
//----------------------------------------------------------------------------------
|
||||
// 0 F8 F7 F6 F5 F4 F3 F2 F1
|
||||
// 1 - + . , 9 8 F1O F9
|
||||
// 2 7 6 5 4 3 2 1 0
|
||||
// 1 KP - KP + KP . KP , KP 9 KP 8 F1O F9
|
||||
// 2 KP 7 KP 6 KP 5 KP 4 KP 3 KP 2 KP 1 KP 0
|
||||
// 3 BREAK RIGHT LEFT DOWN UP RETURN SPACE TAB
|
||||
// 4 G F E D C B A ?
|
||||
// 5 O N M L K J I H
|
||||
// 6 W V U T S R Q P
|
||||
// 7 <¿ .>¿ ¿¿ ¿ | '¿ Z ¿ Y X ¿
|
||||
// 8 7' 6& 5% 4$ 3# 2" 1! 0
|
||||
// 9 [( @ -= ;+ :* 9) 8(
|
||||
// 10 / * ESC BACKSPACE INST/DEL CLR/HOME COPY ]}
|
||||
// 11 CTRL ¿¿ SHIFT LOCK GRAPH
|
||||
// 12 ¿¿ ¿¿¿
|
||||
// 13 HELP ARGO
|
||||
// 4 G F E D C B A / ?
|
||||
// 5 O N M L K J I H
|
||||
// 6 W V U T S R Q P
|
||||
// 7 , < . > _ YEN | ^ '¿ Z ¿ Y X ¿
|
||||
// 8 7 ' 6 & 5 % 4 $ 3 # 2 " 1 ! 0
|
||||
// 9 [ { @ ` - = ; + : * 9 ) 8 (
|
||||
// 10 KP / KP * ESC BACKSPACE INST/DEL CLR/HOME COPY ] }
|
||||
// 11 CTRL KANA SHIFT LOCK GRAPH
|
||||
// 12 KJ2 KJ1
|
||||
// 13 HELP ARGO
|
||||
//
|
||||
// Col 0 1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
// --------------------------------------------------------------------------------------------------------------------------------------
|
||||
// D0 F1 F9 0 TAB ? H P 0 8( ]} GRAPH ¿¿¿ ARGO
|
||||
// D1 F2 F10 1 SPACE A I Q T 1! 9) COPY LOCK ¿¿ HELP
|
||||
// D2 F3 8 2 RETURN B J R Z ¿ 2" :* CLR/HOME SHIFT
|
||||
// D3 F4 9 3 UP C K S | '¿ 3# ;+ INST/DEL ¿¿
|
||||
// D4 F5 , 4 DOWN D L T ¿ 4$ -= BACKSPACE CTRL
|
||||
// D5 F6 . 5 LEFT E M U ¿¿ 5% @ ESC
|
||||
// D6 F7 + 6 RIGHT F N V .>¿ 6& [( *
|
||||
// D7 F8 - 7 BREAK G O W <¿ 7' /
|
||||
// D0 F1 F9 KP 0 TAB / ? H P X 0 8 ( ] } GRAPH KJ1 ARGO
|
||||
// D1 F2 F10 KP 1 SPACE A I Q Y 1 ! 9 ) COPY LOCK KJ2 HELP
|
||||
// D2 F3 KP 8 KP 2 RETURN B J R Z 2 " : * CLR/HOME SHIFT
|
||||
// D3 F4 KP 9 KP 3 UP C K S ^ '¿ 3 # ; + INST/DEL KANA
|
||||
// D4 F5 KP , KP 4 DOWN D L T YEN | 4 $ - = BACKSPACE CTRL
|
||||
// D5 F6 KP . KP 5 LEFT E M U _ 5 % @ ` ESC
|
||||
// D6 F7 KP + KP 6 RIGHT F N V . > 6 & [ { KP *
|
||||
// D7 F8 KP - KP 7 BREAK G O W , < 7 ' KP /
|
||||
//
|
||||
//
|
||||
|
||||
#define PSMZTBL_KEYPOS 0
|
||||
#define PSMZTBL_SHIFTPOS 1
|
||||
@@ -77,121 +79,190 @@
|
||||
#define PSMZTBL_CTRLPOS 3
|
||||
#define PSMZTBL_ALTPOS 4
|
||||
#define PSMZTBL_ALTGRPOS 5
|
||||
#define PSMZTBL_MXROW1 6
|
||||
#define PSMZTBL_MXKEY1 7
|
||||
#define PSMZTBL_MXROW2 8
|
||||
#define PSMZTBL_MXKEY2 9
|
||||
#define PSMZTBL_MXROW3 10
|
||||
#define PSMZTBL_MXKEY3 11
|
||||
#define PSMZTBL_MAXROWS 12
|
||||
#define PSMZTBL_GUIPOS 6
|
||||
#define PSMZTBL_MXROW1 7
|
||||
#define PSMZTBL_MXKEY1 8
|
||||
#define PSMZTBL_MXROW2 9
|
||||
#define PSMZTBL_MXKEY2 10
|
||||
#define PSMZTBL_MXROW3 11
|
||||
#define PSMZTBL_MXKEY3 12
|
||||
#define PSMZTBL_MAXROWS 13
|
||||
|
||||
// Lookup table to matrix row/column co-ordinates. If a PS2 key is matched, then the Matrix is updated
|
||||
// using ROW to point into the array, equivalent of strobe line, and the KEY defines the bits to be set.
|
||||
// A set bit = 0, reset bits = 1. The KEY value needs to be inverted and masked with the matrix
|
||||
// to affect change.
|
||||
const unsigned char PS2toMZ[][PSMZTBL_MAXROWS] =
|
||||
{
|
||||
// PS2 Code Shift Function Ctrl ALT ALT-Gr MXROW1 MXKEY1 MXROW2 MXKEY2 MXROW3 MXKEY3
|
||||
PS2_KEY_F1, 0, 0, 0, 0, 0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F2, 0, 0, 0, 0, 0, 0x00, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F3, 0, 0, 0, 0, 0, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F4, 0, 0, 0, 0, 0, 0x00, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F5, 0, 0, 0, 0, 0, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F6, 0, 0, 0, 0, 0, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F7, 0, 0, 0, 0, 0, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F8, 0, 0, 0, 0, 0, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F9, 0, 0, 0, 0, 0, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F10, 0, 0, 0, 0, 0, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F11, 0, 0, 0, 0, 0, 0x0D, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // HELP
|
||||
PS2_KEY_F12, 0, 0, 0, 0, 0, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // BREAK
|
||||
PS2_KEY_TAB, 0, 0, 0, 0, 0, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_PIPE, 0, 0, 0, 0, 0, 0x07, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_L_ALT, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_R_ALT, 0, 0, 0, 0, 0, 0x0B, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // GRAPH
|
||||
PS2_KEY_L_SHIFT, 0, 0, 0, 0, 0, 0x0B, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_L_CTRL, 0, 0, 0, 0, 0, 0x0B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_R_CTRL, 0, 0, 0, 0, 0, 0x0B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_0, 0, 0, 0, 0, 0, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_1, 0, 0, 0, 0, 0, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_2, 0, 0, 0, 0, 0, 0x02, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_3, 0, 0, 0, 0, 0, 0x02, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_4, 0, 0, 0, 0, 0, 0x02, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_5, 0, 0, 0, 0, 0, 0x02, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_6, 0, 0, 0, 0, 0, 0x02, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_7, 0, 0, 0, 0, 0, 0x02, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_8, 0, 0, 0, 0, 0, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_9, 0, 0, 0, 0, 0, 0x01, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_A, 0, 0, 0, 0, 0, 0x04, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_B, 0, 0, 0, 0, 0, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_C, 0, 0, 0, 0, 0, 0x04, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_D, 0, 0, 0, 0, 0, 0x04, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_E, 0, 0, 0, 0, 0, 0x04, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_F, 0, 0, 0, 0, 0, 0x04, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_G, 0, 0, 0, 0, 0, 0x04, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_H, 0, 0, 0, 0, 0, 0x05, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_I, 0, 0, 0, 0, 0, 0x05, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_J, 0, 0, 0, 0, 0, 0x05, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_K, 0, 0, 0, 0, 0, 0x05, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_L, 0, 0, 0, 0, 0, 0x05, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_M, 0, 0, 0, 0, 0, 0x05, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_N, 0, 0, 0, 0, 0, 0x05, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_O, 0, 0, 0, 0, 0, 0x05, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_P, 0, 0, 0, 0, 0, 0x06, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_Q, 0, 0, 0, 0, 0, 0x06, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_R, 0, 0, 0, 0, 0, 0x06, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_S, 0, 0, 0, 0, 0, 0x06, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_T, 0, 0, 0, 0, 0, 0x06, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_U, 0, 0, 0, 0, 0, 0x06, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_V, 0, 0, 0, 0, 0, 0x06, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_W, 0, 0, 0, 0, 0, 0x06, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_X, 0, 0, 0, 0, 0, 0x07, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_Y, 0, 0, 0, 0, 0, 0x07, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_Z, 0, 0, 0, 0, 0, 0x07, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_SPACE, 0, 0, 0, 0, 0, 0x03, 0x02, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_COMMA, 0, 0, 0, 0, 0, 0x01, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_SEMI, 0, 0, 0, 0, 0, 0x09, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_STOP, 0, 0, 0, 0, 0, 0x01, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_DIV, 0, 0, 0, 0, 0, 0x0A, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_MINUS, 0, 0, 0, 0, 0, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_APOS, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_OPEN_SQ, 0, 0, 0, 0, 0, 0x09, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_EQUAL, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_CAPS, 0, 0, 0, 0, 0, 0x08, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // LOCK
|
||||
PS2_KEY_R_SHIFT, 0, 0, 0, 0, 0, 0x0B, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_ENTER, 0, 0, 0, 0, 0, 0x03, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_CLOSE_SQ, 0, 0, 0, 0, 0, 0x0A, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_BACK, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_LESSTHAN, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_BS, 0, 0, 0, 0, 0, 0x0A, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_ESC, 0, 0, 0, 0, 0, 0x0A, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP1, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP2, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP3, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP4, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP5, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP6, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP7, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP8, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP9, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP_COMMA, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP_PLUS, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP_MINUS, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP_TIMES, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_KP_DIV, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_SCROLL, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_INSERT, 0, 0, 0, 0, 0, 0x0A, 0x08, 0x0B, 0x04, 0xFF, 0xFF, // SHIFT + INST/DEL
|
||||
PS2_KEY_HOME, 0, 0, 0, 0, 0, 0x0A, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // CLR/HOME
|
||||
PS2_KEY_PGUP, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_DELETE, 0, 0, 0, 0, 0, 0x0A, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // INST/DEL
|
||||
PS2_KEY_END, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_PGDN, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_UP_ARROW, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_L_ARROW, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_DN_ARROW, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_R_ARROW, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_NUM, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
// using ROW to point into the array with a column value, equivalent of strobe line and the KEY defines the bits to be set.
|
||||
// Upto 3 matrix bits can be set (3 key presses on the MZ-2500 keyboard) per PS/2 key.
|
||||
// A set bit = 1, reset bits = 0 but is inverted in the actual matrix (1 = inactive, 0 = active).
|
||||
// The table is scanned for a match from top to bottom. The first match is used so order is important. Japanese characters still
|
||||
// need to be added.
|
||||
//
|
||||
#if defined(CONFIG_KEYMAP_WYSE_KB3926) || defined(CONFIG_KEYMAP_STANDARD)
|
||||
//
|
||||
// This mapping is for the UK Wyse KB-3926 PS/2 keyboard
|
||||
//
|
||||
const unsigned char PS2toMZ[][PSMZTBL_MAXROWS] =
|
||||
{
|
||||
// PS2 Code Shift Function Ctrl ALT ALT-Gr GUI MXROW1 MXKEY1 MXROW2 MXKEY2 MXROW3 MXKEY3
|
||||
PS2_KEY_F1, 0, 0, 0, 0, 0, 0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // F1
|
||||
PS2_KEY_F2, 0, 0, 0, 0, 0, 0, 0x00, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // F2
|
||||
PS2_KEY_F3, 0, 0, 0, 0, 0, 0, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // F3
|
||||
PS2_KEY_F4, 0, 0, 0, 0, 0, 0, 0x00, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // F4
|
||||
PS2_KEY_F5, 0, 0, 0, 0, 0, 0, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // F5
|
||||
PS2_KEY_F6, 0, 0, 0, 0, 0, 0, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // F6
|
||||
PS2_KEY_F7, 0, 0, 0, 0, 0, 0, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // F7
|
||||
PS2_KEY_F8, 0, 0, 0, 0, 0, 0, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // F8
|
||||
PS2_KEY_F9, 0, 0, 0, 0, 0, 0, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // F9
|
||||
PS2_KEY_F10, 0, 0, 0, 0, 0, 0, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // F10
|
||||
PS2_KEY_F11, 0, 0, 0, 0, 0, 0, 0x0D, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // HELP
|
||||
PS2_KEY_F12, 0, 0, 0, 0, 0, 0, 0x0A, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // COPY
|
||||
PS2_KEY_TAB, 0, 0, 0, 0, 0, 0, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // TAB
|
||||
PS2_KEY_0, 1, 0, 0, 0, 0, 0, 0x08, 0x01, 0x0B, 0x04, 0xFF, 0xFF, // Close Right Bracket )
|
||||
PS2_KEY_0, 0, 0, 0, 0, 0, 0, 0x08, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // 0
|
||||
PS2_KEY_1, 1, 0, 0, 0, 0, 0, 0x08, 0x02, 0x0B, 0x04, 0xFF, 0xFF, // Exclamation
|
||||
PS2_KEY_1, 0, 0, 0, 0, 0, 0, 0x08, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // 1
|
||||
PS2_KEY_2, 1, 0, 0, 0, 0, 0, 0x08, 0x04, 0x0B, 0x04, 0xFF, 0xFF, // Double quote.
|
||||
PS2_KEY_2, 0, 0, 0, 0, 0, 0, 0x08, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // 2
|
||||
PS2_KEY_3, 1, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Pound Sign
|
||||
PS2_KEY_3, 0, 0, 0, 0, 0, 0, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // 3
|
||||
PS2_KEY_4, 1, 0, 0, 0, 0, 0, 0x08, 0x10, 0x0B, 0x04, 0xFF, 0xFF, // Dollar
|
||||
PS2_KEY_4, 0, 0, 0, 0, 0, 0, 0x08, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // 4
|
||||
PS2_KEY_5, 1, 0, 0, 0, 0, 0, 0x08, 0x20, 0x0B, 0x04, 0xFF, 0xFF, // Percent
|
||||
PS2_KEY_5, 0, 0, 0, 0, 0, 0, 0x08, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // 5
|
||||
PS2_KEY_6, 1, 0, 0, 0, 0, 0, 0x07, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // Kappa
|
||||
PS2_KEY_6, 0, 0, 0, 0, 0, 0, 0x08, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // 6
|
||||
PS2_KEY_7, 1, 0, 0, 0, 0, 0, 0x08, 0x40, 0x0B, 0x04, 0xFF, 0xFF, // Ampersand
|
||||
PS2_KEY_7, 0, 0, 0, 0, 0, 0, 0x08, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // 7
|
||||
PS2_KEY_8, 1, 0, 0, 0, 0, 0, 0x09, 0x04, 0x0B, 0x04, 0xFF, 0xFF, // Star
|
||||
PS2_KEY_8, 0, 0, 0, 0, 0, 0, 0x09, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // 8
|
||||
PS2_KEY_9, 1, 0, 0, 0, 0, 0, 0x09, 0x02, 0x0B, 0x04, 0xFF, 0xFF, // Open Left Bracket (
|
||||
PS2_KEY_9, 0, 0, 0, 0, 0, 0, 0x09, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // 9
|
||||
PS2_KEY_A, 1, 0, 0, 0, 0, 0, 0x04, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // a
|
||||
PS2_KEY_A, 0, 0, 0, 0, 0, 0, 0x04, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // A
|
||||
PS2_KEY_B, 1, 0, 0, 0, 0, 0, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // b
|
||||
PS2_KEY_B, 0, 0, 0, 0, 0, 0, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // B
|
||||
PS2_KEY_C, 1, 0, 0, 0, 0, 0, 0x04, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // c
|
||||
PS2_KEY_C, 0, 0, 0, 0, 0, 0, 0x04, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // C
|
||||
PS2_KEY_D, 1, 0, 0, 0, 0, 0, 0x04, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // d
|
||||
PS2_KEY_D, 0, 0, 0, 0, 0, 0, 0x04, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // D
|
||||
PS2_KEY_E, 1, 0, 0, 0, 0, 0, 0x04, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // e
|
||||
PS2_KEY_E, 0, 0, 0, 0, 0, 0, 0x04, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // E
|
||||
PS2_KEY_F, 1, 0, 0, 0, 0, 0, 0x04, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // f
|
||||
PS2_KEY_F, 0, 0, 0, 0, 0, 0, 0x04, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // F
|
||||
PS2_KEY_G, 1, 0, 0, 0, 0, 0, 0x04, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // g
|
||||
PS2_KEY_G, 0, 0, 0, 0, 0, 0, 0x04, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // G
|
||||
PS2_KEY_H, 1, 0, 0, 0, 0, 0, 0x05, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // h
|
||||
PS2_KEY_H, 0, 0, 0, 0, 0, 0, 0x05, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // H
|
||||
PS2_KEY_I, 1, 0, 0, 0, 0, 0, 0x05, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // i
|
||||
PS2_KEY_I, 0, 0, 0, 0, 0, 0, 0x05, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // I
|
||||
PS2_KEY_J, 1, 0, 0, 0, 0, 0, 0x05, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // j
|
||||
PS2_KEY_J, 0, 0, 0, 0, 0, 0, 0x05, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // J
|
||||
PS2_KEY_K, 1, 0, 0, 0, 0, 0, 0x05, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // k
|
||||
PS2_KEY_K, 0, 0, 0, 0, 0, 0, 0x05, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // K
|
||||
PS2_KEY_L, 1, 0, 0, 0, 0, 0, 0x05, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // l
|
||||
PS2_KEY_L, 0, 0, 0, 0, 0, 0, 0x05, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // L
|
||||
PS2_KEY_M, 1, 0, 0, 0, 0, 0, 0x05, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // m
|
||||
PS2_KEY_M, 0, 0, 0, 0, 0, 0, 0x05, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // M
|
||||
PS2_KEY_N, 1, 0, 0, 0, 0, 0, 0x05, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // n
|
||||
PS2_KEY_N, 0, 0, 0, 0, 0, 0, 0x05, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // N
|
||||
PS2_KEY_O, 1, 0, 0, 0, 0, 0, 0x05, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // o
|
||||
PS2_KEY_O, 0, 0, 0, 0, 0, 0, 0x05, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // O
|
||||
PS2_KEY_P, 1, 0, 0, 0, 0, 0, 0x06, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // p
|
||||
PS2_KEY_P, 0, 0, 0, 0, 0, 0, 0x06, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // P
|
||||
PS2_KEY_Q, 1, 0, 0, 0, 0, 0, 0x06, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // q
|
||||
PS2_KEY_Q, 0, 0, 0, 0, 0, 0, 0x06, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // Q
|
||||
PS2_KEY_R, 1, 0, 0, 0, 0, 0, 0x06, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // r
|
||||
PS2_KEY_R, 0, 0, 0, 0, 0, 0, 0x06, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // R
|
||||
PS2_KEY_S, 1, 0, 0, 0, 0, 0, 0x06, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // s
|
||||
PS2_KEY_S, 0, 0, 0, 0, 0, 0, 0x06, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // S
|
||||
PS2_KEY_T, 1, 0, 0, 0, 0, 0, 0x06, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // t
|
||||
PS2_KEY_T, 0, 0, 0, 0, 0, 0, 0x06, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // T
|
||||
PS2_KEY_U, 1, 0, 0, 0, 0, 0, 0x06, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // u
|
||||
PS2_KEY_U, 0, 0, 0, 0, 0, 0, 0x06, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // U
|
||||
PS2_KEY_V, 1, 0, 0, 0, 0, 0, 0x06, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // v
|
||||
PS2_KEY_V, 0, 0, 0, 0, 0, 0, 0x06, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // V
|
||||
PS2_KEY_W, 1, 0, 0, 0, 0, 0, 0x06, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // w
|
||||
PS2_KEY_W, 0, 0, 0, 0, 0, 0, 0x06, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // W
|
||||
PS2_KEY_X, 1, 0, 0, 0, 0, 0, 0x07, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // x
|
||||
PS2_KEY_X, 0, 0, 0, 0, 0, 0, 0x07, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // X
|
||||
PS2_KEY_Y, 1, 0, 0, 0, 0, 0, 0x07, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // y
|
||||
PS2_KEY_Y, 0, 0, 0, 0, 0, 0, 0x07, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // Y
|
||||
PS2_KEY_Z, 1, 0, 0, 0, 0, 0, 0x07, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // z
|
||||
PS2_KEY_Z, 0, 0, 0, 0, 0, 0, 0x07, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // Z
|
||||
// PS2 Code Shift Function Ctrl ALT ALT-Gr GUI MXROW1 MXKEY1 MXROW2 MXKEY2 MXROW3 MXKEY3
|
||||
PS2_KEY_SPACE, 0, 0, 0, 0, 0, 0, 0x03, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // Space
|
||||
PS2_KEY_COMMA, 1, 0, 0, 0, 0, 0, 0x07, 0x80, 0x0B, 0x04, 0xFF, 0xFF, // Less Than <
|
||||
PS2_KEY_COMMA, 0, 0, 0, 0, 0, 0, 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // Comma ,
|
||||
PS2_KEY_SEMI, 1, 0, 0, 0, 0, 0, 0x09, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // Colon :
|
||||
PS2_KEY_SEMI, 0, 0, 0, 0, 0, 0, 0x09, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // Semi-Colon ;
|
||||
PS2_KEY_DOT, 1, 0, 0, 0, 0, 0, 0x07, 0x40, 0x0B, 0x04, 0xFF, 0xFF, // Greater Than >
|
||||
PS2_KEY_DOT, 0, 0, 0, 0, 0, 0, 0x07, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // Full stop .
|
||||
PS2_KEY_DIV, 1, 0, 0, 0, 0, 0, 0x04, 0x01, 0x0B, 0x04, 0xFF, 0xFF, // Question ?
|
||||
PS2_KEY_DIV, 0, 0, 0, 0, 0, 0, 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // Divide /
|
||||
PS2_KEY_MINUS, 1, 0, 0, 0, 0, 0, 0x07, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // Underscore
|
||||
PS2_KEY_MINUS, 0, 0, 0, 0, 0, 0, 0x09, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_APOS, 1, 0, 0, 0, 0, 0, 0x09, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // At @
|
||||
PS2_KEY_APOS, 0, 0, 0, 0, 0, 0, 0x08, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // Single quote '
|
||||
PS2_KEY_OPEN_SQ, 1, 0, 0, 0, 0, 0, 0x09, 0x40, 0x0B, 0x04, 0xFF, 0xFF, // Open Left Brace {
|
||||
PS2_KEY_OPEN_SQ, 0, 0, 0, 0, 0, 0, 0x09, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // Open Left Square Bracket [
|
||||
PS2_KEY_EQUAL, 1, 0, 0, 0, 0, 0, 0x09, 0x08, 0x0B, 0x04, 0xFF, 0xFF, // Plus +
|
||||
PS2_KEY_EQUAL, 0, 0, 0, 0, 0, 0, 0x09, 0x10, 0x0B, 0x04, 0xFF, 0xFF, // Equal =
|
||||
PS2_KEY_CAPS, 0, 0, 0, 0, 0, 0, 0x0B, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // LOCK
|
||||
PS2_KEY_ENTER, 0, 0, 0, 0, 0, 0, 0x03, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // ENTER/RETURN
|
||||
PS2_KEY_CLOSE_SQ, 0, 0, 0, 0, 0, 0, 0x0A, 0x01, 0x0B, 0x04, 0xFF, 0xFF, // Close Right Brace }
|
||||
PS2_KEY_CLOSE_SQ, 0, 0, 0, 0, 0, 0, 0x0A, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // Close Right Square Bracket ]
|
||||
PS2_KEY_BACK, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, //
|
||||
PS2_KEY_BTICK, 0, 0, 0, 0, 0, 0, 0x09, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // Back tick `
|
||||
PS2_KEY_HASH, 0, 0, 0, 0, 0, 0, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // Hash
|
||||
PS2_KEY_BS, 0, 0, 0, 0, 0, 0, 0x0A, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // Backspace
|
||||
PS2_KEY_ESC, 0, 0, 0, 0, 0, 0, 0x0A, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // ESCape
|
||||
PS2_KEY_SCROLL, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Not assigned.
|
||||
PS2_KEY_INSERT, 0, 0, 0, 0, 0, 0, 0x0A, 0x08, 0x0B, 0x04, 0xFF, 0xFF, // INSERT
|
||||
PS2_KEY_HOME, 1, 0, 0, 0, 0, 0, 0x0A, 0x04, 0x0B, 0x04, 0xFF, 0xFF, // CLR
|
||||
PS2_KEY_HOME, 0, 0, 0, 0, 0, 0, 0x0A, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // HOME
|
||||
PS2_KEY_PGUP, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Not assigned.
|
||||
PS2_KEY_DELETE, 0, 0, 0, 0, 0, 0, 0x0A, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // DELETE
|
||||
PS2_KEY_END, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Not assigned.
|
||||
PS2_KEY_PGDN, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_UP_ARROW, 0, 0, 0, 0, 0, 0, 0x03, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // Up Arrow
|
||||
PS2_KEY_L_ARROW, 0, 0, 0, 0, 0, 0, 0x03, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // Left Arrow
|
||||
PS2_KEY_DN_ARROW, 0, 0, 0, 0, 0, 0, 0x03, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // Down Arrow
|
||||
PS2_KEY_R_ARROW, 0, 0, 0, 0, 0, 0, 0x03, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // Right Arrow
|
||||
PS2_KEY_NUM, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Not assigned.
|
||||
|
||||
// Keypad.
|
||||
PS2_KEY_KP0, 0, 0, 0, 0, 0, 0, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 0
|
||||
PS2_KEY_KP1, 0, 0, 0, 0, 0, 0, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 1
|
||||
PS2_KEY_KP2, 0, 0, 0, 0, 0, 0, 0x02, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 2
|
||||
PS2_KEY_KP3, 0, 0, 0, 0, 0, 0, 0x02, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 3
|
||||
PS2_KEY_KP4, 0, 0, 0, 0, 0, 0, 0x02, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 4
|
||||
PS2_KEY_KP5, 0, 0, 0, 0, 0, 0, 0x02, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 5
|
||||
PS2_KEY_KP6, 0, 0, 0, 0, 0, 0, 0x02, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 6
|
||||
PS2_KEY_KP7, 0, 0, 0, 0, 0, 0, 0x02, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 7
|
||||
PS2_KEY_KP8, 0, 0, 0, 0, 0, 0, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 8
|
||||
PS2_KEY_KP9, 0, 0, 0, 0, 0, 0, 0x01, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad 9
|
||||
PS2_KEY_KP_COMMA, 0, 0, 0, 0, 0, 0, 0x01, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad Comma ,
|
||||
PS2_KEY_KP_DOT, 0, 0, 0, 0, 0, 0, 0x01, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad Full stop .
|
||||
PS2_KEY_KP_PLUS, 0, 0, 0, 0, 0, 0, 0x01, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad Plus +
|
||||
PS2_KEY_KP_MINUS, 0, 0, 0, 0, 0, 0, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad Minus -
|
||||
PS2_KEY_KP_TIMES, 0, 0, 0, 0, 0, 0, 0x0A, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad Times *
|
||||
PS2_KEY_KP_DIV, 0, 0, 0, 0, 0, 0, 0x0A, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // Keypad Divide /
|
||||
|
||||
// PS2 Code Shift Function Ctrl ALT ALT-Gr GUI MXROW1 MXKEY1 MXROW2 MXKEY2 MXROW3 MXKEY3
|
||||
|
||||
// Special keys.
|
||||
PS2_KEY_PRTSCR, 0, 1, 0, 0, 0, 0, 0x0D, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // ARGO KEY
|
||||
PS2_KEY_BREAK, 0, 0, 0, 0, 0, 0, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, // BREAK KEY
|
||||
PS2_KEY_L_GUI, 0, 1, 0, 0, 0, 1, 0x0B, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // GRAPH KEY
|
||||
PS2_KEY_L_ALT, 0, 1, 0, 1, 0, 0, 0x0C, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, // KJ1 Sentence
|
||||
PS2_KEY_R_ALT, 0, 1, 0, 0, 1, 0, 0x0C, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, // KJ2 Transform
|
||||
PS2_KEY_R_GUI, 0, 1, 0, 0, 0, 1, 0x0B, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, // KANA KEY
|
||||
PS2_KEY_MENU, 0, 1, 0, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Not assigned.
|
||||
// Modifiers are last, only being selected if an earlier match isnt made.
|
||||
PS2_KEY_L_SHIFT, 0, 0, 0, 0, 0, 0, 0x0B, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_R_SHIFT, 0, 0, 0, 0, 0, 0, 0x0B, 0x04, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_L_CTRL, 0, 0, 0, 0, 0, 0, 0x0B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
PS2_KEY_R_CTRL, 0, 0, 0, 0, 0, 0, 0x0B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // KEYTABLE_H
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
Created September 2014
|
||||
Updated January 2016 - Paul Carpenter - add tested on Due and tidy ups for V1.5 Library Management
|
||||
January 2020 Fix typos, correct keyboard reset status improve library.properties
|
||||
and additional platform handling and some documentation
|
||||
and additional platform handling and some documentation
|
||||
March 2020 Add SAMD1 as recognised support as has been tested by user
|
||||
Improve different architecture handling
|
||||
November 2020 Add support for STM32 from user Hiabuto-de
|
||||
@@ -303,7 +303,7 @@ else
|
||||
send_next( ); // Check for more to send
|
||||
}
|
||||
}
|
||||
_bitcount = 0; // end of byte
|
||||
_bitcount = 0; // end of byte
|
||||
break;
|
||||
default: // in case of weird error and end of byte reception re-sync
|
||||
_bitcount = 0;
|
||||
@@ -455,7 +455,7 @@ switch( _bitcount )
|
||||
_tx_ready &= ~_COMMAND;
|
||||
if( !( _ps2mode & _WAIT_RESPONSE ) ) // if not wait response
|
||||
send_next( ); // check anything else to queue up
|
||||
_bitcount = 0; // end of byte
|
||||
_bitcount = 0; // end of byte
|
||||
break;
|
||||
default: // in case of weird error and end of byte reception re-sync
|
||||
_bitcount = 0;
|
||||
@@ -642,155 +642,194 @@ _ps2mode = 0;
|
||||
*/
|
||||
uint16_t translate( void )
|
||||
{
|
||||
uint8_t index, length, data;
|
||||
uint16_t retdata;
|
||||
uint8_t index, length, data;
|
||||
uint16_t retdata;
|
||||
|
||||
// get next character
|
||||
// Check first something to fetch
|
||||
index = _tail;
|
||||
// check for empty buffer
|
||||
if( index == _head )
|
||||
return 0;
|
||||
index++;
|
||||
if( index >= _RX_BUFFER_SIZE )
|
||||
index = 0;
|
||||
_tail = index;
|
||||
// Get the flags byte break modes etc in this order
|
||||
data = _rx_buffer[ index ] & 0xFF;
|
||||
index = ( _rx_buffer[ index ] & 0xFF00 ) >> 8;
|
||||
// get next character
|
||||
// Check first something to fetch
|
||||
index = _tail;
|
||||
|
||||
// Catch special case of PAUSE key
|
||||
if( index & _E1_MODE )
|
||||
return PS2_KEY_PAUSE + _FUNCTION;
|
||||
// check for empty buffer
|
||||
if( index == _head )
|
||||
return 0;
|
||||
index++;
|
||||
if( index >= _RX_BUFFER_SIZE )
|
||||
index = 0;
|
||||
_tail = index;
|
||||
|
||||
// Get the flags byte break modes etc in this order
|
||||
data = _rx_buffer[ index ] & 0xFF;
|
||||
index = ( _rx_buffer[ index ] & 0xFF00 ) >> 8;
|
||||
|
||||
// Ignore anything not actual keycode but command/response
|
||||
// Return untranslated as valid
|
||||
if( ( data >= PS2_KC_BAT && data != PS2_KC_LANG1 && data != PS2_KC_LANG2 )
|
||||
|| ( index & _WAIT_RESPONSE ) )
|
||||
return ( uint16_t )data;
|
||||
|
||||
// Gather the break of key status
|
||||
if( index & _BREAK_KEY )
|
||||
PS2_keystatus |= _BREAK;
|
||||
else
|
||||
PS2_keystatus &= ~_BREAK;
|
||||
|
||||
retdata = 0; // error code by default
|
||||
// Scan appropriate table
|
||||
if( index & _E0_MODE )
|
||||
{
|
||||
length = sizeof( extended_key ) / sizeof( extended_key[ 0 ] );
|
||||
for( index = 0; index < length; index++ )
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
if( data == pgm_read_byte( &extended_key[ index ][ 0 ] ) )
|
||||
{
|
||||
retdata = pgm_read_byte( &extended_key[ index ][ 1 ] );
|
||||
#else
|
||||
if( data == extended_key[ index ][ 0 ] )
|
||||
{
|
||||
retdata = extended_key[ index ][ 1 ];
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
length = sizeof( single_key ) / sizeof( single_key[ 0 ] );
|
||||
for( index = 0; index < length; index++ )
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
if( data == pgm_read_byte( &single_key[ index ][ 0 ] ) )
|
||||
{
|
||||
retdata = pgm_read_byte( &single_key[ index ][ 1 ] );
|
||||
#else
|
||||
if( data == single_key[ index ][ 0 ] )
|
||||
{
|
||||
retdata = single_key[ index ][ 1 ];
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
// trap not found key
|
||||
if( index == length )
|
||||
retdata = 0;
|
||||
/* valid found values only */
|
||||
if( retdata > 0 )
|
||||
{
|
||||
if( retdata <= PS2_KEY_CAPS )
|
||||
{ // process lock keys need second make to turn off
|
||||
if( PS2_keystatus & _BREAK )
|
||||
{
|
||||
PS2_lockstate[ retdata ] = 0; // Set received a break so next make toggles LOCK status
|
||||
retdata = PS2_KEY_IGNORE; // ignore key
|
||||
}
|
||||
else
|
||||
{
|
||||
if( PS2_lockstate[ retdata ] == 1 )
|
||||
retdata = PS2_KEY_IGNORE; // ignore key if make and not received break
|
||||
else
|
||||
{
|
||||
PS2_lockstate[ retdata ] = 1;
|
||||
switch( retdata )
|
||||
{
|
||||
case PS2_KEY_CAPS: index = PS2_LOCK_CAPS;
|
||||
// Set CAPS lock if not set before
|
||||
if( PS2_keystatus & _CAPS )
|
||||
PS2_keystatus &= ~_CAPS;
|
||||
else
|
||||
PS2_keystatus |= _CAPS;
|
||||
break;
|
||||
case PS2_KEY_SCROLL: index = PS2_LOCK_SCROLL;
|
||||
break;
|
||||
case PS2_KEY_NUM: index = PS2_LOCK_NUM;
|
||||
break;
|
||||
}
|
||||
// Now update PS2_led_lock status to match
|
||||
if( PS2_led_lock & index )
|
||||
{
|
||||
PS2_led_lock &= ~index;
|
||||
PS2_keystatus |= _BREAK; // send as break
|
||||
}
|
||||
else
|
||||
PS2_led_lock |= index;
|
||||
set_lock( );
|
||||
}
|
||||
}
|
||||
// Catch special case of PAUSE key
|
||||
if( index & _E1_MODE )
|
||||
{
|
||||
return PS2_KEY_PAUSE + _FUNCTION;
|
||||
}
|
||||
else
|
||||
if( retdata >= PS2_KEY_L_SHIFT && retdata <= PS2_KEY_R_GUI )
|
||||
{ // Update bits for _SHIFT, _CTRL, _ALT, _ALT GR, _GUI in status
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
index = pgm_read_byte( &control_flags[ retdata - PS2_KEY_L_SHIFT ] );
|
||||
#else
|
||||
index = control_flags[ retdata - PS2_KEY_L_SHIFT ];
|
||||
#endif
|
||||
if( PS2_keystatus & _BREAK )
|
||||
PS2_keystatus &= ~index;
|
||||
else
|
||||
// if already set ignore repeats if flag set
|
||||
if( ( PS2_keystatus & index ) && ( _mode & _NO_REPEATS ) )
|
||||
retdata = PS2_KEY_IGNORE; // ignore repeat _SHIFT, _CTRL, _ALT, _GUI
|
||||
else
|
||||
PS2_keystatus |= index;
|
||||
}
|
||||
else
|
||||
// Numeric keypad ONLY works in numlock state or when _SHIFT status
|
||||
if( retdata >= PS2_KEY_KP0 && retdata <= PS2_KEY_KP_DOT )
|
||||
if( !( PS2_led_lock & PS2_LOCK_NUM ) || ( PS2_keystatus & _SHIFT ) )
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
retdata = pgm_read_byte( &scroll_remap[ retdata - PS2_KEY_KP0 ] );
|
||||
#else
|
||||
retdata = scroll_remap[ retdata - PS2_KEY_KP0 ];
|
||||
#endif
|
||||
// Sort break code handling or ignore for all having processed the _SHIFT etc status
|
||||
if( ( PS2_keystatus & _BREAK ) && ( _mode & _NO_BREAKS ) )
|
||||
return ( uint16_t )PS2_KEY_IGNORE;
|
||||
// Assign Function keys _mode
|
||||
if( ( retdata <= PS2_KEY_SPACE || retdata >= PS2_KEY_F1 ) && retdata != PS2_KEY_EUROPE2 )
|
||||
PS2_keystatus |= _FUNCTION;
|
||||
else
|
||||
PS2_keystatus &= ~_FUNCTION;
|
||||
}
|
||||
return ( retdata | ( (uint16_t)PS2_keystatus << 8 ) );
|
||||
|
||||
// Ignore anything not actual keycode but command/response
|
||||
// Return untranslated as valid
|
||||
if( ( data >= PS2_KC_BAT && data != PS2_KC_LANG1 && data != PS2_KC_LANG2 ) || ( index & _WAIT_RESPONSE ) )
|
||||
{
|
||||
return ( uint16_t )data;
|
||||
}
|
||||
|
||||
// Gather the break of key status
|
||||
if( index & _BREAK_KEY )
|
||||
{
|
||||
PS2_keystatus |= _BREAK;
|
||||
} else
|
||||
{
|
||||
PS2_keystatus &= ~_BREAK;
|
||||
}
|
||||
|
||||
retdata = 0; // error code by default
|
||||
|
||||
// Scan appropriate table
|
||||
if( index & _E0_MODE )
|
||||
{
|
||||
length = sizeof( extended_key ) / sizeof( extended_key[ 0 ] );
|
||||
for( index = 0; index < length; index++ )
|
||||
{
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
if( data == pgm_read_byte( &extended_key[ index ][ 0 ] ) )
|
||||
{
|
||||
retdata = pgm_read_byte( &extended_key[ index ][ 1 ] );
|
||||
#else
|
||||
if( data == extended_key[ index ][ 0 ] )
|
||||
{
|
||||
retdata = extended_key[ index ][ 1 ];
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
length = sizeof( single_key ) / sizeof( single_key[ 0 ] );
|
||||
for( index = 0; index < length; index++ )
|
||||
{
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
if( data == pgm_read_byte( &single_key[ index ][ 0 ] ) )
|
||||
{
|
||||
retdata = pgm_read_byte( &single_key[ index ][ 1 ] );
|
||||
#else
|
||||
if( data == single_key[ index ][ 0 ] )
|
||||
{
|
||||
retdata = single_key[ index ][ 1 ];
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// trap not found key
|
||||
if( index == length )
|
||||
{
|
||||
retdata = 0;
|
||||
}
|
||||
|
||||
/* valid found values only */
|
||||
if( retdata > 0 )
|
||||
{
|
||||
if( retdata <= PS2_KEY_CAPS )
|
||||
{ // process lock keys need second make to turn off
|
||||
if( PS2_keystatus & _BREAK )
|
||||
{
|
||||
PS2_lockstate[ retdata ] = 0; // Set received a break so next make toggles LOCK status
|
||||
retdata = PS2_KEY_IGNORE; // ignore key
|
||||
} else {
|
||||
|
||||
if( PS2_lockstate[ retdata ] == 1 )
|
||||
{
|
||||
retdata = PS2_KEY_IGNORE; // ignore key if make and not received break
|
||||
} else
|
||||
{
|
||||
PS2_lockstate[ retdata ] = 1;
|
||||
switch( retdata )
|
||||
{
|
||||
case PS2_KEY_CAPS: index = PS2_LOCK_CAPS;
|
||||
// Set CAPS lock if not set before
|
||||
if( PS2_keystatus & _CAPS )
|
||||
{
|
||||
PS2_keystatus &= ~_CAPS;
|
||||
} else
|
||||
{
|
||||
PS2_keystatus |= _CAPS;
|
||||
}
|
||||
break;
|
||||
case PS2_KEY_SCROLL: index = PS2_LOCK_SCROLL;
|
||||
break;
|
||||
case PS2_KEY_NUM: index = PS2_LOCK_NUM;
|
||||
break;
|
||||
}
|
||||
// Now update PS2_led_lock status to match
|
||||
if( PS2_led_lock & index )
|
||||
{
|
||||
PS2_led_lock &= ~index;
|
||||
PS2_keystatus |= _BREAK; // send as break
|
||||
} else
|
||||
{
|
||||
PS2_led_lock |= index;
|
||||
}
|
||||
set_lock( );
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
|
||||
if( retdata >= PS2_KEY_L_SHIFT && retdata <= PS2_KEY_R_GUI )
|
||||
{ // Update bits for _SHIFT, _CTRL, _ALT, _ALT GR, _GUI in status
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
index = pgm_read_byte( &control_flags[ retdata - PS2_KEY_L_SHIFT ] );
|
||||
#else
|
||||
index = control_flags[ retdata - PS2_KEY_L_SHIFT ];
|
||||
#endif
|
||||
if( PS2_keystatus & _BREAK )
|
||||
{
|
||||
PS2_keystatus &= ~index;
|
||||
}
|
||||
|
||||
// if already set ignore repeats if flag set
|
||||
else if( ( PS2_keystatus & index ) && ( _mode & _NO_REPEATS ) )
|
||||
{
|
||||
retdata = PS2_KEY_IGNORE; // ignore repeat _SHIFT, _CTRL, _ALT, _GUI
|
||||
} else
|
||||
{
|
||||
PS2_keystatus |= index;
|
||||
}
|
||||
} else
|
||||
{
|
||||
// Numeric keypad ONLY works in numlock state or when _SHIFT status
|
||||
if( retdata >= PS2_KEY_KP0 && retdata <= PS2_KEY_KP_DOT )
|
||||
{
|
||||
if( !( PS2_led_lock & PS2_LOCK_NUM ) || ( PS2_keystatus & _SHIFT ) )
|
||||
{
|
||||
#if defined( PS2_REQUIRES_PROGMEM )
|
||||
retdata = pgm_read_byte( &scroll_remap[ retdata - PS2_KEY_KP0 ] );
|
||||
#else
|
||||
retdata = scroll_remap[ retdata - PS2_KEY_KP0 ];
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort break code handling or ignore for all having processed the _SHIFT etc status
|
||||
if( ( PS2_keystatus & _BREAK ) && ( _mode & _NO_BREAKS ) )
|
||||
{
|
||||
return ( uint16_t )PS2_KEY_IGNORE;
|
||||
}
|
||||
|
||||
// Assign Function keys _mode
|
||||
if( ( retdata <= PS2_KEY_SPACE || retdata >= PS2_KEY_F1 ) && retdata != PS2_KEY_EUROPE2 )
|
||||
{
|
||||
PS2_keystatus |= _FUNCTION;
|
||||
} else
|
||||
{
|
||||
PS2_keystatus &= ~_FUNCTION;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ( retdata | ( (uint16_t)PS2_keystatus << 8 ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -803,12 +842,12 @@ void set_lock( )
|
||||
// Workaround: Send one byte, wait for one response with a delay loop, send next byte.
|
||||
send_byte( PS2_KC_LOCK ); // send command
|
||||
if( ( send_byte( PS2_KEY_IGNORE ) ) ) // wait ACK
|
||||
send_next( ); // if idle start transmission
|
||||
send_next( ); // if idle start transmission
|
||||
// A delay of less than 10mS will cause lockup or abort!!!
|
||||
delayMicroseconds( 10000 );
|
||||
send_byte( PS2_led_lock ); // send data from internal variable
|
||||
if( ( send_byte( PS2_KEY_IGNORE ) ) ) // wait ACK
|
||||
send_next( ); // if idle start transmission
|
||||
send_next( ); // if idle start transmission
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -236,26 +236,26 @@
|
||||
#define PS2_KEY_INSERT 0x19
|
||||
#define PS2_KEY_DELETE 0x1A
|
||||
#define PS2_KEY_ESC 0x1B
|
||||
#define PS2_KEY_BS 0x08
|
||||
#define PS2_KEY_TAB 0x09
|
||||
#define PS2_KEY_ENTER 0x0D
|
||||
#define PS2_KEY_SPACE 0x20
|
||||
#define PS2_KEY_KP0 0xA0
|
||||
#define PS2_KEY_KP1 0xA1
|
||||
#define PS2_KEY_KP2 0xA2
|
||||
#define PS2_KEY_KP3 0xA3
|
||||
#define PS2_KEY_KP4 0xA4
|
||||
#define PS2_KEY_KP5 0xA5
|
||||
#define PS2_KEY_KP6 0xA6
|
||||
#define PS2_KEY_KP7 0xA7
|
||||
#define PS2_KEY_KP8 0xA8
|
||||
#define PS2_KEY_KP9 0xA9
|
||||
#define PS2_KEY_KP_DOT 0xAA
|
||||
#define PS2_KEY_KP_ENTER 0xAB
|
||||
#define PS2_KEY_KP_PLUS 0xAC
|
||||
#define PS2_KEY_KP_MINUS 0xAD
|
||||
#define PS2_KEY_KP_TIMES 0xAE
|
||||
#define PS2_KEY_KP_DIV 0xAF
|
||||
#define PS2_KEY_BS 0x1C
|
||||
#define PS2_KEY_TAB 0x1D
|
||||
#define PS2_KEY_ENTER 0x1E
|
||||
#define PS2_KEY_SPACE 0x1F
|
||||
#define PS2_KEY_KP0 0x20
|
||||
#define PS2_KEY_KP1 0x21
|
||||
#define PS2_KEY_KP2 0x22
|
||||
#define PS2_KEY_KP3 0x23
|
||||
#define PS2_KEY_KP4 0x24
|
||||
#define PS2_KEY_KP5 0x25
|
||||
#define PS2_KEY_KP6 0x26
|
||||
#define PS2_KEY_KP7 0x27
|
||||
#define PS2_KEY_KP8 0x28
|
||||
#define PS2_KEY_KP9 0x29
|
||||
#define PS2_KEY_KP_DOT 0x2A
|
||||
#define PS2_KEY_KP_ENTER 0x2B
|
||||
#define PS2_KEY_KP_PLUS 0x2C
|
||||
#define PS2_KEY_KP_MINUS 0x2D
|
||||
#define PS2_KEY_KP_TIMES 0x2E
|
||||
#define PS2_KEY_KP_DIV 0x2F
|
||||
#define PS2_KEY_0 0X30
|
||||
#define PS2_KEY_1 0X31
|
||||
#define PS2_KEY_2 0X32
|
||||
@@ -266,12 +266,15 @@
|
||||
#define PS2_KEY_7 0X37
|
||||
#define PS2_KEY_8 0X38
|
||||
#define PS2_KEY_9 0X39
|
||||
#define PS2_KEY_APOS 0X27
|
||||
#define PS2_KEY_COMMA 0X2C
|
||||
#define PS2_KEY_MINUS 0X2D
|
||||
#define PS2_KEY_DOT 0X2E
|
||||
#define PS2_KEY_DIV 0X2F
|
||||
#define PS2_KEY_AT 0X40
|
||||
#define PS2_KEY_APOS 0X3A
|
||||
#define PS2_KEY_COMMA 0X3B
|
||||
#define PS2_KEY_MINUS 0X3C
|
||||
#define PS2_KEY_DOT 0X3D
|
||||
#define PS2_KEY_DIV 0X3E
|
||||
/* Some Numeric keyboards have an '=' on right keypad */
|
||||
#define PS2_KEY_KP_EQUAL 0x3F
|
||||
/* Single quote or back quote */
|
||||
#define PS2_KEY_SINGLE 0X40
|
||||
#define PS2_KEY_A 0X41
|
||||
#define PS2_KEY_B 0X42
|
||||
#define PS2_KEY_C 0X43
|
||||
@@ -298,63 +301,71 @@
|
||||
#define PS2_KEY_X 0X58
|
||||
#define PS2_KEY_Y 0X59
|
||||
#define PS2_KEY_Z 0X5A
|
||||
#define PS2_KEY_SEMI 0X3B
|
||||
#define PS2_KEY_SEMI 0X5B
|
||||
#define PS2_KEY_BACK 0X5C
|
||||
#define PS2_KEY_OPEN_SQ 0X5B
|
||||
#define PS2_KEY_CLOSE_SQ 0X5D
|
||||
#define PS2_KEY_EQUAL 0X3D
|
||||
#define PS2_KEY_HASH 0x23
|
||||
#define PS2_KEY_PIPE 0x7C
|
||||
#define PS2_KEY_LESSTHAN 0x3C
|
||||
#define PS2_KEY_BTICK 0x60
|
||||
#define PS2_KEY_OPEN_SQ 0X5D
|
||||
#define PS2_KEY_CLOSE_SQ 0X5E
|
||||
#define PS2_KEY_EQUAL 0X5F
|
||||
/* Some Numeric keypads have a comma key */
|
||||
#define PS2_KEY_KP_COMMA 0xB0
|
||||
#define PS2_KEY_F1 0XB1
|
||||
#define PS2_KEY_F2 0XB2
|
||||
#define PS2_KEY_F3 0XB3
|
||||
#define PS2_KEY_F4 0XB4
|
||||
#define PS2_KEY_F5 0XB5
|
||||
#define PS2_KEY_F6 0XB6
|
||||
#define PS2_KEY_F7 0XB7
|
||||
#define PS2_KEY_F8 0XB8
|
||||
#define PS2_KEY_F9 0XB9
|
||||
#define PS2_KEY_F10 0XBA
|
||||
#define PS2_KEY_F11 0XBB
|
||||
#define PS2_KEY_F12 0XBC
|
||||
#define PS2_KEY_NEXT_TR 0XBD
|
||||
#define PS2_KEY_PREV_TR 0XBE
|
||||
#define PS2_KEY_STOP 0XBF
|
||||
#define PS2_KEY_PLAY 0XC0
|
||||
#define PS2_KEY_MUTE 0XC1
|
||||
#define PS2_KEY_VOL_UP 0XC2
|
||||
#define PS2_KEY_VOL_DN 0XC3
|
||||
#define PS2_KEY_MEDIA 0XC4
|
||||
#define PS2_KEY_EMAIL 0XC5
|
||||
#define PS2_KEY_CALC 0XC6
|
||||
#define PS2_KEY_COMPUTER 0XC7
|
||||
#define PS2_KEY_WEB_SEARCH 0XC8
|
||||
#define PS2_KEY_WEB_HOME 0XC9
|
||||
#define PS2_KEY_WEB_BACK 0XCA
|
||||
#define PS2_KEY_WEB_FORWARD 0XCB
|
||||
#define PS2_KEY_WEB_STOP 0XCC
|
||||
#define PS2_KEY_WEB_REFRESH 0XCD
|
||||
#define PS2_KEY_WEB_FAVOR 0XCE
|
||||
#define PS2_KEY_EUROPE2 0XCF
|
||||
#define PS2_KEY_POWER 0XD0
|
||||
#define PS2_KEY_SLEEP 0XD1
|
||||
#define PS2_KEY_WAKE 0XD2
|
||||
#define PS2_KEY_INTL1 0XD3
|
||||
#define PS2_KEY_INTL2 0XD4
|
||||
#define PS2_KEY_INTL3 0XD5
|
||||
#define PS2_KEY_INTL4 0XD6
|
||||
#define PS2_KEY_INTL5 0XD7
|
||||
#define PS2_KEY_LANG1 0XD8
|
||||
#define PS2_KEY_LANG2 0XD9
|
||||
#define PS2_KEY_LANG3 0XDA
|
||||
#define PS2_KEY_LANG4 0XDB
|
||||
#define PS2_KEY_LANG5 0xDC
|
||||
/* Some Numeric keyboards have an '=' on right keypad */
|
||||
#define PS2_KEY_KP_EQUAL 0xDD
|
||||
#define PS2_KEY_KP_COMMA 0x60
|
||||
#define PS2_KEY_F1 0X61
|
||||
#define PS2_KEY_F2 0X62
|
||||
#define PS2_KEY_F3 0X63
|
||||
#define PS2_KEY_F4 0X64
|
||||
#define PS2_KEY_F5 0X65
|
||||
#define PS2_KEY_F6 0X66
|
||||
#define PS2_KEY_F7 0X67
|
||||
#define PS2_KEY_F8 0X68
|
||||
#define PS2_KEY_F9 0X69
|
||||
#define PS2_KEY_F10 0X6A
|
||||
#define PS2_KEY_F11 0X6B
|
||||
#define PS2_KEY_F12 0X6C
|
||||
#define PS2_KEY_F13 0X6D
|
||||
#define PS2_KEY_F14 0X6E
|
||||
#define PS2_KEY_F15 0X6F
|
||||
#define PS2_KEY_F16 0X70
|
||||
#define PS2_KEY_F17 0X71
|
||||
#define PS2_KEY_F18 0X72
|
||||
#define PS2_KEY_F19 0X73
|
||||
#define PS2_KEY_F20 0X74
|
||||
#define PS2_KEY_F21 0X75
|
||||
#define PS2_KEY_F22 0X76
|
||||
#define PS2_KEY_F23 0X77
|
||||
#define PS2_KEY_F24 0X78
|
||||
#define PS2_KEY_NEXT_TR 0X79
|
||||
#define PS2_KEY_PREV_TR 0X7A
|
||||
#define PS2_KEY_STOP 0X7B
|
||||
#define PS2_KEY_PLAY 0X7C
|
||||
#define PS2_KEY_MUTE 0X7D
|
||||
#define PS2_KEY_VOL_UP 0X7E
|
||||
#define PS2_KEY_VOL_DN 0X7F
|
||||
#define PS2_KEY_MEDIA 0X80
|
||||
#define PS2_KEY_EMAIL 0X81
|
||||
#define PS2_KEY_CALC 0X82
|
||||
#define PS2_KEY_COMPUTER 0X83
|
||||
#define PS2_KEY_WEB_SEARCH 0X84
|
||||
#define PS2_KEY_WEB_HOME 0X85
|
||||
#define PS2_KEY_WEB_BACK 0X86
|
||||
#define PS2_KEY_WEB_FORWARD 0X87
|
||||
#define PS2_KEY_WEB_STOP 0X88
|
||||
#define PS2_KEY_WEB_REFRESH 0X89
|
||||
#define PS2_KEY_WEB_FAVOR 0X8A
|
||||
#define PS2_KEY_EUROPE2 0X8B
|
||||
#define PS2_KEY_POWER 0X8C
|
||||
#define PS2_KEY_SLEEP 0X8D
|
||||
#define PS2_KEY_WAKE 0X90
|
||||
#define PS2_KEY_INTL1 0X91
|
||||
#define PS2_KEY_INTL2 0X92
|
||||
#define PS2_KEY_INTL3 0X93
|
||||
#define PS2_KEY_INTL4 0X94
|
||||
#define PS2_KEY_INTL5 0X95
|
||||
#define PS2_KEY_LANG1 0X96
|
||||
#define PS2_KEY_LANG2 0X97
|
||||
#define PS2_KEY_LANG3 0X98
|
||||
#define PS2_KEY_LANG4 0X99
|
||||
#define PS2_KEY_LANG5 0xA0
|
||||
#define PS2_KEY_BTICK 0X9A
|
||||
#define PS2_KEY_HASH 0X9B
|
||||
|
||||
/*
|
||||
Purpose: Provides advanced access to PS2 keyboards
|
||||
@@ -374,7 +385,8 @@ class PS2KeyAdvanced {
|
||||
The best place to call this method is in the setup routine. */
|
||||
void begin( uint8_t, uint8_t );
|
||||
|
||||
uint8_t keyAvailable();
|
||||
// Additional key available check which doesnt affect the queue.
|
||||
uint8_t keyAvailable(void);
|
||||
|
||||
/* Returns number of codes available or 0 for none */
|
||||
uint8_t available( );
|
||||
@@ -391,7 +403,7 @@ class PS2KeyAdvanced {
|
||||
/* Sets the current status of Locks and LEDs
|
||||
Use macro defines added together from
|
||||
PS2_LOCK_NUM PS2_LOCK_CAPS PS2_LOCK_SCROLL */
|
||||
void setLock( uint8_t );
|
||||
void setLock( byte );
|
||||
|
||||
/* Set library to not send break key codes
|
||||
1 = no break codes
|
||||
|
||||
@@ -251,11 +251,12 @@ IRAM_ATTR unsigned char updateMatrix(uint16_t data)
|
||||
uint8_t idx;
|
||||
uint8_t idx2;
|
||||
uint8_t changed = 0;
|
||||
uint8_t matchExact = 0;
|
||||
|
||||
// Loop through the entire conversion table to find a match on this key, if found appy the conversion to the virtual
|
||||
// switch matrix.
|
||||
//
|
||||
for(idx=0; idx < NUMELEM(PS2toMZ); idx++)
|
||||
for(idx=0, changed=0, matchExact=0; idx < NUMELEM(PS2toMZ) && (changed == 0 || (changed == 1 && matchExact == 0)); idx++)
|
||||
{
|
||||
// Match key code?
|
||||
if(PS2toMZ[idx][PSMZTBL_KEYPOS] == (uint8_t)(data&0xFF))
|
||||
@@ -263,11 +264,21 @@ IRAM_ATTR unsigned char updateMatrix(uint16_t data)
|
||||
// Match Raw, Shift, Function, Control, ALT or ALT-Gr?
|
||||
if( (PS2toMZ[idx][PSMZTBL_SHIFTPOS] == 0 && PS2toMZ[idx][PSMZTBL_FUNCPOS] == 0 && PS2toMZ[idx][PSMZTBL_CTRLPOS] == 0 && PS2toMZ[idx][PSMZTBL_ALTPOS] == 0 && PS2toMZ[idx][PSMZTBL_ALTGRPOS] == 0) ||
|
||||
((data & PS2_SHIFT) && PS2toMZ[idx][PSMZTBL_SHIFTPOS] == 1) ||
|
||||
((data & PS2_FUNCTION) && PS2toMZ[idx][PSMZTBL_FUNCPOS] == 1) ||
|
||||
((data & PS2_CTRL) && PS2toMZ[idx][PSMZTBL_CTRLPOS] == 1) ||
|
||||
((data & PS2_ALT) && PS2toMZ[idx][PSMZTBL_ALTPOS] == 1) ||
|
||||
((data & PS2_ALT_GR) && PS2toMZ[idx][PSMZTBL_ALTGRPOS] == 1) )
|
||||
((data & PS2_ALT_GR) && PS2toMZ[idx][PSMZTBL_ALTGRPOS] == 1) ||
|
||||
((data & PS2_GUI) && PS2toMZ[idx][PSMZTBL_SHIFTPOS] == 1) ||
|
||||
((data & PS2_FUNCTION) && PS2toMZ[idx][PSMZTBL_FUNCPOS] == 1) )
|
||||
{
|
||||
|
||||
// Exact entry match, data + control key? On an exact match we only process the first key. On a data only match we fall through to include the data and control key matches to allow for un-coded keys, ie. Japanese characters.
|
||||
matchExact = ((data & PS2_SHIFT) && PS2toMZ[idx][PSMZTBL_SHIFTPOS] == 1) ||
|
||||
((data & PS2_CTRL) && PS2toMZ[idx][PSMZTBL_CTRLPOS] == 1) ||
|
||||
((data & PS2_ALT_GR) && PS2toMZ[idx][PSMZTBL_ALTGRPOS] == 1) ||
|
||||
((data & PS2_ALT) && PS2toMZ[idx][PSMZTBL_ALTPOS] == 1) ||
|
||||
((data & PS2_GUI) && PS2toMZ[idx][PSMZTBL_ALTPOS] == 1) ||
|
||||
((data & PS2_FUNCTION) && PS2toMZ[idx][PSMZTBL_FUNCPOS] == 1) ? 1 : 0;
|
||||
|
||||
// RELEASE (PS2_BREAK == 1) or PRESS?
|
||||
if((data & PS2_BREAK))
|
||||
{
|
||||
@@ -359,17 +370,8 @@ IRAM_ATTR void ps2Interface( void * pvParameters )
|
||||
uint16_t scanCode = 0x0000;
|
||||
#if defined(CONFIG_DEBUG_OLED) || !defined(CONFIG_OLED_DISABLED)
|
||||
uint8_t dataChange = 0;
|
||||
static int clrScreen = 1;
|
||||
static int scanPrtCol = 0;
|
||||
static uint32_t clrTimer = 0;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_DEBUG_OLED) || !defined(CONFIG_OLED_DISABLED)
|
||||
if((clrTimer > 0 && --clrTimer == 0) || ((scanCode&0xFF) == PS2_KEY_C && scanCode & PS2_BREAK ))
|
||||
{
|
||||
// Clear old scan code data. Add OLED code if needed.
|
||||
scanPrtCol = 0;
|
||||
}
|
||||
static uint32_t rfshTimer = 0;
|
||||
#endif
|
||||
|
||||
while(1)
|
||||
@@ -379,17 +381,9 @@ IRAM_ATTR void ps2Interface( void * pvParameters )
|
||||
{
|
||||
printf("%04x\n", scanCode);
|
||||
#if defined(CONFIG_DEBUG_OLED) || !defined(CONFIG_OLED_DISABLED)
|
||||
// Clear screen as requested.
|
||||
if(clrScreen == 1)
|
||||
{
|
||||
// ssd1306_clear_screen(&SSD1306, false);
|
||||
clrScreen = 0;
|
||||
}
|
||||
|
||||
// Output the scan code for verification.
|
||||
dbgprintf("%04x,", scanCode);
|
||||
if(scanPrtCol++ >= 3) scanPrtCol = 0;
|
||||
clrTimer = 2000000;
|
||||
#endif
|
||||
|
||||
// Update the virtual matrix with the new key value.
|
||||
@@ -411,27 +405,34 @@ IRAM_ATTR void ps2Interface( void * pvParameters )
|
||||
(((mzControl.keyMatrix[idx] >> 1) & 0x01) ^ 0x01) << CONFIG_MZ_KDO1 |
|
||||
(((mzControl.keyMatrix[idx] ) & 0x01) ^ 0x01) << CONFIG_MZ_KDO0 ;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DEBUG_OLED) || !defined(CONFIG_OLED_DISABLED)
|
||||
// Output the MZ virtual keyboard matrix for verification.
|
||||
uint8_t oledBuf[8][16];
|
||||
for(int idx=0; idx < 15; idx++)
|
||||
{
|
||||
for(int idx2=0; idx2 < 8; idx2++)
|
||||
{
|
||||
oledBuf[idx2][idx] = ((mzControl.keyMatrix[idx] >> idx2)&0x01) == 1 ? '1' : '0';
|
||||
}
|
||||
}
|
||||
|
||||
// Print out the matrix, transposed - see MZKeyTable.h for the map, second table.
|
||||
for(int idx=0; idx < 8; idx++)
|
||||
{
|
||||
ssd1306_display_text(&SSD1306, idx, (char *)oledBuf[idx], 15, false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DEBUG_OLED) || !defined(CONFIG_OLED_DISABLED)
|
||||
if(dataChange || (rfshTimer > 0 && --rfshTimer == 0))
|
||||
{
|
||||
// Output the MZ virtual keyboard matrix for verification.
|
||||
uint8_t oledBuf[8][16];
|
||||
for(int idx=0; idx < 15; idx++)
|
||||
{
|
||||
for(int idx2=0; idx2 < 8; idx2++)
|
||||
{
|
||||
oledBuf[idx2][idx] = ((mzControl.keyMatrix[idx] >> idx2)&0x01) == 1 ? '1' : '0';
|
||||
}
|
||||
}
|
||||
|
||||
// Print out the matrix, transposed - see MZKeyTable.h for the map, second table.
|
||||
for(int idx=0; idx < 8; idx++)
|
||||
{
|
||||
ssd1306_display_text(&SSD1306, idx, (char *)oledBuf[idx], 15, false);
|
||||
}
|
||||
|
||||
// Clear timer for next refresh.
|
||||
rfshTimer = 2000000;
|
||||
dataChange = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Let other tasks run.
|
||||
vTaskDelay(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user