#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 "saneui/HGSaneUI.h" #include #include #include 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 OpenSelectedSource(HGWindow parent, class HGSaneSourceImpl **sourceImpl); private: void RemoveSource(class HGSaneSourceImpl* sourceImpl); private: std::vector> m_vSource; std::list 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 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 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: 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); static void show_scan_ui_event_func(HGUInt event, HGPointer param); static void show_scan_ui_image_func(HGImage image, HGPointer param); private: HGSaneSourceImpl* m_sourceImpl; std::string m_devName; SANE_Handle m_devHandle; HGByte* m_buffer; HGInt m_bufferSize; HGInt m_dpi; HGSane_DeviceEventFunc m_eventFunc; HGPointer m_eventParam; HGSane_DeviceImageFunc m_imageFunc; HGPointer m_imageParam; }; #endif /* __HGSANEIMPL_HPP__ */