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
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 };
@ -408,15 +408,7 @@ Result HuagaoDs::eventProcess(const Identity&, Event& event) {
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---------------------------
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);
m_iBitdepth = m_scanparam->pixtype == 2 ? 24 : (m_scanparam->pixtype == 1 ? 8 : 0);
scanner->open(0x064B, 0x7823);
//scanner->open(0x3072, 0x0100);
if (!scanner->IsConnected()) {
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE);
@ -505,15 +496,14 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
if (item > 65535 || item < -1) {
return badValue();
}
m_capXferCount = item;
m_scanparam->scannum = m_capXferCount;
m_scanparam->scannum = item;
return success();
}
auto ret = oneValGetSet<Int16>(msg, data, m_capXferCount, -1);
if (Twpp::success(ret) && m_capXferCount == 0) {
m_capXferCount = -1;
m_scanparam->scannum = m_capXferCount;
Int16 tmp_count = m_scanparam->scannum;
auto ret = oneValGetSet<Int16>(msg, data, tmp_count, -1);
if (!Twpp::success(ret) && m_scanparam->scannum == 0) {
m_scanparam->scannum = -1;
return { ReturnCode::CheckStatus, ConditionCode::BadValue };
}
return ret;
@ -595,10 +585,10 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_caps[CapType::IPlanarChunky] = std::bind(enmGetSetConst<PlanarChunky>, _1, _2, PlanarChunky::Chunky);
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_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_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 {
switch (msg) {
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>(
{ Bool(), Bool(true) }, Bool(m_scanparam->is_duplex));
return success();
@ -1015,6 +1006,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Set: {
auto mech = data.currentItem<CapType::DuplexEnabled>();
m_scanparam->is_duplex = mech;
m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = m_scanparam->en_fold = 0;
if (!mech)
m_scanparam->is_backrotate180 = 0;//单面背面旋转180°不可用
return success();
@ -1352,6 +1344,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
{
m_scanparam->is_duplex = 1;
m_scanparam->autodescrew = 1;//合并可用时 默认自动纠偏
m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = 0;
}
return success();
}
@ -1380,6 +1373,9 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Set: {
auto mech = data.currentItem<CapType::IAutoDiscardBlankPages>();
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();
}
default:
@ -1406,6 +1402,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Set: {
auto mech = data.currentItem<Bool>();
m_scanparam->is_autodiscradblank_vince = mech;
m_scanparam->is_duplex = 1;
m_scanparam->en_fold = 0;
if (mech)
m_scanparam->is_autodiscradblank_normal = 0;
return success();
@ -1916,7 +1914,6 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
Result HuagaoDs::identityCloseDs(const Identity&) {
// no need to explicitly release any resources if using RAII
// TWPP will free the whole source on its own after this method
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter");
if (guiIndicator.get())
guiIndicator.reset();
@ -1926,10 +1923,8 @@ Result HuagaoDs::identityCloseDs(const Identity&) {
if (guiBridge.get())
guiBridge.reset();
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter1");
scanner.reset();
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter2");
if (hMutex)
{
@ -1937,7 +1932,6 @@ Result HuagaoDs::identityCloseDs(const Identity&) {
CloseHandle(hMutex);
}
//saveGscanCapSetting();
//FileTools::write_log("D:\\1.txt", "identityCloseDs exit");
return success();
}
@ -1948,19 +1942,16 @@ Result HuagaoDs::pendingXfersGet(const Identity&, PendingXfers& data) {
Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
//!< end xfer if set count 0
//FileTools::write_log("D:\\1.txt", "enter pendingXfersEnd");
if (bmpData.size() > 0)
bmpData.clear();
int ret = scanner->aquire_bmpdata(bmpData);
//FileTools::write_log("D:\\1.txt", "enter pendingXfersEnd1");
if (ret != 0) {
scanner->Set_ErrorCode(0);
if(guiIndicator.get())
guiIndicator->ShowWindow(SW_HIDE);
//guiIndicator.reset();
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;
str.Format(_T("%d"), ret);
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE);
@ -1981,7 +1972,6 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
#endif // LOG_NORMAL
data.setCount(m_pendingXfers);
//FileTools::write_log("D:\\1.txt", "exit pendingXfersEnd"+ m_pendingXfers==0?" 0":"1");
return success();
}
@ -2025,7 +2015,6 @@ Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) {
m_pendingXfers = 1;
m_memXferYOff = 0;
scanner->ResetMsgFiter();
//writelog("userInterfaceEnable");
if (!ui.showUi()) {
// 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
@ -2086,7 +2075,7 @@ Result HuagaoDs::imageLayoutGet(const Identity&, ImageLayout& data) {
data.setDocumentNumber(1);
data.setFrameNumber(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();
}
@ -2262,12 +2251,11 @@ Twpp::Result HuagaoDs::imageFileXferGet(const Twpp::Identity& origin)
if (bmpData.size() > 0) {
fwrite(bmpData.data(), 1, bmpData.size(), pfile);
fclose(pfile);
return success();
return Result(ReturnCode::XferDone, ConditionCode::Success);
}
}
return Result(ReturnCode::Failure, ConditionCode::BadValue);
}
break;
case ImageFileFormat::Tiff:
case ImageFileFormat::Jfif: {
@ -2285,9 +2273,8 @@ Twpp::Result HuagaoDs::imageFileXferGet(const Twpp::Identity& origin)
compression_params.push_back(m_jpegQuality);
cv::imwrite(filename, ims, compression_params);
return success();
return Result(ReturnCode::XferDone, ConditionCode::Success);
}
break;
default:
break;
}
@ -2319,7 +2306,6 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
saveGscanCapSetting();
if (startScan() == success()) {
notifyXferReady();
//FileTools::write_log("E:\\Users\\huago\\Desktop\\1.txt", "notifyXferReady");
}
else {
m_pendingXfers = 0;
@ -2346,6 +2332,9 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
std::string hardwareversion = scanner->GetFWVersion();
guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "确定" : "扫描", hardwareversion, serialnum));
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);
return success();
}
@ -2377,6 +2366,7 @@ void HuagaoDs::updataGscanCap()
GScanCap cfs = js.ReadGscanCap();
cfs.resolution_native = 200.0f;
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)
{
m_autoboarderdetcet = true;
@ -2398,6 +2388,8 @@ Twpp::Result HuagaoDs::startScan()
#endif //
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) {
//!< cancel button push
auto stopFunc = [this]() {
@ -2422,6 +2414,7 @@ Twpp::Result HuagaoDs::startScan()
int retCode = scanner->aquire_bmpdata(bmpData);
if (retCode != 0) {
scanner->Set_ErrorCode(0);
if(guiIndicator.get())
guiIndicator.reset();
if (retCode != -1) {
//MessageBox(guiTwain ? guiTwain->m_hWnd : NULL, noticeMsgMap[retCode], _T("提示"), MB_SYSTEMMODAL | MB_OK | MB_ICONINFORMATION);
@ -2444,7 +2437,9 @@ Twpp::Result HuagaoDs::startScan()
return success();
}
else {
if(guiIndicator.get())
guiIndicator.reset();
if (guiTwain.get()) {
((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true);
}

View File

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