You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							61 lines
						
					
					
						
							1.9 KiB
						
					
					
				#pragma once
 | 
						|
 | 
						|
#include <map>
 | 
						|
#include <QList>
 | 
						|
#include <QObject>
 | 
						|
#include <QString>
 | 
						|
 | 
						|
#include "tools/cabana/dbc/dbc.h"
 | 
						|
 | 
						|
const QString AUTO_SAVE_EXTENSION = ".tmp";
 | 
						|
 | 
						|
class DBCFile : public QObject {
 | 
						|
  Q_OBJECT
 | 
						|
 | 
						|
public:
 | 
						|
  DBCFile(const QString &dbc_file_name, QObject *parent=nullptr);
 | 
						|
  DBCFile(const QString &name, const QString &content, QObject *parent=nullptr);
 | 
						|
  ~DBCFile() {}
 | 
						|
 | 
						|
  void open(const QString &content);
 | 
						|
 | 
						|
  bool save();
 | 
						|
  bool saveAs(const QString &new_filename);
 | 
						|
  bool autoSave();
 | 
						|
  bool writeContents(const QString &fn);
 | 
						|
  void cleanupAutoSaveFile();
 | 
						|
  QString generateDBC();
 | 
						|
 | 
						|
  cabana::Signal *addSignal(const MessageId &id, const cabana::Signal &sig);
 | 
						|
  cabana::Signal *updateSignal(const MessageId &id, const QString &sig_name, const cabana::Signal &sig);
 | 
						|
  cabana::Signal *getSignal(const MessageId &id, const QString &sig_name);
 | 
						|
  void removeSignal(const MessageId &id, const QString &sig_name);
 | 
						|
 | 
						|
  void updateMsg(const MessageId &id, const QString &name, uint32_t size, const QString &comment);
 | 
						|
  void removeMsg(const MessageId &id);
 | 
						|
 | 
						|
  QString newMsgName(const MessageId &id);
 | 
						|
  QString newSignalName(const MessageId &id);
 | 
						|
 | 
						|
  const QList<uint8_t>& mask(const MessageId &id) const;
 | 
						|
 | 
						|
  inline std::map<uint32_t, cabana::Msg> getMessages() const { return msgs; }
 | 
						|
  const cabana::Msg *msg(uint32_t address) const;
 | 
						|
  const cabana::Msg* msg(const QString &name);
 | 
						|
  inline const cabana::Msg *msg(const MessageId &id) const { return msg(id.address); };
 | 
						|
 | 
						|
  QStringList signalNames() const;
 | 
						|
  int signalCount(const MessageId &id) const;
 | 
						|
  int signalCount() const;
 | 
						|
  inline int msgCount() const { return msgs.size(); }
 | 
						|
  inline QString name() const { return name_.isEmpty() ? "untitled" : name_; }
 | 
						|
  inline bool isEmpty() const { return (signalCount() == 0) && name_.isEmpty(); }
 | 
						|
 | 
						|
  QString filename;
 | 
						|
 | 
						|
private:
 | 
						|
  void parseExtraInfo(const QString &content);
 | 
						|
  std::map<uint32_t, cabana::Msg> msgs;
 | 
						|
  QString name_;
 | 
						|
  QList<uint8_t> empty_mask;
 | 
						|
};
 | 
						|
 |