Requirements to be a TWAIN-Compliant Source
Requirements
TWAIN-compliant Sources must support the following:
Operations
----------
DG_CONTROL / DAT_CAPABILITY / MSG_GET
DG_CONTROL / DAT_CAPABILITY / MSG_GETCURRENT
DG_CONTROL / DAT_CAPABILITY / MSG_GETDEFAULT
DG_CONTROL / DAT_CAPABILITY / MSG_RESET
DG_CONTROL / DAT_CAPABILITY / MSG_SET
DG_CONTROL / DAT_EVENT / MSG_PROCESSEVENT
DG_CONTROL / DAT_IDENTITY / MSG_GET
DG_CONTROL / DAT_IDENTITY / MSG_OPENDS
DG_CONTROL / DAT_IDENTITY / MSG_CLOSEDS
DG_CONTROL / DAT_PENDINGXFERS / MSG_ENDXFER
DG_CONTROL / DAT_PENDINGXFERS / MSG_GET
DG_CONTROL / DAT_PENDINGXFERS / MSG_RESET
DG_CONTROL / DAT_SETUPMEMXFER / MSG_GET
DG_CONTROL / DAT_STATUS / MSG_GET
DG_CONTROL / DAT_USERINTERFACE / MSG_DISABLEDS
DG_CONTROL / DAT_USERINTERFACE / MSG_ENABLEDS
DG_CONTROL / DAT_XFERGROUP / MSG_GET
DG_IMAGE / DAT_IMAGEINFO / MSG_GET
DG_IMAGE / DAT_IMAGELAYOUT / MSG_GET
DG_IMAGE / DAT_IMAGELAYOUT / MSG_GETDEFAULT
DG_IMAGE / DAT_IMAGELAYOUT / MSG_RESET
DG_IMAGE / DAT_IMAGELAYOUT / MSG_SET
DG_IMAGE / DAT_IMAGEMEMXFER / MSG_GET
DG_IMAGE / DAT_IMAGENATIVEXFER / MSG_GET

Capabilities
------------
Every Source must support all five DG_CONTROL / DAT_CAPABILITY operations on:
CAP_XFERCOUNT
Every Source must support DG_CONTROL / DAT_CAPABILITY MSG_GET on:
CAP_SUPPORTEDCAPS
CAP_UICONTROLLABLE
Sources that supply image information must support DG_CONTROL / DAT_CAPABILITY /
MSG_GET, MSG_GETCURRENT, MSG_GETDEFAULT on:
ICAP_COMPRESSION
ICAP_PLANARCHUNKY
ICAP_PHYSICALHEIGHT
ICAP_PHYSICALWIDTH
ICAP_PIXELFLAVOR
Sources that supply image information must support DG_CONTROL / DAT_CAPABILITY /
MSG_GET, MSG_GETCURRENT, MSG_GETDEFAULT, MSG_RESET and MSG_SET on:
ICAP_BITDEPTH
ICAP_BITORDER
ICAP_PIXELTYPE
ICAP_UNITS
ICAP_XFERMECH
ICAP_XRESOLUTION
ICAP_YRESOLUTION
All Sources must implement the advertised features supported by their devices. They must
make these features available to applications via the TWAIN protocol. For example, a Source
that's connected to a device that has an ADF must support DG_CONTROL /
DAT_CAPABILITY / MSG_GET, MSG_GETCURRENT, MSG_GETDEFAULT on:
CAP_FEEDERENABLED
CAP_FEEDERLOADED
and DG_CONTROL / DAT_CAPABILITY / MSG_GET, MSG_GETCURRENT,
MSG_GETDEFAULT, MSG_RESET and MSG_SET on:
CAP_AUTOFEED
If the ADF also supports ejecting and rewinding of pages then the Source should also support
DG_CONTROL / DAT_CAPABILITY / MSG_GET, MSG_GETCURRENT,
MSG_GETDEFAULT, MSG_RESET and MSG_SET on:
CAP_CLEARPAGE
CAP_REWINDPAGE


*******************************************************************************

From Application to Source Manager (Control Information)

Data Group		Data Argument Type	Message
DG_CONTROL		DAT_IDENTITY 		MSG_CLOSEDS
						MSG_GETDEFAULT
						MSG_GETFIRST
						MSG_GETNEXT
						MSG_OPENDS
						MSG_USERSELECT
