code_app/modules/sane_user/HGSaneImpl.hpp

134 lines
4.6 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, HGChar* errInfo, HGUInt errInfoLen);
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);
HGResult GetMultiFilterRedImgCount(HGInt *count);
HGResult GetMultioutImgCount(HGInt *count);
HGResult GetSpliteImgCount(HGInt *count);
HGResult GetIsFold(HGBool *isFold);
HGResult GetIsSingle(HGBool *isSingle);
HGResult GetfinalImgCount(HGInt *count);
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__ */