调整部分编码格式导致中文乱码的问题

This commit is contained in:
yangjiaxuan 2023-10-12 13:56:04 +08:00
parent eaf4243787
commit 66276e6c9f
5 changed files with 132 additions and 133 deletions

View File

@ -105,7 +105,7 @@ namespace settings
{200.0f, 1}, {200.0f, 1},
{240.0f, 1}, {240.0f, 1},
{300.0f, 0}, {300.0f, 0},
{600.0f, 1} //涓存椂鐗堟湰鍙? 鍘熸潵鍙? {600.0f, 1} //临时版本发1 原来发2
}; };
bool is_equal(float l, float r) bool is_equal(float l, float r)
{ {
@ -254,7 +254,7 @@ int hg_scanner_239::get_scan_mode(bool &type)
{ {
std::lock_guard<std::mutex> lock(io_lock_); std::lock_guard<std::mutex> lock(io_lock_);
int val = 0, int val = 0,
ret = read_register(setting3399::SR_OS, &val); //val == 1璁℃暟妯″紡 ret = read_register(setting3399::SR_OS, &val); //val == 1计数模式
type =val == 1 ? false : true; type =val == 1 ? false : true;
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_scan_mode: %s\n", !type ? hg_scanner_err_description(SCANNER_ERR_DEVICE_COUNT_MODE) : hg_scanner_err_description(SCANNER_ERR_OK)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_scan_mode: %s\n", !type ? hg_scanner_err_description(SCANNER_ERR_DEVICE_COUNT_MODE) : hg_scanner_err_description(SCANNER_ERR_OK));
@ -278,9 +278,9 @@ int hg_scanner_239::set_devs_distortion_check_val(float data)
std::lock_guard<std::mutex> lock(io_lock_); std::lock_guard<std::mutex> lock(io_lock_);
int val = *(int*)&data; int val = *(int*)&data;
setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_V_RATIO; //鍗庡噷鐣稿彉璁剧疆 setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_V_RATIO; //华凌畸变设置
if (firmware_sup_log_export_)//鏁﹀崡鐣稿彉璁剧疆 if (firmware_sup_log_export_)//敦南畸变设置
{ {
if (resolution_ <= 200) if (resolution_ <= 200)
ratio = setting3399::SR_SET_V_200_RATIO; ratio = setting3399::SR_SET_V_200_RATIO;
@ -324,7 +324,7 @@ int hg_scanner_239::set_auto_flat(int data)
} }
if ((fw[5] == 'A' && atoi(fw.substr(6, 4).c_str()) <= 9999)) 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()) if (!wait_usb_.is_waiting())
{ {
@ -537,10 +537,10 @@ void hg_scanner_239::init_version(void)
{ {
firmware_sup_wait_paper_ = year_date.compare("3B0629") >= 0 ? true : false; firmware_sup_wait_paper_ = year_date.compare("3B0629") >= 0 ? true : false;
firmware_sup_log_export_ = true; 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_wake_device_ = year_date.compare("3C0518") >= 0 ? true : false;
firmware_sup_color_corr_ = year.compare("3C") >= 0 ? true : false; firmware_sup_color_corr_ = year.compare("3C") >= 0 ? true : false;
firmware_sup_double_img = false; //涓嶆敮鎸? firmware_sup_double_img = false; //不支持
firmware_sup_devs_lock_ = year.compare("3C") >= 0 ? true : false; firmware_sup_devs_lock_ = year.compare("3C") >= 0 ? true : false;
firmware_sup_dpi_300 = false; firmware_sup_dpi_300 = false;
firmware_sup_dpi_600 = true; firmware_sup_dpi_600 = true;
@ -569,7 +569,7 @@ int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware:
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
if (!type) if (!type)
return ret; return ret;
setting_hardware::HGSCANCONF_3399 p = dev_conf_; //涓嶅緱鏀瑰彉澶栭儴鐨勫€? setting_hardware::HGSCANCONF_3399 p = dev_conf_; //不得改变外部的值
if (!dev_conf) if (!dev_conf)
dev_conf = &p; dev_conf = &p;
@ -589,7 +589,7 @@ int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware:
dev_conf->params_3399.is_fixedpaper = false; dev_conf->params_3399.is_fixedpaper = false;
dev_conf->params_3399.en_autosize = true; dev_conf->params_3399.en_autosize = true;
} }
if (!firmware_sup_auto_speed_ && image_prc_param_.bits.paper == PAPER_AUTO_MATCH)//3399 ,鍦?C涔嬪墠鐨勭増鏈?鍖归厤鍘熷灏哄璁剧疆 12 if (!firmware_sup_auto_speed_ && image_prc_param_.bits.paper == PAPER_AUTO_MATCH)//3399 ,在3C之前的版本 匹配原始尺寸设置 12
{ {
dev_conf->params_3399.paper = 12; dev_conf->params_3399.paper = 12;
} }
@ -656,7 +656,7 @@ int hg_scanner_239::writedown_image_configuration(void)
ret = io_->write_bulk(&ic, &len); ret = io_->write_bulk(&ic, &len);
this_thread::sleep_for(chrono::milliseconds(500)); this_thread::sleep_for(chrono::milliseconds(500));
io_->set_timeout(2000);//蹇呰寤舵椂 io_->set_timeout(2000);//必要延时
} }
return ret; return ret;
} }
@ -734,7 +734,7 @@ int hg_scanner_239::read_one_image_from_usb(SANE_Image_Statu statu)
break; break;
} }
block = size; block = size;
ret = io_->read_bulk(buff, &block); //鍙兘浼氬嚭鐜癟IME_OUT 鐒跺悗鍙兘閫€鍑哄幓锛屼笅涓€娆″啀鏉ュ彇 ret = io_->read_bulk(buff, &block); //可能会出现TIME_OUT 然后只能退出去,下一次再来取
if (ret != SCANNER_ERR_OK) if (ret != SCANNER_ERR_OK)
{ {
@ -895,7 +895,7 @@ int hg_scanner_239::on_resolution_changed(int& dpi)
else else
dev_conf_.params_3399.dpi = dpi >= 500 ? 3 : (dpi < 500 && dpi> 299) ? 2 : 1; dev_conf_.params_3399.dpi = dpi >= 500 ? 3 : (dpi < 500 && dpi> 299) ? 2 : 1;
//dev_conf_.params_3399.dpi = 1; //dpi 鍗庡噷cis鍜屾暒鍗梒is 榛樿鍙?鏃犻渶鏀瑰彉 //dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认发1无需改变
int ret = writedown_device_configuration(); int ret = writedown_device_configuration();
return ret; return ret;
} }
@ -953,7 +953,7 @@ int hg_scanner_239::on_skew_check_changed(bool& check)
int hg_scanner_239::on_skew_check_level_changed(int& check) int hg_scanner_239::on_skew_check_level_changed(int& check)
{ {
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
val = check - 1,//涓婇潰璁剧疆鐨勬槸1 - 5 锛屾帴鍙楄寖鍥村€间负0 - 4锛岄粯璁? val = check - 1,//上面设置的是1 - 5 接受范围值为0 - 4默认2
old = dev_conf_.params_3399.screw_detect_level; old = dev_conf_.params_3399.screw_detect_level;
setting_hardware::HGSCANCONF_3399 cf; setting_hardware::HGSCANCONF_3399 cf;
@ -1002,7 +1002,7 @@ int hg_scanner_239::on_skew_check_level_changed(int& check)
return ret; return ret;
} }
int hg_scanner_239::on_get_feedmode(int &feedmode)//鑾峰彇鍒嗙焊寮哄害 int hg_scanner_239::on_get_feedmode(int &feedmode)//获取分纸强度
{ {
std::lock_guard<std::mutex> lock(io_lock_); std::lock_guard<std::mutex> lock(io_lock_);
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
@ -1016,7 +1016,7 @@ int hg_scanner_239::on_get_feedmode(int &feedmode)//鑾峰彇鍒嗙焊寮哄害
} }
return ret; return ret;
} }
int hg_scanner_239::on_set_feedmode(int feedmode)//璁剧疆鍒嗙焊寮哄害 int hg_scanner_239::on_set_feedmode(int feedmode)//设置分纸强度
{ {
std::lock_guard<std::mutex> lock(io_lock_); std::lock_guard<std::mutex> lock(io_lock_);
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
@ -1119,8 +1119,8 @@ void hg_scanner_239::thread_correction(void)
{ {
is_auto_falt = false; is_auto_falt = false;
status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER; status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
//notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_FAIL_OUTTIME), SANE_EVENT_ERROR, ret); // 閫氫俊瓒呮椂 //notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_FAIL_OUTTIME), SANE_EVENT_ERROR, ret); // 通信超时
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "璁惧鏍℃瓒呮椂 '%s'\n", hg_scanner_err_name(status_)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "设备校正超时 '%s'\n", hg_scanner_err_name(status_));
break; break;
} }
std::this_thread::sleep_for(std::chrono::milliseconds(500)); std::this_thread::sleep_for(std::chrono::milliseconds(500));
@ -1275,7 +1275,7 @@ void hg_scanner_239::thread_get_dves_image(void)
if (sw.elapsed_s() > 60 && !is_auto_paper_scan) if (sw.elapsed_s() > 60 && !is_auto_paper_scan)
{ {
status_ = ret; status_ = ret;
notify_ui_working_status(from_default_language(STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, ret); // 鍙栧浘閫氫俊瓒呮椂 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_)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get image time out:%s\n", hg_scanner_err_name(status_));
break; break;
} }
@ -1293,7 +1293,7 @@ void hg_scanner_239::thread_get_dves_image(void)
//break; //break;
} }
if (user_cancel_ && is_auto_paper_scan) //鍏朵粬鐩存帴璺宠繃褰撴寰潖 if (user_cancel_ && is_auto_paper_scan) //其他直接跳过当此循坏
{ {
size = sizeof(buf); size = sizeof(buf);
memset(buf, 0, size); memset(buf, 0, size);
@ -1443,8 +1443,7 @@ void hg_scanner_239::thread_get_dves_image(void)
} }
} }
this_thread::sleep_for(chrono::milliseconds(10)); this_thread::sleep_for(chrono::milliseconds(10));
// stop 通过int端点返回 如果不反回则是固件问题,软件不做处理
// stop 閫氳繃int绔偣杩斿洖 濡傛灉涓嶅弽鍥炲垯鏄浐浠堕棶棰橈紝杞欢涓嶅仛澶勭悊
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_description(status_)); VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_description(status_));
} }
void hg_scanner_239::thread_handle_usb_read(void) void hg_scanner_239::thread_handle_usb_read(void)
@ -1474,7 +1473,7 @@ int hg_scanner_239::start(void)
reset(); reset();
//211220鍥轰欢鐗堟湰涓嶆敮鎸佽繑鍥? //211220固件版本不支持返回
ret = get_scan_is_sleep(val); ret = get_scan_is_sleep(val);
if (!val && ret == SCANNER_ERR_OK) if (!val && ret == SCANNER_ERR_OK)
{ {
@ -1750,7 +1749,7 @@ int hg_scanner_239::get_scanner_paperon(SANE_Bool& type)
std::lock_guard<std::mutex> lock(io_lock_); std::lock_guard<std::mutex> lock(io_lock_);
int val = 0; int val = 0;
int ret = read_register(setting3399::SR_GET_PAPERON, &val); //0鏃犵焊 1鏈夌焊 int ret = read_register(setting3399::SR_GET_PAPERON, &val); //0无纸 1有纸
if (ret == SCANNER_ERR_OK) if (ret == SCANNER_ERR_OK)
{ {
type = val == 0 ? false : true; type = val == 0 ? false : true;
@ -1765,7 +1764,7 @@ int hg_scanner_239::get_scan_is_sleep(SANE_Bool& type)
std::lock_guard<std::mutex> lock(io_lock_); std::lock_guard<std::mutex> lock(io_lock_);
int ret = 0,val; 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) if (ret == SCANNER_ERR_OK)
{ {
type = val == 1 ? true : false; type = val == 1 ? true : false;
@ -1937,7 +1936,7 @@ int hg_scanner_239::set_scan_lock_check_val(string check_str)
{ {
return SCANNER_ERR_INVALID_PARAMETER; return SCANNER_ERR_INVALID_PARAMETER;
} }
int num = 32 - keys.size(); //淇濇寔32浣嶄笅鍙? int num = 32 - keys.size(); //保持32位下发
if (num > 0) if (num > 0)
{ {
std::string str(num, '0'); std::string str(num, '0');
@ -1997,9 +1996,9 @@ int hg_scanner_239::set_firmware_upgrade(std::string filename)
return SCANNER_ERR_OPEN_FILE_FAILED; return SCANNER_ERR_OPEN_FILE_FAILED;
} }
fwname.seekg(0, std::ios::end); fwname.seekg(0, std::ios::end);
int total = fwname.tellg();//璁板綍鎬婚暱搴? int total = fwname.tellg();//记录总长度
fwname.seekg(0, std::ios::beg); fwname.seekg(0, std::ios::beg);
int pos = fwname.tellg();//璁板綍pos浣嶇疆 int pos = fwname.tellg();//记录pos位置
ret = write_register(setting3399::SR_UPDATA_START,total); ret = write_register(setting3399::SR_UPDATA_START,total);
if (ret != SCANNER_ERR_OK) if (ret != SCANNER_ERR_OK)
@ -2036,7 +2035,7 @@ int hg_scanner_239::set_firmware_upgrade(std::string filename)
return SCANNER_ERR_DEVICE_UPGRADE_FAIL; return SCANNER_ERR_DEVICE_UPGRADE_FAIL;
int to_cnt = 0; int to_cnt = 0;
// 鍒拌繖涓綅缃凡缁忚兘澶熷崌绾ф垚鍔熶簡 鍚庨潰瀵瑰崌绾х粨鏋滃仛涓嬪垽鏂? // 到这个位置已经能够升级成功了 后面对升级结果做下判断
auto now = std::chrono::steady_clock::now(); auto now = std::chrono::steady_clock::now();
while (std::chrono::duration<double>(std::chrono::steady_clock::now() - now).count() < 70) while (std::chrono::duration<double>(std::chrono::steady_clock::now() - now).count() < 70)
{ {
@ -2103,7 +2102,7 @@ int hg_scanner_239::set_dev_islock_file(int islockfile)
} }
if (islockfile != 0 && islockfile != 1) if (islockfile != 0 && islockfile != 1)
{ {
return SCANNER_ERR_INVALID_PARAMETER; //杩欎釜鍦版柟璁剧疆鐨勫弬鏁板繀椤讳繚璇佹纭? return SCANNER_ERR_INVALID_PARAMETER; //这个地方设置的参数必须保证正确
} }
string device_log_path = "/var/log/black_list_file.txt"; string device_log_path = "/var/log/black_list_file.txt";
string str = std::to_string(islockfile); string str = std::to_string(islockfile);

View File

@ -1,4 +1,4 @@
#pragma once #pragma once
// hg_scanner is the base class of kinds of scanners // hg_scanner is the base class of kinds of scanners
// //
@ -38,7 +38,7 @@ class hg_scanner_239 : public hg_scanner
int read_register(int addr, int* val); int read_register(int addr, int* val);
int write_register(int addr, int val); int write_register(int addr, int val);
int write_command(int cmd); int write_command(int cmd);
int writedown_device_configuration(bool type = false, setting_hardware::HGSCANCONF_3399* dev_conf = NULL);//false 鍦╯tart鍐嶆妸type缃负true,鍏朵粬鍋氳缃椂涓嶅彂 int writedown_device_configuration(bool type = false, setting_hardware::HGSCANCONF_3399* dev_conf = NULL);//false 在start再把type置为true,其他做设置时不发
int writedown_image_configuration(void); int writedown_image_configuration(void);
int pop_first_image(void); int pop_first_image(void);
int read_one_image_from_usb(SANE_Image_Statu statu = IMG_STATUS_OK); int read_one_image_from_usb(SANE_Image_Statu statu = IMG_STATUS_OK);
@ -58,21 +58,21 @@ protected:
virtual int discard_all_images(void); virtual int discard_all_images(void);
protected: protected:
virtual int on_color_mode_changed(int& color_mode) override; //棰滆壊鍒囨崲 virtual int on_color_mode_changed(int& color_mode) override; //颜色切换
virtual int on_paper_changed(int& paper) override; //绾稿紶澶у皬璁剧疆 virtual int on_paper_changed(int& paper) override; //纸张大小设置
virtual int on_paper_check_changed(bool& check) override; //灏哄妫€娴? virtual int on_paper_check_changed(bool& check) override; //尺寸检测
virtual int on_resolution_changed(int& dpi) override; //鍒嗚鲸鐜囪缃? virtual int on_resolution_changed(int& dpi) override; //分辨率设置
virtual int on_ultrasonic_check_changed(bool& check) override; //璁剧疆瓒呭0娉㈡娴? virtual int on_ultrasonic_check_changed(bool& check) override; //设置超声波检测
virtual int on_staple_check_changed(bool& check) override; //璁剧疆璁功閽堟娴? virtual int on_staple_check_changed(bool& check) override; //设置订书针检测
virtual int on_skew_check_changed(bool& check) override; //璁剧疆姝枩妫€娴? virtual int on_skew_check_changed(bool& check) override; //设置歪斜检测
virtual int on_skew_check_level_changed(int& check) override; //璁剧疆姝枩妫€娴嬪己搴? virtual int on_skew_check_level_changed(int& check) override; //设置歪斜检测强度
virtual int on_get_feedmode(int& feedmode) override; //鑾峰彇鍒嗙焊寮哄害 virtual int on_get_feedmode(int& feedmode) override; //获取分纸强度
virtual int on_set_feedmode(int feedmode) override; //璁剧疆鍒嗙焊寮哄害 virtual int on_set_feedmode(int feedmode) override; //设置分纸强度
virtual int on_pic_type(bool& pic)override; //鐓х墖妯″紡鎴栬€呮枃鏈ā寮? virtual int on_pic_type(bool& pic)override; //照片模式或者文本模式
virtual int on_pick_paper(bool autostrength)override; //鑷姩鍒嗙焊寮哄害 virtual int on_pick_paper(bool autostrength)override; //自动分纸强度
virtual int on_pick_paper_threshold(double threshold)override; virtual int on_pick_paper_threshold(double threshold)override;
virtual int on_is_auto_paper(bool isautopaper)override; //寰呯焊鎵弿 virtual int on_is_auto_paper(bool isautopaper)override; //待纸扫描
virtual int on_cis_get_image(bool isautopaper) override; //cis 鍘熷浘鑾峰彇 virtual int on_cis_get_image(bool isautopaper) override; //cis 原图获取
virtual int on_process_double_paper(bool type) override; virtual int on_process_double_paper(bool type) override;
@ -90,60 +90,60 @@ public:
virtual int get_roller_life(void) override; virtual int get_roller_life(void) override;
public: public:
//////////////鍥哄畾鐨勭‖浠朵俊鎭缃垨鑾峰彇////////////// //////////////固定的硬件信息设置或获取//////////////
virtual std::string get_firmware_version(void)override; virtual std::string get_firmware_version(void)override;
virtual std::string get_serial_num(void)override; virtual std::string get_serial_num(void)override;
virtual std::string get_ip(void)override; virtual std::string get_ip(void)override;
virtual std::string get_device_model(void); virtual std::string get_device_model(void);
virtual int set_device_model(string str); virtual int set_device_model(string str);
virtual int set_serial_num(string str) override; //璁剧疆搴忓垪鍙? virtual int set_serial_num(string str) override; //设置序列号
virtual int set_vid_pid(int data) override; //璁剧疆vidpid virtual int set_vid_pid(int data) override; //设置vidpid
virtual int get_vid_pid(int& data)override; //鑾峰彇vidpid virtual int get_vid_pid(int& data)override; //获取vidpid
/////////////////鎴愬姛杩斿洖:SCANNER_ERR_OK ///////////// /////////////////成功返回:SCANNER_ERR_OK /////////////
/////////////////澶辫触杩斿洖:IO閿欒鐮?or SCANNER_ERR_DEVICE_NOT_SUPPORT ///////////// /////////////////失败返回:IO错误码 or SCANNER_ERR_DEVICE_NOT_SUPPORT /////////////
virtual int set_leaflet_scan(void) override; //鍗曞紶鎵弿 virtual int set_leaflet_scan(void) override; //单张扫描
virtual int set_clear_roller_num(void) override; //娓呴櫎婊氳酱璁℃暟 virtual int set_clear_roller_num(void) override; //清除滚轴计数
virtual int set_clear_history_num(void) override; //娓呴櫎鍘嗗彶寮犳暟 virtual int set_clear_history_num(void) override; //清除历史张数
virtual int get_device_code(void); //鑾峰彇璁惧缂栫爜 涓嶆敮鎸? virtual int get_device_code(void); //获取设备编码 不支持
virtual int get_scanner_paperon(SANE_Bool& type) override; //鑾峰彇璁惧鏈夋棤绾稿紶 /*/ type : 0鏃犵焊 1鏈夌焊 */ virtual int get_scanner_paperon(SANE_Bool& type) override; //获取设备有无纸张 /*/ type : 0无纸 1有纸 */
virtual int get_scan_is_sleep(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁浼戠湢褰撲腑 /*/ type : 0浼戠湢 1鍞ら啋鐘舵€?/ virtual int get_scan_is_sleep(SANE_Bool& type) override; //获取设备是否休眠当中 /*/ type : 0休眠 1唤醒状态*/
virtual int get_sleep_time(int& data) override; //鑾峰彇鍔熻€楁ā寮忥紙浼戠湢锛? /*/ data > 0*/ virtual int get_sleep_time(int& data) override; //获取功耗模式(休眠) /*/ data > 0*/
virtual int set_sleep_time(int data) override; //璁剧疆鍔熻€楁ā寮忥紙浼戠湢锛? /*/ data > 0*/ virtual int set_sleep_time(int data) override; //设置功耗模式(休眠) /*/ data > 0*/
virtual int get_history_scan_count(int& data) override; //鑾峰彇鍘嗗彶鎵弿寮犳暟 /*/ data > 0*/ virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/
virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/ virtual int get_roller_num(int& data) override; //获取滚轮张数 /*/ data > 0*/
virtual int set_notify_sleep(void) override; //鍞ら啋璁惧 virtual int set_notify_sleep(void) override; //唤醒设备
virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/ virtual int get_device_log(string& log) override; //获取设备日志 /*/ log :储存路径*/
virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎 virtual int set_devreboot(int data) override; //设置设备重启
virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満 virtual int set_devshtudown() override; //设置设备关机
virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙攣锛?閿佸畾*/ virtual int set_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁1锁定*/
virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙攣锛?閿佸畾*/ virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁1锁定*/
virtual int set_scan_lock_check_val(string str) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ str:鏍¢獙鐮?/ virtual int set_scan_lock_check_val(string str) override; //获取设备是否锁定 /*/ str:校验码*/
virtual int set_firmware_upgrade(std::string str) override; //鍥轰欢鍗囩骇 /*/ str:鏂囦欢鍚嶈矾寰?/ virtual int set_firmware_upgrade(std::string str) override; //固件升级 /*/ str:文件名路径*/
virtual int set_clean_paper_road() override; //娓呯悊绾搁亾 virtual int set_clean_paper_road() override; //清理纸道
virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆?1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/ virtual int get_dev_islock_file(int& data) override; //获取设备文件 /*/ data:0 未上锁1 上锁。-1 未发现黑名单列表 -2列表没有信息*/
virtual int set_dev_islock_file(int data) override; //璁剧疆璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣*/ virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁1 上锁*/
virtual int get_scan_mode(bool& type); //鑾峰彇鏄惁鏄鏁版ā寮? /*/ type : fasle璁℃暟妯″紡 true闈炶鏁?*/ virtual int get_scan_mode(bool& type); //获取是否是计数模式 /*/ type : fasle计数模式 true非计数 */
virtual int set_speed_mode(int data) override; //璁剧疆閫熷害妯″紡 /*/ data:100,110,120 virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:100,110,120
virtual int get_speed_mode(int& data)override; //鑾峰彇閫熷害妯″紡 /*/ data:100,110,120 virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:100,110,120
virtual int set_devs_distortion_check_val(float data) override; //璁剧疆鐣稿彉鐭鍊? virtual int set_devs_distortion_check_val(float data) override; //设置畸变矫正值
virtual int get_devs_distortion_check_val(float &data) override; //鑾峰彇鐣稿彉鐭鍊? virtual int get_devs_distortion_check_val(float &data) override; //获取畸变矫正值
virtual int set_auto_flat(int data); //璁剧疆鑷姩骞冲満鏍℃ virtual int set_auto_flat(int data); //设置自动平场校正
// data:0(ALL) 1(200dpi銆乬ray) 2(200dpi銆乧olor) 3(300dpi銆乬ray) 4(300dpi銆乧olor) 5(600dpi銆乬ray) 6(600dpi銆乧olor) // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color)
virtual int get_motor_board_ver(string &ver); virtual int get_motor_board_ver(string &ver);
virtual int set_devs_time(string times); //璁剧疆璁惧鏃堕棿 //3399璁惧鏀寔 virtual int set_devs_time(string times); //设置设备时间 //3399设备支持
virtual int get_devs_time(string& times); //鑾峰彇璁惧鏃堕棿 //3399璁惧鏀寔 virtual int get_devs_time(string& times); //获取设备时间 //3399设备支持
virtual int get_devs_cpu(string& cpu); //鑾峰彇璁惧鍐呭瓨澶у皬 virtual int get_devs_cpu(string& cpu); //获取设备内存大小
virtual int get_devs_disk(string& disk); //鑾峰彇璁惧纭洏瀹归噺澶у皬 virtual int get_devs_disk(string& disk); //获取设备硬盘容量大小
}; };

View File

@ -1,4 +1,4 @@
#include "hg_scanner_300.h" #include "hg_scanner_300.h"
#include "../wrapper/hg_log.h" #include "../wrapper/hg_log.h"
#if defined(WIN32) || defined(_WIN64) #if defined(WIN32) || defined(_WIN64)
@ -86,7 +86,7 @@ hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
, last_frame_total(0) , last_frame_total(0)
{ {
dsp_config.value = 0; dsp_config.value = 0;
dsp_config.params_3288.enableLed = 1; //榛樿鍊? dsp_config.params_3288.enableLed = 1; //默认值
dsp_config.params_3288.isCorrect = 1; dsp_config.params_3288.isCorrect = 1;
int ret = get_device_type(firmware_sup_device_7010); int ret = get_device_type(firmware_sup_device_7010);
@ -121,7 +121,7 @@ hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
#ifndef MAPPING_FUNCTION_IN_BASE #ifndef MAPPING_FUNCTION_IN_BASE
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//浼樺厛鍒濆鍖? init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化
#endif #endif
if (init_settings(pid_)) if (init_settings(pid_))
{ {
@ -158,11 +158,11 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
//printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret); //printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret);
//濡傛灉璁惧鍑虹幇鍗$焊 鎴栬€呭弻寮犵瓑璁惧淇℃伅闂锛岄渶瑕佺瓑鍒拌澶囪繘琛屽彂閫乻top鎵嶈兘鍋滄銆?鎵€浠ュ缁堜互 "鍋滄" 娑堟伅涓虹粨鏉熶俊鍙? //如果设备出现卡纸 或者双张等设备信息问题需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号
//濡傛灉鏈夊浘鐨勬儏鍐典笅锛屽苟涓斿崱绾告垨鍙屽紶绛夛紝璁惧浼氬厛鍙戦€佸崱绾稿弻寮犱俊鎭€傛墍浠ユ帴鍙楀埌閿欒淇℃伅涔嬪悗锛屼粛闇€瑕佹妸鍥惧儚鍙栧嚭鏉ャ€? //如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。
if (ret == SCANNER_ERR_DEVICE_STOPPED) if (ret == SCANNER_ERR_DEVICE_STOPPED)
{ {
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//浠ョ涓€涓秷鎭负鍑? status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准
savestatus_.clear(); savestatus_.clear();
if (user_cancel_) if (user_cancel_)
{ {
@ -239,7 +239,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_));
break; break;
} }
if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//闃叉鐘舵€佷俊鎭竴鐩村彇涓嶄笂鏉ュ鑷村崱姝? if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//防止状态信息一直取不上来导致卡死
{ {
if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600) if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600)
{ {
@ -247,7 +247,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
else else
{ {
if (!savestatus_.empty())//浠ョ涓€涓秷鎭负鍑? if (!savestatus_.empty())//以第一个消息为准
{ {
status_ = savestatus_[0]; status_ = savestatus_[0];
} }
@ -259,7 +259,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
if (sw.elapsed_s() > 130) if (sw.elapsed_s() > 130)
{ {
if (!savestatus_.empty())//浠ョ涓€涓秷鎭负鍑? if (!savestatus_.empty())//以第一个消息为准
{ {
status_ = savestatus_[0]; status_ = savestatus_[0];
} }
@ -282,7 +282,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
continue; continue;
} }
int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 鍏煎Android锛岄粯璁ゅ浘鐗囧ぇ灏忓潎鍦?GB浠ュ唴 int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 兼容Android默认图片大小均在1GB以内
VLOG_MINI_2(LOG_LEVEL_WARNING, "Get Scaner Image Size:%d bytes,Image Num[%d]\n", totalNum,img_num); VLOG_MINI_2(LOG_LEVEL_WARNING, "Get Scaner Image Size:%d bytes,Image Num[%d]\n", totalNum,img_num);
img_num++; img_num++;
if (totalNum) if (totalNum)
@ -357,7 +357,7 @@ int hg_scanner_300::get_roller_life(void)
int hg_scanner_300::start(void) int hg_scanner_300::start(void)
{ {
bool handled = false; bool handled = false;
int ret = try_third_app_handle_start(handled), //sane璋冪敤鏄瘡娆¢兘浼氳皟鐢ㄤ竴娆tart鍜宻top int ret = try_third_app_handle_start(handled), //sane调用是每次都会调用一次start和stop
count = -1, count = -1,
val = 1; val = 1;
@ -393,7 +393,7 @@ int hg_scanner_300::start(void)
{ {
return ret; return ret;
} }
if (is_devs_sleep_)//璁惧鍦ㄧ潯鐪犵殑鐘舵€佸綋涓幏鍙栧浐浠舵槸澶辫触鐨勶紝鎵€浠ュ湪杩欎釜鍦版柟杩涜鏍囧織浣嶈缃€傦紙鎬绘劅瑙変笉淇濋櫓锛? if (is_devs_sleep_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险)
{ {
is_devs_sleep_ = false; is_devs_sleep_ = false;
set_kernelsnap_ver(); set_kernelsnap_ver();
@ -641,7 +641,7 @@ int hg_scanner_300::get_img_data_7010()
ret = save_usb_data(image_data_); ret = save_usb_data(image_data_);
index_ = 0; index_ = 0;
std::vector<unsigned char>().swap(jpgdata_); //鍥炴敹绌洪棿 clear鍙兘娓呯┖鍏冪礌 std::vector<unsigned char>().swap(jpgdata_); //回收空间 clear只能清空元素
} }
float v = sw.elapsed_ms(); float v = sw.elapsed_ms();
@ -876,7 +876,7 @@ int hg_scanner_300::initdevice()
if (status_ != SCANNER_ERR_DEVICE_SLEEPING) if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
{ {
set_kernelsnap_ver(); set_kernelsnap_ver();
is_devs_sleep_ = false; // 鐫$湢鍞ら啋 瀹㈡埛鎻愬墠鐐瑰嚮璁剧疆杩欒竟鍥轰欢鐗堟湰鍙?杩樻病鏈夊仛鍒ゆ柇鐨? is_devs_sleep_ = false; // 睡眠唤醒 客户提前点击设置这边固件版本号 还没有做判断的
} }
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
@ -907,8 +907,8 @@ void hg_scanner_300::writedown_image_configuration(void)
ic.hardwarecaps.skrewdetectlevel = 0; ic.hardwarecaps.skrewdetectlevel = 0;
// ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper; // ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper;
ic.hardwarecaps.capturepixtype = 0; //鏆傛棤鍙傛暟 鑾峰彇鍥惧儚绫诲瀷 ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //鏆傛棤鍙傛暟 璁剧疆浼戠湢鏃堕棿 涓や釜鍙傛暟3399鏈娇鐢? ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用
image_configuration(ic); image_configuration(ic);
} }
void hg_scanner_300::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d) void hg_scanner_300::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d)
@ -954,7 +954,7 @@ int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
{ {
if (it.second.info.params.colormode == mode && it.second.info.params.dpi == dpi) if (it.second.info.params.colormode == mode && it.second.info.params.dpi == dpi)
{ {
return -1;//棰勯槻閲嶅娣诲姞 return -1;//预防重复添加
} }
} }
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
@ -965,7 +965,7 @@ int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
cv::Mat white_mat; cv::Mat white_mat;
cv::Mat black_mat;; cv::Mat black_mat;;
for (size_t i = 0; i < 2; i++) //榛戠櫧涓€璧蜂繚瀛樹笅鏉? for (size_t i = 0; i < 2; i++) //黑白一起保存下来
{ {
vector<unsigned char> imagedata; vector<unsigned char> imagedata;
@ -1007,7 +1007,7 @@ int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
if (mat.empty()) if (mat.empty())
{ {
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status); VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status);
return SCANNER_ERR_NO_DATA; //鍙鏈変竴寮犲浘娌℃湁 鐩存帴閫€浜? return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了
} }
if (i) if (i)
@ -1023,7 +1023,7 @@ int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
//cv::imwrite("C://image//correction_image_black_mat" + to_string(inx) + ".bmp", black_mat); //cv::imwrite("C://image//correction_image_black_mat" + to_string(inx) + ".bmp", black_mat);
//for (size_t j = 0; j < correction_image_map_.size(); j++) //浠ラ槻閲嶅娣诲姞 //for (size_t j = 0; j < correction_image_map_.size(); j++) //以防重复添加
//{ //{
// if (correction_image_map_[j].info.params.dpi == dpi // if (correction_image_map_[j].info.params.dpi == dpi
// && correction_image_map_[j].info.params.colormode == mode) // && correction_image_map_[j].info.params.colormode == mode)
@ -1039,7 +1039,7 @@ std::string hg_scanner_300::get_firmware_version()
{ {
char buf[20] = { 0 }; char buf[20] = { 0 };
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 10; //鍗忚瀹氫箟闀垮害涓?0 100 200 =8 len = 10; //协议定义长度为10 100 200 =8
USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,}; USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,};
{ {
@ -1192,7 +1192,7 @@ int hg_scanner_300::get_scan_is_sleep(SANE_Bool& type)
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scan_is_sleep is(%s)\n", !type ? hg_scanner_err_description(SCANNER_ERR_DEVICE_SLEEPING) : hg_scanner_err_description(SCANNER_ERR_OK)); VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scan_is_sleep is(%s)\n", !type ? hg_scanner_err_description(SCANNER_ERR_DEVICE_SLEEPING) : hg_scanner_err_description(SCANNER_ERR_OK));
return ret; return ret;
} }
///姝ゆ璁惧鏃犳鍔熻兘 ///此款设备无此功能
int hg_scanner_300::on_staple_check_changed(bool& check) int hg_scanner_300::on_staple_check_changed(bool& check)
{ {
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
@ -1341,7 +1341,7 @@ int hg_scanner_300::set_firmware_upgrade(std::string str)
USBCB pre = { setting3288dsp::PRE_UPGRADE,0,total }; USBCB pre = { setting3288dsp::PRE_UPGRADE,0,total };
int len = sizeof(pre); int len = sizeof(pre);
ret = io_->write_bulk(&pre, &len); //鍏堝憡璇変笅闈㈡€诲瓧鑺傛暟 ret = io_->write_bulk(&pre, &len); //先告诉下面总字节数
if (ret != SCANNER_ERR_OK) if (ret != SCANNER_ERR_OK)
{ {
return ret; return ret;
@ -1357,7 +1357,7 @@ int hg_scanner_300::set_firmware_upgrade(std::string str)
{ {
block = total; block = total;
} }
io_->write_bulk(&update, &len);//鏁版嵁鍒嗘鍐欙紝姣忔閮借鍏堝憡璇変笅闈紵 io_->write_bulk(&update, &len);//数据分段写,每次都要先告诉下面?
filename.read(sendbuf, block); filename.read(sendbuf, block);

View File

@ -1,4 +1,4 @@
#include "hg_scanner_302.h" #include "hg_scanner_302.h"
#include "../wrapper/hg_log.h" #include "../wrapper/hg_log.h"
#include "filetools.h" #include "filetools.h"
@ -94,7 +94,7 @@ namespace settings302
{200.0f, 1}, {200.0f, 1},
{240.0f, 1}, {240.0f, 1},
{300.0f, 0}, {300.0f, 0},
{600.0f, 1} //涓存æ¤é<EFBFBD>—å Ÿæ¹°é<EFBFBD>? é<>˜ç†¸æ½µé<C2B5>? {600.0f, 1} //娑撳瓨妞傞悧鍫熸拱閸? 閸樼喐娼甸崣?
}; };
bool is_equal(float l, float r) bool is_equal(float l, float r)
{ {
@ -453,7 +453,7 @@ int hg_scanner_302::writedown_device_configuration(bool type,setting_hardware::H
if (!type) if (!type)
return ret; return ret;
setting_hardware::HGSCANCONF_3399 p = dev_conf_; //ä¸<EFBFBD>得改å<EFBFBD>˜å¤éƒ¨çš„å€? setting_hardware::HGSCANCONF_3399 p = dev_conf_; //不得改变外部的值
if (!dev_conf) if (!dev_conf)
dev_conf = &p; dev_conf = &p;
@ -540,7 +540,7 @@ int hg_scanner_302::writedown_image_configuration(void)
//ret = io_->write_bulk(&ic, &len); //ret = io_->write_bulk(&ic, &len);
//this_thread::sleep_for(chrono::milliseconds(500)); //this_thread::sleep_for(chrono::milliseconds(500));
//io_->set_timeout(2000);//蹇呰寤舵椂 //io_->set_timeout(2000);//韫囧懓顩﹀鑸垫
} }
return ret; return ret;
} }
@ -772,7 +772,7 @@ int hg_scanner_302::on_paper_check_changed(bool& check)
} }
int hg_scanner_302::on_resolution_changed(int& dpi) int hg_scanner_302::on_resolution_changed(int& dpi)
{ {
dev_conf_.params_3399.dpi = 1; //dpi é<EFBFBD>—庡噷cisé<EFBFBD>œå±¾æšé<EFBFBD>—æ¢is æ¦æ¨¿î…»é<C2BB>™?é<>ƒçŠ»æ¸¶é<C2B6>€ç°å½‰ dev_conf_.params_3399.dpi = 1; //dpi 閸楀骸鍣穋is閸滃本鏆掗崡姊抜s 姒涙顓婚崣?閺冪娀娓堕弨鐟板綁
int ret = writedown_device_configuration(); int ret = writedown_device_configuration();
return ret; return ret;
} }
@ -861,7 +861,7 @@ int hg_scanner_302::on_skew_check_level_changed(int& check)
return ret; return ret;
} }
int hg_scanner_302::on_get_feedmode(int &feedmode)//é¾å³°å½‡é<EFBFBD>嗙焊寮哄å®? int hg_scanner_302::on_get_feedmode(int &feedmode)//閼惧嘲褰囬崚鍡欑剨瀵搫瀹?
{ {
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
val = 0; val = 0;
@ -869,7 +869,7 @@ int hg_scanner_302::on_get_feedmode(int &feedmode)//鑾峰彇鍒嗙焊寮哄
ret = read_register(setting3399::SR_GET_FEEDMODE,&feedmode); ret = read_register(setting3399::SR_GET_FEEDMODE,&feedmode);
return ret; return ret;
} }
int hg_scanner_302::on_set_feedmode(int feedmode)//ç<EFBFBD>剧ç†é<EFBFBD>嗙焊寮哄å®? int hg_scanner_302::on_set_feedmode(int feedmode)//鐠佸墽鐤嗛崚鍡欑剨瀵搫瀹?
{ {
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
val = 0; val = 0;
@ -1284,7 +1284,7 @@ int hg_scanner_302::get_scan_is_sleep(SANE_Bool& type)
{ {
std::lock_guard<std::mutex> lock(io_lock_); std::lock_guard<std::mutex> lock(io_lock_);
int ret = 0, val; int ret = 0, val;
ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0浼戠æ¹? 1é<31>žã‰å•é<E280B9>˜èˆµâ¬? ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0娴兼垹婀? 1閸炪倝鍟嬮悩鑸碘偓?
if (ret == SCANNER_ERR_OK) if (ret == SCANNER_ERR_OK)
{ {
type = val == 1 ? true : false; type = val == 1 ? true : false;

View File

@ -1,4 +1,4 @@
#include "image_process.h" #include "image_process.h"
#include "../wrapper/hg_log.h" #include "../wrapper/hg_log.h"
#include <vector> #include <vector>
#include <string.h> #include <string.h>
@ -98,7 +98,7 @@ static int strToWchar(string str, wchar_t* s)
return -1; return -1;
} }
size_t size = str.length(); size_t size = str.length();
//髑セ蟲ー蠖<EFBFBD>シよ諜蝠ソ骰門塘縺<EFBFBD>¥蠢・邏晞ェ槫堰謨オ迺<EFBFBD>」寂薄髣りセセ邏晉シよ諜蝠ソ骰門塘縺<EFBFBD>¥蠢泌ッ懃€帶・<EFBFBD>メ迺<EFBFBD><EFBFBD> //閼惧嘲褰囩紓鎾冲暱閸栧搫銇囩亸蹇ョ礉楠炲墎鏁电拠椋庘敄闂傝揪绱濈紓鎾冲暱閸栧搫銇囩亸蹇斿瘻鐎涙顑佺拋锛勭暬
int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), size, NULL, 0); int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), size, NULL, 0);
wchar_t* buffer = new wchar_t[size + 1]; wchar_t* buffer = new wchar_t[size + 1];
MultiByteToWideChar(CP_ACP, 0, str.c_str(), size, buffer, len); MultiByteToWideChar(CP_ACP, 0, str.c_str(), size, buffer, len);
@ -334,7 +334,7 @@ namespace hg_imgproc
{ {
return SCANNER_ERR_OUT_OF_RANGE; return SCANNER_ERR_OUT_OF_RANGE;
} }
printf("HGBaselib_path?s HGImagePrclib_path:%s\r\n",HGBaselib_path.c_str(),HGImagePrclib_path.c_str()); printf("HGBaselib_path?s HGImagePrclib_path:%s\r\n",HGBaselib_path.c_str(),HGImagePrclib_path.c_str());
Dynamicopen_HGImageprc_pHandle_ = dlopen(HGImagePrclib_path.c_str(), RTLD_LAZY); Dynamicopen_HGImageprc_pHandle_ = dlopen(HGImagePrclib_path.c_str(), RTLD_LAZY);
Dynamicopen_HGBase_pHandle_ = dlopen(HGBaselib_path.c_str(), RTLD_LAZY); Dynamicopen_HGBase_pHandle_ = dlopen(HGBaselib_path.c_str(), RTLD_LAZY);
@ -369,8 +369,8 @@ namespace hg_imgproc
if (ret == -1) if (ret == -1)
return SCANNER_ERR_INSUFFICIENT_MEMORY; return SCANNER_ERR_INSUFFICIENT_MEMORY;
load_dll(Baselibbuffer, &Dynamicopen_HGBase_pHandle_); //骰丞<EFBFBD>晏ァ樊撼阯画髢イ蟀<EFBFBD><EFBFBD>? load_dll(Baselibbuffer, &Dynamicopen_HGBase_pHandle_); //閸忓牆濮炴潪钘夋倵闁插﹥鏂?
load_dll(Prclibbuffer, &Dynamicopen_HGImageprc_pHandle_); //windows豸灘ャェ蠖イ髑ウ謌堤エー骼オ蜿・隨蛾穀鬚∫イャ骼オ竄ャ骰ヲ繖ァ谿第ク壽ソ顔ヲ<EFBFBD>清謦ウ訒ア髑キ蟇ク豢ソ骼コ繝ヲ蠅ヲ蟇ョ竄ャ骰斐┬竄ャ菴ク邁ア髏ィ蜍ャ讀る濠谺仙」俶カ灘カ<EFBFBD>沍螯ッ窶ウ貎。 load_dll(Prclibbuffer, &Dynamicopen_HGImageprc_pHandle_); //windows娑撳褰查懗鎴掔窗閹靛彞绗夐崚棰佺铂閹碘偓閸︺劎娈戞笟婵婄鎼存挸顕遍懛瀵告纯閹恒儲澧﹀鈧崝銊︹偓浣哥氨閻ㄥ嫭妞傞崐娆愬娑撳秴鍩屽Ο鈥虫健
SAFE_DELETE(Prclibbuffer); SAFE_DELETE(Prclibbuffer);
SAFE_DELETE(Baselibbuffer); SAFE_DELETE(Baselibbuffer);
@ -418,7 +418,7 @@ namespace hg_imgproc
#if (!defined WIN32) #if (!defined WIN32)
ret = dlclose(Dynamicopen_HGBase_pHandle_); ret = dlclose(Dynamicopen_HGBase_pHandle_);
#else #else
ret = FreeLibrary(Dynamicopen_HGBase_pHandle_); //迺ィ螻シ謚€骰皮桓豬<EFBFBD>、、蜩<EFBFBD>ーュ豸灘カ<EFBFBD><EFBFBD>髞帛アシ邏ー轢オ濶ー蝴ァ譚ゥ谺朱骰ヲ迚域沺髏ィ蜍ャ﨡エ髢ソ萓顔エオ髞帷№邏オ ret = FreeLibrary(Dynamicopen_HGBase_pHandle_); //鐠ㄥ奔鎶€閸旂姾娴囨い鍝勭碍娑撳秴顕敍灞肩窗鐎佃壈鍤ф潻娆庨嚋閸︾増鏌熼惃鍕劥闁夸緤绱甸敍鐕傜吹
#endif #endif
Dynamicopen_HGBase_pHandle_ = NULL; Dynamicopen_HGBase_pHandle_ = NULL;
} }
@ -500,7 +500,7 @@ namespace hg_imgproc
static int img_idx = 0; static int img_idx = 0;
cv::Mat ds(param_.height, param_.width, CV_8UC1, buf->data(), cv::Mat::AUTO_STEP); cv::Mat ds(param_.height, param_.width, CV_8UC1, buf->data(), cv::Mat::AUTO_STEP);
//cv::imwrite("C:\\image\\imdecode"+std::to_string(img_idx++) + ".jpg", ds); //cv::imwrite("C:\\image\\imdecode"+std::to_string(img_idx++) + ".jpg", ds);
cv::Mat m_dst(ds(cv::Rect(0, 2, ds.cols, ds.rows - 2))); //<EFBFBD>髯、蜑榊<EFBFBD>陦?荳€螳壽潔辣ァ螳樣刔豬玖ッ墓擂<E5A293>悟屏荳コ譛€荳企擇莨壽怏逋ス霎ケ蠖ア蜩肴<E89CA9>。豁」陬∝<E999AC>遲? cv::Mat m_dst(ds(cv::Rect(0, 2, ds.cols, ds.rows - 2))); //删除前几行 一定按照实际测试来,因为最上面会有白边影响校正裁切等
cv::Mat d; cv::Mat d;
if (param_.channels == 3) if (param_.channels == 3)
@ -549,7 +549,7 @@ namespace hg_imgproc
//} //}
//cv::imwrite("C:\\image\\imdecode" + std::to_string(img_idx++) + ".jpg", mat); //cv::imwrite("C:\\image\\imdecode" + std::to_string(img_idx++) + ".jpg", mat);
//if (param_.dpi < 299)/////7010荳肴髪謖?200dpi 謇€莉・髴€隕∵焔蜉ィ諡我シク螳ス蠎? //if (param_.dpi < 299)/////7010不支持 200dpi 所以需要手动拉伸宽度
//{ //{
// float xy = param_.dpi / 300.0; // float xy = param_.dpi / 300.0;
// cv::resize(mat, mat, cv::Size(), xy, 1); // cv::resize(mat, mat, cv::Size(), xy, 1);
@ -1425,7 +1425,7 @@ namespace hg_imgproc
{ {
return SCANNER_ERR_NO_DATA; return SCANNER_ERR_NO_DATA;
} }
return LineContinuityDetection::isContinuous(mats_[0], 100); //譽€豬倶ク€髱「蟆ア陦? return LineContinuityDetection::isContinuous(mats_[0], 100); //妫€娴嬩竴闈㈠氨琛?
} }
int correction_image(cv::Mat &flat_lut, cv::Mat black_mat, cv::Mat white_mat) int correction_image(cv::Mat &flat_lut, cv::Mat black_mat, cv::Mat white_mat)
{ {
@ -1441,7 +1441,7 @@ namespace hg_imgproc
info.width = mats.cols; info.width = mats.cols;
info.origin = HGBASE_IMGORIGIN_TOP; info.origin = HGBASE_IMGORIGIN_TOP;
int bits = mats.channels() == 1 ? 8 : 24; int bits = mats.channels() == 1 ? 8 : 24;
info.widthStep = mats.step; //opencv骰倡<EFBFBD>鄧宣濠? info.widthStep = mats.step; //opencv閸樼喎顫愰崐?
info.type = mats.channels() == 1 ? HGBASE_IMGTYPE_GRAY : HGBASE_IMGTYPE_BGR; info.type = mats.channels() == 1 ? HGBASE_IMGTYPE_GRAY : HGBASE_IMGTYPE_BGR;
int ret = HGBase_CreatImg(const_cast<uchar*>(mats.data), &info, &image); int ret = HGBase_CreatImg(const_cast<uchar*>(mats.data), &info, &image);
@ -1453,13 +1453,13 @@ namespace hg_imgproc
/// <summary> /// <summary>
/// 8豬」蠍<EFBFBD>オ俶撼?豬」蠍<EFBDA3>? /// 8娴e秴娴樻潪?娴e秴娴?
/// </summary> /// </summary>
/// <param name="image">8bit?/param> /// <param name="image">8bit?/param>
/// <param name="threshold"><EFBFBD><EFBFBD>昶ぎ遑キ邏晏ッ、鮑ソ裵<EFBFBD>ヲ帶ィソ蠇?27</param> /// <param name="threshold">闂冨牆鈧》绱濆楦款唴姒涙顓?27</param>
/// <param name="reverse">true豸灘塘蠑ス髑ケ隸ァ邏晞漉謚ス邊?髏?髞帶カ伜シス豸泌ャゥ螳ウ髏?/param> /// <param name="reverse">true娑撳搫寮介懝璇х礉閸楁娊绮?閻?閿涙稑寮芥稊瀣╁閻?/param>
/// <param name="align">true豸灘塘豢鍋€帶・<EFBFBD>ヲュ轢オ蠖堤カ?/param> /// <param name="align">true娑撳搫娲撶€涙濡€靛綊缍?/param>
/// <returns>1豬」蠍<EFBFBD>?/returns> /// <returns>1娴e秴娴?/returns>
/// ///
static cv::Mat convert_8bit_2_1bit(const cv::Mat& image, uchar threshold, bool reverse, bool align) static cv::Mat convert_8bit_2_1bit(const cv::Mat& image, uchar threshold, bool reverse, bool align)
{ {
@ -1677,7 +1677,7 @@ namespace hg_imgproc
if (imax < cv::abs(a[i][j])) if (imax < cv::abs(a[i][j]))
{ {
imax = cv::abs(a[i][j]); imax = cv::abs(a[i][j]);
max = a[i][j]; //蠕怜芦蜷<EFBFBD>。御クュ謇€蝨ィ蛻玲怙螟ァ蜈<EFBFBD>エ? max = a[i][j]; //得到各行中所在列最大元素
m = i; m = i;
} }
} }
@ -1725,7 +1725,7 @@ namespace hg_imgproc
//隶セ鄂ョ荳€髱「逧<EFBFBD>ffset蛟? //设置一面的offset值
void setOffset(int* config, int step) void setOffset(int* config, int step)
{ {
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)