DG_CONTROL		DAT_PARENT		MSG_CLOSEDSM
						MSG_OPENDSM
DG_CONTROL		DAT_STATUS		MSG_GET

From Application to Source (Control Information)
Data Group		Data Argument Type 	Message
DG_CONTROL		DAT_CAPABILITY		MSG_GET
						MSG_GETCURRENT
						MSG_GETDEFAULT
						MSG_QUERYSUPPORT
						MSG_RESET
						MSG_SET
DG_CONTROL		DAT_CUSTOMDSDATA	MSG_GET
						MSG_SET
DG_CONTROL		DAT_FILESYSTEM		MSG_AUTOMATICCAPTURE
						DIRECTORY
						MSG_CHANGEDIRECTORY
						MSG_COPY
						MSG_CREATEDIRECTORY
						MSG_DELETE
						MSG_FORMATMEDIA
						MSG_GETCLOSE
						MSG_GETFIRSTFILE
						MSG_GETINFO
						MSG_GETNEXTFILE
						MSG_RENAME
DG_CONTROL		DAT_EVENT		MSG_PROCESSEVENT
DG_CONTROL		DAT_PASSTHRU		MSG_PASSTHRU
DG_CONTROL		DAT_PENDINGXFERS	MSG_ENDXFER
						MSG_GET
						MSG_RESET
						MSG_STOPFEEDER
DG_CONTROL		DAT_SETUPFILEXFER	MSG_GET
						MSG_GETDEFAULT
						MSG_RESET
						MSG_SET
DG_CONTROL		DAT_SETUPFILEXFER2	MSG_GET
						MSG_GETDEFAULT
						MSG_RESET
						MSG_SET
DG_CONTROL		DAT_SETUPMEMXFER	MSG_GET
DG_CONTROL		DAT_STATUS		MSG_GET
DG_CONTROL		DAT_USERINTERFACE	MSG_DISABLEDS
						MSG_ENABLEDS
						MSG_ENABLEDSUIONLY
DG_CONTROL		DAT_XFERGROUP		MSG_GET
						MSG_SET

From Application to Source (Image Information)
Data Group		Data Argument Type	Message
DG_IMAGE		DAT_CIECOLOR		MSG_GET
DG_IMAGE		DAT_EXTIMAGEINFO	MSG_GET
DG_IMAGE		DAT_GRAYRESPONSE	MSG_RESET
						MSG_SET
DG_IMAGE		DAT_IMAGEFILEXFER	MSG_GET
DG_IMAGE		DAT_IMAGEINFO		MSG_GET
DG_IMAGE		DAT_IMAGELAYOUT		MSG_GET
						MSG_GETDEFAULT
						MSG_RESET
						MSG_SET
DG_IMAGE		DAT_IMAGEMEMXFER	MSG_GET
DG_IMAGE		DAT_IMAGENATIVEXFER	MSG_GET
DG_IMAGE		DAT_JPEGCOMPRESSION	MSG_GET
						MSG_GETDEFAULT
						MSG_RESET
						MSG_SET
DG_IMAGE		DAT_PALETTE8		MSG_GET
						MSG_GETDEFAULT
						MSG_RESET
						MSG_SET
DG_IMAGE		DAT_RGBRESPONSE		MSG_RESET
						MSG_SET

From Application to Source (Audio Information)
Data Group		Data Argument Type	Message
DG_AUDIO		DAT_AUDIOFILEXFER	MSG_GET
DG_AUDIO		DAT_AUDIOINFO		MSG_GET
DG_AUDIO		DAT_AUDIONATIVEXFER	MSG_GET

From Source Manager to Source (Control Information)
Data Group		Data Argument Type	Message
DG_CONTROL		DAT_IDENTITY		MSG_CLOSEDS
						MSG_GET
						MSG_OPENDS

From Source to Application (Control Information via the Source Manager)
(Used by Windows Sources only)
Data Group		Data Argument Type	Message
DG_CONTROL		DAT_NULL		MSG_CLOSEDSOK
						MSG_CLOSEDSREQ
						MSG_DEVICEEVENT
						MSG_XFERREADY
