protocol: split GET_DIMENSIONS up into two messages
It's the same message with a different argument, let's try not to do gymnastics in the Msg code just so we can return a tuple. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
73bc782a53
commit
1ea89d2f09
|
@ -65,7 +65,8 @@ class Interactions(enum.Enum):
|
||||||
SET_TIME = enum.auto()
|
SET_TIME = enum.auto()
|
||||||
GET_FIRMWARE = enum.auto()
|
GET_FIRMWARE = enum.auto()
|
||||||
GET_BATTERY = enum.auto()
|
GET_BATTERY = enum.auto()
|
||||||
GET_DIMENSIONS = enum.auto()
|
GET_WIDTH = enum.auto()
|
||||||
|
GET_HEIGHT = enum.auto()
|
||||||
SET_MODE = enum.auto()
|
SET_MODE = enum.auto()
|
||||||
GET_STROKES = enum.auto()
|
GET_STROKES = enum.auto()
|
||||||
GET_DATA_AVAILABLE = enum.auto()
|
GET_DATA_AVAILABLE = enum.auto()
|
||||||
|
@ -763,39 +764,52 @@ class MsgGetBattery(Msg):
|
||||||
self.battery_is_charging = reply[1] == 1
|
self.battery_is_charging = reply[1] == 1
|
||||||
|
|
||||||
|
|
||||||
class MsgGetDimensions(Msg):
|
class MsgGetWidth(Msg):
|
||||||
'''
|
'''
|
||||||
.. attribute:: width
|
.. attribute:: width
|
||||||
|
|
||||||
The width of the tablet in points (mm/100)
|
The width of the tablet in points (mm/100)
|
||||||
|
|
||||||
.. attribute:: height
|
|
||||||
|
|
||||||
The height of the tablet in points (mm/100)
|
|
||||||
'''
|
'''
|
||||||
interaction = Interactions.GET_DIMENSIONS
|
interaction = Interactions.GET_WIDTH
|
||||||
opcode = 0xea
|
opcode = 0xea
|
||||||
protocol = ProtocolVersion.ANY
|
protocol = ProtocolVersion.ANY
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.args = [0x03, 0x00]
|
||||||
|
|
||||||
def _handle_reply(self, reply):
|
def _handle_reply(self, reply):
|
||||||
if reply.opcode != 0xeb:
|
if reply.opcode != 0xeb:
|
||||||
raise UnexpectedReply(self)
|
raise UnexpectedReply(self)
|
||||||
|
|
||||||
if self.args[0] not in [0x3, 0x4] or len(reply) != 6:
|
if reply[0] != 0x3 or len(reply) != 6:
|
||||||
raise UnexpectedDataError(reply)
|
raise UnexpectedDataError(reply)
|
||||||
|
|
||||||
if self.args[0] == 0x3:
|
self.width = int.from_bytes(reply[2:4], byteorder='little')
|
||||||
self.width = int.from_bytes(reply[2:4], byteorder='little')
|
|
||||||
if self.args[0] == 0x4:
|
|
||||||
self.height = int.from_bytes(reply[2:4], byteorder='little')
|
|
||||||
|
|
||||||
def execute(self):
|
|
||||||
# We need two requests with different args to get both w and h
|
class MsgGetHeight(Msg):
|
||||||
self.args = [0x3, 0x00]
|
'''
|
||||||
super().execute()
|
.. attribute:: height
|
||||||
self.args = [0x4, 0x00]
|
|
||||||
super().execute()
|
The height of the tablet in points (mm/100)
|
||||||
return self
|
'''
|
||||||
|
interaction = Interactions.GET_HEIGHT
|
||||||
|
opcode = 0xea
|
||||||
|
protocol = ProtocolVersion.ANY
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.args = [0x04, 0x00]
|
||||||
|
|
||||||
|
def _handle_reply(self, reply):
|
||||||
|
if reply.opcode != 0xeb:
|
||||||
|
raise UnexpectedReply(self)
|
||||||
|
|
||||||
|
if reply[0] != 0x4 or len(reply) != 6:
|
||||||
|
raise UnexpectedDataError(reply)
|
||||||
|
|
||||||
|
self.height = int.from_bytes(reply[2:4], byteorder='little')
|
||||||
|
|
||||||
|
|
||||||
class MsgUnknownE3Command(Msg):
|
class MsgUnknownE3Command(Msg):
|
||||||
|
|
|
@ -716,9 +716,10 @@ class WacomProtocolBase(WacomProtocolLowLevelComm):
|
||||||
return name
|
return name
|
||||||
|
|
||||||
def get_dimensions(self):
|
def get_dimensions(self):
|
||||||
msg = self.p.execute(Interactions.GET_DIMENSIONS)
|
w = self.p.execute(Interactions.GET_WIDTH).width
|
||||||
logger.info(f'dimensions: {msg.width}x{msg.height}')
|
h = self.p.execute(Interactions.GET_HEIGHT).height
|
||||||
return msg.width, msg.height
|
logger.info(f'dimensions: {w}x{h}')
|
||||||
|
return w, h
|
||||||
|
|
||||||
def select_transfer_gatt(self):
|
def select_transfer_gatt(self):
|
||||||
self.p.execute(Interactions.SET_FILE_TRANSFER_REPORTING_TYPE)
|
self.p.execute(Interactions.SET_FILE_TRANSFER_REPORTING_TYPE)
|
||||||
|
|
Loading…
Reference in New Issue