Skip to content

Commit 0ab445e

Browse files
authored
Merge pull request #156 from openxc/regenproto
Regenerated the Python protobuf file and fixed glue file binary to pr…
2 parents 0a94f1c + 3585f06 commit 0ab445e

8 files changed

Lines changed: 235 additions & 158 deletions

File tree

openxc/controllers/base.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ def handle_responses(self):
9090
else:
9191
self.diag_dict[response['id']] = MultiframeDiagnosticMessage(response)
9292
if self._return_final(response):
93-
self.responses.append(self.diag_dict[response['id']].getResponse())
93+
save = self.responses.pop()
94+
dentry = self.diag_dict[response['id']].getResponse() # DO NOT REMOVE This MUST be saved to a local variable to prevent deallocation
95+
self.responses.append(dentry) # DO NOT REMOVE This MUST be saved to a local variable to prevent deallocation
96+
self.responses.append(save)
9497
self.diag_dict.pop(response['id'])
9598
self.responses.append(response)
9699
if self.quit_after_first:
@@ -101,14 +104,14 @@ def handle_responses(self):
101104

102105
class MultiframeDiagnosticMessage:
103106
def __init__(self, response):
104-
self.id = response['id'] - 16
107+
self.id = response['id']
105108
self.mode = response['mode']
106109
self.bus = response['bus']
107110
self.pid = response['pid']
108111
self.payload = '0x' + response['payload'][8:]
109112

110113
def addFrame(self, response):
111-
self.payload += response['payload'][8:]
114+
self.payload += response['payload'][2:]
112115

