#ifndef MACHINE_H #define MACHINE_H #include "tcp/tcpclient.h" #include "bmp/creatprintbmp.h" #include "printinfo/mcfiles.h" #include "machine/comm/crc16.h" #define SEND_STEP0 0 #define SEND_STEP1 1 #define SEND_STEP2 2 #define SEND_STEP3 3 #define SEND_STEP4 4 #define SEND_STEP5 5 #define SEND_STEP_MAX 10 #define SEND_ANSWER 100 class Machine : public QObject { Q_OBJECT public: explicit Machine(QObject *parent = NULL); virtual ~Machine(); protected: QString m_mcName; QString m_mcIp; private: // 通讯线程和网络连接 TcpClient * m_pTcpClient; QThread * m_pTcpBmpThread; //生成打印数据 CreatPrintBmp * m_pCreatPrintDat; MCInfo m_mcInfo; // 机器信息 ParaStruct m_mcPara; // 机器参数信息 配置信息 ParaStruct m_wkPara; // 工作参数信息 int m_totalSendNum;//传输文件时总共发送的包数 int m_totalPacketNum;//传输文件时总的包数 QTimer *m_pSendTimer; FileTransCtrl m_transCtrl; int m_fileTransEn; int m_transBreak; PlotFileList *m_pPlotFileList;//文件数据列表 CompBmpHead *m_pCompBmpHead;//压缩位图文件头 private: int m_connected; // 机器连接状态. 0, 未连接; 1, 连接中; 2, MCStatus m_mcStatus; // 机器状态 int m_mcParaEn; int m_wkParaEn; public: McPrintInfo m_mcPrintInfo;//机器打印信息(包括机器的连接状态和工作状态) private: void startFileTrans(FileTransCtrl & transCtrl); void startFileDyTrans(FileTransCtrl & transCtrl);//开始动态传输文件 void transFileData(FileTransCtrl & transCtrl, int pktidx); void setAParasToMachine(int type, int idx, u32 value); void setMcStatusAsMc(u8 * buff, u16 len, int toggle); void updateFirmware(); // 下位机升级 // 连接 public: inline int isConnected() const { return m_connected; } public: void setIpAndPort(QString mcName, QString serverIp, quint16 serverPort, QString localIp, quint16 localPort); void startCommunication(); //机器信息 inline const MCInfo &getMcInfo() { return m_mcInfo; } inline int getTotalSendNum() { return m_totalSendNum; } inline int getTotalPacketNum() { return m_totalPacketNum; } inline const MCStatus & getMcStatus() {return m_mcStatus; } inline const ParaStruct & getMcPara() {/*m_mcParaEn = 0; */ return m_mcPara; } inline const ParaStruct & getWkPara() {/*m_wkParaEn = 0; */ return m_wkPara; } void getInfoFromMachine(); void getParasFromMachine(int type, int id); // 读取机器参数 void getTransResultFromMachine(int fileid); void sleep(int sec); public: void setMcStatus(int stacode, int para = 0); // 设置机器状态 // 设置机器参数 void setParasToMachine(ParaStruct & para); void setAMcPara(int id, u32 value); void setAWkPara(int id, u32 value); void startWork(); // 启动工作 void pauseWork(); // 暂停工作 // 文件传输命令 int sendFileProc(int idx, u8 *dat, int datSize); int dySendFileProc(int type, int idx, int id, u8 * pDatBuff); //动态传输文件 int sendAPPFileProc(int type, int idx, int id, AppFileHead &fileHead, u8 *pDatBuff); //发送升级文件 // 机器工作命令 void mcWorkCmd(int workcode, int para1 = 0 , int para2 = 0); void creatPrintDat(int fileIdx,u32 markSpace,int setFlag = 1); //生成打印数据 void stopPrint(); //停止打印 void deleteFilePrintDat(int fileIdx);//删除文件打印数据 void moveFilePrintDat(int fileIdx,int dir = -1);//移动(上下移)文件打印数据 void invalidateWorkFile(int idx = 0); // 文件失效 signals: // 发送数据到机器的信号 void siSendData(QByteArray dat); void siSendDataDone(); void siStatusChange(int); // 状态改变信号 void siMcInfoChange(); // 机器信息改变信号 void siParaChange(int type, int id); // 参数更新信号 void siTransResultChange(); // 文件传输结果信号 void siTransProgress(u8 fileType, int send, int total); // 文件传输结果信号 void siCreatData(); //生成要发送的数据 void siCreatBmpBlockDatAndSend();//生成位图数据块数据并发送 void siOneFilePrintFinished(int mcNum, int fileIdx, int refreshFlag);//完成一个文件的打印 void siRefreshPrintProgress(int mcNum, int fileIdx);//刷新打印进度 private slots: void slotConnectSta(int sta); // 连接状态改变的槽函数 void slotConnectErr(QString errinfo); // 接收到通讯错误槽函数 void slotReceiveData(QByteArray dat); // 接收到数据的槽函数 void onSendTimer(void); void slotSendDatToMc(QByteArray dat);//发送打印数据 void slotSendPlotFileListToMc(int idx);//发送设置文件列表 public slots: void breakFileTrans(); // 打断文件传输 }; #endif // MACHINE_H