diff options
Diffstat (limited to 'sanei/sanei_DomainOS.h')
-rwxr-xr-x | sanei/sanei_DomainOS.h | 76 |
1 files changed, 76 insertions, 0 deletions
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*/ + |