固件升级工具:将下载和升级功能分开

This commit is contained in:
luoliangyi 2022-11-11 14:55:30 +08:00
parent 9d99f86cd9
commit a5e6e8f9ce
11 changed files with 514 additions and 222 deletions

Binary file not shown.

View File

@ -1,6 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>Dialog_updateProgress</name>
<message>
<location filename="dialog_updateprogress.ui" line="14"/>
<source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="dialog_updateprogress.ui" line="42"/>
<source>stop</source>
<translation></translation>
</message>
</context>
<context>
<name>Dialog_upgradeFirmware</name>
<message>
@ -19,14 +32,12 @@
<translation></translation>
</message>
<message>
<location filename="dialog_upgradefirmware.cpp" line="22"/>
<location filename="dialog_upgradefirmware.cpp" line="52"/>
<location filename="dialog_upgradefirmware.cpp" line="17"/>
<source>upgrade</source>
<translation></translation>
</message>
<message>
<location filename="dialog_upgradefirmware.cpp" line="25"/>
<location filename="dialog_upgradefirmware.cpp" line="55"/>
<location filename="dialog_upgradefirmware.cpp" line="20"/>
<source>firmware upgrade in progress, please wait...</source>
<translation>...</translation>
</message>
@ -34,32 +45,32 @@
<context>
<name>LoginDialog</name>
<message>
<location filename="logindialog.ui" line="14"/>
<location filename="logindialog.ui" line="26"/>
<source>Login</source>
<translation></translation>
</message>
<message>
<location filename="logindialog.ui" line="42"/>
<location filename="logindialog.ui" line="54"/>
<source>account</source>
<translation></translation>
</message>
<message>
<location filename="logindialog.ui" line="90"/>
<location filename="logindialog.ui" line="102"/>
<source>password</source>
<translation></translation>
</message>
<message>
<location filename="logindialog.ui" line="125"/>
<location filename="logindialog.ui" line="137"/>
<source>login</source>
<translation></translation>
</message>
<message>
<location filename="logindialog.ui" line="132"/>
<location filename="logindialog.ui" line="144"/>
<source>help</source>
<translation></translation>
</message>
<message>
<location filename="logindialog.ui" line="139"/>
<location filename="logindialog.ui" line="151"/>
<source>exit</source>
<translation></translation>
</message>
@ -82,114 +93,114 @@
<context>
<name>MainWindow</name>
<message>
<location filename="mainwindow.ui" line="14"/>
<location filename="mainwindow.ui" line="26"/>
<source>MainWindow</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="25"/>
<location filename="mainwindow.ui" line="37"/>
<source>update firmware</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="37"/>
<location filename="mainwindow.ui" line="202"/>
<location filename="mainwindow.ui" line="49"/>
<location filename="mainwindow.ui" line="214"/>
<source>device list</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="73"/>
<location filename="mainwindow.ui" line="85"/>
<source>online upgrade</source>
<translation>线</translation>
<translation>线</translation>
</message>
<message>
<location filename="mainwindow.ui" line="95"/>
<location filename="mainwindow.ui" line="107"/>
<source>get version list</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="108"/>
<location filename="mainwindow.ui" line="120"/>
<source>download and upgrade</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="121"/>
<location filename="mainwindow.ui" line="133"/>
<source>version list</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="135"/>
<source>local upgrade</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="147"/>
<source>local upgrade</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="159"/>
<source>file path</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="170"/>
<location filename="mainwindow.ui" line="182"/>
<source>open file path</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="183"/>
<location filename="mainwindow.ui" line="195"/>
<source>upgrade</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="190"/>
<location filename="mainwindow.ui" line="202"/>
<source>manager tools</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="225"/>
<location filename="mainwindow.ui" line="237"/>
<source>roll count:</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="238"/>
<location filename="mainwindow.ui" line="251"/>
<location filename="mainwindow.ui" line="250"/>
<location filename="mainwindow.ui" line="263"/>
<source>0</source>
<translation>0</translation>
</message>
<message>
<location filename="mainwindow.ui" line="264"/>
<location filename="mainwindow.ui" line="276"/>
<source>scan count:</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="277"/>
<location filename="mainwindow.ui" line="289"/>
<source>clear roll count</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="283"/>
<location filename="mainwindow.ui" line="295"/>
<source>password change</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="295"/>
<location filename="mainwindow.ui" line="307"/>
<source>old password</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="308"/>
<location filename="mainwindow.ui" line="320"/>
<source>new password</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="341"/>
<location filename="mainwindow.ui" line="353"/>
<source>modify password</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="364"/>
<location filename="mainwindow.ui" line="376"/>
<source>confirm new password</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="388"/>
<location filename="mainwindow.ui" line="400"/>
<source>exit</source>
<translation></translation>
</message>
@ -202,112 +213,151 @@
<translation type="vanished">...</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="208"/>
<source>open device: %1, firmware version: %2</source>
<translation>%1%2</translation>
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="210"/>
<location filename="mainwindow.cpp" line="211"/>
<location filename="mainwindow.cpp" line="257"/>
<location filename="mainwindow.cpp" line="269"/>
<location filename="mainwindow.cpp" line="270"/>
<source>do not support</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="219"/>
<location filename="mainwindow.cpp" line="282"/>
<source>open device error: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="224"/>
<location filename="mainwindow.cpp" line="287"/>
<source>no device opened</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="255"/>
<location filename="mainwindow.cpp" line="351"/>
<location filename="mainwindow.cpp" line="367"/>
<location filename="mainwindow.cpp" line="375"/>
<location filename="mainwindow.cpp" line="383"/>
<location filename="mainwindow.cpp" line="391"/>
<location filename="mainwindow.cpp" line="397"/>
<location filename="mainwindow.cpp" line="311"/>
<location filename="mainwindow.cpp" line="357"/>
<location filename="mainwindow.cpp" line="368"/>
<location filename="mainwindow.cpp" line="386"/>
<location filename="mainwindow.cpp" line="437"/>
<location filename="mainwindow.cpp" line="493"/>
<location filename="mainwindow.cpp" line="509"/>
<location filename="mainwindow.cpp" line="517"/>
<location filename="mainwindow.cpp" line="525"/>
<location filename="mainwindow.cpp" line="533"/>
<location filename="mainwindow.cpp" line="543"/>
<source>tips</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="255"/>
<location filename="mainwindow.cpp" line="311"/>
<source>no version available</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="256"/>
<location filename="mainwindow.cpp" line="352"/>
<location filename="mainwindow.cpp" line="368"/>
<location filename="mainwindow.cpp" line="376"/>
<location filename="mainwindow.cpp" line="384"/>
<location filename="mainwindow.cpp" line="392"/>
<location filename="mainwindow.cpp" line="398"/>
<location filename="mainwindow.cpp" line="312"/>
<location filename="mainwindow.cpp" line="358"/>
<location filename="mainwindow.cpp" line="369"/>
<location filename="mainwindow.cpp" line="387"/>
<location filename="mainwindow.cpp" line="438"/>
<location filename="mainwindow.cpp" line="494"/>
<location filename="mainwindow.cpp" line="510"/>
<location filename="mainwindow.cpp" line="518"/>
<location filename="mainwindow.cpp" line="526"/>
<location filename="mainwindow.cpp" line="534"/>
<location filename="mainwindow.cpp" line="544"/>
<source>yes</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="287"/>
<location filename="mainwindow.cpp" line="343"/>
<source>Open File</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="287"/>
<source>Zip Files(*.zip *.zip)</source>
<translation>(* .zip)</translation>
<translation type="vanished">(* .zip)</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="304"/>
<location filename="mainwindow.cpp" line="326"/>
<location filename="mainwindow.cpp" line="428"/>
<location filename="mainwindow.cpp" line="449"/>
<location filename="mainwindow.cpp" line="468"/>
<source>device: %1 upgrade firmware success</source>
<translation>%1 </translation>
</message>
<message>
<location filename="mainwindow.cpp" line="308"/>
<source>device: %1 upgrade firmware failed, download file fail</source>
<translation>%1 </translation>
<translation type="vanished">%1 </translation>
</message>
<message>
<location filename="mainwindow.cpp" line="312"/>
<location filename="mainwindow.cpp" line="330"/>
<location filename="mainwindow.cpp" line="256"/>
<source>device: %1, firmware version: %2, upgrade: %3</source>
<translation>: %1, : %2, : %3</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="257"/>
<source>support</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="343"/>
<source>ZIP Files(*.zip *.zip)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="357"/>
<location filename="mainwindow.cpp" line="386"/>
<source>the selected firmware is not newer than the current version</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="368"/>
<source>firmware file mismatch</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="432"/>
<location filename="mainwindow.cpp" line="453"/>
<location filename="mainwindow.cpp" line="472"/>
<source>device: %1 upgrade firmware failed, io error</source>
<translation>%1 IO错误</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="347"/>
<location filename="mainwindow.cpp" line="437"/>
<source>download firmware fail</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="489"/>
<source>Roller scanned count has been set to 0.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="349"/>
<location filename="mainwindow.cpp" line="491"/>
<source>Roller scanned count reset failed.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="367"/>
<location filename="mainwindow.cpp" line="509"/>
<source>old password is wrong</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="375"/>
<location filename="mainwindow.cpp" line="517"/>
<source>new password can not be empty</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="383"/>
<location filename="mainwindow.cpp" line="525"/>
<source>new password is inconsistent</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="391"/>
<location filename="mainwindow.cpp" line="533"/>
<source>modify password fail</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="397"/>
<location filename="mainwindow.cpp" line="543"/>
<source>modify password success</source>
<translation></translation>
</message>

