home *** CD-ROM | disk | FTP | other *** search
/ Media Share 13 / mediashare_13.zip / mediashare_13 / ZIPPED / PROGRAM / DDJ9403A.ZIP / ASPI.ZIP / SCSI.H < prev    next >
C/C++ Source or Header  |  1993-11-10  |  6KB  |  143 lines

  1. // ----------------------------------------------------------------------
  2. // Module SCSI.H
  3. // Declarations for SCSI constants and structures.
  4. //
  5. // Copyright (C) 1993, Brian Sawert.
  6. // All rights reserved.
  7. //
  8. // ----------------------------------------------------------------------
  9.  
  10.  
  11. #ifndef    _SCSI_H                            // check for multiple inclusion
  12. #define _SCSI_H
  13.  
  14.  
  15. // ----------------------------------------------------------------------
  16. // Equates and defines.
  17. // ----------------------------------------------------------------------
  18.  
  19. #define MIN_GRP_1        0x20            // minimum group 1 command
  20. #define MIN_GRP_6        0xc0            // minimum group 6 command
  21.                                         // (vendor specific)
  22. #define MAX_TARG_ID        6                // ID 7 reserved for host
  23. #define SDM_VALID         0x80            // mask for sense data valid bit
  24. #define SDM_ERRCODE        0x1                // mask for sense data error code
  25. #define SDM_EOM            0x40            // mask for sense data EOM bit
  26. #define SDM_ILI            0x20            // mask for sense data ILI bit
  27. #define SDM_SKEY        0x7                // mask for sense data sense key
  28. #define IDM_PTYPE        0x1ff            // mask for inquiry peripheral type
  29. #define IDM_PTQUAL        0xe00            // mask for inquiry peripheral qualifier
  30. #define IDM_DTQUAL        0x7ff            // mask for inquiry device qualifier
  31. #define IDM_DATAFMT        0x7                // mask for inquiry response format
  32. #define DIAG_STEST        0x4                // bit for self test in diagnostic
  33. #define MODE_PG_FMT        0x10            // page format bit for mode select
  34.  
  35.  
  36. // ----------------------------------------------------------------------
  37. // SCSI structure definitions.
  38. // ----------------------------------------------------------------------
  39.  
  40. // -------------------- SCSI Command Descriptor Block (CDB) --------------------
  41.  
  42. typedef struct group_0
  43.     {                                    // 6 byte CDB
  44.     BYTE opcode;                        // command code
  45.     BYTE lun;                            // logical unit number
  46.     BYTE params[3];                        // command specific parameters
  47.     BYTE reserved;                        // reserved byte
  48.     } group_0_t;
  49.  
  50. typedef struct group_1
  51.     {                                    // 10 byte CDB
  52.     BYTE opcode;                        // command code
  53.     BYTE lun;                            // logical unit number
  54.     BYTE params[7];                        // command specific parameters
  55.     BYTE reserved;                        // reserved byte
  56.     } group_1_t;
  57.  
  58.  
  59. // -------------------- SCSI Sense Data Block --------------------
  60.  
  61. typedef struct sense_block
  62.     {                                    // sense data block
  63.     BYTE errcode;                        // error code
  64.                                         // bit 7 = valid
  65.                                         // bits 0-6 = error code
  66.                                         // (070h current, 071h deferred)    
  67.     BYTE segment;                        // segment number
  68.     BYTE skey;                            // sense key
  69.                                         // bit 6 = EOM
  70.                                         // bit 5 = ILI
  71.                                         // bit 0-3 = sense key
  72.     BYTE info[4];                        // information bytes
  73.                                         // (remaining bytes if ILI set)
  74.     BYTE length;                        // additional sense length (0ah)
  75.     BYTE specific[4];                    // command specific information
  76.     BYTE scode;                            // additional sense code
  77.     BYTE scodequal;                        // additional sense code qualifier
  78.     BYTE frucode;                        // field replaceable unit code
  79.     BYTE skspec[3];                        // sense key specific bytes
  80.     } sense_block_t;
  81.  
  82.  
  83. // -------------------- SCSI Inquiry Data Block --------------------
  84.  
  85. typedef struct inquire_block
  86.     {                                    // block for inquiry data
  87.     BYTE devtype;                        // device type (6 for scanner)
  88.     BYTE devqual;                        // device type qualifier
  89.     BYTE version;                        // version codes
  90.     BYTE format;                        // data format codes
  91.     BYTE length;                        // additional data length
  92.     BYTE reserved_1[2];                    // reserved bytes
  93.     BYTE capable;                        // capability bit flags
  94.     char vendid[8];                        // vendor ID field
  95.     char prodid[16];                    // product ID field
  96.     char revlev[4];                        // product revision level
  97.     char reserved_2[60];                // more reserved bytes
  98.     } inquire_block_t;
  99.  
  100.  
  101. // ----------------------------------------------------------------------
  102. // SCSI command constants.
  103. // ----------------------------------------------------------------------
  104.  
  105. #define SC_TEST_UNIT_READY    0x0            // test unit ready
  106. #define SC_READ_SENSE        0x3            // request sense data
  107. #define SC_READ_6            0x8            // Group 0 read command
  108. #define SC_WRITE_6            0xa            // Group 0 write command
  109. #define SC_INQUIRY            0x12        // SCSI device inquiry
  110. #define SC_MODE_SELECT        0x15        // set mode information
  111. #define SC_RESERVE_UNIT        0x16        // reserve SCSI device
  112. #define SC_RELEASE_UNIT        0x17        // release SCSI device
  113. #define SC_MODE_SENSE        0x1a        // request mode information
  114. #define SC_SCAN_WINDOW        0x1b        // SCSI scan command
  115. #define SC_SEND_DIAGNOSTIC    0x1d        // request target self check
  116. #define SC_SET_WINDOW        0x24        // set window parameters
  117. #define SC_GET_WINDOW        0x25        // get window parameters
  118. #define SC_READ_G1            0x28        // Group 1 read command
  119. #define SC_SEND_G1            0x2a        // Group 1 send command
  120. #define SC_OBJECT_POSITION    0x31        // document feeder control
  121. #define SC_DATA_STATUS        0x34        // get scan data status
  122.  
  123.  
  124. // -------------------- vendor specific commands --------------------
  125.  
  126. #define SC_GET_ADF_STATUS    0xd3h        // get doc feeder status
  127. #define SC_SET_ADF_MODE        0xd4h        // set doc feeder mode
  128.  
  129.  
  130. // ----------------------------------------------------------------------
  131. // SCSI sense key values.
  132. // ----------------------------------------------------------------------
  133.  
  134. #define SK_NO_SENSE            0x0            // no sense data
  135. #define SK_NOT_READY        0x2            // SCSI unit not ready
  136. #define SK_MEDIUM_ERROR        0x3            // medium error (paper feed)
  137. #define SK_HARDWARE_ERROR    0x4            // unrecoverable hardware error
  138. #define SK_ILLEGAL_REQUEST    0x5            // illegal parameter in CDB
  139. #define SK_UNIT_ATTENTION    0x6            // target has been reset
  140. #define SK_ABORTED_COMMAND    0xb            // target aborted command
  141.  
  142. #endif
  143.