mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1056 lines
22 KiB
1056 lines
22 KiB
/*++
|
|
|
|
Module Name:
|
|
|
|
tapedev.cpp
|
|
|
|
Abstract:
|
|
|
|
|
|
Author:
|
|
|
|
Dieter Achtelstetter (A-DACH) 8/28/1995
|
|
|
|
NOTE:
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#define PCMCIA_DEBUG 1
|
|
#define MAIN_support 1
|
|
|
|
#include <windows.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <winreg.h>
|
|
#include <winnt.h>
|
|
#include <winbase.h>
|
|
#include <stdarg.h>
|
|
#include <process.h>
|
|
#include "resource.h"
|
|
#include "uni.h"
|
|
#include "setup.h"
|
|
#include <ntddpcm.h>
|
|
#include "device.h"
|
|
#include "..\setup\option.h"
|
|
#include "..\pcmcia\pcminfo\getconf.h"
|
|
#include "..\ctape\tapedev\rescan.h"
|
|
#include "..\ctape\tapedev\detect.h"
|
|
|
|
#include "tapedev.h"
|
|
|
|
|
|
|
|
extern HINSTANCE hinst;
|
|
extern STATUS_INFO StatusInfo;
|
|
|
|
//
|
|
//---- Device Type array
|
|
//
|
|
CARD_TYPE ScsiDeviceTypes[] = {
|
|
|
|
TYPE_TAPE,
|
|
SUB_TYPE_SCSI,
|
|
"TAPE",
|
|
IDS_ScsiTapeDevice,
|
|
IDB_TapeDevice,
|
|
NULL,
|
|
IDI_ICON1,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_TAPE,
|
|
SUB_TYPE_FLOPPY,
|
|
"TAPE",
|
|
IDS_FloppyTapeDevice,
|
|
IDB_TapeDevice,
|
|
NULL,
|
|
IDI_ICON1,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_TAPE,
|
|
SUB_TYPE_OTHER,
|
|
"TAPE",
|
|
IDS_NonScsiTapeDevice,
|
|
IDB_TapeDevice,
|
|
NULL,
|
|
IDI_ICON1,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_CD_ROM,
|
|
SUB_TYPE_NON,
|
|
"CD_ROM",
|
|
IDS_SCSI_CDROM,
|
|
IDB_CDROM,
|
|
NULL,
|
|
IDI_CDROM,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_DISK,
|
|
SUB_TYPE_NON,
|
|
"SCSI DISK",
|
|
IDS_SCSI_DISK,
|
|
IDB_DISK,
|
|
NULL,
|
|
IDI_DISK,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_RM_DISK ,
|
|
SUB_TYPE_NON,
|
|
"SCSI Removible Media Drive",
|
|
IDS_SCS_RM_DISK,
|
|
IDB_RM_DISK,
|
|
NULL,
|
|
IDI_RM_DISK,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_WORM ,
|
|
SUB_TYPE_NON,
|
|
"SCSI WORM Device",
|
|
IDS_SCSI_WORM,
|
|
IDB_WORM,
|
|
NULL,
|
|
IDI_WORM,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_SCANNER,
|
|
SUB_TYPE_NON,
|
|
"SCSI Scanner device",
|
|
IDS_SCSI_SCANNER,
|
|
IDB_SCANNER,
|
|
NULL,
|
|
IDI_SCANNER,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_PRINTER,
|
|
SUB_TYPE_NON,
|
|
"SCSI Printer device",
|
|
IDS_SCSI_PRINTER,
|
|
IDB_PRINTER,
|
|
NULL,
|
|
IDI_PRINTER,
|
|
NULL,
|
|
NULL,
|
|
|
|
TYPE_NON,
|
|
SUB_TYPE_NON,
|
|
"",
|
|
IDS_UNKNOWN,
|
|
IDB_QU,
|
|
NULL,
|
|
IDI_QU,
|
|
NULL,
|
|
NULL};
|
|
|
|
|
|
BOOL
|
|
IsDDriverInstalled(PCHAR Option);
|
|
|
|
|
|
//
|
|
//---- Device List Class
|
|
//
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
TAPEDEVLISTC::TAPEDEVLISTC(POPTIONLISTC OptionList)
|
|
{
|
|
Init(OptionList);
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
TAPEDEVLISTC::~TAPEDEVLISTC()
|
|
{
|
|
Free();
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
VOID
|
|
TAPEDEVLISTC::Init(POPTIONLISTC OptionList)
|
|
{
|
|
int i;
|
|
|
|
ScsiRescan = FALSE;
|
|
|
|
GetTapeInfo(OptionList);
|
|
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
VOID
|
|
TAPEDEVLISTC::Free(VOID)
|
|
{
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE: BUGBUG
|
|
//*********************************************************************
|
|
DWORD
|
|
TAPEDEVLISTC::GetDeviceClass(VOID)
|
|
{
|
|
return(DEVICE_CLASS_TAPE);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PDEVICEC
|
|
TAPEDEVLISTC::EnumDevices(DWORD Num)
|
|
{
|
|
if(Num >= DeviceList.Count())
|
|
{
|
|
if(Num != 0)
|
|
return(NULL);
|
|
}
|
|
|
|
return(DeviceList.Enum(Num));
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
DWORD
|
|
TAPEDEVLISTC::GetDeviceCount(VOID)
|
|
{
|
|
return(DeviceList.Count());
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
TAPEDEVLISTC::RescanForDeviceInfo(HWND hDlg ,DWORD Type)
|
|
{
|
|
int Ret;
|
|
|
|
if(Type == RESCAN_TYPE_LONG)
|
|
{
|
|
|
|
//
|
|
//---- Actual SCSI bus rescan was requested. Since this takes a while
|
|
//---- I will put up a dialog box wile I do so.
|
|
//
|
|
|
|
ScsiRescan = TRUE;
|
|
|
|
StatusInfo.WorkFunc = RescanTapeSpawnFunc;
|
|
StatusInfo.Center = FALSE;
|
|
StatusInfo.StatusText = GetString(IDS_RESCAN_PROMPT);
|
|
StatusInfo.Data = (LPVOID) this;
|
|
|
|
|
|
Ret = DoOprationWithInProgressDialog(&StatusInfo,hDlg);
|
|
|
|
Reboot = DeviceList.GetReboot();
|
|
|
|
ScsiRescan = FALSE;
|
|
|
|
return(Ret);
|
|
}
|
|
|
|
ScsiRescan = FALSE;
|
|
Ret = RescanTapeSpawnFunc((LPVOID) this);
|
|
return(Ret);
|
|
|
|
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:GetTapeInfo
|
|
//*
|
|
//* PURPOSE: If Rescan == TRUE i will actualy rescan the bus for new devices.
|
|
//* If it is false i will only get the inqirary data and
|
|
//*
|
|
//* INPUT:
|
|
//*
|
|
//* RETURNS:
|
|
//*********************************************************************
|
|
BOOL
|
|
TAPEDEVLISTC::GetTapeInfo(POPTIONLISTC OptionList)
|
|
{
|
|
BOOL Ret;
|
|
UINT i=0;
|
|
|
|
PTAPEDEVC TapeDevice;
|
|
|
|
//
|
|
//---- Get Tape Info
|
|
//
|
|
Ret = GetAllTapeDeviceInfo(
|
|
ScsiRescan,
|
|
&DeviceList,
|
|
OptionList);
|
|
|
|
//
|
|
//--- Update the tape device classes
|
|
//
|
|
TapeDevice = DeviceList.First();
|
|
|
|
//BUGBUG
|
|
while(TapeDevice)
|
|
{
|
|
|
|
TapeDevice->SetDeviceIndex(i);
|
|
|
|
|
|
TapeDevice = DeviceList.Next();
|
|
i++;
|
|
}
|
|
|
|
return(Ret);
|
|
}
|
|
|
|
|
|
//
|
|
//---- Device Class
|
|
//
|
|
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
VOID
|
|
TAPEDEVC::InitType(VOID)
|
|
{
|
|
int i=0;
|
|
|
|
//
|
|
//--- Loop threw all the device types
|
|
//
|
|
while(1)
|
|
{
|
|
|
|
if( (ScsiDeviceTypes[i].Type == DeviceInfo.DeviceType) ||
|
|
(ScsiDeviceTypes[i].Type == TYPE_NON) )
|
|
{
|
|
if( ScsiDeviceTypes[i].SubType == DeviceInfo.SubType ||
|
|
ScsiDeviceTypes[i].SubType == SUB_TYPE_NON)
|
|
{
|
|
|
|
|
|
//
|
|
//--- Found a matching device type
|
|
//
|
|
|
|
DeviceInfo.TypeInfo = &(ScsiDeviceTypes[i]);
|
|
DeviceInfo.TypeInfoIndex = i;
|
|
|
|
hDeviceBitmap =
|
|
LoadBitmap(hinst, MAKEINTRESOURCE(ScsiDeviceTypes[i].Bitmap));
|
|
|
|
hDeviceIcon =
|
|
LoadIcon(hinst,MAKEINTRESOURCE(ScsiDeviceTypes[i].Icon));
|
|
return;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
|
|
TAPEDEVC::TAPEDEVC()
|
|
{
|
|
|
|
|
|
DeviceInfo.PortNumber = 0;
|
|
DeviceInfo.InitiatorID = 0;
|
|
DeviceInfo.BUS;
|
|
memset(DeviceInfo.InitiatorNameString,0,60);
|
|
DeviceInfo. DeviceType = 0;
|
|
DeviceInfo.TypeInfo = NULL;
|
|
DeviceInfo.TypeInfoIndex = -1;
|
|
|
|
hDeviceIcon = NULL;
|
|
hDeviceBitmap = NULL;
|
|
|
|
DeviceInfo.ID = 0;
|
|
DeviceInfo.LUN = 0;
|
|
memset(DeviceInfo.DeviceDisplayName,0,VENDER_ID_LEN + PRODUCT_ID_LEN+41);
|
|
memset(DeviceInfo.DisplayVendorId,0,VENDER_ID_LEN+1);
|
|
memset(DeviceInfo.DisplayProductId,0, PRODUCT_ID_LEN+1);
|
|
memset(DeviceInfo.VendorId,0,VENDER_ID_LEN);
|
|
memset(DeviceInfo.ProductId,0, PRODUCT_ID_LEN);;
|
|
memset(DeviceInfo.ProductRevisionLevel,0,PRODUCT_REVISION_LEVEL_LEN);
|
|
memset(DeviceInfo.Resorved,0,40);
|
|
DeviceInfo.DeviceClaimed = 0;
|
|
memset(DeviceInfo.DeviceName,0,60);
|
|
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
TAPEDEVC::~TAPEDEVC()
|
|
{
|
|
if(hDeviceIcon)
|
|
DeleteObject(hDeviceIcon);
|
|
if(hDeviceBitmap)
|
|
DeleteObject(hDeviceBitmap);
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetDisplayName(VOID)
|
|
{
|
|
|
|
if(*(DeviceInfo.DeviceDisplayName) == '\0')
|
|
return(NULL);
|
|
|
|
return( (PCHAR)DeviceInfo.DeviceDisplayName );
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetMfgName(VOID)
|
|
{
|
|
if(*(DeviceInfo.DisplayVendorId) == '\0')
|
|
return(NULL);
|
|
|
|
|
|
|
|
return( (PCHAR)DeviceInfo.DisplayVendorId );
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetModelName(VOID)
|
|
{
|
|
if(*(DeviceInfo.DisplayProductId) == '\0')
|
|
return(NULL);
|
|
|
|
return( (PCHAR)DeviceInfo.DisplayProductId );
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetVersion(VOID)
|
|
{
|
|
if(*(DeviceInfo.ProductRevisionLevel) == '\0')
|
|
return(NULL);
|
|
|
|
|
|
return( (PCHAR) DeviceInfo.ProductRevisionLevel);
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION: GetDetectData
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
TAPEDEVC::GetDetectData(
|
|
LPVOID Data)
|
|
{
|
|
PDEVICE_DETECT_DATA DetectData = (PDEVICE_DETECT_DATA) Data;
|
|
|
|
|
|
memset(DetectData,0,sizeof(DEVICE_DETECT_DATA ));
|
|
|
|
|
|
|
|
memcpy(DetectData->VendorId ,
|
|
DeviceInfo.VendorId , VENDER_ID_LEN);
|
|
memcpy(DetectData->ProductId ,
|
|
DeviceInfo.ProductId,PRODUCT_ID_LEN);
|
|
memcpy(DetectData->ProductRevisionLevel ,
|
|
DeviceInfo.ProductRevisionLevel,PRODUCT_REVISION_LEVEL_LEN);
|
|
|
|
|
|
AsciToUnicodeI(DetectData->VendorId,sizeof(DetectData->VendorId));
|
|
AsciToUnicodeI(DetectData->ProductId,sizeof(DetectData->ProductId));
|
|
AsciToUnicodeI(DetectData->ProductRevisionLevel,sizeof(DetectData->ProductRevisionLevel));
|
|
|
|
|
|
DetectData->Data.ScsiMfg = DetectData->VendorId;
|
|
DetectData->Data.ScsiProductId = DetectData->ProductId;
|
|
DetectData->Data.ScsiRevisionLevel = DetectData->ProductRevisionLevel;
|
|
|
|
|
|
|
|
|
|
|
|
return(TRUE);
|
|
};
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
UCHAR
|
|
TAPEDEVC::GetDeviceType(VOID)
|
|
{
|
|
return(DeviceInfo.DeviceType);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
UCHAR
|
|
TAPEDEVC::GetSubDeviceType(VOID)
|
|
{
|
|
|
|
return(DeviceInfo.SubType);
|
|
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE: BUGBUG
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetDeviceTypeString(VOID)
|
|
{
|
|
return( (PCHAR) TAPE_OPTIONS);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE: BUGBUG
|
|
//*********************************************************************
|
|
WCHAR *
|
|
TAPEDEVC::GetDeviceTypeDisplayString(VOID)
|
|
{
|
|
|
|
|
|
return(GetString(DeviceInfo.TypeInfo->DisplayStringId));
|
|
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE: BUGBUG
|
|
//*********************************************************************
|
|
WCHAR *
|
|
TAPEDEVC::GetDeviceMap(VOID)
|
|
{
|
|
static WCHAR DeviceMap[60];
|
|
|
|
if(DeviceInfo.DeviceClaimed)
|
|
{
|
|
|
|
//
|
|
//---- The device is calaimed by a driver.
|
|
//---- So if we can get a valid device map for
|
|
//---- the current device type it will be in
|
|
//---- DeviceInfo->DeviceName
|
|
//
|
|
|
|
strcpy( (PCHAR) DeviceMap,(PCHAR)DeviceInfo.DeviceName);
|
|
|
|
AsciToUnicodeI((PCHAR) DeviceMap,60);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
//--- No device map because no driver loaded.
|
|
//--- I will return a device map that indecates this.
|
|
//--- . This will make more sence to
|
|
//--- the user in the scsi applet.
|
|
//
|
|
|
|
wcscpy( (WCHAR *) DeviceMap,GetString(IDS_DeviceMap_NoDriver));
|
|
|
|
|
|
|
|
}
|
|
|
|
return( (WCHAR*) DeviceMap);
|
|
}
|
|
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
HICON
|
|
TAPEDEVC::GetDeviceIcon(VOID)
|
|
{
|
|
return(hDeviceIcon);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
HBITMAP
|
|
TAPEDEVC::GetDevice16X16BitMap(VOID)
|
|
{
|
|
return(hDeviceBitmap);
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
TAPEDEVC::IsDevicePressent(VOID)
|
|
{
|
|
return( (DeviceInfo.DeviceDisplayName[0])? TRUE:FALSE );
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
LPVOID
|
|
TAPEDEVC::GetDeviceResources(VOID)
|
|
{
|
|
return(NULL);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
LPVOID
|
|
TAPEDEVC::GetDeviceInfo(VOID)
|
|
{
|
|
return(NULL);
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
TAPEDEVC::HaveDeviceErrors(VOID)
|
|
{
|
|
return(FALSE);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
WCHAR *
|
|
TAPEDEVC::EnumDeviceStatus(int Num)
|
|
{
|
|
return(NULL);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
POPTIONC
|
|
TAPEDEVC::GetOptionInfo(VOID)
|
|
{
|
|
return(&DeviceInfo.Option);
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
VOID
|
|
TAPEDEVC::SetOptionInfo(POPTIONC Option)
|
|
{
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE: BUGBUG
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetOption(VOID)
|
|
{
|
|
return( (PCHAR) DeviceInfo.Option.GetDriverName());
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetInstInfFileName(VOID)
|
|
{
|
|
return(NULL);
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetRemInfFileName(VOID)
|
|
{
|
|
return(NULL);
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
TAPEDEVC::IsInfInBld(VOID)
|
|
{
|
|
return(TRUE);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetOptionText(VOID)
|
|
{
|
|
return(DeviceInfo.Option.GetOptionName());
|
|
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
VOID
|
|
TAPEDEVC::SetOptionText(PCHAR OptionTextP)
|
|
{
|
|
DeviceInfo.Option.SetOptionName(OptionTextP);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
int
|
|
TAPEDEVC::GetServiceIndex(VOID)
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR
|
|
TAPEDEVC::GetDriverName(VOID)
|
|
{
|
|
if(*(DeviceInfo.Option.GetDriverName()) == '\0')
|
|
return(NULL);
|
|
|
|
return( (PCHAR) DeviceInfo.Option.GetDriverName() );
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
BOOL
|
|
TAPEDEVC::IsDriverInstalled(VOID)
|
|
{
|
|
|
|
|
|
return( (BOOL)DeviceInfo.DeviceClaimed );
|
|
|
|
#if 0
|
|
|
|
if(!DeviceInfo.VendorId[0])
|
|
return(FALSE);
|
|
|
|
if( (BOOL)DeviceInfo.DeviceClaimed )
|
|
return( IsDDriverInstalled((PCHAR)DeviceInfo.Option.GetDriverName()) );
|
|
else
|
|
return(FALSE);
|
|
#endif
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
|
|
BOOL
|
|
TAPEDEVC::IsDriverStarted(VOID)
|
|
{
|
|
return((BOOL)DeviceInfo.DeviceClaimed);
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
|
|
BOOL
|
|
TAPEDEVC::IsDeviceClaimedByDriver(VOID)
|
|
{
|
|
return((BOOL)DeviceInfo.DeviceClaimed);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
|
|
VOID
|
|
TAPEDEVC::UpdateDriverStatus(VOID)
|
|
{
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
DWORD
|
|
TAPEDEVC::GetDriverFlags(VOID)
|
|
{
|
|
|
|
if(!_stricmp(DeviceInfo.Option.GetDriverName(),"QIC117"))
|
|
return(DRIVER_REBOOT_START);
|
|
|
|
|
|
return(DRIVER_DONOTHING_START);
|
|
}
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
UCHAR TAPEDEVC::GetInitiatorPortNumber()
|
|
{
|
|
return(DeviceInfo.PortNumber);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
PCHAR TAPEDEVC::GetInitiatorDriverName()
|
|
{
|
|
return((PCHAR)DeviceInfo.InitiatorNameString);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
UCHAR TAPEDEVC::GetInitiatorBus()
|
|
{
|
|
return(DeviceInfo.BUS);
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
UCHAR TAPEDEVC::GetInitiatorId()
|
|
{
|
|
return(DeviceInfo.InitiatorID);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
UCHAR TAPEDEVC::GetDeviceID()
|
|
{
|
|
return(DeviceInfo.ID);
|
|
}
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
UCHAR TAPEDEVC::GetDeviceLun()
|
|
{
|
|
return(DeviceInfo.LUN);
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION:RescanTapeSpawnFunc
|
|
//*
|
|
//* PURPOSE: If Rescan == TRUE i will actualy rescan the bus for new devices.
|
|
//* If it is false i will only get the inqirary data and
|
|
//*
|
|
//* INPUT:
|
|
//*
|
|
//* RETURNS:
|
|
//*********************************************************************
|
|
int
|
|
RescanTapeSpawnFunc(
|
|
LPVOID Data)
|
|
{
|
|
BOOL Ret;
|
|
PTAPEDEVLISTC TapeDevList = (PTAPEDEVLISTC) Data;
|
|
|
|
//
|
|
//----- Rescan the scsi buss
|
|
//
|
|
Ret = TapeDevList->GetTapeInfo(NULL);
|
|
if(Ret != TRUE)
|
|
{
|
|
//
|
|
// Getting tape device info failed
|
|
//
|
|
MessageBox(0,GetString(IDS_ERROR_GET_TAPE_INFO),
|
|
GetString(IDS_ERROR),MB_ICONSTOP);
|
|
}
|
|
return(Ret);
|
|
}
|
|
|
|
|
|
BOOL
|
|
IsDDriverInstalled(PCHAR aOption)
|
|
{
|
|
OPTIONC Option(aOption);
|
|
|
|
return(Option.IsInstalled());
|
|
}
|
|
|
|
|
|
//*********************************************************************
|
|
//* FUNCTION: GetImageIndex
|
|
//*
|
|
//* PURPOSE:
|
|
//*********************************************************************
|
|
int GetDeviceImageIndex(
|
|
UCHAR DeviceType)
|
|
{
|
|
int i=0;
|
|
|
|
while( (ScsiDeviceTypes[i].Type != DeviceType) &&
|
|
(ScsiDeviceTypes[i].Type != TYPE_NON) )
|
|
{
|
|
i++;
|
|
}
|
|
return(i);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|