解决sane调用的编译问题

This commit is contained in:
luoliangyi 2023-05-20 18:06:05 +08:00
parent 6935a1be37
commit e502236caa
12 changed files with 146 additions and 395 deletions

View File

@ -63,12 +63,7 @@ void HGAPI DeviceUser::DSEventFunc(HGTwainDS ds, HGUInt event, HGPointer param)
void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param) void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
{ {
DeviceUser* p = (DeviceUser*)param; DeviceUser* p = (DeviceUser*)param;
HGImage image2 = nullptr; emit p->newImage(image);
HGBase_CloneImage(image, 0, 0, &image2);
if (nullptr != image2)
{
emit p->newImage(image2);
}
} }
#else #else
@ -161,12 +156,7 @@ HGResult DeviceUser::StartScan()
void HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param) void HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param)
{ {
DeviceUser* p = (DeviceUser*)param; DeviceUser* p = (DeviceUser*)param;
HGImage image2 = nullptr; emit p->newImage(image);
HGBase_CloneImage(image, 0, 0, &image2);
if (nullptr != image2)
{
emit p->newImage(image2);
}
} }
#endif #endif

View File

@ -92,6 +92,7 @@ private:
signals: signals:
void newImage(void *image); void newImage(void *image);
void scanEvent(HGUInt event);
private: private:
QWidget *m_wnd; QWidget *m_wnd;

View File

@ -40,7 +40,6 @@ void MainWindow::on_newImage(void *image)
char fileName[256]; char fileName[256];
sprintf(fileName, "D:\\test_%d.jpg", i++); sprintf(fileName, "D:\\test_%d.jpg", i++);
HGImgFmt_SaveImage((HGImage)image, 0, NULL, fileName); HGImgFmt_SaveImage((HGImage)image, 0, NULL, fileName);
HGBase_DestroyImage((HGImage)image);
} }
void MainWindow::on_scanEvent(HGUInt event) void MainWindow::on_scanEvent(HGUInt event)

View File

@ -64,11 +64,6 @@ HGResult DeviceUser::StartSingleScan()
return HGTwain_EnableDSWithSingleScan(m_twainDS, (HWND)m_wnd->winId(), DSEventFunc, this, DSImageFunc, this); return HGTwain_EnableDSWithSingleScan(m_twainDS, (HWND)m_wnd->winId(), DSEventFunc, this, DSImageFunc, this);
} }
HGResult DeviceUser::StopScan()
{
return HGTwain_DisableDS(m_twainDS);
}
HGResult DeviceUser::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info) HGResult DeviceUser::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info)
{ {
return HGTwain_GetDSDeviceCustomInfo(m_twainDS, info); return HGTwain_GetDSDeviceCustomInfo(m_twainDS, info);
@ -220,17 +215,12 @@ HGResult DeviceUser::StartScan()
return HGSane_StartDeviceWithUI(m_saneDev, m_wnd, DeviceImageFunc, this); return HGSane_StartDeviceWithUI(m_saneDev, m_wnd, DeviceImageFunc, this);
} }
HGResult DeviceUser::StartSingleScan(); HGResult DeviceUser::StartSingleScan()
{ {
return HGSane_StartDeviceWithSingleScan(m_saneDev, m_wnd, DeviceImageFunc, this); return HGSane_StartDeviceWithSingleScan(m_saneDev, m_wnd, DeviceImageFunc, this);
} }
HGResult DeviceUser::StopScan() HGResult DeviceUser::GetDeviceCustomInfo(HGSaneDeviceCustomInfo *info)
{
return HGSane_StopDevice(m_saneDev);
}
HGResult DeviceUser::GetDeviceCustomInfo(HGSaneCustomInfo *info)
{ {
return HGSane_GetDeviceCustomInfo(m_saneDev, info); return HGSane_GetDeviceCustomInfo(m_saneDev, info);
} }
@ -250,11 +240,14 @@ HGResult DeviceUser::ClearRollerCount()
return HGSane_ClearRollerCount(m_saneDev); return HGSane_ClearRollerCount(m_saneDev);
} }
QString DeviceUser::GetDriverLogPath() QString DeviceUser::GetDriverLog()
{ {
HGChar driverLogPath[256]; QString fileName = QFileDialog::getSaveFileName(m_wnd, tr("Select log file path"), ".", tr("text(*.txt)"));
HGSane_GetDriverLogPath(m_saneDev, driverLogPath, 256); HGResult ret = HGSane_GetDriverLog(m_saneDev, fileName.toStdString().c_str());
return getStdFileName(driverLogPath); if (ret == HGBASE_ERR_OK)
return fileName;
return "Fail";
} }
HGResult DeviceUser::ClearDriverLog() HGResult DeviceUser::ClearDriverLog()
@ -262,11 +255,14 @@ HGResult DeviceUser::ClearDriverLog()
return HGSane_ClearDriverLog(m_saneDev); return HGSane_ClearDriverLog(m_saneDev);
} }
QString DeviceUser::GetDeviceLogPath() QString DeviceUser::GetDeviceLog()
{ {
HGChar deviceLogPath[256]; QString fileName = QFileDialog::getSaveFileName(m_wnd, tr("Select log file path"), ".", tr("text(*.txt)"));
HGSane_GetDeviceLogPath(m_saneDev, deviceLogPath, 256); HGResult ret = HGSane_GetDeviceLog(m_saneDev, fileName.toStdString().c_str());
return getStdFileName(deviceLogPath); if (ret == HGBASE_ERR_OK)
return fileName;
return "Fail";
} }
HGResult DeviceUser::ClearDeviceLog() HGResult DeviceUser::ClearDeviceLog()

