kopia lustrzana https://gitlab.com/sane-project/website
				
				
				
			
		
			
				
	
	
		
			100 wiersze
		
	
	
		
			4.9 KiB
		
	
	
	
		
			HTML
		
	
	
			
		
		
	
	
			100 wiersze
		
	
	
		
			4.9 KiB
		
	
	
	
		
			HTML
		
	
	
| <html><body>
 | |
| <a href="doc014.html"><img src=../icons/next.gif alt="Next"></a>
 | |
| <a href="doc000.html"><img src=../icons/up.gif alt="Up"></a>
 | |
| <a href="doc012.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>Code Flow</title>
 | |
| <h2><a name="s4.4">4.4 Code Flow</a></h2><a name="i106">
 | |
| 
 | |
| <p>The code flow for the SANE API is illustrated in
 | |
| Figure <a href="doc013.html#f4">4</a>.  Functions <tt>sane_init()</tt> and
 | |
| <tt>sane_exit()</tt> initialize and exit the backend, respectively.
 | |
| All other calls must be performed after initialization and before
 | |
| exiting the backend.
 | |
| 
 | |
| <p><p><a name="f4"></a>
 | |
|   <center>
 | |
|     
 | |
|     <img width=566 height=510 src="img003.gif">
 | |
|     <p><center>Figure 4: Code flow</center>
 | |
|     
 | |
|   </center>
 | |
| <p>
 | |
| 
 | |
| <p>Function <tt>sane_get_devices()</tt> can be called any time after
 | |
| <tt>sane_init()</tt> has been called.  It returns the list of the
 | |
| devices that are known at the time of the call.  This list may change
 | |
| over time since some devices may be turned on or off or a remote host
 | |
| may boot or shutdown between different calls.  It should be noted that
 | |
| this operation may be relatively slow since it requires contacting all
 | |
| configured devices (some of which may be on remote hosts).  A frontend
 | |
| may therefore want to provide the ability for a user to directly
 | |
| select a desired device without requiring a call to this function.
 | |
| 
 | |
| <p>Once a device has been chosen, it is opened using a call to
 | |
| <tt>sane_open()</tt>.  Multiple devices can be open at any given time.
 | |
| A SANE backend must not impose artificial constraints on how many
 | |
| devices can be open at any given time.
 | |
| 
 | |
| <p>An opened device can be setup through the corresponding device handle
 | |
| using functions <tt>sane_get_option_descriptor()</tt> and
 | |
| <tt>sane_control_option()</tt>.  While setting up a device, obtaining
 | |
| option descriptors and setting and reading of option values can be
 | |
| mixed freely.  It is typical for a frontend to read out all available
 | |
| options at the beginning and then build a dialog (either graphical or
 | |
| a command-line oriented option list) that allows to control the
 | |
| available options.  It should be noted that the number of options is
 | |
| fixed for a given handle.  However, as options are set, other options
 | |
| may become active or inactive.  Thus, after setting an option, it
 | |
| maybe necessary to re-read some or all option descriptors.  While
 | |
| setting up the device, it is also admissible to call
 | |
| <tt>sane_get_parameters()</tt> to get an estimate of what the image
 | |
| parameters will look like once image acquisition begins.
 | |
| 
 | |
| <p>The device handle can be put in blocking or non-blocking mode by a
 | |
| call to <tt>sane_set_io_mode()</tt>.  Devices are required to support
 | |
| blocking mode (which is the default mode), but support for
 | |
| non-blocking I/O is strongly encouraged for operating systems such as
 | |
| UNIX.
 | |
| 
 | |
| <p>After the device is setup properly, image acquisition can be started
 | |
| by a call to <tt>sane_start()</tt>.  The backend calculates the exact
 | |
| image parameters at this point.  So future calls to
 | |
| <tt>sane_get_parameters()</tt> will return the exact values, rather
 | |
| than estimates.  Whether the physical image acquisition starts at this
 | |
| point or during the first call to <tt>sane_read()</tt> is unspecified
 | |
| by the SANE API.  If non-blocking I/O and/or a select-style interface
 | |
| is desired, the frontend may attempt to call
 | |
| <tt>sane_set_io_mode()</tt> and/or <tt>sane_get_select_fd()</tt> at
 | |
| this point.  Either of these functions may fail if the backend does
 | |
| not support the requested operation.
 | |
| 
 | |
| <p>Image data is collected by repeatedly calling <tt>sane_read()</tt>.
 | |
| Eventually, this function will return an end-of-file status
 | |
| (<tt>SANE_STATUS_EOF</tt>).  This indicates the end of the current
 | |
| frame.  If the frontend expects additional frames (e.g., the
 | |
| individual channels in of a red/green/blue image or multiple images),
 | |
| it can call <tt>sane_start()</tt> again.  Once all desired frames have
 | |
| been acquired, function <tt>sane_cancel()</tt> must be called.  This
 | |
| operation can also be called at any other time to cancel a pending
 | |
| operation.  Note that <tt>sane_cancel()</tt> must be called even if the
 | |
| last read operation returned <tt>SANE_STATUS_EOF</tt>.
 | |
| 
 | |
| <p>When done using the device, the handle should be closed by a call to
 | |
| <tt>sane_close()</tt>.  Finally, before exiting the application,
 | |
| function <tt>sane_exit()</tt> must be called.  It is important not to
 | |
| forget to call this function since otherwise some resources (e.g.,
 | |
| temporary files or locks) may remain unclaimed.
 | |
| 
 | |
| <p><p><hr>
 | |
| <a href="doc014.html"><img src=../icons/next.gif alt="Next"></a>
 | |
| <a href="doc000.html"><img src=../icons/up.gif alt="Up"></a>
 | |
| <a href="doc012.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>
 |