mainwindow.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  1. #include "dfotaConfig.h"
  2. #include "./src/dfota.h"
  3. #include "./src/crc32.h"
  4. #include "mainwindow.h"
  5. #include "./ui_mainwindow.h"
  6. #include "build_date_time.h"
  7. #include "./src/dfota.h"
  8. #include "iostream"
  9. #include "string.h"
  10. #include <string>
  11. #include <QMutex>
  12. #include <QDateTime>
  13. #include <QDebug>
  14. #include <QDir>
  15. #include <iostream>
  16. //#include <QDialog>//
  17. #include <QFileDialog>
  18. #include <QMessageBox>
  19. using namespace std;
  20. DFOTA dfota;
  21. typedef struct WindowLE{
  22. QLineEdit le_devType;
  23. QLineEdit le_newFile;
  24. QLineEdit le_oldFile[MAX_OLDFILES_NUM];
  25. QLineEdit le_pkgFile;
  26. }WindowLE_t;
  27. //void appendMsgOut(MainWindow *w,QString msg){
  28. // emit w->MainWindow::qdebug_signals(msg);
  29. //};
  30. QMutex mutex;
  31. Ui::MainWindow *pui;
  32. void MainWindow::appendlog(QString msg){
  33. emit this->process_bar_signals(0,"开始...");
  34. }
  35. void MainWindow::myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  36. {
  37. pui->textEdit_log->append(msg);
  38. pui->textEdit_log->moveCursor(QTextCursor::End);
  39. // pw->appendMsgOut(msg);
  40. //创建log文件夹
  41. QDir dir("log");
  42. if (!dir.exists())
  43. {
  44. QDir dir;
  45. dir.mkdir("log");
  46. }
  47. //创建log文件
  48. QString currentDate = QDateTime::currentDateTime().toString("yyyyMMdd");
  49. QString logName = "log" + currentDate + ".txt";
  50. QString logFileName = "log/" + logName;
  51. // 加锁
  52. mutex.lock();
  53. QByteArray localMsg = msg.toLocal8Bit();
  54. //信息分类
  55. QString strMsg("");
  56. switch(type)
  57. {
  58. case QtDebugMsg:
  59. strMsg = QString("Debug:");
  60. break;
  61. case QtInfoMsg:
  62. strMsg = QString("Info:");
  63. break;
  64. case QtWarningMsg:
  65. strMsg = QString("Warning:");
  66. break;
  67. case QtCriticalMsg:
  68. strMsg = QString("Critical:");
  69. break;
  70. case QtFatalMsg:
  71. strMsg = QString("Fatal:");
  72. break;
  73. default:
  74. break;
  75. }
  76. //Release 版本默认不包含context这些信息:文件名、函数名、行数,需要在.pro项目文件加入以下代码,加入后最好重新构建项目使之生效:
  77. //DEFINES += QT_MESSAGELOGCONTEXT
  78. //在.pro文件定义以下的宏,可以屏蔽相应的日志输出
  79. //DEFINES += QT_NO_WARNING_OUTPUT
  80. //DEFINES += QT_NO_DEBUG_OUTPUT
  81. //DEFINES += QT_NO_INFO_OUTPUT
  82. //文件名、函数名、行数
  83. strMsg += QString("Function: %1 File: %2 Line: %3 ").arg(context.function).arg(context.file).arg(context.line);
  84. // 时间和内容
  85. QString strDateTime = QDateTime::currentDateTime().toString("hh:mm:ss");
  86. // QString strMessage = QString("%1 %2:%3").arg(strDateTime).arg(strMsg).arg(localMsg.constData());
  87. QString strMessage = QString("%1 %2").arg(strDateTime).arg(strMsg);
  88. strMessage += msg;
  89. //写入文件
  90. QFile file(logFileName);
  91. if (!file.open(QIODevice::WriteOnly | QIODevice::Append))
  92. {
  93. file.close();
  94. // return ;
  95. }
  96. QTextStream stream(&file);
  97. stream << strMessage << "\r\n";;
  98. file.flush();
  99. file.close();
  100. // 解锁
  101. mutex.unlock();
  102. }
  103. void MainWindow::getConfig()
  104. {
  105. QDir dir("tmp");
  106. if (!dir.exists())
  107. {
  108. QDir dir;
  109. dir.mkdir("tmp");
  110. }
  111. char get_string[MAX_PATH];
  112. memset(get_string,0,sizeof (get_string));
  113. // qDebug("%s\r\n",DFOTACONFIG_FILE);
  114. GetPrivateProfileString("newBinFile", "ep", "", get_string, 9, DFOTACONFIG_FILE);
  115. bool ok;
  116. uint32_t ep = ui->lineEdit_ep->text().toUInt(&ok,16);
  117. if((not ok)||(ep < 0x08000000)||(ep>(0x80000000+0x40000000))){
  118. ui->lineEdit_ep->setText("80000000");
  119. WritePrivateProfileString("newBinFile", "ep", "80000000", DFOTACONFIG_FILE);
  120. }
  121. ui->lineEdit_ep->setText(get_string);
  122. // qDebug("%s\r\n",get_string);
  123. memset(get_string,0,sizeof (get_string));
  124. GetPrivateProfileString("newBinFile", "file", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  125. ui->lineEdit_newFile->setText(get_string);
  126. // qDebug("%s\r\n",get_string);
  127. memset(get_string,0,sizeof (get_string));
  128. GetPrivateProfileString("oldBinFile", "file_1", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  129. ui->lineEdit_oldFile0->setText(get_string);
  130. memset(get_string,0,sizeof (get_string));
  131. GetPrivateProfileString("oldBinFile", "file_2", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  132. ui->lineEdit_oldFile1->setText(get_string);
  133. memset(get_string,0,sizeof (get_string));
  134. GetPrivateProfileString("oldBinFile", "file_3", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  135. ui->lineEdit_oldFile2->setText(get_string);
  136. memset(get_string,0,sizeof (get_string));
  137. GetPrivateProfileString("oldBinFile", "file_4", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  138. ui->lineEdit_oldFile3->setText(get_string);
  139. memset(get_string,0,sizeof (get_string));
  140. GetPrivateProfileString("oldBinFile", "file_5", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  141. ui->lineEdit_oldFile4->setText(get_string);
  142. memset(get_string,0,sizeof (get_string));
  143. GetPrivateProfileString("oldBinFile", "file_6", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  144. ui->lineEdit_oldFile5->setText(get_string);
  145. memset(get_string,0,sizeof (get_string));
  146. GetPrivateProfileString("oldBinFile", "file_7", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  147. ui->lineEdit_oldFile6->setText(get_string);
  148. memset(get_string,0,sizeof (get_string));
  149. GetPrivateProfileString("oldBinFile", "file_8", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  150. ui->lineEdit_oldFile7->setText(get_string);
  151. memset(get_string,0,sizeof (get_string));
  152. GetPrivateProfileString("pkgBinFile", "file", "", get_string, MAX_PATH, DFOTACONFIG_FILE);
  153. ui->lineEdit_pkgFile->setText(get_string);
  154. memset(get_string,0,sizeof (get_string));
  155. // ui->textEdit_log->setText("");
  156. }
  157. void MainWindow::ep_slot(){
  158. bool ok;
  159. uint32_t ep = ui->lineEdit_ep->text().toUInt(&ok,16);
  160. if((not ok)||(ep < 0x08000000)||(ep>(0x80000000+0x40000000))){
  161. ui->lineEdit_ep->setText("80000000");
  162. return;
  163. }
  164. WritePrivateProfileString("newBinFile", "ep", ui->lineEdit_ep->text().toStdString().c_str(), DFOTACONFIG_FILE);
  165. }
  166. QString getFileDir(const char* path){
  167. char drive[MAX_PATH] = {0};
  168. char dir[MAX_PATH] = {0};
  169. char filename[MAX_PATH] = {0};
  170. char ext[MAX_PATH] = {0};
  171. QString FileDir;
  172. _splitpath_s(path, drive, dir,filename, ext);
  173. if(strlen(path) == 0)
  174. FileDir = "";
  175. else
  176. FileDir = QString::fromStdString(drive)+QString::fromStdString(dir);
  177. return FileDir;
  178. }
  179. void MainWindow::openNewFile_slot(){
  180. QString fileDir = getFileDir(ui->lineEdit_newFile->text().toStdString().c_str());
  181. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  182. if(s.length()==0)return;
  183. WritePrivateProfileString("newBinFile", "file", s.toStdString().c_str(), DFOTACONFIG_FILE);
  184. ui->lineEdit_newFile->setText(s);
  185. }
  186. void MainWindow::openOldFile0_slot(){
  187. QString fileDir = getFileDir(ui->lineEdit_oldFile0->text().toStdString().c_str());
  188. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  189. if(s.length()==0)return;
  190. WritePrivateProfileString("oldBinFile", "file_1", s.toStdString().c_str(), DFOTACONFIG_FILE);
  191. ui->lineEdit_oldFile0->setText(s);
  192. }
  193. void MainWindow::openOldFile1_slot(){
  194. QString fileDir = getFileDir(ui->lineEdit_oldFile1->text().toStdString().c_str());
  195. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  196. if(s.length()==0)return;
  197. WritePrivateProfileString("oldBinFile", "file_2", s.toStdString().c_str(), DFOTACONFIG_FILE);
  198. ui->lineEdit_oldFile1->setText(s);
  199. }
  200. void MainWindow::openOldFile2_slot(){
  201. QString fileDir = getFileDir(ui->lineEdit_oldFile2->text().toStdString().c_str());
  202. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  203. if(s.length()==0)return;
  204. WritePrivateProfileString("oldBinFile", "file_3", s.toStdString().c_str(), DFOTACONFIG_FILE);
  205. ui->lineEdit_oldFile2->setText(s);
  206. }
  207. void MainWindow::openOldFile3_slot(){
  208. QString fileDir = getFileDir(ui->lineEdit_oldFile3->text().toStdString().c_str());
  209. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  210. if(s.length()==0)return;
  211. WritePrivateProfileString("oldBinFile", "file_4", s.toStdString().c_str(), DFOTACONFIG_FILE);
  212. ui->lineEdit_oldFile3->setText(s);
  213. }
  214. void MainWindow::openOldFile4_slot(){
  215. QString fileDir = getFileDir(ui->lineEdit_oldFile4->text().toStdString().c_str());
  216. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  217. if(s.length()==0)return;
  218. WritePrivateProfileString("oldBinFile", "file_5", s.toStdString().c_str(), DFOTACONFIG_FILE);
  219. ui->lineEdit_oldFile4->setText(s);
  220. }
  221. void MainWindow::openOldFile5_slot(){
  222. QString fileDir = getFileDir(ui->lineEdit_oldFile5->text().toStdString().c_str());
  223. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  224. if(s.length()==0)return;
  225. WritePrivateProfileString("oldBinFile", "file_6", s.toStdString().c_str(), DFOTACONFIG_FILE);
  226. ui->lineEdit_oldFile5->setText(s);
  227. }
  228. void MainWindow::openOldFile6_slot(){
  229. QString fileDir = getFileDir(ui->lineEdit_oldFile6->text().toStdString().c_str());
  230. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  231. if(s.length()==0)return;
  232. WritePrivateProfileString("oldBinFile", "file_7", s.toStdString().c_str(), DFOTACONFIG_FILE);
  233. ui->lineEdit_oldFile6->setText(s);
  234. }
  235. void MainWindow::openOldFile7_slot(){
  236. QString fileDir = getFileDir(ui->lineEdit_oldFile7->text().toStdString().c_str());
  237. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  238. if(s.length()==0)return;
  239. WritePrivateProfileString("oldBinFile", "file_8", s.toStdString().c_str(), DFOTACONFIG_FILE);
  240. ui->lineEdit_oldFile7->setText(s);
  241. }
  242. void MainWindow::openPkgFolder_slot(){
  243. QString fileDir = getFileDir(ui->lineEdit_pkgFile->text().toStdString().c_str());
  244. QString s = QFileDialog::getOpenFileName(this,"open file dialog",fileDir,"二进制文件(*.bin)");
  245. if(s.length()==0)return;
  246. WritePrivateProfileString("pkgBinFile", "file", s.toStdString().c_str(), DFOTACONFIG_FILE);
  247. ui->lineEdit_pkgFile->setText(s);
  248. }
  249. void MainWindow::editNewFile_slot(){
  250. WritePrivateProfileString("newBinFile", "file", ui->lineEdit_newFile->text().toStdString().c_str(), DFOTACONFIG_FILE);
  251. }
  252. void MainWindow::editOldFile0_slot(){
  253. WritePrivateProfileString("oldBinFile", "file_1", ui->lineEdit_oldFile0->text().toStdString().c_str(), DFOTACONFIG_FILE);
  254. }
  255. void MainWindow::editOldFile1_slot(){
  256. WritePrivateProfileString("oldBinFile", "file_2", ui->lineEdit_oldFile1->text().toStdString().c_str(), DFOTACONFIG_FILE);
  257. }
  258. void MainWindow::editOldFile2_slot(){
  259. WritePrivateProfileString("oldBinFile", "file_3", ui->lineEdit_oldFile2->text().toStdString().c_str(), DFOTACONFIG_FILE);
  260. }
  261. void MainWindow::editOldFile3_slot(){
  262. WritePrivateProfileString("oldBinFile", "file_4", ui->lineEdit_oldFile3->text().toStdString().c_str(), DFOTACONFIG_FILE);
  263. }
  264. void MainWindow::editOldFile4_slot(){
  265. WritePrivateProfileString("oldBinFile", "file_5", ui->lineEdit_oldFile4->text().toStdString().c_str(), DFOTACONFIG_FILE);
  266. }
  267. void MainWindow::editOldFile5_slot(){
  268. WritePrivateProfileString("oldBinFile", "file_6", ui->lineEdit_oldFile5->text().toStdString().c_str(), DFOTACONFIG_FILE);
  269. }
  270. void MainWindow::editOldFile6_slot(){
  271. WritePrivateProfileString("oldBinFile", "file_7", ui->lineEdit_oldFile6->text().toStdString().c_str(), DFOTACONFIG_FILE);
  272. }
  273. void MainWindow::editOldFile7_slot(){
  274. WritePrivateProfileString("oldBinFile", "file_8", ui->lineEdit_oldFile7->text().toStdString().c_str(), DFOTACONFIG_FILE);
  275. }
  276. void MainWindow::editPkgFolder_slot(){
  277. WritePrivateProfileString("pkgBinFile", "file", ui->lineEdit_pkgFile->text().toStdString().c_str(), DFOTACONFIG_FILE);
  278. }
  279. InputData_t inputData;
  280. void MainWindow::pkg_creater_slot()
  281. {
  282. bool ok;
  283. memset(&inputData,0,sizeof(inputData));
  284. // 获取输入参数
  285. // inputData.devType = ui->lineEdit_devType->text().toUShort(&ok,16);
  286. inputData.ep = ui->lineEdit_ep->text().toUInt(&ok,16);
  287. memcpy_s(inputData.newFilePath,MAX_PATH,ui->lineEdit_newFile->text().toStdString().c_str(),ui->lineEdit_newFile->text().toStdString().length());
  288. if(ui->checkBox_old0->checkState())
  289. memcpy_s(inputData.oldFilePath[0],MAX_PATH,ui->lineEdit_oldFile0->text().toStdString().c_str(),ui->lineEdit_oldFile0->text().toStdString().length());
  290. if(ui->checkBox_old1->checkState())
  291. memcpy_s(inputData.oldFilePath[1],MAX_PATH,ui->lineEdit_oldFile1->text().toStdString().c_str(),ui->lineEdit_oldFile1->text().toStdString().length());
  292. if(ui->checkBox_old2->checkState())
  293. memcpy_s(inputData.oldFilePath[2],MAX_PATH,ui->lineEdit_oldFile2->text().toStdString().c_str(),ui->lineEdit_oldFile2->text().toStdString().length());
  294. if(ui->checkBox_old3->checkState())
  295. memcpy_s(inputData.oldFilePath[3],MAX_PATH,ui->lineEdit_oldFile3->text().toStdString().c_str(),ui->lineEdit_oldFile3->text().toStdString().length());
  296. if(ui->checkBox_old4->checkState())
  297. memcpy_s(inputData.oldFilePath[4],MAX_PATH,ui->lineEdit_oldFile4->text().toStdString().c_str(),ui->lineEdit_oldFile4->text().toStdString().length());
  298. if(ui->checkBox_old5->checkState())
  299. memcpy_s(inputData.oldFilePath[5],MAX_PATH,ui->lineEdit_oldFile5->text().toStdString().c_str(),ui->lineEdit_oldFile5->text().toStdString().length());
  300. if(ui->checkBox_old6->checkState())
  301. memcpy_s(inputData.oldFilePath[6],MAX_PATH,ui->lineEdit_oldFile6->text().toStdString().c_str(),ui->lineEdit_oldFile6->text().toStdString().length());
  302. if(ui->checkBox_old7->checkState())
  303. memcpy_s(inputData.oldFilePath[7],MAX_PATH,ui->lineEdit_oldFile7->text().toStdString().c_str(),ui->lineEdit_oldFile7->text().toStdString().length());
  304. memcpy_s(inputData.pkgFilePath,MAX_PATH,ui->lineEdit_pkgFile->text().toStdString().c_str(),ui->lineEdit_pkgFile->text().toStdString().length());
  305. inputData.check_d = ui->checkBox_d->checkState();
  306. inputData.check_z = ui->checkBox_z->checkState();
  307. dfota.bsdiff_task(this,&inputData);
  308. }
  309. void MainWindow::pkg_read_slot(){
  310. memset(&inputData,0,sizeof(inputData));
  311. memcpy_s(inputData.pkgFilePath,MAX_PATH,ui->lineEdit_pkgFile->text().toStdString().c_str(),ui->lineEdit_pkgFile->text().toStdString().length());
  312. dfota.read_task(this,&inputData);
  313. }
  314. void MainWindow::pkg_check_slot(){
  315. bool ok;
  316. memset(&inputData,0,sizeof(inputData));
  317. // 获取输入参数
  318. memcpy_s(inputData.newFilePath,MAX_PATH,ui->lineEdit_newFile->text().toStdString().c_str(),ui->lineEdit_newFile->text().toStdString().length());
  319. if(ui->checkBox_old0->checkState())
  320. memcpy_s(inputData.oldFilePath[0],MAX_PATH,ui->lineEdit_oldFile0->text().toStdString().c_str(),ui->lineEdit_oldFile0->text().toStdString().length());
  321. if(ui->checkBox_old1->checkState())
  322. memcpy_s(inputData.oldFilePath[1],MAX_PATH,ui->lineEdit_oldFile1->text().toStdString().c_str(),ui->lineEdit_oldFile1->text().toStdString().length());
  323. if(ui->checkBox_old2->checkState())
  324. memcpy_s(inputData.oldFilePath[2],MAX_PATH,ui->lineEdit_oldFile2->text().toStdString().c_str(),ui->lineEdit_oldFile2->text().toStdString().length());
  325. if(ui->checkBox_old3->checkState())
  326. memcpy_s(inputData.oldFilePath[3],MAX_PATH,ui->lineEdit_oldFile3->text().toStdString().c_str(),ui->lineEdit_oldFile3->text().toStdString().length());
  327. if(ui->checkBox_old4->checkState())
  328. memcpy_s(inputData.oldFilePath[4],MAX_PATH,ui->lineEdit_oldFile4->text().toStdString().c_str(),ui->lineEdit_oldFile4->text().toStdString().length());
  329. if(ui->checkBox_old5->checkState())
  330. memcpy_s(inputData.oldFilePath[5],MAX_PATH,ui->lineEdit_oldFile5->text().toStdString().c_str(),ui->lineEdit_oldFile5->text().toStdString().length());
  331. if(ui->checkBox_old6->checkState())
  332. memcpy_s(inputData.oldFilePath[6],MAX_PATH,ui->lineEdit_oldFile6->text().toStdString().c_str(),ui->lineEdit_oldFile6->text().toStdString().length());
  333. if(ui->checkBox_old7->checkState())
  334. memcpy_s(inputData.oldFilePath[7],MAX_PATH,ui->lineEdit_oldFile7->text().toStdString().c_str(),ui->lineEdit_oldFile7->text().toStdString().length());
  335. memcpy_s(inputData.pkgFilePath,MAX_PATH,ui->lineEdit_pkgFile->text().toStdString().c_str(),ui->lineEdit_pkgFile->text().toStdString().length());
  336. inputData.check_d = ui->checkBox_d->checkState();
  337. inputData.check_z = ui->checkBox_z->checkState();
  338. dfota.check_task(this,&inputData);
  339. }
  340. void MainWindow::bt_clrLog_solt(){
  341. ui->textEdit_log->setText("");
  342. }
  343. void MainWindow::process_bar_solt(int p,QString msg){
  344. ui->progressBar->setValue(p);
  345. ui->label_bar_msg->setText(msg);
  346. }
  347. void MainWindow::pkg_set_path_solt(QString msg){
  348. ui->lineEdit_pkgFile->setText(msg);
  349. WritePrivateProfileString("pkgBinFile", "file", msg.toStdString().c_str(), DFOTACONFIG_FILE);
  350. }
  351. //PartiallyChecked
  352. void MainWindow::checkBox_all_solt(){
  353. ui->checkBox_old0->setCheckState(Qt::Checked);
  354. ui->checkBox_old1->setCheckState(Qt::Checked);
  355. ui->checkBox_old2->setCheckState(Qt::Checked);
  356. ui->checkBox_old3->setCheckState(Qt::Checked);
  357. ui->checkBox_old4->setCheckState(Qt::Checked);
  358. ui->checkBox_old5->setCheckState(Qt::Checked);
  359. ui->checkBox_old6->setCheckState(Qt::Checked);
  360. ui->checkBox_old7->setCheckState(Qt::Checked);
  361. }
  362. void MainWindow::checkBox_none_solt(){
  363. ui->checkBox_old0->setCheckState(Qt::Unchecked);
  364. ui->checkBox_old1->setCheckState(Qt::Unchecked);
  365. ui->checkBox_old2->setCheckState(Qt::Unchecked);
  366. ui->checkBox_old3->setCheckState(Qt::Unchecked);
  367. ui->checkBox_old4->setCheckState(Qt::Unchecked);
  368. ui->checkBox_old5->setCheckState(Qt::Unchecked);
  369. ui->checkBox_old6->setCheckState(Qt::Unchecked);
  370. ui->checkBox_old7->setCheckState(Qt::Unchecked);
  371. }
  372. void MainWindow::checkBox_d_solt(){
  373. // d=0,z=0,-> d=0,z=0
  374. // d=0,z=Z,-> d=0,z=Z
  375. // d=1,z=0,-> 禁止
  376. // d=D,z=Z,-> d=D,z=Z
  377. if(ui->checkBox_d->checkState()==Qt::Checked&&ui->checkBox_z->checkState()==Qt::Unchecked){
  378. QMessageBox::warning(this,"DFOTA","不允许的操作,有差分则必须有压缩");
  379. ui->checkBox_d->setCheckState(Qt::Checked);ui->checkBox_z->setCheckState(Qt::Checked);
  380. }
  381. }
  382. void MainWindow::checkBox_z_solt(){
  383. // d=0,z=0,-> d=0,z=0
  384. // d=0,z=Z,-> d=0,z=Z
  385. // d=1,z=0,-> 禁止
  386. // d=D,z=Z,-> d=D,z=Z
  387. if(ui->checkBox_d->checkState()==Qt::Checked&&ui->checkBox_z->checkState()==Qt::Unchecked){
  388. QMessageBox::warning(this,"DFOTA","不允许的操作,有差分则必须有压缩");
  389. ui->checkBox_d->setCheckState(Qt::Checked);ui->checkBox_z->setCheckState(Qt::Checked);
  390. }
  391. }
  392. void MainWindow::editTimeStamp_slot(){
  393. char logMsg[256]={0};
  394. bool ok;
  395. time_t stamp = ui->lineEdit_time_stamp->text().toUInt();
  396. get_stamp2string_s(stamp,logMsg);
  397. ui->lineEdit_time_string->setText(logMsg);
  398. return;
  399. }
  400. void MainWindow::editTimeString_slot(){
  401. return;
  402. }
  403. void MainWindow::crc32_test_slot(){
  404. bool ok;
  405. int tail =0;
  406. QString path = "";
  407. uint8_t* buff = nullptr;
  408. int size=0;
  409. uint32_t crc=0;
  410. int result=0;
  411. char logMsg[256]={0};
  412. int logLen=0;
  413. path = QFileDialog::getOpenFileName(this,"请打开需要crc32计算的bin文件","./","二进制文件(*.bin)");
  414. if(path.length() == 0) return;
  415. buff = (uint8_t*)malloc(MAX_BIN_SIZE);
  416. if(buff==nullptr) return;
  417. result = my_fr(path.toStdString().c_str(),buff,&size);
  418. if(result<=0)return;
  419. if(size>MAX_BIN_SIZE){
  420. QMessageBox::warning(this,"crc32测试结果","选择的文件 太大 了");
  421. if(buff) free(buff);
  422. return;
  423. }
  424. if((size-tail)<4){
  425. QMessageBox::warning(this,"crc32测试结果","选择的文件 太小 了");
  426. if(buff) free(buff);
  427. return;
  428. }
  429. tail = ui->lineEdit_crc32_test->text().toUInt(&ok);
  430. crc = crc32((uint32_t*)buff,(size-tail)/4);
  431. snprintf(logMsg,sizeof(logMsg),"tail=%d,crc32 = 0x%08X.\r\n%s.\r\n",tail,crc,path.toStdString().c_str());
  432. qDebug() << logMsg;
  433. QMessageBox::warning(this,"crc32测试结果",logMsg);
  434. if(buff) free(buff);
  435. }
  436. void MainWindow::test_solt(){
  437. dfota_test();
  438. }
  439. MainWindow::MainWindow(QWidget *parent)
  440. : QMainWindow(parent)
  441. , ui(new Ui::MainWindow)
  442. {
  443. char logMsg[256]={0};
  444. ui->setupUi(this);
  445. snprintf(logMsg,sizeof(logMsg),"%s (build %s)",APP_VERSION,g_build_date_time);
  446. this->setWindowTitle(logMsg);
  447. pui = ui;
  448. qInstallMessageHandler(MainWindow::myMessageOutput);
  449. getConfig();
  450. ui->lineEdit_time_stamp->setText(QString::number(time(NULL)));
  451. get_stamp2string_s(time(NULL),logMsg);
  452. ui->lineEdit_time_string->setText(logMsg);
  453. connect(ui->lineEdit_ep, SIGNAL(editingFinished()),this,SLOT(ep_slot()));
  454. connect(ui->pushButton_newFile, SIGNAL(clicked()),this,SLOT(openNewFile_slot()));
  455. connect(ui->pushButton_oldFile0,SIGNAL(clicked()),this,SLOT(openOldFile0_slot()));
  456. connect(ui->pushButton_oldFile1,SIGNAL(clicked()),this,SLOT(openOldFile1_slot()));
  457. connect(ui->pushButton_oldFile2,SIGNAL(clicked()),this,SLOT(openOldFile2_slot()));
  458. connect(ui->pushButton_oldFile3,SIGNAL(clicked()),this,SLOT(openOldFile3_slot()));
  459. connect(ui->pushButton_oldFile4,SIGNAL(clicked()),this,SLOT(openOldFile4_slot()));
  460. connect(ui->pushButton_oldFile5,SIGNAL(clicked()),this,SLOT(openOldFile5_slot()));
  461. connect(ui->pushButton_oldFile6,SIGNAL(clicked()),this,SLOT(openOldFile6_slot()));
  462. connect(ui->pushButton_oldFile7,SIGNAL(clicked()),this,SLOT(openOldFile7_slot()));
  463. connect(ui->pushButton_pkgFile, SIGNAL(clicked()),this,SLOT(openPkgFolder_slot()));
  464. connect(ui->lineEdit_newFile,SIGNAL(editingFinished()),this,SLOT(editNewFile_slot()));
  465. connect(ui->lineEdit_oldFile0,SIGNAL(editingFinished()),this,SLOT(editOldFile0_slot()));
  466. connect(ui->lineEdit_oldFile1,SIGNAL(editingFinished()),this,SLOT(editOldFile1_slot()));
  467. connect(ui->lineEdit_oldFile2,SIGNAL(editingFinished()),this,SLOT(editOldFile2_slot()));
  468. connect(ui->lineEdit_oldFile3,SIGNAL(editingFinished()),this,SLOT(editOldFile3_slot()));
  469. connect(ui->lineEdit_oldFile4,SIGNAL(editingFinished()),this,SLOT(editOldFile4_slot()));
  470. connect(ui->lineEdit_oldFile5,SIGNAL(editingFinished()),this,SLOT(editOldFile5_slot()));
  471. connect(ui->lineEdit_oldFile6,SIGNAL(editingFinished()),this,SLOT(editOldFile6_slot()));
  472. connect(ui->lineEdit_oldFile7,SIGNAL(editingFinished()),this,SLOT(editOldFile7_slot()));
  473. connect(ui->lineEdit_pkgFile,SIGNAL(editingFinished()),this,SLOT(editPkgFolder_slot()));
  474. connect(ui->pushButton_pkg_create,SIGNAL(clicked()),this,SLOT(pkg_creater_slot()));
  475. connect(ui->pushButton_pkg_check,SIGNAL(clicked()),this,SLOT(pkg_check_slot()));
  476. connect(ui->pushButton_pkg_read,SIGNAL(clicked()),this,SLOT(pkg_read_slot()));
  477. connect(ui->pushButton_clrLog,SIGNAL(clicked()),this,SLOT(bt_clrLog_solt()));
  478. connect(ui->pushButton_exit,SIGNAL(clicked()),this,SLOT(close()));
  479. connect(ui->pushButton_check_all,SIGNAL(clicked()),this,SLOT(checkBox_all_solt()));
  480. connect(ui->pushButton_check_none,SIGNAL(clicked()),this,SLOT(checkBox_none_solt()));
  481. connect(ui->checkBox_d,SIGNAL(released()),this,SLOT(checkBox_d_solt()));
  482. connect(ui->checkBox_z,SIGNAL(released()),this,SLOT(checkBox_z_solt()));
  483. connect(this,SIGNAL(process_bar_signals(int,QString)),this,SLOT(process_bar_solt(int,QString)));
  484. connect(this,SIGNAL(qdebug_signals(QString)),ui->textEdit_log,SLOT(append(QString)));
  485. connect(this,SIGNAL(pkg_set_path_signals(QString)),this,SLOT(pkg_set_path_solt(QString)));
  486. connect(ui->lineEdit_time_stamp,SIGNAL(editingFinished()),this,SLOT(editTimeStamp_slot()));
  487. connect(ui->lineEdit_time_string,SIGNAL(editingFinished()),this,SLOT(editTimeString_slot()));
  488. connect(ui->pushButton_test,SIGNAL(clicked()),this,SLOT(test_solt()));
  489. connect(ui->pushButton_crc32_test,SIGNAL(clicked()),this,SLOT(crc32_test_slot()));
  490. }
  491. MainWindow::~MainWindow()
  492. {
  493. delete ui;
  494. }