View File

@ -40,7 +40,6 @@ public:
// 弹出扫描对话框 // 弹出扫描对话框
HGResult StartScan(); HGResult StartScan();
HGResult StartSingleScan(); HGResult StartSingleScan();
HGResult StopScan();
HGResult GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info); HGResult GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info);
HGResult Login(); HGResult Login();
HGResult Logout(); HGResult Logout();
@ -100,14 +99,13 @@ public:
// 弹出扫描对话框 // 弹出扫描对话框
HGResult StartScan(); HGResult StartScan();
HGResult StartSingleScan(); HGResult StartSingleScan();
HGResult StopScan(); HGResult GetDeviceCustomInfo(HGSaneDeviceCustomInfo *info);
HGResult GetDeviceCustomInfo(HGSaneCustomInfo *info);
HGResult Login(); HGResult Login();
HGResult Logout(); HGResult Logout();
HGResult ClearRollerCount(); HGResult ClearRollerCount();
QString GetDriverLogPath(); QString GetDriverLog();
HGResult ClearDriverLog(); HGResult ClearDriverLog();
QString GetDeviceLogPath(); QString GetDeviceLog();
HGResult ClearDeviceLog(); HGResult ClearDeviceLog();
private: private:
@ -115,6 +113,7 @@ private:
signals: signals:
void newImage(void *image); void newImage(void *image);
void scanEvent(HGUInt event);
private: private:
QWidget *m_wnd; QWidget *m_wnd;

View File

