128 lines
4.3 KiB
C++
128 lines
4.3 KiB
C++
#ifndef __HGSANEIMPL_HPP__
|
|
#define __HGSANEIMPL_HPP__
|
|
|
|
#include "HGSane.h"
|
|
#include "../base/HGInc.h"
|
|
#include "../base/HGDll.h"
|
|
#include "../base/HGThread.h"
|
|
#include "../base/HGLock.h"
|
|
#include "sane/sane_ex.h"
|
|
#include "sane/sane_option_definitions.h"
|
|
#include "twainui/twainui.h"
|
|
#include <list>
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
class HGSaneManagerImpl
|
|
{
|
|
friend class HGSaneSourceImpl;
|
|
public:
|
|
HGSaneManagerImpl();
|
|
~HGSaneManagerImpl();
|
|
|
|
HGResult Create();
|
|
HGResult Destroy();
|
|
HGResult GetSourceCount(HGUInt *count);
|
|
HGResult GetSourceName(HGUInt index, HGChar* name, HGUInt maxLen);
|
|
HGResult OpenSource(HGUInt index, class HGSaneSourceImpl **sourceImpl);
|
|
HGResult OpenDefaultSource(class HGSaneSourceImpl **sourceImpl);
|
|
HGResult OpenSelectedSource(HGWindow parent, class HGSaneSourceImpl **sourceImpl);
|
|
|
|
private:
|
|
void RemoveSource(class HGSaneSourceImpl* sourceImpl);
|
|
bool filterDeviceSource(const char* sourceName);
|
|
|
|
private:
|
|
std::vector<std::pair<std::string, std::string>> m_vSource;
|
|
std::list<class HGSaneSourceImpl *> m_listSourceImpl;
|
|
};
|
|
|
|
class HGSaneSourceImpl
|
|
{
|
|
friend class HGSaneDeviceImpl;
|
|
public:
|
|
HGSaneSourceImpl(HGSaneManagerImpl *managerImpl);
|
|
~HGSaneSourceImpl();
|
|
|
|
HGResult Init(const HGChar* saneManu, HGDll dll, const SANEAPI *saneAPI);
|
|
HGResult Open(const HGChar* saneManu, const HGChar* sanePath);
|
|
HGResult Close();
|
|
HGResult GetName(HGChar* name, HGUInt maxLen);
|
|
HGResult GetDeviceCount(HGUInt *count);
|
|
HGResult GetDeviceName(HGUInt index, HGChar* name, HGUInt maxLen);
|
|
HGResult OpenDevice(HGUInt index, class HGSaneDeviceImpl **deviceImpl, HGChar* errInfo, HGUInt errInfoLen);
|
|
HGResult OpenSelectedDevice(HGWindow parent, class HGSaneDeviceImpl** deviceImpl);
|
|
|
|
private:
|
|
static HGResult FindFunctions(HGDll dll, const HGChar* saneManu, SANEAPI *saneAPI);
|
|
void RemoveDevice(class HGSaneDeviceImpl* deviceImpl);
|
|
|
|
private:
|
|
HGSaneManagerImpl *m_managerImpl;
|
|
std::string m_manuName;
|
|
HGDll m_dll;
|
|
SANEAPI m_saneApi;
|
|
std::list<class HGSaneDeviceImpl*> m_listDeviceImpl;
|
|
};
|
|
|
|
class HGSaneDeviceImpl
|
|
{
|
|
public:
|
|
HGSaneDeviceImpl(HGSaneSourceImpl* sourceImpl);
|
|
~HGSaneDeviceImpl();
|
|
|
|
HGResult Init(const HGChar* devName, SANE_Handle handle);
|
|
HGResult Open(const HGChar *devName, HGChar* errInfo, HGUInt errInfoLen);
|
|
HGResult Close();
|
|
HGResult GetName(HGChar* name, HGUInt maxLen);
|
|
HGResult GetCustomInfo(HGSaneDeviceCustomInfo *info);
|
|
HGResult ShowSettingDlg(HGWindow parent);
|
|
HGResult Login(const HGChar *user, const HGChar *pwd);
|
|
HGResult Logout();
|
|
HGResult ClearRollerCount();
|
|
HGResult GetRollerLife(HGInt *rollerLife);
|
|
HGResult GetDriverLog(const HGChar *fileName);
|
|
HGResult ClearDriverLog();
|
|
HGResult GetDeviceLog(const HGChar *fileName);
|
|
HGResult ClearDeviceLog();
|
|
HGResult Start(HGWindow parent, HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
|
|
HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
|
|
HGResult StartWithSingleScan(HGWindow parent, HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
|
|
HGSane_DeviceImageFunc imageFunc, HGPointer imageParam);
|
|
|
|
private:
|
|
static void UIResultCallback(ui_result result);
|
|
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
|
|
|
|
private:
|
|
HGResult SetValueInt32(HGUInt optionId, HGInt value);
|
|
HGResult GetValueInt32(HGUInt optionId, HGInt *value);
|
|
HGResult SetValueStr256(HGUInt optionId, const HGChar *value);
|
|
HGResult GetValueStr256(HGUInt optionId, HGChar *value, HGUInt maxLen);
|
|
HGResult GetDpi(HGInt *dpi);
|
|
HGResult GetScanMode(HGChar *scanMode, HGUInt maxLen);
|
|
HGResult GetScanCount(HGInt *scanCount);
|
|
HGResult SetScanMode(const HGChar *scanMode);
|
|
HGResult SetScanCount(HGInt scanCount);
|
|
HGResult GetDoubleImgStatus(HGUInt *status);
|
|
|
|
private:
|
|
HGSaneSourceImpl* m_sourceImpl;
|
|
std::string m_devName;
|
|
SANE_Handle m_devHandle;
|
|
static HGSaneDeviceImpl *m_curDevice;
|
|
std::function<void(int/*event*/, void*/*msg*/, int/*flag*/)> m_scanNotify;
|
|
HGInt m_dpi;
|
|
HGSane_DeviceEventFunc m_eventFunc;
|
|
HGPointer m_eventParam;
|
|
HGSane_DeviceImageFunc m_imageFunc;
|
|
HGPointer m_imageParam;
|
|
HGChar m_oldScanMode[256];
|
|
HGInt m_oldScanCount;
|
|
volatile HGBool m_stopThread;
|
|
HGThread m_thread;
|
|
volatile bool m_cancelScan;
|
|
};
|
|
|
|
#endif /* __HGSANEIMPL_HPP__ */
|