1)修改json后,扫图默认上传原图大小的BUG

2)区分无纸与usb连接异常弹框
This commit is contained in:
masayume 2021-01-28 18:48:35 +08:00
parent 2ac13fdcc5
commit cdae53d794
7 changed files with 62 additions and 52 deletions

View File

@ -307,9 +307,14 @@ BOOL GScanO200::Get_Scanner_PaperOn()
return false; return false;
USBCB usbcb = { GET_PAPER_STATUS ,0,0 }; USBCB usbcb = { GET_PAPER_STATUS ,0,0 };
usbcb.u32_Data = 1;//修改初始值防止通信异常时默认初始值为0报无纸
std::lock_guard<std::mutex> lck(m_imgLocker); std::lock_guard<std::mutex> lck(m_imgLocker);
m_usb->write_bulk(&usbcb, sizeof(usbcb)); m_usb->write_bulk(&usbcb, sizeof(usbcb));
m_usb->read_bulk(&usbcb, sizeof(usbcb)); if (0 == m_usb->read_bulk(&usbcb, sizeof(usbcb)))
{
Set_ErrorCode(USB_DISCONNECTED);
return true;
}
return usbcb.u32_Data != 0; return usbcb.u32_Data != 0;
} }
@ -369,24 +374,23 @@ void GScanO200::Scanner_StartScan(UINT16 count)
default: default:
break; break;
} }
#ifndef G200 //#ifndef G200
//
// USBCB paperstatus = { GET_PAPER_STATUS ,0,0 };
// paperstatus.u32_Data = 1;
USBCB paperstatus = { GET_PAPER_STATUS ,0,0 }; // if (m_usb.get() && m_usb->is_connected())
if (m_usb.get() && m_usb->is_connected()) // m_usb->write_bulk(&paperstatus, sizeof(paperstatus));
m_usb->write_bulk(&paperstatus, sizeof(paperstatus)); // if (m_usb.get() && m_usb->is_connected())
if (m_usb.get() && m_usb->is_connected()) // m_usb->read_bulk(&paperstatus, sizeof(paperstatus));
m_usb->read_bulk(&paperstatus, sizeof(paperstatus)); // if (paperstatus.u32_Data == 0) {
if (paperstatus.u32_Data == 0) { // m_pImages->setscanflags(false);
m_pImages->setscanflags(false); // devState = DEV_WRONG;
devState = DEV_WRONG; // Set_ErrorCode(NO_FEED);
Set_ErrorCode(NO_FEED); // if (huagods)
if (huagods) // dev_callback(NO_FEED, huagods);
dev_callback(NO_FEED, huagods); // return;
return; // }
} //#endif // !G200
#endif // !G200
m_pImages->reset_DogEar(); m_pImages->reset_DogEar();
if (gcap.is_duplex) if (gcap.is_duplex)
count = count == 65535 ? 65535 : count / 2; count = count == 65535 ? 65535 : count / 2;

View File

@ -302,9 +302,14 @@ BOOL GScanO400::Get_Scanner_PaperOn()
return false; return false;
USBCB usbcb = { GET_PAPER_STATUS ,0,0 }; USBCB usbcb = { GET_PAPER_STATUS ,0,0 };
usbcb.u32_Data = 1;
std::lock_guard<std::mutex> lck(m_imgLocker); std::lock_guard<std::mutex> lck(m_imgLocker);
m_usb->write_bulk(&usbcb, sizeof(usbcb)); m_usb->write_bulk(&usbcb, sizeof(usbcb));
m_usb->read_bulk(&usbcb, sizeof(usbcb)); if (0 == m_usb->read_bulk(&usbcb, sizeof(usbcb)))
{
Set_ErrorCode(USB_DISCONNECTED);
return true;
}
return usbcb.u32_Data != 0; return usbcb.u32_Data != 0;
} }
@ -364,18 +369,21 @@ void GScanO400::Scanner_StartScan(UINT16 count)
default: default:
break; break;
} }
int readlenght = 0;
USBCB paperstatus = { GET_PAPER_STATUS ,0,0 }; USBCB paperstatus = { GET_PAPER_STATUS ,0,0 };
if (m_usb.get() && m_usb->is_connected()) if (m_usb.get() && m_usb->is_connected())
m_usb->write_bulk(&paperstatus, sizeof(paperstatus)); m_usb->write_bulk(&paperstatus, sizeof(paperstatus));
if (m_usb.get() && m_usb->is_connected()) if (m_usb.get() && m_usb->is_connected())
m_usb->read_bulk(&paperstatus, sizeof(paperstatus)); readlenght= m_usb->read_bulk(&paperstatus, sizeof(paperstatus));
if (paperstatus.u32_Data == 0) { if (paperstatus.u32_Data == 0) {
m_pImages->setscanflags(false); m_pImages->setscanflags(false);
devState = DEV_WRONG; devState = DEV_WRONG;
Set_ErrorCode(NO_FEED); int errorcode = 0;
readlenght == 0 ? errorcode = USB_DISCONNECTED : errorcode = NO_FEED;
Set_ErrorCode(errorcode);
if (huagods) if (huagods)
dev_callback(NO_FEED, huagods); dev_callback(errorcode, huagods);
return; return;
} }
m_pImages->reset_DogEar(); m_pImages->reset_DogEar();

