From 2ecad189e866819d4573e31317617433d346d472 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 24 Jan 2024 17:56:06 +0800 Subject: [PATCH] fix bugs. --- sln/hgscanner.sln | 11 +++ sln/usb_tools/DlgScanner.cpp | 130 +++++++++++++++++++++++-------- sln/usb_tools/DlgScanner.h | 1 + sln/usb_tools/opt_ui/DlgPage.cpp | 7 ++ sln/usb_tools/opt_ui/DlgPage.h | 2 +- sln/usb_tools/usb_toolsDlg.cpp | 2 +- 6 files changed, 120 insertions(+), 33 deletions(-) diff --git a/sln/hgscanner.sln b/sln/hgscanner.sln index 83dff2f..f7a6e06 100644 --- a/sln/hgscanner.sln +++ b/sln/hgscanner.sln @@ -30,6 +30,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "usb_tools", "usb_tools\usb_ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_TWAIN_App", "..\..\doc_and_tools\tools\apps\test_TWAIN_App\test_TWAIN_App.vcxproj", "{8C3DEF78-4DF1-4C26-A11E-7031FF773E7D}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "saneui", "..\..\doc_and_tools\tools\apps\saneui\saneui.vcxproj", "{9C925903-62C0-4517-B435-93F6291E2D27}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -92,6 +94,14 @@ Global {8C3DEF78-4DF1-4C26-A11E-7031FF773E7D}.Release|x64.Build.0 = Release|x64 {8C3DEF78-4DF1-4C26-A11E-7031FF773E7D}.Release|x86.ActiveCfg = Release|Win32 {8C3DEF78-4DF1-4C26-A11E-7031FF773E7D}.Release|x86.Build.0 = Release|Win32 + {9C925903-62C0-4517-B435-93F6291E2D27}.Debug|x64.ActiveCfg = Debug|x64 + {9C925903-62C0-4517-B435-93F6291E2D27}.Debug|x64.Build.0 = Debug|x64 + {9C925903-62C0-4517-B435-93F6291E2D27}.Debug|x86.ActiveCfg = Debug|Win32 + {9C925903-62C0-4517-B435-93F6291E2D27}.Debug|x86.Build.0 = Debug|Win32 + {9C925903-62C0-4517-B435-93F6291E2D27}.Release|x64.ActiveCfg = Release|x64 + {9C925903-62C0-4517-B435-93F6291E2D27}.Release|x64.Build.0 = Release|x64 + {9C925903-62C0-4517-B435-93F6291E2D27}.Release|x86.ActiveCfg = Release|Win32 + {9C925903-62C0-4517-B435-93F6291E2D27}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -104,6 +114,7 @@ Global {D3579C48-F5AB-4F15-9B49-A2970FBA76C5} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D} {4C912767-88BE-463E-BFFC-AF994A92E425} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D} {8C3DEF78-4DF1-4C26-A11E-7031FF773E7D} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D} + {9C925903-62C0-4517-B435-93F6291E2D27} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A89068FF-95C4-3C1E-B126-70B66C9824BB} diff --git a/sln/usb_tools/DlgScanner.cpp b/sln/usb_tools/DlgScanner.cpp index 7ae0280..4d7ec94 100644 --- a/sln/usb_tools/DlgScanner.cpp +++ b/sln/usb_tools/DlgScanner.cpp @@ -639,29 +639,78 @@ const wchar_t* peer_bulk_status(int s, wchar_t unk[20]) } const wchar_t* scanner_status(int s, wchar_t unk[20]) { - RETURN_EQUAL(s, SCANNER_STATUS_READY); - RETURN_EQUAL(s, SCANNER_STATUS_NOT_OPEN); - RETURN_EQUAL(s, SCANNER_STATUS_LOST_CONNECT); - RETURN_EQUAL(s, SCANNER_STATUS_RESET_BULK); - RETURN_EQUAL(s, SCANNER_STATUS_START_SCANNING); - RETURN_EQUAL(s, SCANNER_STATUS_SCANNING); - RETURN_EQUAL(s, SCANNER_STATUS_SCAN_FINISHED); - RETURN_EQUAL(s, SCANNER_STATUS_BUSY); - RETURN_EQUAL(s, SCANNER_STATUS_COVER_OPENNED); - RETURN_EQUAL(s, SCANNER_STATUS_COVER_CLOSED); - RETURN_EQUAL(s, SCANNER_STATUS_SLEEPING); - RETURN_EQUAL(s, SCANNER_STATUS_WAKED_UP); - RETURN_EQUAL(s, SCANNER_STATUS_COUNT_MODE); - RETURN_EQUAL(s, SCANNER_STATUS_DOUBLE_FEEDED); - RETURN_EQUAL(s, SCANNER_STATUS_PAPER_JAMMED); - RETURN_EQUAL(s, SCANNER_STATUS_PAPER_ASKEW); - RETURN_EQUAL(s, SCANNER_STATUS_FEED_FAILED); - RETURN_EQUAL(s, SCANNER_STATUS_NO_PAPER); - RETURN_EQUAL(s, SCANNER_STATUS_PAPER_ON); - RETURN_EQUAL(s, SCANNER_STATUS_STAPLE_ON); - RETURN_EQUAL(s, SCANNER_STATUS_SIZE_ERR); - RETURN_EQUAL(s, SCANNER_STATUS_DOGEAR); - RETURN_EQUAL(s, SCANNER_STATUS_CFG_CHANGED); + RETURN_EQUAL(s, SCANNER_ERR_OK); + RETURN_EQUAL(s, SCANNER_ERR_INVALID_PARAMETER); + RETURN_EQUAL(s, SCANNER_ERR_USER_CANCELED); + RETURN_EQUAL(s, SCANNER_ERR_INSUFFICIENT_MEMORY); + RETURN_EQUAL(s, SCANNER_ERR_ACCESS_DENIED); + RETURN_EQUAL(s, SCANNER_ERR_IO_PENDING); + RETURN_EQUAL(s, SCANNER_ERR_NOT_EXACT); + RETURN_EQUAL(s, SCANNER_ERR_CONFIGURATION_CHANGED); + RETURN_EQUAL(s, SCANNER_ERR_NOT_OPEN); + RETURN_EQUAL(s, SCANNER_ERR_NOT_START); + RETURN_EQUAL(s, SCANNER_ERR_NOT_ANY_MORE); + RETURN_EQUAL(s, SCANNER_ERR_NO_DATA); + RETURN_EQUAL(s, SCANNER_ERR_HAS_DATA_YET); + RETURN_EQUAL(s, SCANNER_ERR_OUT_OF_RANGE); + RETURN_EQUAL(s, SCANNER_ERR_IO); + RETURN_EQUAL(s, SCANNER_ERR_TIMEOUT); + RETURN_EQUAL(s, SCANNER_ERR_OPEN_FILE_FAILED); + RETURN_EQUAL(s, SCANNER_ERR_CREATE_FILE_FAILED); + RETURN_EQUAL(s, SCANNER_ERR_WRITE_FILE_FAILED); + RETURN_EQUAL(s, SCANNER_ERR_DATA_DAMAGED); + RETURN_EQUAL(s, SCANNER_ERR_OPENED_BY_OTHER_PROCESS); + RETURN_EQUAL(s, SCANNER_ERR_LANG_PAK_LOST); + RETURN_EQUAL(s, SCANNER_ERR_RELOAD_IMAGE_PARAM); + RETURN_EQUAL(s, SCANNER_ERR_RELOAD_OPT_PARAM); + RETURN_EQUAL(s, SCANNER_ERR_THROW_EXCEPTION); + + RETURN_EQUAL(s, SCANNER_ERR_USB_INIT_FAILED); + RETURN_EQUAL(s, SCANNER_ERR_USB_REGISTER_PNP_FAILED); + RETURN_EQUAL(s, SCANNER_ERR_USB_CLAIM_INTERFACE_FAILED); + + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_NOT_FOUND); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_NOT_SUPPORT); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_BUSY); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_SLEEPING); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_COUNT_MODE); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_STOPPED); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_COVER_OPENNED); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_NO_PAPER); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_FEEDING_PAPER); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_DOUBLE_FEEDING); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_PAPER_JAMMED); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_STAPLE_ON); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_PAPER_SKEW); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_SIZE_CHECK); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_DOGEAR); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_NO_IMAGE); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_SCANN_ERROR); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_PC_BUSY); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_ISLOCK); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_UPGRADE_SUCCESSFUL); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_UPGRADE_FAIL); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_AUTO_FAIL_OVER); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_AUTO_FAIL_INFO); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_DISTORTION); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_MAYBE_IS_HOLE); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_DEVS_BOOTING); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_UNKNOWN_STATUS); + + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_NOT_READY); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_GET_STATUS_FAILED); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_FEEDER_POS); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_CIS_OUT_OF_MEM); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_CIS_STREAM); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_001); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_002); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_003); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_004); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_005); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_006); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_007); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_008); + RETURN_EQUAL(s, SCANNER_ERR_DEVICE_HD_009); swprintf_s(unk, 18, L"0x%x", s); @@ -791,7 +840,7 @@ void CDlgScanner::set_device(ONLNSCANNER* pnp) { int err = 0; - OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_READY); + OnDeviceStatus(0, (LPARAM)SCANNER_ERR_OK); scanner_ = new hg_scanner(pnp); err = scanner_->status(); if (err) @@ -801,7 +850,7 @@ void CDlgScanner::set_device(ONLNSCANNER* pnp) msg_box(m_hWnd, MB_OK, L"Error", L"Open %04X:%04X failed with error %d.", pnp->vid, pnp->pid, err); enable_buttons(false); buf_.EnableWindow(FALSE); - OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_NOT_OPEN); + OnDeviceStatus(0, (LPARAM)SCANNER_ERR_NOT_OPEN); } else { @@ -825,7 +874,7 @@ void CDlgScanner::set_device(ONLNSCANNER* pnp) } enable_buttons(false); buf_.EnableWindow(FALSE); - OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_NOT_OPEN); + OnDeviceStatus(0, (LPARAM)SCANNER_ERR_NOT_OPEN); } else { @@ -859,7 +908,7 @@ void CDlgScanner::set_device(ONLNSCANNER* pnp) } else { - OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_LOST_CONNECT); + OnDeviceStatus(0, (LPARAM)SCANNER_ERR_DEVICE_NOT_FOUND); ::SetDlgItemTextW(m_hWnd, IDC_BUTTON_SCAN, L"Scan"); } GetDlgItem(IDC_CHECK_AUTO)->EnableWindow(scanner_ != NULL); @@ -1183,6 +1232,7 @@ BEGIN_MESSAGE_MAP(CDlgScanner, CDialogEx) ON_MESSAGE(WM_TX_PROGRESS, &CDlgScanner::OnTransProgress) ON_CBN_SELCHANGE(IDC_COMBO_BUF_SIZE, &CDlgScanner::OnCbnSelchangeComboBufSize) ON_WM_DESTROY() + ON_MESSAGE(WM_SCAN_FINISHED, &CDlgScanner::OnScanFinished) END_MESSAGE_MAP() @@ -1360,14 +1410,20 @@ void CDlgScanner::OnBnClickedButtonScan() SetDlgItemInt(IDC_EDIT_COUNT, img_cnt_); if (scanner_) { - int err = scanner_->start(); + auto over = [this](int err) -> void + { + ::PostMessage(m_hWnd, WM_SCAN_FINISHED, 0, err); + }; + std::string cfg(""); + int err = scanner_->start(&cfg, over); utils::to_log(LOG_LEVEL_DEBUG, "Start to scan = %s\r\n", usb::u2a(scanner_status(err, title)).c_str()); if (err) - msg_box(m_hWnd, MB_OK, L"Error", L"Failed in startin scanning with code %s", scanner_status(err, title)); + msg_box(m_hWnd, MB_OK, L"Error", L"Failed in starting scanning with code: %s", scanner_status(err, title)); else { + utils::to_log(LOG_LEVEL_DEBUG, "Device configuration: %s\n", cfg.c_str()); ::SetDlgItemTextW(m_hWnd, IDC_BUTTON_SCAN, L"Stop"); - OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_SCANNING); + OnDeviceStatus(0, (LPARAM)SCANNER_ERR_DEVICE_BUSY); } } } @@ -1378,12 +1434,17 @@ void CDlgScanner::OnBnClickedButtonScan() int err = scanner_->stop(); if (err) msg_box(m_hWnd, MB_OK, L"Error", L"Failed to stop scanning with code %d", err); + else + { + ::SetDlgItemTextW(m_hWnd, IDC_BUTTON_SCAN, L"Scan"); + OnDeviceStatus(0, (LPARAM)SCANNER_ERR_OK); + } } } } void CDlgScanner::OnBnClickedButtonBrowseFile() { - // TODO: 在此添加控件通知处理程序代码 + // TODO: 在此添加控件通知处理程序代码ls } void CDlgScanner::OnBnClickedButtonSendFile() { @@ -1587,6 +1648,13 @@ LRESULT CDlgScanner::OnTransProgress(WPARAM wp, LPARAM lp) return 0; } +LRESULT CDlgScanner::OnScanFinished(WPARAM wp, LPARAM lp) +{ + ::SetDlgItemTextW(m_hWnd, IDC_BUTTON_SCAN, L"Scan"); + OnDeviceStatus(0, lp); + + return 0; +} void CDlgScanner::OnCbnSelchangeComboBufSize() diff --git a/sln/usb_tools/DlgScanner.h b/sln/usb_tools/DlgScanner.h index 258175e..44ea00d 100644 --- a/sln/usb_tools/DlgScanner.h +++ b/sln/usb_tools/DlgScanner.h @@ -130,6 +130,7 @@ public: afx_msg LRESULT OnDeviceStatus(WPARAM wp, LPARAM lp); afx_msg LRESULT OnTransDiretion(WPARAM wp, LPARAM lp); afx_msg LRESULT OnTransProgress(WPARAM wp, LPARAM lp); + afx_msg LRESULT OnScanFinished(WPARAM wp, LPARAM lp); afx_msg void OnCbnSelchangeComboBufSize(); CComboBox buf_; afx_msg void OnDestroy(); diff --git a/sln/usb_tools/opt_ui/DlgPage.cpp b/sln/usb_tools/opt_ui/DlgPage.cpp index 340cf6d..2944556 100644 --- a/sln/usb_tools/opt_ui/DlgPage.cpp +++ b/sln/usb_tools/opt_ui/DlgPage.cpp @@ -929,6 +929,13 @@ HWND dlg_page::create_control_int(int sn, const SANE_Option_Descriptor* desc, vo slider = create_slider(sn, x, pos_.y, lower, upper, desc->constraint.range->quant, now, &size, false); x += size.cx + dlg_page::gap_x; } + else + { + if (lower > now) + lower = now; + else if (upper < now) + upper = now; + } wnd = create_edit(sn, x, pos_.y - 2, text_size->cy, w); x += w; SetWindowTextW(wnd, text); diff --git a/sln/usb_tools/opt_ui/DlgPage.h b/sln/usb_tools/opt_ui/DlgPage.h index 5fa0029..2ba1a00 100644 --- a/sln/usb_tools/opt_ui/DlgPage.h +++ b/sln/usb_tools/opt_ui/DlgPage.h @@ -23,7 +23,7 @@ #define WM_SCAN_WORKING WM_USER + 301 // WPARAM: unused; LPARAM: unsed #define WM_USB_PACKET_RECEIVED WM_USER + 302 #define WM_IMAGE_RECEIVED WM_USER + 303 -#define WM_SCAN_FINISHED WM_USER + 304 // WPARAM: std::string* msg; LPARAM: boo err +#define WM_SCAN_FINISHED WM_USER + 304 // WPARAM: unused; LPARAM: err code #define WM_REFRESH_OPTION WM_USER + 311 // WPARAM: source option SN, LPARAM: unused now #define WM_GET_CONFIG_OBJ WM_USER + 312 // WPARAM: bool*, [in]create new if NULL; [out]created, LPARAM: to receive the gb::sane_config_schm* object diff --git a/sln/usb_tools/usb_toolsDlg.cpp b/sln/usb_tools/usb_toolsDlg.cpp index ad482cb..97702f3 100644 --- a/sln/usb_tools/usb_toolsDlg.cpp +++ b/sln/usb_tools/usb_toolsDlg.cpp @@ -335,7 +335,7 @@ CusbtoolsDlg::CusbtoolsDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_USB_TOOLS_DIALOG, pParent) { log_file_ = utils::init_log(LOG_TYPE_FILE); - utils::to_log(LOG_LEVEL_DEBUG, "System info: page = %u, mapping-size = %u, disk-cluster-size = %u\r\n", sys_info::page_size, sys_info::page_map_size, sys_info::cluster_size); + utils::to_log(LOG_LEVEL_DEBUG, "System info: page = %u, mapping-size = %u, disk-cluster-size = %u\r\n", global_info::page_size, global_info::page_map_size, global_info::cluster_size); { //FILE* dst = fopen("D:\\boxroom\\usb-tx-file\\tx\\test.txt", "wb");