#pragma once #include #include #include #include #include "can_structs.h" #include "mainwindow.h" #include "canframemodel.h" #include "isotp_message.h" #include "canfilter.h" class ISOTP_HANDLER : public QObject { Q_OBJECT public: ISOTP_HANDLER(); ~ISOTP_HANDLER(); void setExtendedAddressing(bool mode); void setReception(bool mode); //set whether to accept and forward frames or not void sendISOTPFrame(int bus, int ID, QByteArray data); void setProcessAll(bool state); void setFlowCtrl(bool state); void addFilter(int pBusId, uint32_t ID, uint32_t mask); void removeFilter(int pBusId, uint32_t ID, uint32_t mask); void clearAllFilters(); public slots: void updatedFrames(int); void rapidFrames(const CANConnection* conn, const QVector& pFrames); void frameTimerTick(); signals: void newISOMessage(ISOTP_MESSAGE msg); private: QList messageBuffer; QList sendingFrames; QList filters; const QVector *modelFrames; bool useExtendedAddressing; bool isReceiving; bool waitingForFlow; int framesUntilFlow; bool processAll; bool issueFlowMsgs; QTimer frameTimer; uint32_t lastSenderID; uint32_t lastSenderBus; void processFrame(const CANFrame &frame); void checkNeedFlush(uint64_t ID); };