You are on page 1of 19

Rockwell Automation Keypad Driver

VersaView 1500W
VersaView 1200W
Table of Contents

Introduction .................................................................................................................................................... 3
Products Supported......................................................................................................................................... 3
Theory of Operation ....................................................................................................................................... 3
Driver Installation and Removal..................................................................................................................... 3
Manual Configuration of Driver..................................................................................................................... 4
Registry Layout .............................................................................................................................................. 4
Attrib Values .............................................................................................................................................. 6
Normal.................................................................................................................................................... 6
Typematic ............................................................................................................................................... 6
Macro/String........................................................................................................................................... 7
Program .................................................................................................................................................. 7
Disabled.................................................................................................................................................. 7
Disable Typematic.................................................................................................................................. 8
Not Typematic ........................................................................................................................................ 8
Macro/String Typematic......................................................................................................................... 8
Predefined Key Definitions ............................................................................................................................ 8
VK Code and Scancode Mappings............................................................................................................... 10
Predefined Keypad Layouts ......................................................................................................................... 14
Driver Messages ........................................................................................................................................... 15
VersaView 1500W Bezel Graphic and Scancode Values............................................................................. 16
VersaView 1200W Bezel Graphic and Scancode Values............................................................................. 18
Filtering USB Keyboards and Keypads........................................................................................................ 19
Safe Mode .................................................................................................................................................... 19
Driver Signing .............................................................................................................................................. 19
Introduction
Rockwell automation pre-installs a piece of software called the Rockwell Automation Keypad Driver
(driver). This driver enhances the capabilities of the keypad on the front bezel of certain Rockwell
Automation VersaView computers. If the driver does not exist on the unit, it may be installed by the end
user.

Although the driver is the piece of software that actually enhances the bezel keypad, the driver is normally
configured using the Keypad Configuration Utility (KCU) software.

The KCU software is used to configure the driver. The keys on the keypad can be configured in a variety
of ways.
Disabled Any key can be disabled. Pressing it has no effect.
Macro/String The programmable keys (i.e. the blue keys - the K, A, and F keys) can be programmed
to an arbitrary sequence of keys. For example, the F1 key could be set to act like d i r <enter>
was typed when F1 is pressed. The key will not repeat if continuously held down.
Typematic The programmable keys can be programmed to behave like another key (including the
addition of emulation of modifier keys (i.e. alt, ctrl, shift). The key will repeat if held down (i.e.
typematic action).
Program Not supported at this time. The programmable keys can be programmed to launch an
application when pressed. The key will not repeat if continuously held down.
The driver also supports additional actions for the keys. These additional actions are not supported by the
KCU.

Products Supported
The Rockwell Automation Keypad Driver supports the Rockwell Automation VersaView 1200W and
1500W computers. It supports running Windows 2000 and Windows XP. The keys on the VersaView
computers can be programmed to emulate keys that do not exist on the VersaView keypads.
Although Rockwell does not support or recommend it, the driver can be installed to filter any PS/2
keyboard on any Windows 2000 or Windows XP system.

Theory of Operation
The Rockwell Automation Keypad Driver is a kernel mode filter driver. It is an upper filter driver for the
i8042 driver for the PS/2 keyboard. It is loaded during the boot sequence and can not be unloaded. It reads
its configuration information (i.e. how to make the keys behave) one time during the boot process. Its
configuration information is stored in the Registry. Any changes to the Registry (e.g. Reconfiguration
using the KCU) are not recognized until the next boot of the system.

During operation of the driver, the driver examines every scan code produced by the PS/2 keyboard (i.e. the
bezel Keypad). After examining the scancode it either eats the scancode or passes it up the device driver
stack. If the driver passes the scancode up, the scancode may be left as is or modified. When modified, it
may be simply transformed into another scancode or may be replaced by a series of scancodes.

The important fact is when the driver filters keys, it only deals with scancodes. It has no concept of
Virtual Key Codes. Virtual Key Codes are the things that Windows applications usually use.

That being said, the KCU writes all of its information to the Registry using Virtual Key Codes. The KCU
has no concept of scancodes. The driver has an internal table that translates the KCUs Virtual Key Codes
to scancodes that the driver uses.

Driver Installation and Removal


The KCU Installation package can be used to install the driver. Otherwise the driver can be installed with
just the keypadfilter.inf and keypadfilter.sys files.
To install the driver, follow these steps:
1. Open the Device Manager.
2. Open the Properties of the PS/2 keyboard installed on the system.
3. Click the Driver tab, and then click Update Driver.
4. Follow the wizard's prompts, and when prompted, select the Display a list of the known drivers option,
and then click Next.
5. Click Have Disk and point to the location of the .inf file.
6. Proceed through the rest of the install. You will need to reboot the machine.

Manual Configuration of Driver


The driver gets all of its configuration information from the Registry at system boot time. The KCU writes
the configuration information to the Registry. The information can be placed in the Registry in other
manners also.

Registry Layout
The driver gets all of its configuration information from the Registry.

All of the Registry information is placed below this Subkey of the Registry:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Keypadfilter]

