mirror of
https://github.com/lowobservable/coax.git
synced 2026-02-28 01:35:50 +00:00
39 lines
910 B
Python
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
|