gfativaflash.cpp 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208
  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. #include <string>
  4. #include <regex>
  5. #include "gfativaflash.h"
  6. #define _TEST_VERBOSITY(v, n) (((v) == -1) && ((n) <= 2)) || (((v) >= 0) && ((v) >= (n)))
  7. /////////////////////////////////////////////////////////////////////////////
  8. #if 0
  9. static std::string _formatString(const char *fmt, ...)
  10. {
  11. int n;
  12. std::string s;
  13. char *p = NULL;
  14. va_list ap;
  15. va_start(ap, fmt);
  16. n = ::vasprintf(&p, fmt, ap);
  17. va_end(ap);
  18. if(n >= 0)
  19. {
  20. s = p;
  21. free(p);
  22. }
  23. return s;
  24. }
  25. #endif
  26. /////////////////////////////////////////////////////////////////////////////
  27. TivaFlash::TivaFlash(QObject *pParent) : QObject(pParent),
  28. m_nExitCode(0),
  29. m_slvIdIsNodeAddr(false),
  30. m_verbosity(-1),
  31. m_bExecuting(false),
  32. m_xBaudRate(0),
  33. m_curSlvID(0),
  34. m_appAddress(0),
  35. m_blockSize(0),
  36. m_pageEraseTime(0),
  37. m_mbCtrlRegister(0),
  38. m_forceAllParities(false),
  39. m_imgSizeFile(0),
  40. m_imgCRC32File(0.0),
  41. m_imgUpldProg(this),
  42. m_qProcess(this)
  43. {
  44. setObjectName("TivaFlash");
  45. for(int i = 0; i < _MAX_SLAVE_COUNT; i++)
  46. {
  47. m_materialEeprom.append("");
  48. m_serialEeprom.append("");
  49. m_imgSizeBoot.append(0);
  50. m_imgCRC32Boot.append(0.0);
  51. m_imgMaterialBoot.append("");
  52. m_imgBuildBoot.append("");
  53. m_imgSizeApp.append(0);
  54. m_imgCRC32App.append(0.0);
  55. m_imgMaterialApp.append("");
  56. m_imgBuildApp.append("");
  57. }
  58. connect(&m_qProcess, SIGNAL(started()), SLOT(onProcessStarted()));
  59. connect(&m_qProcess, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(onProcessFinished(int, QProcess::ExitStatus)));
  60. connect(&m_qProcess, SIGNAL(readyReadStandardOutput()), SLOT(onProcessReadyReadStandardOutput()));
  61. connect(&m_qProcess, SIGNAL(stateChanged(QProcess::ProcessState)), SLOT(onProcessStateChanged(QProcess::ProcessState)));
  62. m_qProcess.setProcessChannelMode(QProcess::MergedChannels);
  63. }
  64. TivaFlash::~TivaFlash(void)
  65. {
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. void TivaFlash::onProcessStarted(void)
  69. {
  70. setExecuting(true);
  71. emit processStarted(m_curSlvID);
  72. }
  73. void TivaFlash::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus)
  74. {
  75. setExecuting(false);
  76. emit processFinished(m_curSlvID, exitCode, exitStatus == QProcess::ExitStatus::NormalExit);
  77. }
  78. void TivaFlash::onProcessReadyReadStandardOutput(void)
  79. {
  80. char szLine[256];
  81. while(m_qProcess.readLine(szLine, sizeof(szLine)) > 0)
  82. {
  83. onCmdOutput(m_curSlvID, szLine);
  84. }
  85. }
  86. void TivaFlash::onProcessStateChanged(QProcess::ProcessState newState)
  87. {
  88. setExecuting(newState != QProcess::ProcessState::NotRunning);
  89. }
  90. /////////////////////////////////////////////////////////////////////////////
  91. #if 0
  92. bool TivaFlash::execFlashUtil(int nSlvID, const char *pszOpt)
  93. {
  94. FILE* pd;
  95. char buffer[256];
  96. m_nExitCode = -1;
  97. std::string strCmd = _formatString("\"%s\" %s --plugin-mode 2>&1", m_tivaFlashUtilPath.c_str(), pszOpt);
  98. if((pd = popen(strCmd.c_str(), "r")))
  99. {
  100. while(fgets(buffer, sizeof buffer, pd))
  101. {
  102. onCmdOutput(nSlvID, buffer);
  103. }
  104. pclose(pd);
  105. }
  106. return m_nExitCode == 0;
  107. }
  108. /////////////////////////////////////////////////////////////////////////////
  109. std::string TivaFlash::getSlavIDs(int nSlvID, int nMbID) const
  110. {
  111. std::string ret;
  112. if(m_slvIdIsNodeAddr)
  113. ret = _formatString("--node-addr=%d", nSlvID);
  114. else
  115. ret = _formatString("--stat-num=%d", nSlvID);
  116. if(_IS_VALID_MB_ID(nMbID))
  117. ret += _formatString(" --mb-slave-id=%d", nMbID);
  118. return ret;
  119. }
  120. #endif
  121. void TivaFlash::getSlavIDs(int nSlvID, int nMbID, QStringList &rargs) const
  122. {
  123. std::string ret;
  124. if(m_slvIdIsNodeAddr)
  125. rargs << QString::asprintf("--node-addr=%d", nSlvID);
  126. else
  127. rargs << QString::asprintf("--stat-num=%d", nSlvID);
  128. if(_IS_VALID_MB_ID(nMbID))
  129. {
  130. rargs << QString::asprintf("--mb-slave-id=%d", nMbID);
  131. if(m_mbCtrlRegister > 0)
  132. rargs << QString::asprintf("--mb-bl-ctrl-reg=%d", m_mbCtrlRegister);
  133. }
  134. }
  135. /////////////////////////////////////////////////////////////////////////////
  136. void TivaFlash::getXBaud(QStringList &rargs) const
  137. {
  138. if(m_xBaudRate > 0)
  139. {
  140. rargs << QString::asprintf("--x-baud-rate=%d", m_xBaudRate);
  141. }
  142. }
  143. /////////////////////////////////////////////////////////////////////////////
  144. void TivaFlash::getAppAddr(QStringList &rargs) const
  145. {
  146. if(m_appAddress > 0)
  147. {
  148. rargs << QString::asprintf("--app-addr=0x%X", m_appAddress);
  149. }
  150. }
  151. /////////////////////////////////////////////////////////////////////////////
  152. void TivaFlash::getBlockSize(QStringList &rargs) const
  153. {
  154. if(m_blockSize > 0)
  155. {
  156. rargs << QString::asprintf("--block-size=%d", m_blockSize);
  157. }
  158. }
  159. /////////////////////////////////////////////////////////////////////////////
  160. void TivaFlash::getPageEraseTime(QStringList &rargs) const
  161. {
  162. if(m_pageEraseTime > 0)
  163. {
  164. rargs << QString::asprintf("--page-erase-time=%d", m_pageEraseTime);
  165. }
  166. }
  167. /////////////////////////////////////////////////////////////////////////////
  168. void TivaFlash::getForceAllParities(QStringList &rargs) const
  169. {
  170. if(m_forceAllParities)
  171. {
  172. rargs << QString::asprintf("--force-all-par");
  173. }
  174. }
  175. /////////////////////////////////////////////////////////////////////////////
  176. int TivaFlash::parseTaggedString(const char *pszIn, std::string &sOut) const
  177. {
  178. static const std::string strRegEx = "<([0-9]+)>(.+)<\\/\\1>";
  179. static std::regex reg(strRegEx, std::regex_constants::ECMAScript | std::regex_constants::optimize);
  180. std::cmatch res;
  181. if(pszIn && *pszIn)
  182. {
  183. try
  184. {
  185. if(regex_search(pszIn, res, reg))
  186. {
  187. size_t nSize = res.size();
  188. if(nSize == 3)
  189. {
  190. std::string strTagName = res[1].str();
  191. sOut = res[2].str();
  192. return atoi(strTagName.c_str());
  193. }
  194. }
  195. }
  196. catch(...)
  197. {
  198. }
  199. }
  200. return -1;
  201. }
  202. /////////////////////////////////////////////////////////////////////////////
  203. int TivaFlash::parseTaggedValues(const char *pszIn, int &rnVal1, int &rnVal2) const
  204. {
  205. static const std::string strRegEx = "([0-9]+)\\|([0-9]+)";
  206. static std::regex reg(strRegEx, std::regex_constants::ECMAScript | std::regex_constants::optimize);
  207. std::cmatch res;
  208. if(pszIn && *pszIn)
  209. {
  210. try
  211. {
  212. if(regex_search(pszIn, res, reg))
  213. {
  214. size_t nSize = res.size();
  215. if(nSize == 3)
  216. {
  217. rnVal1 = atoi(res[1].str().c_str());
  218. rnVal2 = atoi(res[2].str().c_str());
  219. return nSize - 1;
  220. }
  221. }
  222. }
  223. catch(...)
  224. {
  225. }
  226. }
  227. return -1;
  228. }
  229. /////////////////////////////////////////////////////////////////////////////
  230. void TivaFlash::onCmdOutput(int nSlvID, const char *pszOut)
  231. {
  232. std::string s;
  233. int nTag = parseTaggedString(pszOut, s);
  234. int nVal1, nVal2;
  235. if(nTag >= 0)
  236. {
  237. QString qs = QString::fromStdString(s);
  238. switch(nTag)
  239. {
  240. /////////////////////////////////////////////////////////////////////
  241. case PLUGIN_TAG_EXIT_CODE:
  242. m_nExitCode = qs.toInt();
  243. break;
  244. /////////////////////////////////////////////////////////////////////
  245. case PLUGIN_TAG_STATUS:
  246. if(_TEST_VERBOSITY(m_verbosity, PLUGIN_TAG_STATUS))
  247. emit processOutput(nSlvID, nTag, qs);
  248. break;
  249. case PLUGIN_TAG_INFO:
  250. if(_TEST_VERBOSITY(m_verbosity, PLUGIN_TAG_INFO))
  251. emit processOutput(nSlvID, nTag, qs);
  252. break;
  253. case PLUGIN_TAG_ERROR:
  254. if(_TEST_VERBOSITY(m_verbosity, PLUGIN_TAG_ERROR))
  255. emit processOutput(nSlvID, nTag, qs);
  256. break;
  257. /////////////////////////////////////////////////////////////////////
  258. case PLUGIN_TAG_IMG_MATERIAL_EEPROM:
  259. setMaterialEeprom(nSlvID, qs);
  260. break;
  261. case PLUGIN_TAG_IMG_SERIAL_EEPROM:
  262. setSerialEeprom(nSlvID, qs);
  263. break;
  264. /////////////////////////////////////////////////////////////////////
  265. case PLUGIN_TAG_IMG_LENGTH_BOOT:
  266. setImgSizeBoot(nSlvID, qs.toUInt());
  267. break;
  268. case PLUGIN_TAG_IMG_CRC32_BOOT:
  269. setImgCRC32Boot(nSlvID, qs.toDouble());
  270. break;
  271. case PLUGIN_TAG_IMG_BUILD_BOOT:
  272. setImgBuildBoot(nSlvID, qs);
  273. break;
  274. case PLUGIN_TAG_IMG_MATERIAL_BOOT:
  275. setImgMaterialBoot(nSlvID, qs);
  276. break;
  277. /////////////////////////////////////////////////////////////////////
  278. case PLUGIN_TAG_IMG_LENGTH_APP:
  279. setImgSizeApp(nSlvID, qs.toUInt());
  280. break;
  281. case PLUGIN_TAG_IMG_CRC32_APP:
  282. setImgCRC32App(nSlvID, qs.toDouble());
  283. break;
  284. case PLUGIN_TAG_IMG_MATERIAL_APP:
  285. setImgBuildApp(nSlvID, qs);
  286. break;
  287. case PLUGIN_TAG_IMG_BUILD_APP:
  288. setImgMaterialApp(nSlvID, qs);
  289. break;
  290. /////////////////////////////////////////////////////////////////////
  291. case PLUGIN_TAG_IMG_LENGTH_FILE:
  292. setImgSizeFile(qs.toUInt());
  293. break;
  294. case PLUGIN_TAG_IMG_CRC32_FILE:
  295. setImgCRC32File(qs.toDouble());
  296. break;
  297. case PLUGIN_TAG_IMG_MATERIAL_FILE:
  298. setImgMaterialFile(qs);
  299. break;
  300. case PLUGIN_TAG_IMG_BUILD_FILE:
  301. setImgBuildFile(qs);
  302. break;
  303. /////////////////////////////////////////////////////////////////////
  304. case PLUGIN_TAG_UPLOAD_START_ERASE_FLASH:
  305. m_imgUpldProg.clear();
  306. m_imgUpldProg.setCtx(ImgUploadStatus::EraseFlashStart);
  307. if(parseTaggedValues(s.c_str(), nVal1, nVal2) == 2)
  308. {
  309. m_imgUpldProg.setUploadInProgress(true);
  310. m_imgUpldProg.setCntFlashPages(nVal1);
  311. m_imgUpldProg.setCbTotal(nVal2);
  312. emit imgUploadProgress(&m_imgUpldProg);
  313. }
  314. break;
  315. case PLUGIN_TAG_UPLOAD_END_ERASE_FLASH:
  316. m_imgUpldProg.setCtx(ImgUploadStatus::EraseFlashEnd);
  317. emit imgUploadProgress(&m_imgUpldProg);
  318. break;
  319. case PLUGIN_TAG_UPLOAD_BLOCKS_START:
  320. m_imgUpldProg.setCtx(ImgUploadStatus::ImgUploadStart);
  321. m_imgUpldProg.setCbBlock(qs.toInt());
  322. emit imgUploadProgress(&m_imgUpldProg);
  323. break;
  324. case PLUGIN_TAG_UPLOAD_BLOCK:
  325. m_imgUpldProg.setCtx(ImgUploadStatus::ImgUploadBlock);
  326. if(parseTaggedValues(s.c_str(), nVal1, nVal2) == 2)
  327. {
  328. int nCbTotal = m_imgUpldProg.cbTotal();
  329. int nCbSent = nVal1;
  330. m_imgUpldProg.setCbSent(nCbSent);
  331. if(nCbTotal)
  332. m_imgUpldProg.setPercentSent(nCbSent * 100 / nCbTotal);
  333. m_imgUpldProg.SetBlockNr(nVal2);
  334. emit imgUploadProgress(&m_imgUpldProg);
  335. }
  336. break;
  337. case PLUGIN_TAG_UPLOAD_BLOCKS_END:
  338. m_imgUpldProg.setCtx(ImgUploadStatus::ImgUploadSuccess);
  339. m_imgUpldProg.setErrorCode(0);
  340. m_imgUpldProg.setUploadInProgress(false);
  341. emit imgUploadProgress(&m_imgUpldProg);
  342. break;
  343. case PLUGIN_TAG_UPLOAD_ERROR:
  344. m_imgUpldProg.setCtx(ImgUploadStatus::ImgUploadError);
  345. m_imgUpldProg.setErrorCode(qs.toInt());
  346. m_imgUpldProg.setUploadInProgress(false);
  347. emit imgUploadProgress(&m_imgUpldProg);
  348. break;
  349. }
  350. }
  351. }
  352. /////////////////////////////////////////////////////////////////////////////
  353. /////////////////////////////////////////////////////////////////////////////
  354. /////////////////////////////////////////////////////////////////////////////
  355. bool TivaFlash::getMatSer(int nSlvID, int nMbID)
  356. {
  357. if(m_bExecuting)
  358. return false;
  359. if(!_IS_VALID_SLV_ID(nSlvID))
  360. return false;
  361. m_curSlvID = nSlvID;
  362. setMaterialEeprom(nSlvID, "");
  363. setSerialEeprom(nSlvID, "");
  364. QStringList args;
  365. args << "--show-mat-ser";
  366. args << QString::asprintf("--itf-name=%s", m_itfName.c_str());
  367. getSlavIDs(nSlvID, nMbID, args);
  368. getForceAllParities(args);
  369. args << "--plugin-mode";
  370. m_qProcess.start(QString::fromStdString(m_tivaFlashUtilPath), args, QIODevice::ReadOnly);
  371. return true;
  372. }
  373. bool TivaFlash::getTargetImgInfo(int nSlvID, int nMbID)
  374. {
  375. if(m_bExecuting)
  376. return false;
  377. if(!_IS_VALID_SLV_ID(nSlvID))
  378. return false;
  379. m_curSlvID = nSlvID;
  380. setImgSizeBoot(nSlvID, 0);
  381. setImgCRC32Boot(nSlvID, 0.0);
  382. setImgMaterialBoot(nSlvID, "");
  383. setImgBuildBoot(nSlvID, "");
  384. setImgSizeApp(nSlvID, 0);
  385. setImgCRC32App(nSlvID, 0.0);
  386. setImgMaterialApp(nSlvID, "");
  387. setImgBuildApp(nSlvID, "");
  388. QStringList args;
  389. args << "--show-dev-img-info";
  390. args << QString::asprintf("--itf-name=%s", m_itfName.c_str());
  391. getSlavIDs(nSlvID, nMbID, args);
  392. getXBaud(args);
  393. getAppAddr(args);
  394. getForceAllParities(args);
  395. args << "--plugin-mode";
  396. m_qProcess.start(QString::fromStdString(m_tivaFlashUtilPath), args, QIODevice::ReadOnly);
  397. return true;
  398. }
  399. bool TivaFlash::pingTarget(int nSlvID, int nMbID)
  400. {
  401. if(m_bExecuting)
  402. return false;
  403. if(!_IS_VALID_SLV_ID(nSlvID))
  404. return false;
  405. m_curSlvID = nSlvID;
  406. QStringList args;
  407. args << "--ping-target";
  408. args << QString::asprintf("--itf-name=%s", m_itfName.c_str());
  409. getSlavIDs(nSlvID, nMbID, args);
  410. getForceAllParities(args);
  411. args << "--plugin-mode";
  412. m_qProcess.start(QString::fromStdString(m_tivaFlashUtilPath), args, QIODevice::ReadOnly);
  413. return true;
  414. }
  415. bool TivaFlash::startBootloader(int nSlvID, int nMbID)
  416. {
  417. if(m_bExecuting)
  418. return false;
  419. if(!_IS_VALID_SLV_ID(nSlvID))
  420. return false;
  421. m_curSlvID = nSlvID;
  422. QStringList args;
  423. args << "--start-boot";
  424. args << QString::asprintf("--itf-name=%s", m_itfName.c_str());
  425. getSlavIDs(nSlvID, nMbID, args);
  426. getForceAllParities(args);
  427. args << "--plugin-mode";
  428. m_qProcess.start(QString::fromStdString(m_tivaFlashUtilPath), args, QIODevice::ReadOnly);
  429. return true;
  430. }
  431. bool TivaFlash::resetBootloader(int nSlvID, int nMbID)
  432. {
  433. if(m_bExecuting)
  434. return false;
  435. if(!_IS_VALID_SLV_ID(nSlvID))
  436. return false;
  437. m_curSlvID = nSlvID;
  438. QStringList args;
  439. args << "--reset-boot";
  440. args << QString::asprintf("--itf-name=%s", m_itfName.c_str());
  441. getSlavIDs(nSlvID, nMbID, args);
  442. getForceAllParities(args);
  443. args << "--plugin-mode";
  444. m_qProcess.start(QString::fromStdString(m_tivaFlashUtilPath), args, QIODevice::ReadOnly);
  445. return true;
  446. }
  447. bool TivaFlash::validateImgFile(int nSlvID, int nMbID)
  448. {
  449. if(m_bExecuting)
  450. return false;
  451. if(!_IS_VALID_SLV_ID(nSlvID))
  452. return false;
  453. m_curSlvID = nSlvID;
  454. QStringList args;
  455. args << "--validate-img";
  456. args << QString::asprintf("--itf-name=%s", m_itfName.c_str());
  457. getSlavIDs(nSlvID, nMbID, args);
  458. getAppAddr(args);
  459. getForceAllParities(args);
  460. args << "--plugin-mode";
  461. args << QString::fromStdString(m_imgFile);
  462. m_qProcess.start(QString::fromStdString(m_tivaFlashUtilPath), args, QIODevice::ReadOnly);
  463. return true;
  464. }
  465. bool TivaFlash::uploadImgFile(int nSlvID, int nMbID)
  466. {
  467. if(m_bExecuting)
  468. return false;
  469. if(!_IS_VALID_SLV_ID(nSlvID))
  470. return false;
  471. m_curSlvID = nSlvID;
  472. m_imgUpldProg.clear();
  473. QStringList args;
  474. args << "--upload-img";
  475. args << QString::asprintf("--itf-name=%s", m_itfName.c_str());
  476. getSlavIDs(nSlvID, nMbID, args);
  477. getXBaud(args);
  478. getAppAddr(args);
  479. getBlockSize(args);
  480. getPageEraseTime(args);
  481. getForceAllParities(args);
  482. args << "--plugin-mode";
  483. args << QString::fromStdString(m_imgFile);
  484. m_qProcess.start(QString::fromStdString(m_tivaFlashUtilPath), args, QIODevice::ReadOnly);
  485. return true;
  486. }
  487. bool TivaFlash::clearImgInfo(int nSlvID)
  488. {
  489. if(m_bExecuting)
  490. return false;
  491. if(!_IS_VALID_SLV_ID(nSlvID))
  492. return false;
  493. setImgSizeFile(0);
  494. setImgCRC32File(0);
  495. setImgMaterialFile(0);
  496. setImgBuildFile(0);
  497. if(nSlvID > 0)
  498. {
  499. setMaterialEeprom(nSlvID, "");
  500. setSerialEeprom(nSlvID, "");
  501. setImgSizeBoot(nSlvID, 0);
  502. setImgCRC32Boot(nSlvID, 0);
  503. setImgMaterialBoot(nSlvID, "");
  504. setImgBuildBoot(nSlvID, "");
  505. setImgSizeApp(nSlvID, 0);
  506. setImgCRC32App(nSlvID, 0);
  507. setImgMaterialApp(nSlvID, "");
  508. setImgBuildApp(nSlvID, "");
  509. }
  510. else
  511. {
  512. for(int i = 0; i < _MAX_SLAVE_COUNT; ++i)
  513. {
  514. setMaterialEeprom(i, "");
  515. setSerialEeprom(i, "");
  516. setImgSizeBoot(i, 0);
  517. setImgCRC32Boot(i, 0);
  518. setImgMaterialBoot(i, "");
  519. setImgBuildBoot(i, "");
  520. setImgSizeApp(i, 0);
  521. setImgCRC32App(i, 0);
  522. setImgMaterialApp(i, "");
  523. setImgBuildApp(i, "");
  524. }
  525. }
  526. return true;
  527. }
  528. /////////////////////////////////////////////////////////////////////////////
  529. /////////////////////////////////////////////////////////////////////////////
  530. /////////////////////////////////////////////////////////////////////////////
  531. QString TivaFlash::tivaFlashUtilPath(void) const
  532. {
  533. return QString::fromStdString(m_tivaFlashUtilPath);
  534. }
  535. void TivaFlash::setTivaFlashUtilPath(const QString &val)
  536. {
  537. m_tivaFlashUtilPath = val.toStdString();
  538. }
  539. /////////////////////////////////////////////////////////////////////////////
  540. QString TivaFlash::itfName(void) const
  541. {
  542. return QString::fromStdString(m_itfName);
  543. }
  544. void TivaFlash::setItfName(const QString &val)
  545. {
  546. m_itfName = val.toStdString();
  547. }
  548. /////////////////////////////////////////////////////////////////////////////
  549. bool TivaFlash::slvIdIsNodeAddr(void) const
  550. {
  551. return m_slvIdIsNodeAddr;
  552. }
  553. void TivaFlash::setSlvIdIsNodeAddr(bool val)
  554. {
  555. if(m_slvIdIsNodeAddr != val)
  556. {
  557. m_slvIdIsNodeAddr = val;
  558. }
  559. }
  560. /////////////////////////////////////////////////////////////////////////////
  561. int TivaFlash::verbosity(void) const
  562. {
  563. return m_verbosity;
  564. }
  565. void TivaFlash::setVerbosity(int val)
  566. {
  567. if(val < 0)
  568. val = 0;
  569. else if(val > 3)
  570. val = 3;
  571. if(m_verbosity != val)
  572. {
  573. m_verbosity = val;
  574. }
  575. }
  576. /////////////////////////////////////////////////////////////////////////////
  577. QString TivaFlash::imgFile(void) const
  578. {
  579. return QString::fromStdString(m_imgFile);
  580. }
  581. void TivaFlash::setImgFile(const QString &val)
  582. {
  583. m_imgFile = val.toStdString();
  584. }
  585. /////////////////////////////////////////////////////////////////////////////
  586. bool TivaFlash::executing(void) const
  587. {
  588. return m_bExecuting;
  589. }
  590. void TivaFlash::setExecuting(bool val)
  591. {
  592. if(m_bExecuting != val)
  593. {
  594. m_bExecuting = val;
  595. emit executingChanged(m_bExecuting);
  596. }
  597. }
  598. /////////////////////////////////////////////////////////////////////////////
  599. int TivaFlash::xBaudRate(void) const
  600. {
  601. return m_xBaudRate;
  602. }
  603. void TivaFlash::setXBaudRate(int val)
  604. {
  605. if(m_xBaudRate != val)
  606. {
  607. m_xBaudRate = val;
  608. }
  609. }
  610. /////////////////////////////////////////////////////////////////////////////
  611. int TivaFlash::appAddress(void) const
  612. {
  613. return m_appAddress;
  614. }
  615. void TivaFlash::setAppAddress(int val)
  616. {
  617. if(m_appAddress != val)
  618. {
  619. m_appAddress = val;
  620. }
  621. }
  622. /////////////////////////////////////////////////////////////////////////////
  623. int TivaFlash::blockSize(void) const
  624. {
  625. return m_blockSize;
  626. }
  627. void TivaFlash::setBlockSize(int val)
  628. {
  629. if(m_blockSize != val)
  630. {
  631. m_blockSize = val;
  632. }
  633. }
  634. /////////////////////////////////////////////////////////////////////////////
  635. int TivaFlash::pageEraseTime(void) const
  636. {
  637. return m_pageEraseTime;
  638. }
  639. void TivaFlash::setPageEraseTime(int val)
  640. {
  641. if(m_pageEraseTime != val)
  642. {
  643. m_pageEraseTime = val;
  644. }
  645. }
  646. /////////////////////////////////////////////////////////////////////////////
  647. int TivaFlash::mbCtrlRegister(void) const
  648. {
  649. return m_mbCtrlRegister;
  650. }
  651. void TivaFlash::setMbCtrlRegister(int val)
  652. {
  653. if(m_mbCtrlRegister != val)
  654. {
  655. m_mbCtrlRegister = val;
  656. }
  657. }
  658. /////////////////////////////////////////////////////////////////////////////
  659. bool TivaFlash::forceAllParities(void) const
  660. {
  661. return m_forceAllParities;
  662. }
  663. void TivaFlash::setForceAllParities(bool val)
  664. {
  665. if(m_forceAllParities != val)
  666. {
  667. m_forceAllParities = val;
  668. }
  669. }
  670. ImgUploadStatus* TivaFlash::imgUploadStatus(void)
  671. {
  672. return &m_imgUpldProg;
  673. }
  674. /////////////////////////////////////////////////////////////////////////////
  675. /////////////////////////////////////////////////////////////////////////////
  676. /////////////////////////////////////////////////////////////////////////////
  677. const QStringList& TivaFlash::materialEeprom(void) const
  678. {
  679. return m_materialEeprom;
  680. }
  681. void TivaFlash::setMaterialEeprom(int nSlvID, const QString &val)
  682. {
  683. if(m_materialEeprom[nSlvID] != val)
  684. {
  685. m_materialEeprom[nSlvID] = val;
  686. emit materialEepromChanged();
  687. }
  688. }
  689. /////////////////////////////////////////////////////////////////////////////
  690. const QStringList& TivaFlash::serialEeprom(void) const
  691. {
  692. return m_serialEeprom;
  693. }
  694. void TivaFlash::setSerialEeprom(int nSlvID, const QString &val)
  695. {
  696. if(m_serialEeprom[nSlvID] != val)
  697. {
  698. m_serialEeprom[nSlvID] = val;
  699. emit serialEepromChanged();
  700. }
  701. }
  702. /////////////////////////////////////////////////////////////////////////////
  703. /////////////////////////////////////////////////////////////////////////////
  704. /////////////////////////////////////////////////////////////////////////////
  705. const QList<int>& TivaFlash::imgSizeBoot(void) const
  706. {
  707. return m_imgSizeBoot;
  708. }
  709. void TivaFlash::setImgSizeBoot(int nSlvID, int val)
  710. {
  711. if(m_imgSizeBoot[nSlvID] != val)
  712. {
  713. m_imgSizeBoot[nSlvID] = val;
  714. emit imgSizeBootChanged();
  715. }
  716. }
  717. /////////////////////////////////////////////////////////////////////////////
  718. const QList<double>& TivaFlash::imgCRC32Boot(void) const
  719. {
  720. return m_imgCRC32Boot;
  721. }
  722. void TivaFlash::setImgCRC32Boot(int nSlvID, double val)
  723. {
  724. if(m_imgCRC32Boot[nSlvID] != val)
  725. {
  726. m_imgCRC32Boot[nSlvID] = val;
  727. emit imgCRC32BootChanged();
  728. }
  729. }
  730. /////////////////////////////////////////////////////////////////////////////
  731. const QStringList& TivaFlash::imgMaterialBoot(void) const
  732. {
  733. return m_imgMaterialBoot;
  734. }
  735. void TivaFlash::setImgMaterialBoot(int nSlvID, const QString &val)
  736. {
  737. if(m_imgMaterialBoot[nSlvID] != val)
  738. {
  739. m_imgMaterialBoot[nSlvID] = val;
  740. emit imgMaterialBootChanged();
  741. }
  742. }
  743. /////////////////////////////////////////////////////////////////////////////
  744. const QStringList& TivaFlash::imgBuildBoot(void) const
  745. {
  746. return m_imgBuildBoot;
  747. }
  748. void TivaFlash::setImgBuildBoot(int nSlvID, const QString &val)
  749. {
  750. if(m_imgBuildBoot[nSlvID] != val)
  751. {
  752. m_imgBuildBoot[nSlvID] = val;
  753. emit imgBuildBootChanged();
  754. }
  755. }
  756. /////////////////////////////////////////////////////////////////////////////
  757. /////////////////////////////////////////////////////////////////////////////
  758. /////////////////////////////////////////////////////////////////////////////
  759. const QList<int>& TivaFlash::imgSizeApp(void) const
  760. {
  761. return m_imgSizeApp;
  762. }
  763. void TivaFlash::setImgSizeApp(int nSlvID, int val)
  764. {
  765. if(m_imgSizeApp[nSlvID] != val)
  766. {
  767. m_imgSizeApp[nSlvID] = val;
  768. emit imgSizeAppChanged();
  769. }
  770. }
  771. /////////////////////////////////////////////////////////////////////////////
  772. const QList<double>& TivaFlash::imgCRC32App(void) const
  773. {
  774. return m_imgCRC32App;
  775. }
  776. void TivaFlash::setImgCRC32App(int nSlvID, double val)
  777. {
  778. if(m_imgCRC32App[nSlvID] != val)
  779. {
  780. m_imgCRC32App[nSlvID] = val;
  781. emit imgCRC32AppChanged();
  782. }
  783. }
  784. /////////////////////////////////////////////////////////////////////////////
  785. const QStringList& TivaFlash::imgMaterialApp(void) const
  786. {
  787. return m_imgMaterialApp;
  788. }
  789. void TivaFlash::setImgMaterialApp(int nSlvID, const QString &val)
  790. {
  791. if(m_imgMaterialApp[nSlvID] != val)
  792. {
  793. m_imgMaterialApp[nSlvID] = val;
  794. emit imgMaterialAppChanged();
  795. }
  796. }
  797. /////////////////////////////////////////////////////////////////////////////
  798. const QStringList& TivaFlash::imgBuildApp(void) const
  799. {
  800. return m_imgBuildApp;
  801. }
  802. void TivaFlash::setImgBuildApp(int nSlvID, const QString &val)
  803. {
  804. if(m_imgBuildApp[nSlvID] != val)
  805. {
  806. m_imgBuildApp[nSlvID] = val;
  807. emit imgBuildAppChanged();
  808. }
  809. }
  810. /////////////////////////////////////////////////////////////////////////////
  811. /////////////////////////////////////////////////////////////////////////////
  812. /////////////////////////////////////////////////////////////////////////////
  813. int TivaFlash::imgSizeFile(void) const
  814. {
  815. return m_imgSizeFile;
  816. }
  817. void TivaFlash::setImgSizeFile(int val)
  818. {
  819. if(m_imgSizeFile != val)
  820. {
  821. m_imgSizeFile = val;
  822. emit imgSizeFileChanged(m_imgSizeFile);
  823. }
  824. }
  825. /////////////////////////////////////////////////////////////////////////////
  826. double TivaFlash::imgCRC32File(void) const
  827. {
  828. return m_imgCRC32File;
  829. }
  830. void TivaFlash::setImgCRC32File(double val)
  831. {
  832. if(m_imgCRC32File != val)
  833. {
  834. m_imgCRC32File = val;
  835. emit imgCRC32FileChanged(m_imgCRC32File);
  836. }
  837. }
  838. /////////////////////////////////////////////////////////////////////////////
  839. const QString& TivaFlash::imgMaterialFile(void) const
  840. {
  841. return m_imgMaterialFile;
  842. }
  843. void TivaFlash::setImgMaterialFile(const QString &val)
  844. {
  845. if(m_imgMaterialFile != val)
  846. {
  847. m_imgMaterialFile = val;
  848. emit materialFileChanged(m_imgMaterialFile);
  849. }
  850. }
  851. /////////////////////////////////////////////////////////////////////////////
  852. const QString& TivaFlash::imgBuildFile(void) const
  853. {
  854. return m_imgBuildFile;
  855. }
  856. void TivaFlash::setImgBuildFile(const QString &val)
  857. {
  858. if(m_imgBuildFile != val)
  859. {
  860. m_imgBuildFile = val;
  861. emit imgBuildFileChanged(m_imgBuildFile);
  862. }
  863. }
  864. /////////////////////////////////////////////////////////////////////////////
  865. /////////////////////////////////////////////////////////////////////////////
  866. /////////////////////////////////////////////////////////////////////////////
  867. ImgUploadStatus::ImgUploadStatus(QObject *pParent) : QObject(pParent)
  868. {
  869. setObjectName("ImgUploadStatus");
  870. clear();
  871. }
  872. ImgUploadStatus::~ImgUploadStatus(void)
  873. {
  874. }
  875. /////////////////////////////////////////////////////////////////////////////
  876. void ImgUploadStatus::clear(void)
  877. {
  878. m_nCtx = 0;
  879. m_nErrorCode = 0;
  880. m_nCbBlock = 0;
  881. m_nBlockNr = 0;
  882. m_nCbTotal = 0;
  883. m_nCbSent = 0;
  884. m_nPercentSent = 0;
  885. m_nCntFlashPages = 0;
  886. m_bUploadInProgress = false;
  887. }
  888. /////////////////////////////////////////////////////////////////////////////
  889. int ImgUploadStatus::ctx(void) const
  890. {
  891. return m_nCtx;
  892. }
  893. void ImgUploadStatus::setCtx(int val)
  894. {
  895. if(m_nCtx != val)
  896. {
  897. m_nCtx = val;
  898. emit ctxChanged(m_nCtx);
  899. }
  900. }
  901. /////////////////////////////////////////////////////////////////////////////
  902. int ImgUploadStatus::errorCode(void) const
  903. {
  904. return m_nErrorCode;
  905. }
  906. void ImgUploadStatus::setErrorCode(int val)
  907. {
  908. if(m_nErrorCode != val)
  909. {
  910. m_nErrorCode = val;
  911. emit errorCodeChanged(m_nErrorCode);
  912. }
  913. }
  914. /////////////////////////////////////////////////////////////////////////////
  915. int ImgUploadStatus::cbBlock(void) const
  916. {
  917. return m_nCbBlock;
  918. }
  919. void ImgUploadStatus::setCbBlock(int val)
  920. {
  921. if(m_nCbBlock != val)
  922. {
  923. m_nCbBlock = val;
  924. emit cbBlockChanged(m_nCbBlock);
  925. }
  926. }
  927. /////////////////////////////////////////////////////////////////////////////
  928. int ImgUploadStatus::blockNr(void) const
  929. {
  930. return m_nBlockNr;
  931. }
  932. void ImgUploadStatus::SetBlockNr(int val)
  933. {
  934. if(m_nBlockNr != val)
  935. {
  936. m_nBlockNr = val;
  937. emit blockNrChanged(m_nBlockNr);
  938. }
  939. }
  940. /////////////////////////////////////////////////////////////////////////////
  941. int ImgUploadStatus::cbTotal(void) const
  942. {
  943. return m_nCbTotal;
  944. }
  945. void ImgUploadStatus::setCbTotal(int val)
  946. {
  947. if(m_nCbTotal != val)
  948. {
  949. m_nCbTotal = val;
  950. emit cbTotalChanged(m_nCbTotal);
  951. }
  952. }
  953. /////////////////////////////////////////////////////////////////////////////
  954. int ImgUploadStatus::cbSent(void) const
  955. {
  956. return m_nCbSent;
  957. }
  958. void ImgUploadStatus::setCbSent(int val)
  959. {
  960. if(m_nCbSent != val)
  961. {
  962. m_nCbSent = val;
  963. emit cbSentChanged(m_nCbSent);
  964. }
  965. }
  966. /////////////////////////////////////////////////////////////////////////////
  967. int ImgUploadStatus::percentSent(void) const
  968. {
  969. return m_nPercentSent;
  970. }
  971. void ImgUploadStatus::setPercentSent(int val)
  972. {
  973. if(m_nPercentSent != val)
  974. {
  975. m_nPercentSent = val;
  976. emit percentSentChanged(m_nPercentSent);
  977. }
  978. }
  979. /////////////////////////////////////////////////////////////////////////////
  980. int ImgUploadStatus::cntFlashPages(void) const
  981. {
  982. return m_nCntFlashPages;
  983. }
  984. void ImgUploadStatus::setCntFlashPages(int val)
  985. {
  986. if(m_nCntFlashPages != val)
  987. {
  988. m_nCntFlashPages = val;
  989. emit cntFlashPagesChanged(m_nCntFlashPages);
  990. }
  991. }
  992. /////////////////////////////////////////////////////////////////////////////
  993. bool ImgUploadStatus::uploadInProgress(void) const
  994. {
  995. return m_bUploadInProgress;
  996. }
  997. void ImgUploadStatus::setUploadInProgress(bool val)
  998. {
  999. if(m_bUploadInProgress != val)
  1000. {
  1001. m_bUploadInProgress = val;
  1002. emit uploadInProgressChanged(m_bUploadInProgress);
  1003. }
  1004. }