The mappings of the bezel keys are defined in Subkeys of:


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Keypadfilter\Conf
igTable]

Each bezel key is represented by a Subkey with the name of a Virtual Key Code. See the VK Code and
Scancode Mappings section for a list of possible Subkey names. For example, here is a snapshot of what
the Registry might look like.
This example shows configurations for the A1 through A10 and K1 through K10 keys. Note at the bottom
of the picture is the full Registry path.

There are up to eight ways each bezel key can be configured. The driver supports all eight ways, but the
KCU can only be used for four of the configurations concerning the programmable keys. The non-
programmable can only be disabled. The programmable keys are the F, K, and A keys.

The type of configuration of a bezel key is defined by the Registry Value Attrib, which is a
REG_DWORD.

Configuration Type Attrib Data value Related Registry entries


Normal 1 0 (0x00000000)
Typematic 1 (0x00000001) MakeString
BreakString
Macro/String 2 (0x00000002) MacroString
Program 2 4 (0x00000004) RunProgramName
Disable 8 (0x00000008)
Disable Typematic 3 16 (0x00000010)
Not typematic 3 32 (0x00000020) MakeString, BreakString
Macro/String Typematic 3 64 (0x00000040) MacroString

Note 1: Having an Attrib value of 0 is the same as not having an Attrib value at all. It is also the
same as not having a VK_?? Subkey Registry entry for the key. The bezel key has no filtering applied to
it.
Note 2: The Program type is not supported in version 1.0 of the driver.
Note 3: These types are supported by the driver, but not by the KCU.
Attrib Values
Following are details on each of the different Attrib values.

Normal
Having an Attrib value of 0 is the same as not having an Attrib value at all. It is also the same as not
having a VK_?? Subkey Registry entry for the key. The bezel key has no filtering applied to it.

Typematic
This causes the key to have typematic action to it. When the bezel key is held down, it repeats according
to the Control Panels Repeat Delay and Repeat Rate settings. Two additional Registry Value entries are
required MakeString and BreakString. The MakeString value specifies what occurs when
the bezel key is pressed, and what the repeated action is. The BreakString specifies what occurs
when the bezel key is released. Both MakeString and BreakString are of Registry Type
REG_BINARY. Only one key press/release can be simulated, although the Control, Alt, and Shift
modifiers may be added to it.
The data in MakeString and BreakString are pairs of hexadecimal numbers. The first number
specified a VK Code, the second is either a 00 or an 80. The 00 means the key was pressed, the 80
means it was released.

This example illustrates that the F5 bezel key programmed to be Typematic. When the F5 bezel is pressed
the driver simulates a Left-Control down and Enter down keystrokes instead. The a2 is the VK
Code for Left-Control and the 00 means down. The 0d is the VK code for Enter and the 00 again
means down. This can be seen in the MakeString. When the bezel key is released, the driver simulates
the actions of the BreakString. Here an Enter Up and a Left-Control Up occur. The 0d is the
VK Code for Enter and the 80 means up. The a2 means Left-Control and again the 80 means up.

This example illustrates that the K2 bezel key programmed to be Typematic. When the K2 bezel is pressed
the driver simulates an Esc down keystroke instead. The 1b is the VK Code for Esc and the 00 means
down. This can be seen in the MakeString. When the bezel key is released, the driver simulates the
actions of the BreakString. Here an Esc Up occurs. The 1b is the VK Code for Esc and the 80
means up.

Macro/String
This causes the bezel key to have Macro/String action to it. When the bezel key is pressed the driver
simulates the action specified in the MacroString Registry value. No repeat occurs even if the bezel
key is held down. No action occurs when the bezel key is released. Multiple keys can be simulated with
the Macro/String type.
The data in MacroString is in pairs of hexadecimal numbers. The first number specified a VK Code,
the second is either a 00 or an 80. The 00 means the key was pressed, the 80 means it was released.

This example illustrates that the A1 bezel key programmed to be Macro/String. When the A1 bezel is
pressed the driver simulates dir<enter> keystrokes instead. The 44 is the VK Code for d and the 00
means down. Then again the 44 is the VK Code for d but the 80 means up. Similarly the 49 is VK Code
for i, the 52 is the VK Code for r, and 0d is the VK code for Enter. This can be seen in the
MacroString. When the bezel key is released, no action occurs.

Program
Although this is supported by the KCU, it currently not supported by the driver.

Disabled
This causes the bezel key to have no action associated with it when pressed or released.
This illustrates that the Windows key is disabled.

Disable Typematic
This causes the bezel key to not have a typematic action associated with them. This leaves the bezel key at
it default value, but just takes away its typematic action. Even though the Control Panel specifies a Repeat
Delay and Repeat Rate, the bezel key does not repeat.

This illustrates that neither of the Return bezel keys repeat, even if they are held down.

Not Typematic
This is the same as the Typematic setting, except there is no repeat action. The MakeString is not repeated
if the bezel key is held down.