View File

@ -0,0 +1,88 @@
#include "dialog_updateprogress.h"
#include "ui_dialog_updateprogress.h"
#include "base/HGInfo.h"
#include <QMessageBox>
#include <QFile>
#include <QDir>
#include <QCryptographicHash>
Dialog_updateProgress::Dialog_updateProgress(HGVersionMgr versionMgr, const QString &url,
const QString &savePath, QWidget *parent) :
QDialog(parent)
, m_versionMgr(versionMgr)
, m_url(url)
, m_savePath(savePath)
, ui(new Ui::Dialog_updateProgress)
{
ui->setupUi(this);
ui->progressBar->setValue(0);
connect(this, SIGNAL(updateProgress(int)), this, SLOT(on_updateProgress(int)), Qt::QueuedConnection);
connect(this, SIGNAL(finish()), this, SLOT(on_finish()), Qt::QueuedConnection);
m_stopThread = false;
HGBase_OpenThread(ThreadFunc, this, &m_thread);
}
Dialog_updateProgress::~Dialog_updateProgress()
{
if (nullptr != m_thread)
{
HGBase_CloseThread(m_thread);
m_thread = nullptr;
}
delete ui;
}
HGInt HGAPI Dialog_updateProgress::HttpDownloadThreadFunc(HGULonglong totalSize, HGULonglong nowSize, HGPointer param)
{
Dialog_updateProgress *p = (Dialog_updateProgress *)param;
if (p->m_stopThread)
{
return 1;
}
if (totalSize != 0)
{
emit p->updateProgress(((double)nowSize / totalSize) * 100);
}
return 0;
}
void HGAPI Dialog_updateProgress::ThreadFunc(HGThread thread, HGPointer param)
{
(void)thread;
Dialog_updateProgress *p = (Dialog_updateProgress *)param;
HGResult ret = HGVersion_HttpDownload(p->m_versionMgr, p->m_url.toStdString().c_str(), p->m_savePath.toStdString().c_str(), HttpDownloadThreadFunc, p);
if (HGBASE_ERR_OK != ret)
{
QFile::remove(p->m_savePath.toStdString().c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "UpgradeHttpDownload:%u", ret);
}
emit p->finish();
}
void Dialog_updateProgress::on_updateProgress(int value)
{
ui->progressBar->setValue(value);
}
void Dialog_updateProgress::on_finish()
{
accept();
}
void Dialog_updateProgress::on_pushButton_clicked()
{
close();
}
void Dialog_updateProgress::closeEvent(QCloseEvent* e)
{
m_stopThread = true;
}

