kopia lustrzana https://gitlab.com/sane-project/website
				
				
				
			
		
			
				
	
	
		
			667 wiersze
		
	
	
		
			27 KiB
		
	
	
	
		
			HTML
		
	
	
			
		
		
	
	
			667 wiersze
		
	
	
		
			27 KiB
		
	
	
	
		
			HTML
		
	
	
<html><body>
 | 
						|
<a href="doc013.html"><img src=../icons/next.gif alt="Next"></a>
 | 
						|
<a href="doc000.html"><img src=../icons/up.gif alt="Up"></a>
 | 
						|
<a href="doc011.html"><img src=../icons/previous.gif alt="Previous"></a>
 | 
						|
<a href="doc000.html"><img src=../icons/contents.gif alt="Contents"></a>
 | 
						|
<a href="doc019.html"><img src=../icons/index.gif alt="Index"></a>
 | 
						|
<hr>
 | 
						|
 | 
						|
<title>Operations</title>
 | 
						|
<h2><a name="s4.3">4.3 Operations</a></h2>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.1">4.3.1 <tt>sane_init</tt></a></h3>
 | 
						|
 | 
						|
<p>This function must be called before any other SANE function can be called.
 | 
						|
The behavior of a SANE backend is undefined if this function is not called
 | 
						|
first or if the status code returned by <tt>sane_init</tt> is different from
 | 
						|
<tt>SANE_STATUS_GOOD<a name="i72"></tt>.  The version code of the backend is returned
 | 
						|
in the value pointed to by <tt>version_code</tt>.  If that pointer is
 | 
						|
<tt>NULL</tt>, no version code is returned.  Argument <tt>authorize</tt> is either
 | 
						|
a pointer to a function that is invoked when the backend requires
 | 
						|
authentication for a specific resource or <tt>NULL</tt> if the frontend does not
 | 
						|
support authentication.
 | 
						|
<blockquote><a name="i73">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_init (SANE_Int * version_code,
 | 
						|
                       SANE_Authorization_Callback authorize);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The authorization function may be called by a backend in response to
 | 
						|
any of the following calls:
 | 
						|
<blockquote>
 | 
						|
  <tt>sane_open</tt>, <tt>sane_control_option</tt>, <tt>sane_start</tt>
 | 
						|
</blockquote>
 | 
						|
If a backend was initialized without authorization function, then
 | 
						|
authorization requests that cannot be handled by the backend itself
 | 
						|
will fail automatically and the user may be prevented from accessing
 | 
						|
protected resources.  Backends are encouraged to implement means of
 | 
						|
authentication that do not require user assistance.  E.g., on a
 | 
						|
multi-user system that authenticates users through a login process a
 | 
						|
backend could automatically lookup the apporpriate password based on
 | 
						|
resource- and user-name.
 | 
						|
 | 
						|
<p>The authentication function type has the following declaration:
 | 
						|
<blockquote><a name="i74">
 | 
						|
  <a name="i75"><a name="i76"><a name="i77">
 | 
						|
<pre>
 | 
						|
#define SANE_MAX_USERNAME_LEN   128
 | 
						|
#define SANE_MAX_PASSWORD_LEN   128
 | 
						|
 | 
						|
typedef void (*SANE_Authorization_Callback)
 | 
						|
    (SANE_String_Const resource,
 | 
						|
     SANE_Char username[SANE_MAX_USERNAME_LEN],
 | 
						|
     SANE_Char password[SANE_MAX_PASSWORD_LEN]);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
Three arguments are passed to the authorization function:
 | 
						|
<tt>resource</tt> is a string specifying the name of the resource that
 | 
						|
requires authorization.  A frontend should use this string to build a
 | 
						|
user-prompt requesting a username and a password.  The <tt>username</tt>
 | 
						|
and <tt>password</tt> arguments are (pointers to) an array of
 | 
						|
<tt>SANE_MAX_USERNAME_LEN</tt> and <tt>SANE_MAX_PASSWORD_LEN</tt>
 | 
						|
characters, respectively.  The authorization call should place the
 | 
						|
entered username and password in these arrays.  The returned strings
 | 
						|
<em>must</em> be ASCII-NUL terminated.
 | 
						|
 | 
						|
<p><h3><a name="s4.3.2">4.3.2 <tt>sane_exit</tt></a></h3>
 | 
						|
 | 
						|
