STIOCQRYINQUIRY
This IOCTL command returns the inquiry data from the device. The data is divided into standard and vendor-specific portions.
The output data structure is
/* inquiry data info */
struct inq_data_s
{
BYTE b0;
/* macros for accessing fields of byte 1 */
#define PERIPHERAL_QUALIFIER(x) ((x->b0 & 0xE0)>>5)
#define PERIPHERAL_CONNECTED 0x00
#define PERIPHERAL_NOT_CONNECTED 0x01
#define LUN_NOT_SUPPORTED 0x03
#define PERIPHERAL_DEVICE__TYPE(x) (x->b0 & 0x1F)
#define DIRECT_ACCESS 0x00
#define SEQUENTIAL_DEVICE 0x01
#define PRINTER_DEVICE 0x02
#define PROCESSOR_DEVICE 0x03
#define CD_ROM_DEVICE 0x05
#define OPTICAL_MEMORY_DEVICE 0x07
#define MEDIUM_CHANGER_DEVICE 0x08
#define UNKNOWN 0x1F
BYTE b1;
/* macros for accessing fields of byte 2 */
#define RMB(x) ((x->b1 & 0x80)>>7) /* removable media bit */
#define FIXED 0
#define REMOVABLE 1
#define device_type_qualifier(x) (x->b1 & 0x7F) /* vendor specific */
BYTE b2;
/* macros for accessing fields of byte 3 */
#define ISO_Version(x) ((x->b2 & 0xC0)>>6)
#define ECMA_Version(x) ((x->b2 & 0x38)>>3)
#define ANSI_Version(x) ((x->b2 & 0x07)
#define NONSTANDARD 0
#define SCSI1 1
#define SCSI2 2
BYTE b3;
/* macros for accessing fields of byte 4 */
#define AENC(x) ((x->b3 & 0x80)>>7) /* asynchronous event notification */
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define TrmIOP(x) ((x->b3 & 0x40)>>6) /* support terminate I/O process message? */
#define Response_Data_Format(x) (x->b3 & 0x0F)
#define SCSI1INQ 0 /* SCSI-1 standard inquiry data format */
#define CCSINQ 1 /* CCS standard inquiry data format */
#define SCSI2INQ 2 /* SCSI-2 standard inquiry data format */
BYTE additional_length; /* number of bytes following this field minus 4 */
BYTE res56[2];
BYTE b7;
/* macros for accessing fields of byte 7 */
#define RelAdr(x) ((x->b7 & 0x80)>>7) /* the following fields are true or false */
#define WBus32(x) ((x->b7 & 0x40)>>6)
#define WBus16(x) ((x->b7 & 0x20)>>5)
#define Sync(x) ((x->b7 & 0x10)>>4)
#define Linked(x) ((x->b7 & 0x08)>>3)
#define CmdQue(x) ((x->b7 & 0x02)>>1)
#define SftRe(x) ((x->b7 & 0x01)
char vendor_identification[8];
char product_identification[16];
char product_revision_level[4];
};
struct st_inquiry
{
struct inq_data_s standard;
BYTE vendor_specific[255-sizeof(struct inq_data_s)];
};
An example of the STIOCQRYINQUIRY command is
struct st_inquiry inqd;
if (ioctl(tapefd,STIOCQRYINQUIRY,&inqd)<0)
{
printf("IOCTL failure. errno=%d",errno);
exit(errno);
}
if (ANSI_Version(((struct inq_data_s *)&(inqd.standard)))==SCSI2)
printf("Hey! We have a SCSI-2 device\n");