Macro/String Typematic
This is the same as the Macro/String type, except that when the bezel key is held down, it repeats the
MacroString values.

Predefined Key Definitions


If a special Registry REG_DWORD exists named KefDef at
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Keypadfilter\Conf
igTable] then the behavior of the driver is as indicated in the table below.

Note this is similar to the CTRL-SHIFT-X hot key combinations. However since this is a Registry value
it persists across reboots. Use of this method is not necessarily recommended because it can cause the
values to be written by the KCU to be ignored.

Key Definition Comments


None Normal case. The KCU behavior
is as expected. It is
recommended that the KeyDef
Registry value not exist.
0 This causes the rest of the
Registry values to not be read.
No filtering of the bezel keys then
occurs.
1 The rest of the Registry values
are read, but no filtering of the
bezel keys then occurs.
2 The rest of the Registry values
are read, but they are then
ignored. This forces the same
mapping as the Rockwell
Automation VersaView 6180W
computers had.
K1 -> Left-Ctrl-F1
K2 -> Left-Ctrl-F2
K3 -> Left-Ctrl-F3
K4 -> Left-Ctrl-F4
K5 -> Left-Ctrl-F5
K6 -> Left-Ctrl-F6
K7 -> Left-Ctrl-F7
K8 -> Left-Ctrl-F8
K9 -> Left-Ctrl-F9
K10 -> Left-Ctrl-F10
A1 -> Left-Alt-F1
A2 -> Left-Alt-F2
A3 -> Left-Alt-F3
A4 -> Left-Alt-F4
A5 -> Left-Alt-F5
A6 -> Left-Alt-F6
A7 -> Left-Alt-F7
A8 -> Left-Alt-F8
A9 -> Left-Alt-F9
A10 -> Left-Alt-F10
3 The rest of the Registry values
are read, but they are then
ignored. This forces the
mappings that are the most useful
when using RSView Machine
Edition.
K1 -> Right-Alt-F1
K2 -> Right-Alt-F2
K3 -> Right-Alt-F3
K4 -> Right-Alt-F4
K5 -> Right-Alt-F5
K6 -> Right-Alt-F6
K7 -> Right-Alt-F7
K8 -> Right-Alt-F8
K9 -> Right-Alt-F9
K10 -> Right-Alt-F10
A1 -> Right-Alt-F11
A2 -> Right-Alt-F12
A3 -> Right-Shift-F1
A4 -> Right-Shift-F2
A5 -> Right-Shift-F3
A6 -> Right-Shift-F4
A7 -> Right-Shift-F5
A8 -> Right-Shift-F6
A9 -> Right-Shift-F7
A10 -> Right-Shift-F8
4 The rest of the Registry values
are read, but they are then
ignored. This forces the
mappings that are the most useful
when using RSView Supervisory
Edition.
K1 -> Left-Ctrl-F1
K2 -> Left-Ctrl-F2
K3 -> Left-Ctrl-F3
K4 -> Left-Ctrl-F4
K5 -> Left-Ctrl-F5
K6 -> Left-Ctrl-F6
K7 -> Left-Ctrl-F7
K8 -> Left-Ctrl-F8
K9 -> Left-Ctrl-F9
K10 -> Left-Ctrl-F10
A1 -> Left-Shift-F1
A2 -> Left-Shift-F2
A3 -> Left-Shift-F3
A4 -> Left-Shift-F4
A5 -> Left-Shift-F5
A6 -> Left-Shift-F6
A7 -> Left-Shift-F7
A8 -> Left-Shift-F8
A9 -> Left-Shift-F9
A10 -> Left-Shift-F10
5 This uses the configuration that is
in the Registry (usually placed in
there by the KCU).
Very similar to no KeyDef value
at all. It essentially is the normal
case.

VK Code and Scancode Mappings


The table below contains all of the mapping the driver does during configuration. With this table the driver
potentially could be hand configured using RegEdit.exe instead of using the KCU. Caveat Emptor
though, although the driver does some error checking, it may be possible to render the entire system
unusable if the Registry is not configured properly for the driver.

The strings in the VK Code String column are the names of the Subkeys in the Registry that specifies the
bezel keys to have driver action taken on. The VK Code Constant column information does not exist in
the Registry. It is the #define from the winuser.h file in the DDK. The VK Code column is the
numeric value of the VK Code Constant column. These values are used in the Registry in the
MakeString, BreakString, and MacroString Registry entries.
The Scancode and Scancode Flags columns do not exist in the Registry. During normal operation the
driver only deals with Scancodes (and Scancode Flags) though. So even though the MakeString,
BreakString, and MacroString Registry entries have VK Codes in them, the driver actually
substitutes in a Scancode and Scancode Flag during runtime. This is done according to the table. The
Scancode and Scancode flags are usually not examined by Windows applications, but can be if desired.
The Scancode is in bits 16-23 of the lParam of the WM_CHAR message, and the Scancode Flag is in bit 24.
See the Windows documentation for more information.
VK Code String VK Code Constant VK Scancode Scancode
Code Flags
"VK_LSHIFT" VK_LSHIFT 0xA0 0x2a 0
"VK_RSHIFT" VK_RSHIFT 0xA1 0x36 0
"VK_LCONTROL" VK_LCONTROL 0xA2 0x1d 0
"VK_RCONTROL" VK_RCONTROL 0xA3 0x1d 0xE0
"VK_LMENU" VK_LMENU 0xA4 0x38 0
"VK_RMENU" VK_RMENU 0xA5 0x38 0xE0
"VK_SHIFT" VK_LSHIFT 0xA0 0x2a 0
"VK_CONTROL" VK_LCONTROL 0xA2 0x1d 0
"VK_MENU" VK_LMENU 0xA4 0x38 0

"VK_LWIN" VK_LWIN 0x5B 0x5b 0xE0


"VK_RWIN" VK_RWIN 0x5C 0x5c 0xE0
"VK_APPS" VK_APPS 0x5D 0x5d 0xE0

"VK_PRIOR" VK_PRIOR 0x21 0x49 0


"VK_NEXT" VK_NEXT 0x22 0x51 0
"VK_END" VK_END 0x23 0x4f 0
"VK_HOME" VK_HOME 0x24 0x47 0
"VK_OEM_5" VK_OEM_5 0xDC 0x2b 0

"VK_LEFT" VK_LEFT 0x25 0x4b 0xE0


"VK_UP" VK_UP 0x26 0x48 0xE0
"VK_RIGHT" VK_RIGHT 0x27 0x4d 0xE0
"VK_DOWN" VK_DOWN 0x28 0x50 0xE0

"VK_NONNUMPADLEFT" VK_LEFT 0x25 0x4b 0


"VK_NONNUMPADUP" VK_UP 0x26 0x48 0
"VK_NONNUMPADRIGHT" VK_RIGHT 0x27 0x4d 0
"VK_NONNUMPADDOWN" VK_DOWN 0x28 0x50 0

"VK_ADD" VK_ADD 0x6B 0x4e 0


"VK_MULTIPLY" VK_MULTIPLY 0x6A 0x37 0

"VK_INSERT" VK_INSERT 0x2D 0x52 0


"VK_DIVIDE" VK_DIVIDE 0x6F 0x35 0xE0
"VK_SUBTRACT" VK_SUBTRACT 0x6D 0x4a 0

"VK_ESCAPE" VK_ESCAPE 0x1B 0x01 0


"VK_CAPITAL" VK_CAPITAL 0x14 0x3a 0

"VK_NUMLOCK" VK_NUMLOCK 0x90 0x45 0


"VK_DELETE" VK_DELETE 0x2E 0x53 0xE0
"VK_NONNUMPADDELETE" VK_DELETE 0x2E 0x53 0
"VK_DECIMAL" VK_DECIMAL 0x6E 0x53 0
"VK_NUMPADDEL" VK_NUMPADDEL 0x18 0x53 0xE0
"VK_TAB" VK_TAB 0x09 0x0f 0
"VK_BACK" VK_BACK 0x08 0x0e 0
"VK_SPACE" VK_SPACE 0x20 0x39 0

"VK_RETURN" VK_RETURN 0x0D 0x1c 0


"VK_NUMPADRETURN" VK_NUMPADRETURN 0x19 0x1c 0xE0

"VK_NUMPAD0" VK_NUMPAD0 0x60 0x52 0


"VK_NUMPAD1" VK_NUMPAD1 0x61 0x4f 0
"VK_NUMPAD2" VK_NUMPAD2 0x62 0x50 0
"VK_NUMPAD3" VK_NUMPAD3 0x63 0x51 0
"VK_NUMPAD4" VK_NUMPAD4 0x64 0x4b 0
"VK_NUMPAD5" VK_NUMPAD5 0x65 0x4c 0
"VK_NUMPAD6" VK_NUMPAD6 0x66 0x4d 0
"VK_NUMPAD7" VK_NUMPAD7 0x67 0x47 0
"VK_NUMPAD8" VK_NUMPAD8 0x68 0x48 0
"VK_NUMPAD9" VK_NUMPAD9 0x69 0x49 0
"VK_K1" VK_K1 0xC1 0x3b 0xE0
"VK_K2" VK_K2 0xC2 0x3c 0xE0
"VK_K3" VK_K3 0xC3 0x3d 0xE0
"VK_K4" VK_K4 0xC4 0x3e 0xE0
"VK_K5" VK_K5 0xC5 0x3f 0xE0
"VK_K6" VK_K6 0xC6 0x40 0xE0
"VK_K7" VK_K7 0xC7 0x41 0xE0
"VK_K8" VK_K8 0xC8 0x42 0xE0
"VK_K9" VK_K9 0xC9 0x43 0xE0
"VK_K10" VK_K10 0xCA 0x44 0xE0

"VK_A1" VK_A1 0xD5 0x6c 0xE0