@ -1200,12 +1200,12 @@ void MainWindow::on_newImage(void *image)
void MainWindow::on_scanEvent(HGUInt event) void MainWindow::on_scanEvent(HGUInt event)
{ {
if (HGTWAIN_EVENT_TYPE_WORKING == event) if (1 == event)
{ {
m_isScanning = true; m_isScanning = true;
updateActionStatus(); updateActionStatus();
} }
else if (HGTWAIN_EVENT_TYPE_SCANFINISHED == event) else if (2 == event)
{ {
m_isScanning = false; m_isScanning = false;
updateActionStatus(); updateActionStatus();
@ -2832,7 +2832,7 @@ void MainWindow::on_act_about_triggered()
HGTwainDeviceCustomInfo info; HGTwainDeviceCustomInfo info;
m_devUser->GetDeviceCustomInfo(&info); m_devUser->GetDeviceCustomInfo(&info);
#else #else
HGSaneCustomInfo info; HGSaneDeviceCustomInfo info;
m_devUser->GetDeviceCustomInfo(&info); m_devUser->GetDeviceCustomInfo(&info);
#endif #endif

View File

@ -31,15 +31,6 @@ CONFIG(release, debug|release) {
win32 { win32 {
SOURCES += ../../../modules/saneui/qmfcapp.cpp
SOURCES += ../../../modules/saneui/qwinhost.cpp
SOURCES += ../../../modules/saneui/qwinwidget.cpp
HEADERS += ../../../modules/saneui/qmfcapp.hpp
HEADERS += ../../../modules/saneui/qwinhost.hpp
HEADERS += ../../../modules/saneui/qwinwidget.hpp
MY_OS = windows MY_OS = windows
TARGET = $${OEM_PREFIX}SaneUI TARGET = $${OEM_PREFIX}SaneUI
@ -64,6 +55,59 @@ win32 {
unix { unix {
SOURCES += \
../../../modules/saneui/HGSaneUI.cpp \
../../../modules/saneui/cfg/cJSON.c \
../../../modules/saneui/cfg/gb_json.cpp \
../../../modules/saneui/cutdialog.cpp \
../../../modules/saneui/cutpapertool.cpp \
../../../modules/saneui/device_menu.cpp \
../../../modules/saneui/dialog_device_scan.cpp \
../../../modules/saneui/dialog_device_select.cpp \
../../../modules/saneui/dialog_input.cpp \
../../../modules/saneui/dllmain.cpp \
../../../modules/saneui/gaosixy.cpp \
../../../modules/saneui/hg_settingdialog.cpp \
../../../modules/saneui/setpicclrtool.cpp \
../../../modules/saneui/widget.cpp \
../../../utility/HGString.cpp \
../../../modules/saneui/dialog_source_select.cpp
HEADERS += \
../../../modules/saneui/HGSaneUI.h \
../../../modules/saneui/cfg/cJSON.h \
../../../modules/saneui/cfg/gb_json.h \
../../../modules/saneui/cutdialog.h \
../../../modules/saneui/cutpapertool.h \
../../../modules/saneui/device_menu.h \
../../../modules/saneui/dialog_device_scan.h \
../../../modules/saneui/dialog_device_select.h \
../../../modules/saneui/dialog_input.h \
../../../modules/saneui/gaosixy.h \
../../../modules/saneui/hg_settingdialog.h \
../../../modules/saneui/setpicclrtool.h \
../../../modules/saneui/widget.h \
../../../utility/HGString.h \
../../../modules/saneui/dialog_source_select.h
FORMS += \
../../../modules/saneui/cutdialog.ui \
../../../modules/saneui/cutpapertool.ui \
../../../modules/saneui/dialog_device_scan.ui \
../../../modules/saneui/dialog_device_select.ui \
../../../modules/saneui/dialog_input.ui \
../../../modules/saneui/setpicclrtool.ui \
../../../modules/saneui/widget.ui \
../../../modules/saneui/dialog_source_select.ui
RESOURCES += \
../../../modules/saneui/SaneUI_resource.qrc
TRANSLATIONS += \
../../../modules/saneui/SaneUI_zh_CN.ts \
../../../modules/saneui/SaneUI_zh_EN.ts \
../../../modules/saneui/qt_zh_CN.ts
DISTRIBUTION = $$system(cat /etc/issue | cut -d\' \' -f1) DISTRIBUTION = $$system(cat /etc/issue | cut -d\' \' -f1)
contains(DISTRIBUTION, UnionTech) { contains(DISTRIBUTION, UnionTech) {
MY_OS = uos MY_OS = uos
@ -140,56 +184,3 @@ unix {
QMAKE_POST_LINK += cp $$SRCDLL_FILE $$DESTDLL_PATH && cp $$SRCHEADER_FILE $$DESTHEADER_PATH QMAKE_POST_LINK += cp $$SRCDLL_FILE $$DESTDLL_PATH && cp $$SRCHEADER_FILE $$DESTHEADER_PATH
} }
} }
SOURCES += \
../../../modules/saneui/HGSaneUI.cpp \
../../../modules/saneui/cfg/cJSON.c \
../../../modules/saneui/cfg/gb_json.cpp \
../../../modules/saneui/cutdialog.cpp \
../../../modules/saneui/cutpapertool.cpp \
../../../modules/saneui/device_menu.cpp \
../../../modules/saneui/dialog_device_scan.cpp \
../../../modules/saneui/dialog_device_select.cpp \
../../../modules/saneui/dialog_input.cpp \
../../../modules/saneui/dllmain.cpp \
../../../modules/saneui/gaosixy.cpp \
../../../modules/saneui/hg_settingdialog.cpp \
../../../modules/saneui/setpicclrtool.cpp \
../../../modules/saneui/widget.cpp \
../../../utility/HGString.cpp \
../../../modules/saneui/dialog_source_select.cpp
HEADERS += \
../../../modules/saneui/HGSaneUI.h \
../../../modules/saneui/cfg/cJSON.h \
../../../modules/saneui/cfg/gb_json.h \
../../../modules/saneui/cutdialog.h \
../../../modules/saneui/cutpapertool.h \
../../../modules/saneui/device_menu.h \
../../../modules/saneui/dialog_device_scan.h \
../../../modules/saneui/dialog_device_select.h \
../../../modules/saneui/dialog_input.h \
../../../modules/saneui/gaosixy.h \
../../../modules/saneui/hg_settingdialog.h \
../../../modules/saneui/setpicclrtool.h \
../../../modules/saneui/widget.h \
../../../utility/HGString.h \
../../../modules/saneui/dialog_source_select.h
FORMS += \
../../../modules/saneui/cutdialog.ui \
../../../modules/saneui/cutpapertool.ui \
../../../modules/saneui/dialog_device_scan.ui \
../../../modules/saneui/dialog_device_select.ui \
../../../modules/saneui/dialog_input.ui \
../../../modules/saneui/setpicclrtool.ui \
../../../modules/saneui/widget.ui \
../../../modules/saneui/dialog_source_select.ui
RESOURCES += \
../../../modules/saneui/SaneUI_resource.qrc
TRANSLATIONS += \
../../../modules/saneui/SaneUI_zh_CN.ts \
../../../modules/saneui/SaneUI_zh_EN.ts \
../../../modules/saneui/qt_zh_CN.ts

View File

@ -41,6 +41,56 @@ win32 {
HEADERS += ../../../modules/twainui/qwinhost.hpp HEADERS += ../../../modules/twainui/qwinhost.hpp
HEADERS += ../../../modules/twainui/qwinwidget.hpp HEADERS += ../../../modules/twainui/qwinwidget.hpp
HEADERS += ../../../modules/twainui/hg_settingdialog.h HEADERS += ../../../modules/twainui/hg_settingdialog.h
SOURCES += \
../../../modules/twainui/Manager.cpp \
../../../modules/twainui/cfg/cJSON.c \
../../../modules/twainui/cfg/gb_json.cpp \
../../../modules/twainui/cutdialog.cpp \
../../../modules/twainui/cutpapertool.cpp \
../../../modules/twainui/device_menu.cpp \
../../../modules/twainui/dialog_input.cpp \
../../../modules/twainui/dllmain.cpp \
../../../modules/twainui/gaosixy.cpp \
../../../modules/twainui/setpicclrtool.cpp \
../../../utility/HGString.cpp \
../../../modules/twainui/widget.cpp \
../../../modules/twainui/dialog_progress_ui.cpp \
../../../modules/twainui/dialog_device_select.cpp \
../../../modules/twainui/dialog_twain_source_select.cpp
HEADERS += \
../../../modules/twainui/Manager.h \
../../../modules/twainui/cfg/cJSON.h \
../../../modules/twainui/cfg/gb_json.h \
../../../modules/twainui/cutdialog.h \
../../../modules/twainui/cutpapertool.h \
../../../modules/twainui/device_menu.h \
../../../modules/twainui/dialog_input.h \
../../../modules/twainui/gaosixy.h \
../../../modules/twainui/setpicclrtool.h \
../../../utility/HGString.h \
../../../modules/twainui/widget.h \
../../../modules/twainui/dialog_progress_ui.h \
../../../modules/twainui/dialog_device_select.h \
../../../modules/twainui/dialog_twain_source_select.h
FORMS += \
../../../modules/twainui/cutdialog.ui \
../../../modules/twainui/cutpapertool.ui \
../../../modules/twainui/dialog_input.ui \
../../../modules/twainui/setpicclrtool.ui \
../../../modules/twainui/widget.ui \
../../../modules/twainui/dialog_progress_ui.ui \
../../../modules/twainui/dialog_device_select.ui \
../../../modules/twainui/dialog_twain_source_select.ui
RESOURCES += \
../../../modules/twainui/TwainUI_resource.qrc
TRANSLATIONS += \
../../../modules/twainui/TwainUI_zh_CN.ts \
../../../modules/twainui/TwainUI_zh_EN.ts \
../../../modules/twainui/qt_zh_CN.ts
MY_OS = windows MY_OS = windows
TARGET = $${OEM_PREFIX}TwainUI TARGET = $${OEM_PREFIX}TwainUI
@ -151,53 +201,3 @@ win32 {
&& xcopy /y $$SRCPDB_FILE $$DESTDLL_PATH && xcopy /y $$SRCPDB_FILE $$DESTDLL_PATH
} }
} }
SOURCES += \
../../../modules/twainui/Manager.cpp \
../../../modules/twainui/cfg/cJSON.c \
../../../modules/twainui/cfg/gb_json.cpp \
../../../modules/twainui/cutdialog.cpp \
../../../modules/twainui/cutpapertool.cpp \
../../../modules/twainui/device_menu.cpp \
../../../modules/twainui/dialog_input.cpp \
../../../modules/twainui/dllmain.cpp \
../../../modules/twainui/gaosixy.cpp \
../../../modules/twainui/setpicclrtool.cpp \
../../../utility/HGString.cpp \
../../../modules/twainui/widget.cpp \
../../../modules/twainui/dialog_progress_ui.cpp \
../../../modules/twainui/dialog_device_select.cpp \
../../../modules/twainui/dialog_twain_source_select.cpp
HEADERS += \
../../../modules/twainui/Manager.h \
../../../modules/twainui/cfg/cJSON.h \
../../../modules/twainui/cfg/gb_json.h \
../../../modules/twainui/cutdialog.h \
../../../modules/twainui/cutpapertool.h \
../../../modules/twainui/device_menu.h \
../../../modules/twainui/dialog_input.h \
../../../modules/twainui/gaosixy.h \
../../../modules/twainui/setpicclrtool.h \
../../../utility/HGString.h \
../../../modules/twainui/widget.h \
../../../modules/twainui/dialog_progress_ui.h \
../../../modules/twainui/dialog_device_select.h \
../../../modules/twainui/dialog_twain_source_select.h
FORMS += \
../../../modules/twainui/cutdialog.ui \
../../../modules/twainui/cutpapertool.ui \
../../../modules/twainui/dialog_input.ui \
../../../modules/twainui/setpicclrtool.ui \
../../../modules/twainui/widget.ui \
../../../modules/twainui/dialog_progress_ui.ui \
../../../modules/twainui/dialog_device_select.ui \
../../../modules/twainui/dialog_twain_source_select.ui
RESOURCES += \
../../../modules/twainui/TwainUI_resource.qrc
TRANSLATIONS += \
../../../modules/twainui/TwainUI_zh_CN.ts \
../../../modules/twainui/TwainUI_zh_EN.ts \
../../../modules/twainui/qt_zh_CN.ts

View File

@ -257,7 +257,7 @@ HGResult HGAPI HGSane_ClearRollerCount(HGSaneDevice dev)
return saneDeviceImpl->ClearRollerCount(); return saneDeviceImpl->ClearRollerCount();
} }
HGResult HGAPI HGSane_GetDriverLogPath(HGSaneDevice dev, HGChar *path, HGUInt maxLen) HGResult HGAPI HGSane_GetDriverLog(HGSaneDevice dev, const HGChar *fileName)
{ {
if (NULL == dev) if (NULL == dev)
{ {
@ -265,7 +265,7 @@ HGResult HGAPI HGSane_GetDriverLogPath(HGSaneDevice dev, HGChar *path, HGUInt ma
} }
HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev; HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev;
return saneDeviceImpl->GetDriverLogPath(path, maxLen); return saneDeviceImpl->GetDriverLog(fileName);
} }
HGResult HGAPI HGSane_ClearDriverLog(HGSaneDevice dev) HGResult HGAPI HGSane_ClearDriverLog(HGSaneDevice dev)
@ -279,7 +279,7 @@ HGResult HGAPI HGSane_ClearDriverLog(HGSaneDevice dev)
return saneDeviceImpl->ClearDriverLog(); return saneDeviceImpl->ClearDriverLog();
} }
HGResult HGAPI HGSane_GetDeviceLogPath(HGSaneDevice dev, HGChar *path, HGUInt maxLen) HGResult HGAPI HGSane_GetDeviceLog(HGSaneDevice dev, const HGChar *fileName)
{ {
if (NULL == dev) if (NULL == dev)
{ {
@ -287,7 +287,7 @@ HGResult HGAPI HGSane_GetDeviceLogPath(HGSaneDevice dev, HGChar *path, HGUInt ma
} }
HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev; HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev;
return saneDeviceImpl->GetDeviceLogPath(path, maxLen); return saneDeviceImpl->GetDeviceLog(fileName);
} }
HGResult HGAPI HGSane_ClearDeviceLog(HGSaneDevice dev) HGResult HGAPI HGSane_ClearDeviceLog(HGSaneDevice dev)
@ -301,29 +301,6 @@ HGResult HGAPI HGSane_ClearDeviceLog(HGSaneDevice dev)
return saneDeviceImpl->ClearDeviceLog(); return saneDeviceImpl->ClearDeviceLog();
} }
HGResult HGAPI HGSane_StartDevice(HGSaneDevice dev, HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
HGSane_DeviceImageFunc imageFunc, HGPointer imageParam, HGChar* errInfo, HGUInt errInfoLen)
{
if (NULL == dev)
{
return HGBASE_ERR_INVALIDARG;
}
HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev;
return saneDeviceImpl->Start(eventFunc, eventParam, imageFunc, imageParam, errInfo, errInfoLen);
}
HGResult HGAPI HGSane_StopDevice(HGSaneDevice dev)
{
if (NULL == dev)
{
return HGBASE_ERR_INVALIDARG;
}
HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev;
return saneDeviceImpl->Stop();
}
HGResult HGAPI HGSane_StartDeviceWithUI(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam) HGResult HGAPI HGSane_StartDeviceWithUI(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam)
{ {
if (NULL == dev) if (NULL == dev)

View File

@ -36,9 +36,12 @@ typedef struct
#pragma pack(pop) #pragma pack(pop)
#define HGSANE_EVENT_TYPE_WORKING 1L
#define HGSANE_EVENT_TYPE_SCANFINISHED 2L
/* Sane回调 /* Sane回调
*/ */
typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt error, const HGChar *errInfo, HGPointer param); typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt event, HGPointer param);
typedef void (HGAPI* HGSane_DeviceImageFunc)(HGSaneDevice dev, HGImage image, HGPointer param); typedef void (HGAPI* HGSane_DeviceImageFunc)(HGSaneDevice dev, HGImage image, HGPointer param);
HGEXPORT HGResult HGAPI HGSane_CreateManager(HGSaneManager *manager); HGEXPORT HGResult HGAPI HGSane_CreateManager(HGSaneManager *manager);
@ -79,19 +82,14 @@ HGEXPORT HGResult HGAPI HGSane_Logout(HGSaneDevice dev);
HGEXPORT HGResult HGAPI HGSane_ClearRollerCount(HGSaneDevice dev); HGEXPORT HGResult HGAPI HGSane_ClearRollerCount(HGSaneDevice dev);
HGEXPORT HGResult HGAPI HGSane_GetDriverLogPath(HGSaneDevice dev, HGChar *path, HGUInt maxLen); HGEXPORT HGResult HGAPI HGSane_GetDriverLog(HGSaneDevice dev, const HGChar *fileName);
HGEXPORT HGResult HGAPI HGSane_ClearDriverLog(HGSaneDevice dev); HGEXPORT HGResult HGAPI HGSane_ClearDriverLog(HGSaneDevice dev);
HGEXPORT HGResult HGAPI HGSane_GetDeviceLogPath(HGSaneDevice dev, HGChar *path, HGUInt maxLen); HGEXPORT HGResult HGAPI HGSane_GetDeviceLog(HGSaneDevice dev, const HGChar *fileName);
HGEXPORT HGResult HGAPI HGSane_ClearDeviceLog(HGSaneDevice dev); HGEXPORT HGResult HGAPI HGSane_ClearDeviceLog(HGSaneDevice dev);
HGEXPORT HGResult HGAPI HGSane_StartDevice(HGSaneDevice dev, HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
HGSane_DeviceImageFunc imageFunc, HGPointer imageParam, HGChar* errInfo, HGUInt errInfoLen);
HGEXPORT HGResult HGAPI HGSane_StopDevice(HGSaneDevice dev);
HGEXPORT HGResult HGAPI HGSane_StartDeviceWithUI(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam); HGEXPORT HGResult HGAPI HGSane_StartDeviceWithUI(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
HGEXPORT HGResult HGAPI HGSane_StartDeviceWithSingleScan(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam); HGEXPORT HGResult HGAPI HGSane_StartDeviceWithSingleScan(HGSaneDevice dev, HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);

View File

@ -561,8 +561,6 @@ HGSaneDeviceImpl::HGSaneDeviceImpl(HGSaneSourceImpl* sourceImpl)
m_eventParam = NULL; m_eventParam = NULL;
m_imageFunc = NULL; m_imageFunc = NULL;
m_imageParam = NULL; m_imageParam = NULL;
m_stopThread = HGFALSE;
m_thread = NULL;
} }
HGSaneDeviceImpl::~HGSaneDeviceImpl() HGSaneDeviceImpl::~HGSaneDeviceImpl()
@ -620,7 +618,6 @@ HGResult HGSaneDeviceImpl::Close()
{ {
assert(NULL != m_devHandle); assert(NULL != m_devHandle);
Stop();
m_sourceImpl->m_saneApi.sane_close_api(m_devHandle); m_sourceImpl->m_saneApi.sane_close_api(m_devHandle);
m_devHandle = NULL; m_devHandle = NULL;
m_devName.clear(); m_devName.clear();
@ -695,9 +692,9 @@ HGResult HGSaneDeviceImpl::ClearRollerCount()
return SetValueInt32(0x9902, 0); return SetValueInt32(0x9902, 0);
} }
HGResult HGSaneDeviceImpl::GetDriverLogPath(HGChar *path, HGUInt maxLen) HGResult HGSaneDeviceImpl::GetDriverLog(const HGChar *fileName)
{ {
return GetValueStr256(0x9903, path, maxLen); return HGBASE_ERR_NOTIMPL;
} }
HGResult HGSaneDeviceImpl::ClearDriverLog() HGResult HGSaneDeviceImpl::ClearDriverLog()
@ -706,9 +703,9 @@ HGResult HGSaneDeviceImpl::ClearDriverLog()
return SetValueStr256(0x9903, value); return SetValueStr256(0x9903, value);
} }
HGResult HGSaneDeviceImpl::GetDeviceLogPath(HGChar *path, HGUInt maxLen) HGResult HGSaneDeviceImpl::GetDeviceLog(const HGChar *fileName)
{ {
return GetValueStr256(0x9904, path, maxLen); return HGBASE_ERR_NOTIMPL;
} }
HGResult HGSaneDeviceImpl::ClearDeviceLog() HGResult HGSaneDeviceImpl::ClearDeviceLog()
@ -719,11 +716,6 @@ HGResult HGSaneDeviceImpl::ClearDeviceLog()
HGResult HGSaneDeviceImpl::ShowSettingDlg(HGWindow parent) HGResult HGSaneDeviceImpl::ShowSettingDlg(HGWindow parent)
{ {
if (NULL != m_thread)
{
return HGBASE_ERR_FAIL;
}
if (-2 == show_setting_ui(&m_sourceImpl->m_saneApi, m_devHandle, m_devName.c_str(), parent)) if (-2 == show_setting_ui(&m_sourceImpl->m_saneApi, m_devHandle, m_devName.c_str(), parent))
{ {
return HGBASE_ERR_NOTSUPPORT; return HGBASE_ERR_NOTSUPPORT;
@ -732,105 +724,8 @@ HGResult HGSaneDeviceImpl::ShowSettingDlg(HGWindow parent)
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
HGResult HGSaneDeviceImpl::Start(HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
HGSane_DeviceImageFunc imageFunc, HGPointer imageParam, HGChar* errInfo, HGUInt errInfoLen)
{
if (NULL != m_thread)
{
return HGBASE_ERR_FAIL;
}
SANE_Parameters params;
memset(&params, 0, sizeof(SANE_Parameters));
SANE_Status stat = m_sourceImpl->m_saneApi.sane_get_parameters_api(m_devHandle, &params);
if (SANE_STATUS_GOOD != stat)
{
if (NULL != errInfo)
{
const char* err = m_sourceImpl->m_saneApi.sane_strstatus_api(stat);
if (NULL != err && errInfoLen >= strlen(err) + 1)
{
strcpy(errInfo, err);
}
}
return HGSANE_ERR_FAIL;
}
m_bufferSize = 5000 * 4000;
m_buffer = (HGByte *)malloc(m_bufferSize);
if (NULL == m_buffer)
{
return HGBASE_ERR_OUTOFMEMORY;
}
HGResult ret = GetValueInt32(0x8818, &m_dpi);
if (HGBASE_ERR_OK != ret)
{
free(m_buffer);
m_buffer = NULL;
m_bufferSize = 0;
return ret;
}
stat = m_sourceImpl->m_saneApi.sane_start_api(m_devHandle);
if (SANE_STATUS_GOOD != stat)
{
if (NULL != errInfo)
{
const char* err = m_sourceImpl->m_saneApi.sane_strstatus_api(stat);
if (NULL != err && errInfoLen >= strlen(err) + 1)
{
strcpy(errInfo, err);
}
}
m_dpi = 0;
free(m_buffer);
m_buffer = NULL;
m_bufferSize = 0;
return HGSANE_ERR_FAIL;
}
m_eventFunc = eventFunc;
m_eventParam = eventParam;
m_imageFunc = imageFunc;
m_imageParam = imageParam;
m_stopThread = HGFALSE;
HGBase_OpenThread(ThreadFunc, this, &m_thread);
return HGBASE_ERR_OK;
}
HGResult HGSaneDeviceImpl::Stop()
{
if (NULL == m_thread)
{
return HGBASE_ERR_FAIL;
}
m_stopThread = HGTRUE;
m_sourceImpl->m_saneApi.sane_cancel_api(m_devHandle);
HGBase_CloseThread(m_thread);
m_thread = NULL;
m_eventFunc = NULL;
m_eventParam = NULL;
m_imageFunc = NULL;
m_imageParam = NULL;
m_dpi = 0;
free(m_buffer);
m_buffer = NULL;
m_bufferSize = 0;
return HGBASE_ERR_OK;
}
HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam) HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam)
{ {
if (NULL != m_thread)
{
return HGBASE_ERR_FAIL;
}
HGResult ret = GetValueInt32(0x8818, &m_dpi); HGResult ret = GetValueInt32(0x8818, &m_dpi);
if (HGBASE_ERR_OK != ret) if (HGBASE_ERR_OK != ret)
{ {
@ -851,11 +746,6 @@ HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc i
HGResult HGSaneDeviceImpl::StartWithSingleScan(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam) HGResult HGSaneDeviceImpl::StartWithSingleScan(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam)
{ {
if (NULL != m_thread)
{
return HGBASE_ERR_FAIL;
}
HGChar scanMode[256] = {0}; HGChar scanMode[256] = {0};
HGResult ret = GetValueStr256(0x882E, scanMode, 256); HGResult ret = GetValueStr256(0x882E, scanMode, 256);
if (HGBASE_ERR_OK != ret) if (HGBASE_ERR_OK != ret)
@ -925,7 +815,7 @@ HGResult HGSaneDeviceImpl::SetValueStr256(HGUInt optionId, const HGChar *value)
} }
const char *v = value; const char *v = value;
SANE_Status status = m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, (SANE_Int)optionId, SANE_ACTION_SET_VALUE, v, NULL); SANE_Status status = m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, (SANE_Int)optionId, SANE_ACTION_SET_VALUE, (void*)v, NULL);
return (SANE_STATUS_GOOD == status) ? HGBASE_ERR_OK : HGBASE_ERR_FAIL; return (SANE_STATUS_GOOD == status) ? HGBASE_ERR_OK : HGBASE_ERR_FAIL;
} }
@ -952,90 +842,6 @@ HGResult HGSaneDeviceImpl::GetValueStr256(HGUInt optionId, HGChar *value, HGUInt
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
{
HGSaneDeviceImpl* p = (HGSaneDeviceImpl*)param;
while (!p->m_stopThread)
{
SANE_Parameters params;
memset(&params, 0, sizeof(SANE_Parameters));
SANE_Status stat1 = p->m_sourceImpl->m_saneApi.sane_get_parameters_api(p->m_devHandle, &params);
SANE_Int readSize = 0;
SANE_Status stat2 = SANE_STATUS_GOOD;
while (readSize < p->m_bufferSize)
{
SANE_Int len = 0;
stat2 = p->m_sourceImpl->m_saneApi.sane_read_api(p->m_devHandle, p->m_buffer + readSize, p->m_bufferSize - readSize, &len);
readSize += len;
if (SANE_STATUS_GOOD != stat2)
{
break;
}
}
if (SANE_STATUS_GOOD == stat2)
{
// m_bufferSize空间不够
if (NULL != p->m_eventFunc)
p->m_eventFunc((HGSaneDevice)p, HGSANE_ERR_FAIL, p->m_sourceImpl->m_saneApi.sane_strstatus_api(SANE_STATUS_INVAL), p->m_eventParam);
break;
}
else if (SANE_STATUS_EOF == stat2)
{
if (0 == readSize)
{
if (NULL != p->m_eventFunc)
p->m_eventFunc((HGSaneDevice)p, HGBASE_ERR_OK, NULL, p->m_eventParam);
break;
}
else if (SANE_STATUS_GOOD != stat1 || readSize != params.bytes_per_line * params.lines)
{
if (NULL != p->m_eventFunc)
p->m_eventFunc((HGSaneDevice)p, HGSANE_ERR_FAIL, p->m_sourceImpl->m_saneApi.sane_strstatus_api(SANE_STATUS_INVAL), p->m_eventParam);
break;
}
}
else if (SANE_STATUS_CANCELLED == stat2)
{
break;
}
else
{
if (NULL != p->m_eventFunc)
p->m_eventFunc((HGSaneDevice)p, HGSANE_ERR_FAIL, p->m_sourceImpl->m_saneApi.sane_strstatus_api(stat2), p->m_eventParam);
break;
}
if (NULL != p->m_imageFunc)
{
HGUInt imgType = 0;
if (params.format == SANE_FRAME_GRAY)
{
if (1 == params.depth)
imgType = HGBASE_IMGTYPE_BINARY;
else if (8 == params.depth)
imgType = HGBASE_IMGTYPE_GRAY;
}
else if (params.format == SANE_FRAME_RGB)
{
imgType = HGBASE_IMGTYPE_RGB;
}
HGImageInfo imgInfo = { (HGUInt)params.pixels_per_line, (HGUInt)params.lines,
imgType, (HGUInt)params.bytes_per_line, HGBASE_IMGORIGIN_TOP };
HGImage img = NULL;
HGBase_CreateImageWithData(p->m_buffer, &imgInfo, &img);
if (NULL != img)
{
HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi);
p->m_imageFunc((HGSaneDevice)p, img, p->m_imageParam);
HGBase_DestroyImage(img);
}
}
}
}
void HGSaneDeviceImpl::ShowScanImageCallback(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam) void HGSaneDeviceImpl::ShowScanImageCallback(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam)
{ {
HGSaneDeviceImpl* p = (HGSaneDeviceImpl*)callbackParam; HGSaneDeviceImpl* p = (HGSaneDeviceImpl*)callbackParam;

View File

@ -78,13 +78,10 @@ public:
HGResult Login(const HGChar *user, const HGChar *pwd); HGResult Login(const HGChar *user, const HGChar *pwd);
HGResult Logout(); HGResult Logout();
HGResult ClearRollerCount(); HGResult ClearRollerCount();
HGResult GetDriverLogPath(HGChar *path, HGUInt maxLen); HGResult GetDriverLog(const HGChar *fileName);
HGResult ClearDriverLog(); HGResult ClearDriverLog();
HGResult GetDeviceLogPath(HGChar *path, HGUInt maxLen); HGResult GetDeviceLog(const HGChar *fileName);
HGResult ClearDeviceLog(); HGResult ClearDeviceLog();
HGResult Start(HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
HGSane_DeviceImageFunc imageFunc, HGPointer imageParam, HGChar* errInfo, HGUInt errInfoLen);
HGResult Stop();
HGResult StartWithUI(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam); HGResult StartWithUI(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
HGResult StartWithSingleScan(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam); HGResult StartWithSingleScan(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
@ -93,7 +90,6 @@ private:
HGResult GetValueInt32(HGUInt optionId, HGInt *value); HGResult GetValueInt32(HGUInt optionId, HGInt *value);
HGResult SetValueStr256(HGUInt optionId, const HGChar *value); HGResult SetValueStr256(HGUInt optionId, const HGChar *value);
HGResult GetValueStr256(HGUInt optionId, HGChar *value, HGUInt maxLen); HGResult GetValueStr256(HGUInt optionId, HGChar *value, HGUInt maxLen);
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
static void ShowScanImageCallback(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam); static void ShowScanImageCallback(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam);
private: private:
@ -107,8 +103,6 @@ private:
HGPointer m_eventParam; HGPointer m_eventParam;
HGSane_DeviceImageFunc m_imageFunc; HGSane_DeviceImageFunc m_imageFunc;
HGPointer m_imageParam; HGPointer m_imageParam;
volatile HGBool m_stopThread;
HGThread m_thread;
}; };
#endif /* __HGSANEIMPL_HPP__ */ #endif /* __HGSANEIMPL_HPP__ */