From 6e9c41a892ed0e0da326e0278b3221ce3f5713b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Mon, 6 Oct 2014 14:00:40 +0200 Subject: Initial import of sane-backends version 1.0.24-1.2 --- sanei/sanei_DomainOS.h | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100755 sanei/sanei_DomainOS.h (limited to 'sanei/sanei_DomainOS.h') diff --git a/sanei/sanei_DomainOS.h b/sanei/sanei_DomainOS.h new file mode 100755 index 0000000..ff93503 --- /dev/null +++ b/sanei/sanei_DomainOS.h @@ -0,0 +1,76 @@ +/* +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 amound 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*/ + -- cgit v1.2.3