调整整个锁的流程,在锁线程加上延时 暂时解决可能性的死锁(不一定待测试)
This commit is contained in:
parent
d5893e7cc5
commit
22a655c7e7
|
@ -155,7 +155,7 @@ hg_scanner::hg_scanner(ScannerSerial serial
|
|||
, isremove_left_hole_threshold(0), isremove_right_hole_threshold(0), isremove_top_hole_threshold(0), isremove_low_hole_threshold(0)
|
||||
, dump_usb_path_(""),is_kernelsnap_211209_(false), pid_(0), dump_img_(&hg_scanner::dump_image_empty), is_kernelsnap_220830_(false),is_kernelsnap3288_221106_(false)
|
||||
, is_kernelsnap_221027_(false), memory_size_(1024/*USB+JPEG压缩及图像处理图队列,总共1GB*/), isx86_Advan_(true), stop_fatal_(SCANNER_ERR_OK), is_auto_paper_scan(false)
|
||||
,size_check(false), save_sleeptime_type_(false), is_kernelsnap_devsislock(false)
|
||||
,size_check(false), save_sleeptime_type_(false), is_kernelsnap_devsislock(false), is_checksum_strat_scan(false)
|
||||
{
|
||||
#if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64)
|
||||
isx86_Advan_ = false;
|
||||
|
@ -322,6 +322,7 @@ void hg_scanner::thread_devslock_handle(void)
|
|||
wait_devsislock_.wait();
|
||||
while (is_firstopen_ && is_kernelsnap_devsislock)
|
||||
{
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||
ret = set_server_blacklist_lock();
|
||||
hg_version_free_handle();
|
||||
is_firstopen_ = false;
|
||||
|
@ -461,46 +462,55 @@ int hg_scanner::set_server_blacklist_lock()
|
|||
strcpy(snbuffer, sn.c_str());
|
||||
strcpy(fvbuffer, fv.c_str());
|
||||
sprintf(pidbuffer, "%0x", pid_);
|
||||
HGResult ret = HGVersion_Islock_(HGVersion_mgr_, snbuffer, &islock);
|
||||
if (ret != 0)
|
||||
//优先从机器设备上进行校验
|
||||
int ret = HGVersion_Islock_(HGVersion_mgr_, snbuffer, &islock);
|
||||
int islock_file = 0;
|
||||
if (ret != 0) //服务器没有连接到网络
|
||||
{
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "net is 404:%d\n", ret);
|
||||
return -1; //服务器没有连接到网络
|
||||
ret = get_dev_islock_file(islock_file);
|
||||
if (ret != SCANNER_ERR_OK || islock_file < 0); //设备文件和内容获取不到
|
||||
{
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "net is :%d and not find devslistfile ,so scan with a checksum\n", 404);
|
||||
ret = get_scan_islock(scan_islock);
|
||||
if (ret == SCANNER_ERR_DEVICE_ISLOCK)
|
||||
{
|
||||
is_checksum_strat_scan = true; //通过校验码来进行扫描
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
is_checksum_strat_scan = false;
|
||||
islock_file == 0 ? set_scan_islock(0) : set_scan_islock(1);
|
||||
return islock_file;
|
||||
}
|
||||
|
||||
if (!islock)
|
||||
{
|
||||
set_dev_islock_file(0);
|
||||
ret = get_scan_islock(scan_islock);
|
||||
if (ret == SCANNER_ERR_DEVICE_ISLOCK)
|
||||
{
|
||||
ret = set_scan_islock(0); //解锁设备
|
||||
ret = set_scan_islock(0);
|
||||
if (ret != SCANNER_ERR_OK)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
ret = HGVersion_Postlog_(HGVersion_mgr_, pidbuffer, snbuffer, fv.substr(0, 4).c_str(), fvbuffer, islock); //发送日志到服务,第三个参数随意字符串但不能为NULL
|
||||
if (ret != 0)
|
||||
{
|
||||
return -1; //服务器没有连接到网络
|
||||
}
|
||||
}
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "scanner go:%d\n", islock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = set_scan_islock(1); //锁定设备
|
||||
set_dev_islock_file(1);
|
||||
ret = set_scan_islock(1);
|
||||
if (ret != SCANNER_ERR_OK)
|
||||
{
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Dev is locked err:%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
ret = HGVersion_Postlog_(HGVersion_mgr_, pidbuffer, snbuffer, fv.substr(0,4).c_str(), fvbuffer, islock);
|
||||
ret = HGVersion_Postlog_(HGVersion_mgr_, pidbuffer, snbuffer, fv.substr(0, 4).c_str(), fvbuffer, islock);
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Dev is locked succeed:%d\n", ret);
|
||||
if (ret != 0)
|
||||
{
|
||||
return -1; //服务器没有连接到网络
|
||||
}
|
||||
|
||||
return ret = islock ? SCANNER_ERR_DEVICE_ISLOCK : SCANNER_ERR_OK;
|
||||
return ret ;
|
||||
}
|
||||
void hg_scanner::hg_version_free_handle()
|
||||
{
|
||||
|
@ -3415,6 +3425,14 @@ int hg_scanner::clean_paper_road()
|
|||
{
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
int hg_scanner::get_dev_islock_file(int& islockfile)
|
||||
{
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
int hg_scanner::set_dev_islock_file(int islockfile)
|
||||
{
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
int hg_scanner::set_leaflet_scan(void)
|
||||
{
|
||||
|
|
|
@ -264,7 +264,7 @@ protected:
|
|||
virtual void thread_handle_usb_read(void) = 0;
|
||||
virtual void thread_handle_islock_read();
|
||||
int hg_version_init_handle();
|
||||
int set_server_blacklist_lock();
|
||||
int set_server_blacklist_lock(); // 0:不锁定 1:锁定
|
||||
void hg_version_free_handle();
|
||||
// adjust color or apply custom gamma
|
||||
void adjust_color(hg_imgproc::HIMGPRC handle);
|
||||
|
@ -273,6 +273,7 @@ protected:
|
|||
hg_imgproc::HIMGPRC ImagePrc_pHandle_;
|
||||
protected:
|
||||
ScannerSerial serial_;
|
||||
volatile bool is_checksum_strat_scan; //是否通过校验码来进行扫描,没有网络并且获取不到设备文件和设备文件信息时 才为true
|
||||
volatile bool run_;
|
||||
volatile bool user_cancel_;
|
||||
platform_event wait_usb_;
|
||||
|
@ -337,7 +338,6 @@ protected:
|
|||
bool is_kernelsnap3288_221106_; //G300 3288 在221106版本支持真实dpi
|
||||
bool is_kernelsnap_220430_; //待纸扫描
|
||||
bool is_kernelsnap_devsislock;//支持设备锁的版本
|
||||
|
||||
SCANCONF img_conf_; //此参数外部不做任何改变,请在writedown_image_configuration做修改
|
||||
std::string img_type_;
|
||||
|
||||
|
@ -456,11 +456,13 @@ public:
|
|||
virtual int get_device_log(string &log); //获取设备日志
|
||||
virtual int set_devreboot(); //设置设备重启
|
||||
virtual int set_devshtudown(); //设置设备关机
|
||||
virtual int set_scan_islock(SANE_Bool set_islock); //设置设备是否锁定
|
||||
virtual int get_scan_islock(SANE_Bool& islock); //获取设备是否锁定
|
||||
virtual int set_scan_islock(SANE_Bool set_islock); //设置设备是否锁定 0解锁,1锁定 ret
|
||||
virtual int get_scan_islock(SANE_Bool& islock); //获取设备是否锁定 0解锁,1锁定
|
||||
virtual int set_scan_lock_check_val(string check_str); //获取设备是否锁定
|
||||
virtual int firmware_upgrade(std::string filename); //固件升级
|
||||
virtual int clean_paper_road(); //清理纸道
|
||||
virtual int get_dev_islock_file(int &islockfile); //获取设备文件 设备锁状态 0 未上锁,1 上锁。-1 未发现黑名单列表 -2列表当中没有信息
|
||||
virtual int set_dev_islock_file(int islockfile); //设置设备文件 设备锁状态 0 未上锁,1 上锁。
|
||||
};
|
||||
|
||||
#ifdef UOS
|
||||
|
|
|
@ -392,7 +392,6 @@ void hg_scanner_239::init_version(void)
|
|||
is_kernelsnap_220430_ = true;
|
||||
else
|
||||
is_kernelsnap_220430_ = false;
|
||||
|
||||
}
|
||||
int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware::HGSCANCONF_3399* dev_conf)
|
||||
{
|
||||
|
@ -1079,6 +1078,10 @@ int hg_scanner_239::start(void)
|
|||
if (handled)
|
||||
return ret;
|
||||
|
||||
if (is_checksum_strat_scan)
|
||||
{
|
||||
set_scan_lock_check_val("1AFE734C123F5FFCAD1113AD99A99006");
|
||||
}
|
||||
user_cancel_ = false;
|
||||
ret = on_is_auto_paper(is_auto_paper_scan);
|
||||
split3399_ = 0;
|
||||
|
@ -1592,3 +1595,82 @@ int hg_scanner_239::clean_paper_road()
|
|||
ret = write_register(setting3399::SR_CLEAN_PAPER_ROAD, len);
|
||||
return ret;
|
||||
}
|
||||
int hg_scanner_239::get_dev_islock_file(int& islockfile)
|
||||
{
|
||||
if (!is_kernelsnap_devsislock)
|
||||
{
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
|
||||
string device_log_path = "/var/log/black_list_file.txt";
|
||||
string str;
|
||||
|
||||
int ret = SCANNER_ERR_OK;
|
||||
int buffersize = 0;
|
||||
int len = device_log_path.size();
|
||||
|
||||
ret = write_register(setting3399::SR_SET_JSON_PATH, len);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
ret = io_->write_bulk(&device_log_path[0], &len);
|
||||
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
ret = read_register(setting3399::SR_GET_JSON_SIZE, &buffersize);
|
||||
|
||||
if (ret == SCANNER_ERR_OK && buffersize > 0)
|
||||
ret = write_register(setting3399::SR_GET_JSON, buffersize);
|
||||
|
||||
if (ret == SCANNER_ERR_OK && buffersize > 0)
|
||||
{
|
||||
str.resize(buffersize);
|
||||
ret = io_->read_bulk(&str[0], &buffersize);
|
||||
}
|
||||
|
||||
if (ret == SCANNER_ERR_OK && str.size() > 0)
|
||||
islockfile = std::stoi(str);
|
||||
else
|
||||
islockfile = -1;
|
||||
|
||||
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "get list file is:%s ret:%s buffersize: %d\n", device_log_path.c_str(), hg_scanner_err_name(ret), buffersize);
|
||||
return ret;
|
||||
}
|
||||
int hg_scanner_239::set_dev_islock_file(int islockfile)
|
||||
{
|
||||
if (!is_kernelsnap_devsislock)
|
||||
{
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
if (islockfile != 0 && islockfile != 1)
|
||||
{
|
||||
return SCANNER_ERR_INVALID_PARAMETER; //这个地方设置的参数必须保证正确
|
||||
}
|
||||
string device_log_path = "/var/log/black_list_file.txt";
|
||||
string str = std::to_string(islockfile);
|
||||
|
||||
int ret = SCANNER_ERR_OK;
|
||||
int buffersize = 0;
|
||||
int len = device_log_path.size();
|
||||
int lenstr = str.size();
|
||||
io_->set_timeout(3000);
|
||||
ret = write_register(setting3399::SR_SET_JSON_PATH, len);
|
||||
if (ret != SCANNER_ERR_OK)
|
||||
return ret;
|
||||
|
||||
ret = io_->write_bulk(&device_log_path[0], &len);
|
||||
if (ret != SCANNER_ERR_OK)
|
||||
return ret;
|
||||
|
||||
|
||||
ret = write_register(setting3399::SR_SET_JSON, lenstr);
|
||||
if (ret != SCANNER_ERR_OK)
|
||||
return ret;
|
||||
|
||||
ret = io_->write_bulk(&str[0], &lenstr);
|
||||
if (ret != SCANNER_ERR_OK)
|
||||
return ret;
|
||||
|
||||
//VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s buffersize: %d\n", logpath.c_str(), hg_scanner_err_name(ret), buffersize);
|
||||
//return ret;
|
||||
return SCANNER_ERR_OK;
|
||||
}
|
|
@ -111,5 +111,7 @@ public:
|
|||
virtual int set_scan_lock_check_val(string check_str);
|
||||
virtual int firmware_upgrade(std::string filename);
|
||||
virtual int clean_paper_road(); //清理纸道
|
||||
virtual int get_dev_islock_file(int& islockfile); //获取设备文件 设备锁状态 0 未上锁,1 上锁。
|
||||
virtual int set_dev_islock_file(int islockfile); //设置设备文件 设备锁状态 0 未上锁,1 上锁。
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue