more explicit logging
This commit is contained in:
parent
079ef8d800
commit
5eab013cf6
|
@ -209,11 +209,12 @@ def _skip_incoming(handle):
|
||||||
raise NoReceiver(reason=reason)
|
raise NoReceiver(reason=reason)
|
||||||
|
|
||||||
if data:
|
if data:
|
||||||
report_id = ord(data[:1])
|
|
||||||
assert (report_id == 0x10 and len(data) == _SHORT_MESSAGE_SIZE or
|
|
||||||
report_id == 0x11 and len(data) == _LONG_MESSAGE_SIZE or
|
|
||||||
report_id == 0x20 and len(data) == _MEDIUM_MESSAGE_SIZE)
|
|
||||||
_unhandled(report_id, ord(data[1:2]), data[2:])
|
_unhandled(report_id, ord(data[1:2]), data[2:])
|
||||||
|
if _log.isEnabledFor(_DEBUG):
|
||||||
|
report_id = ord(data[:1])
|
||||||
|
assert (report_id == 0x10 and len(data) == _SHORT_MESSAGE_SIZE or
|
||||||
|
report_id == 0x11 and len(data) == _LONG_MESSAGE_SIZE or
|
||||||
|
report_id == 0x20 and len(data) == _MEDIUM_MESSAGE_SIZE)
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from logging import getLogger # , DEBUG as _DEBUG
|
from logging import getLogger # , DEBUG as _DEBUG
|
||||||
_log = getLogger('LUR').getChild('hidpp10')
|
_log = getLogger('LUR.hidpp10')
|
||||||
del getLogger
|
del getLogger
|
||||||
|
|
||||||
from .common import (strhex as _strhex,
|
from .common import (strhex as _strhex,
|
||||||
|
|
|
@ -8,7 +8,7 @@ from struct import pack as _pack, unpack as _unpack
|
||||||
from weakref import proxy as _proxy
|
from weakref import proxy as _proxy
|
||||||
|
|
||||||
from logging import getLogger, DEBUG as _DEBUG
|
from logging import getLogger, DEBUG as _DEBUG
|
||||||
_log = getLogger('LUR').getChild('hidpp20')
|
_log = getLogger('LUR.hidpp20')
|
||||||
del getLogger
|
del getLogger
|
||||||
|
|
||||||
from .common import (FirmwareInfo as _FirmwareInfo,
|
from .common import (FirmwareInfo as _FirmwareInfo,
|
||||||
|
|
|
@ -14,7 +14,7 @@ except ImportError:
|
||||||
from queue import Queue as _Queue
|
from queue import Queue as _Queue
|
||||||
|
|
||||||
from logging import getLogger, DEBUG as _DEBUG
|
from logging import getLogger, DEBUG as _DEBUG
|
||||||
_log = getLogger('LUR').getChild('listener')
|
_log = getLogger('LUR.listener')
|
||||||
del getLogger
|
del getLogger
|
||||||
|
|
||||||
from . import base as _base
|
from . import base as _base
|
||||||
|
@ -94,7 +94,7 @@ class ThreadedHandle(object):
|
||||||
# a while for it to acknowledge it.
|
# a while for it to acknowledge it.
|
||||||
_EVENT_READ_TIMEOUT = 500
|
_EVENT_READ_TIMEOUT = 500
|
||||||
|
|
||||||
# After this many read that did not produce a packet, call the tick() method.
|
# After this many reads that did not produce a packet, call the tick() method.
|
||||||
_IDLE_READS = 4
|
_IDLE_READS = 4
|
||||||
|
|
||||||
|
|
||||||
|
@ -148,11 +148,12 @@ class EventsListener(_threading.Thread):
|
||||||
|
|
||||||
if n:
|
if n:
|
||||||
# if _log.isEnabledFor(_DEBUG):
|
# if _log.isEnabledFor(_DEBUG):
|
||||||
# _log.debug("processing %s", n)
|
# _log.debug("%s: processing %s", self.receiver, n)
|
||||||
try:
|
try:
|
||||||
self._notifications_callback(n)
|
self._notifications_callback(n)
|
||||||
except:
|
except:
|
||||||
_log.exception("processing %s", n)
|
_log.exception("processing %s", n)
|
||||||
|
|
||||||
elif self.tick_period:
|
elif self.tick_period:
|
||||||
idle_reads += 1
|
idle_reads += 1
|
||||||
if idle_reads % _IDLE_READS == 0:
|
if idle_reads % _IDLE_READS == 0:
|
||||||
|
|
|
@ -8,7 +8,7 @@ import errno as _errno
|
||||||
from weakref import proxy as _proxy
|
from weakref import proxy as _proxy
|
||||||
|
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
_log = getLogger('LUR').getChild('receiver')
|
_log = getLogger('LUR.receiver')
|
||||||
del getLogger
|
del getLogger
|
||||||
|
|
||||||
from . import base as _base
|
from . import base as _base
|
||||||
|
@ -190,7 +190,7 @@ class PairedDevice(object):
|
||||||
return self.serial.__hash__()
|
return self.serial.__hash__()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '<PairedDevice(%d,%s)>' % (self.number, self.codename or '?')
|
return '<PairedDevice(%d,%s,%s)>' % (self.number, self.wpid, self.codename or '?')
|
||||||
__unicode__ = __repr__ = __str__
|
__unicode__ = __repr__ = __str__
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -260,21 +260,26 @@ class Receiver(object):
|
||||||
# clear out all possible flags
|
# clear out all possible flags
|
||||||
ok = self.request(0x8000)
|
ok = self.request(0x8000)
|
||||||
|
|
||||||
|
flags = self.request(0x8100)
|
||||||
|
if flags:
|
||||||
|
flags = ord(flags[0:1]) << 16 | ord(flags[1:2]) << 8 | ord(flags[2:3])
|
||||||
|
flags = tuple(_hidpp10.NOTIFICATION_FLAG.flag_names(flags))
|
||||||
|
|
||||||
if ok:
|
if ok:
|
||||||
_log.info("device notifications %s", 'enabled' if enable else 'disabled')
|
_log.info("%s: device notifications %s %s", self, 'enabled' if enable else 'disabled', flags)
|
||||||
else:
|
else:
|
||||||
_log.warn("failed to %s device notifications", 'enable' if enable else 'disable')
|
_log.warn("%s: failed to %s device notifications %s", self, 'enable' if enable else 'disable', flags)
|
||||||
return ok
|
return ok
|
||||||
|
|
||||||
def notify_devices(self):
|
def notify_devices(self):
|
||||||
"""Scan all devices."""
|
"""Scan all devices."""
|
||||||
if self.handle:
|
if self.handle:
|
||||||
if not self.request(0x8002, 0x02):
|
if not self.request(0x8002, 0x02):
|
||||||
_log.warn("failed to trigger device link notifications")
|
_log.warn("%s: failed to trigger device link notifications", self)
|
||||||
|
|
||||||
def register_new_device(self, number):
|
def register_new_device(self, number):
|
||||||
if self._devices.get(number) is not None:
|
if self._devices.get(number) is not None:
|
||||||
raise IndexError("device number %d already registered" % number)
|
raise IndexError("%s: device number %d already registered" % (self, number))
|
||||||
dev = PairedDevice(self, number)
|
dev = PairedDevice(self, number)
|
||||||
# create a device object, but only use it if the receiver knows about it
|
# create a device object, but only use it if the receiver knows about it
|
||||||
|
|
||||||
|
@ -287,7 +292,7 @@ class Receiver(object):
|
||||||
# return dev
|
# return dev
|
||||||
|
|
||||||
if dev.wpid:
|
if dev.wpid:
|
||||||
_log.info("found device %d (%s)", number, dev.wpid)
|
_log.info("%s: found Unifying device %d (%s)", self, number, dev.wpid)
|
||||||
self._devices[number] = dev
|
self._devices[number] = dev
|
||||||
return dev
|
return dev
|
||||||
self._devices[number] = None
|
self._devices[number] = None
|
||||||
|
@ -298,7 +303,7 @@ class Receiver(object):
|
||||||
reply = self.request(0x80B2, lock, device, timeout)
|
reply = self.request(0x80B2, lock, device, timeout)
|
||||||
if reply:
|
if reply:
|
||||||
return True
|
return True
|
||||||
_log.warn("failed to %s the receiver lock", 'close' if lock_closed else 'open')
|
_log.warn("%s: failed to %s the receiver lock", self, 'close' if lock_closed else 'open')
|
||||||
|
|
||||||
def count(self):
|
def count(self):
|
||||||
count = self.request(0x8102)
|
count = self.request(0x8102)
|
||||||
|
|
|
@ -218,7 +218,7 @@ class DeviceStatus(dict):
|
||||||
if _log.isEnabledFor(_DEBUG):
|
if _log.isEnabledFor(_DEBUG):
|
||||||
sw_present = bool(flags & 0x10)
|
sw_present = bool(flags & 0x10)
|
||||||
has_payload = bool(flags & 0x80)
|
has_payload = bool(flags & 0x80)
|
||||||
_log.debug("%s: connection notification: software=%s, encrypted=%s, link=%s, payload=%s",
|
_log.debug("%s: unifying connection notification: software=%s, encrypted=%s, link=%s, payload=%s",
|
||||||
self._device, sw_present, link_encrypyed, link_established, has_payload)
|
self._device, sw_present, link_encrypyed, link_established, has_payload)
|
||||||
self[ENCRYPTED] = link_encrypyed
|
self[ENCRYPTED] = link_encrypyed
|
||||||
self._changed(link_established)
|
self._changed(link_established)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
NAME = 'solaar-cli'
|
NAME = 'solaar-cli'
|
||||||
|
@ -15,6 +16,8 @@ from solaar import __version__
|
||||||
#
|
#
|
||||||
|
|
||||||
def _fail(text):
|
def _fail(text):
|
||||||
|
if sys.exc_info()[0]:
|
||||||
|
logging.exception(text)
|
||||||
sys.exit("%s: error: %s" % (NAME, text))
|
sys.exit("%s: error: %s" % (NAME, text))
|
||||||
|
|
||||||
|
|
||||||
|
@ -364,7 +367,6 @@ def _parse_arguments():
|
||||||
|
|
||||||
args = arg_parser.parse_args()
|
args = arg_parser.parse_args()
|
||||||
|
|
||||||
import logging
|
|
||||||
if args.debug > 0:
|
if args.debug > 0:
|
||||||
log_level = logging.WARNING - 10 * args.debug
|
log_level = logging.WARNING - 10 * args.debug
|
||||||
log_format='%(asctime)s %(levelname)8s %(name)s: %(message)s'
|
log_format='%(asctime)s %(levelname)8s %(name)s: %(message)s'
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from logging import getLogger, DEBUG as _DEBUG
|
from logging import getLogger, DEBUG as _DEBUG
|
||||||
_log = getLogger('listener')
|
_log = getLogger('solaar.listener')
|
||||||
del getLogger
|
del getLogger
|
||||||
|
|
||||||
from logitech.unifying_receiver import (Receiver,
|
from logitech.unifying_receiver import (Receiver,
|
||||||
|
@ -53,13 +53,13 @@ class ReceiverListener(_listener.EventsListener):
|
||||||
receiver.status = _status.ReceiverStatus(receiver, self._status_changed)
|
receiver.status = _status.ReceiverStatus(receiver, self._status_changed)
|
||||||
|
|
||||||
def has_started(self):
|
def has_started(self):
|
||||||
_log.info("notifications listener has started")
|
_log.info("%s: notifications listener has started (%s)", self.receiver, self.receiver.handle)
|
||||||
self.receiver.enable_notifications()
|
self.receiver.enable_notifications()
|
||||||
self.receiver.notify_devices()
|
self.receiver.notify_devices()
|
||||||
self._status_changed(self.receiver, _status.ALERT.LOW)
|
self._status_changed(self.receiver, _status.ALERT.LOW)
|
||||||
|
|
||||||
def has_stopped(self):
|
def has_stopped(self):
|
||||||
_log.info("notifications listener has stopped")
|
_log.info("%s: notifications listener has stopped", self.receiver)
|
||||||
if self.receiver:
|
if self.receiver:
|
||||||
self.receiver.enable_notifications(False)
|
self.receiver.enable_notifications(False)
|
||||||
self.receiver.close()
|
self.receiver.close()
|
||||||
|
@ -68,12 +68,12 @@ class ReceiverListener(_listener.EventsListener):
|
||||||
|
|
||||||
def tick(self, timestamp):
|
def tick(self, timestamp):
|
||||||
if _log.isEnabledFor(_DEBUG):
|
if _log.isEnabledFor(_DEBUG):
|
||||||
_log.debug("polling status: %s %s", self.receiver, list(iter(self.receiver)))
|
_log.debug("%s: polling status: %s", self.receiver, list(iter(self.receiver)))
|
||||||
|
|
||||||
if self._last_tick > 0 and timestamp - self._last_tick > _POLL_TICK * 3:
|
if self._last_tick > 0 and timestamp - self._last_tick > _POLL_TICK * 3:
|
||||||
# if we missed a couple of polls, most likely the computer went into
|
# if we missed a couple of polls, most likely the computer went into
|
||||||
# sleep, and we have to reinitialize the receiver again
|
# sleep, and we have to reinitialize the receiver again
|
||||||
_log.warn("possible sleep detected, closing this listener")
|
_log.warn("%s: possible sleep detected, closing this listener", self.receiver)
|
||||||
self.stop()
|
self.stop()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -114,6 +114,7 @@ class ReceiverListener(_listener.EventsListener):
|
||||||
|
|
||||||
def _notifications_handler(self, n):
|
def _notifications_handler(self, n):
|
||||||
assert self.receiver
|
assert self.receiver
|
||||||
|
# _log.debug("%s: handling %s", self.receiver, n)
|
||||||
if n.devnumber == 0xFF:
|
if n.devnumber == 0xFF:
|
||||||
# a receiver notification
|
# a receiver notification
|
||||||
if self.receiver.status is not None:
|
if self.receiver.status is not None:
|
||||||
|
@ -125,7 +126,7 @@ class ReceiverListener(_listener.EventsListener):
|
||||||
dev = self.receiver[n.devnumber]
|
dev = self.receiver[n.devnumber]
|
||||||
|
|
||||||
if not dev:
|
if not dev:
|
||||||
_log.warn("received %s for invalid device %d: %r", n, n.devnumber, dev)
|
_log.warn("%s: received %s for invalid device %d: %r", self.receiver, n, n.devnumber, dev)
|
||||||
return
|
return
|
||||||
|
|
||||||
if not already_known:
|
if not already_known:
|
||||||
|
@ -141,7 +142,7 @@ class ReceiverListener(_listener.EventsListener):
|
||||||
if self.receiver.status.lock_open and not already_known:
|
if self.receiver.status.lock_open and not already_known:
|
||||||
# this should be the first notification after a device was paired
|
# this should be the first notification after a device was paired
|
||||||
assert n.sub_id == 0x41 and n.address == 0x04
|
assert n.sub_id == 0x41 and n.address == 0x04
|
||||||
_log.info("pairing detected new device")
|
_log.info("%s: pairing detected new device", self.receiver)
|
||||||
self.receiver.status.new_device = dev
|
self.receiver.status.new_device = dev
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
Loading…
Reference in New Issue