ScsiDefs.pas
上传用户:wanyu_2000
上传日期:2021-02-21
资源大小:527k
文件大小:17k
源码类别:

DVD

开发平台:

Delphi

  1. unit SCSIDefs;
  2. {-----------------------------------------------------------------------------
  3.  Unit Name: ScsiDEfs
  4.  Author:    Sergey Kabikov
  5.  Purpose:
  6.  History:
  7.  Added Definitions by Dancemammal  www.dancemammal.com
  8. -----------------------------------------------------------------------------}
  9. interface
  10. uses windows, wnaspi32;
  11. const
  12.   //***************************************************************************
  13.   // %%% TARGET STATUS VALUES %%%
  14.   //***************************************************************************
  15.   STATUS_GOOD = $00;     // Status Good
  16.   STATUS_COMP = $01;     // Completed without error
  17.   STATUS_CHKCOND = $02;  // Check Condition
  18.   STATUS_CONDMET = $04;  // Condition Met
  19.   STATUS_BUSY = $08;     // Busy
  20.   STATUS_INTERM = $10;   // Intermediate
  21.   STATUS_INTCDMET = $14; // Intermediate-condition met
  22.   STATUS_RESCONF = $18;  // Reservation conflict
  23.   STATUS_COMTERM = $22;  // Command Terminated
  24.   STATUS_QFULL = $28;    // Queue full
  25.   //***************************************************************************
  26.   // %%% SCSI MISCELLANEOUS EQUATES %%%
  27.   //***************************************************************************
  28.   MAXLUN = 7; // Maximum Logical Unit Id
  29.   MAXTARG = 7; // Maximum Target Id
  30.   MAX_SCSI_LUNS = 64; // Maximum Number of SCSI LUNs
  31.   MAX_NUM_HA = 8; // Maximum Number of SCSI HA's
  32.   //---------------------------------------------------------------------------
  33.   //
  34.   // %%% SCSI COMMAND OPCODES %%%
  35.   //
  36.   //---------------------------------------------------------------------------
  37.   //***************************************************************************
  38.   //  %%% Commands for all Device Types %%%
  39.   //***************************************************************************
  40.   SCSI_CHANGE_DEF = $40; // Change Definition (Optional)
  41.   SCSI_COMPARE = $39; // Compare (O)
  42.   SCSI_COPY = $18; // Copy (O)
  43.   SCSI_COP_VERIFY = $3A; // Copy and Verify (O)
  44.   SCSI_INQUIRY = $12; // Inquiry (MANDATORY)
  45.   SCSI_LOG_SELECT = $4C; // Log Select (O)
  46.   SCSI_LOG_SENSE = $4D; // Log Sense (O)
  47.   SCSI_MODE_SEL6 = $15; // Mode Select 6-byte (Device Specific)
  48.   SCSI_MODE_SEL10 = $55; // Mode Select 10-byte (Device Specific)
  49.   SCSI_MODE_SEN6 = $1A; // Mode Sense 6-byte (Device Specific)
  50.   SCSI_MODE_SEN10 = $5A; // Mode Sense 10-byte (Device Specific)
  51.   SCSI_READ_BUFF = $3C; // Read Buffer (O)
  52.   SCSI_REQ_SENSE = $03; // Request Sense (MANDATORY)
  53.   SCSI_SEND_DIAG = $1D; // Send Diagnostic (O)
  54.   SCSI_TST_U_RDY = $00; // Test Unit Ready (MANDATORY)
  55.   SCSI_WRITE_BUFF = $3B; // Write Buffer (O)
  56.   //***************************************************************************
  57.   //   %%% Commands Unique to Direct Access Devices %%%
  58.   //***************************************************************************
  59.   // SCSI_COMPARE   =  $39; // Compare (O)
  60.   SCSI_FORMAT = $04; // Format Unit (MANDATORY)
  61.   SCSI_LCK_UN_CAC = $36; // Lock Unlock Cache (O)
  62.   SCSI_PREFETCH = $34; // Prefetch (O)
  63.   SCSI_MED_REMOVL = $1E; // Prevent/Allow medium Removal (O)
  64.   SCSI_READ6 = $08; // Read 6-byte (MANDATORY)
  65.   SCSI_READ10 = $28; // Read 10-byte (MANDATORY)
  66.   SCSI_RD_CAPAC = $25; // Read Capacity (MANDATORY)
  67.   SCSI_RD_DEFECT = $37; // Read Defect Data (O)
  68.   SCSI_READ_LONG = $3E; // Read Long (O)
  69.   SCSI_REASS_BLK = $07; // Reassign Blocks (O)
  70.   SCSI_RCV_DIAG = $1C; // Receive Diagnostic Results (O)
  71.   SCSI_RELEASE = $17; // Release Unit (MANDATORY)
  72.   SCSI_REZERO = $01; // Rezero Unit (O)
  73.   SCSI_SRCH_DAT_E = $31; // Search Data Equal (O)
  74.   SCSI_SRCH_DAT_H = $30; // Search Data High (O)
  75.   SCSI_SRCH_DAT_L = $32; // Search Data Low (O)
  76.   SCSI_SEEK6 = $0B; // Seek 6-Byte (O)
  77.   SCSI_SEEK10 = $2B; // Seek 10-Byte (O)
  78.   // SCSI_SEND_DIAG   =      $1D; // Send Diagnostics (MANDATORY)
  79.   SCSI_SET_LIMIT = $33; // Set Limits (O)
  80.   SCSI_START_STP = $1B; // Start/Stop Unit (O)
  81.   SCSI_SYNC_CACHE = $35; // Synchronize Cache (O)
  82.   SCSI_VERIFY = $2F; // Verify (O)
  83.   SCSI_WRITE6 = $0A; // Write 6-Byte (MANDATORY)
  84.   SCSI_WRITE10 = $2A; // Write 10-Byte (MANDATORY)
  85.   SCSI_WRITE12 = $AA; // Write 12-Byte (MANDATORY DVD)
  86.   SCSI_WRT_VERIFY = $2E; // Write and Verify (O)
  87.   SCSI_WRITE_LONG = $3F; // Write Long (O)
  88.   SCSI_WRITE_SAME = $41; // Write Same (O)
  89.   SCSI_READ_BUFFER_CAP = $5C; // Read Buffer Capabilities
  90.   SCSI_SEND_CUE_SHEET = $5D; // Send Cue Sheet
  91.   SCSI_GET_FORMAT_CAPACITY = $23; // Get CD /DVD Format Capacity
  92.   //***************************************************************************
  93.   // %%% Commands for erase and close %%%
  94.   //***************************************************************************
  95.    //TRACK / SESSION CLOSE
  96.   CLOSE_TRACK = $01;
  97.   CLOSE_SESSION = $02;
  98.   AC_BLANK = $A1;
  99.   AC_CLOSETRACKSESSION = $5B;
  100.   AC_SETCDSPEED = $BB;
  101.   //DISK ERASE TYPES
  102.   BLANK_DISC = $00;
  103.   BLANK_MINIMAL = $01;
  104.   BLANK_TRACK = $02;
  105.   UN_RESERVE_TRACK = $03;
  106.   BLANK_TRACK_TAIL = $04;
  107.   UNCLOSE_LAST_SESSION = $05;
  108.   ERASE_SESSION = $06;
  109.   SESSION_FORMAT = $10;
  110.   GROW_SESSION = $11;
  111.   ADD_SESSION = $12;
  112.   QUICK_GROW_LAST_SESSION = $13;
  113.   QUICK_ADD_SESSION = $14;
  114.   QUICK_SESSION_FORMAT = $15;
  115.   MRW_FULL_FORMAT = $24;
  116.   DVD_PLUS_RW_BASIC_FORMAT = $26;
  117.   //WRITE TYPES
  118.   PACKET_WRITE = $00;
  119.   TRACK_AT_ONCE = $01;
  120.   SESSION_AT_ONCE = $02;
  121.   RAW_DATA = $03;
  122.   //Track Modes
  123.   CDR_MODE_AUDIO = $01;
  124.   CDR_MODE_INCR_DATA = $01;
  125.   CDR_MODE_ALLOW_COPY = $02;
  126.   CDR_MODE_DATA = $04;
  127.   CDR_MODE_QUAD_AUDIO = $08;
  128.   CDR_MODE_DAO_96 = $3F;
  129.   //SESSION TYPES
  130.   CDROM_CDDA = $00;
  131.   CDI_DISK = $01;
  132.   CDROM_XA = $20;
  133.   //DATA BLOCK TYPES
  134.   RAW_DATA_BLOCK = $00;    // 2352 BYTES
  135.   RAW_DATA_P_Q_SUB = $01;  // 2368 BYTES
  136.   RAW_DATA_P_W_SUB = $02;  // 2448 BYTES
  137.   RAW_DATA_P_W_SUB2 = $03; // 2448 BYTES
  138.   MODE_1 = $08;            // 2048 BYTES
  139.   MODE_2 = $09;            // 2336 BYTES
  140.   MODE_2_XA_FORM_1 = $0A;  // 2048 BYTES
  141.   MODE_2_XA_FORM_1_SUB = $0B; // 2056 BYTES
  142.   MODE_2_XA_FORM_2 = $0C; // 2324 BYTES
  143.   MODE_2_XA_FORM_2_SUB = $0D; // 2332 BYTES
  144.   {SetCDSpeed}
  145.   SCDS_MAXSPEED = $FFFF;
  146.   SCDS_NONE = $00;
  147.   //***************************************************************************
  148.   // %%% Commands Unique to Sequential Access Devices %%%
  149.   //***************************************************************************
  150.   SCSI_ERASE = $19; // Erase (MANDATORY)
  151.   SCSI_LOAD_UN = $1B; // Load/Unload (O)
  152.   SCSI_LOCATE = $2B; // Locate (O)
  153.   SCSI_RD_BLK_LIM = $05; // Read Block Limits (MANDATORY)
  154.   SCSI_READ_POS = $34; // Read Position (O)
  155.   SCSI_READ_REV = $0F; // Read Reverse (O)
  156.   SCSI_REC_BF_DAT = $14; // Recover Buffer Data (O)
  157.   SCSI_RESERVE = $16; // Reserve Unit (MANDATORY)
  158.   SCSI_REWIND = $01; // Rewind (MANDATORY)
  159.   SCSI_SPACE = $11; // Space (MANDATORY)
  160.   SCSI_VERIFY_T = $13; // Verify (Tape) (O)
  161.   SCSI_WRT_FILE = $10; // Write Filemarks (MANDATORY)
  162.   //***************************************************************************
  163.   //   %%% Commands Unique to Printer Devices %%%
  164.   //***************************************************************************
  165.   SCSI_PRINT = $0A; // Print (MANDATORY)
  166.   SCSI_SLEW_PNT = $0B; // Slew and Print (O)
  167.   SCSI_STOP_PNT = $1B; // Stop Print (O)
  168.   SCSI_SYNC_BUFF = $10; // Synchronize Buffer (O)
  169.   //***************************************************************************
  170.   //  %%% Commands Unique to Processor Devices %%%
  171.   //***************************************************************************
  172.   SCSI_RECEIVE = $08; // Receive (O)
  173.   SCSI_SEND = $0A; // Send (O)
  174.   //***************************************************************************
  175.   // %%% Commands Unique to Write-Once Devices %%%
  176.   //***************************************************************************
  177.   SCSI_MEDIUM_SCN = $38; // Medium Scan (O)
  178.   SCSI_SRCHDATE10 = $31; // Search Data Equal 10-Byte (O)
  179.   SCSI_SRCHDATE12 = $B1; // Search Data Equal 12-Byte (O)
  180.   SCSI_SRCHDATH10 = $30; // Search Data High 10-Byte (O)
  181.   SCSI_SRCHDATH12 = $B0; // Search Data High 12-Byte (O)
  182.   SCSI_SRCHDATL10 = $32; // Search Data Low 10-Byte (O)
  183.   SCSI_SRCHDATL12 = $B2; // Search Data Low 12-Byte (O)
  184.   SCSI_SET_LIM_10 = $33; // Set Limits 10-Byte (O)
  185.   SCSI_SET_LIM_12 = $B3; // Set Limits 10-Byte (O)
  186.   SCSI_VERIFY10 = $2F; // Verify 10-Byte (O)
  187.   SCSI_VERIFY12 = $AF; // Verify 12-Byte (O)
  188.   SCSI_WRT_VER10 = $2E; // Write and Verify 10-Byte (O)
  189.   SCSI_WRT_VER12 = $AE; // Write and Verify 12-Byte (O)
  190.   //***************************************************************************
  191.   //   %%% Commands Unique to CD-ROM Devices %%%
  192.   //***************************************************************************
  193.   SCSI_PLAYAUD_10 = $45; // Play Audio 10-Byte (O)
  194.   SCSI_PLAYAUD_12 = $A5; // Play Audio 12-Byte 12-Byte (O)
  195.   SCSI_PLAYAUDMSF = $47; // Play Audio MSF (O)
  196.   SCSI_PLAYA_TKIN = $48; // Play Audio Track/Index (O)
  197.   SCSI_PLYTKREL10 = $49; // Play Track Relative 10-Byte (O)
  198.   SCSI_PLYTKREL12 = $A9; // Play Track Relative 12-Byte (O)
  199.   SCSI_READCDCAP = $25; // Read CD-ROM Capacity (MANDATORY)
  200.   SCSI_READHEADER = $44; // Read Header (O)
  201.   SCSI_SUBCHANNEL = $42; // Read Subchannel (O)
  202.   SCSI_READ_TOC = $43; // Read TOC (O)
  203.   //***************************************************************************
  204.   //   %%% Commands Unique to Scanner Devices %%%
  205.   //***************************************************************************
  206.   SCSI_GETDBSTAT = $34; // Get Data Buffer Status (O)
  207.   SCSI_GETWINDOW = $25; // Get Window (O)
  208.   SCSI_OBJECTPOS = $31; // Object Postion (O)
  209.   SCSI_SCAN = $1B; // Scan (O)
  210.   SCSI_SETWINDOW = $24; // Set Window (MANDATORY)
  211.   //***************************************************************************
  212.   //  %%% Commands Unique to Optical Memory Devices %%%
  213.   //***************************************************************************
  214.   SCSI_UpdateBlk = $3D; // Update Block (O)
  215.   //***************************************************************************
  216.   //  %%% Commands Unique to Medium Changer Devices %%%
  217.   //***************************************************************************
  218.   SCSI_EXCHMEDIUM = $A6; // Exchange Medium (O)
  219.   SCSI_INITELSTAT = $07; // Initialize Element Status (O)
  220.   SCSI_POSTOELEM = $2B; // Position to Element (O)
  221.   SCSI_REQ_VE_ADD = $B5; // Request Volume Element Address (O)
  222.   SCSI_SENDVOLTAG = $B6; // Send Volume Tag (O)
  223.   //***************************************************************************
  224.   //   %%% Commands Unique to Communication Devices %%%
  225.   //***************************************************************************
  226.   SCSI_GET_MSG_6 = $08; // Get Message 6-Byte (MANDATORY)
  227.   SCSI_GET_MSG_10 = $28; // Get Message 10-Byte (O)
  228.   SCSI_GET_MSG_12 = $A8; // Get Message 12-Byte (O)
  229.   SCSI_SND_MSG_6 = $0A; // Send Message 6-Byte (MANDATORY)
  230.   SCSI_SND_MSG_10 = $2A; // Send Message 10-Byte (O)
  231.   SCSI_SND_MSG_12 = $AA; // Send Message 12-Byte (O)
  232.   //---------------------------------------------------------------------------
  233.   //
  234.   //   %%% END OF SCSI COMMAND OPCODES %%%
  235.   //
  236.   //---------------------------------------------------------------------------
  237.   //***************************************************************************
  238.   // %%% Request Sense Data Format %%%
  239.   //***************************************************************************
  240. type
  241.   SENSE_DATA_FMT = record
  242.     ErrorCode, // Error Code (70H or 71H)
  243.     SegmentNum, // Number of current segment descriptor
  244.     SenseKey, // Sense Key(See bit definitions too)
  245.     InfoByte0, // Information MSB
  246.     InfoByte1, // Information MID
  247.     InfoByte2, // Information MID
  248.     InfoByte3, // Information LSB
  249.     AddSenLen, // Additional Sense Length
  250.     ComSpecInf0, // Command Specific Information MSB
  251.     ComSpecInf1, // Command Specific Information MID
  252.     ComSpecInf2, // Command Specific Information MID
  253.     ComSpecInf3, // Command Specific Information LSB
  254.     AddSenseCode, // Additional Sense Code
  255.     AddSenQual, // Additional Sense Code Qualifier
  256.     FieldRepUCode, // Field Replaceable Unit Code
  257.     SenKeySpec15, // Sense Key Specific 15th byte
  258.     SenKeySpec16, // Sense Key Specific 16th byte
  259.     SenKeySpec17, // Sense Key Specific 17th byte
  260.     AddSenseBytes: BYTE; // Additional Sense Bytes
  261.   end;
  262.   TSENSE_DATA_FMT = SENSE_DATA_FMT;
  263.   PSENSE_DATA_FMT = ^SENSE_DATA_FMT;
  264.   //***************************************************************************
  265.   //  %%% Scsi Defaults %%%
  266.   //***************************************************************************
  267.   //***************************************************************************
  268.   //  %%% REQUEST SENSE ERROR CODE %%%
  269.   //***************************************************************************
  270. const
  271.   SERROR_CURRENT = $70; // Current Errors
  272.   SERROR_DEFERED = $71; // Deferred Errors
  273.   //***************************************************************************
  274.   //  %%% REQUEST SENSE BIT DEFINITIONS %%%
  275.   //***************************************************************************
  276.   SENSE_VALID = $80; // Byte 0 Bit 7
  277.   SENSE_FILEMRK = $80; // Byte 2 Bit 7
  278.   SENSE_EOM = $40; // Byte 2 Bit 6
  279.   SENSE_ILI = $20; // Byte 2 Bit 5
  280.   //***************************************************************************
  281.   //  %%% REQUEST SENSE SENSE KEY DEFINITIONS %%%
  282.   //***************************************************************************
  283.   KEY_NOSENSE = $00; // No Sense
  284.   KEY_RECERROR = $01; // Recovered Error
  285.   KEY_NOTREADY = $02; // Not Ready
  286.   KEY_MEDIUMERR = $03; // Medium Error
  287.   KEY_HARDERROR = $04; // Hardware Error
  288.   KEY_ILLGLREQ = $05; // Illegal Request
  289.   KEY_UNITATT = $06; // Unit Attention
  290.   KEY_DATAPROT = $07; // Data Protect
  291.   KEY_BLANKCHK = $08; // Blank Check
  292.   KEY_VENDSPEC = $09; // Vendor Specific
  293.   KEY_COPYABORT = $0A; // Copy Abort
  294.   KEY_EQUAL = $0C; // Equal (Search)
  295.   KEY_VOLOVRFLW = $0D; // Volume Overflow
  296.   KEY_MISCOMP = $0E; // Miscompare (Search)
  297.   KEY_RESERVED = $0F; // Reserved
  298.   //***************************************************************************
  299.   //   %%% PERIPHERAL DEVICE TYPE DEFINITIONS %%%
  300.   //***************************************************************************
  301.   DTYPE_DISKDEV = $00; // Disk Device
  302.   DTYPE_TAPEDEV = $01; // Tape Device
  303.   DTYPE_PRINTER = $02; // Printer
  304.   DTYPE_PROCESSER = $03; // Processor
  305.   DTYPE_WORM = $04; // Write-once read-multiple
  306.   DTYPE_CDROM = $05; // CD-ROM device
  307.   DTYPE_SCANNER = $06; // Scanner device
  308.   DTYPE_OPTICAL = $07; // Optical memory device
  309.   DTYPE_JUKEBOX = $08; // Medium Changer device
  310.   DTYPE_COMMS = $09; // Communications device
  311.   DTYPE_RESL = $0A; // Reserved (low)
  312.   DTYPE_RESH = $1E; // Reserved (high)
  313.   DTYPE_UNKNOWN = $1F; // Unknown or no device type
  314.   //***************************************************************************
  315.   //   %%% ANSI APPROVED VERSION DEFINITIONS %%%
  316.   //***************************************************************************
  317.   ANSI_MAYBE = $0; // Device may or may not be ANSI approved stand
  318.   ANSI_SCSI1 = $1; // Device complies to ANSI X3.131-1986 (SCSI-1)
  319.   ANSI_SCSI2 = $2; // Device complies to SCSI-2
  320.   ANSI_RESLO = $3; // Reserved (low)
  321.   ANSI_RESHI = $7; // Reserved (high)
  322.   //***************************************************************************
  323.          {ModeParametersHeader -> Medium types}
  324.   //***************************************************************************
  325.   MT_UNKNOWN = $00;
  326.   MT_CDROMDATA120 = $01;
  327.   MT_CDAUDIO120 = $02;
  328.   MT_CDROMMIXED120 = $03;
  329.   MT_CDROMHYBRID120 = $04;
  330.   MT_CDROMDATA80 = $05;
  331.   MT_CDAUDIO80 = $06;
  332.   MT_CDROMMIXED80 = $07;
  333.   MT_CDROMHYBRID80 = $08;
  334.   MT_CDRUNKNOWN = $10;
  335.   MT_CDRDATA120 = $11;
  336.   MT_CDRAUDIO120 = $12;
  337.   MT_CDRMIXED120 = $13;
  338.   MT_CDRHYBRID120 = $14;
  339.   MT_CDRDATA80 = $15;
  340.   MT_CDRAUDIO80 = $16;
  341.   MT_CDRMIXED80 = $17;
  342.   MT_CDRHYBRID80 = $18;
  343.   MT_CDRWUNKNOWN = $20;
  344.   MT_CDRWDATA120 = $21;
  345.   MT_CDRWAUDIO120 = $22;
  346.   MT_CDRWMIXED120 = $23;
  347.   MT_CDRWHYBRID120 = $24;
  348.   MT_CDRWDATA80 = $25;
  349.   MT_CDRWAUDIO80 = $26;
  350.   MT_CDRWMIXED80 = $27;
  351.   MT_CDRWHYBRID80 = $28;
  352.   MT_NODISC = $70;
  353.   MT_DOOROPEN = $71;
  354.   //***************************************************************************
  355.          {CDText Consts}
  356.   //***************************************************************************
  357.   CD_TEXT_PACK_ALBUM_NAME = $80;
  358.   CD_TEXT_PACK_PERFORMER = $81;
  359.   CD_TEXT_PACK_SONGWRITER = $82;
  360.   CD_TEXT_PACK_COMPOSER = $83;
  361.   CD_TEXT_PACK_ARRANGER = $84;
  362.   CD_TEXT_PACK_MESSAGES = $85;
  363.   CD_TEXT_PACK_DISC_ID = $86;
  364.   CD_TEXT_PACK_GENRE = $87;
  365.   CD_TEXT_PACK_TOC_INFO = $88;
  366.   CD_TEXT_PACK_TOC_INFO2 = $89;
  367.   CD_TEXT_PACK_UPC_EAN = $8E;
  368.   CD_TEXT_PACK_SIZE_INFO = $8F;
  369. implementation
  370. end.