fix bugs.

This commit is contained in:
gb 2024-01-24 17:56:06 +08:00
parent 6fadf97d3e
commit 2ecad189e8
6 changed files with 120 additions and 33 deletions

View File

@ -30,6 +30,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "usb_tools", "usb_tools\usb_
EndProject 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}" 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 EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "saneui", "..\..\doc_and_tools\tools\apps\saneui\saneui.vcxproj", "{9C925903-62C0-4517-B435-93F6291E2D27}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64 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|x64.Build.0 = Release|x64
{8C3DEF78-4DF1-4C26-A11E-7031FF773E7D}.Release|x86.ActiveCfg = Release|Win32 {8C3DEF78-4DF1-4C26-A11E-7031FF773E7D}.Release|x86.ActiveCfg = Release|Win32
{8C3DEF78-4DF1-4C26-A11E-7031FF773E7D}.Release|x86.Build.0 = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -104,6 +114,7 @@ Global
{D3579C48-F5AB-4F15-9B49-A2970FBA76C5} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D} {D3579C48-F5AB-4F15-9B49-A2970FBA76C5} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D}
{4C912767-88BE-463E-BFFC-AF994A92E425} = {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} {8C3DEF78-4DF1-4C26-A11E-7031FF773E7D} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D}
{9C925903-62C0-4517-B435-93F6291E2D27} = {53E5EDD9-13BA-4F3C-A387-C73CB06C686D}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A89068FF-95C4-3C1E-B126-70B66C9824BB} SolutionGuid = {A89068FF-95C4-3C1E-B126-70B66C9824BB}

View File

