This commit is contained in:
13038267101 2023-12-14 17:27:51 +08:00
commit e2abedf820
5 changed files with 40 additions and 31 deletions

View File

@ -334,7 +334,9 @@
#define SCANNER_NAME_CT_138 "CUMTENN CT-138"
#define SCANNER_NAME_CT_238 "CUMTENN CT-238"
#define SCANNER_NAME_ZJ_6500 "Microtek A3HG Scanner"
#define SCANNER_NAME_ZJ_6570 "Microtek A3HG Scanner"
#define SCANNER_NAME_ZJ_8790 "Microtek A3ES Scanner"
#define SCANNER_NAME_ZJ_500DC "Microtek A3FZ Scanner"
#define SANNNER_NAME_ZG_Q7110 "Uniscan Q7 Series"
#define SANNNER_NAME_ZG_Q1070 "Uniscan Q1 Series"

View File

@ -162,7 +162,7 @@ hg_scanner::hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io, i
, firmware_sup_wait_paper_(false),firmware_sup_pick_strength_(false),firmware_sup_log_export_(false), firmware_sup_log_export_G300_(false),firmware_sup_color_corr_(false),firmware_sup_wake_device_(false)
, firmware_sup_double_img(false),firmware_sup_devs_lock_(false),firmware_sup_dpi_300(false),firmware_sup_dpi_600(false),firmware_sup_auto_speed_(false),firmware_sup_morr_(false)
, firmware_sup_color_fill_(false),firmware_sup_history_cnt(false), have_max_size(false), is_discardblank(false),firmware_sup_device_7010(false), firmware_sup_double_check(false)
, firmware_sup_dirty_check(false)
, firmware_sup_dirty_check(false), firmware_sup_permeation_level(false)
{
#if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64)
isx86_Advan_ = false;
@ -1472,7 +1472,7 @@ bool hg_scanner::jsn_reorganize()
erase_option(SANE_STD_OPT_NAME_RID_MORR);
}
if (pid_ == 0x239 || pid_ == 0x439) //固件不支持防止渗透等级
if ((pid_ == 0x239 || pid_ == 0x439) && !firmware_sup_permeation_level) //固件3C1206之前3399不支持防止渗透等级
{
erase_option(SANE_STD_OPT_NAME_ANTI_PERMEATE_LEVEL);
}

View File

@ -376,6 +376,7 @@ protected:
bool firmware_sup_dirty_check; //固件支持 脏污检测 231027
bool firmware_sup_backup_restore; //固件支持 备份还原 231021
bool firmware_sup_boardTime; //固件支持 板级时间校验 231021
bool firmware_sup_permeation_level; //固件支持 防渗透等级 3399-3C1206
bool firmware_sup_device_7010; //G300 设备但是7010 2023/9/21
int mat_width;
int mat_height;

View File

