Correct key mapping

This commit is contained in:
Andrew Kay
2020-06-09 09:00:52 -05:00
parent 30e18200f8
commit de7b9cb610
6 changed files with 99 additions and 115 deletions

View File

@@ -50,96 +50,79 @@ class Key(Enum):
DELETE = 265 DELETE = 265
LEFT = 266 LEFT = 266
LEFT_2 = 410 LEFT_2 = 267
UP = 267 UP = 268
RIGHT = 268 RIGHT = 269
RIGHT_2 = 411 RIGHT_2 = 270
DOWN = 269 DOWN = 271
ROLL_UP = 270
ROLL_DOWN = 271
HOME = 272 HOME = 272
DUP = 273 DUP = 273
BLANK_4 = 274 JUMP = 274
JUMP = 275 # Alt + BLANK_4
SWAP = 276 # Alt + BACKTAB
# Function # Function
PF1 = 277 PF1 = 275
PF2 = 278 PF2 = 276
PF3 = 279 PF3 = 277
PF4 = 280 PF4 = 278
PF5 = 281 PF5 = 279
PF6 = 282 PF6 = 280
PF7 = 283 PF7 = 281
PF8 = 284 PF8 = 282
PF9 = 285 PF9 = 283
PF10 = 286 PF10 = 284
PF11 = 287 PF11 = 285
PF12 = 288 PF12 = 286
PF13 = 289 PF13 = 287
PF14 = 290 PF14 = 288
PF15 = 291 PF15 = 289
PF16 = 292 PF16 = 290
PF17 = 293 PF17 = 291
PF18 = 294 PF18 = 292
PF19 = 295 PF19 = 293
PF20 = 296 PF20 = 294
PF21 = 297 PF21 = 295
PF22 = 298 PF22 = 296
PF23 = 299 PF23 = 297
PF24 = 300 PF24 = 298
# Control # Control
ENTER = 301 ENTER = 299
FIELD_EXIT = 302 RESET = 300
RESET = 303 QUIT = 301
QUIT = 304 DEVICE_CANCEL = 302
SYS_RQ = 305 SYS_RQ = 303
ATTN = 306 ATTN = 304
BLANK_1 = 307 CLEAR = 305
CLEAR = 308 # Alt + BLANK_1 ERASE_INPUT = 306
BLANK_2 = 309 PRINT = 307
ERASE_INPUT = 310 TEST = 308
PRINT = 311
HELP = 312
HEX = 313 # Alt + HELP
BLANK_3 = 314
PLAY = 315
TEST = 316 # Alt + PLAY
SET_UP = 317
RECORD = 318
PAUSE = 319 # Alt + RECORD
FIELD_MARK = 401 FIELD_MARK = 309
CURSOR_SELECT = 402 CURSOR_SELECT = 310
CURSOR_BLINK = 403 CURSOR_BLINK = 311
ERASE_EOF = 404 ERASE_EOF = 312
CLICKER = 405 CLICKER = 313
ALT_CURSOR = 406 ALT_CURSOR = 314
IDENT = 407 IDENT = 315
EXTEND_SELECT = 316
CTRL = 317
PA1 = 408 PA1 = 318
PA2 = 409 PA2 = 319
PA3 = 320
# Number Pad # Number Pad
NUMPAD_BLANK_1 = 320
NUMPAD_BLANK_2 = 321
NUMPAD_BLANK_3 = 322
NUMPAD_BLANK_4 = 323
NUMPAD_SEVEN = ord('7') NUMPAD_SEVEN = ord('7')
NUMPAD_EIGHT = ord('8') NUMPAD_EIGHT = ord('8')
NUMPAD_NINE = ord('9') NUMPAD_NINE = ord('9')
NUMPAD_FIELD_MINUS = 327
NUMPAD_FOUR = ord('4') NUMPAD_FOUR = ord('4')
NUMPAD_FIVE = ord('5') NUMPAD_FIVE = ord('5')
NUMPAD_SIX = ord('6') NUMPAD_SIX = ord('6')
NUMPAD_BLANK_5 = 331
NUMPAD_ONE = ord('1') NUMPAD_ONE = ord('1')
NUMPAD_TWO = ord('2') NUMPAD_TWO = ord('2')
NUMPAD_THREE = ord('3') NUMPAD_THREE = ord('3')
NUMPAD_FIELD_PLUS = 335
NUMPAD_ZERO = ord('0') NUMPAD_ZERO = ord('0')
NUMPAD_PERIOD = ord('.') NUMPAD_PERIOD = ord('.')

View File

