Type: New Feature
Fix Version/s: None
I was about to suggest this is as a GSoC task, but someone first has to analyze the architecture of the Still Image Acquisition components unter Windows and how much we could import from WINE into ReactOS. This issue shall track related progress.
As far as I understand it:
- TWAIN is the traditional API and exists since 16-bit times. Every TWAIN-compatible scanner comes with a .ds file that is basically a DLL with an exported DS_Entry function. It implements all scanner features.
- TWAIN is Open-Source since 2.0 and we could just import the reference implementation for "twain_32.dll" (see URL above). Alternatively, WINE also has an implementation.
- Older Windows versions also supported 16-bit .ds scanner drivers by providing "twain.dll" and "twunk_16.exe", "twunk_32.exe" components that thunk 16-bit TWAIN calls to 32-bit ones.
- TWAIN .ds scanner drivers may use STI APIs since STI was introduced in Windows 98.
- STI is a COM-based API providing low-level access to scanners. It is not used directly by applications, but only from newer .ds scanner drivers. STI APIs are also used in the "Scanners and Cameras" control panel applet.
- WIA is a modern COM-based API since Windows Me/Windows XP. It can be used for image acquisition by newer WIA-aware applications and also uses a new driver model not compatible with TWAIN. It comes with a "wiatwain.ds" driver though that provides a TWAIN compatibility layer for all WIA-only scanner drivers.
- USB scanners are managed through the "usbscan.sys" driver
- WINE provides a "sane.ds" TWAIN driver that provides TWAIN compatibility for SANE scanner drivers. SANE can also be used under Windows and supports some scanners, which are not supported by the vendor anymore. If we want to be better than Windows, we can import "sane.ds" as well and provide support for all SANE scanner drivers under ReactOS.
That looks like a lot of free lunch to me
Given all the components we could import, we should at least be able to support parallelport and SCSI scanners with TWAIN drivers in a short time. Having this, a usbscan.sys implementation should be everything needed to add USB scanner support.