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

View File

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

View File

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

View File

@ -673,7 +673,6 @@ void HuagaoDs::dogear_callback(int indexpaper)
Result HuagaoDs::identityOpenDs(const Identity&) {
//writelog("identityOpenDs");
auto usblist= UsbScan_List::find_all_usb();
int pid,vid;
if (!usblist.empty())
{
for each (auto &usb in usblist)
@ -697,16 +696,16 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
}
}
#ifdef G100
if(usb.pid == 0x3072 && usb.vid == 0x100)
if(usb.vid == 0x3072 && usb.pid == 0x100)
#endif //
#ifdef G200
if (usb.pid == 0x3072 && usb.vid == 0x200)
if (usb.vid == 0x3072 && usb.pid == 0x200)
#endif // G200
#ifdef G300
if (usb.pid == 0x3072 && usb.vid == 0x300)
if (usb.vid == 0x3072 && usb.pid == 0x300)
#endif // G300
#ifdef G400
if (usb.pid == 0x3072 && usb.vid == 0x400)
if (usb.vid == 0x3072 && usb.pid == 0x400)
#endif // G400
{
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;
updataGscanCap();
bmpData->resize(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));
@ -1789,23 +1792,6 @@ Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) {
m_memXferYOff = 0;
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()) {
// 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_scanparam.reset(new GScanCap(caps));
saveGscanCapSetting();
if (scanner->get_ErrorCode() == USB_DISCONNECTED)
{
MessageBox(NULL, L"USB连接异常,请连接USB后重新打开扫描软件", L"提示", MB_OK | MB_SYSTEMMODAL);
return;
}
if (startScan() == success()) {
notifyXferReady();
}
@ -2251,7 +2243,7 @@ Twpp::Result HuagaoDs::startScan()
#ifdef LANXUM
scanner->open(0x31c9, 0x8200);
#else
scanner->open(0x064B, 0x7823);
scanner->open(vid, pid);
#endif
if (!scanner->IsConnected())
return checkDeviceOnline();

View File

@ -125,6 +125,7 @@ private://field
std::unique_ptr<std::thread> memoryinfo;
bool m_memoryfalg = true;
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)) {
return seqError();
}
return eventProcess(origin, data);
}
@ -2151,6 +2150,7 @@ namespace Twpp {
/// TWAIN entry, do not call from data source.
static ReturnCode entry(Identity* origin, DataGroup dg, Dat dat, Msg msg, void* data) noexcept {
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 {
auto rc = src == g_sources.end() ?
staticControl(origin, dg, dat, msg, data) :