#ifndef SIMPLEDS_HPP #define SIMPLEDS_HPP #include #include #include #include namespace std { template<> struct hash { size_t operator()(Twpp::CapType cap) const{ return hash()(static_cast(cap)); } }; } typedef struct GScanCap GScanCap; class HuagaoDs : public Twpp::SourceFromThis { public: HuagaoDs(); virtual ~HuagaoDs(); static const Twpp::Identity& defaultIdentity() noexcept; // SourceFromThis interface protected: typedef Twpp::SourceFromThis 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; 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; virtual Twpp::Result pendingXfersStopFeeder(const Twpp::Identity& origin, Twpp::PendingXfers& data) override; virtual Twpp::Result call(const Twpp::Identity& origin, Twpp::DataGroup dg, Twpp::Dat dat, Twpp::Msg msg, void* data) override; private: Twpp::Result showTwainUI(Twpp::UserInterface& data, bool bUiOnly = false); Twpp::Result startScan(); 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 initGScanCap(); void updataGscanCap(); Twpp::Result capCommon(const Twpp::Identity& origin, Twpp::Msg msg, Twpp::Capability& data); std::unordered_map> m_caps; std::unordered_map m_query; Twpp::UInt32 m_memXferYOff = 0; Twpp::UInt16 m_pendingXfers = 0; Twpp::Int16 m_capXferCount = -1; Twpp::Fix32 m_brightness = 0.0f; Twpp::XferMech m_capXferMech = Twpp::XferMech::Native; Twpp::PixelType m_capPixelType = Twpp::PixelType::Rgb; bool m_bIndicator = true; bool m_bFeederEnabled = true; bool m_bAutoFeed = true; Twpp::ImageFileFormat m_capImageFileFormat = Twpp::ImageFileFormat::Bmp; std::vector bmpData; std::unique_ptr m_scanparam; }; #endif // SIMPLEDS_HPP