@@ -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