| 
									
										
										
										
											2023-11-29 15:36:45 +08:00
										 |  |  | #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: | 
					
						
							|  |  |  |   // 用户把发送数据信号连接到这个槽
 | 
					
						
							| 
									
										
										
										
											2023-12-05 18:37:40 +08:00
										 |  |  |   void send_data_mul_slot(QList<int> addrs, QByteArray data); | 
					
						
							|  |  |  | signals: | 
					
						
							|  |  |  |   void recv_data_signal(int src,QByteArray data); | 
					
						
							| 
									
										
										
										
											2023-11-29 15:36:45 +08:00
										 |  |  | 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
 |