"VK_A2" VK_A2 0xD6 0x6d 0xE0
"VK_A3" VK_A3 0xD7 0x64 0xE0
"VK_A4" VK_A4 0xD8 0x65 0xE0
"VK_A5" VK_A5 0xD9 0x66 0xE0
"VK_A6" VK_A6 0xDA 0x67 0xE0
"VK_A7" VK_A7 0x92 0x68 0xE0
"VK_A8" VK_A8 0x93 0x69 0xE0
"VK_A9" VK_A9 0x94 0x6a 0xE0
"VK_A10" VK_A10 0x95 0x6b 0xE0

"VK_F1" VK_F1 0x70 0x3b 0


"VK_F2" VK_F2 0x71 0x3c 0
"VK_F3" VK_F3 0x72 0x3d 0
"VK_F4" VK_F4 0x73 0x3e 0
"VK_F5" VK_F5 0x74 0x3f 0
"VK_F6" VK_F6 0x75 0x40 0
"VK_F7" VK_F7 0x76 0x41 0
"VK_F8" VK_F8 0x77 0x42 0
"VK_F9" VK_F9 0x78 0x43 0
"VK_F10" VK_F10 0x79 0x44 0

"VK_F11" VK_F11 0x7A 0x57 0


"VK_F12" VK_F12 0x7B 0x58 0

"VK_F13" VK_F13 0x7C 0x64 0


"VK_F14" VK_F14 0x7D 0x65 0
"VK_F15" VK_F15 0x7E 0x66 0
"VK_F16" VK_F16 0x7F 0x67 0
"VK_F17" VK_F17 0x80 0x68 0
"VK_F18" VK_F18 0x81 0x69 0
"VK_F19" VK_F19 0x82 0x6a 0
"VK_F20" VK_F20 0x83 0x6b 0

"VK_F21" VK_F21 0x84 0x6c 0


"VK_F22" VK_F22 0x85 0x6d 0
"VK_F23" VK_F23 0x86 0x6e 0
"VK_F24" VK_F24 0x87 0x76 0

"VK_A" VK_A 0x41 0x1e 0


"VK_B" VK_B 0x42 0x30 0
"VK_C" VK_C 0x43 0x2e 0
"VK_D" VK_D 0x44 0x20 0
"VK_E" VK_E 0x45 0x12 0
"VK_F" VK_F 0x46 0x21 0
"VK_G" VK_G 0x47 0x22 0
"VK_H" VK_H 0x48 0x23 0
"VK_I" VK_I 0x49 0x17 0
"VK_J" VK_J 0x4A 0x24 0
"VK_K" VK_K 0x4B 0x25 0
"VK_L" VK_L 0x4C 0x26 0
"VK_M" VK_M 0x4D 0x32 0

"VK_N" VK_N 0x4E 0x31 0


"VK_O" VK_O 0x4F 0x18 0
"VK_P" VK_P 0x50 0x19 0
"VK_Q" VK_Q 0x51 0x10 0
"VK_R" VK_R 0x52 0x13 0
"VK_S" VK_S 0x53 0x1f 0
"VK_T" VK_T 0x54 0x14 0
"VK_U" VK_U 0x55 0x16 0
"VK_V" VK_V 0x56 0x2f 0
"VK_W" VK_W 0x57 0x11 0
"VK_X" VK_X 0x58 0x2d 0
"VK_Y" VK_Y 0x59 0x15 0
"VK_Z" VK_Z 0x5A 0x2c 0

"VK_0" VK_0 0x30 0x0b 0


"VK_1" VK_1 0x31 0x02 0
"VK_2" VK_2 0x32 0x03 0
"VK_3" VK_3 0x33 0x04 0
"VK_4" VK_4 0x34 0x05 0
"VK_5" VK_5 0x35 0x06 0
"VK_6" VK_6 0x36 0x07 0
"VK_7" VK_7 0x37 0x08 0
"VK_8" VK_8 0x38 0x09 0
"VK_9" VK_9 0x39 0x0a 0

"VK_SCROLL" VK_SCROLL 0x91 0x46 0


"VK_SNAPSHOT" VK_SNAPSHOT 0x2C 0x54 0

"VK_OEM_1" VK_OEM_1 0xBA 0x27 0


"VK_OEM_PLUS" VK_OEM_PLUS 0xBB 0x0d 0
"VK_OEM_COMMA" VK_OEM_COMMA 0xBC 0x33 0
"VK_OEM_MINUS" VK_OEM_MINUS 0xBD 0x0c 0
"VK_OEM_PERIOD" VK_OEM_PERIOD 0xBE 0x34 0
"VK_OEM_2" VK_OEM_2 0xBF 0x35 0
"VK_OEM_3" VK_OEM_3 0xC0 0x29 0
"VK_OEM_4" VK_OEM_4 0xDB 0x1a 0
"VK_OEM_6" VK_OEM_6 0xDD 0x1b 0
"VK_OEM_7" VK_OEM_7 0xDE 0x28 0

