This is SCSI.h in view mode; [Download] [Up]
//
// SCSI2_Class - provides architecture independendent low-level
// SCSI device access.
//
// Copyright (C) 1994 by Christopher Wolf.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free
// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Bug-reports, comments and questions should be directed to:
// Christopher Wolf <chris@alchemy.geo.cornell.edu>
//
// Portions of this code are derived from an earlier work
// (SCSI Inquirer) Copyright (C) 1990, 1991, 1992 by Jiro Nakamura
// and used with permission.
//
// Portions of this code are derived from code provided by
// Andreas Ploeger and used with permission
//
//
// For best results view this file with a tab size of 4 and
// a display width of 132 columns or wider.
//
// file version information
#define RCSSH "$Id: SCSI.h,v 0.63 94/11/17 21:07:29 chris Exp $"
// generic Unix headers
#import <objc/Object.h>
#import <sys/types.h>
// SCSI2 class specific headers
#import "scsi2reg.h"
// Read and Write Big-Endian Byte Order Values
u_int readBigEndianLong(void *address);
u_int readBigEndianShort(void *address);
u_int readBigEndianValue(void *address, int numBits);
void writeBigEndianLong(int value, void *address);
void writeBigEndianShort(int value, void *address);
void writeBigEndianValue(int value, void *address, int numBits);
// debugging/error print function
typedef void(*PrintFunction)(const char*format, ...);
PrintFunction dprintf;
@interface SCSI: Object
{
BOOL isOpen; // TRUE if SCSI device open
int target, lun; // Target / logical unit
int fd; // File descriptor
int ioctlCode; // Type of ioctl's to use (varies depending on device type)
BOOL immed; // Indicates long commands should return immediately
int timeout; // Time-out for commands
char *dev_name; // Generic SCSI Device
struct scsi_req sr; // SCSI command request parameters
struct scsi_adr sa; // SCSI address parameters
char errorString[100]; // English error information
}
// Set/read instance variables
- (void) setImmediate: (BOOL)immediate;
- (BOOL) immediate;
- (void) setTimeout: (int)to;
- (int) timeout;
// Open, close, select a device
- (int) openDevice: (const char *) deviceName ioctlCode: (int) iCode;
- (int) setDevice: (const char *) deviceName ioctlCode: (int) iCode;
- (int) openTarget: (int) target lun: (int) lun;
- (int) setTarget: (int) target lun: (int)lun;
- (int) openSCSI;
- (int) closeSCSI;
// Find a device
- (int) findDevice;
- (int) findDevice: (int) trg;
- (BOOL) isDevice;
// Error output and status reporting
+ (PrintFunction)dprintf;
+ setDprintf:(PrintFunction)pf;
- (char *) errorString;
- (char *) returnError: sender;
- (char *) returnDriverStatus: (char **) driverStat scsiStatus: (char **) scsiStat andExtendedSense: (char **) esense;
- (struct scsi_req *) statusReq;
- (BOOL) isOpen;
- (int) fd;
// Issue Pre-packaged SCSI commands
- (int) inquiry: (struct inquiry_reply *) ibuffer;
- (int) readCapacity: (struct capacity_reply *) rbuffer;
- (int) requestSense: (struct esense_reply *) rbuffer;
- (int) testUnitReady;
- (int) sendDiagnostic: (char *)dbuf size: (u_char)size pf: (BOOL)pf st: (BOOL)st dol: (BOOL)dol uol: (BOOL)uol;
- (int) receiveDiagnostic: (char *)dbuf size: (u_char)size;
- (int) modeSenseRaw: (mode_parameter_list *)mpl size: (u_char)size page: (u_char)page pc: (u_char)pc dbd: (BOOL) dbd;
- (int) modeSenseCooked: (mode_page *)mp size: (u_char)size page: (u_char)page pc: (u_char)pc;
- (int) modeSelectRaw: (mode_parameter_list *)mpl size: (u_char)size save: (BOOL)save;
// Issue Low Level SCSI Commands
- (int) executeRequest: (struct scsi_req *) sp;
- (int) executeBusReset;
+ (void) clearCommandBlock: (union cdb *) cdbp;
// Private methods
- (int) performRequest;
// Archiving methods
- write: (NXTypedStream *) stream;
- read: (NXTypedStream *) stream;
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.