@@ -1351,35 +1351,18 @@ def unpack(self, data, report_error=True):
13511351
13521352 return returnDict
13531353
1354- def _has_sub_multiplexer (self , parent_multiplexer_name ):
1354+ def _get_sub_multiplexer (self , parent_multiplexer_name , parent_multiplexer_value ):
13551355 """
1356- check if any sub-multiplexer in frame
1357- used for complex-multiplexed frame decoding
1358-
1359- :param parent_multiplexer_name: string with name of parent multiplexer
1360- :return: True or False
1361- """
1362- for signal in self .signals :
1363- if signal .is_multiplexer and signal .muxer_for_signal == parent_multiplexer_name :
1364- return True
1365- return False
1366-
1367- def _get_sub_multiplexer (self , parent_multiplexer_name , parent_multiplexer_value , decoded ):
1368- """
1369- get any sub-multiplexer in frame for decoded data
1370- return multiplexers name and value
1371- used for complex-multiplexed frame decoding
1356+ get any sub-multiplexer in frame used
1357+ for complex-multiplexed frame decoding
13721358
13731359 :param parent_multiplexer_name: string with name of parent multiplexer
13741360 :param parent_multiplexer_value: raw_value (int) of parent multiplexer
1375- :param decoded: OrderedDictionary which is returned from canmatrix.Frame.unpack
1376- :return: muxer_name and muxer_value
1361+ :return: muxer signal or None
13771362 """
13781363 for signal in self .signals :
13791364 if signal .is_multiplexer and signal .muxer_for_signal == parent_multiplexer_name and signal .multiplexer_value_in_range (parent_multiplexer_value ):
1380- muxer_value = decoded [signal .name ].raw_value
1381- muxer_name = signal .name
1382- return muxer_name , muxer_value
1365+ return signal
13831366
13841367 def _filter_signals_for_multiplexer (self , multiplexer_name , multiplexer_value ):
13851368 """
@@ -1417,11 +1400,15 @@ def decode(self, data):
14171400 multiplex_name = None
14181401 multiplex_value = None
14191402
1420- while self ._has_sub_multiplexer (multiplex_name ):
1421- multiplex_name , multiplex_value = self ._get_sub_multiplexer (multiplex_name , multiplex_value , decoded )
1422- decoded_values [multiplex_name ] = decoded [multiplex_name ]
1403+ sub_multiplexer = self ._get_sub_multiplexer (multiplex_name , multiplex_value )
1404+ while sub_multiplexer is not None :
1405+ multiplex_name = sub_multiplexer .name
1406+ multiplex_signal = decoded_values [multiplex_name ] = decoded [multiplex_name ]
1407+ multiplex_value = multiplex_signal .raw_value
14231408 filtered_signals += self ._filter_signals_for_multiplexer (multiplex_name , multiplex_value )
14241409
1410+ sub_multiplexer = self ._get_sub_multiplexer (multiplex_name , multiplex_value )
1411+
14251412 for signal in filtered_signals :
14261413 decoded_values [signal .name ] = decoded [signal .name ]
14271414 return decoded_values
0 commit comments