include "scsi.m"; scsiio := load ScsiIO ScsiIO->PATH; Scsi: adt { inquire: string; rawfd: ref Sys->FD; nchange: int; changetime: int; open: fn(devdir: string): ref Scsi; rawcmd: fn(s: self ref Scsi, cmd: array of byte, data: array of byte, io: int): int; cmd: fn(s: self ref Scsi, cmd: array of byte, data: array of byte, io: int): int; ready: fn(s: self ref Scsi): int; }; Sread, Swrite, Snone: con iota; scsierror: fn(asc: int, ascq: int): string; init: fn(verbose: int);
Init must be called before using any other operation of the module. If verbose is non-zero the module will produce a fair amount of debugging output on file descriptor 2 when SCSI commands fail.
Scsi.open attempts to open the file devdir/raw on which to send raw SCSI commands. On success, it reads the device's inquiry string and returns a reference to a Scsi value to represent the connection. It provides the following operations:
The nchange and changetime elements of Scsi the number of times a media change has been detected, and the first time the current media was detected (the first time a SCSI command was issued after it was inserted). They are maintained by Scsi.cmd. The initial SCSI inquiry result is kept in inquire.
Scsierror returns a textual description of the SCSI status denoted by the ASC and ASCQ sense codes. The description is found by consulting /lib/scsicodes.
SCSIIO(2 ) | Rev: Tue Mar 31 02:42:39 GMT 2015 |