1.修复文件传输异常

2.去除冗余代码
This commit is contained in:
lovelyyoung 2020-08-15 16:42:43 +08:00
parent 784d9abd0f
commit f9b494c5b6
2 changed files with 33 additions and 39 deletions

View File

@ -124,7 +124,7 @@ static constexpr const Identity srcIdent(
// lets just simulate uniform resolution for both axes // lets just simulate uniform resolution for both axes
static constexpr UInt32 RESOLUTIONX = 85; static constexpr UInt32 RESOLUTIONX = 85;
static std::unique_ptr<CWinApp> application(new CWinApp()); //static std::unique_ptr<CWinApp> application(new CWinApp());
static list<float> resList = { 100.0,150.0,200.0,240.0,300.0 }; static list<float> resList = { 100.0,150.0,200.0,240.0,300.0 };
@ -408,15 +408,7 @@ Result HuagaoDs::eventProcess(const Identity&, Event& event) {
return { ReturnCode::NotDsEvent, ConditionCode::Success }; return { ReturnCode::NotDsEvent, ConditionCode::Success };
} }
//Result HuagaoDs::customDataSet(const Twpp::Identity& origin, Twpp::CustomData& data)
//{
// return Result();
//}
//Twpp::Result HuagaoDs::deviceEventGet(const Twpp::Identity & origin, Twpp::DeviceEvent & data)
//{
// data = DeviceEvent::simple(DeviceEvent::Type::PaperJam, Str255("HuaGo G200 Twain Device Error"));
// return success();
//}
//add------------------设置jpg图像dpi--------------------------- //add------------------设置jpg图像dpi---------------------------
void HuagaoDs::SetResoluton(const char* path, int resolution) void HuagaoDs::SetResoluton(const char* path, int resolution)
{ {
@ -453,7 +445,6 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
bmInfo.biBitCount = m_scanparam->pixtype == 2 ? 24 : (m_scanparam->pixtype == 1 ? 8 : 0); bmInfo.biBitCount = m_scanparam->pixtype == 2 ? 24 : (m_scanparam->pixtype == 1 ? 8 : 0);
m_iBitdepth = m_scanparam->pixtype == 2 ? 24 : (m_scanparam->pixtype == 1 ? 8 : 0); m_iBitdepth = m_scanparam->pixtype == 2 ? 24 : (m_scanparam->pixtype == 1 ? 8 : 0);
scanner->open(0x064B, 0x7823); scanner->open(0x064B, 0x7823);
//scanner->open(0x3072, 0x0100);
if (!scanner->IsConnected()) { if (!scanner->IsConnected()) {
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE); ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE);
@ -505,15 +496,14 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
if (item > 65535 || item < -1) { if (item > 65535 || item < -1) {
return badValue(); return badValue();
} }
m_capXferCount = item; m_scanparam->scannum = item;
m_scanparam->scannum = m_capXferCount;
return success(); return success();
} }
auto ret = oneValGetSet<Int16>(msg, data, m_capXferCount, -1); Int16 tmp_count = m_scanparam->scannum;
if (Twpp::success(ret) && m_capXferCount == 0) { auto ret = oneValGetSet<Int16>(msg, data, tmp_count, -1);
m_capXferCount = -1; if (!Twpp::success(ret) && m_scanparam->scannum == 0) {
m_scanparam->scannum = m_capXferCount; m_scanparam->scannum = -1;
return { ReturnCode::CheckStatus, ConditionCode::BadValue }; return { ReturnCode::CheckStatus, ConditionCode::BadValue };
} }
return ret; return ret;
@ -595,10 +585,10 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_caps[CapType::IPlanarChunky] = std::bind(enmGetSetConst<PlanarChunky>, _1, _2, PlanarChunky::Chunky); m_caps[CapType::IPlanarChunky] = std::bind(enmGetSetConst<PlanarChunky>, _1, _2, PlanarChunky::Chunky);
m_query[CapType::IPhysicalWidth] = msgSupportGetAll; m_query[CapType::IPhysicalWidth] = msgSupportGetAll;
m_caps[CapType::IPhysicalWidth] = std::bind(oneValGet<Fix32>, _1, _2, Fix32(static_cast<float>(header()->biWidth) / RESOLUTIONX)); m_caps[CapType::IPhysicalWidth] = std::bind(oneValGet<Fix32>, _1, _2, Fix32(static_cast<float>(header()->biWidth) / m_scanparam->resolution_dst));
m_query[CapType::IPhysicalHeight] = msgSupportGetAll; m_query[CapType::IPhysicalHeight] = msgSupportGetAll;
m_caps[CapType::IPhysicalHeight] = std::bind(oneValGet<Fix32>, _1, _2, Fix32(static_cast<float>(header()->biHeight) / RESOLUTIONX)); m_caps[CapType::IPhysicalHeight] = std::bind(oneValGet<Fix32>, _1, _2, Fix32(static_cast<float>(header()->biHeight) / m_scanparam->resolution_dst));
m_query[CapType::IPixelFlavor] = msgSupportGetAllSetReset; m_query[CapType::IPixelFlavor] = msgSupportGetAllSetReset;
m_caps[CapType::IPixelFlavor] = std::bind(enmGetSetConst<PixelFlavor>, _1, _2, PixelFlavor::Chocolate); m_caps[CapType::IPixelFlavor] = std::bind(enmGetSetConst<PixelFlavor>, _1, _2, PixelFlavor::Chocolate);
@ -999,6 +989,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_caps[CapType::DuplexEnabled] = [this](Msg msg, Capability& data) -> Result { m_caps[CapType::DuplexEnabled] = [this](Msg msg, Capability& data) -> Result {
switch (msg) { switch (msg) {
case Msg::Get: case Msg::Get:
//MessageBox(NULL, m_scanparam->is_duplex?TEXT("Get duplex"): TEXT("Get not duplex"), TEXT("aa"), MB_OK);
data = Capability::createEnumeration<CapType::DuplexEnabled>( data = Capability::createEnumeration<CapType::DuplexEnabled>(
{ Bool(), Bool(true) }, Bool(m_scanparam->is_duplex)); { Bool(), Bool(true) }, Bool(m_scanparam->is_duplex));
return success(); return success();
@ -1015,6 +1006,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Set: { case Msg::Set: {
auto mech = data.currentItem<CapType::DuplexEnabled>(); auto mech = data.currentItem<CapType::DuplexEnabled>();
m_scanparam->is_duplex = mech; m_scanparam->is_duplex = mech;
m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = m_scanparam->en_fold = 0;
if (!mech) if (!mech)
m_scanparam->is_backrotate180 = 0;//单面背面旋转180°不可用 m_scanparam->is_backrotate180 = 0;//单面背面旋转180°不可用
return success(); return success();
@ -1352,6 +1344,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
{ {
m_scanparam->is_duplex = 1; m_scanparam->is_duplex = 1;
m_scanparam->autodescrew = 1;//合并可用时 默认自动纠偏 m_scanparam->autodescrew = 1;//合并可用时 默认自动纠偏
m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = 0;
} }
return success(); return success();
} }
@ -1380,6 +1373,9 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Set: { case Msg::Set: {
auto mech = data.currentItem<CapType::IAutoDiscardBlankPages>(); auto mech = data.currentItem<CapType::IAutoDiscardBlankPages>();
m_scanparam->is_autodiscradblank_normal = (Int32)mech == (Int32)DiscardBlankPages::Auto; m_scanparam->is_autodiscradblank_normal = (Int32)mech == (Int32)DiscardBlankPages::Auto;
m_scanparam->is_duplex = 1;
m_scanparam->en_fold = 0;
m_scanparam->is_autodiscradblank_vince = 0;
return success(); return success();
} }
default: default:
@ -1406,6 +1402,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Set: { case Msg::Set: {
auto mech = data.currentItem<Bool>(); auto mech = data.currentItem<Bool>();
m_scanparam->is_autodiscradblank_vince = mech; m_scanparam->is_autodiscradblank_vince = mech;
m_scanparam->is_duplex = 1;
m_scanparam->en_fold = 0;
if (mech) if (mech)
m_scanparam->is_autodiscradblank_normal = 0; m_scanparam->is_autodiscradblank_normal = 0;
return success(); return success();
@ -1916,7 +1914,6 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
Result HuagaoDs::identityCloseDs(const Identity&) { Result HuagaoDs::identityCloseDs(const Identity&) {
// no need to explicitly release any resources if using RAII // no need to explicitly release any resources if using RAII
// TWPP will free the whole source on its own after this method // TWPP will free the whole source on its own after this method
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter");
if (guiIndicator.get()) if (guiIndicator.get())
guiIndicator.reset(); guiIndicator.reset();
@ -1926,10 +1923,8 @@ Result HuagaoDs::identityCloseDs(const Identity&) {
if (guiBridge.get()) if (guiBridge.get())
guiBridge.reset(); guiBridge.reset();
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter1");
scanner.reset(); scanner.reset();
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter2");
if (hMutex) if (hMutex)
{ {
@ -1937,7 +1932,6 @@ Result HuagaoDs::identityCloseDs(const Identity&) {
CloseHandle(hMutex); CloseHandle(hMutex);
} }
//saveGscanCapSetting(); //saveGscanCapSetting();
//FileTools::write_log("D:\\1.txt", "identityCloseDs exit");
return success(); return success();
} }
@ -1948,19 +1942,16 @@ Result HuagaoDs::pendingXfersGet(const Identity&, PendingXfers& data) {
Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) { Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
//!< end xfer if set count 0 //!< end xfer if set count 0
//FileTools::write_log("D:\\1.txt", "enter pendingXfersEnd");
if (bmpData.size() > 0) if (bmpData.size() > 0)
bmpData.clear(); bmpData.clear();
int ret = scanner->aquire_bmpdata(bmpData); int ret = scanner->aquire_bmpdata(bmpData);
//FileTools::write_log("D:\\1.txt", "enter pendingXfersEnd1");
if (ret != 0) { if (ret != 0) {
scanner->Set_ErrorCode(0); scanner->Set_ErrorCode(0);
guiIndicator->ShowWindow(SW_HIDE); if(guiIndicator.get())
guiIndicator->ShowWindow(SW_HIDE);
//guiIndicator.reset(); //guiIndicator.reset();
if (ret != -1) { if (ret != -1) {
//ShellExecute(NULL, _T("open"), _T("aa.exe"), CString("1"), _T(""), SW_HIDE);
//MessageBox(guiTwain ? guiTwain->m_hWnd : NULL, noticeMsgMap[ret], _T("Ìáʾ"), MB_SYSTEMMODAL | MB_OK | MB_ICONINFORMATION);//
CString str; CString str;
str.Format(_T("%d"), ret); str.Format(_T("%d"), ret);
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE); ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE);
@ -1981,7 +1972,6 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
#endif // LOG_NORMAL #endif // LOG_NORMAL
data.setCount(m_pendingXfers); data.setCount(m_pendingXfers);
//FileTools::write_log("D:\\1.txt", "exit pendingXfersEnd"+ m_pendingXfers==0?" 0":"1");
return success(); return success();
} }
@ -2025,7 +2015,6 @@ Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) {
m_pendingXfers = 1; m_pendingXfers = 1;
m_memXferYOff = 0; m_memXferYOff = 0;
scanner->ResetMsgFiter(); scanner->ResetMsgFiter();
//writelog("userInterfaceEnable");
if (!ui.showUi()) { if (!ui.showUi()) {
// this is an exception when we want to set state explicitly, notifyXferReady can be called only in enabled state // this is an exception when we want to set state explicitly, notifyXferReady can be called only in enabled state
// with hidden UI, the usual workflow DsState::Enabled -> notifyXferReady() -> DsState::XferReady is a single step // with hidden UI, the usual workflow DsState::Enabled -> notifyXferReady() -> DsState::XferReady is a single step
@ -2086,7 +2075,7 @@ Result HuagaoDs::imageLayoutGet(const Identity&, ImageLayout& data) {
data.setDocumentNumber(1); data.setDocumentNumber(1);
data.setFrameNumber(1); data.setFrameNumber(1);
data.setPageNumber(1); data.setPageNumber(1);
data.setFrame(Frame(0, 0, static_cast<float>(dib->biWidth) / RESOLUTIONX, static_cast<float>(dib->biHeight) / RESOLUTIONX)); data.setFrame(Frame(0, 0, static_cast<float>(dib->biWidth) / m_scanparam->resolution_dst, static_cast<float>(dib->biHeight) / m_scanparam->resolution_dst));
return success(); return success();
} }
@ -2262,12 +2251,11 @@ Twpp::Result HuagaoDs::imageFileXferGet(const Twpp::Identity& origin)
if (bmpData.size() > 0) { if (bmpData.size() > 0) {
fwrite(bmpData.data(), 1, bmpData.size(), pfile); fwrite(bmpData.data(), 1, bmpData.size(), pfile);
fclose(pfile); fclose(pfile);
return success(); return Result(ReturnCode::XferDone, ConditionCode::Success);
} }
} }
return Result(ReturnCode::Failure, ConditionCode::BadValue); return Result(ReturnCode::Failure, ConditionCode::BadValue);
} }
break;
case ImageFileFormat::Tiff: case ImageFileFormat::Tiff:
case ImageFileFormat::Jfif: { case ImageFileFormat::Jfif: {
@ -2285,9 +2273,8 @@ Twpp::Result HuagaoDs::imageFileXferGet(const Twpp::Identity& origin)
compression_params.push_back(m_jpegQuality); compression_params.push_back(m_jpegQuality);
cv::imwrite(filename, ims, compression_params); cv::imwrite(filename, ims, compression_params);
return success(); return Result(ReturnCode::XferDone, ConditionCode::Success);
} }
break;
default: default:
break; break;
} }
@ -2319,7 +2306,6 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
saveGscanCapSetting(); saveGscanCapSetting();
if (startScan() == success()) { if (startScan() == success()) {
notifyXferReady(); notifyXferReady();
//FileTools::write_log("E:\\Users\\huago\\Desktop\\1.txt", "notifyXferReady");
} }
else { else {
m_pendingXfers = 0; m_pendingXfers = 0;
@ -2346,6 +2332,9 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
std::string hardwareversion = scanner->GetFWVersion(); std::string hardwareversion = scanner->GetFWVersion();
guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "确定" : "扫描", hardwareversion, serialnum)); guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "确定" : "扫描", hardwareversion, serialnum));
guiTwain->Create(IDD_TWAINUI, parent); guiTwain->Create(IDD_TWAINUI, parent);
CRect newRect;
::GetWindowRect(static_cast<HWND>(ui.parent().raw()), &newRect);
SetWindowPos(guiTwain->m_hWnd, HWND_TOP, newRect.left + 20, newRect.top + 100, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOACTIVATE);
guiTwain->ShowWindow(SW_SHOWNORMAL); guiTwain->ShowWindow(SW_SHOWNORMAL);
return success(); return success();
} }
@ -2377,6 +2366,7 @@ void HuagaoDs::updataGscanCap()
GScanCap cfs = js.ReadGscanCap(); GScanCap cfs = js.ReadGscanCap();
cfs.resolution_native = 200.0f; cfs.resolution_native = 200.0f;
cfs.threshold = 128; cfs.threshold = 128;
//FileTools::write_log("D:\\2.txt", "is_autodiscradblank_normal = " + to_string(cfs.is_autodiscradblank_normal) + "is_autodiscradblank_vince =" + to_string(cfs.is_autodiscradblank_vince));
if (cfs.is_autocrop) if (cfs.is_autocrop)
{ {
m_autoboarderdetcet = true; m_autoboarderdetcet = true;
@ -2398,6 +2388,8 @@ Twpp::Result HuagaoDs::startScan()
#endif // #endif //
scanner->config_params(*m_scanparam); scanner->config_params(*m_scanparam);
//FileTools::write_log("D:\\2.txt", "is_autodiscradblank_normal = " + to_string(m_scanparam->is_autodiscradblank_normal) + " 222is_autodiscradblank_vince =" + to_string(m_scanparam->is_autodiscradblank_vince));
if (m_bIndicator) { if (m_bIndicator) {
//!< cancel button push //!< cancel button push
auto stopFunc = [this]() { auto stopFunc = [this]() {
@ -2422,7 +2414,8 @@ Twpp::Result HuagaoDs::startScan()
int retCode = scanner->aquire_bmpdata(bmpData); int retCode = scanner->aquire_bmpdata(bmpData);
if (retCode != 0) { if (retCode != 0) {
scanner->Set_ErrorCode(0); scanner->Set_ErrorCode(0);
guiIndicator.reset(); if(guiIndicator.get())
guiIndicator.reset();
if (retCode != -1) { if (retCode != -1) {
//MessageBox(guiTwain ? guiTwain->m_hWnd : NULL, noticeMsgMap[retCode], _T("提示"), MB_SYSTEMMODAL | MB_OK | MB_ICONINFORMATION); //MessageBox(guiTwain ? guiTwain->m_hWnd : NULL, noticeMsgMap[retCode], _T("提示"), MB_SYSTEMMODAL | MB_OK | MB_ICONINFORMATION);
CString str; CString str;
@ -2444,7 +2437,9 @@ Twpp::Result HuagaoDs::startScan()
return success(); return success();
} }
else { else {
guiIndicator.reset(); if(guiIndicator.get())
guiIndicator.reset();
if (guiTwain.get()) { if (guiTwain.get()) {
((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true); ((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true);
} }

View File

@ -98,7 +98,6 @@ private:
Twpp::UInt16 m_autosize = 0; Twpp::UInt16 m_autosize = 0;
Twpp::Bool m_autoscan = true; Twpp::Bool m_autoscan = true;
Twpp::Bool m_autoboarderdetcet = false; Twpp::Bool m_autoboarderdetcet = false;
Twpp::Int16 m_capXferCount = -1;
Twpp::Fix32 m_brightness = 0.0f; Twpp::Fix32 m_brightness = 0.0f;
Twpp::XferMech m_capXferMech = Twpp::XferMech::Native; Twpp::XferMech m_capXferMech = Twpp::XferMech::Native;
Twpp::PixelType m_capPixelType = Twpp::PixelType::Rgb; Twpp::PixelType m_capPixelType = Twpp::PixelType::Rgb;