These frames will show up in the main frame list and can be operated on as if they came into the program. It is likely that only the playback window will work for this special use. Other sending windows are to follow.
87 lines
3.1 KiB
C++
87 lines
3.1 KiB
C++
#ifndef CANCONMANAGER_H
|
|
#define CANCONMANAGER_H
|
|
|
|
#include <QObject>
|
|
#include <QTimer>
|
|
#include <QElapsedTimer>
|
|
|
|
#include "canconnection.h"
|
|
|
|
class CANConManager : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
static CANConManager* getInstance();
|
|
virtual ~CANConManager();
|
|
|
|
void add(CANConnection* pConn_p);
|
|
void remove(CANConnection* pConn_p);
|
|
QList<CANConnection*>& getConnections();
|
|
void stopAllConnections();
|
|
|
|
CANConnection* getByName(const QString& pName) const;
|
|
|
|
uint64_t getTimeBasis();
|
|
void resetTimeBasis();
|
|
|
|
int getNumBuses();
|
|
|
|
/**
|
|
* @brief sendFrame sends a single frame out the desired bus
|
|
* @param pFrame - reference to a CANFrame struct that has been filled out for sending
|
|
* @return bool specifying whether the send succeeded or not
|
|
* @note Finds which CANConnection object is responsible for this bus and automatically converts bus number to pass properly to CANConnection
|
|
*/
|
|
bool sendFrame(const CANFrame& pFrame);
|
|
|
|
//just the multi-frame version of above function.
|
|
bool sendFrames(const QList<CANFrame>& pFrames);
|
|
|
|
/**
|
|
* @brief Add a new filter for the targetted frames. If a frame matches it will immediately be sent via the targettedFrameReceived signal
|
|
* @param pBusId - Which bus to bond to. -1 for any, otherwise a bitfield of buses (but 0 = first bus, etc)
|
|
* @param ID - 11 or 29 bit ID to match against
|
|
* @param mask - 11 or 29 bit mask used for filter
|
|
* @param receiver - Pointer to a QObject that wants to receive notification when filter is matched
|
|
* @return true if filter was able to be added, false otherwise.
|
|
*/
|
|
bool addTargettedFrame(int pBusId, uint32_t ID, uint32_t mask, QObject *receiver);
|
|
|
|
/**
|
|
* @brief Try to find a matching filter in the list and remove it, no longer targetting those frames
|
|
* @param pBusId - Which bus to bond to. Doesn't have to match the call to addTargettedFrame exactly. You could disconnect just one bus for instance.
|
|
* @param ID - 11 or 29 bit ID to match against
|
|
* @param mask - 11 or 29 bit mask used for filter
|
|
* @param receiver - Pointer to a QObject that wants to receive notification when filter is matched
|
|
* @return true if filter was found and deleted, false otherwise.
|
|
*/
|
|
bool removeTargettedFrame(int pBusId, uint32_t ID, uint32_t mask, QObject *receiver);
|
|
|
|
bool removeAllTargettedFrames(QObject *receiver);
|
|
|
|
signals:
|
|
void framesReceived(CANConnection* pConn_p, QVector<CANFrame>& pFrames);
|
|
void connectionStatusUpdated(int conns);
|
|
|
|
private slots:
|
|
void refreshCanList();
|
|
|
|
private:
|
|
explicit CANConManager(QObject *parent = 0);
|
|
void refreshConnection(CANConnection* pConn_p);
|
|
|
|
static CANConManager* mInstance;
|
|
QList<CANConnection*> mConns;
|
|
QTimer mTimer;
|
|
QElapsedTimer mElapsedTimer;
|
|
uint64_t mTimestampBasis;
|
|
uint32_t mNumActiveBuses;
|
|
bool useSystemTime;
|
|
QVector<CANFrame> buslessFrames;
|
|
QVector<CANFrame> tempFrames;
|
|
};
|
|
|
|
#endif // CANCONNECTIONMODEL_H
|
|
|