View File

@ -728,7 +728,7 @@ json GscanJsonConfig::GscancapToJson(GScanCap& cap)
js[CONFIG][SCREWLEVEL] = cap.hardwarecaps.skrewdetectlevel; js[CONFIG][SCREWLEVEL] = cap.hardwarecaps.skrewdetectlevel;
js[CONFIG][NOISE] = cap.noise; js[CONFIG][NOISE] = cap.noise;
js[CONFIG][INDENT] = cap.indent; js[CONFIG][INDENT] = cap.indent;
js[CONFIG][AUTOCROP_THRESHOLD] = cap.indent; js[CONFIG][AUTOCROP_THRESHOLD] = cap.AutoCrop_threshold;
js[CONFIG][ISCONVEX] = cap.is_convex; js[CONFIG][ISCONVEX] = cap.is_convex;
js[CONFIG][ITEMCAPTION] = cap.Caption; js[CONFIG][ITEMCAPTION] = cap.Caption;
js[CONFIG][SAVEPATH] = cap.SavePath; js[CONFIG][SAVEPATH] = cap.SavePath;
@ -737,6 +737,7 @@ json GscanJsonConfig::GscancapToJson(GScanCap& cap)
GScanCap GscanJsonConfig::JsonToGscancap(json& js) GScanCap GscanJsonConfig::JsonToGscancap(json& js)
{ {
if (!js.is_object()) if (!js.is_object())
js = GetDefaultJson(); js = GetDefaultJson();
GScanCap cap{ 0 }; GScanCap cap{ 0 };
@ -844,8 +845,12 @@ json GscanJsonConfig::Readjson(std::string path)
f.open(path, std::ios::in); f.open(path, std::ios::in);
json js; json js;
try { try {
f.is_open() ? (js = json::parse(std::string((std::ostringstream()<<f.rdbuf()).str())),f.close()) : js=""; if(f.is_open()){
return js.is_object() ? throw std::exception("js pares error") : ""; std::string text = (std::ostringstream() << f.rdbuf()).str();
js = json::parse(text);
f.close();
}
return js.is_object() ? js: throw std::exception("js pares error");
} }
catch (...) catch (...)
{ {

View File

@ -673,7 +673,6 @@ void HuagaoDs::dogear_callback(int indexpaper)
Result HuagaoDs::identityOpenDs(const Identity&) { Result HuagaoDs::identityOpenDs(const Identity&) {
//writelog("identityOpenDs"); //writelog("identityOpenDs");
auto usblist= UsbScan_List::find_all_usb(); auto usblist= UsbScan_List::find_all_usb();
int pid,vid;
if (!usblist.empty()) if (!usblist.empty())
{ {
for each (auto &usb in usblist) for each (auto &usb in usblist)
@ -697,16 +696,16 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
} }
} }
#ifdef G100 #ifdef G100
if(usb.pid == 0x3072 && usb.vid == 0x100) if(usb.vid == 0x3072 && usb.pid == 0x100)
#endif // #endif //
#ifdef G200 #ifdef G200
if (usb.pid == 0x3072 && usb.vid == 0x200) if (usb.vid == 0x3072 && usb.pid == 0x200)
#endif // G200 #endif // G200
#ifdef G300 #ifdef G300
if (usb.pid == 0x3072 && usb.vid == 0x300) if (usb.vid == 0x3072 && usb.pid == 0x300)
#endif // G300 #endif // G300
#ifdef G400 #ifdef G400
if (usb.pid == 0x3072 && usb.vid == 0x400) if (usb.vid == 0x3072 && usb.pid == 0x400)
#endif // G400 #endif // G400
{ {
pid = usb.pid; vid = usb.vid; pid = usb.pid; vid = usb.vid;
@ -718,7 +717,11 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
} }
} }
} }
if (vid ==0|| pid == 0)
{
MessageBox(NULL, L"未找到扫描仪,请连接扫描仪!",L"警告",MB_OK);
return seqError();
}
m_haveError = false; m_haveError = false;
updataGscanCap(); updataGscanCap();
bmpData->resize(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)); bmpData->resize(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));
@ -1789,23 +1792,6 @@ Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) {
m_memXferYOff = 0; m_memXferYOff = 0;
scanner->ResetMsgFiter(); scanner->ResetMsgFiter();
//if (m_capXferMech == Twpp::XferMech::Native)
//{
// MessageBox(NULL, TEXT("Native"), _T("bb"), MB_OK);
//}
//else if (m_capXferMech == Twpp::XferMech::File)
//{
// MessageBox(NULL, TEXT("File"), _T("bb"), MB_OK);
//}
//else if (m_capXferMech == Twpp::XferMech::Memory)
//{
// MessageBox(NULL, TEXT("Memory"), _T("bb"), MB_OK);
//}
//else
//{
// MessageBox(NULL, TEXT("MemoryFile"), _T("bb"), MB_OK);
//}
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
@ -2147,6 +2133,12 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
m_pendingXfers = 1; m_pendingXfers = 1;
m_scanparam.reset(new GScanCap(caps)); m_scanparam.reset(new GScanCap(caps));
saveGscanCapSetting(); saveGscanCapSetting();
if (scanner->get_ErrorCode() == USB_DISCONNECTED)
{
MessageBox(NULL, L"USB连接异常,请连接USB后重新打开扫描软件", L"提示", MB_OK | MB_SYSTEMMODAL);
return;
}
if (startScan() == success()) { if (startScan() == success()) {
notifyXferReady(); notifyXferReady();
} }
@ -2251,7 +2243,7 @@ Twpp::Result HuagaoDs::startScan()
#ifdef LANXUM #ifdef LANXUM
scanner->open(0x31c9, 0x8200); scanner->open(0x31c9, 0x8200);
#else #else
scanner->open(0x064B, 0x7823); scanner->open(vid, pid);
#endif #endif
if (!scanner->IsConnected()) if (!scanner->IsConnected())
return checkDeviceOnline(); return checkDeviceOnline();

View File

@ -125,6 +125,7 @@ private://field
std::unique_ptr<std::thread> memoryinfo; std::unique_ptr<std::thread> memoryinfo;
bool m_memoryfalg = true; bool m_memoryfalg = true;
HANDLE hMutex; HANDLE hMutex;
int pid = 0, vid = 0;
}; };

Binary file not shown.

View File

@ -625,7 +625,6 @@ namespace Twpp {
if (!inState(DsState::Enabled, DsState::Xferring)) { if (!inState(DsState::Enabled, DsState::Xferring)) {
return seqError(); return seqError();
} }
return eventProcess(origin, data); return eventProcess(origin, data);
} }
@ -2151,6 +2150,7 @@ namespace Twpp {
/// TWAIN entry, do not call from data source. /// TWAIN entry, do not call from data source.
static ReturnCode entry(Identity* origin, DataGroup dg, Dat dat, Msg msg, void* data) noexcept { static ReturnCode entry(Identity* origin, DataGroup dg, Dat dat, Msg msg, void* data) noexcept {
auto src = find(origin); auto src = find(origin);
//FileTools::write_log("D:\\1.txt", "call:datagroup-" + to_string((int)dg) + "dat-" + to_string(int(dat)) + "msg-" + to_string(int(msg)));
try { try {
auto rc = src == g_sources.end() ? auto rc = src == g_sources.end() ?
staticControl(origin, dg, dat, msg, data) : staticControl(origin, dg, dat, msg, data) :