View File

@ -0,0 +1,46 @@
#ifndef DIALOG_UPDATEPROGRESS_H
#define DIALOG_UPDATEPROGRESS_H
#include <QDialog>
#include "base/HGThread.h"
#include "version/HGVersion.h"
#include "mainwindow.h"
namespace Ui {
class Dialog_updateProgress;
}
class Dialog_updateProgress : public QDialog
{
Q_OBJECT
public:
explicit Dialog_updateProgress(HGVersionMgr versionMgr, const QString &url,
const QString &savePath, QWidget *parent = nullptr);
~Dialog_updateProgress();
private:
static HGInt HGAPI HttpDownloadThreadFunc(HGULonglong totalSize, HGULonglong nowSize, HGPointer param);
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
signals:
void updateProgress(int value);
void finish();
private slots:
void on_updateProgress(int value);
void on_finish();
void on_pushButton_clicked();
protected:
virtual void closeEvent(QCloseEvent* e);
private:
Ui::Dialog_updateProgress *ui;
HGVersionMgr m_versionMgr;
QString m_url;
QString m_savePath;
bool m_stopThread;
HGThread m_thread;
};
#endif // DIALOG_UPDATEPROGRESS_H

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog_updateProgress</class>
<widget class="QDialog" name="Dialog_updateProgress">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>101</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>stop</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -5,46 +5,11 @@
#include <QCryptographicHash>
#include "base/HGBase.h"
Dialog_upgradeFirmware::Dialog_upgradeFirmware(HGVersionMgr versionMgr, SANE_Handle handle, const std::string &url, const std::string &version,
const std::string& md5, QWidget *parent) :
QDialog(parent)
, m_versionMgr(versionMgr)
, m_handle(handle)
, m_url(url)
, m_version(version)
, m_md5(md5)
, m_filePath("")
, m_result(-1)
, ui(new Ui::Dialog_upgradeFirmware)
{
ui->setupUi(this);
setWindowTitle(tr("upgrade"));
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
ui->label_text->setText(tr("firmware upgrade in progress, please wait..."));
QMovie *movie = new QMovie(":images/image_rsc/logo/waiting.gif");
ui->label_gif->setMovie(movie);
movie->setCacheMode(QMovie::CacheAll);
movie->setScaledSize(QSize(ui->label_gif->width(), ui->label_gif->height()));
movie->start();
ui->label_gif->show();
connect(this, SIGNAL(finish()), this, SLOT(on_finish()), Qt::QueuedConnection);
HGBase_OpenThread(ThreadFunc, this, &m_thread);
}
Dialog_upgradeFirmware::Dialog_upgradeFirmware(SANE_Handle handle, const std::string &filePath, QWidget *parent)
: QDialog(parent)
, m_versionMgr(nullptr)
, m_handle(handle)
, m_url("")
, m_version("")
, m_md5("")
, m_filePath(filePath)
, m_result(-1)
, m_result(1)
, ui(new Ui::Dialog_upgradeFirmware)
{
ui->setupUi(this);
@ -82,75 +47,9 @@ void HGAPI Dialog_upgradeFirmware::ThreadFunc(HGThread thread, HGPointer param)
(void)thread;
Dialog_upgradeFirmware *p = (Dialog_upgradeFirmware *)param;
if (nullptr != p->m_versionMgr)
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)p->m_filePath.c_str(), nullptr))
{
HGChar suffix[64];
HGBase_GetFileSuffix(p->m_url.c_str(), suffix, 64);
HGChar savePath[512];
HGBase_GetConfigPath(savePath, 512);
HGBase_CreateDir(savePath);
HGChar fileName[128];
sprintf(fileName, "%s.%s", p->m_version.c_str(), suffix);
strcat(savePath, fileName);
QFile saveFile(savePath);
saveFile.open(QFile::ReadOnly);
QByteArray fileMsg = saveFile.readAll();
saveFile.close();
QString md5_2 = QCryptographicHash::hash(fileMsg, QCryptographicHash::Md5).toHex();
QFile f(savePath);
if (!f.exists() || QString(p->m_md5.c_str()) != md5_2)
{
HGResult ret = HGVersion_HttpDownload(p->m_versionMgr, p->m_url.c_str(), savePath, nullptr, nullptr);
if (HGBASE_ERR_OK == ret)
{
QFile saveFile(savePath);
saveFile.open(QFile::ReadOnly);
QByteArray fileMsg = saveFile.readAll();
saveFile.close();
QString md5_2 = QCryptographicHash::hash(fileMsg, QCryptographicHash::Md5).toHex();
if (QString(p->m_md5.c_str()) == md5_2)
{
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)savePath, nullptr))
{
p->m_result = 0;
}
else
{
p->m_result = 2;
}
}
}
else
{
p->m_result = 1;
}
}
else
{
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)savePath, nullptr))
{
p->m_result = 0;
}
else
{
p->m_result = 2;
}
}
}
else
{
if (SANE_STATUS_GOOD == sane_io_control(p->m_handle, IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)p->m_filePath.c_str(), nullptr))
{
p->m_result = 0;
}
else
{
p->m_result = 2;
}
p->m_result = 0;
}
emit p->finish();

