62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
#
|
|
#
|
|
#
|
|
|
|
from . import k750
|
|
from .constants import *
|
|
|
|
from ..unifying_receiver import api as _api
|
|
from ..unifying_receiver.common import FallbackDict as _FDict
|
|
|
|
|
|
def ping(devinfo, listener):
|
|
reply = listener.request(_api.ping, devinfo.number)
|
|
return STATUS.CONNECTED if reply else STATUS.UNAVAILABLE
|
|
|
|
|
|
def default_request_status(devinfo, listener):
|
|
if _api.C.FEATURE.BATTERY in devinfo.features:
|
|
reply = listener.request(_api.get_device_battery_level, devinfo.number, features_array=devinfo.features)
|
|
if reply:
|
|
discharge, dischargeNext, status = reply
|
|
return STATUS.CONNECTED, {PROPS.BATTERY_LEVEL: discharge}
|
|
|
|
|
|
def default_process_event(devinfo, listener, data):
|
|
feature_index = ord(data[0:1])
|
|
feature = devinfo.features[feature_index]
|
|
|
|
if feature == _api.C.FEATURE.BATTERY:
|
|
if ord(data[1:2]) & 0xF0 == 0:
|
|
discharge = ord(data[2:3])
|
|
status = _api.C.BATTERY_STATUS[ord(data[3:4])]
|
|
return STATUS.CONNECTED, {BATTERY_LEVEL: discharge, BATTERY_STATUS: status}
|
|
# ?
|
|
elif feature == _api.C.FEATURE.REPROGRAMMABLE_KEYS:
|
|
if ord(data[1:2]) & 0xF0 == 0:
|
|
print 'reprogrammable key', repr(data)
|
|
# TODO
|
|
pass
|
|
# ?
|
|
elif feature == _api.C.FEATURE.WIRELESS:
|
|
if ord(data[1:2]) & 0xF0 == 0:
|
|
# TODO
|
|
pass
|
|
# ?
|
|
|
|
|
|
_REQUEST_STATUS_FUNCTIONS = _FDict()
|
|
_REQUEST_STATUS_FUNCTIONS[k750.NAME] = k750.request_status
|
|
|
|
def request_status(devinfo, listener):
|
|
if listener:
|
|
return _REQUEST_STATUS_FUNCTIONS[devinfo.name](devinfo, listener) or default_request_status(devinfo, listener) or ping(devinfo, listener)
|
|
|
|
|
|
_PROCESS_EVENT_FUNCTIONS = _FDict()
|
|
_PROCESS_EVENT_FUNCTIONS[k750.NAME] = k750.process_event
|
|
|
|
def process_event(devinfo, listener, data):
|
|
if listener:
|
|
return default_process_event(devinfo, listener, data) or _PROCESS_EVENT_FUNCTIONS[devinfo.name](devinfo, listener, data)
|