2020-03-11 01:58:06 +00:00
|
|
|
#ifndef SIMPLEDS_HPP
|
|
|
|
#define SIMPLEDS_HPP
|
|
|
|
|
|
|
|
#include <twpp.hpp>
|
|
|
|
#include <unordered_map>
|
|
|
|
#include <vector>
|
|
|
|
#include <functional>
|
2020-08-31 07:44:24 +00:00
|
|
|
#include <queue>
|
2020-03-11 01:58:06 +00:00
|
|
|
|
|
|
|
namespace std {
|
|
|
|
|
2020-05-16 01:59:44 +00:00
|
|
|
template<>
|
|
|
|
struct hash<Twpp::CapType> {
|
|
|
|
size_t operator()(Twpp::CapType cap) const {
|
|
|
|
return hash<Twpp::UInt16>()(static_cast<Twpp::UInt16>(cap));
|
|
|
|
}
|
|
|
|
};
|
2020-03-11 01:58:06 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
typedef struct GScanCap GScanCap;
|
|
|
|
|
|
|
|
class HuagaoDs : public Twpp::SourceFromThis<HuagaoDs> {
|
|
|
|
|
|
|
|
public:
|
|
|
|
HuagaoDs();
|
2020-05-16 01:59:44 +00:00
|
|
|
virtual ~HuagaoDs();
|
2020-03-11 01:58:06 +00:00
|
|
|
static const Twpp::Identity& defaultIdentity() noexcept;
|
|
|
|
|
|
|
|
// SourceFromThis interface
|
|
|
|
protected:
|
|
|
|
typedef Twpp::SourceFromThis<HuagaoDs> Base;
|
|
|
|
|
|
|
|
virtual Twpp::Result capabilityGet(const Twpp::Identity& origin, Twpp::Capability& data) override;
|
|
|
|
virtual Twpp::Result capabilityGetCurrent(const Twpp::Identity& origin, Twpp::Capability& data) override;
|
|
|
|
virtual Twpp::Result capabilityGetDefault(const Twpp::Identity& origin, Twpp::Capability& data) override;
|
|
|
|
virtual Twpp::Result capabilityQuerySupport(const Twpp::Identity& origin, Twpp::Capability& data) override;
|
|
|
|
virtual Twpp::Result capabilityReset(const Twpp::Identity& origin, Twpp::Capability& data) override;
|
|
|
|
virtual Twpp::Result capabilityResetAll(const Twpp::Identity& origin) override;
|
|
|
|
virtual Twpp::Result capabilitySet(const Twpp::Identity& origin, Twpp::Capability& data) override;
|
|
|
|
virtual Twpp::Result eventProcess(const Twpp::Identity& origin, Twpp::Event& data) override;
|
2020-08-31 07:44:24 +00:00
|
|
|
virtual Twpp::Result deviceEventGet(const Twpp::Identity& origin, Twpp::DeviceEvent& data) override;
|
2020-03-11 01:58:06 +00:00
|
|
|
virtual Twpp::Result identityOpenDs(const Twpp::Identity& origin) override;
|
|
|
|
virtual Twpp::Result identityCloseDs(const Twpp::Identity& origin) override;
|
|
|
|
virtual Twpp::Result pendingXfersGet(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
|
|
|
|
virtual Twpp::Result pendingXfersEnd(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
|
|
|
|
virtual Twpp::Result pendingXfersReset(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
|
|
|
|
virtual Twpp::Result setupMemXferGet(const Twpp::Identity& origin, Twpp::SetupMemXfer& data) override;
|
|
|
|
virtual Twpp::Result userInterfaceDisable(const Twpp::Identity& origin, Twpp::UserInterface& data) override;
|
|
|
|
virtual Twpp::Result userInterfaceEnable(const Twpp::Identity& origin, Twpp::UserInterface& data) override;
|
|
|
|
virtual Twpp::Result userInterfaceEnableUiOnly(const Twpp::Identity& origin, Twpp::UserInterface& data) override;
|
|
|
|
virtual Twpp::Result imageInfoGet(const Twpp::Identity& origin, Twpp::ImageInfo& data) override;
|
|
|
|
virtual Twpp::Result imageLayoutGet(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
|
|
|
|
virtual Twpp::Result imageLayoutGetDefault(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
|
|
|
|
virtual Twpp::Result imageLayoutSet(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
|
|
|
|
virtual Twpp::Result imageLayoutReset(const Twpp::Identity& origin, Twpp::ImageLayout& data) override;
|
|
|
|
virtual Twpp::Result imageMemXferGet(const Twpp::Identity& origin, Twpp::ImageMemXfer& data) override;
|
|
|
|
virtual Twpp::Result imageNativeXferGet(const Twpp::Identity& origin, Twpp::ImageNativeXfer& data) override;
|
2020-05-16 01:59:44 +00:00
|
|
|
virtual Twpp::Result pendingXfersStopFeeder(const Twpp::Identity& origin, Twpp::PendingXfers& data) override;
|
|
|
|
|
|
|
|
virtual Twpp::Result imageFileXferGet(const Twpp::Identity& origin) override;
|
|
|
|
virtual Twpp::Result setupFileXferGet(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
|
|
|
|
virtual Twpp::Result setupFileXferGetDefault(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
|
|
|
|
virtual Twpp::Result setupFileXferSet(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
|
|
|
|
virtual Twpp::Result setupFileXferReset(const Twpp::Identity& origin, Twpp::SetupFileXfer& data) override;
|
2020-03-11 01:58:06 +00:00
|
|
|
virtual Twpp::Result call(const Twpp::Identity& origin, Twpp::DataGroup dg, Twpp::Dat dat, Twpp::Msg msg, void* data) override;
|
2020-07-26 09:07:40 +00:00
|
|
|
/// Get custom data TWAIN call.
|
|
|
|
/// Always called in correct state.
|
|
|
|
/// Default implementation does nothing.
|
|
|
|
/// \param origin Identity of the caller.
|
|
|
|
/// \param data Custom data.
|
|
|
|
virtual Twpp::Result customDataGet(const Twpp::Identity& origin, Twpp::CustomData& data) override;
|
|
|
|
|
|
|
|
/// Set custom data TWAIN call.
|
|
|
|
/// Always called in correct state.
|
|
|
|
/// Default implementation does nothing.
|
|
|
|
/// \param origin Identity of the caller.
|
|
|
|
/// \param data Custom data.
|
|
|
|
virtual Twpp::Result customDataSet(const Twpp::Identity& origin, Twpp::CustomData& data) override;
|
2020-06-23 09:31:43 +00:00
|
|
|
void SetResoluton(const char* path, int resolution);
|
2020-08-31 07:44:24 +00:00
|
|
|
|
|
|
|
private://method
|
2020-03-11 01:58:06 +00:00
|
|
|
Twpp::Result showTwainUI(Twpp::UserInterface& data, bool bUiOnly = false);
|
2020-08-31 07:44:24 +00:00
|
|
|
static void DeviceEvent_callback(int eventID, void* usrdata);
|
|
|
|
void HuagaoDs::onDeviceEvent(int eventID);
|
2020-03-11 01:58:06 +00:00
|
|
|
Twpp::Result startScan();
|
2020-06-20 03:01:35 +00:00
|
|
|
void saveGscanCapSetting();
|
2020-03-11 01:58:06 +00:00
|
|
|
const BITMAPINFOHEADER* header() const noexcept;
|
|
|
|
Twpp::UInt32 bytesPerLine() const noexcept;
|
|
|
|
Twpp::UInt32 bmpSize() const noexcept;
|
|
|
|
const char* bmpBegin() const noexcept;
|
|
|
|
const char* bmpEnd() const noexcept;
|
|
|
|
void updataGscanCap();
|
|
|
|
Twpp::Result capCommon(const Twpp::Identity& origin, Twpp::Msg msg, Twpp::Capability& data);
|
|
|
|
|
2020-08-31 07:44:24 +00:00
|
|
|
private://field
|
2020-03-11 01:58:06 +00:00
|
|
|
std::unordered_map<Twpp::CapType, std::function<Twpp::Result(Twpp::Msg msg, Twpp::Capability& data)>> m_caps;
|
|
|
|
std::unordered_map<Twpp::CapType, Twpp::MsgSupport> m_query;
|
|
|
|
|
2020-05-16 01:59:44 +00:00
|
|
|
Twpp::SetupFileXfer m_fileXfer;
|
2020-03-11 01:58:06 +00:00
|
|
|
Twpp::UInt32 m_memXferYOff = 0;
|
|
|
|
Twpp::UInt16 m_pendingXfers = 0;
|
2020-06-20 03:01:35 +00:00
|
|
|
Twpp::UInt16 m_autosize = 0;
|
2020-07-07 01:54:19 +00:00
|
|
|
Twpp::Bool m_autoscan = true;
|
|
|
|
Twpp::Bool m_autoboarderdetcet = false;
|
2020-03-11 01:58:06 +00:00
|
|
|
Twpp::Fix32 m_brightness = 0.0f;
|
|
|
|
Twpp::XferMech m_capXferMech = Twpp::XferMech::Native;
|
|
|
|
Twpp::PixelType m_capPixelType = Twpp::PixelType::Rgb;
|
2020-05-16 01:59:44 +00:00
|
|
|
unsigned short m_jpegQuality = 80;
|
2020-06-20 03:01:35 +00:00
|
|
|
Twpp::Compression m_compression= Twpp::Compression::None;
|
2020-03-11 01:58:06 +00:00
|
|
|
bool m_bIndicator = true;
|
2020-07-26 09:07:40 +00:00
|
|
|
bool m_bCustomDsData = true;
|
2020-03-11 01:58:06 +00:00
|
|
|
bool m_bFeederEnabled = true;
|
|
|
|
bool m_bAutoFeed = true;
|
2020-06-20 03:01:35 +00:00
|
|
|
UINT16 m_iBitdepth;
|
2020-03-11 01:58:06 +00:00
|
|
|
Twpp::ImageFileFormat m_capImageFileFormat = Twpp::ImageFileFormat::Bmp;
|
2020-08-31 07:44:24 +00:00
|
|
|
std::queue<Twpp::DeviceEvent> devEvent;
|
2020-03-11 01:58:06 +00:00
|
|
|
std::vector<unsigned char> bmpData;
|
|
|
|
std::unique_ptr<GScanCap> m_scanparam;
|
2020-05-16 01:59:44 +00:00
|
|
|
HANDLE hMutex;
|
2020-03-11 01:58:06 +00:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // SIMPLEDS_HPP
|