From d93d82f5ec7c467fea29ff28c590ef0054cd8011 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 1 Jun 2022 17:16:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=AF=E5=8A=A8=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BB=A5=E9=80=82=E5=BA=94=E7=AC=AC=E4=B8=89=E6=96=B9?= =?UTF-8?q?APP=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 14 ++++--- hgdriver/hgdev/hg_scanner_200.cpp | 6 ++- hgdriver/hgdev/hg_scanner_239.cpp | 66 ++----------------------------- hgdriver/hgdev/hg_scanner_300.cpp | 8 ++-- hgdriver/hgdev/hg_scanner_400.cpp | 6 ++- 5 files changed, 23 insertions(+), 77 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 20a4683..93a9753 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -1676,11 +1676,10 @@ int hg_scanner::try_third_app_after_start(int err) { if (!async_io_) { - if (wait_usb_result_.wait(500)) - { - if (status_ != SCANNER_ERR_DEVICE_BUSY && status_ != SCANNER_ERR_OK) - err = status_; - } + while (wait_img_.is_waiting() && !wait_usb_.is_waiting()) + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + if (wait_img_.is_waiting() && wait_usb_.is_waiting()) + err = status_; } return err; @@ -2154,7 +2153,10 @@ std::string hg_scanner::name(void) } int hg_scanner::status(void) { - return status_; + if (!wait_usb_.is_waiting() || !wait_img_.is_waiting()) + return SCANNER_ERR_DEVICE_BUSY; + else + return status_; } bool hg_scanner::is_online(void) { diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index d1eed39..40e285e 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -450,16 +450,18 @@ int hg_scanner_200::start(void) ret = writeusb(usb); io_->set_timeout(500); - VLOG_MINI_1(LOG_LEVEL_WARNING, "device start is.(%s)\n", hg_scanner_err_name(ret)); + VLOG_MINI_1(LOG_LEVEL_WARNING, "write start command = %s\n", hg_scanner_err_name(ret)); if(ret == SCANNER_ERR_OK) { - status_ = SCANNER_ERR_DEVICE_BUSY; + //status_ = SCANNER_ERR_DEVICE_BUSY; wait_usb_.notify(); std::this_thread::sleep_for(std::chrono::milliseconds(300)); + ret = try_third_app_after_start(ret); } else status_ = ret; + VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret)); return ret; } diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index abe5bf5..27903e7 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -1388,7 +1388,7 @@ void hg_scanner_239::thread_handle_usb_read(void) to_cnt = 0, count = 0; - status_ = SCANNER_ERR_DEVICE_BUSY; + //status_ = SCANNER_ERR_DEVICE_BUSY; while (run_ )//&& !user_cancel_ { if (user_cancel_) @@ -1617,83 +1617,23 @@ int hg_scanner_239::start(void) ret = write_command(SC_START); - VLOG_MINI_1(LOG_LEVEL_WARNING, "start status02 is(%s), the result will be unpredictable.\n", hg_scanner_err_name(ret)); io_->set_timeout(1000); if (ret == SCANNER_ERR_OK) { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Write SC_START command success, and now scanner stauts is %x\n", get_status()); - //status_ = SCANNER_ERR_DEVICE_BUSY; wait_usb_.notify(); this_thread::sleep_for(chrono::milliseconds(100)); + ret = try_third_app_after_start(ret); } else { status_ = ret; VLOG_MINI_3(LOG_LEVEL_WARNING, "(%s)[Thread %s]Send start command = %s\n", hg_log::current_time().c_str(), hg_log::format_current_thread_id().c_str(), hg_scanner_err_name(ret)); } + VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret)); return ret; } -//int hg_scanner_239::get_image_info(IMG_PARAM* ii) -//{ -// int ret = SCANNER_ERR_OK; -// IMH imh; -// -// bzero(&imh, sizeof(imh)); -// while((!wait_img_.is_waiting() || !wait_usb_.is_waiting()) && final_imgs_.Size() <= 0) -// this_thread::sleep_for(chrono::milliseconds(10)); -// -// if (final_imgs_.Size() <= 0) -// ret = status_; -// else -// { -// if (!final_imgs_.front(&imh)) -// ret = SCANNER_ERR_NO_DATA; -// else -// { -// if (image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS) -// ii->format = FRAME_RGB; -// else -// ii->format = FRAME_GRAY; -// ii->depth = 8; // 此处指每一个颜色分量的位深,我们的扫描仪固定为“8” -// ii->last_frame = true; // 一幅图片如果各个分量相互分离,则最后一个分量的时候设置为true。彩色图像RGB时也只有一“帧”,所以也为true -// ii->bytes_per_line = imh.line_bytes; -// ii->pixels_per_line = imh.width; -// ii->lines = imh.height; -// } -// } -// VLOG_MINI_4(LOG_LEVEL_DEBUG_INFO, "Get image info(%d * %d * %d) = %s\n", ii->pixels_per_line, ii->lines, imh.bits, hg_scanner_err_name(ret)); -// -// return ret; -//} -//int hg_scanner_239::read_image_data(unsigned char* buf, int* len) -//{ -// if (!len) -// return SCANNER_ERR_INVALID_PARAMETER; -// -// if (!buf) -// { -// IMH imh; -// final_imgs_.front(&imh); -// *len = imh.bytes; -// -// return SCANNER_ERR_INSUFFICIENT_MEMORY; -// } -// -// if (final_imgs_.Size() > 0) -// { -// int fetch = *len; -// -// final_imgs_.fetch_front(buf, len); -// VLOG_MINI_4(LOG_LEVEL_DEBUG_INFO, "[%s]UI fetch image 0x%x/0x%x to buf %s...\n", hg_log::format_current_thread_id().c_str(), *len, fetch -// , hg_log::format_ptr(buf).c_str()); -// -// return SCANNER_ERR_OK; -// } -// else -// return SCANNER_ERR_NO_DATA; -//} int hg_scanner_239::stop(void) { int ret = SCANNER_ERR_OK; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index e868c97..da10384 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -395,16 +395,16 @@ void hg_scanner_300::thread_handle_usb_read(void) USBCB usb = {START_COMMAND, img_conf_.scannum, 0}; ret = writeusb(usb); io_->set_timeout(500); - VLOG_MINI_1(LOG_LEVEL_WARNING, "device start is.(%s)\n", hg_scanner_err_name(ret)); - if(ret == SCANNER_ERR_OK) { - status_ = SCANNER_ERR_DEVICE_BUSY; + //status_ = SCANNER_ERR_DEVICE_BUSY; wait_usb_.notify(); std::this_thread::sleep_for(std::chrono::milliseconds(300)); + ret = try_third_app_after_start(ret); } else - status_ = ret; + status_ = ret; + VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret)); return ret; } diff --git a/hgdriver/hgdev/hg_scanner_400.cpp b/hgdriver/hgdev/hg_scanner_400.cpp index a9d828e..043e848 100644 --- a/hgdriver/hgdev/hg_scanner_400.cpp +++ b/hgdriver/hgdev/hg_scanner_400.cpp @@ -396,12 +396,14 @@ int hg_scanner_400::start(void) if(ret == SCANNER_ERR_OK) { - status_ = SCANNER_ERR_DEVICE_BUSY; + //status_ = SCANNER_ERR_DEVICE_BUSY; wait_usb_.notify(); std::this_thread::sleep_for(std::chrono::milliseconds(300)); + ret = try_third_app_after_start(ret); } else - status_ = ret; + status_ = ret; + VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret)); return ret; }