Files
giesCANne/dbc/dbchandler.h
2026-04-13 18:49:18 +02:00

149 lines
4.4 KiB
C++

#ifndef DBCHANDLER_H
#define DBCHANDLER_H
#include <QObject>
#include "dbc_classes.h"
#include "can_structs.h"
typedef enum
{
EXACT,
J1939,
GMLAN
} MatchingCriteria_t;
/*
* TODO:
* Finish coding up the decoupled design
*
*/
class DBCSignalHandler: public QObject
{
Q_OBJECT
public:
DBC_SIGNAL *findSignalByName(QString name);
DBC_SIGNAL *findSignalByIdx(int idx);
bool addSignal(DBC_SIGNAL &sig);
bool removeSignal(DBC_SIGNAL *sig);
bool removeSignal(int idx);
bool removeSignal(QString name);
void removeAllSignals();
int getCount();
void sort();
private:
QList<DBC_SIGNAL> sigs; //signals is a reserved word or I'd have used that
};
class DBCMessageHandler: public QObject
{
Q_OBJECT
public:
DBC_MESSAGE *findMsgByID(uint32_t id);
DBC_MESSAGE *findMsgByIdx(int idx);
DBC_MESSAGE *findMsgByName(QString name);
DBC_MESSAGE *findMsgByPartialName(QString name);
QList<DBC_MESSAGE*> findMsgsByNode(DBC_NODE *node);
bool addMessage(DBC_MESSAGE &msg);
bool removeMessage(DBC_MESSAGE *msg);
bool removeMessageByIndex(int idx);
bool removeMessage(uint32_t ID);
bool removeMessage(QString name);
void removeAllMessages();
int getCount();
MatchingCriteria_t getMatchingCriteria();
void setMatchingCriteria(MatchingCriteria_t mc);
void setFilterLabeling( bool labelFiltering );
bool filterLabeling();
void sort();
private:
QList<DBC_MESSAGE> messages;
MatchingCriteria_t matchingCriteria;
bool filterLabelingEnabled;
};
//technically there should be a node handler too but I'm sort of treating nodes as second class
//citizens since they aren't really all that important (to me anyway)
class DBCFile: public QObject
{
Q_OBJECT
public:
DBCFile();
DBCFile(const DBCFile& cpy);
DBCFile& operator=(const DBCFile& cpy);
DBC_NODE *findNodeByName(QString name);
DBC_NODE *findNodeByNameAndComment(QString fullname);
DBC_NODE *findNodeByIdx(int idx);
DBC_VAL_TABLE *findValueTableByName(QString name);
DBC_ATTRIBUTE *findAttributeByName(QString name, DBC_ATTRIBUTE_TYPE type = ATTR_TYPE_ANY);
DBC_ATTRIBUTE *findAttributeByIdx(int idx);
void findAttributesByType(DBC_ATTRIBUTE_TYPE typ, QList<DBC_ATTRIBUTE> *list);
bool saveFile(QString);
bool loadFile(QString);
QString getFullFilename();
QString getFilename();
QString getFilenameNoExt();
QString getPath();
int getAssocBus();
void setAssocBus(int bus);
void setDirtyFlag();
bool getDirtyFlag();
void clearDirtyFlag();
void sort();
DBCMessageHandler *messageHandler;
QList<DBC_NODE> dbc_nodes;
QList<DBC_VAL_TABLE> dbc_value_tables;
QList<DBC_ATTRIBUTE> dbc_attributes;
private:
QString fileName;
QString filePath;
int assocBuses; //-1 = all buses, 0 = first bus, 1 = second bus, etc.
bool isDirty; //has the file been modified?
bool parseAttribute(QString inpString, DBC_ATTRIBUTE &attr);
QVariant processAttributeVal(QString input, DBC_ATTRIBUTE_VAL_TYPE typ);
DBC_SIGNAL* parseSignalLine(QString line, DBC_MESSAGE *msg);
bool parseSignalMultiplexValueLine(QString line);
DBC_MESSAGE* parseMessageLine(QString line);
bool parseValueTableLine(QString line);
bool parseValueLine(QString line);
bool parseSignalValueTypeLine(QString line);
bool parseAttributeLine(QString line);
bool parseDefaultAttrLine(QString line);
};
class DBCHandler: public QObject
{
Q_OBJECT
public:
DBCFile* loadDBCFile(QString filename);
DBCFile* loadDBCFile(int);
void saveDBCFile(int);
void removeDBCFile(int);
void removeAllFiles();
void swapFiles(int pos1, int pos2);
DBC_MESSAGE* findMessage(const CANFrame &frame);
DBC_MESSAGE* findMessage(const QString msgName);
DBC_MESSAGE* findMessage(const QString msgName, const QString fullyQualifiedNodeName);
DBC_MESSAGE* findMessage(const QString msgName, const QString nodeName, const QString fileNameNoExt);
DBC_MESSAGE* findMessage(uint32_t id);
DBC_MESSAGE* findMessageForFilter(uint32_t id, MatchingCriteria_t * matchingCriteria);
int getFileCount();
DBCFile* getFileByIdx(int idx);
DBCFile* getFileByName(QString name);
int createBlankFile();
DBCFile* loadJSONFile(QString);
DBCFile* loadSecretCSVFile(QString);
static DBCHandler *getReference();
private:
QList<DBCFile> loadedFiles;
DBCHandler();
static DBCHandler *instance;
};
#endif // DBCHANDLER_H