From 779d2552db3f1b717c424fc2ca6309950cf2a674 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 20 Sep 2022 18:14:27 +0800 Subject: [PATCH] =?UTF-8?q?TWAIN=E6=8E=A5=E5=8F=A3=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E7=8A=B6=E6=80=81=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/s2t_api.h | 1 + sane/scanned_img.cpp | 13 ++++++++-- sane/scanned_img.h | 4 +++ sane/scanner.cpp | 1 + twain/twain/huagaods.cpp | 53 +++++++++++++++++++++++++++++++++++++--- 5 files changed, 66 insertions(+), 6 deletions(-) diff --git a/sane/s2t_api.h b/sane/s2t_api.h index 4a8446e..0c9e0c5 100644 --- a/sane/s2t_api.h +++ b/sane/s2t_api.h @@ -143,6 +143,7 @@ struct __declspec(novtable) IScanImg : public IRef COM_API_DECLARE(const char*, file(void)); COM_API_DECLARE(void, keep_file(bool keep)); COM_API_DECLARE(void, copy_header(SANE_Parameters* head)); + COM_API_DECLARE(int, image_status(void)); }; struct __declspec(novtable) ISaneInvoker : public IRef { diff --git a/sane/scanned_img.cpp b/sane/scanned_img.cpp index 694d993..04c20b1 100644 --- a/sane/scanned_img.cpp +++ b/sane/scanned_img.cpp @@ -368,7 +368,7 @@ unsigned int mapping_buf::mapped_bytes(void) scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, int dpi , const wchar_t* tmp_file, twain_xfer xfer , SANE_FinalImgFormat *fmt) : head_(head), dpi_(dpi), header_size_(0), file_(tmp_file ? tmp_file : L"") - , dev_(dev) + , dev_(dev), status_(SANE_Image_Statu_OK) { if (fmt) fmt_ = *fmt; @@ -434,7 +434,7 @@ scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, int dpi } scanned_img::scanned_img(SANE_Handle dev, SANE_Parameters head, void* data, unsigned int len, int dpi, const wchar_t* tmp_file , twain_xfer xfer, SANE_FinalImgFormat* fmt) : head_(head), dpi_(dpi), header_size_(0) - , file_(tmp_file ? tmp_file : L""), dev_(dev) + , file_(tmp_file ? tmp_file : L""), dev_(dev), status_(SANE_Image_Statu_OK) { if (fmt) fmt_ = *fmt; @@ -480,6 +480,11 @@ scanned_img::~scanned_img() delete data_; } +void scanned_img::set_image_status(SANE_Image_Statu status) +{ + status_ = status; +} + std::string scanned_img::file_header(SANE_ImageType type, float resolution, twain_xfer xfer) { std::string h(""); @@ -711,6 +716,10 @@ COM_API_IMPLEMENT(scanned_img, void, copy_header(SANE_Parameters* head)) { *head = head_; } +COM_API_IMPLEMENT(scanned_img, int, image_status(void)) +{ + return status_; +} diff --git a/sane/scanned_img.h b/sane/scanned_img.h index 4e87131..3ae1905 100644 --- a/sane/scanned_img.h +++ b/sane/scanned_img.h @@ -62,6 +62,8 @@ class scanned_img : public IScanImg, virtual public refer unsigned int header_size_; SANE_FinalImgFormat fmt_; + SANE_Image_Statu status_; + std::string file_header(SANE_ImageType type, float resolution, twain_xfer xfer); void do_result(bool ok, twain_xfer xfer); void swap_rgb(void); @@ -72,6 +74,7 @@ public: scanned_img(SANE_Handle dev, SANE_Parameters head, void* data, unsigned int len, int dpi, const wchar_t* tmp_file , twain_xfer xfer = TWAIN_XFER_Native, SANE_FinalImgFormat *fmt = NULL); + void set_image_status(SANE_Image_Statu status); protected: ~scanned_img(); @@ -96,6 +99,7 @@ public: COM_API_OVERRIDE(const char*, file(void)); COM_API_OVERRIDE(void, keep_file(bool keep)); COM_API_OVERRIDE(void, copy_header(SANE_Parameters* head)); + COM_API_OVERRIDE(int, image_status(void)); }; template diff --git a/sane/scanner.cpp b/sane/scanner.cpp index 6713fdc..2cccef5 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -2193,6 +2193,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len) img = new scanned_img(handle_, simg->header, simg->data, simg->bytes, dpi_, (tmp_path_ + name).c_str(), xfer_, &img_fmt_); if (img->bytes() /*>= simg->bytes*/) { + img->set_image_status((SANE_Image_Statu)simg->flag.statu); images_.save(img); } else diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index f52bb1e..c662ccd 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -723,14 +723,24 @@ Result huagao_ds::capabilitySet(const Identity& origin, Capability& data) } Result huagao_ds::eventProcess(const Identity&, Event& event) { + static int count_0 = 0; const MSG* msg = (const MSG*)event.event(); // event.setMessage(Msg::Null); if (scanner_.get()) { int ev = scanner_->get_event(); - wchar_t msg[128] = { 0 }; - swprintf_s(msg, _countof(msg) - 1, L"ds::eventProcess(0x%x)\r\n", ev); - load_sane_util::log_info(msg, 0); + if (ev == 0) + count_0++; + else + { + wchar_t msg[128] = { 0 }; + if(count_0) + swprintf_s(msg, _countof(msg) - 1, L"ds::eventProcess(0x0 +%d)\r\nds::eventProcess(0x%x)\r\n", count_0, ev); + else + swprintf_s(msg, _countof(msg) - 1, L"ds::eventProcess(0x%x)\r\n", ev); + load_sane_util::log_info(msg, 0); + count_0 = 0; + } switch (ev) { @@ -1138,7 +1148,8 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin) if (img) { std::string file(img->file()); - int cv_e = 0; + int cv_e = 0, + status = img->image_status(); if (file.empty()) { dst = fopen(m_fileXfer.filePath().string().c_str(), "wb"); @@ -1222,6 +1233,21 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin) } } + //if (ret.status() == ConditionCode::Success) + //{ + // switch (status) + // { + // case SANE_Image_Statu_Blank: + // break; + // case SANE_Image_Statu_Double: + // ret.setStatus(ConditionCode::PaperDoubleFeed); + // break; + // case SANE_Image_Statu_Jammed: + // ret.setStatus(ConditionCode::PaperJam); + // break; + // } + //} + { std::wstring info(load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str())); wchar_t r[80] = { 0 }; @@ -1378,6 +1404,7 @@ void huagao_ds::init_support_caps(void) if (Msg::Set == msg) { auto show = data.currentItem(); m_bIndicator = show; + load_sane_util::log_info(m_bIndicator ? L"Set show indicator: true\r\n" : L"Set show indicator: false\r\n", 0); return success(); } return CapSupGetAllReset(msg, data, { FALSE,TRUE }, m_bIndicator, TRUE, m_bIndicator ? 1 : 0, 1); @@ -1411,6 +1438,11 @@ void huagao_ds::init_support_caps(void) if (Compression::None == mech || mech == Compression::Group4) { m_compression = mech; scanner_->twain_set_compression((SANE_CompressionType)m_compression); + { + wchar_t info[128] = { 0 }; + swprintf_s(info, _countof(info) - 1, L"set CapType::ICompression = %s\r\n", Compression::None == mech ? L"None" : L"Group4"); + load_sane_util::log_info(info, 0); + } return success(); } else @@ -1625,6 +1657,11 @@ void huagao_ds::init_support_caps(void) if (mech == XferMech::Native || mech == XferMech::Memory || mech == XferMech::File) { m_capXferMech = mech; scanner_->twain_set_transfer((twain_xfer)m_capXferMech); + { + wchar_t info[128] = { 0 }, * des[] = {L"Native", L"File", L"Memory"}; + swprintf_s(info, _countof(info) - 1, L"set CapType::IXferMech = %s\r\n", des[(int)m_capXferMech]); + load_sane_util::log_info(info, 0); + } return success(); } else { @@ -1834,6 +1871,14 @@ void huagao_ds::init_support_caps(void) fmt != Twpp::ImageFileFormat::Tiff) return badValue(); m_fileXfer.setFormat((Twpp::ImageFileFormat)data.currentItem()); + { + if (fmt == Twpp::ImageFileFormat::Bmp) + load_sane_util::log_info(L"set CapType::IImageFileFormat = Bmp\r\n", 0); + else if (fmt == Twpp::ImageFileFormat::Jfif) + load_sane_util::log_info(L"set CapType::IImageFileFormat = Jfif\r\n", 0); + else if (fmt == Twpp::ImageFileFormat::Tiff) + load_sane_util::log_info(L"set CapType::IImageFileFormat = Tiff\r\n", 0); + } return success(); //if(Msg::Set == msg) // init.img_format = (SANE_ImageType)(int)data.currentItem();