#ifndef if_can_h__
#define if_can_h__
#include
#include
#include
#include
#include "stdint-gcc.h"
#include "QList"
#include "QTimer"
#include "interface/interface.h"
using namespace std;
using namespace std::placeholders;
typedef std::function can_recv_cb;
// 定义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);
void set_irq(can_recv_cb fun){
recv_cb_fun=fun;
}
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 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 slaves;
QList send_packets;
QList recv_packets;
QTimer *timer_;
can_recv_cb recv_cb_fun;
};
#endif