0

SCSI プログラミングは初めてなので、基本的な質問をして申し訳ありません。SCSI Inquiry コマンドを 6 バイトの CDB を介してテープ デバイスに送信しました

ccb = (Exec_IO_CCB *)( バッファ + header_size );

ccb->ccb_length = sizeof(Exec_IO_CCB);

ccb->cam_opcode = 0x1;

ccb->connect_id = 0;

ccb->sense_buf_ptr = (長い)(header_size + ccb->ccb_length);

ccb->sense_buf_length = MAX_SENSE_LEN;

ccb->time_out = CAM_TIMEOUT;

ccb->cdb_length = 6;

/* INQUIRY セット cam_flags と cdb[0] の場合 */

ccb->cam_flags = NO_DATA;

ccb->cdb[0] = お問い合わせ; /* 照会コマンドの 0x12 SCSI オペコード */

ccb->cdb[1] = 0;

ccb->cdb[2] = 0;

ccb->cdb[3] = 0;

ccb->cdb[4] = 3200;

ccb->cdb[5] = 0;

SCSI コマンドが成功しました。ベンダー ID / 製品 ID を取得できるように、INQUIRY コマンドの出力をキャプチャするにはどうすればよいですか??

Execute I/O SCSI バッファを次のように宣言しました。

typedef 構造体 {

long        ccb_address;            /* Address of this CCB               */
short       ccb_length;             /* CAM Control Block Length          */
char        cam_opcode;             /* CAM Operation Code                */
char        status;                 /* CAM Status                        */
long        connect_id;             /* Connect ID - no fields supported  */
long        cam_flags;              /* CAM Flags                         */
long        pd_pointer;             /* Peripheral driver pointer         */
long        next_ccb_ptr;           /* Next CCB Pointer                  */
long        req_map_info;           /* Request mapping information       */
long        call_on_comp;           /* Callback on completion            */
long        data_buf_ptr;           /* Data Buffer Pointer               */
long        data_xfer_length;       /* Data transfer length              */
long        sense_buf_ptr;          /* Sense information buffer pointer  */
char        sense_buf_length;       /* Sense information buffer length   */
char        cdb_length;             /* Command Descriptor Block (CDB)    **
                                    **  length                           */
short       num_sg_entries;         /* Number of scatter/gather entries  */
long        vendor_unique;          /* Vendor Unique field               */
char        scsi_status;            /* SCSI status                       */
char        auto_resid;             /* Auto sense residual length        */
short       reserved;               /* Reserved                          */
long        resid_length;           /* Residual length                   */
char        cdb[12];                /* Command Descriptor Block (CDB)    */
long        time_out;               /* Time-out value                    */
long        msg_buf_ptr;            /* Message buffer pointer            */
short       msg_buf_length;         /* Message buffer length             */
short       vu_flags;               /* Vendor-unique flags               */
char        tag_queue_act;          /* Tagged Queue action               */
char        tag_id;                 /* Tag ID (target only)              */
char        init_id;                /* Initiator ID (target only)        */
char        reserved2;              /* Reserved                          */

} Exec_IO_CCB;

この構造は決して SCSI 出力をキャプチャしませんか?

Inquiry Structure を次のように宣言しました。しかし、Inquire コマンドが Inquiry_Data 構造データをどのように設定するのかわかりません??

typedef 構造体 {

short data_valid;           /* Flag that indicates whether or not the */
                            /*   structure has been filled in with    */
                            /*   inquiry data from the device.        */
byte  periph_qual;
byte  periph_dev_type;
byte  rmb;
byte  iso_version;
byte  ecma_version;
byte  ansi_version;
byte  resp_data_format;
byte  rel_adr;
byte  sync;
byte  linked;
byte  cmd_que;
byte  sft_rst;
char  vendor_id[9];
char  prod_id[17];
char  prod_rev[5];
char  reserved;

} Inquiry_Data;

4

1 に答える 1