"VK_BROWSER_BACK" VK_BROWSER_BACK 0xA6 0x6a 0xE0


"VK_BROWSER_FORWARD" VK_BROWSER_FORWARD 0xA7 0x69 0xE0
"VK_BROWSER_REFRESH" VK_BROWSER_REFRESH 0xA8 0x67 0xE0
"VK_BROWSER_STOP" VK_BROWSER_STOP 0xA9 0x68 0xE0
"VK_BROWSER_SEARCH" VK_BROWSER_SEARCH 0xAA 0x65 0xE0
"VK_BROWSER_FAVORITES" VK_BROWSER_FAVORITES 0xAB 0x66 0xE0
"VK_BROWSER_HOME" VK_BROWSER_HOME 0xAC 0x32 0xE0

"VK_VOLUME_MUTE" VK_VOLUME_MUTE 0xAD 0x20 0xE0


"VK_VOLUME_DOWN" VK_VOLUME_DOWN 0xAE 0x2e 0xE0
"VK_VOLUME_UP" VK_VOLUME_UP 0xAF 0x30 0xE0
"VK_MEDIA_NEXT_TRACK" VK_MEDIA_NEXT_TRACK 0xB0 0x19 0xE0
"VK_MEDIA_PREV_TRACK" VK_MEDIA_PREV_TRACK 0xB1 0x10 0xE0
"VK_MEDIA_STOP" VK_MEDIA_STOP 0xB2 0x24 0xE0
"VK_MEDIA_PLAY_PAUSE" VK_MEDIA_PLAY_PAUSE 0xB3 0x22 0xE0
"VK_LAUNCH_MAIL" VK_LAUNCH_MAIL 0xB4 0x6c 0xE0
"VK_LAUNCH_MEDIA_SELECT" VK_LAUNCH_MEDIA_SELECT 0xB5 0x6d 0xE0
"VK_LAUNCH_APP1" VK_LAUNCH_APP1 0xB6 0x6b 0xE0
"VK_LAUNCH_APP2" VK_LAUNCH_APP2 0xB7 0x21 0xE0

"VK_SLEEP" VK_SLEEP 0x5F 0x5f 0xE0


"VK_ZOOM" VK_ZOOM 0xFB 0x62 0
"VK_HELP" VK_HELP 0x2F 0x63 0
"VK_CLEAR" VK_CLEAR 0x0C 0x4c 0
"VK_CANCEL" VK_CANCEL 0x03 0x46 0xE0
"VK_OEM_RESET" VK_OEM_RESET 0xE9 0x71 0
"VK_OEM_JUMP" VK_OEM_JUMP 0xEA 0x5c 0
"VK_OEM_PA1" VK_OEM_PA1 0xEB 0x7b 0
"VK_OEM_PA2" VK_OEM_PA2 0xEC 0x7f 0
"VK_OEM_PA3" VK_OEM_PA3 0xED 0x6f 0
"VK_OEM_WSCTRL" VK_OEM_WSCTRL 0xEE 0x5a 0
"VK_OEM_FINISH" VK_OEM_FINISH 0xF1 0x5b 0
"VK_OEM_AUTO" VK_OEM_AUTO 0xF3 0x5f 0
"VK_OEM_BACKTAB" VK_OEM_BACKTAB 0xF5 0x5e 0

Predefined Keypad Layouts


There are five predefined Key Definition layouts that can be switched to on the fly by pressing obscure
sequences on the bezel keys. These Key Definitions do not persist across reboots. If there are no valid
bezel keys defined at all in the Registry, then the 6180W definition is automatically used each boot. If at
least one valid bezel key definition exists, then the KCU definitons from the Registry are used at boot.

To switch to a predefined definition, press the bezel keys CTRL, SHIFT, and a number between 1 and 5
inclusive. The three bezel keys must be pressed without releasing any before all three are pressed. If this
occurs, release all three bezel keys and start over.

Invoking Key Combination Key Definition Comments


