完善固件升级功能
This commit is contained in:
parent
df2ccc5b14
commit
c74cf02a5d
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,9 +56,11 @@ struct FwUpgradeAndDevLock
|
|||
DevLock = 0x00000002,
|
||||
};
|
||||
|
||||
FwUpgradeAndDevLock(const std::string &devName)
|
||||
FwUpgradeAndDevLock(const std::string &devName, const std::string &versionNum)
|
||||
{
|
||||
m_devName = devName;
|
||||
m_checkFlag = 0;
|
||||
if (versionNum.length() == 10 && versionNum.substr(2) >= "393B0429")
|
||||
m_checkFlag = FwUpgrade | DevLock;
|
||||
m_handleFlag = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue