Files
checker_host/interface/if_can.h
2023-12-05 18:37:40 +08:00

76 lines
1.5 KiB
C++

#ifndef if_can_h__
#define if_can_h__
#include <base/base.h>
#include <QObject>
#include <QCanBus>
#include <QCanBusDevice>
#include "stdint-gcc.h"
#include "QList"
#include "QTimer"
#include "interface/interface.h"
// 定义can从机对象
class can_slave : public QObject
{
Q_OBJECT
public:
uint8_t addr;
can_slave();
can_slave(const can_slave &b);
~can_slave();
can_slave &operator=(const can_slave &b);
void append(QByteArray data);
QByteArray get_data();
int get_pack_num();
void clear();
bool is_empty()
{
if (recv_data.size() == 0)
return true;
else
return false;
}
private:
QByteArray recv_data;
int recv_pack_num;
};
// 定义can主机对象
class can_host : public InterFace
{
Q_OBJECT
public:
can_host(int bitrate);
~can_host();
// 用户调用这个函数初始化
void init();
int write(myarray data){return 0;}
int write(int dst,myarray data);
private:
can_slave &get_slave_by_addr(uint8_t addr);
void append(uint8_t addr, uint8_t fun_class, QByteArray data);
public slots:
// 用户把发送数据信号连接到这个槽
void send_data_mul_slot(QList<int> addrs, QByteArray data);
signals:
void recv_data_signal(int src,QByteArray data);
private slots:
void freams_sent_cb(qint64 count);
void recv_data_cb();
void on_error_cb(QCanBusDevice::CanBusError err);
void init_cb();
// void timerout_cb();
private:
int bitrate;
QCanBusDevice *can_;
QList<can_slave> slaves;
QList<QCanBusFrame> send_packets;
QList<QCanBusFrame> recv_packets;
QTimer *timer_;
};
#endif