CTRL-SHIFT-1 None No filtering occurs. This means
the A and K keys may produce
scancodes that no Windows
application recognizes.
CTRL-SHIFT-2 6180W These have the same mapping as
the Rockwell Automation
VersaView 6180W computers
did.
K1 -> Left-Ctrl-F1
K2 -> Left-Ctrl-F2
K3 -> Left-Ctrl-F3
K4 -> Left-Ctrl-F4
K5 -> Left-Ctrl-F5
K6 -> Left-Ctrl-F6
K7 -> Left-Ctrl-F7
K8 -> Left-Ctrl-F8
K9 -> Left-Ctrl-F9
K10 -> Left-Ctrl-F10
A1 -> Left-Alt-F1
A2 -> Left-Alt-F2
A3 -> Left-Alt-F3
A4 -> Left-Alt-F4
A5 -> Left-Alt-F5
A6 -> Left-Alt-F6
A7 -> Left-Alt-F7
A8 -> Left-Alt-F8
A9 -> Left-Alt-F9
A10 -> Left-Alt-F10
CTRL-SHIFT-3 Machine Edition These have mapping that are
useful when using RSView
Machine Edition software from
Rockwell.
K1 -> Right-Alt-F1
K2 -> Right-Alt-F2
K3 -> Right-Alt-F3
K4 -> Right-Alt-F4
K5 -> Right-Alt-F5
K6 -> Right-Alt-F6
K7 -> Right-Alt-F7
K8 -> Right-Alt-F8
K9 -> Right-Alt-F9
K10 -> Right-Alt-F10
A1 -> Right-Alt-F11
A2 -> Right-Alt-F12
A3 -> Right-Shift-F1
A4 -> Right-Shift-F2
A5 -> Right-Shift-F3
A6 -> Right-Shift-F4
A7 -> Right-Shift-F5
A8 -> Right-Shift-F6
A9 -> Right-Shift-F7
A10 -> Right-Shift-F8
CTRL-SHIFT-4 Supervisory Edition These have mapping that are
useful when using RSView
Machine Edition software from
Rockwell.
K1 -> Left-Ctrl-F1
K2 -> Left-Ctrl-F2
K3 -> Left-Ctrl-F3
K4 -> Left-Ctrl-F4
K5 -> Left-Ctrl-F5
K6 -> Left-Ctrl-F6
K7 -> Left-Ctrl-F7
K8 -> Left-Ctrl-F8
K9 -> Left-Ctrl-F9
K10 -> Left-Ctrl-F10
A1 -> Left-Shift-F1
A2 -> Left-Shift-F2
A3 -> Left-Shift-F3
A4 -> Left-Shift-F4
A5 -> Left-Shift-F5
A6 -> Left-Shift-F6
A7 -> Left-Shift-F7
A8 -> Left-Shift-F8
A9 -> Left-Shift-F9
A10 -> Left-Shift-F10
CTRL-SHIFT-5 KCU This uses the configuration that is
in the Registry (usually placed in
there by the KCU).

Driver Messages
If a debugger is connected to the Windows 2000 or Windows XP some diagnostic messages can be
captured that are emitted by the driver. The driver does not write any messages to any of the system logs.

Listing the steps necessary to connect a debugger to the VersaView computer is beyond the scope of this
document. The steps can be found on the Microsoft web site. Basically on the VersaView add the
following line to the hidden boot.ini file in the root. Add it to one of the boot choices.

/debug /debugport=COM1 /baudrate=115200


Then connect the VersaView with another computer using a Null Modem cable. Finally install Windbg
(available for free on Microsoft web site). Choose the correct [debugger enabled] boot option when
rebooting the VersaView computer. Choose File / Kernel Debug in the menus of Windbg.

Here is a list of the messages that exist in the driver.

Prints out the name, version, and date of build of the driver.
"Rockwell Automation Keypad Filter; Version 1.0; " __DATE__ " " __TIME__ "\r\n"

Indicates the Registry path where configuration information is read from.


"RegistryPath: %ws\r\n"

Messages printed when a hotkey sequence is recognized to switch configurations.


"Switching to Key Definition 1 (No filtering)\r\n"
"Switching to Key Definition 2 (6180W)\r\n"
"Switching to Key Definition 3 (ME)\r\n"
"Switching to Key Definition 4 (SE)\r\n"
"Switching to Key Definition 5 (as defined by KCU in Registry)\r\n"

Related to contents (or lack thereof) of configuration information read from the Registry.
"Found and using valid data from KCU\r\n"
"Warning: VirtualKey name in Registry not recognizable!\r\n"
"Found %d valid configurations for keys\r\n"
"Warning no valid configurations found for keys!\r\n"
"Failed, no subkeys in ConfigTable, defaulting to 6180W mappings\r\n"
"Failed to query Configtable Registry key, defaulting to 6180W mappings\r\n"
"Failed to open ConfigTable Registry key, defaulting to 6180W mappings\r\n"
"Warning: Entry ignored, did not recognize VK Key: "
"Warning: Could not translate VK %02xh to MakeCode. Entry ignored!\r\n"

Related to detecting KeyDef Registry value.


"KeyDef 0 (No Registry read, no key filtering)\r\n"
"KeyDef 1 (Read Registry values, but no key filtering)\r\n"
"KeyDef 2 (Read Registry values, but force keys like 6180W)\r\n"
"KeyDef 3 (Read Registry values, but force keys for ME)\r\n"
"KeyDef 4 (Read Registry values, but force keys for SE)\r\n"
"KeyDef 5 (Read Registry values and use them)\r\n"

VersaView 1500W Bezel Graphic and Scancode Values


The 1500W bezel appears below. Each bezel key produces a scancode and a scancode flag that is seen by
the driver. Some bezel keys produce different scancodes and/or scancode flags if NUMLOCK or SHIFT is
active when the bezel key is pressed.
The table below lists the scancodes and scancode flags for the 1500W bezel keys. The VK Code is also
listed. The driver does not produce the VK Code, higher levels of the Windows Operating System
produces these based on the scancodes and the state of other keys (CAPSLOCK, NUMLOCK, SHIFT, ALT,
CTRL, etc.).

