From c74cf02a5d260203220354d7d87fb087aa474d24 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Fri, 4 Nov 2022 14:22:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=9B=BA=E4=BB=B6=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scanner/mainwindow.cpp | 60 +++++++++++++++++++++++++------------- app/scanner/mainwindow.h | 6 ++-- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/app/scanner/mainwindow.cpp b/app/scanner/mainwindow.cpp index 357eefc1..58302a29 100644 --- a/app/scanner/mainwindow.cpp +++ b/app/scanner/mainwindow.cpp @@ -1170,24 +1170,29 @@ void MainWindow::on_fwUpgradeAndDevLock_Finish() if (m_vFwUpgradeAndDevLock[index].m_handleFlag & FwUpgradeAndDevLock::FwUpgrade) { - // 升级 - - if (1) // 升级成功 + const char* path = m_vFwUpgradeAndDevLock[index].m_upgradeFilePath.c_str(); + unsigned int len = strlen(path); + SANE_Status rc = sane_io_control(dev_que_.handle(), IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)path, &len); + if (SANE_STATUS_GOOD == rc) { - // 必须升级成功才能取消升级位 m_vFwUpgradeAndDevLock[index].m_handleFlag &= ~FwUpgradeAndDevLock::FwUpgrade; } } if (m_vFwUpgradeAndDevLock[index].m_handleFlag & FwUpgradeAndDevLock::DevLock) { - // 锁定/解锁 - - if (1) // 锁定/解锁成功 + SANE_Bool b = m_vFwUpgradeAndDevLock[index].m_lock; + SANE_Bool b2 = SANE_FALSE; + unsigned int len = sizeof(SANE_Bool); + sane_io_control(dev_que_.handle(), IO_CTRL_CODE_GET_SCAN_ISLOCK, &b2, &len); + if (b2 == b) { - // 必须锁定/解锁成功才能取消锁定位 m_vFwUpgradeAndDevLock[index].m_handleFlag &= ~FwUpgradeAndDevLock::DevLock; } + else + { + sane_io_control(dev_que_.handle(), IO_CTRL_CODE_SET_SCAN_LOCK, &b, NULL); + } } } } @@ -2556,10 +2561,20 @@ void HGAPI MainWindow::FwUpgradeAndDevLockThread(HGThread thread, HGPointer para { if (p->m_vFwUpgradeAndDevLock[index].m_checkFlag & FwUpgradeAndDevLock::FwUpgrade) { + std::string devType; + if (p->m_devVersionNum.left(2) == "G1") + devType = "G100"; + else if (p->m_devVersionNum.left(2) == "G2") + devType = "G200"; + else if (p->m_devVersionNum.left(2) == "G3") + devType = "G300"; + else if (p->m_devVersionNum.left(2) == "G4") + devType = "G400"; + // 检查升级 HGVersionInfo* versionInfo = NULL; HGUInt versionCount = 0; - p->m_versionDll->GetDriverVersionList(p->m_currDeviceName.toStdString().c_str(), &versionInfo, &versionCount); + p->m_versionDll->GetDriverVersionList(devType.c_str(), &versionInfo, &versionCount); if (versionCount > 0) { if ((std::string)(versionInfo[0].version) > p->m_devVersionNum.toStdString()) // 比较版本号 @@ -3471,7 +3486,7 @@ bool MainWindow::open_scanner(const QString& name, const QString& scheme) serialNum.resize(serialNumLen); sane_io_control(dev_que_.handle(), IO_CTRL_CODE_GET_SERIAL, &serialNum[0], &serialNumLen); } - m_devSerialNum = QString::fromStdString(serialNum); + m_devSerialNum = QString::fromStdString(serialNum.c_str()); std::string versionNum; unsigned int versionNumLen = 0; @@ -3481,7 +3496,7 @@ bool MainWindow::open_scanner(const QString& name, const QString& scheme) versionNum.resize(versionNumLen); sane_io_control(dev_que_.handle(), IO_CTRL_CODE_GET_HARDWARE_VERSION, &versionNum[0], &versionNumLen); } - m_devVersionNum = QString::fromStdString(versionNum); + m_devVersionNum = QString::fromStdString(versionNum.c_str()); m_versionDll->PostDeviceOpenInfo(name.toStdString().c_str(), m_devSerialNum.toStdString().c_str(), "", m_devVersionNum.toStdString().c_str()); m_currDeviceName = name; @@ -3500,7 +3515,7 @@ bool MainWindow::open_scanner(const QString& name, const QString& scheme) if (-1 == index) { - FwUpgradeAndDevLock o(m_currDeviceName.toStdString()); + FwUpgradeAndDevLock o(m_currDeviceName.toStdString(), m_devVersionNum.toStdString()); m_vFwUpgradeAndDevLock.push_back(o); index = m_vFwUpgradeAndDevLock.size() - 1; } @@ -3518,24 +3533,29 @@ bool MainWindow::open_scanner(const QString& name, const QString& scheme) if (m_vFwUpgradeAndDevLock[index].m_handleFlag & FwUpgradeAndDevLock::FwUpgrade) { - // 升级 - - if (1) // 升级成功 + const char* path = m_vFwUpgradeAndDevLock[index].m_upgradeFilePath.c_str(); + unsigned int len = strlen(path); + SANE_Status rc = sane_io_control(dev_que_.handle(), IO_CTRL_CODE_SET_FIRMWARE_UPGRADE, (void*)path, &len); + if (SANE_STATUS_GOOD == rc) { - // 必须升级成功才能取消升级位 m_vFwUpgradeAndDevLock[index].m_handleFlag &= ~FwUpgradeAndDevLock::FwUpgrade; } } if (m_vFwUpgradeAndDevLock[index].m_handleFlag & FwUpgradeAndDevLock::DevLock) { - // 锁定/解锁 - - if (1) // 锁定/解锁成功 + SANE_Bool b = m_vFwUpgradeAndDevLock[index].m_lock; + SANE_Bool b2 = SANE_FALSE; + unsigned int len = sizeof(SANE_Bool); + sane_io_control(dev_que_.handle(), IO_CTRL_CODE_GET_SCAN_ISLOCK, &b2, &len); + if (b2 == b) { - // 必须锁定/解锁成功才能取消锁定位 m_vFwUpgradeAndDevLock[index].m_handleFlag &= ~FwUpgradeAndDevLock::DevLock; } + else + { + sane_io_control(dev_que_.handle(), IO_CTRL_CODE_SET_SCAN_LOCK, &b, NULL); + } } } } diff --git a/app/scanner/mainwindow.h b/app/scanner/mainwindow.h index 14013ba3..5081e826 100644 --- a/app/scanner/mainwindow.h +++ b/app/scanner/mainwindow.h @@ -56,10 +56,12 @@ struct FwUpgradeAndDevLock DevLock = 0x00000002, }; - FwUpgradeAndDevLock(const std::string &devName) + FwUpgradeAndDevLock(const std::string &devName, const std::string &versionNum) { m_devName = devName; - m_checkFlag = FwUpgrade | DevLock; + m_checkFlag = 0; + if (versionNum.length() == 10 && versionNum.substr(2) >= "393B0429") + m_checkFlag = FwUpgrade | DevLock; m_handleFlag = 0; }