Files
lowobservable.coax/pycoax/coax/features.py
2021-10-16 12:19:13 -05:00

39 lines
910 B
Python

"""
coax.features
~~~~~~~~~~~~~
"""
from enum import Enum
from .protocol import ReadFeatureId
class Feature(Enum):
"""Terminal feature."""
EAB = 0x79
FEATURE_ADDRESS_MIN = 2
FEATURE_ADDRESS_MAX = 15
FEATURE_ADDRESSES = range(FEATURE_ADDRESS_MIN, FEATURE_ADDRESS_MAX + 1)
def read_feature_ids(addresses=None):
"""Generate READ_FEATURE_ID commands."""
return [ReadFeatureId(address) for address in addresses or FEATURE_ADDRESSES]
def parse_features(ids, commands):
"""Parse READ_FEATURE_ID command responses into a map of features and addresses."""
addresses = [command.feature_address for command in commands]
known_ids = {feature.value for feature in Feature}
features = {}
for (address, id_) in zip(addresses, ids):
if id_ is not None and id_ in known_ids:
feature = Feature(id_)
features[feature] = address
return features