<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Guys guys, just calm down. This is for Linux, remember?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Mike</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:pzz@apevzner.com">Alexander Pevzner</a><br><b>Sent: </b>Tuesday, October 20, 2020 1:12 AM<br><b>To: </b><a href="mailto:sane-devel@alioth-lists.debian.net">sane-devel@alioth-lists.debian.net</a><br><b>Subject: </b>Re: [sane-devel] Sane API</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hi Thierry,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On 10/20/20 9:50 AM, Thierry HUCHARD wrote:</p><p class=MsoNormal>> I went to quickly look at sane-2.0: - I agree with @paddy-hack,</p><p class=MsoNormal>> making new with old is not necessarily a good thing! - I found that</p><p class=MsoNormal>> the difference was in the options. The operations are identical. It</p><p class=MsoNormal>> will be easy for a developer to create a gateway from sane-1.0 to</p><p class=MsoNormal>> sane-2.0. - The options are hardware dependent and there, some</p><p class=MsoNormal>> options are emulatable, others are not. - If sane-2.0 is just the</p><p class=MsoNormal>> formatting of the options, why not do it in sane-1.0?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Current API misses some essential things, that cannot be implemented in </p><p class=MsoNormal>terms of options:</p><p class=MsoNormal>- PnP notifications (scanner was connected/disconnected some time after</p><p class=MsoNormal>driver was initialized). This limitation can be worked around by</p><p class=MsoNormal>continuous poll, but this poll drains a battery a generates network/USB</p><p class=MsoNormal>traffic, so it is better to avoid.</p><p class=MsoNormal>- If some scanner is identified by multiple backends, it would be nice</p><p class=MsoNormal>to let user app to automatically choose one of the list. For this</p><p class=MsoNormal>purpose, it would be nice to expose some information regarding scanner</p><p class=MsoNormal>location, before scanner is opened (say, "USB bus X device Y, or NET</p><p class=MsoNormal>addr aaa.bbb.ccc.ddd). It requires adding extra fields to the</p><p class=MsoNormal>SANE_Device structure, which makes it incompatible with SANE 1.0</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>For the following things we just don't have appropriate SANE_Value_Type:</p><p class=MsoNormal>- Scanner resolution if a form of X*Y pair. This is important, to</p><p class=MsoNormal>support "asymmetrical" resolutions (300*600, for example)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>For the following options we don't have enough discipline:</p><p class=MsoNormal>- SANE_NAME_SCAN_SOURCE. There is no common names for ADF simplex/ADF </p><p class=MsoNormal>duplex, ADF front/ADF back</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>sane_airscan_get_parameters() must be accurate immediately after return </p><p class=MsoNormal>from sane_start(). It is not always possible, unless sane_start() has to </p><p class=MsoNormal>wait until image is available (compare sane-escl and sane-airscan approach).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>sane_airscan_get_select_fd() defined with serious mistake: it requires </p><p class=MsoNormal>backend to close select_fd immediately after completion or cancellation </p><p class=MsoNormal>of the scan job. In multi-threaded program closed file descriptor could </p><p class=MsoNormal>be immediately reused for some different purpose by another thread.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>There is no possibility to request image in the device-specific "raw" </p><p class=MsoNormal>format. I.e., if I want PDF and device can return PDF, image still will </p><p class=MsoNormal>be repacked PDF->sane format->PDF.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>My list is most likely very incomplete.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>-- </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>              Wishes, Alexander Pevzner (pzz@apevzner.com)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>