@@ -9,8 +9,8 @@ KEYMAP_DEFAULT = {
# Control Keys # Control Keys
80: Key.ATTN, 80: Key.ATTN,
81: Key.CURSOR_SELECT, 81: Key.CURSOR_SELECT,
82: Key.BLANK_1, 82: None, # Blank
83: Key.BLANK_2, 83: None, # Blank
84: Key.CURSOR_BLINK, 84: Key.CURSOR_BLINK,
85: Key.ERASE_EOF, 85: Key.ERASE_EOF,
86: Key.PRINT, 86: Key.PRINT,
@@ -62,7 +62,7 @@ KEYMAP_DEFAULT = {
126: Key.SEMICOLON, 126: Key.SEMICOLON,
18: Key.SINGLE_QUOTE, 18: Key.SINGLE_QUOTE,
15: Key.LEFT_BRACE, 15: Key.LEFT_BRACE,
8: Key.FIELD_EXIT, 8: Key.NEWLINE,
# Fourth Row # Fourth Row
77: Key.LEFT_SHIFT, 77: Key.LEFT_SHIFT,
@@ -88,7 +88,7 @@ KEYMAP_DEFAULT = {
# Right # Right
95: Key.DUP, 95: Key.DUP,
94: Key.FIELD_MARK, 94: Key.FIELD_MARK,
12: Key.INSERT, # TODO: Confirm this mapping 12: Key.INSERT,
13: Key.DELETE, 13: Key.DELETE,
14: Key.UP, 14: Key.UP,
19: Key.DOWN, 19: Key.DOWN,

View File

@@ -5,6 +5,9 @@ oec.keymap_3483
from .keyboard import Key, Keymap from .keyboard import Key, Keymap
# I have a 5250 keyboard for my 3483-V, this mapping is based on photographs
# of the 3270 keyboard and may not be correct.
KEYMAP_DEFAULT = { KEYMAP_DEFAULT = {
# Function Keys # Function Keys
7: Key.PF1, 7: Key.PF1,
@@ -34,15 +37,15 @@ KEYMAP_DEFAULT = {
# Control Keys # Control Keys
5: Key.ATTN, 5: Key.ATTN,
6: Key.BLANK_1, 6: Key.CLEAR,
4: Key.BLANK_2, 4: Key.CURSOR_SELECT,
12: None, # ERASE_INPUT 12: None, # Pause
3: Key.PRINT, 3: Key.EXTEND_SELECT,
11: Key.HELP, 11: Key.ERASE_EOF,
131: Key.BLANK_3, 131: Key.PRINT,
10: Key.PLAY, 10: None, # Play
1: Key.SET_UP, 1: Key.PRINT,
9: Key.RECORD, 9: Key.CTRL,
# First Row # First Row
14: Key.BACKTICK, 14: Key.BACKTICK,
@@ -74,7 +77,7 @@ KEYMAP_DEFAULT = {
77: Key.LOWER_P, 77: Key.LOWER_P,
84: Key.CENT, 84: Key.CENT,
91: Key.BACKSLASH, 91: Key.BACKSLASH,
90: Key.FIELD_EXIT, 90: Key.NEWLINE,
# Third Row # Third Row
20: Key.CAPS_LOCK, 20: Key.CAPS_LOCK,
@@ -114,36 +117,36 @@ KEYMAP_DEFAULT = {
88: Key.ENTER, 88: Key.ENTER,
# Center # Center
103: Key.BACKTAB, 103: Key.PA1,
110: Key.DUP, 110: Key.PA2,
111: Key.BLANK_4, 111: Key.JUMP,
100: Key.NEWLINE, 100: Key.BACKTAB,
101: Key.INSERT, 101: Key.INSERT,
109: Key.DELETE, 109: Key.DELETE,
99: Key.UP, 99: Key.UP,
97: Key.LEFT, 97: Key.LEFT,
98: None, # RULE 98: None, # Rule
106: Key.RIGHT, 106: Key.RIGHT,
96: Key.DOWN, 96: Key.DOWN,
# Number Pad # Number Pad
118: Key.NUMPAD_BLANK_1, 118: None, # Blank
119: Key.NUMPAD_BLANK_2, 119: None, # Blank
126: Key.NUMPAD_BLANK_3, 126: Key.COMMA,
132: Key.NUMPAD_BLANK_4, 132: Key.SPACE,
108: Key.NUMPAD_SEVEN, 108: Key.NUMPAD_SEVEN,
117: Key.NUMPAD_EIGHT, 117: Key.NUMPAD_EIGHT,
125: Key.NUMPAD_NINE, 125: Key.NUMPAD_NINE,
124: Key.NUMPAD_FIELD_MINUS, 124: Key.TAB,
107: Key.NUMPAD_FOUR, 107: Key.NUMPAD_FOUR,
115: Key.NUMPAD_FIVE, 115: Key.NUMPAD_FIVE,
116: Key.NUMPAD_SIX, 116: Key.NUMPAD_SIX,
123: Key.NUMPAD_BLANK_5, 123: Key.MINUS,
105: Key.NUMPAD_ONE, 105: Key.NUMPAD_ONE,
114: Key.NUMPAD_TWO, 114: Key.NUMPAD_TWO,
122: Key.NUMPAD_THREE, 122: Key.NUMPAD_THREE,
121: Key.NUMPAD_FIELD_PLUS, 121: Key.ENTER,
112: Key.NUMPAD_ZERO, 112: Key.NUMPAD_ZERO,
113: Key.NUMPAD_PERIOD 113: Key.NUMPAD_PERIOD
} }
@@ -152,8 +155,7 @@ KEYMAP_SHIFT = {
**KEYMAP_DEFAULT, **KEYMAP_DEFAULT,
# Control Keys # Control Keys
5: Key.SYS_RQ, 10: None, # Copy
12: Key.ERASE_INPUT,
# First Row # First Row
14: Key.TILDE, 14: Key.TILDE,
@@ -207,23 +209,30 @@ KEYMAP_SHIFT = {
50: Key.UPPER_B, 50: Key.UPPER_B,
49: Key.UPPER_N, 49: Key.UPPER_N,
58: Key.UPPER_M, 58: Key.UPPER_M,
65: Key.COMMA, # TODO: ??? 65: Key.COMMA, # TODO: Confirm this mapping
73: Key.CENTER_PERIOD, # TODO: ??? 73: Key.CENTER_PERIOD, # TODO: Confirm this mapping
74: Key.QUESTION, 74: Key.QUESTION,
# Center # Center
99: Key.ROLL_UP, 103: Key.DUP,
96: Key.ROLL_DOWN 110: Key.FIELD_MARK
} }
KEYMAP_ALT = { KEYMAP_ALT = {
**KEYMAP_DEFAULT, **KEYMAP_DEFAULT,
# Control Keys # Control Keys
6: Key.CLEAR, 5: Key.SYS_RQ,
12: Key.ERASE_INPUT,
131: Key.IDENT,
10: Key.TEST,
# Center # Center
98: Key.HOME 111: Key.PA3,
97: Key.LEFT_2,
98: Key.HOME,
106: Key.RIGHT_2
} }
KEYMAP = Keymap('3483', KEYMAP_DEFAULT, KEYMAP_SHIFT, KEYMAP_ALT, modifier_release=240) KEYMAP = Keymap('3483', KEYMAP_DEFAULT, KEYMAP_SHIFT, KEYMAP_ALT, modifier_release=240)

View File

@@ -15,9 +15,9 @@ from .keyboard import Key, get_ebcdic_character_for_key
AID_KEY_MAP = { AID_KEY_MAP = {
Key.CLEAR: AID.CLEAR, Key.CLEAR: AID.CLEAR,
Key.ENTER: AID.ENTER, Key.ENTER: AID.ENTER,
#Key.PA1: AID.PA1, Key.PA1: AID.PA1,
#Key.PA2: AID.PA2, Key.PA2: AID.PA2,
#Key.PA3: AID.PA3, Key.PA3: AID.PA3,
Key.PF1: AID.PF1, Key.PF1: AID.PF1,
Key.PF2: AID.PF2, Key.PF2: AID.PF2,
Key.PF3: AID.PF3, Key.PF3: AID.PF3,
@@ -111,7 +111,7 @@ class TN3270Session(Session):
self.emulator.tab() self.emulator.tab()
elif key == Key.BACKTAB: elif key == Key.BACKTAB:
self.emulator.tab(direction=-1) self.emulator.tab(direction=-1)
elif key in [Key.NEWLINE, Key.FIELD_EXIT]: elif key == Key.NEWLINE:
self.emulator.newline() self.emulator.newline()
elif key == Key.HOME: elif key == Key.HOME:
self.emulator.home() self.emulator.home()

View File

@@ -22,7 +22,6 @@ VT100_KEY_MAP = {
Key.NEWLINE: b'\r', Key.NEWLINE: b'\r',
Key.ENTER: b'\r', Key.ENTER: b'\r',
Key.FIELD_EXIT: b'\r',
Key.BACKSPACE: b'\b', Key.BACKSPACE: b'\b',
Key.TAB: b'\t', Key.TAB: b'\t',

View File

@@ -144,13 +144,6 @@ class SessionHandleKeyTestCase(unittest.TestCase):
# Assert # Assert
self.session.emulator.newline.assert_called() self.session.emulator.newline.assert_called()
def test_field_exit(self):
# Act
self.session.handle_key(Key.FIELD_EXIT, KeyboardModifiers.NONE, None)
# Assert
self.session.emulator.newline.assert_called()
def test_home(self): def test_home(self):
# Act # Act
self.session.handle_key(Key.HOME, KeyboardModifiers.NONE, None) self.session.handle_key(Key.HOME, KeyboardModifiers.NONE, None)