View File

@ -3,7 +3,6 @@
#include <QDialog>
#include "base/HGThread.h"
#include "version/HGVersion.h"
#include "sane/sane_ex.h"
namespace Ui {
@ -15,9 +14,7 @@ class Dialog_upgradeFirmware : public QDialog
Q_OBJECT
public:
Dialog_upgradeFirmware(HGVersionMgr versionMgr, SANE_Handle handle, const std::string &url, const std::string &version,
const std::string& md5, QWidget *parent = nullptr);
Dialog_upgradeFirmware(SANE_Handle handle, const std::string &filePath, QWidget *parent = nullptr);
explicit Dialog_upgradeFirmware(SANE_Handle handle, const std::string &filePath, QWidget *parent = nullptr);
~Dialog_upgradeFirmware();
private:
@ -33,13 +30,9 @@ private slots:
void on_finish();
private:
HGVersionMgr m_versionMgr;
SANE_Handle m_handle;
std::string m_url;
std::string m_version;
std::string m_md5;
std::string m_filePath;
int m_result; // 0-成功 1-下载失败 2-升级失败
int m_result; // 0-成功 1-升级失败
HGThread m_thread;

View File

@ -10,6 +10,18 @@
<height>328</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>498</width>
<height>328</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>498</width>
<height>328</height>
</size>
</property>
<property name="windowTitle">
<string>Login</string>
</property>

View File

@ -4,7 +4,10 @@
#include <QMovie>
#include <QMessageBox>
#include <QFileDialog>
#include <QFileDialog>
#include <QCryptographicHash>
#include "dialog_upgradefirmware.h"
#include "dialog_updateprogress.h"
#include "base/HGBase.h"
#define PASSWORD_KEY 4
@ -90,6 +93,43 @@ QString MainWindow::passwordDecrypt(const QString& transcode)
return password;
}
QString MainWindow::GetDevType(const QString& fwVersion)
{
QString devType;
if (fwVersion.length() == 10)
{
QString dev = fwVersion.left(2);
if (fwVersion.mid(2, 2) == "40" || fwVersion.mid(2, 2) == "50"
|| fwVersion.mid(2, 2) == "60" || fwVersion.mid(2, 2) == "70")
{
// 3288
QString ver = fwVersion.mid(2, 2);
QString date = fwVersion.mid(4, 6);
}
else
{
// 3399
QString ver = fwVersion.mid(2, 3);
QString date = fwVersion.mid(5, 5);
if ((dev == "G1" || dev == "G2") && ver == "393")
{
if (date >= "A1220" && date <= "A1225")
devType = dev + ver + "/" + "A1220-A1225";
else if (date >= "B0326" && date <= "B0331")
devType = dev + ver + "/" + "B0326-B0331";
else if (date >= "B0429")
devType = dev + ver + "/" + "B0429-";
}
else if (dev == "G4" && ver == "393")
{
devType = dev + ver + "/";
}
}
}
return devType;
}
void MainWindow::on_sane_dev_arrive(QString devName, bool opened)
{
int idx = -1;
@ -106,9 +146,15 @@ void MainWindow::on_sane_dev_arrive(QString devName, bool opened)
if (-1 == idx)
{
assert(!opened);
ui->comboDevList->addItem(devName);
ui->comboDevList2->addItem(devName);
}
else if (opened)
{
ui->comboDevList->setCurrentIndex(-1);
ui->comboDevList->setCurrentIndex(idx);
}
}
void MainWindow::on_sane_dev_remove(QString devName)
@ -205,7 +251,10 @@ void MainWindow::on_comboDevList_currentIndexChanged(int index)
}
m_curFwVersion = QString::fromStdString(versionNum.c_str());
ui->labelDevInfo->setText(QString(tr("open device: %1, firmware version: %2")).arg(name).arg(m_curFwVersion));
QString devType = GetDevType(m_curFwVersion);
ui->labelDevInfo->setText(QString(tr("device: %1, firmware version: %2, upgrade: %3")).arg(name)
.arg(m_curFwVersion).arg(!devType.isEmpty() ? tr("support") : tr("do not support")));
SANE_Int historyScanNum = 0;
unsigned int historyScanNumLen = sizeof(SANE_Int);
@ -221,8 +270,11 @@ void MainWindow::on_comboDevList_currentIndexChanged(int index)
ui->labelScanCount->setText(tr("do not support"));
}
ui->btnGetVersionList->setEnabled(true);
ui->btnOpenFilePath->setEnabled(true);
if (!devType.isEmpty())
{
ui->btnGetVersionList->setEnabled(true);
ui->btnOpenFilePath->setEnabled(true);
}
ui->btnClearRollCount->setEnabled(true);
}
else
@ -243,17 +295,10 @@ void MainWindow::on_btnGetVersionList_clicked()
m_versionCount = 0;
ui->comboVersionList->clear();
std::string devType;
if (m_curFwVersion.left(2) == "G1")
devType = "G100";
else if (m_curFwVersion.left(2) == "G2")
devType = "G200";
else if (m_curFwVersion.left(2) == "G3")
devType = "G300";
else if (m_curFwVersion.left(2) == "G4")
devType = "G400";
QString devType = GetDevType(m_curFwVersion);
assert(!devType.isEmpty());
HGVersion_GetDriverVersionList(m_versionMgr, devType.c_str(), &m_versionInfo, &m_versionCount);
HGVersion_GetDriverVersionList(m_versionMgr, devType.toStdString().c_str(), &m_versionInfo, &m_versionCount);
if (0 != m_versionCount)
{
for (HGUInt i = 0; i < m_versionCount; ++i)
@ -295,10 +340,35 @@ void MainWindow::on_editFilePath_textChanged(const QString &arg1)
void MainWindow::on_btnOpenFilePath_clicked()
{
QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("Zip Files(*.zip *.zip)"));
QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"), ".", tr("ZIP Files(*.zip *.zip)"));
if (!filePath.isEmpty())
{
ui->editFilePath->setText(filePath);
QString devType = GetDevType(m_curFwVersion);
assert(!devType.isEmpty());
HGChar fileName[256] = {0};
HGBase_GetFileName(filePath.toStdString().c_str(), fileName, 256);
HGChar fileVersion[256] = {0};
HGBase_GetFilePrefix(fileName, fileVersion, 256);
if (devType == GetDevType(fileVersion))
{
if (m_curFwVersion >= fileVersion)
{
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("the selected firmware is not newer than the current version"), QMessageBox::Yes, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.exec();
}
else
{
ui->editFilePath->setText(filePath);
}
}
else
{
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("firmware file mismatch"), QMessageBox::Yes, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.exec();
}
}
}
@ -307,20 +377,81 @@ void MainWindow::on_btnDownloadUpgrade_clicked()
int idx = ui->comboVersionList->currentIndex();
if (-1 != idx)
{
Dialog_upgradeFirmware dlg(m_versionMgr, m_curDevHandle, m_versionInfo[idx].url, m_versionInfo[idx].version,
m_versionInfo[idx].md5, this);
dlg.exec();
if (0 == dlg.getUpgradeStatus())
QString url = m_versionInfo[idx].url;
QString md5 = m_versionInfo[idx].md5;
QString versionNum = m_versionInfo[idx].version;
if (m_curFwVersion >= versionNum)
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("the selected firmware is not newer than the current version"), QMessageBox::Yes, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.exec();
return;
}
else if (1 == dlg.getUpgradeStatus())
assert(!url.isEmpty() && !md5.isEmpty() && !versionNum.isEmpty());
HGChar suffix[64];
HGBase_GetFileSuffix(url.toStdString().c_str(), suffix, 64);
HGChar savePath[512];
HGBase_GetConfigPath(savePath, 512);
HGBase_CreateDir(savePath);
HGChar fileName[128];
sprintf(fileName, "%s.%s", versionNum.toStdString().c_str(), suffix);
strcat(savePath, fileName);
QFile saveFile(savePath);
saveFile.open(QFile::ReadOnly);
QByteArray fileMsg = saveFile.readAll();
saveFile.close();
QString md5_2 = QCryptographicHash::hash(fileMsg , QCryptographicHash::Md5).toHex();
QFile f(savePath);
if(!f.exists() || md5 != md5_2)
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, download file fail")).arg(m_curDevName));
Dialog_updateProgress dlg(m_versionMgr, url, savePath, this);
if (dlg.exec())
{
QFile saveFile(savePath);
saveFile.open(QFile::ReadOnly);
QByteArray fileMsg = saveFile.readAll();
saveFile.close();
QString md5_2 = QCryptographicHash::hash(fileMsg , QCryptographicHash::Md5).toHex();
if (md5 == md5_2)
{
Dialog_upgradeFirmware dlg(m_curDevHandle, savePath, this);
dlg.exec();
if (0 == dlg.getUpgradeStatus())
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
}
else
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
}
}
else
{
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("download firmware fail"), QMessageBox::Yes, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.exec();
}
}
}
else if (2 == dlg.getUpgradeStatus())
else
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
Dialog_upgradeFirmware dlg(m_curDevHandle, savePath, this);
dlg.exec();
if (0 == dlg.getUpgradeStatus())
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
}
else
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
}
}
}
}
@ -336,7 +467,7 @@ void MainWindow::on_btnUpgrade_clicked()
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware success")).arg(m_curDevName));
}
else if (2 == dlg.getUpgradeStatus())
else
{
ui->labelDevInfo->setText(QString(tr("device: %1 upgrade firmware failed, io error")).arg(m_curDevName));
}
@ -405,6 +536,10 @@ void MainWindow::on_btnModifyPassword_clicked()
return;
}
ui->editOldPassword->setText("");
ui->editNewPassword->setText("");
ui->editNewPassword_2->setText("");
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("modify password success"), QMessageBox::Yes, this);
msg.setButtonText(QMessageBox::Yes, tr("yes"));
msg.exec();

View File

@ -19,6 +19,7 @@ public:
static QString passwordEncrypt(const QString& password);
static QString passwordDecrypt(const QString& transcode);
static QString GetDevType(const QString& fwVersion);
signals:
void sane_dev_arrive(QString devName, bool opened);

View File

@ -144,17 +144,20 @@ INCLUDEPATH += $$PWD/../../../modules/
INCLUDEPATH += $$PWD/../../../../sdk/include/
SOURCES += \
../../../app/fwupgrade/dialog_updateprogress.cpp \
../../../app/fwupgrade/dialog_upgradefirmware.cpp \
../../../app/fwupgrade/logindialog.cpp \
../../../app/fwupgrade/main.cpp \
../../../app/fwupgrade/mainwindow.cpp \
HEADERS += \
../../../app/fwupgrade/dialog_updateprogress.h \
../../../app/fwupgrade/dialog_upgradefirmware.h \
../../../app/fwupgrade/logindialog.h \
../../../app/fwupgrade/mainwindow.h \
FORMS += \
../../../app/fwupgrade/dialog_updateprogress.ui \
../../../app/fwupgrade/dialog_upgradefirmware.ui \
../../../app/fwupgrade/logindialog.ui \
../../../app/fwupgrade/mainwindow.ui