完善固件升级功能

This commit is contained in:
luoliangyi 2022-11-04 14:22:38 +08:00
parent df2ccc5b14
commit c74cf02a5d
2 changed files with 44 additions and 22 deletions

View File

@ -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);
}
}
}
}

View File

@ -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;
}