@ -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]) const wchar_t* scanner_status(int s, wchar_t unk[20])
{ {
RETURN_EQUAL(s, SCANNER_STATUS_READY); RETURN_EQUAL(s, SCANNER_ERR_OK);
RETURN_EQUAL(s, SCANNER_STATUS_NOT_OPEN); RETURN_EQUAL(s, SCANNER_ERR_INVALID_PARAMETER);
RETURN_EQUAL(s, SCANNER_STATUS_LOST_CONNECT); RETURN_EQUAL(s, SCANNER_ERR_USER_CANCELED);
RETURN_EQUAL(s, SCANNER_STATUS_RESET_BULK); RETURN_EQUAL(s, SCANNER_ERR_INSUFFICIENT_MEMORY);
RETURN_EQUAL(s, SCANNER_STATUS_START_SCANNING); RETURN_EQUAL(s, SCANNER_ERR_ACCESS_DENIED);
RETURN_EQUAL(s, SCANNER_STATUS_SCANNING); RETURN_EQUAL(s, SCANNER_ERR_IO_PENDING);
RETURN_EQUAL(s, SCANNER_STATUS_SCAN_FINISHED); RETURN_EQUAL(s, SCANNER_ERR_NOT_EXACT);
RETURN_EQUAL(s, SCANNER_STATUS_BUSY); RETURN_EQUAL(s, SCANNER_ERR_CONFIGURATION_CHANGED);
RETURN_EQUAL(s, SCANNER_STATUS_COVER_OPENNED); RETURN_EQUAL(s, SCANNER_ERR_NOT_OPEN);
RETURN_EQUAL(s, SCANNER_STATUS_COVER_CLOSED); RETURN_EQUAL(s, SCANNER_ERR_NOT_START);
RETURN_EQUAL(s, SCANNER_STATUS_SLEEPING); RETURN_EQUAL(s, SCANNER_ERR_NOT_ANY_MORE);
RETURN_EQUAL(s, SCANNER_STATUS_WAKED_UP); RETURN_EQUAL(s, SCANNER_ERR_NO_DATA);
RETURN_EQUAL(s, SCANNER_STATUS_COUNT_MODE); RETURN_EQUAL(s, SCANNER_ERR_HAS_DATA_YET);
RETURN_EQUAL(s, SCANNER_STATUS_DOUBLE_FEEDED); RETURN_EQUAL(s, SCANNER_ERR_OUT_OF_RANGE);
RETURN_EQUAL(s, SCANNER_STATUS_PAPER_JAMMED); RETURN_EQUAL(s, SCANNER_ERR_IO);
RETURN_EQUAL(s, SCANNER_STATUS_PAPER_ASKEW); RETURN_EQUAL(s, SCANNER_ERR_TIMEOUT);
RETURN_EQUAL(s, SCANNER_STATUS_FEED_FAILED); RETURN_EQUAL(s, SCANNER_ERR_OPEN_FILE_FAILED);
RETURN_EQUAL(s, SCANNER_STATUS_NO_PAPER); RETURN_EQUAL(s, SCANNER_ERR_CREATE_FILE_FAILED);
RETURN_EQUAL(s, SCANNER_STATUS_PAPER_ON); RETURN_EQUAL(s, SCANNER_ERR_WRITE_FILE_FAILED);
RETURN_EQUAL(s, SCANNER_STATUS_STAPLE_ON); RETURN_EQUAL(s, SCANNER_ERR_DATA_DAMAGED);
RETURN_EQUAL(s, SCANNER_STATUS_SIZE_ERR); RETURN_EQUAL(s, SCANNER_ERR_OPENED_BY_OTHER_PROCESS);
RETURN_EQUAL(s, SCANNER_STATUS_DOGEAR); RETURN_EQUAL(s, SCANNER_ERR_LANG_PAK_LOST);
RETURN_EQUAL(s, SCANNER_STATUS_CFG_CHANGED); 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); swprintf_s(unk, 18, L"0x%x", s);
@ -791,7 +840,7 @@ void CDlgScanner::set_device(ONLNSCANNER* pnp)
{ {
int err = 0; int err = 0;
OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_READY); OnDeviceStatus(0, (LPARAM)SCANNER_ERR_OK);
scanner_ = new hg_scanner(pnp); scanner_ = new hg_scanner(pnp);
err = scanner_->status(); err = scanner_->status();
if (err) 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); msg_box(m_hWnd, MB_OK, L"Error", L"Open %04X:%04X failed with error %d.", pnp->vid, pnp->pid, err);
enable_buttons(false); enable_buttons(false);
buf_.EnableWindow(FALSE); buf_.EnableWindow(FALSE);
OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_NOT_OPEN); OnDeviceStatus(0, (LPARAM)SCANNER_ERR_NOT_OPEN);
} }
else else
{ {
@ -825,7 +874,7 @@ void CDlgScanner::set_device(ONLNSCANNER* pnp)
} }
enable_buttons(false); enable_buttons(false);
buf_.EnableWindow(FALSE); buf_.EnableWindow(FALSE);
OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_NOT_OPEN); OnDeviceStatus(0, (LPARAM)SCANNER_ERR_NOT_OPEN);
} }
else else
{ {
@ -859,7 +908,7 @@ void CDlgScanner::set_device(ONLNSCANNER* pnp)
} }
else else
{ {
OnDeviceStatus(0, (LPARAM)SCANNER_STATUS_LOST_CONNECT); OnDeviceStatus(0, (LPARAM)SCANNER_ERR_DEVICE_NOT_FOUND);
::SetDlgItemTextW(m_hWnd, IDC_BUTTON_SCAN, L"Scan"); ::SetDlgItemTextW(m_hWnd, IDC_BUTTON_SCAN, L"Scan");
} }
GetDlgItem(IDC_CHECK_AUTO)->EnableWindow(scanner_ != NULL); GetDlgItem(IDC_CHECK_AUTO)->EnableWindow(scanner_ != NULL);
@ -1183,6 +1232,7 @@ BEGIN_MESSAGE_MAP(CDlgScanner, CDialogEx)
ON_MESSAGE(WM_TX_PROGRESS, &CDlgScanner::OnTransProgress) ON_MESSAGE(WM_TX_PROGRESS, &CDlgScanner::OnTransProgress)
ON_CBN_SELCHANGE(IDC_COMBO_BUF_SIZE, &CDlgScanner::OnCbnSelchangeComboBufSize) ON_CBN_SELCHANGE(IDC_COMBO_BUF_SIZE, &CDlgScanner::OnCbnSelchangeComboBufSize)
ON_WM_DESTROY() ON_WM_DESTROY()
ON_MESSAGE(WM_SCAN_FINISHED, &CDlgScanner::OnScanFinished)
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -1360,14 +1410,20 @@ void CDlgScanner::OnBnClickedButtonScan()
SetDlgItemInt(IDC_EDIT_COUNT, img_cnt_); SetDlgItemInt(IDC_EDIT_COUNT, img_cnt_);
if (scanner_) 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()); utils::to_log(LOG_LEVEL_DEBUG, "Start to scan = %s\r\n", usb::u2a(scanner_status(err, title)).c_str());
if (err) 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 else
{ {
utils::to_log(LOG_LEVEL_DEBUG, "Device configuration: %s\n", cfg.c_str());
::SetDlgItemTextW(m_hWnd, IDC_BUTTON_SCAN, L"Stop"); ::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(); int err = scanner_->stop();
if (err) if (err)
msg_box(m_hWnd, MB_OK, L"Error", L"Failed to stop scanning with code %d", 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() void CDlgScanner::OnBnClickedButtonBrowseFile()
{ {
// TODO: 在此添加控件通知处理程序代码 // TODO: 在此添加控件通知处理程序代码ls
} }
void CDlgScanner::OnBnClickedButtonSendFile() void CDlgScanner::OnBnClickedButtonSendFile()
{ {
@ -1587,6 +1648,13 @@ LRESULT CDlgScanner::OnTransProgress(WPARAM wp, LPARAM lp)
return 0; 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() void CDlgScanner::OnCbnSelchangeComboBufSize()

View File

@ -130,6 +130,7 @@ public:
afx_msg LRESULT OnDeviceStatus(WPARAM wp, LPARAM lp); afx_msg LRESULT OnDeviceStatus(WPARAM wp, LPARAM lp);
afx_msg LRESULT OnTransDiretion(WPARAM wp, LPARAM lp); afx_msg LRESULT OnTransDiretion(WPARAM wp, LPARAM lp);
afx_msg LRESULT OnTransProgress(WPARAM wp, LPARAM lp); afx_msg LRESULT OnTransProgress(WPARAM wp, LPARAM lp);
afx_msg LRESULT OnScanFinished(WPARAM wp, LPARAM lp);
afx_msg void OnCbnSelchangeComboBufSize(); afx_msg void OnCbnSelchangeComboBufSize();
CComboBox buf_; CComboBox buf_;
afx_msg void OnDestroy(); afx_msg void OnDestroy();

View File

@ -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); slider = create_slider(sn, x, pos_.y, lower, upper, desc->constraint.range->quant, now, &size, false);
x += size.cx + dlg_page::gap_x; 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); wnd = create_edit(sn, x, pos_.y - 2, text_size->cy, w);
x += w; x += w;
SetWindowTextW(wnd, text); SetWindowTextW(wnd, text);

View File

@ -23,7 +23,7 @@
#define WM_SCAN_WORKING WM_USER + 301 // WPARAM: unused; LPARAM: unsed #define WM_SCAN_WORKING WM_USER + 301 // WPARAM: unused; LPARAM: unsed
#define WM_USB_PACKET_RECEIVED WM_USER + 302 #define WM_USB_PACKET_RECEIVED WM_USER + 302
#define WM_IMAGE_RECEIVED WM_USER + 303 #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_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 #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

View File

@ -335,7 +335,7 @@ CusbtoolsDlg::CusbtoolsDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_USB_TOOLS_DIALOG, pParent) : CDialogEx(IDD_USB_TOOLS_DIALOG, pParent)
{ {
log_file_ = utils::init_log(LOG_TYPE_FILE); 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"); //FILE* dst = fopen("D:\\boxroom\\usb-tx-file\\tx\\test.txt", "wb");