From 8aebb9c4eb577eeeebc6435fc5ec702deb014946 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Fri, 3 Nov 2023 09:44:27 +0800 Subject: [PATCH] =?UTF-8?q?300d8=E8=AE=BE=E5=A4=87=E6=97=A5=E5=BF=97?= =?UTF-8?q?=EF=BC=8C=E5=9B=BA=E4=BB=B60430=E4=B9=8B=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E4=BB=8E=E7=89=87=E4=B8=8A=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=8C=E4=B8=8D=E7=94=A8=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 2 +- hgdriver/hgdev/hg_scanner.h | 1 + hgdriver/hgdev/hg_scanner_300.cpp | 135 ++++++++++++++++++++---------- 3 files changed, 93 insertions(+), 45 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index b1c06c7..bdb3458 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -159,7 +159,7 @@ hg_scanner::hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io, i , is_dpi_color_check(false), save_dpi_color_check_val(0.0f), is_auto_falt(false), HGVersion_mgr_(NULL), HGVersion_Init_(NULL) , HGVersion_Islock_(NULL), HGVersion_Postlog_(NULL), HGVersion_Free_(NULL), Dynamicopen_HGVersion_pHandle_(NULL), pid_(pid), fetching_id_(-1), color_correction_(false) , is_auto_paper_scan_exit_time(60), is_read_int(true), is_auto_feedmode_(false) - , firmware_sup_wait_paper_(false),firmware_sup_pick_strength_(false),firmware_sup_log_export_(false),firmware_sup_color_corr_(false),firmware_sup_wake_device_(false) + , 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) diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index a21232c..6a66f0c 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -383,6 +383,7 @@ protected: bool firmware_sup_wait_paper_; //固件支持 待纸扫描 139 239-3B0431, 439-3B0629 bool firmware_sup_pick_strength_; //固件支持 分纸强度 139 239-3B0830 bool firmware_sup_log_export_; //固件支持 日志导出 139 239-3B0429 + bool firmware_sup_log_export_G300_; //固件支持 不用协议,直接读片上文件,设备日志导出 300 - 0430 bool firmware_sup_color_corr_; //固件支持 偏色校正 139 239 439-3C bool firmware_sup_wake_device_; //固件支持 唤醒设备 139 239-3B0830 bool firmware_sup_double_img; //固件支持 双张保留 139 239-3C diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index c6d0127..48f7ef5 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -111,6 +111,7 @@ hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) : firmware_sup_backup_restore = year_date.compare("231021") >= 0 ? true : false; firmware_sup_boardTime = year_date.compare("231021") >= 0 ? true : false; firmware_sup_double_img = year_date.compare("231027") >= 0 ? true : false; + firmware_sup_log_export_G300_ = year_date.compare("230430") >= 0 ? true : false; #ifndef MAPPING_FUNCTION_IN_BASE init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 @@ -1253,60 +1254,106 @@ int hg_scanner_300::on_get_feedmode(int &feedmode) } int hg_scanner_300::get_device_log(string &log) { - int ret = SCANNER_ERR_OK, - len = 0; - string save_path = hg_log::temporary_path() + PATH_SEPARATOR + "device.log"; - string str; - string str2; - USBCB usbcb = { setting3288dsp::GET_LOG_FILES_INFO, 0, 0 }; - len = sizeof(USBCB); + if (firmware_sup_log_export_G300_) { - std::lock_guard lock(io_lock_); + std::string src_name = "/var/log/syslog"; + std::string save_path = hg_log::temporary_path() + PATH_SEPARATOR + "device.log"; - ret = writeusb(usbcb); - if (ret == SCANNER_ERR_OK) + USBCB usbcb = { 0 }; + usbcb.u32_CMD = 0x301; + usbcb.u32_Count = src_name.length(); + int len = src_name.length(); + int size = sizeof(usbcb); + int ret = io_->write_bulk(&usbcb, &size); + ret = io_->write_bulk(&src_name[0], &len); + usbcb.u32_CMD = 0x300; + ret = io_->write_bulk(&usbcb, &size); + ret = io_->read_bulk(&usbcb, &size); + ofstream out(save_path); + usbcb.u32_CMD = 0x302; + ret = io_->write_bulk(&usbcb, &size); + int touch = 0; + std::string buff; + int bufsize = usbcb.u32_Count < 512 * 1024 ? usbcb.u32_Count : 512 * 1024; + buff.resize(bufsize); + while (touch < usbcb.u32_Count) { - ret = readusb(usbcb); - } - - int block = usbcb.u32_Count, - total = usbcb.u32_Count, - index = 0; - - if (total == 0) - { - return SCANNER_ERR_NO_DATA; - } - str.resize(total); - str2.resize(total); - //ret = io_->read_bulk(&str[index], &block);//Reading too much data at once can cause error(TIME_OUT), it requires segmented reading. 2023-10-9 - while (total) - { - block = 1024 * 1024; - if (total < block) - { - block = total; - } - ret = io_->read_bulk(&str[index], &block); - if (ret != SCANNER_ERR_OK) + ret = io_->read_bulk(&buff[0], &bufsize); + if (SCANNER_ERR_OK != ret) return ret; - index += block; - total -= block; + out.write(&buff[0], bufsize); + touch += bufsize; + bufsize = bufsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : bufsize; } + out.close(); + + ofstream f; + f.open(save_path, ios::out | ios::trunc); + if (!f.is_open()) + return SCANNER_ERR_CREATE_FILE_FAILED; + + f << buff << endl; + f.close(); + log = save_path; } + else + { + int ret = SCANNER_ERR_OK, + len = 0; + string save_path = hg_log::temporary_path() + PATH_SEPARATOR + "device.log"; + string str; + string str2; + USBCB usbcb = { setting3288dsp::GET_LOG_FILES_INFO, 0, 0 }; + len = sizeof(USBCB); + { + std::lock_guard lock(io_lock_); - if (ret != SCANNER_ERR_OK) - return ret; + ret = writeusb(usbcb); + if (ret == SCANNER_ERR_OK) + { + ret = readusb(usbcb); + } - ofstream f; - f.open(save_path, ios::out | ios::trunc); - if (!f.is_open()) - return SCANNER_ERR_CREATE_FILE_FAILED; + int block = usbcb.u32_Count, + total = usbcb.u32_Count, + index = 0; - f << str << endl; - f.close(); - log = save_path; + if (total == 0) + { + return SCANNER_ERR_NO_DATA; + } + str.resize(total); + str2.resize(total); + //ret = io_->read_bulk(&str[index], &block);//Reading too much data at once can cause error(TIME_OUT), it requires segmented reading. 2023-10-9 + while (total) + { + block = 1024 * 1024; + if (total < block) + { + block = total; + } + ret = io_->read_bulk(&str[index], &block); + if (ret != SCANNER_ERR_OK) + return ret; + + index += block; + total -= block; + } + } + + if (ret != SCANNER_ERR_OK) + return ret; + + ofstream f; + f.open(save_path, ios::out | ios::trunc); + if (!f.is_open()) + return SCANNER_ERR_CREATE_FILE_FAILED; + + f << str << endl; + f.close(); + log = save_path; + } return SCANNER_ERR_OK; }