diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 490b789..a3438b1 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -3969,6 +3969,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) } return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner::get_roller_life(void) +{ + return 150000; +} int hg_scanner::discard_all_images(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index 4491386..5f62ac0 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -446,6 +446,8 @@ public: virtual int reset(void); virtual int device_io_control(unsigned long code, void* data, unsigned* len); virtual int discard_all_images(void) = 0; + virtual int get_roller_life(void); // 获取滚轴最大寿命 + public: hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io,int pid); virtual ~hg_scanner(); diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index 6269084..d6a89ba 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -131,6 +131,10 @@ int hg_scanner_200::discard_all_images(void) discard_prev(); return SCANNER_ERR_OK; } +int hg_scanner_200::get_roller_life(void) +{ + return 450000; +} void hg_scanner_200::thread_handle_usb_read(void) { int ret = SCANNER_ERR_OK, diff --git a/hgdriver/hgdev/hg_scanner_200.h b/hgdriver/hgdev/hg_scanner_200.h index 707508b..b115ea4 100644 --- a/hgdriver/hgdev/hg_scanner_200.h +++ b/hgdriver/hgdev/hg_scanner_200.h @@ -26,6 +26,8 @@ protected: virtual void thread_handle_usb_read(void) override; virtual int on_scanner_closing(bool force) override; virtual int discard_all_images(void) override; + virtual int get_roller_life(void) override; + protected: virtual int on_color_mode_changed(int& color_mode) override; // COLOR_MODE_xxx virtual int on_paper_changed(int& paper) override; // PAPER_xxx diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 6dd0803..6307ceb 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -762,6 +762,10 @@ int hg_scanner_239::discard_all_images(void) VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "prev-connection has left %d interrupt packet(s) && %d image(s).\n", pre_int, pre_img); return 0; } +int hg_scanner_239::get_roller_life(void) +{ + return 450000; +} int hg_scanner_239::on_color_mode_changed(int& color_mode) { diff --git a/hgdriver/hgdev/hg_scanner_239.h b/hgdriver/hgdev/hg_scanner_239.h index 15599bd..d602dc6 100644 --- a/hgdriver/hgdev/hg_scanner_239.h +++ b/hgdriver/hgdev/hg_scanner_239.h @@ -83,6 +83,7 @@ public: virtual int stop(void) override; virtual int reset(void) override; virtual int device_io_control(unsigned long code, void* data, unsigned* len) override; + virtual int get_roller_life(void) override; public: //////////////固定的硬件信息设置或获取////////////// diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index caf6469..c76e6ba 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -301,6 +301,10 @@ int hg_scanner_300::discard_all_images(void) } return SCANNER_ERR_OK; } +int hg_scanner_300::get_roller_life(void) +{ + return pid_ == 300 ? 150000 : 200000; +} int hg_scanner_300::start(void) { bool handled = false; diff --git a/hgdriver/hgdev/hg_scanner_300.h b/hgdriver/hgdev/hg_scanner_300.h index 2c29002..446b071 100644 --- a/hgdriver/hgdev/hg_scanner_300.h +++ b/hgdriver/hgdev/hg_scanner_300.h @@ -26,6 +26,8 @@ protected: virtual int on_scanner_closing(bool force) override; virtual void thread_handle_usb_read(void) override; virtual int discard_all_images(void) override; + virtual int get_roller_life(void) override; + protected: virtual int on_color_mode_changed(int& color_mode) override; //颜色切换 virtual int on_paper_changed(int& paper) override; //纸张大小设置 diff --git a/hgdriver/hgdev/hg_scanner_302.cpp b/hgdriver/hgdev/hg_scanner_302.cpp index 3c73a0e..b291256 100644 --- a/hgdriver/hgdev/hg_scanner_302.cpp +++ b/hgdriver/hgdev/hg_scanner_302.cpp @@ -1,4 +1,4 @@ -#include "hg_scanner_302.h" +#include "hg_scanner_302.h" #include "../wrapper/hg_log.h" #include "filetools.h" @@ -94,7 +94,7 @@ namespace settings302 {200.0f, 1}, {240.0f, 1}, {300.0f, 0}, - {600.0f, 1} //临时版本发1 原来发2 + {600.0f, 1} //临时版本? 原来? }; bool is_equal(float l, float r) { @@ -668,6 +668,10 @@ int hg_scanner_302::discard_all_images(void) VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "prev-connection has left %d interrupt packet(s) && %d image(s).\n", pre_int, pre_img); return 0; } +int hg_scanner_302::get_roller_life(void) +{ + return pid_ == 302 ? 150000 : 200000; +} int hg_scanner_302::on_color_mode_changed(int& color_mode) { @@ -755,7 +759,7 @@ int hg_scanner_302::on_paper_check_changed(bool& check) } int hg_scanner_302::on_resolution_changed(int& dpi) { - dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认发1无需改变 + dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认?无需改变 int ret = writedown_device_configuration(); return ret; } @@ -1178,11 +1182,11 @@ std::string hg_scanner_302::get_ip(void) int hg_scanner_302::set_clear_roller_num(void) { - std::lock_guard lock(io_lock_); - int val = 0, - ret = read_register(setting3399::SR_CLR_ROLLER_NUM, &val); + //std::lock_guard lock(io_lock_); + //int val = 0, + // ret = read_register(setting3399::SR_CLR_ROLLER_NUM, &val); - return ret; + return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_302::set_clear_history_num(void) { @@ -1269,7 +1273,7 @@ int hg_scanner_302::get_scan_is_sleep(SANE_Bool& type) { std::lock_guard 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; diff --git a/hgdriver/hgdev/hg_scanner_302.h b/hgdriver/hgdev/hg_scanner_302.h index 19de1d7..20879a3 100644 --- a/hgdriver/hgdev/hg_scanner_302.h +++ b/hgdriver/hgdev/hg_scanner_302.h @@ -53,6 +53,8 @@ class hg_scanner_302 : public hg_scanner int read_one_image_from_usb(SANE_Image_Statu statu = SANE_Image_Statu_OK); virtual int discard_all_images(); + virtual int get_roller_life(void) override; + protected: virtual void on_device_reconnected(void) override; virtual int on_scanner_closing(bool force) override; diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index cc2d516..56ef697 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -380,7 +380,7 @@ void hg_scanner_mgr::on_hgscanner_pnp(usb_event ev, libusb_device* device, int v size_t i = 0; for (; i < online_devices_.size(); ++i) { - if (online_devices_[i].dev == device) // 此处假定同一台设备重新连接后,设备对象“device”保持不变;如果假设不成立,会导致设备重连消息不能正常接收,绑定到该设备的scanner对象得不到释放 + if (online_devices_[i].dev == device) // 此处假定同一台设备重新连接后,设备对象“device”保持不变;如果假设不成立,会导致设备重连消息不能正常接收,绑定到该设备的scanner对象得不到释? { online_devices_[i].ind = index; add = false; @@ -895,6 +895,20 @@ scanner_err hg_scanner_mgr::hg_scanner_get_parameter(scanner_handle h, const cha if (strcmp(SANE_STD_OPT_NAME_LOGIN, name) == 0 || strcmp(SANE_STD_OPT_NAME_LOGOUT, name) == 0) return SCANNER_ERR_DEVICE_NOT_SUPPORT; + + if (strcmp(SANE_STD_OPT_NAME_ROLLER_LIFE, name) == 0) + { + if (*len < sizeof(SANE_Int)) + { + *len = sizeof(SANE_Int); + + return SCANNER_ERR_INSUFFICIENT_MEMORY; + } + + *(SANE_Int*)data = SCAN_PTR(h)->get_roller_life(); + + return SCANNER_ERR_OK; + } } int l = *len, diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 0b01482..ab06974 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -393,6 +393,7 @@ namespace local_utility FIX_ID_TO_NAME(FIRMWARE_VERSION, 255); FIX_ID_TO_NAME(DEVICE_IP_ADDR, 255); FIX_ID_TO_NAME(DEVICE_MAC_ADDR, 255); + FIX_ID_TO_NAME(ROLLER_LIFE, sizeof(SANE_Int)); FIX_ID_TO_NAME(CUSTOM_GAMMA, sizeof(SANE_Gamma));