<p>This function must be called to terminate use of a backend.  The
 | 
						|
function will first close all device handles that still might be open
 | 
						|
(it is recommended to close device handles explicitly through a call
 | 
						|
to <tt>sane_close()</tt>, but backends are required to release all
 | 
						|
resources upon a call to this function).  After this function returns,
 | 
						|
no function other than <tt>sane_init()</tt> may be called (regardless
 | 
						|
of the status value returned by <tt>sane_exit()</tt>.  Neglecting to
 | 
						|
call this function may result in some resources not being released
 | 
						|
properly.
 | 
						|
<blockquote><a name="i78">
 | 
						|
<pre>
 | 
						|
void sane_exit (void);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.3">4.3.3 <tt>sane_get_devices</tt></a></h3>
 | 
						|
 | 
						|
<p>This function can be used to query the list of devices that are
 | 
						|
available.  If the function executes successfully, it stores a pointer
 | 
						|
to a <tt>NULL</tt> terminated array of pointers to <tt>SANE_Device</tt>
 | 
						|
structures in <tt>*device_list</tt>.  The returned list is guaranteed
 | 
						|
to remain unchanged and valid until (a) another call to this function
 | 
						|
is performed or (b) a call to <tt>sane_exit()</tt> is performed.  This
 | 
						|
function can be called repeatedly to detect when new devices become
 | 
						|
available.  If argument <tt>local_only</tt> is true, only local devices
 | 
						|
are returned (devices directly attached to the machine that SANE is
 | 
						|
running on).  If it is false, the device list includes all remote
 | 
						|
devices that are accessible to the SANE library.
 | 
						|
<blockquote><a name="i79">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_get_devices (const SANE_Device *** device_list,
 | 
						|
                              SANE_Bool local_only);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>This function may fail with <tt>SANE_STATUS_NO_MEM</tt> if an
 | 
						|
insufficient amount of memory is available.
 | 
						|
 | 
						|
<p><blockquote>
 | 
						|
  <center>
 | 
						|
    <b>Backend Implementation Note</b>
 | 
						|
  </center>
 | 
						|
  SANE does not require that this function is called before a
 | 
						|
  <tt>sane_open()</tt> call is performed.  A device name may be
 | 
						|
  specified explicitly by a user which would make it unnecessary and
 | 
						|
  undesirable to call this function first.
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.4">4.3.4 <tt>sane_open</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to establish a connection to a particular
 | 
						|
device.  The name of the device to be opened is passed in argument
 | 
						|
<tt>name</tt>.  If the call completes successfully, a handle for the
 | 
						|
device is returned in <tt>*h</tt>.  As a special case, specifying a
 | 
						|
zero-length string as the device requests opening the first available
 | 
						|
device (if there is such a device).
 | 
						|
<blockquote><a name="i80">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_open (SANE_String_Const name, SANE_Handle * h);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>This function may fail with one of the following status codes.
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
<dt><tt>SANE_STATUS_DEVICE_BUSY</tt>:<dd> The device is currently
 | 
						|
  busy (in use by somebody else).
 | 
						|
<dt><tt>SANE_STATUS_INVAL</tt>:<dd> The device name is not valid.
 | 
						|
<dt><tt>SANE_STATUS_IO_ERROR</tt>:<dd> An error occured while
 | 
						|
  communicating with the device.
 | 
						|
<dt><tt>SANE_STATUS_NO_MEM</tt>:<dd> An insufficent amount of memory
 | 
						|
  is available.
 | 
						|
<dt><tt>SANE_STATUS_ACCESS_DENIED</tt>:<dd> Access to the device has
 | 
						|
  been denied due to insufficient or invalid authentication.
 | 
						|
</dl>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.5">4.3.5 <tt>sane_close</tt></a></h3>
 | 
						|
 | 
						|
<p>This function terminates the association between the device handle
 | 
						|
passed in argument <tt>h</tt> and the device it represents.  If the
 | 
						|
device is presently active, a call to <tt>sane_cancel()</tt> is
 | 
						|
performed first.  After this function returns, handle <tt>h</tt> must
 | 
						|
not be used anymore.
 | 
						|
 | 
						|
<p><blockquote><a name="i81">
 | 
						|
<pre>
 | 
						|
void sane_close (SANE_Handle h);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.6">4.3.6 <tt>sane_get_option_descriptor</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to access option descriptors.  The function
 | 
						|
returns the option descriptor for option number <tt>n</tt> of the device
 | 
						|
represented by handle <tt>h</tt>.  Option number 0 is guaranteed to be a
 | 
						|
valid option.  Its value is an integer that specifies the number of
 | 
						|
options that are available for device handle <tt>h</tt> (the count
 | 
						|
includes option 0).  If n is not a valid option index, the function
 | 
						|
returns <tt>NULL</tt>.  The returned option descriptor is guaranteed to
 | 
						|
remain valid (and at the returned address) until the device is closed.
 | 
						|
 | 
						|
<p><blockquote><a name="i82">
 | 
						|
<pre>
 | 
						|
const SANE_Option_Descriptor *
 | 
						|
    sane_get_option_descriptor (SANE_Handle h, SANE_Int n);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.7">4.3.7 <tt>sane_control_option</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to set or inquire the current value of option
 | 
						|
number <tt>n</tt> of the device represented by handle <tt>h</tt>.  The
 | 
						|
manner in which the option is controlled is specified by parameter
 | 
						|
<tt>a</tt>.  The possible values of this parameter are described in more
 | 
						|
detail below.  The value of the option is passed through argument
 | 
						|
<tt>v</tt>.  It is a pointer to the memory that holds the option value.
 | 
						|
The memory area pointed to by <tt>v</tt> must be big enough to hold the
 | 
						|
entire option value (determined by member <tt>size</tt> in the
 | 
						|
corresponding option descriptor).  The only exception to this rule is
 | 
						|
that when setting the value of a string option, the string pointed to
 | 
						|
by argument <tt>v</tt> may be shorter since the backend will stop
 | 
						|
reading the option value upon encountering the first <tt>NUL</tt>
 | 
						|
terminator in the string.  If argument <tt>i</tt> is not <tt>NULL</tt>,
 | 
						|
the value of <tt>*i</tt> will be set to provide details on how well the
 | 
						|
request has been met.  The meaning of this argument is described in
 | 
						|
more detail below.
 | 
						|
<blockquote><a name="i83">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_control_option (SANE_Handle h, SANE_Int n,
 | 
						|
                                 SANE_Action a, void *v,
 | 
						|
                                 SANE_Int * i);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The way the option is affected by a call to this function is
 | 
						|
controlled by parameter <tt>a</tt> which is a value of type
 | 
						|
<tt>SANE_Action<a name="i84"></tt>.  The possible values and their meaning is
 | 
						|
described in Table <a href="doc012.html#t7">7</a>.
 | 
						|
 | 
						|
<p><p><a name="t7"></a>
 | 
						|
  <center>
 | 
						|
    
 | 
						|
    <table cellpadding=0 cellspacing=0 border=1>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=center nowrap><b>Symbol</b></td>
 | 
						|
<td colspan=1 align=center nowrap><b>Code</b></td>
 | 
						|
<td colspan=1 align=center nowrap><b>Description</b></td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p>
 | 
						|
 | 
						|
<p><tt>SANE_ACTION_GET_VALUE<a name="i85"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 0 </td>
 | 
						|
<td colspan=1 align=left> Get current option value. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p><tt>SANE_ACTION_SET_VALUE<a name="i86"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 1 </td>
 | 
						|
<td colspan=1 align=left> Set option value.  The
 | 
						|
  option value passed through argument <tt>v</tt> may be modified by the
 | 
						|
  backend if the value cannot be set exactly.  </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap> 
 | 
						|
 | 
						|
<p><tt>SANE_ACTION_SET_AUTO<a name="i87"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 2 </td>
 | 
						|
<td colspan=1 align=left> Turn on automatic mode.  Backend
 | 
						|
  or device will automatically select an appropriate value.  This mode
 | 
						|
  remains effective until overridden by an explicit set value request.
 | 
						|
  The value of parameter <tt>v</tt> is completely ignored in this case and
 | 
						|
  may be <tt>NULL</tt>.  </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p>
 | 
						|
    </td></tr>
 | 
						|
</table>
 | 
						|
    <p><center>Table 7: Action Values (<tt>SANE_Action</tt>)</center>
 | 
						|
    
 | 
						|
  </center>
 | 
						|
<p>
 | 
						|
 | 
						|
<p>After setting a value via an action value of
 | 
						|
<tt>SANE_ACTION_SET_VALUE</tt>, additional information on how well the
 | 
						|
request has been met is returned in <tt>*i</tt> (if <tt>i</tt> is
 | 
						|
non-<tt>NULL</tt>).  The returned value is a bitset that may contain any
 | 
						|
combination of the values described in Table <a href="doc012.html#t8">8</a>.
 | 
						|
<p><a name="t8"></a>
 | 
						|
  <center>
 | 
						|
    
 | 
						|
    <table cellpadding=0 cellspacing=0 border=1>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=center nowrap><b>Symbol</b></td>
 | 
						|
<td colspan=1 align=center nowrap><b>Code</b></td>
 | 
						|
<td colspan=1 align=center nowrap><b>Description</b></td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p>
 | 
						|
 | 
						|
<p><tt>SANE_INFO_INEXACT<a name="i88"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 1 </td>
 | 
						|
<td colspan=1 align=left> This value is returned when
 | 
						|
  setting an option value resulted in a value being selected that does
 | 
						|
  not exactly match the requested value.  For example, if a scanner
 | 
						|
  can adjust the resolution in increments of 30dpi only, setting the
 | 
						|
  resolution to 307dpi may result in an actual setting of 300dpi.
 | 
						|
  When this happens, the bitset returned in <tt>*i</tt> has this member
 | 
						|
  set.  In addition, the option value is modified to reflect the
 | 
						|
  actual (rounded) value that was used by the backend.  Note that
 | 
						|
  inexact values are admissible for strings as well.  A backend may
 | 
						|
  choose to ``round'' a string to the closest matching legal string
 | 
						|
  for a constrained string value. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p>  <tt>SANE_INFO_RELOAD_OPTIONS<a name="i89"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 2 </td>
 | 
						|
<td colspan=1 align=left> The setting of an
 | 
						|
  option may affect the value or availability of one or more <em>
 | 
						|
    other</em> options.  When this happens, the SANE backend sets this
 | 
						|
  member in <tt>*i</tt> to indicate that the application should reload
 | 
						|
  all options.  This member may be set if and only if at least one
 | 
						|
  option changed. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p><tt>SANE_INFO_RELOAD_PARAMS<a name="i90"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 4 </td>
 | 
						|
<td colspan=1 align=left> The setting of an option may
 | 
						|
  affect the parameter values (see <tt>sane_get_parameters()</tt>).
 | 
						|
  If setting an option affects the parameter values, this member will
 | 
						|
  be set in <tt>*i</tt>.  Note that this member may be set even if the
 | 
						|
  parameters did not actually change.  However, it is guaranteed that
 | 
						|
  the parameters never change without this member being set. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p>
 | 
						|
    </td></tr>
 | 
						|
</table>
 | 
						|
    <p><center>Table 8: Additional Information Returned When Setting an Option</center>
 | 
						|
    
 | 
						|
  </center>
 | 
						|
<p>
 | 
						|
 | 
						|
<p>This function may fail with one of the following status codes.
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
<dt><tt>SANE_STATUS_UNSUPPORTED</tt>:<dd> The operation is not
 | 
						|
  supported for the specified handle and option number.
 | 
						|
<dt><tt>SANE_STATUS_INVAL</tt>:<dd> The option value is not valid.
 | 
						|
<dt><tt>SANE_STATUS_IO_ERROR</tt>:<dd> An error occured while
 | 
						|
  communicating with the device.
 | 
						|
<dt><tt>SANE_STATUS_NO_MEM</tt>:<dd> An insufficent amount of memory
 | 
						|
  is available.
 | 
						|
<dt><tt>SANE_STATUS_ACCESS_DENIED</tt>:<dd> Access to the option has
 | 
						|
  been denied due to insufficient or invalid authentication.
 | 
						|
</dl>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.8">4.3.8 <tt>sane_get_parameters</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to obtain the current scan parameters.  The
 | 
						|
returned parameters are guaranteed to be accurate between the time a
 | 
						|
scan has been started (<tt>sane_start()</tt> has been called) and the
 | 
						|
completion of that request.  Outside of that window, the returned
 | 
						|
values are best-effort estimates of what the parameters will be when
 | 
						|
<tt>sane_start()</tt> gets invoked.  Calling this function before a
 | 
						|
scan has actually started allows, for example, to get an estimate of
 | 
						|
how big the scanned image will be.  The parameters passed to this
 | 
						|
function are the handle <tt>h</tt> of the device for which the
 | 
						|
parameters should be obtained and a pointer <tt>p</tt> to a parameter
 | 
						|
structure.  The parameter structure is described in more detail below.
 | 
						|
 | 
						|
<p><blockquote><a name="i91">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_get_parameters (SANE_Handle h,
 | 
						|
                                 SANE_Parameters * p);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>The scan parameters are returned in a structure of type
 | 
						|
<tt>SANE_Parameters<a name="i92"></tt>.  The C declaration of this structure
 | 
						|
is given below.
 | 
						|
<blockquote>
 | 
						|
<pre>
 | 
						|
typedef struct
 | 
						|
  {
 | 
						|
    SANE_Frame format;
 | 
						|
    SANE_Bool last_frame;
 | 
						|
    SANE_Int lines;
 | 
						|
    SANE_Int depth;
 | 
						|
    SANE_Int pixels_per_line;
 | 
						|
    SANE_Int bytes_per_line;
 | 
						|
  }
 | 
						|
SANE_Parameters;
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p>Member <tt>format</tt> specifies the format of the next frame to be
 | 
						|
returned.  The possible values for type <tt>SANE_Frame<a name="i93"></tt> are
 | 
						|
described in Table <a href="doc012.html#t9">9</a>.  The meaning of these
 | 
						|
values is described in more detail in Section <a href="doc008.html#s3.2">3.2</a>.
 | 
						|
<p><a name="t9"></a>
 | 
						|
  <center>
 | 
						|
    
 | 
						|
    <table cellpadding=0 cellspacing=0 border=1>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=center nowrap><b>Symbol</b></td>
 | 
						|
<td colspan=1 align=center nowrap><b>Code</b></td>
 | 
						|
<td colspan=1 align=center nowrap><b>Description</b></td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p>
 | 
						|
 | 
						|
<p><tt>SANE_FRAME_GRAY<a name="i94"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 0 </td>
 | 
						|
<td colspan=1 align=left nowrap> Band covering human visual range. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
<tt>SANE_FRAME_RGB<a name="i95"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 1 </td>
 | 
						|
<td colspan=1 align=left nowrap> Pixel-interleaved red/green/blue bands. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
<tt>SANE_FRAME_RED<a name="i96"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 2 </td>
 | 
						|
<td colspan=1 align=left nowrap> Red band of a red/green/blue image. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
<tt>SANE_FRAME_GREEN<a name="i97"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 3 </td>
 | 
						|
<td colspan=1 align=left nowrap> Green band of a red/green/blue image. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
<tt>SANE_FRAME_BLUE<a name="i98"></tt> </td>
 | 
						|
<td colspan=1 align=right nowrap> 4 </td>
 | 
						|
<td colspan=1 align=left nowrap> Blue band of a red/green/blue image. </td></tr>
 | 
						|
<tr valign=top>
 | 
						|
<td colspan=1 align=left nowrap>
 | 
						|
 | 
						|
<p>
 | 
						|
    </td></tr>
 | 
						|
</table>
 | 
						|
    <p><center>Table 9: Frame Format (<tt>SANE_Frame</tt>)</center>
 | 
						|
    
 | 
						|
  </center>
 | 
						|
<p>
 | 
						|
 | 
						|
<p>Member <tt>last_frame</tt> is set to <tt>SANE_TRUE</tt> if and only if
 | 
						|
the frame that is currently being acquired (or the frame that will be
 | 
						|
acquired next if there is no current frame) is the last frame of a
 | 
						|
multi frame image (e.g., the current frame is the blue component of a
 | 
						|
red, green, blue image).
 | 
						|
 | 
						|
<p>Member <tt>lines</tt> specifies how many scan lines the frame is
 | 
						|
comprised of.  If this value is -1, the number of lines is not known a
 | 
						|
priori and the frontend should call <tt>sane_read()</tt> until it
 | 
						|
returns a status of <tt>SANE_STATUS_EOF</tt>.
 | 
						|
 | 
						|
<p>Member <tt>bytes_per_line</tt> specifies the number of bytes that
 | 
						|
comprise one scan line.
 | 
						|
 | 
						|
<p>Member <tt>depth</tt> specifies the number of bits per sample.
 | 
						|
 | 
						|
<p>Member <tt>pixels_per_line</tt> specifies the number of pixels that
 | 
						|
comprise one scan line.
 | 
						|
 | 
						|
<p>Assume B is the number of channels in the frame, then the bit depth
 | 
						|
d (as given by member <tt>depth</tt>) and the number of pixels per
 | 
						|
line n (as given by this member <tt>pixels_per_line</tt>) are
 | 
						|
related to c, the number of bytes per line (as given by member
 | 
						|
<tt>bytes_per_line</tt>) as follows:
 | 
						|
 | 
						|
<p>
 | 
						|
<center>
 | 
						|
 | 
						|
  c >= \left{
 | 
						|
  ll
 | 
						|
    \lceil B*n / 8\rceil  if d=1
 | 
						|
</td><td align=right>(1)</td></tr><tr><td align=center>
 | 
						|
 | 
						|
    B*n *\lceil (d + 7)/8 \rceil  if d>1
 | 
						|
  
 | 
						|
  \right.
 | 
						|
</center>
 | 
						|
<p>
 | 
						|
Note that the number of bytes per line can be larger than the minimum
 | 
						|
value imposed by the right side of this equation.  A frontend must be
 | 
						|
able to properly cope with such ``padded'' image formats.
 | 
						|
 | 
						|
<p><h3><a name="s4.3.9">4.3.9 <tt>sane_start</tt></a></h3>
 | 
						|
 | 
						|
<p>This function initiates aquisition of an image from the device
 | 
						|
represented by handle <tt>h</tt>.
 | 
						|
<blockquote><a name="i99">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_start (SANE_Handle h);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
This function may fail with one of the following status codes.
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
<dt><tt>SANE_STATUS_CANCELLED</tt>:<dd> The operation was cancelled through
 | 
						|
  a call to <tt>sane_cancel</tt>.
 | 
						|
<dt><tt>SANE_STATUS_DEVICE_BUSY</tt>:<dd> The device is busy. The
 | 
						|
  operation should be retried later.
 | 
						|
<dt><tt>SANE_STATUS_JAMMED</tt>:<dd> The document feeder is jammed.
 | 
						|
<dt><tt>SANE_STATUS_NO_DOCS</tt>:<dd> The document feeder is out of
 | 
						|
  documents.
 | 
						|
<dt><tt>SANE_STATUS_COVER_OPEN</tt>:<dd> The scanner cover is open.
 | 
						|
<dt><tt>SANE_STATUS_IO_ERROR</tt>:<dd> An error occurred while communicating
 | 
						|
  with the device.
 | 
						|
<dt><tt>SANE_STATUS_NO_MEM</tt>:<dd> An insufficent amount of memory
 | 
						|
  is available.
 | 
						|
<dt><tt>SANE_STATUS_INVAL</tt>:<dd> The scan cannot be started with the current
 | 
						|
  set of options. The frontend should reload the option descriptors, as if
 | 
						|
  <tt>SANE_INFO_RELOAD_OPTIONS<a name="i100"></tt> had been returned from a call to
 | 
						|
  <tt>sane_control_option()</tt>, since the device's capabilities may have
 | 
						|
  changed.
 | 
						|
</dl>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.10">4.3.10 <tt>sane_read</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to read image data from the device represented
 | 
						|
by handle <tt>h</tt>.  Argument <tt>buf</tt> is a pointer to a memory area
 | 
						|
that is at least <tt>maxlen</tt> bytes long.  The number of bytes
 | 
						|
returned is stored in <tt>*len</tt>.  A backend must set this to zero
 | 
						|
when a status other than <tt>SANE_STATUS_GOOD</tt> is returned.
 | 
						|
When the call succeeds, the number of bytes returned can be anywhere in
 | 
						|
the range from 0 to <tt>maxlen</tt> bytes.
 | 
						|
<blockquote><a name="i101">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_read (SANE_Handle h, SANE_Byte * buf,
 | 
						|
                       SANE_Int maxlen, SANE_Int * len);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
If this function is called when no data is available, one of two
 | 
						|
things may happen, depending on the I/O mode that is in effect for
 | 
						|
handle <tt>h</tt>.
 | 
						|
<ol>
 | 
						|
<li>If the device is in blocking I/O mode (the default mode), the
 | 
						|
  call blocks until at least one data byte is available (or until some
 | 
						|
  error occurs).
 | 
						|
 | 
						|
<p><li>If the device is in non-blocking I/O mode, the call returns
 | 
						|
  immediately with status <tt>SANE_STATUS_GOOD</tt> and with
 | 
						|
  <tt>*len</tt> set to zero.
 | 
						|
</ol>
 | 
						|
The I/O mode of handle <tt>h</tt> can be set via a call to
 | 
						|
<tt>sane_set_io_mode()</tt>.
 | 
						|
 | 
						|
<p>This function may fail with one of the following status codes.
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
<dt><tt>SANE_STATUS_CANCELLED</tt>:<dd> The operation was cancelled through
 | 
						|
  a call to <tt>sane_cancel</tt>.
 | 
						|
<dt><tt>SANE_STATUS_EOF</tt>:<dd> No more data is available for the
 | 
						|
  current frame.
 | 
						|
<dt><tt>SANE_STATUS_JAMMED</tt>:<dd> The document feeder is jammed.
 | 
						|
<dt><tt>SANE_STATUS_NO_DOCS</tt>:<dd> The document feeder is out of
 | 
						|
  documents.
 | 
						|
<dt><tt>SANE_STATUS_COVER_OPEN</tt>:<dd> The scanner cover is open.
 | 
						|
<dt><tt>SANE_STATUS_IO_ERROR</tt>:<dd> An error occurred while communicating
 | 
						|
  with the device.
 | 
						|
<dt><tt>SANE_STATUS_NO_MEM</tt>:<dd> An insufficent amount of memory
 | 
						|
  is available.
 | 
						|
<dt><tt>SANE_STATUS_ACCESS_DENIED</tt>:<dd> Access to the device has
 | 
						|
  been denied due to insufficient or invalid authentication.
 | 
						|
</dl>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.11">4.3.11 <tt>sane_cancel</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to immediately or as quickly as possible cancel
 | 
						|
the currently pending operation of the device represented by handle
 | 
						|
<tt>h</tt>.
 | 
						|
<blockquote><a name="i102">
 | 
						|
<pre>
 | 
						|
void sane_cancel (SANE_Handle h);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
This function can be called at any time (as long as handle <tt>h</tt> is
 | 
						|
a valid handle) but usually affects long-running operations only (such
 | 
						|
as image is acquisition).  It is safe to call this function
 | 
						|
asynchronously (e.g., from within a signal handler).  It is important
 | 
						|
to note that completion of this operaton does <em>not</em> imply that
 | 
						|
the currently pending operation has been cancelled.  It only
 | 
						|
guarantees that cancellation has been <em>initiated</em>.  Cancellation
 | 
						|
completes only when the cancelled call returns (typically with a
 | 
						|
status value of <tt>SANE_STATUS_CANCELLED</tt>).  Since the SANE API
 | 
						|
does not require any other operations to be re-entrant, this implies
 | 
						|
that a frontend must <em>not</em> call any other operation until the
 | 
						|
cancelled operation has returned.
 | 
						|
 | 
						|
<p><h3><a name="s4.3.12">4.3.12 <tt>sane_set_io_mode</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to set the I/O mode of handle <tt>h</tt>.  The I/O mode
 | 
						|
can be either blocking or non-blocking.  If argument <tt>m</tt> is
 | 
						|
<tt>SANE_TRUE</tt>, the mode is set to non-blocking mode, otherwise it's set to
 | 
						|
blocking mode.  This function can be called only after a call to
 | 
						|
<tt>sane_start()</tt> has been performed.
 | 
						|
<blockquote><a name="i103">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_set_io_mode (SANE_Handle h, SANE_Bool m);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
By default, newly opened handles operate in blocking mode.  A backend
 | 
						|
may elect not to support non-blocking I/O mode.  In such a case the
 | 
						|
status value <tt>SANE_STATUS_UNSUPPORTED</tt> is returned.  Blocking
 | 
						|
I/O must be supported by all backends, so calling this function with
 | 
						|
argument <tt>m</tt> set to <tt>SANE_FALSE</tt> is guaranteed to complete
 | 
						|
successfully.
 | 
						|
 | 
						|
<p>This function may fail with one of the following status codes:
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
<dt><tt>SANE_STATUS_INVAL</tt>:<dd> No image acquisition is pending.
 | 
						|
<dt><tt>SANE_STATUS_UNSUPPORTED</tt>:<dd> The backend does not support
 | 
						|
  the requested I/O mode.
 | 
						|
</dl>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.13">4.3.13 <tt>sane_get_select_fd</tt></a></h3>
 | 
						|
 | 
						|
<p>This function is used to obtain a (platform-specific) file-descriptor
 | 
						|
for handle <tt>h</tt> that is readable if and only if image data is
 | 
						|
available (i.e., when a call to <tt>sane_read()</tt> will return at
 | 
						|
least one byte of data).  If the call completes successfully, the
 | 
						|
select file-descriptor is returned in <tt>*fd</tt>.
 | 
						|
<blockquote><a name="i104">
 | 
						|
<pre>
 | 
						|
SANE_Status sane_get_select_fd (SANE_Handle h, SANE_Int *fd);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
This function can be called only after a call to <tt>sane_start()</tt>
 | 
						|
has been performed and the returned file-descriptor is guaranteed to
 | 
						|
remain valid for the duration of the current image acquisition (i.e.,
 | 
						|
until <tt>sane_cancel()</tt> or <tt>sane_start()</tt> get called again
 | 
						|
or until <tt>sane_read()</tt> returns with status
 | 
						|
<tt>SANE_STATUS_EOF</tt>).  Indeed, a backend must guarantee to
 | 
						|
close the returned select file descriptor at the point when the next
 | 
						|
<tt>sane_read()</tt> call would return <tt>SANE_STATUS_EOF</tt>.
 | 
						|
This is necessary to ensure the application can detect when this
 | 
						|
condition occurs without actually having to call <tt>sane_read()</tt>.
 | 
						|
 | 
						|
<p>A backend may elect not to support this operation.  In such a case,
 | 
						|
the function returns with status code
 | 
						|
<tt>SANE_STATUS_UNSUPPORTED</tt>.
 | 
						|
 | 
						|
<p>Note that the only operation supported by the returned file-descriptor
 | 
						|
is a host operating-system dependent test whether the file-descriptor
 | 
						|
is readable (e.g., this test can be implemented using <tt>select()</tt>
 | 
						|
or <tt>poll()</tt> under UNIX).  If any other operation is performed on
 | 
						|
the file descriptor, the behavior of the backend becomes
 | 
						|
unpredictable.  Once the file-descriptor signals ``readable'' status,
 | 
						|
it will remain in that state until a call to <tt>sane_read()</tt> is
 | 
						|
performed.  Since many input devices are very slow, support for this
 | 
						|
operation is strongly encouraged as it permits an application to do
 | 
						|
other work while image acquisition is in progress.
 | 
						|
 | 
						|
<p>This function may fail with one of the following status codes:
 | 
						|
<blockquote>
 | 
						|
<dl>
 | 
						|
<dt><tt>SANE_STATUS_INVAL</tt>:<dd> No image acquisition is pending.
 | 
						|
<dt><tt>SANE_STATUS_UNSUPPORTED</tt>:<dd> The backend does not support
 | 
						|
  this operation.
 | 
						|
</dl>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><h3><a name="s4.3.14">4.3.14 <tt>sane_strstatus</tt></a></h3>
 | 
						|
 | 
						|
<p>This function can be used to translate a SANE status code into a
 | 
						|
printable string.  The returned string is a single line of text that
 | 
						|
forms a complete sentence, but without the trailing period
 | 
						|
(full-stop).  The function is guaranteed to never return <tt>NULL</tt>.
 | 
						|
The returned pointer is valid at least until the next call to this
 | 
						|
function is performed.
 | 
						|
<blockquote><a name="i105">
 | 
						|
<pre>
 | 
						|
const SANE_String_Const sane_strstatus (SANE_Status status);
 | 
						|
</pre>
 | 
						|
</blockquote>
 | 
						|
 | 
						|
<p><p><hr>
 | 
						|
<a href="doc013.html"><img src=../icons/next.gif alt="Next"></a>
 | 
						|
<a href="doc000.html"><img src=../icons/up.gif alt="Up"></a>
 | 
						|
<a href="doc011.html"><img src=../icons/previous.gif alt="Previous"></a>
 | 
						|
<a href="doc000.html"><img src=../icons/contents.gif alt="Contents"></a>
 | 
						|
<a href="doc019.html"><img src=../icons/index.gif alt="Index"></a>
 | 
						|
<hr>
 | 
						|
</body></html>
 |