kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			
		
			
				
	
	
		
			76 wiersze
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			76 wiersze
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
/*
 | 
						|
This file defines the structure of the communication area used by the
 | 
						|
SANE Domain/OS server.  This area must be initialized before the server
 | 
						|
is invoked with a path to the area.
 | 
						|
 | 
						|
To send an open command to the server, follow these steps:
 | 
						|
    1) Obtain a mutex lock on CommandLock.
 | 
						|
    2) Fill in opcode and open_path variables.
 | 
						|
    3) Advance the CommandAvailable EC.
 | 
						|
    4) Wait for the CommandAccepted EC to advance.
 | 
						|
    5) Get the CommandStatus, which has the Domain/OS completion status.
 | 
						|
       Get the fd value, which will be used for subsequent commands.
 | 
						|
       Use the open_path variable to map the data section for the device.
 | 
						|
    6) Release the CommandLock mutex lock.
 | 
						|
 | 
						|
To send a close command to the server, follow these steps:
 | 
						|
    1) Obtain a mutex lock on CommandLock.
 | 
						|
    2) Fill in appropriate Command Data Areas.
 | 
						|
    3) Advance the CommandAvailable EC.
 | 
						|
    4) Wait for the CommandAccepted EC to advance.
 | 
						|
    5) Get the CommandStatus, which has the Domain/OS completion status.
 | 
						|
    6) Release the CommandLock mutex lock.
 | 
						|
 | 
						|
To send an enter command to the server, follow these steps:
 | 
						|
    1) Obtain a mutex lock on CommandLock.
 | 
						|
    2) Fill in the fd field.
 | 
						|
    3) Advance the CommandAvailable EC.
 | 
						|
    4) Wait for the CommandAccepted EC to advance.
 | 
						|
    5) Get the handle for the command.
 | 
						|
    5) Release the CommandLock mutex lock.
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
#ifndef DomainSenseSize
 | 
						|
 | 
						|
/* Amount of data in a sense request */
 | 
						|
#define DomainSenseSize 18
 | 
						|
 | 
						|
/* Maximum amount of data in a transfer, per Domain/OS SCSI spec */
 | 
						|
#define DomainMaxDataSize (32 * 1024)
 | 
						|
 | 
						|
/* Timeout for ec2_$wait calls, in 1/4 second intervals */
 | 
						|
#define DomainECWaitConstant 120
 | 
						|
 | 
						|
typedef enum {Open, Close, Enter, Exit} DomainOSOpCode;
 | 
						|
 | 
						|
struct DomainServerCommon
 | 
						|
   {
 | 
						|
   /* Basic communication/synchronization items */
 | 
						|
   ec2_$eventcount_t CommandAvailable;
 | 
						|
   ec2_$eventcount_t CommandAccepted;
 | 
						|
   ec2_$eventcount_t ResultReady;
 | 
						|
   ec2_$eventcount_t ResultAccepted;
 | 
						|
   mutex_$lock_rec_t CommandLock;
 | 
						|
   mutex_$lock_rec_t ResultLock;
 | 
						|
 | 
						|
   /* Command Data Areas - locked by CommandLock */
 | 
						|
   DomainOSOpCode opcode;
 | 
						|
   int fd;
 | 
						|
   name_$long_pname_t open_path;
 | 
						|
   status_$t CommandStatus;
 | 
						|
   scsi_$status_t SCSIStatus;
 | 
						|
   unsigned long CommandHandle;
 | 
						|
   linteger cdb_size;
 | 
						|
   scsi_$cdb_t cdb;
 | 
						|
   scsi_$direction_t direction;
 | 
						|
   size_t dst_size;
 | 
						|
   size_t buf_size;
 | 
						|
 | 
						|
   /* Result data areas */
 | 
						|
   status_$t status;
 | 
						|
   };
 | 
						|
 | 
						|
#endif /*DomainSenseSize*/
 |