def extractMDF(self): # Get user selected MDF file path and make extracted MDF object. mdf_obj = MDF(self.mdf_path) self.mdf_extracted = mdf_obj.extract_can_logging([self.dbc_path]) # Group names only exist in comment formatted as CAN#.group.signal. # Populate channel_dict by channel_dict[group] = [{signal: signal_object}, ...] for sig in self.mdf_extracted.iter_channels(): for word in sig.comment.split(): if word[0] != '<': s = word.split(".") if s[1] not in self.channel_dict: self.channel_dict[s[1]] = {s[2]: sig} else: self.channel_dict[s[1]][s[2]] = sig # Populate tree widget with groups and signals. for group, signals in self.channel_dict.items(): parent = QtWidgets.QTreeWidgetItem(self.channel_selectors, [group]) for sig in signals: child = QtWidgets.QTreeWidgetItem(parent) child.setText(0, sig) # Render any graphs already present and grab data for pedals. self.render_graphs() self.load_pedal_data() self.load_steering_wheel()
def test_j1939_extract(self): print('J1939 extract') temp_dir = Path(TestCANBusLogging.tempdir_j1939.name) mdf = [ input_file for input_file in temp_dir.iterdir() if input_file.suffix == '.mf4' ][0] mdf = MDF(mdf) dbc = [ input_file for input_file in temp_dir.iterdir() if input_file.suffix == '.dbc' ][0] signals = [ input_file for input_file in temp_dir.iterdir() if input_file.suffix == '.npy' ] out = mdf.extract_can_logging([dbc]) for signal in signals: name = signal.stem target = np.load(signal) values = out.get(name).samples self.assertTrue(np.array_equal(values, target))
def test_obd_extract(self): print("OBD extract") temp_dir = Path(TestCANBusLogging.tempdir_obd.name) for file in temp_dir.iterdir(): print(file) mdf = [ input_file for input_file in temp_dir.iterdir() if input_file.suffix == ".mf4" ][0] mdf = MDF(mdf) dbc = [ input_file for input_file in temp_dir.iterdir() if input_file.suffix == ".dbc" ][0] signals = [ input_file for input_file in temp_dir.iterdir() if input_file.suffix == ".npy" ] out = mdf.extract_can_logging([dbc]) for signal in signals: name = signal.stem target = np.load(signal) values = out.get(name).samples self.assertTrue(np.array_equal(values, target))