From e1c22f4bba8ec32bbfee601d113a2be2f62cd1d3 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 2 Aug 2022 16:32:46 +0800 Subject: [PATCH] =?UTF-8?q?G402=E5=A2=9E=E5=8A=A0INT=E7=AB=AF=E7=82=B9?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=9A=84=E9=94=99=E8=AF=AF=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner_239.cpp | 2 +- hgdriver/hgdev/hg_scanner_402.cpp | 37 ++++++++++++++++++++++++++++++- hgdriver/hgdev/hg_scanner_402.h | 2 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index c1901a9..e720237 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -1545,7 +1545,7 @@ void hg_scanner_239::thread_handle_usb_read(void) } status_ = st; } - VLOG_MINI_1(LOG_LEVEL_WARNING, "扫描失败, read interrupt返回状态为:%s\n", hg_scanner_err_description(status_)); + VLOG_MINI_1(LOG_LEVEL_WARNING, "\346\211\253\346\217\217\345\244\261\350\264\245, read interrupt\350\277\224\345\233\236\347\212\266\346\200\201\344\270\272\357\274\232%s\n", hg_scanner_err_description(status_)); //notify_ui_working_status(("扫描失败 " + hg_scanner::error_description((scanner_err)status_)).c_str(), SANE_EVENT_ERROR, status_); break; } diff --git a/hgdriver/hgdev/hg_scanner_402.cpp b/hgdriver/hgdev/hg_scanner_402.cpp index c9c2424..8a90007 100644 --- a/hgdriver/hgdev/hg_scanner_402.cpp +++ b/hgdriver/hgdev/hg_scanner_402.cpp @@ -1159,7 +1159,7 @@ int hg_scanner_402::pop_first_image(void) return ret; } -int hg_scanner_402::read_one_image_from_usb(void) +int hg_scanner_402::read_one_image_from_usb(SANE_Image_Statu statu) { int r = 0, total = get_front_data_size(), @@ -1185,6 +1185,7 @@ int hg_scanner_402::read_one_image_from_usb(void) return SCANNER_ERR_INSUFFICIENT_MEMORY; // write reading command + buf->set_image_statu(statu); ret = write_register(SR_IM_TX, 1); if (ret == SCANNER_ERR_OK) @@ -1589,6 +1590,40 @@ void hg_scanner_402::thread_handle_usb_read(void) to_cnt = 0; if (size == sizeof(buf)) { + ret = settings402::device_status_to_hg_err(info); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status from interrupt point is '%s'\n", hg_scanner_err_name(status_)); + + if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_TIMEOUT && ret != SCANNER_ERR_DEVICE_STOPPED) + { + if (!is_dev_image_process_done()) + { + int st = ret, count = 0, statu = last_usb_image_statu(st); + while (!is_dev_image_process_done()) + std::this_thread::sleep_for(std::chrono::milliseconds(30)); + + while ((count = get_image_count()) > 0) + { + int s = SANE_Image_Statu_OK; + if (count <= 2) + { + if (image_prc_param_.bits.page == PAGE_SINGLE) + s = count == 1 ? statu : s; + else + s = statu; + } + ret = read_one_image_from_usb((SANE_Image_Statu)s); + count++; + if (ret != SCANNER_ERR_OK + && ret != SCANNER_ERR_CREATE_FILE_FAILED + && ret != SCANNER_ERR_WRITE_FILE_FAILED) + break; + } + status_ = st; + } + VLOG_MINI_1(LOG_LEVEL_WARNING, "\346\211\253\346\217\217\345\244\261\350\264\245, read interrupt\350\277\224\345\233\236\347\212\266\346\200\201\344\270\272\357\274\232%s\n", hg_scanner_err_description(status_)); + break; + } + switch (info->From) { case IMG: diff --git a/hgdriver/hgdev/hg_scanner_402.h b/hgdriver/hgdev/hg_scanner_402.h index 40cccde..1656479 100644 --- a/hgdriver/hgdev/hg_scanner_402.h +++ b/hgdriver/hgdev/hg_scanner_402.h @@ -53,7 +53,7 @@ class hg_scanner_402 : public hg_scanner int writedown_image_configuration(void); int pop_first_image(void); - int read_one_image_from_usb(void); + int read_one_image_from_usb(SANE_Image_Statu statu = SANE_Image_Statu_OK); void discard_all_images(void); protected: