gfativaflash.cpp 28 KB

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