@ -109,7 +109,7 @@ namespace settings
{200.0f, 1},
{240.0f, 1},
{300.0f, 0},
{600.0f, 1} //涓存椂鐗堟湰鍙? 鍘熸潵鍙?
{600.0f, 1} //临时版本发1 原来发2
};
bool is_equal(float l, float r)
{
@ -331,7 +331,7 @@ int hg_scanner_239::set_auto_flat(int data)
}
if ((fw[5] == 'A' && atoi(fw.substr(6, 4).c_str()) <= 9999))
{
data = data == 1 ? 1 : 0; //鏆傛椂娌℃湁鐢ㄣ€?
data = data == 1 ? 1 : 0; //暂时没有用。
}
if (!wait_usb_.is_waiting())
{
@ -549,6 +549,7 @@ void hg_scanner_239::init_version(void)
firmware_sup_dirty_check = year_date.compare("3C1027") >= 0 ? true : false;
firmware_sup_backup_restore = year_date.compare("3C1021") >= 0 ? true : false;
firmware_sup_boardTime = year_date.compare("3C1021") >= 0 ? true : false;
firmware_sup_permeation_level = year_date.compare("3C1206") >= 0 ? true : false;
if (dev == "G1" || dev == "G2")
{
@ -570,7 +571,7 @@ void hg_scanner_239::init_version(void)
{
firmware_sup_wait_paper_ = year_date.compare("3B0629") >= 0 ? true : false;
firmware_sup_log_export_ = true;
firmware_sup_pick_strength_ = false; //涓嶆敮鎸?
firmware_sup_pick_strength_ = false; //不支持
firmware_sup_wake_device_ = year_date.compare("3C0518") >= 0 ? true : false;
firmware_sup_color_corr_ = year.compare("3C") >= 0 ? true : false;
firmware_sup_double_img = year_date.compare("3C1021") >= 0 ? true : false;
@ -602,7 +603,7 @@ int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware:
int ret = SCANNER_ERR_OK;
if (!type)
return ret;
setting_hardware::HGSCANCONF_3399 p = dev_conf_; //涓嶅緱鏀瑰彉澶栭儴鐨勫€?
setting_hardware::HGSCANCONF_3399 p = dev_conf_; //不得改变外部的值
p.params_3399.is_autopaper = is_auto_scan();
if (!dev_conf)
dev_conf = &p;
@ -623,7 +624,7 @@ int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware:
dev_conf->params_3399.is_fixedpaper = false;
dev_conf->params_3399.en_autosize = true;
}
if (!firmware_sup_auto_speed_ && image_prc_param_.bits.paper == PAPER_AUTO_MATCH)//3399 ,鍦?C涔嬪墠鐨勭増鏈?鍖归厤鍘熷<E98D98>灏哄<E7818F>璁剧疆 12
if (!firmware_sup_auto_speed_ && image_prc_param_.bits.paper == PAPER_AUTO_MATCH)//3399 ,在3C之前的版本 匹配原始尺寸设置 12
{
dev_conf->params_3399.paper = 12;
}
@ -678,9 +679,9 @@ int hg_scanner_239::writedown_image_configuration(void)
ret = write_register(setting3399::SR_CONFIF_IMGPROCPARAM, sizeof(SCANCONF));
ret = io_->write_bulk(&ic, &len);
//杩欎釜鍦版柟浼戠湢鏄<EFBFBD>负浜嗗綋鍒濇煇涓<EFBFBD>瀷鍙疯<EFBFBD>澶囦笅闈㈠湪鍒濆<EFBFBD>鍖栨煇涓<EFBFBD>崗璁<EFBFBD>椂姣旇緝鑰楁椂锛屾墍浠ュ姞涓娿€?
//2023/11/30 <EFBFBD>笘闇€瑕佽兘澶熻緝涓烘祦绋嬬偣鍑绘壂鎻忓埌鍑虹<EFBFBD>涓€寮犲浘锛屾墍浠ヨ繖涓<EFBFBD>湴鏂硅繘琛屽睆钄斤紝濡傛灉鏌愬ぉ鏈夊摢鍙拌<EFBFBD>澶囦笉鍑哄浘锛屼綘鍙<EFBFBD>互鐪嬩笅杩欓噷锛屽<EFBFBD>鐗堟湰杩涜<EFBFBD>鍒ゆ柇鍔犱笂杩欎釜寤舵椂鐨勬搷浣?
// 娉ㄦ剰debug 鍙<>兘浼氳皟璇曚笉鍑烘潵锛屽洜涓鸿<E6B693>鍔犺浇debug淇℃伅锛屾墍浠ュ彂閫佷俊鎭<E4BF8A>氨浼氭參鐐?
//这个地方休眠是为了当初某个型号设备下面在初始化某个协议时比较耗时,所以加上。
//2023/11/30 普世需要能够较为流程点击扫描到出第一张图,所以这个地方进行屏蔽,如果某天有哪台设备不出图,你可以看下这里,对版本进行判断加上这个延时的操作
// 注意debug 可能会调试不出来因为要加载debug信息所以发送信息就会慢点
//this_thread::sleep_for(chrono::milliseconds(500));
//io_->set_timeout(2000);//必要延时
}
@ -928,7 +929,7 @@ int hg_scanner_239::on_resolution_changed(int& dpi)
else
dev_conf_.params_3399.dpi = dpi >= 500 ? 3 : (dpi < 500 && dpi> 299) ? 2 : 1;
//dev_conf_.params_3399.dpi = 1; //dpi 鍗庡噷cis鍜屾暒鍗梒is 榛樿<E6A69B>鍙?鏃犻渶鏀瑰彉
//dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认发1无需改变
int ret = writedown_device_configuration();
return ret;
}
@ -986,7 +987,7 @@ int hg_scanner_239::on_skew_check_changed(bool& check)
int hg_scanner_239::on_skew_check_level_changed(int& check)
{
int ret = SCANNER_ERR_OK,
val = check - 1,//娑撳﹪娼扮拋鍓х枂閻ㄥ嫭妲? - 5 閿涘本甯撮崣妤勫瘱閸ユ潙鈧<EFBFBD>棿璐? - 4閿涘矂绮<E79F82>拋?
val = check - 1,//娑撳﹪娼扮拋鍓х枂閻ㄥ嫭妲? - 5 閿涘本甯撮崣妤勫瘱閸ユ潙鈧棿璐? - 4閿涘矂绮拋?
old = dev_conf_.params_3399.screw_detect_level;
setting_hardware::HGSCANCONF_3399 cf;
@ -1358,7 +1359,7 @@ void hg_scanner_239::thread_get_dves_image(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
io_->set_timeout(500); //2023 11 30涔嬪墠涓€鐩翠娇鐢?000ms 锛屼絾鏄<E7B5BE>负浜嗚兘澶熷揩閫熷搷搴斾笅娆殑鐘舵€佷俊鎭<E4BF8A>繑鍥炶繖閲岃<E996B2><EFBFBD>500ms
io_->set_timeout(500); //2023 11 30之前一直使用1000ms ,但是为了能够快速响应下次的状态信息返回这里设置为500ms
ret = io_->read_interrupt(buf, &size);
}
@ -1367,7 +1368,7 @@ void hg_scanner_239::thread_get_dves_image(void)
if (sw.elapsed_s() > 120 && !is_auto_scan())
{
status_ = ret;
notify_ui_working_status(from_default_language(STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, ret); // 閸欐牕娴橀柅姘<EFBFBD>繆鐡掑懏妞?
notify_ui_working_status(from_default_language(STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, ret); // 閸欐牕娴橀柅姘繆鐡掑懏妞?
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get image time out:%s\n", hg_scanner_err_name(status_));
break;
}
@ -1426,7 +1427,7 @@ void hg_scanner_239::thread_get_dves_image(void)
}
//break;
//鏉╂瑤閲滈弮璺衡偓娆撯偓鈧<EFBFBD>崙铏规畱鐠囨繃绉烽幁顖氭皑鏉╂ɑ鐥呯拠璇茬暚閿涘矂鏁婄拠顖欎繆閹<EFBFBD>垰鍘涙穱婵嗙摠娑撳<EFBFBD>娼甸敍灞藉涧閺堝<EFBFBD>骞忛崣鏍у煂stop閺冭埖澧犻柅鈧<EFBFBD>崙鐚寸礉婵″倹鐏夊▽陇骞忛崣鏍х暚闁<EFBFBD>偓閸戠尨绱濋崣顖濆厴娴兼艾顕遍懛瀵割儑娴滃本顐奸幍顐e伎閻╁瓨甯存潻鏂挎礀閹殿偅寮跨€瑰本鍨?
//鏉╂瑤閲滈弮璺衡偓娆撯偓鈧崙铏规畱鐠囨繃绉烽幁顖氭皑鏉╂ɑ鐥呯拠璇茬暚閿涘矂鏁婄拠顖欎繆閹垰鍘涙穱婵嗙摠娑撳娼甸敍灞藉涧閺堝骞忛崣鏍у煂stop閺冭埖澧犻柅鈧崙鐚寸礉婵″倹鐏夊▽陇骞忛崣鏍х暚闁偓閸戠尨绱濋崣顖濆厴娴兼艾顕遍懛瀵割儑娴滃本顐奸幍顐e伎閻╁瓨甯存潻鏂挎礀閹殿偅寮跨€瑰本鍨?
}
if (info->From == setting3399::IMG)
{
@ -1449,8 +1450,8 @@ void hg_scanner_239::thread_get_dves_image(void)
//else
// VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status(0x%x) is not accept in usb thread\n", status);
}
else if (info->From == setting3399::STOPSCAN)//閸ヨ桨娆㈤悧鍫熸拱:3B0326閼惧嘲褰囬弮鐘电剨閺冭<EFBFBD>绱濇稉瀣<EFBFBD>桨娑擃厽鏌囨穱鈩冧紖娴兼艾鍘涢崣鎴炴¥缁剧ǹ婀<EFBFBD>崑婊勵剾閹殿偅寮?閻掕泛鎮楅崷銊ュ絺閺冪姷鐒?
{ //濮濄倖妞俰nt缁旑垳鍋潻妯款洣娣団剝浼呭▽鈩冩箒鐠囪<EFBFBD>褰囩€瑰矉绱濋懓灞肩瑬闁<EFBFBD>偓閸戣櫣鍋崙鑽ゆ埛缂侇厽澹傞幓蹇ョ礉娑撳<EFBFBD>娼扮拋鎯ь槵鏉╂ɑ<EFBFBD>紒鎾存将閹殿偅寮?
else if (info->From == setting3399::STOPSCAN)//閸ヨ桨娆㈤悧鍫熸拱:3B0326閼惧嘲褰囬弮鐘电剨閺冭绱濇稉瀣桨娑擃厽鏌囨穱鈩冧紖娴兼艾鍘涢崣鎴炴¥缁剧婀崑婊勵剾閹殿偅寮?閻掕泛鎮楅崷銊ュ絺閺冪姷鐒?
{ //濮濄倖妞俰nt缁旑垳鍋潻妯款洣娣団剝浼呭▽鈩冩箒鐠囪褰囩€瑰矉绱濋懓灞肩瑬闁偓閸戣櫣鍋i崙鑽ゆ埛缂侇厽澹傞幓蹇ョ礉娑撳娼扮拋鎯ь槵鏉╂ɑ婀紒鎾存将閹殿偅寮?
if (!svdevs_err_.empty())
{
status_ = svdevs_err_.front();
@ -1462,7 +1463,7 @@ void hg_scanner_239::thread_get_dves_image(void)
//普世
if (pid_ != 0x439)
{
if (img_conf_.resolution_dst > 200 && is_quality_ == IMG_QUALITY) //閸掔娀娅庢潻娆愵唽娴狅絿鐖滈敍灞肩稑閸欘垵鍏橀棁鈧<EFBFBD>憰浣解偓鍐<EFBFBD><EFBFBD>娑撯偓娑撳<EFBFBD>鎮楅弸?
if (img_conf_.resolution_dst > 200 && is_quality_ == IMG_QUALITY) //閸掔娀娅庢潻娆愵唽娴狅絿鐖滈敍灞肩稑閸欘垵鍏橀棁鈧憰浣解偓鍐娑撯偓娑撳鎮楅弸?
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
else
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
@ -1584,7 +1585,7 @@ int hg_scanner_239::do_start(void)
reset();
//211220鍥轰欢鐗堟湰涓嶆敮鎸佽繑鍥?
//211220固件版本不支持返回
ret = get_scan_is_sleep(val);
if (!val && ret == SCANNER_ERR_OK)
{
@ -1875,7 +1876,7 @@ int hg_scanner_239::get_scan_is_sleep(SANE_Bool& type)
std::lock_guard<std::mutex> lock(io_lock_);
int ret = 0,val;
ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0浼戠湢 1鍞ら啋鐘舵€?
ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0休眠 1唤醒状态
if (ret == SCANNER_ERR_OK)
{
type = val == 1 ? true : false;
@ -1972,10 +1973,11 @@ int hg_scanner_239::get_device_log(string &logpath)
int hg_scanner_239::set_devreboot(int data)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 1;
if (data == SANE_POWER_RESTART)
int val = data;
if (val == SANE_POWER_RESTART)
val = 0;
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "3399-device,reboot, send value is: %d\n", val);
return write_register(setting3399::SR_REBOOT, val);
}
int hg_scanner_239::set_devshtudown()
@ -2050,7 +2052,7 @@ int hg_scanner_239::set_scan_lock_check_val(string check_str)
{
return SCANNER_ERR_INVALID_PARAMETER;
}
int num = 32 - keys.size(); //淇濇寔32浣嶄笅鍙?
int num = 32 - keys.size(); //保持32位下发
if (num > 0)
{
std::string str(num, '0');
@ -2110,7 +2112,7 @@ int hg_scanner_239::set_firmware_upgrade(std::string filename)
return SCANNER_ERR_OPEN_FILE_FAILED;
}
fwname.seekg(0, std::ios::end);
int total = fwname.tellg();//璁板綍鎬婚暱搴?
int total = fwname.tellg();//记录总长度
fwname.seekg(0, std::ios::beg);
int pos = fwname.tellg();//记录pos位置
@ -2149,7 +2151,7 @@ int hg_scanner_239::set_firmware_upgrade(std::string filename)
return SCANNER_ERR_DEVICE_UPGRADE_FAIL;
int to_cnt = 0;
// 鍒拌繖涓<EFBFBD>綅缃<EFBFBD>凡缁忚兘澶熷崌绾ф垚鍔熶簡 鍚庨潰瀵瑰崌绾х粨鏋滃仛涓嬪垽鏂?
// 到这个位置已经能够升级成功了 后面对升级结果做下判断
auto now = std::chrono::steady_clock::now();
while (std::chrono::duration<double>(std::chrono::steady_clock::now() - now).count() < 70)
{
@ -2220,7 +2222,7 @@ int hg_scanner_239::set_dev_islock_file(int islockfile)
}
if (islockfile != 0 && islockfile != 1)
{
return SCANNER_ERR_INVALID_PARAMETER; //杩欎釜鍦版柟璁剧疆鐨勫弬鏁板繀椤讳繚璇佹<EFBFBD>纭?
return SCANNER_ERR_INVALID_PARAMETER; //这个地方设置的参数必须保证正确
}
string device_log_path = "/var/log/black_list_file.txt";
string str = std::to_string(islockfile);

View File

@ -73,7 +73,9 @@ g_supporting_devices[] = {
#elif defined(OEM_ZHONGJING)
{0X05DA, 0x9220, SCANNER_NAME_ZJ_6500, "S6570", "",& hg_scanner_mgr::create_scanner_g439}
{0X05DA, 0x9220, SCANNER_NAME_ZJ_6570, "S6570", "",& hg_scanner_mgr::create_scanner_g439}
, {0X05DA, 0x9222, SCANNER_NAME_ZJ_8790, "S8790", "",& hg_scanner_mgr::create_scanner_g239}
, {0X05DA, 0x9223, SCANNER_NAME_ZJ_500DC, "S500DC", "",& hg_scanner_mgr::create_scanner_g239}
#elif defined(OEM_ZIGUANG)
{0x32ec, 0x0200, SANNNER_NAME_ZG_Q7110,"Q7110", "", & hg_scanner_mgr::create_scanner_g239}
, {0x32ec, 0x0210, SANNNER_NAME_ZG_Q1070, "Q1070", "", &hg_scanner_mgr::create_scanner_g402}
@ -100,7 +102,9 @@ g_supporting_devices[] = {
, {0x31c9, PID_AND_NAME(8739, SCANNER_NAME_LSC_G73S), "G73S", "", &hg_scanner_mgr::create_scanner_g239}
, {0x32ec, 0x0200, SANNNER_NAME_ZG_Q7110,"", "",& hg_scanner_mgr::create_scanner_g239}
, {0x32ec, 0x0210, SANNNER_NAME_ZG_Q1070, "", "", &hg_scanner_mgr::create_scanner_g402}
, {0X05DA, 0x9220, SCANNER_NAME_ZJ_6500, "S6500", "",&hg_scanner_mgr::create_scanner_g439}
, {0X05DA, 0x9220, SCANNER_NAME_ZJ_6570, "S6570", "",&hg_scanner_mgr::create_scanner_g439}
, {0X05DA, 0x9222, SCANNER_NAME_ZJ_8790, "S8790", "",&hg_scanner_mgr::create_scanner_g239}
, {0X05DA, 0x9223, SCANNER_NAME_ZJ_500DC, "S500DC", "",&hg_scanner_mgr::create_scanner_g239}
, {0x3308, 0x6006, SCANNER_NAME_CT_9020, SCANNER_NAME_CT_9020, "",& hg_scanner_mgr::create_scanner_g239}
, {0x3308, 0x6005, SCANNER_NAME_CT_4520, SCANNER_NAME_CT_4520, "", &hg_scanner_mgr::create_scanner_g300}
, {0x3308, 0x0238, SCANNER_NAME_CT_138, SCANNER_NAME_CT_138, "", &hg_scanner_mgr::create_scanner_g239}
@ -839,7 +843,7 @@ scanner_err hg_scanner_mgr::hg_scanner_close(scanner_handle h, bool force)
}
}
SCAN_PTR(h)->stop();
//SCAN_PTR(h)->stop(); //shield on 2023.12.13,BUG-853
SCAN_PTR(h)->close(force);
delete SCAN_PTR(h);