The blue keys (A, K, F, and alpha) are straightforward and not listed in the table. See VK Code and
Scancode Mappings for values for them. For the table the gray keys are numbered from upper left going
across and down. The two brightness keys at the bottom are not detected by the driver. So the 7 key
would be row 1 in the table, the NUMLOCK would be 17, the Up Arrow would be 27, and the Left
Arrow would be 28.

No Modifier NUMLOCK SHIFT


VK Code Scancode VK Code Scancode VK Code Scancode
1 VK_HOME 47 VK_NUMPAD7 47 VK_HOME 47
2 VK_UP 48 VK_NUMPAD8 48 VK_UP 48
3 VK_PRIOR 49 VK_NUMPAD9 49 VK_PRIOR 49
4 VK_LEFT 4b VK_NUMPAD4 4b VK_LEFT 4b
5 VK_OEM_5 2b VK_NUMPAD5 4c VK_5, 2a (u), 6(d),6(u),2a(d)
VK_SHIFT
6 VK_RIGHT 4d VK_NUMPAD6 4d VK_RIGHT 4d
7 VK_END 4f VK_NUMPAD1 4f VK_END 4f
8 VK_DOWN 50 VK_NUMPAD2 50 VK_DOWN 50
9 VK_NEXT 51 VK_NUMPAD3 51 VK_NEXT 51
10 VK_MULTIPLY 37 VK_ADD 4e VK_ADD 4e
11 VK_INSERT 52 VK_NUMPAD0 52 VK_INSERT 52
12 VK_DELETE 53 VK_DECIMAL 53 VK_DELETE 53
13 VK_DIVIDE 35/e0 VK_SUBTRACT 4a VK_SUBTRACT 4a
14 VK_RETURN 1c/e0 VK_RETURN 1c/e0 VK_RETURN 1c/e0
15 VK_ESCAPE 01 VK_ESCAPE 01 VK_ESCAPE 01
16 VK_CAPITAL 3a VK_CAPITAL 3a VK_CAPITAL 3a
17 VK_NUMLOCK 45 VK_NUMLOCK 45 VK_NUMLOCK 45
18 VK_CONTROL 1d VK_CONTROL 1d VK_CONTROL 1d
19 VK_MENU 38 VK_MENU 38 VK_MENU 38
20 VK_DELETE 53/e0 VK_DELETE 53/e0 VK_DELETE 53/e0
21 VK_TAB 0f VK_TAB 0f VK_TAB 0f
22 VK_SHIFT 2a VK_SHIFT 2a VK_SHIFT
23 VK_BACK 0e VK_BACK 0e VK_BACK 0e
24 VK_APPS 5d/e0 VK_APPS 5d/e0 VK_OEM_1 27
25 VK_SPACE 39 VK_SPACE 39 VK_SPACE 39
26 VK_LWIN 5b/e0 VK_LWIN 2a/e0,5b/ VK_OEM_MINU 0c
e0 S
27 VK_UP 48/e0 VK_UP 2a/e0,48/ VK_UP 2a/e0(u),48/e0(d),48/e
e0 0(u),2a/e0(d)
28 VK_LEFT 4b/e0 VK_LEFT 2a/e0,4b/ VK_LEFT 2a/e0(u),4b/e0(d),4b/e
e0 0(u),2a/e0(d)
29 VK_RIGHT 4d/e0 VK_RIGHT 2a/e0,4d/ VK_RIGHT 2a/e0(u),4d/e0(d),4d/e
e0 0(u),2a/e0(d)
30 VK_DOWN 50/e0 VK_DOWN 2a/e0,50/ VK_DOWN 2a/e0(u),50/e0(d),50/e
e0 0(u),2a/e0(d)

Notes about table above:


Colors are just to highlight differences.
When a /e0 is specified, that means that the extended E0 bit is set in the flags.
All of the entries imply a scancode down then a scancode up. Some entries have a (u) and (d) in them.
These are for non-standard entries. The (u) means up and the (d) down.

VersaView 1200W Bezel Graphic and Scancode Values


The 1200W bezel appears below. At the time of this document writing, no VK Code or scancode
information was available.
Filtering USB Keyboards and Keypads
Filtering non PS/2 keypads/keyboards is currently not supported by the driver. This is mainly because of
the installation procedure. In theory, USB, or both PS/2 and USB together, could be filtered by the driver if
the driver was inserted at a different point within the driver stack.

To filter all keyboards (including USB and the bezel keypad), alter the Registry as follows:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-
E325-11CE-BFC1-08002BE10318}]
"UpperFilters"="keypadfilter\0kbclasss\0\0"

The Registry Value is REG_MULTI_SZ so it doesn't actually look quite like that. It is very critical that the
keypadfilter driver is installed before the kbdclass driver.

Safe Mode
The Keypad Filter Driver is loaded in Safe Mode.

Driver Signing
The Keypad Driver is not signed by Microsoft.

You might also like