113116
def getResponse(self):
114117
request = {
@@ -132,6 +135,7 @@ def _response_matches_request(self, response):
132135
original request.
133136
"""
134137
return response.get('command_response', None) == self.request['command']
138+
##return True
135139

136140
class DiagnosticResponseReceiver(ResponseReceiver):
137141
"""A receiver that matches the bus, ID, mode and PID from a
@@ -170,8 +174,12 @@ def _response_matches_request(self, response):
170174
return response.get('mode', None) == self.diagnostic_request['mode']
171175

172176
def _response_is_multiframe(self, response):
173-
if 'frame' in response:
174-
return True
177+
#if 'frame' in response:
178+
# return True
179+
print(response)
180+
if 'total_size' in response.keys():
181+
if response["total_size"] > 0:
182+
return True
175183
return False
176184

177185
def _return_final(self, response):

openxc/formats/base.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ class VehicleMessageStreamer(object):
33
bytes_received = 0
44

55
def receive(self, payload):
6-
if not isinstance(payload, bytes):
7-
payload = payload.encode("utf-8")
86
if len(payload) > 0:
97
self.message_buffer += payload
108
self.bytes_received += len(payload)

openxc/formats/binary.py

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ def _handle_diagnostic_cc_message(cls, data, message):
126126
request_command.action = openxc_pb2.DiagnosticControlCommand.CANCEL
127127
request = request_command.request
128128
request_data = data['request']
129-
request.bus = request_data['bus']
129+
if 'bus' in request_data:
130+
request.bus = request_data['bus']
130131
request.message_id = request_data['id']
131132
request.mode = request_data['mode']
132133
if 'frequency' in request_data:
@@ -184,6 +185,10 @@ def _build_diagnostic_message(cls, data, message):
184185
response.bus = data['bus']
185186
response.message_id = data['id']
186187
response.mode = data['mode']
188+
if 'total_size' in data:
189+
response.total_size = data['total_size']
190+
if 'frame' in data:
191+
response.frame = data['frame']
187192
if 'pid' in data:
188193
response.pid = data['pid']
189194
if 'success' in data:
@@ -243,63 +248,57 @@ def _dict_to_protobuf(cls, data):
243248
@classmethod
244249
def _build_can_parsed_message(cls, message, parsed_message):
245250
can_message = message.can_message
246-
if can_message.HasField('bus'):
251+
if can_message.bus != 0:
247252
parsed_message['bus'] = can_message.bus
248-
if can_message.HasField('id'):
253+
if can_message.id != 0:
249254
parsed_message['id'] = can_message.id
250-
if can_message.HasField('data'):
255+
if len(binascii.hexlify(can_message.data).decode("ascii")) > 0:
251256
parsed_message['data'] = "0x%s" % binascii.hexlify(can_message.data).decode("ascii")
252-
if can_message.HasField('frame_format'):
253-
if can_message.frame_format == openxc_pb2.CanMessage.STANDARD:
254-
parsed_message['frame_format'] = "standard"
255-
elif can_message.frame_format == openxc_pb2.CanMessage.EXTENDED:
256-
parsed_message['frame_format'] = "extended"
257+
if can_message.frame_format == openxc_pb2.CanMessage.STANDARD:
258+
parsed_message['frame_format'] = "standard"
259+
elif can_message.frame_format == openxc_pb2.CanMessage.EXTENDED:
260+
parsed_message['frame_format'] = "extended"
257261

258262
@classmethod
259263
def _build_diagnostic_parsed_message(cls, message, parsed_message):
260264
diagnostic_message = message.diagnostic_response
261-
if diagnostic_message.HasField('bus'):
265+
if diagnostic_message.bus != 0:
262266
parsed_message['bus'] = diagnostic_message.bus
263-
if diagnostic_message.HasField('message_id'):
267+
if diagnostic_message.message_id != 0:
264268
parsed_message['id'] = diagnostic_message.message_id
265-
if diagnostic_message.HasField('mode'):
266-
parsed_message['mode'] = diagnostic_message.mode
267-
if diagnostic_message.HasField('pid'):
268-
parsed_message['pid'] = diagnostic_message.pid
269-
if diagnostic_message.HasField('success'):
270-
parsed_message['success'] = diagnostic_message.success
271-
if diagnostic_message.HasField('value'):
269+
parsed_message['mode'] = diagnostic_message.mode
270+
parsed_message['pid'] = diagnostic_message.pid
271+
if diagnostic_message.total_size != 0:
272+
parsed_message['total_size'] = diagnostic_message.total_size
273+
parsed_message['frame'] = diagnostic_message.frame
274+
parsed_message['success'] = diagnostic_message.success
275+
if diagnostic_message.value.type != openxc_pb2.DynamicField.UNUSED: ##GJA
272276
parsed_message['value'] = diagnostic_message.value
273-
if diagnostic_message.HasField('negative_response_code'):
277+
if diagnostic_message.negative_response_code !=0:
274278
parsed_message['negative_response_code'] = diagnostic_message.negative_response_code
275-
if diagnostic_message.HasField('payload'):
279+
if len(binascii.hexlify(diagnostic_message.payload).decode("ascii")) > 0:
276280
parsed_message['payload'] = "0x%s" % binascii.hexlify(diagnostic_message.payload).decode("ascii")
277281

278282
@classmethod
279283
def _build_simple_parsed_message(cls, message, parsed_message):
280284
simple_message = message.simple_message
281285
parsed_message['name'] = simple_message.name
282-
if simple_message.HasField('event'):
283-
event = simple_message.event
284-
if event.HasField('numeric_value'):
285-
parsed_message['event'] = event.numeric_value
286-
elif event.HasField('boolean_value'):
287-
parsed_message['event'] = event.boolean_value
288-
elif event.HasField('string_value'):
289-
parsed_message['event'] = event.string_value
290-
291-
if simple_message.HasField('value'):
292-
value = simple_message.value
293-
if value.HasField('numeric_value'):
294-
parsed_message['value'] = value.numeric_value
295-
elif value.HasField('boolean_value'):
296-
parsed_message['value'] = value.boolean_value
297-
elif value.HasField('string_value'):
298-
parsed_message['value'] = value.string_value
299-
else:
300-
parsed_message = None
286+
event = simple_message.event
287+
if (len(event.string_value) > 0):
288+
parsed_message['event'] = event.string_value
289+
elif event.numeric_value != 0:
290+
parsed_message['event'] = event.numeric_value
301291
else:
302-
parsed_message = None
292+
parsed_message['event'] = event.boolean_value
293+
294+
value = simple_message.value
295+
if (len(value.string_value) > 0):
296+
parsed_message['value'] = value.string_value
297+
elif value.numeric_value != 0:
298+
parsed_message['value'] = value.numeric_value
299+
else:
300+
parsed_message['value'] = value.boolean_value
301+
303302

304303
@classmethod
305304
def _handle_diagnostic_cc_parsed_message(cls, command, parsed_message):
@@ -316,16 +315,16 @@ def _handle_diagnostic_cc_parsed_message(cls, command, parsed_message):
316315
parsed_message['request']['bus'] = request.bus
317316
parsed_message['request']['mode'] = request.mode
318317

319-
if request.HasField('frequency'):
318+
if request.frequency != 0:
320319
parsed_message['request']['frequency'] = request.frequency
321-
if request.HasField('name'):
320+
if len(request.name) > 0:
322321
parsed_message['request']['name'] = request.name
323-
if request.HasField('multiple_responses'):
324-
parsed_message['request']['multiple_responses'] = request.multiple_responses
325-
if request.HasField('pid'):
322+
parsed_message['request']['multiple_responses'] = request.multiple_responses
323+
if request.pid != 0:
326324
parsed_message['request']['pid'] = request.pid
327-
if request.HasField('payload'):
325+
if len(binascii.hexlify(request.payload).decode("ascii")) > 0:
328326
parsed_message['request']['payload'] = "0x%s" % binascii.hexlify(request.payload).decode("ascii")
327+
print("Finished _handle_diagnostic_cc_parsed_message")
329328

330329
@classmethod
331330
def _handle_passthrough_cc_parsed_message(cls, command, parsed_message):
@@ -393,14 +392,14 @@ def _build_command_response_parsed_message(cls, message, parsed_message):
393392
raise UnrecognizedBinaryCommandError(response.type)
394393

395394
parsed_message['status'] = response.status
396-
if response.HasField('message'):
395+
if len(response.message) > 0:
397396
parsed_message['message'] = response.message
398397

399398
@classmethod
400399
def _protobuf_to_dict(cls, message):
401400
parsed_message = {}
402401
if message is not None:
403-
if message.type == message.CAN and message.HasField('can_message'):
402+
if message.type == message.CAN:
404403
cls._build_can_parsed_message(message, parsed_message)
405404
elif message.type == message.DIAGNOSTIC:
406405
cls._build_diagnostic_parsed_message(message, parsed_message)

0 commit comments

Comments
 (0)