config: store the protocol used by the device in the config file

Instead of having to detect the protocol multiple times, we should just
store it once so we can detect oddities when they arrive.
pull/81/merge
Benjamin Tissoires 2018-02-07 16:04:57 +01:00 committed by Peter Hutterer
parent 8f2ad50fa5
commit ecd99ea9b6
3 changed files with 21 additions and 3 deletions

View File

@ -21,6 +21,7 @@ from gi.repository import GObject, GLib
from tuhi.dbusserver import TuhiDBusServer
from tuhi.ble import BlueZDeviceManager
from tuhi.wacom import WacomDevice
from tuhi.wacom import Protocol
from tuhi.config import TuhiConfig
logging.basicConfig(format='%(levelname)s: %(name)s: %(message)s',
@ -167,7 +168,10 @@ class TuhiDevice(GObject.Object):
self._tuhi_dbus_device.notify_button_press_required()
def _on_uuid_updated(self, wacom_device, pspec, bluez_device):
self.config.new_device(bluez_device.address, wacom_device.uuid)
protocol = Protocol.SLATE
if wacom_device.is_spark():
protocol = Protocol.SPARK
self.config.new_device(bluez_device.address, wacom_device.uuid, protocol)
self.registered = True
def _on_listening_updated(self, dbus_device, pspec):
@ -287,7 +291,7 @@ class Tuhi(GObject.Object):
if uuid is None:
logger.info(f'{bluez_device.address}: device without config, must be registered first')
return
logger.debug(f'{bluez_device.address}: UUID {uuid}')
logger.debug(f'{bluez_device.address}: UUID {uuid} protocol: {config["Protocol"]}')
# create the device if unknown from us
if bluez_device.address not in self.devices:

View File

@ -19,6 +19,7 @@ import configparser
import re
import logging
from .drawing import Drawing
from .wacom import Protocol
logger = logging.getLogger('tuhi.config')
@ -67,11 +68,14 @@ class TuhiConfig(GObject.Object):
self._purge_drawings(entry)
assert config['Device']['Address'] == entry.name
if 'Protocol' not in config['Device']:
config['Device']['Protocol'] = Protocol.UNKNOWN.value
self._devices[entry.name] = config['Device']
def new_device(self, address, uuid):
def new_device(self, address, uuid, protocol):
assert is_btaddr(address)
assert len(uuid) == 12
assert protocol != Protocol.UNKNOWN
logger.debug(f'{address}: adding new config, UUID {uuid}')
path = os.path.join(ROOT_PATH, address)
@ -92,6 +96,7 @@ class TuhiConfig(GObject.Object):
config['Device'] = {
'Address': address,
'UUID': uuid,
'Protocol': protocol.value,
}
with open(path, 'w') as configfile:

View File

@ -14,6 +14,7 @@
import binascii
import calendar
import enum
import logging
import threading
import time
@ -42,6 +43,14 @@ WACOM_SLATE_WIDTH = 21600
WACOM_SLATE_HEIGHT = 14800
@enum.unique
class Protocol(enum.Enum):
UNKNOWN = 'unknown'
SPARK = 'spark'
SLATE = 'slate'
INTUOS_PRO = 'intuos-pro'
def signed_char_to_int(v):
return int.from_bytes([v], byteorder='little', signed=True)