固件升级调整

This commit is contained in:
13038267101 2022-11-03 18:09:32 +08:00
parent cc8c6a4822
commit 044d889c9a
4 changed files with 86 additions and 0 deletions

View File

@ -3456,6 +3456,11 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
get_scan_islock(&islock);
*((SANE_Bool*)data) = islock;
}
else if (code == IO_CTRL_CODE_SET_FIRMWARE_UPGRADE)
{
string str = (char*)data;
firmware_upgrade(str);
}
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
std::string hg_scanner::get_firmware_version(void)
@ -3506,6 +3511,10 @@ int hg_scanner::set_scan_lock_check_val(string check_str)
{
return -2;
}
int hg_scanner::firmware_upgrade(std::string filename)
{
return -2;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
int hg_scanner::set_leaflet_scan(void)
{

View File

@ -390,6 +390,7 @@ public:
virtual int set_scan_islock(SANE_Bool set_islock);
virtual int get_scan_islock(SANE_Bool* islock);//获取设备是否锁定 -2设备不支持该功能它大于等于0的为正常
virtual int set_scan_lock_check_val(string check_str);//获取设备是否锁定 -2设备不支持该功能它大于等于0的为正常
virtual int firmware_upgrade(std::string filename); //固件升级 -2设备不支持该功能它大于等于0的为正常
};
#ifdef UOS

View File

@ -1893,3 +1893,78 @@ int hg_scanner_239::set_scan_lock_check_val(string check_str)
return ret;
#endif
}
int hg_scanner_239::firmware_upgrade(std::string filename)
{
std::ifstream fwname;
int ret = SCANNER_ERR_OK;
fwname.open(filename, std::ios_base::in | std::ios_base::binary);
if (!fwname.is_open())
{
return false;
}
fwname.seekg(0, std::ios::end);
int total = fwname.tellg();//记录总长度
fwname.seekg(0, std::ios::beg);
int pos = fwname.tellg();//记录pos位置
ret = write_register(setting3399::SR_UPDATA_START,total);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
int block = total;
while (total > 0)
{
block = 512 * 1024;
if (total < block)
block = total;
std::vector<char>data;
data.resize(block + 1);
fwname.read(data.data(), block);
io_->write_bulk(data.data(), &block);
if (ret != SCANNER_ERR_OK)
return ret;
pos += block;
total -= block;
fwname.seekg(pos);
}
this_thread::sleep_for(std::chrono::milliseconds(200));
int val = 0;
int ret = read_register(setting3399::SR_UPDATA_STAUTUS, &val);
if (ret != SCANNER_ERR_OK)
return ret;
else if (!val)
return SCANNER_ERR_DEVICE_UPGRADE_FAIL;
int to_cnt = 0;
//暂时屏蔽 到这个位置已经能够升级成功了 后面对升级结果做下判断
//while (to_cnt++ > 20)
{
/*int ret = read_register(setting3399::SR_UPDATA_MD5_RELUST, &val);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
if (val == 2)
{
}
else if(val ==3)
{
}
else if (true)
{
}
this_thread::sleep_for(std::chrono::milliseconds(20));*/
}
return ret;
}

View File

@ -129,5 +129,6 @@ public:
virtual int set_scan_islock(SANE_Bool set_islock);
virtual int get_scan_islock(SANE_Bool* islock);
virtual int set_scan_lock_check_val(string check_str);
virtual int firmware_upgrade(std::string filename);
};