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);
|
|
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;
|
|
};
|
|
|