Move read_terminal_ids to terminal - clean up controller

This commit is contained in:
Andrew Kay 2019-06-21 08:01:36 -05:00
parent f233cc41ba
commit e5a163bf84
2 changed files with 45 additions and 40 deletions

View File

@ -5,11 +5,10 @@ oec.controller
import time
import logging
from coax import poll, poll_ack, read_terminal_id, read_extended_id, \
KeystrokePollResponse, ReceiveTimeout, ReceiveError, \
ProtocolError
from coax import poll, poll_ack, KeystrokePollResponse, ReceiveTimeout, \
ReceiveError, ProtocolError
from .terminal import Terminal
from .terminal import Terminal, read_terminal_ids
from .session import SessionDisconnectedError
from .vt100 import VT100Session
@ -70,7 +69,7 @@ class Controller:
self.logger.info('Terminal attached')
# Read the terminal identifiers.
(terminal_id, extended_id) = self._read_terminal_ids()
(terminal_id, extended_id) = read_terminal_ids(self.interface)
self.logger.info(f'Terminal ID = {terminal_id}, Extended ID = {extended_id}')
@ -92,35 +91,6 @@ class Controller:
self.session.start()
def _read_terminal_ids(self):
terminal_id = None
extended_id = None
try:
terminal_id = read_terminal_id(self.interface)
except ReceiveError as error:
self.logger.warning(f'READ_TERMINAL_ID receive error: {error}', exc_info=error)
except ProtocolError as error:
self.logger.warning(f'READ_TERMINAL_ID protocol error: {error}', exc_info=error)
# Retry the READ_EXTENDED_ID command as it appears to fail frequently on the
# first request - unlike the READ_TERMINAL_ID command,
extended_id = None
for attempt in range(3):
try:
extended_id = read_extended_id(self.interface)
break
except ReceiveError as error:
self.logger.warning(f'READ_EXTENDED_ID receive error: {error}', exc_info=error)
except ProtocolError as error:
self.logger.warning(f'READ_EXTENDED_ID protocol error: {error}', exc_info=error)
time.sleep(0.25)
return (terminal_id, extended_id.hex() if extended_id is not None else None)
def _handle_terminal_detached(self):
self.logger.info('Terminal detached')
@ -130,6 +100,11 @@ class Controller:
self.terminal = None
self.session = None
def _handle_session_disconnected(self):
self.logger.info('Session disconnected')
self.session = None
def _handle_poll_response(self, poll_response):
if isinstance(poll_response, KeystrokePollResponse):
self._handle_keystroke_poll_response(poll_response)
@ -159,8 +134,3 @@ class Controller:
if self.session:
self.session.handle_key(key, modifiers, scan_code)
def _handle_session_disconnected(self):
self.logger.info('Session disconnected')
self.session = None

View File

@ -3,11 +3,17 @@ oec.terminal
~~~~~~~~~~~~
"""
import time
import logging
from coax import read_terminal_id, read_extended_id, ReceiveError, ProtocolError
from .display import Dimensions, Display
from .keyboard import Keyboard
from .keymap_3278_2 import KEYMAP as KEYMAP_3278_2
from .keymap_3483 import KEYMAP as KEYMAP_3483
logger = logging.getLogger(__name__)
MODEL_DIMENSIONS = {
2: Dimensions(24, 80),
3: Dimensions(32, 80),
@ -31,8 +37,37 @@ def get_keymap(terminal_id, extended_id):
return keymap
def read_terminal_ids(interface, extended_id_retry_attempts=3):
terminal_id = None
extended_id = None
try:
terminal_id = read_terminal_id(interface)
except ReceiveError as error:
logger.warning(f'READ_TERMINAL_ID receive error: {error}', exc_info=error)
except ProtocolError as error:
logger.warning(f'READ_TERMINAL_ID protocol error: {error}', exc_info=error)
# Retry the READ_EXTENDED_ID command as it appears to fail frequently on the
# first request - unlike the READ_TERMINAL_ID command,
extended_id = None
for attempt in range(extended_id_retry_attempts):
try:
extended_id = read_extended_id(interface)
break
except ReceiveError as error:
logger.warning(f'READ_EXTENDED_ID receive error: {error}', exc_info=error)
except ProtocolError as error:
logger.warning(f'READ_EXTENDED_ID protocol error: {error}', exc_info=error)
time.sleep(0.25)
return (terminal_id, extended_id.hex() if extended_id is not None else None)
class Terminal:
"""Terminal information, devices and helpers."""
"""Terminal information and devices."""
def __init__(self, interface, terminal_id, extended_id):
self.interface = interface