123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- #ifndef ASPI_INCLUDED
- #define ASPI_INCLUDED
- #include <Windows.h>
- #include <Stdio.h>
- #include <Stdlib.h>
- // Handle to the ASPI libaray
- extern HINSTANCE hAspiLib;
- void GetAspiError(int nErrorCode,LPSTR lpszError);
- // 1 byte alignment or SCSI structures
- #pragma pack(push,1)
- #define MAX_SCSIDEVICES 16
- #define TIMEOUT 10000
- typedef void (*POSTPROCFUNC)();
- typedef struct TOC_TAG
- {
- BYTE _reserved1;
- BYTE bFlags;
- BYTE bTrack;
- BYTE _reserved2;
- DWORD dwStartSector;
- } TOC;
- // The SRB_Flags are defined below. These flags may be OR'd together to form
- // the final value for SRB_Flags in the SRB. Note that SRB_POSTING and
- // SRB_EVENT_NOTIFY are mutually exclusive, as are SRB_DIR_IN and SRB_DIR_OUT. In
- // addition, the directioin bits (SRB_DIR_IN and SRB_DIR_OUT) MUST be set
- // correctly on commands which transfer data. Using SRB_DIR_SCSI is no longer
- // an option as in ASPI for DOS and ASPI for Win16.
- #define SRB_POSTING 0x01 // Enable ASPI command completion posting. See section on posting below.
- #define SRB_ENABLE_RESIDUAL_COUNT 0x04 // Enables reporting of residual byte count.This flag is only significant if the host adapter reports support for residual byte count in the SC_HA_INQUIRY command. When data underrun occurs, the SRB_BufLen field is updated to reflect the remaining bytes to transfer.
- #define SRB_DIR_IN 0x08 // Data transfer from SCSI target to host.
- #define SRB_DIR_OUT 0x10 // Data transfer from host to SCSI target.
- #define SRB_EVENT_NOTIFY 0x40 // Enable ASPI command event notification. See section on event notification below.
- // Inquiry DeviceTypeCodes
- #define DTC_DISK 0x00 // Direct-access device
- #define DTC_TAPE 0x01 // Sequential-access device
- #define DTC_PRINTER 0x02 // Printer device
- #define DTC_PROCESSOR 0x03 // Processor device
- #define DTC_WORM 0x04 // Write-once device
- #define DTC_CDROM 0x05 // CD-ROM device
- #define DTC_SCANNER 0x06 // Scanner device
- #define DTC_OPTICAL 0x07 // Optical memory device
- #define DTC_JUKEBOX 0x08 // Medium changer device
- #define DTC_COMM 0x09 // Communications device
- #define DTC_PREPRESS1 0x0A // Pre-press device 1
- #define DTC_PREPRESS2 0x0B // Pre-press device 2
- #define DTC_UNKNOWN 0x1F // Unknown or no device type
- /***************************************************************************
- ** SRB Status
- ***************************************************************************/
- #define SS_PENDING 0x00 /* SRB being processed */
- #define SS_COMP 0x01 /* SRB completed without error */
- #define SS_ABORTED 0x02 /* SRB aborted */
- #define SS_ABORT_FAIL 0x03 /* Unable to abort SRB */
- #define SS_ERR 0x04 /* SRB completed with error */
- #define SS_INVALID_CMD 0x80 /* Invalid ASPI command */
- #define SS_INVALID_HA 0x81 /* Invalid host adapter number */
- #define SS_NO_DEVICE 0x82 /* SCSI device not installed */
- #define SS_INVALID_SRB 0xE0 /* Invalid parameter set in SRB */
- #define SS_OLD_MANAGER 0xE1 /* ASPI manager doesn't support */
- /* windows */
- #define SS_BUFFER_ALIGN 0xE1 /* Buffer not aligned (replaces */
- /* SS_OLD_MANAGER in Win32) */
- #define SS_ILLEGAL_MODE 0xE2 /* Unsupported Windows mode */
- #define SS_NO_ASPI 0xE3 /* No ASPI managers */
- #define SS_FAILED_INIT 0xE4 /* ASPI for windows failed init */
- #define SS_ASPI_IS_BUSY 0xE5 /* No resources available to */
- /* execute command */
- #define SS_BUFFER_TO_BIG 0xE6 /* Buffer size too big to handle */
- #define SS_BUFFER_TOO_BIG 0xE6 /* Correct spelling of 'too' */
- #define SS_MISMATCHED_COMPONENTS 0xE7 /* The DLLs/EXEs of ASPI don't */
- /* version check */
- #define SS_NO_ADAPTERS 0xE8 /* No host adapters to manager */
- #define SS_INSUFFICIENT_RESOURCES 0xE9 /* Couldn't allocate resources */
- /* needed to init */
- #define SS_ASPI_IS_SHUTDOWN 0xEA /* Call came to ASPI after */
- /* PROCESS_DETACH */
- #define SS_BAD_INSTALL 0xEB /* The DLL or other components */
- /* are installed wrong */
- // SRB defines
- #define SC_HA_INQUIRY 0x00 // Get information about installed host adapters,including the number of installed adapters.
- #define SC_GET_DEV_TYPE 0x01 // Get information about installed SCSI devices.
- #define SC_EXEC_SCSI_CMD 0x02 // Execute SCSI I/O.
- #define SC_ABORT_SRB 0x03 // Abort an outstanding I/O request.
- #define SC_RESET_DEV 0x04 // Reset an individual SCSI target.
- #define SC_GET_DISK_INFO 0x06 // Get information on disk type SCSI devices (not available under Windows NT).
- #define SC_GETSET_TIMEOUTS 0x08
- // MISC defines
- #define CDSAMPLEFREQ 44100
- #define TRACKSPERSEC 75
- #define CB_CDDASECTOR 2352
- #define CB_QSUBCHANNEL 0
- #define CB_CDROMSECTOR 2048
- #define CB_AUDIO (CB_CDDASECTOR-CB_QSUBCHANNEL)
- typedef struct
- {
- BYTE SRB_Cmd; // ASPI command code
- BYTE SRB_Status; // ASPI command status byte
- BYTE SRB_HaId; // ASPI host adapter number
- BYTE SRB_Flags; // ASPI request flags
- DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0
- } SRB_HEADER, *LPSRB;
- typedef struct
- {
- BYTE SRB_Cmd; // ASPI command code = SC_HA_INQUIRY
- BYTE SRB_Status; // ASPI command status byte
- BYTE SRB_HaId; // ASPI host adapter number
- BYTE SRB_Flags; // ASPI request flags
- DWORD SRB_Hdr_Rsvd; // Reserved, MUST = 0
- BYTE HA_Count; // Number of host adapters present
- BYTE HA_SCSI_ID; // SCSI ID of host adapter
- BYTE HA_ManagerId[16]; // String describing the manager
- BYTE HA_Identifier[16]; // String describing the host adapter
- BYTE HA_Unique[16]; // Host Adapter Unique parameters
- WORD HA_Rsvd1;
- } SRB_HAINQUIRY, *LPSRB_HAINQUIRY;
- typedef struct
- {
- BYTE SRB_Cmd; // ASPI command code = SC_GET_DEV_TYPE
- BYTE SRB_Status; // ASPI command status byte
- BYTE SRB_HaId; // ASPI host adapter number
- BYTE SRB_Flags; // Reserved
- DWORD SRB_Hdr_Rsvd; // Reserved
- BYTE SRB_Target; // Target's SCSI ID
- BYTE SRB_Lun; // Target's LUN number
- BYTE SRB_DeviceType; // Target's peripheral device type
- BYTE SRB_Rsvd1; // Reserved for alignment
- } SRB_GDEVBLOCK, *LPSRB_GDEVBLOCK;
- #define SENSE_LEN 14 // Maximum sense length
- typedef struct
- {
- BYTE SRB_Cmd; // ASPI command code = SC_EXEC_SCSI_CMD
- BYTE SRB_Status; // ASPI command status byte
- BYTE SRB_HaId; // ASPI host adapter number
- BYTE SRB_Flags; // ASPI request flags
- DWORD SRB_Hdr_Rsvd; // Reserved
- BYTE SRB_Target; // Target's SCSI ID
- BYTE SRB_Lun; // Target's LUN number
- WORD SRB_Rsvd1; // Reserved for Alignment
- DWORD SRB_BufLen; // Data Allocation Length
- BYTE *SRB_BufPointer; // Data Buffer Point
- BYTE SRB_SenseLen; // Sense Allocation Length
- BYTE SRB_CDBLen; // CDB Length
- BYTE SRB_HaStat; // Host Adapter Status
- BYTE SRB_TargStat; // Target Status
- void (*SRB_PostProc)(); // Post routine
- void *SRB_Rsvd2; // Reserved
- BYTE SRB_Rsvd3[16]; // Reserved for expansion
- BYTE CDBByte[16]; // SCSI CDB
- BYTE SenseArea[SENSE_LEN+2]; // Request Sense buffer
- } SRB_EXECSCSICMD, *LPSRB_EXECSCSICMD;
- typedef struct
- {
- BYTE SRB_Cmd; // ASPI command code = SC_EXEC_SCSI_CMD
- BYTE SRB_Status; // ASPI command status byte
- BYTE SRB_HaId; // ASPI host adapter number
- BYTE SRB_Flags; // Reserved
- DWORD SRB_Hdr_Rsvd; // Reserved
- BYTE SRB_Target; // Target's SCSI ID
- BYTE SRB_Lun; // Target's LUN number
- BYTE SRB_DriveFlags; // Driver flags
- BYTE SRB_Int13HDriveInfo;// Host Adapter Status
- BYTE SRB_Heads; // Preferred number of heads translation
- BYTE SRB_Sectors; // Preferred number of sectors translation
- BYTE SRB_Rsvd1[10]; // Reserved
- } SRB_GETDISKINFO, *LPSRB_GETDISKINFO;
- typedef struct
- {
- BYTE SRB_Cmd; // ASPI command code = SC_RESET_DEV
- BYTE SRB_Status; // ASPI command status byte
- BYTE SRB_HaId; // ASPI host adapter number
- BYTE SRB_Flags; // Reserved
- DWORD SRB_Hdr_Rsvd; // Reserved
- BYTE SRB_Target; // Target's SCSI ID
- BYTE SRB_Lun; // Target's LUN number
- BYTE SRB_Rsvd1[12]; // Reserved for Alignment
- BYTE SRB_HaStat; // Host Adapter Status
- BYTE SRB_TargStat; // Target Status
- void *SRB_PostProc; // Post routine
- void *SRB_Rsvd2; // Reserved
- BYTE SRB_Rsvd3[32]; // Reserved
- } SRB_BUSDEVICERESET, *LPSRB_BUSDEVICERESET;
- typedef struct
- {
- BYTE SRB_Cmd; /* 00/000 ASPI cmd code == SC_ABORT_SRB */
- BYTE SRB_Status; /* 01/001 ASPI command status byte */
- BYTE SRB_HaID; /* 02/002 ASPI host adapter number */
- BYTE SRB_Flags; /* 03/003 Reserved, must = 0 */
- DWORD SRB_Hdr_Rsvd; /* 04/004 Reserved, must = 0 */
- void *SRB_ToAbort; /* 08/008 Pointer to SRB to abort */
- } SRB_Abort, *PSRB_Abort, FAR *LPSRB_Abort;
- typedef unsigned char Ucbit;
- typedef unsigned char u_char;
- #define MP_P_CODE \
- Ucbit p_code : 6; \
- Ucbit p_res : 1; \
- Ucbit parsave : 1
- // CD Cap / mech status
- typedef struct SCSICDMODEPAGE2A_TAG
- {
- MP_P_CODE; // parsave & pagecode (0)
- u_char p_len; // 0x14 = 20 Bytes (1)
- Ucbit cd_r_read : 1; // Reads CD-R media (2)
- Ucbit cd_rw_read : 1; // Reads CD-RW media
- Ucbit method2 : 1; // Reads fixed packet method2 media
- Ucbit dvd_rom_read: 1; // Reads DVD ROM media
- Ucbit dvd_r_read : 1; // Reads DVD-R media
- Ucbit dvd_ram_read: 1; // Reads DVD-RAM media
- Ucbit res_2_67 : 2; // Reserved
- Ucbit cd_r_write : 1; // Supports writing CD-R media (3)
- Ucbit cd_rw_write : 1; // Supports writing CD-RW media
- Ucbit test_write : 1; // Supports emulation write
- Ucbit res_3_3 : 1; // Reserved
- Ucbit dvd_r_write : 1; // Supports writing DVD-R media
- Ucbit dvd_ram_write: 1; // Supports writing DVD-RAM media
- Ucbit res_3_67 : 2; // Reserved
- Ucbit audio_play : 1; // Supports Audio play operation (4)
- Ucbit composite : 1; // Deliveres composite A/V stream
- Ucbit digital_port_2: 1; // Supports digital output on port 2
- Ucbit digital_port_1: 1; // Supports digital output on port 1
- Ucbit mode_2_form_1: 1; // Reads Mode-2 form 1 media (XA)
- Ucbit mode_2_form_2: 1; // Reads Mode-2 form 2 media
- Ucbit multi_session: 1; // Reads multi-session media
- Ucbit res_4 : 1; // Reserved
- Ucbit cd_da_supported: 1; // Reads audio data with READ CD cmd
- Ucbit cd_da_accurate: 1; // READ CD data stream is accurate
- Ucbit rw_supported: 1; // Reads R-W sub channel information
- Ucbit rw_deint_cor: 1; // Reads de-interleved R-W sub chan
- Ucbit c2_pointers : 1; // Supports C2 error pointers
- Ucbit ISRC : 1; // Reads ISRC information
- Ucbit UPC : 1; // Reads media catalog number (UPC)
- Ucbit read_bar_code: 1; // Supports reading bar codes
- Ucbit lock : 1; // PREVENT/ALLOW may lock media (5)
- Ucbit lock_state : 1; // Lock state 0=unlocked 1=locked
- Ucbit prevent_jumper: 1; // State of prev/allow jumper 0=pres
- Ucbit eject : 1; // Ejects disc/cartr with STOP LoEj
- Ucbit res_6_4 : 1; // Reserved
- Ucbit loading_type: 3; // Loading mechanism type
- Ucbit sep_chan_vol: 1; // Vol controls each channel separat (6)
- Ucbit sep_chan_mute: 1; // Mute controls each channel separat
- Ucbit disk_present_rep:1; // Changer supports disk present rep
- Ucbit sw_slot_sel:1; // Load empty slot in changer
- Ucbit res_7 : 4; // Reserved
- BYTE ReadSpeedH; // Max. read speed in KB/s (7)
- BYTE ReadSpeedL; // Max. read speed in KB/s (7)
- u_char num_vol_levels[2]; // # of supported volume levels (9)
- u_char buffer_size[2]; // Buffer size for the data in KB (11)
- u_char cur_read_speed[2]; // Current read speed in KB/s (13)
- u_char res_16; // Reserved (14)
-
- Ucbit res_17_0: 1; // Reserved (15)
- Ucbit BCK : 1; // Data valid on falling edge of BCK
- Ucbit RCK : 1; // Set: HIGH high LRCK=left channel
- Ucbit LSBF : 1; // Set: LSB first Clear: MSB first
- Ucbit length : 2; // 0=32BCKs 1=16BCKs 2=24BCKs 3=24I2c
- Ucbit res_17 : 2; // Reserved
-
- u_char max_write_speed[2]; // Max. write speed supported in KB/s (17)
- u_char cur_write_speed[2]; // Current write speed in KB/s (19)
- } SCSICDMODEPAGE2A;
- char *fillbytes(void *tov, int cnt, char val);
- typedef struct SCISMODEHEADER_TAG {
- Ucbit sense_data_len : 8;
- u_char medium_type;
- Ucbit res2 : 4;
- Ucbit cache : 1;
- Ucbit res : 2;
- Ucbit write_prot : 1;
- BYTE nBlockLen;
- } SCISMODEHEADER;
- typedef struct SCSIMODEHDR_6_TAG {
- BYTE btModeDataLen; // 0
- BYTE btMediumType; // 1
- BYTE btDevSpecificParam; // 2
- BYTE btBlkDescrLen; // 3
- } SCSIMODEHDR_6;
- typedef struct SCSIMODEHDR_10_TAG {
- BYTE btModeDataLenH; // 0
- BYTE btModeDataLenL; // 1
- BYTE btMediumType; // 2
- BYTE btDevSpecificParam; // 3
- BYTE btReserved1; // 4
- BYTE btReserved2; // 5
- BYTE btBlkDescrLenH; // 6
- BYTE btBlkDescrLenL; // 7
- } SCSIMODEHDR_10;
- typedef struct SCSIBLOCKDESCRIPTOR_TAG {
- BYTE btDensity; // 0
- BYTE btNumberOfBlocksH; // 1
- BYTE btNumberOfBlocksM; // 2
- BYTE btNumberOfBlocksL; // 3
- BYTE btReserved; // 4
- BYTE btBlockLenH; // 5
- BYTE btBlockLenM; // 6
- BYTE btBlockLenL; // 7
- } SCSIBLOCKDESCRIPTOR;
- // Error recovery Parameters
- typedef struct SCSICDMODEPAGE1A_TAG{
- MP_P_CODE; // 0 parsave & pagecode
- u_char p_len; // 1 0x0A = 12 Bytes
- Ucbit disa_correction : 1; // 2 Byte 2
- Ucbit term_on_rec_err : 1;
- Ucbit report_rec_err : 1;
- Ucbit en_early_corr : 1;
- Ucbit read_continuous : 1;
- Ucbit tranfer_block : 1;
- Ucbit en_auto_reall_r : 1;
- Ucbit en_auto_reall_w : 1;
- u_char rd_retry_count; // 3 Byte 3
- u_char correction_span; // 4
- char head_offset_count; // 5
- char data_strobe_offset; // 6
- u_char res; // 7
- u_char wr_retry_count; // 8
- u_char res_tape[2]; // 9
- u_char recov_timelim[2]; // 11
- } SCSICDMODEPAGE1A;
- typedef struct
- {
- BYTE SRB_Cmd; // ASPI command code = SC_GETSET_TIMEOUTS
- BYTE SRB_Status; // ASPI command status byte
- BYTE SRB_HaId; // ASPI host adapter number
- BYTE SRB_Flags; // ASPI request flags
- DWORD SRB_Hdr_Rsvd; // Reserved
- BYTE SRB_Target; // Target's SCSI ID
- BYTE SRB_Lun; // Target's LUN number
- DWORD SRB_Timeout; // Timeout in half seconds
- }
- SRB_GetSetTimeouts, *PSRB_GetSetTimeouts;
- typedef struct
- {
- LPBYTE AB_BufPointer; // Pointer to the ASPI allocated buffer
- DWORD AB_BufLen; // Length in bytes of the buffer
- DWORD AB_ZeroFill; // Flag set to 1 if buffer should be zeroed
- DWORD AB_Reserved; // Reserved, MUST = 0
- }
- ASPI32BUFF, *PASPI32BUFF;
- #pragma pack(pop)
- #endif
|