1 |
2 |
EziDebug |
#ifndef EZIDEBUGPRJ_H
|
2 |
|
|
#define EZIDEBUGPRJ_H
|
3 |
|
|
#include <QMap>
|
4 |
|
|
#include <QDir>
|
5 |
|
|
#include <QStack>
|
6 |
|
|
#include <QXmlStreamReader>
|
7 |
|
|
|
8 |
|
|
#include "updatedetectthread.h"
|
9 |
|
|
|
10 |
|
|
|
11 |
|
|
|
12 |
|
|
|
13 |
|
|
|
14 |
|
|
|
15 |
|
|
#define Parse_by_QDom
|
16 |
|
|
|
17 |
|
|
#define DEFAULT_MAX_REGNUM 512
|
18 |
|
|
#define READ_FILE_INFO 0x01
|
19 |
|
|
#define READ_MODULE_INFO 0x02
|
20 |
|
|
#define READ_CHAIN_INFO 0x04
|
21 |
|
|
|
22 |
|
|
#define EZIDEBUG_STRUCTURE_FILE 0x01
|
23 |
|
|
#define EZIDEBUG_STRUCTURE_MODULE 0x02
|
24 |
|
|
#define EZIDEBUG_STRUCTURE_SCAN_CHAIN 0x04
|
25 |
|
|
#define EZIDEBUG_STRUCTURE_ALL 0x07
|
26 |
|
|
|
27 |
|
|
#define MODULE_STRUCTURE_CLOCK_DESCRIPTION 0x01
|
28 |
|
|
#define MODULE_STRUCTURE_REG_DESCRIPTION 0x02
|
29 |
|
|
#define MODULE_STRUCTURE_PORT_DESCRIPTION 0x04
|
30 |
|
|
#define MODULE_STRUCTURE_INSTANCE_PORT_MAP_DESCRIPTION 0x08
|
31 |
|
|
#define MODULE_STRUCTURE_ALL_DESCRIPTION 0x0F
|
32 |
|
|
|
33 |
|
|
#define SCAN_CHAIN_STRUCTURE_REGLIST_DESCRIPTION 0x01
|
34 |
|
|
#define SCAN_CHAIN_STRUCTURE_CODE_DESCRIPTION 0x02
|
35 |
|
|
#define SCAN_CHAIN_STRUCTURE_ALL_DESCRIPTION 0x03
|
36 |
|
|
#define MAX_SIGNAL_NUM 256
|
37 |
|
|
|
38 |
|
|
class QString ;
|
39 |
|
|
class QDir ;
|
40 |
|
|
class EziDebugVlgFile ;
|
41 |
|
|
class EziDebugVhdlFile ;
|
42 |
|
|
class EziDebugModule ;
|
43 |
|
|
class EziDebugInstanceTreeItem ;
|
44 |
|
|
class EziDebugScanChain ;
|
45 |
|
|
class QStringList ;
|
46 |
|
|
class QXmlStreamReader ;
|
47 |
|
|
class QDomElement ;
|
48 |
|
|
class QDomDocument ;
|
49 |
|
|
|
50 |
|
|
|
51 |
|
|
|
52 |
|
|
|
53 |
|
|
|
54 |
|
|
|
55 |
|
|
template <class Key, class T> class QMap;
|
56 |
|
|
|
57 |
|
|
|
58 |
|
|
class EziDebugPrj:public QObject
|
59 |
|
|
{
|
60 |
|
|
Q_OBJECT
|
61 |
|
|
public:
|
62 |
|
|
enum TOOL
|
63 |
|
|
{
|
64 |
|
|
ToolQuartus = 0 ,
|
65 |
|
|
ToolIse ,
|
66 |
|
|
ToolOther
|
67 |
|
|
};
|
68 |
|
|
enum OPERATE_TYPE
|
69 |
|
|
{
|
70 |
|
|
|
71 |
|
|
OperateTypeAddScanChain = 0 ,
|
72 |
|
|
OperateTypeDelSingleScanChain ,
|
73 |
|
|
OperateTypeDelAllScanChain ,
|
74 |
|
|
OperateTypeNone ,
|
75 |
|
|
OperateTypeOther
|
76 |
|
|
};
|
77 |
|
|
|
78 |
|
|
enum INFO_TYPE
|
79 |
|
|
{
|
80 |
|
|
infoTypeScanChainStructure = 0 ,
|
81 |
|
|
infoTypeModuleStructure,
|
82 |
|
|
infoTypeTreeStructure ,
|
83 |
|
|
infoTypeFileInfo ,
|
84 |
|
|
infoTypeOther
|
85 |
|
|
};
|
86 |
|
|
|
87 |
|
|
struct LOG_FILE_INFO
|
88 |
|
|
{
|
89 |
|
|
char ainfoName[128] ;
|
90 |
|
|
void *pinfo ;
|
91 |
|
|
INFO_TYPE etype ;
|
92 |
|
|
};
|
93 |
|
|
|
94 |
|
|
enum FILE_UPDATE_TYPE
|
95 |
|
|
{
|
96 |
|
|
addedUpdateFileType = 0 ,
|
97 |
|
|
deletedUpdateFileType ,
|
98 |
|
|
changedUpdateFileType ,
|
99 |
|
|
otherUpdateFileType
|
100 |
|
|
};
|
101 |
|
|
|
102 |
|
|
enum SCAN_TYPE
|
103 |
|
|
{
|
104 |
|
|
partScanType = 0 ,
|
105 |
|
|
fullScanType ,
|
106 |
|
|
otherScabType
|
107 |
|
|
};
|
108 |
|
|
|
109 |
|
|
|
110 |
|
|
EziDebugPrj(int maxregnum , QString projectdir , TOOL tool = ToolQuartus ,QObject * parent = 0);
|
111 |
|
|
~EziDebugPrj();
|
112 |
|
|
|
113 |
|
|
const TOOL &getToolType(void) const;
|
114 |
|
|
const int &getMaxRegNumPerChain(void) const;
|
115 |
|
|
const QDir &getCurrentDir(void) const ;
|
116 |
|
|
bool getSoftwareXilinxErrCheckedFlag(void) ;
|
117 |
|
|
QString getTopModule(void);
|
118 |
|
|
UpdateDetectThread * getThread(void) const ;
|
119 |
|
|
bool getLogFileExistFlag(void) ;
|
120 |
|
|
const QMap<QString,EziDebugScanChain*> &getScanChainInfo(void) const ;
|
121 |
|
|
const QMap<QString,EziDebugInstanceTreeItem*> &getChainTreeItemMap(void) const ;
|
122 |
|
|
const QMap<QString,EziDebugInstanceTreeItem*> &getBackupChainTreeItemMap(void) const ;
|
123 |
|
|
const QMap<QString,EziDebugScanChain*> &getBackupChainMap(void) const ;
|
124 |
|
|
|
125 |
|
|
const QStringList &getPrjCodeFileNameList(void) const ;
|
126 |
|
|
const QStringList &getUpdateFileList(FILE_UPDATE_TYPE fileupdatetype) const;
|
127 |
|
|
const QStringList &getFileNameList(void) const ;
|
128 |
|
|
const QString &getPrjName(void) const ;
|
129 |
|
|
OPERATE_TYPE getLastOperation(void) ;
|
130 |
|
|
int getPermittedRegNum(void) ;
|
131 |
|
|
EziDebugScanChain* getLastOperateChain(void) ;
|
132 |
|
|
EziDebugInstanceTreeItem* getLastOperateTreeItem(void) ;
|
133 |
|
|
|
134 |
|
|
const QMap<QString,EziDebugModule*> &getPrjModuleMap(void) const ;
|
135 |
|
|
const QMap<QString,EziDebugVlgFile*> &getPrjVlgFileMap(void) const ;
|
136 |
|
|
const QMap<QString,EziDebugVhdlFile*> &getPrjVhdlFileMap(void) const ;
|
137 |
|
|
|
138 |
|
|
|
139 |
|
|
int eliminateLastOperation(void) ;
|
140 |
|
|
int eliminateFile(const QString &filename,QList<LOG_FILE_INFO*> &infolist) ;
|
141 |
|
|
int addFile(const QString &filename,SCAN_TYPE type,QList<LOG_FILE_INFO*> &infolist);
|
142 |
|
|
|
143 |
|
|
void addToModuleMap(const QString &modoule,EziDebugModule *pmodule);
|
144 |
|
|
void addToDestroyedChainList(const QString& chainname);
|
145 |
|
|
void addToCheckedChainList(const QString& chainname) ;
|
146 |
|
|
QStringList checkChainExist(void) ; // EziDebug 添加的代码位置变动 记录
|
147 |
|
|
const QStringList &getDestroyedChainList(void) const ;
|
148 |
|
|
const QStringList &getCheckedChainList(void) const ;
|
149 |
|
|
void clearupDestroyedChainList(void) ;
|
150 |
|
|
void clearupCheckedChainList(void) ;
|
151 |
|
|
QStringList deleteDestroyedChain(QList<LOG_FILE_INFO*> &addedinfoList,QList<LOG_FILE_INFO*> &deletedinfoList);
|
152 |
|
|
|
153 |
|
|
|
154 |
|
|
int setToolType(TOOL tool);
|
155 |
|
|
int setMaxRegNumPerChain(int num);
|
156 |
|
|
void setLogFileExistFlag(bool flag);
|
157 |
|
|
void setXilinxErrCheckedFlag(bool flag) ;
|
158 |
|
|
void setLogFileName(const QString& filename);
|
159 |
|
|
void setMaxRegWidth(int width) ;
|
160 |
|
|
void setLogfileDestroyedFlag(bool flag) ;
|
161 |
|
|
bool getLogfileDestroyedFlag(void) ;
|
162 |
|
|
|
163 |
|
|
bool isPrjFileExist(void) ;
|
164 |
|
|
void preModifyPrjFile(void);
|
165 |
|
|
int parsePrjFile(QMap<QString,EziDebugVlgFile*> &vlgFileMap , QMap<QString,EziDebugVhdlFile*> &vhdlFileMap) ;
|
166 |
|
|
void checkDelFile(QMap<QString,EziDebugVlgFile*> &vlgFileMap , QMap<QString,EziDebugVhdlFile*> &vhdlFileMap,QList<LOG_FILE_INFO*> &deleteinfolist);
|
167 |
|
|
int traverseAllCodeFile(EziDebugPrj::SCAN_TYPE type , const QMap<QString,EziDebugVlgFile*> &vlgFileMap ,const QMap<QString,EziDebugVhdlFile*> &vhdlFileMap ,QList<LOG_FILE_INFO*> &addedinfoList,QList<LOG_FILE_INFO*> &deletedinfoList);
|
168 |
|
|
void updateFileMap(const QMap<QString,EziDebugVlgFile*> &vlgFileMap ,const QMap<QString,EziDebugVhdlFile*> &vhdlFileMap);
|
169 |
|
|
int detectLogFile(char nreadFlag);
|
170 |
|
|
int updatePrjAllFile(const QStringList& addfilelist,const QStringList& delfilelist,const QStringList& chgfilelist ,QList<LOG_FILE_INFO*>& addinfolist , QList<LOG_FILE_INFO*> &deleteinfolist ,bool updateFlag);
|
171 |
|
|
void preupdateProgressBar(bool updateflag ,int value);
|
172 |
|
|
void compareFileList(const QStringList& newfilelist , QStringList& addFileList , QStringList &delFileList , QStringList &chgFileList);
|
173 |
|
|
|
174 |
|
|
|
175 |
|
|
void addToChainMap(EziDebugScanChain* chain);
|
176 |
|
|
void addToTreeItemMap(const QString &chain ,EziDebugInstanceTreeItem* item);
|
177 |
|
|
void addToQueryItemMap(const QString &name ,EziDebugInstanceTreeItem* item);
|
178 |
|
|
void addToMacroMap(void) ;
|
179 |
|
|
const QMap<QString,QString> &getMacroMap(void) const;
|
180 |
|
|
|
181 |
|
|
void addToDefparameterMap(void);
|
182 |
|
|
QMap<QString,QString> getdefparam(const QString &instancename);
|
183 |
|
|
EziDebugInstanceTreeItem* getQueryItem(const QString &name);
|
184 |
|
|
void updateTreeItem(EziDebugInstanceTreeItem* item) ;
|
185 |
|
|
|
186 |
|
|
void eliminateChainFromMap(const QString &chain);
|
187 |
|
|
void eliminateTreeItemFromMap(const QString &chain);
|
188 |
|
|
void eliminateTreeItemFromQueryMap(const QString &combinedname) ;
|
189 |
|
|
|
190 |
|
|
void backupChainQueryTreeItemMap(void);
|
191 |
|
|
void backupChainTreeItemMap(void);
|
192 |
|
|
void backupChainMap(void);
|
193 |
|
|
|
194 |
|
|
void cleanupChainMap(void);
|
195 |
|
|
|
196 |
|
|
void cleanupBakChainTreeItemMap(void) ;
|
197 |
|
|
void cleanupChainTreeItemMap(void) ;
|
198 |
|
|
void cleanupChainQueryTreeItemMap(void) ;
|
199 |
|
|
void cleanupBakChainQueryTreeItemMap(void) ;
|
200 |
|
|
|
201 |
|
|
|
202 |
|
|
|
203 |
|
|
void resumeChainMap(void);
|
204 |
|
|
void resumeChainTreeItemMap(void) ;
|
205 |
|
|
void resumeChainQueryTreeItemMap(void) ;
|
206 |
|
|
|
207 |
|
|
|
208 |
|
|
int domParseModuleInfoElement(const QDomElement &element, char readflag) ;
|
209 |
|
|
int domParseModuleStructure(const QDomElement &element, char readflag, EziDebugModule* module) ;
|
210 |
|
|
int domParseClockDescriptionElement(const QDomElement &element, char readflag, EziDebugModule* module) ;
|
211 |
|
|
int domParseRegDescriptionElement(const QDomElement &element,char readflag, EziDebugModule* module) ;
|
212 |
|
|
int domParsePortDescriptionElement(const QDomElement &element,char readflag, EziDebugModule* module) ;
|
213 |
|
|
int domParseInstancePortMapDescriptionElement(const QDomElement &element,char readflag, EziDebugModule* module) ;
|
214 |
|
|
|
215 |
|
|
int domParseClockStructure(const QDomElement &element, char readflag , EziDebugModule* module);
|
216 |
|
|
int domParseRegStructure(const QDomElement &element, char readflag , EziDebugModule* module);
|
217 |
|
|
int domParsePortStructure(const QDomElement &element, char readflag , EziDebugModule* module);
|
218 |
|
|
|
219 |
|
|
|
220 |
|
|
int domParseScanChainInfoElement(const QDomElement &element,char readflag) ;
|
221 |
|
|
int domParseScanChainStructure(const QDomElement &element,char readflag, EziDebugScanChain *chain);
|
222 |
|
|
int domParseReglistDescriptionElement(const QDomElement &element,char readflag, EziDebugScanChain *chain);
|
223 |
|
|
// int domParseReglistStructure(const QDomElement &element,char readflag, EziDebugScanChain *chain);
|
224 |
|
|
|
225 |
|
|
int domParseCodeDescriptionElement(const QDomElement &element,char readflag, EziDebugScanChain *chain);
|
226 |
|
|
// int domParseCodeStructure(const QDomElement &element,char readflag, EziDebugScanChain *chain) ;
|
227 |
|
|
|
228 |
|
|
int readModuleStructure(char readflag) ;
|
229 |
|
|
int readClockStructure(char readflag , EziDebugModule* module);
|
230 |
|
|
int readRegStructure(char readflag , EziDebugModule* module);
|
231 |
|
|
int readPortStructure(char readflag , EziDebugModule* module);
|
232 |
|
|
|
233 |
|
|
int generateTreeView(void) ;
|
234 |
|
|
int traverseModuleTree(const QString &module,EziDebugInstanceTreeItem* item);
|
235 |
|
|
|
236 |
|
|
EziDebugInstanceTreeItem * getInstanceTreeHeadItem(void);
|
237 |
|
|
void setInstanceTreeHeadItem(EziDebugInstanceTreeItem *item);
|
238 |
|
|
|
239 |
|
|
int resumeDataFromFile(void);
|
240 |
|
|
|
241 |
|
|
void updateOperation(OPERATE_TYPE type, EziDebugScanChain* chain,EziDebugInstanceTreeItem* item);
|
242 |
|
|
|
243 |
|
|
int changedLogFile(const QList<LOG_FILE_INFO*>& addlist, const QList<LOG_FILE_INFO*> &deletelist);
|
244 |
|
|
int saveInfoToLogFile(QDomDocument &idoc, LOG_FILE_INFO* loginfo);
|
245 |
|
|
int deleteLogFileElement(QDomDocument &idoc ,LOG_FILE_INFO* loginfo);
|
246 |
|
|
|
247 |
|
|
int createLogFile(void);
|
248 |
|
|
|
249 |
|
|
int createCfgFile(EziDebugInstanceTreeItem * item) ;
|
250 |
|
|
|
251 |
|
|
int chkEziDebugFileInvolved() ;
|
252 |
|
|
QString constructCfgInstanceString(EziDebugInstanceTreeItem * item) ;
|
253 |
|
|
//void constructIlaunitString(int &unitnumber,int ®width, QString &triggerChannelString ,QString &ilaString ,bool forceflag) ;
|
254 |
|
|
|
255 |
|
|
|
256 |
|
|
int parseQuartusPrjFile(QMap<QString,EziDebugVlgFile*> &vlgFileMap ,QMap<QString,EziDebugVhdlFile*> &vhdlFileMap);
|
257 |
|
|
int parseQuartusPrjFile(QStringList &filelist);
|
258 |
|
|
int parseIsePrjFile(QMap<QString,EziDebugVlgFile*> &vlgFileMap ,QMap<QString,EziDebugVhdlFile*> &vhdlFileMap);
|
259 |
|
|
int parseIsePrjFile(QStringList &filelist);
|
260 |
|
|
|
261 |
|
|
void deleteAllEziDebugCode(const QMap<QString,EziDebugVlgFile*> &vlgFileMap ,const QMap<QString,EziDebugVhdlFile*> &vhdlFileMap);
|
262 |
|
|
|
263 |
|
|
friend void UpdateDetectThread::update();
|
264 |
|
|
signals:
|
265 |
|
|
void displayMessage(QStringList message);
|
266 |
|
|
void updateProgressBar(int value) ;
|
267 |
|
|
|
268 |
|
|
private slots:
|
269 |
|
|
int updateCodeFile();
|
270 |
|
|
|
271 |
|
|
// 什么时候可以启用线程开始 检测更新文件
|
272 |
|
|
|
273 |
|
|
// 1、默认路径 ok 并且 恢复完 数据结构之后 开始启用线程
|
274 |
|
|
// 2、全部更新 完成之后 并且 写完 log 文件之后 开始启用线程 检测更新
|
275 |
|
|
|
276 |
|
|
// 什么时候暂停 检测更新文件
|
277 |
|
|
// 1、线程检测到有更新的文件之后 发送信号 到主线程,主线程 开始扫描更新文件时 暂停检测,扫描完之后,开启扫描
|
278 |
|
|
private:
|
279 |
|
|
QStringList m_iCodefileNameList ;
|
280 |
|
|
QString m_iprjName ;
|
281 |
|
|
QDir m_iprjPath ;
|
282 |
|
|
int m_nmaxRegNumInChain ;
|
283 |
|
|
TOOL m_eusedTool ;
|
284 |
|
|
QString m_itoolSoftwareVersion ;
|
285 |
|
|
QString m_icoreLangType ;
|
286 |
|
|
bool m_isLogFileExist ;
|
287 |
|
|
int m_ipermettedMaxRegNum ;
|
288 |
|
|
int m_imaxRegWidth ;
|
289 |
|
|
bool m_isDisXilinxErrChecked ;
|
290 |
|
|
bool m_isUpdated ;
|
291 |
|
|
|
292 |
|
|
UpdateDetectThread* m_pthread ;
|
293 |
|
|
QXmlStreamReader m_ireader ;
|
294 |
|
|
QStack<QString> m_ielementStack ;
|
295 |
|
|
QMap<QString,EziDebugVlgFile*> m_ivlgFileMap ;
|
296 |
|
|
QMap<QString,EziDebugVhdlFile*> m_ivhdlFileMap ;
|
297 |
|
|
QMap<QString,QString> m_iupdateTimeOfFile ;
|
298 |
|
|
QString m_itopModule ;
|
299 |
|
|
QStringList m_iwaveFileList ;
|
300 |
|
|
QMap<QString,EziDebugModule*> m_imoduleMap ;
|
301 |
|
|
QMap<QString,EziDebugInstanceTreeItem*> m_ichainTreeItemMap ; // 待后面不用的话 可以删除
|
302 |
|
|
QMap<QString,EziDebugInstanceTreeItem*> m_ibackupChainTreeItemMap ;
|
303 |
|
|
QMap<QString,EziDebugInstanceTreeItem*> m_iqueryTreeItemMap ; // 用于 根据 modue:instance 查询 插入链的头节点
|
304 |
|
|
QMap<QString,EziDebugInstanceTreeItem*> m_ibackupQueryTreeItemMap ; // 用于 根据 modue:instance 查询 插入链的头节点
|
305 |
|
|
|
306 |
|
|
QMap<QString,EziDebugScanChain*> m_ichainInfoMap ;
|
307 |
|
|
QMap<QString,EziDebugScanChain*> m_ibackupChainInfoMap ;
|
308 |
|
|
|
309 |
|
|
QString m_ilogFileName ;
|
310 |
|
|
bool m_isLogFileDestroyed ;
|
311 |
|
|
EziDebugInstanceTreeItem* m_headItem ;
|
312 |
|
|
QStringList m_iupdateDeletedFileList ;
|
313 |
|
|
QStringList m_iupdateAddedFileList ;
|
314 |
|
|
QStringList m_iupdateChangedFileList ;
|
315 |
|
|
|
316 |
|
|
OPERATE_TYPE m_elastOperation ;
|
317 |
|
|
EziDebugScanChain* m_pLastOperateChain ;
|
318 |
|
|
EziDebugInstanceTreeItem* m_pLastOperteTreeItem ;
|
319 |
|
|
QStringList m_idestroyedChain ; // 用于扫描文件时,记录被破坏的扫描链
|
320 |
|
|
QStringList m_icheckedChain ; // 用于扫描发生变化的文件时,记录扫描到了链
|
321 |
|
|
|
322 |
|
|
QMap<QString,QString> m_imacro ; // 全局保存 defparameter
|
323 |
|
|
QMap<QString,QMap<QString,QString> > m_idefparameter ; // 全局保存 define
|
324 |
|
|
|
325 |
|
|
|
326 |
|
|
|
327 |
|
|
int domParseEziDebugElement(const QDomElement &element, char readflag) ;
|
328 |
|
|
int domParseFileInfoElement(const QDomElement &element, char readflag) ;
|
329 |
|
|
int domParseFileStructure(const QDomElement &element, char readflag) ;
|
330 |
|
|
|
331 |
|
|
|
332 |
|
|
int readFileInfo(char readflag) ;
|
333 |
|
|
int readFileStructure(char readflag) ;
|
334 |
|
|
|
335 |
|
|
int readModuleInfo(char readflag) ;
|
336 |
|
|
|
337 |
|
|
int readClockDescription(char readflag, EziDebugModule* module) ;
|
338 |
|
|
|
339 |
|
|
int readRegDescription(char readflag, EziDebugModule* module) ;
|
340 |
|
|
|
341 |
|
|
int readPortDescription(char readflag, EziDebugModule* module) ;
|
342 |
|
|
|
343 |
|
|
int readScanChainInfo(char readflag) ;
|
344 |
|
|
|
345 |
|
|
|
346 |
|
|
};
|
347 |
|
|
|
348 |
|
|
#endif // EZIDEBUGPRJ_H
|