protocol: store the interaction name in the NordicData where appropriate

This means the data logger can then access that name without needing a
separate lookup table.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
pull/193/head
Peter Hutterer 2019-08-23 13:38:18 +10:00
parent e30787234c
commit 79480b867d
2 changed files with 12 additions and 27 deletions

View File

@ -324,17 +324,21 @@ class NordicData(list):
The data length of this message. This field is guaranteed to be The data length of this message. This field is guaranteed to be
equivalent to len(data) or an exception is raised. equivalent to len(data) or an exception is raised.
.. attribute:: name
The name of this message, may be None
''' '''
def __init__(self, bs): def __init__(self, bs, name=None):
data = bs[2:] data = bs[2:]
super().__init__(data) super().__init__(data)
self.opcode = bs[0] self.opcode = bs[0]
self.length = bs[1] self.length = bs[1]
self.name = name
if self.length != len(data): if self.length != len(data):
raise UnexpectedDataError(bs, f'Invalid data: length field {self.length}, data length is {len(data)}') raise UnexpectedDataError(bs, f'Invalid data: length field {self.length}, data length is {len(data)}')
def __repr__(self): def __repr__(self):
return f'{self.opcode:02x} / {self.length:02x} / {as_hex_string(self)}' return f'{self.name if self.Name else "UNKNOWN"}{self.opcode:02x} / {self.length:02x} / {as_hex_string(self)}'
class ProtocolError(Exception): class ProtocolError(Exception):
@ -543,7 +547,8 @@ class Msg(object):
if self.opcode == Msg.OPCODE_NOOP: if self.opcode == Msg.OPCODE_NOOP:
return self # allow chaining return self # allow chaining
self.request = NordicData([self.opcode, len(self.args or []), *(self.args or [])]) self.request = NordicData([self.opcode, len(self.args or []), *(self.args or [])],
name=self.interaction.name)
self.reply = self._callback(request=self.request if self.requires_request else None, self.reply = self._callback(request=self.request if self.requires_request else None,
requires_reply=self.requires_reply, requires_reply=self.requires_reply,
timeout=self.timeout or None, timeout=self.timeout or None,

View File

@ -163,24 +163,6 @@ class DataLogger(object):
def recv(self, data): def recv(self, data):
return self.parent._recv(self.source, data) return self.parent._recv(self.source, data)
commands = {
0xb1: 'set mode',
0xb6: 'set time',
0xb7: 'get firmware',
0xb9: 'read battery info',
0xbb: 'get/set name',
0xc1: 'check for data',
0xc3: 'start reading',
0xc5: 'fetch data',
0xc8: 'end of data',
0xca: 'ack transaction',
0xcc: 'fetch data',
0xea: 'get dimensions',
0xe5: 'finish registering',
0xe6: 'check connection',
0xdb: 'get name',
}
def __init__(self, bluez_device): def __init__(self, bluez_device):
self.logger = logging.getLogger('tuhi.fw') self.logger = logging.getLogger('tuhi.fw')
self.device = bluez_device self.device = bluez_device
@ -240,20 +222,18 @@ class DataLogger(object):
self.logger.debug(f'{self.btaddr}: RX {source} <-- {convert(data)}') self.logger.debug(f'{self.btaddr}: RX {source} <-- {convert(data)}')
self._init_file() self._init_file()
if data[0] in self.commands:
self.logfile.write(f'# {self.commands[data[0]]}\n')
self.logfile.write(f' - recv: {list2hexlist(data)}\n') self.logfile.write(f' - recv: {list2hexlist(data)}\n')
if source != 'NORDIC': if source != 'NORDIC':
self.logfile.write(f' source: {source}\n') self.logfile.write(f' source: {source}\n')
def _request(self, source, request): def _request(self, source, request):
if request.opcode in self.commands: if request.name:
self.logger.debug(f'command: {self.commands[request.opcode]}') self.logger.debug(f'command: {request.name}')
self.logger.debug(f'{self.btaddr}: TX {source} --> {request.opcode:02x} / {len(request):02x} / {list2hex(request)}') self.logger.debug(f'{self.btaddr}: TX {source} --> {request.opcode:02x} / {len(request):02x} / {list2hex(request)}')
self._init_file() self._init_file()
if request.opcode in self.commands: if request.name:
self.logfile.write(f'# {self.commands[request.opcode]}\n') self.logfile.write(f'# {request.name}\n')
data = [request.opcode, len(request), *request] data = [request.opcode, len(request), *request]
self.logfile.write(f' - send: {list2hexlist(data)}\n') self.logfile.write(f' - send: {list2hexlist(data)}\n')