1052 lines
21 KiB
C++
1052 lines
21 KiB
C++
|
/*++
|
|||
|
|
|||
|
<EFBFBD> 1998 Seagate Software, Inc. All rights reserved
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
RmsCElmt.cpp
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Implementation of CRmsChangerElement
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Brian Dodd [brian] 15-Nov-1996
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
|
|||
|
#include "RmsCElmt.h"
|
|||
|
#include "RmsServr.h"
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// CRmsChangerElement methods
|
|||
|
//
|
|||
|
|
|||
|
|
|||
|
CRmsChangerElement::CRmsChangerElement(
|
|||
|
void
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
CRmsChangerElement constructor
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_elementNo = 0;
|
|||
|
|
|||
|
m_location.SetLocation(RmsElementUnknown, GUID_NULL, GUID_NULL,
|
|||
|
0, 0, 0, 0, FALSE);
|
|||
|
|
|||
|
m_mediaSupported = RmsMediaUnknown;
|
|||
|
|
|||
|
m_isStorage = FALSE;
|
|||
|
|
|||
|
m_isOccupied = FALSE;
|
|||
|
|
|||
|
m_pCartridge = NULL;
|
|||
|
|
|||
|
m_ownerClassId = CLSID_NULL;
|
|||
|
|
|||
|
m_getCounter = 0;
|
|||
|
|
|||
|
m_putCounter = 0;
|
|||
|
|
|||
|
m_resetCounterTimestamp = 0;
|
|||
|
|
|||
|
m_lastGetTimestamp = 0;
|
|||
|
|
|||
|
m_lastPutTimestamp = 0;
|
|||
|
|
|||
|
m_x1 = 0;
|
|||
|
|
|||
|
m_x2 = 0;
|
|||
|
|
|||
|
m_x3 = 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
CRmsChangerElement::CompareTo(
|
|||
|
IN IUnknown *pCollectable,
|
|||
|
OUT SHORT *pResult
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
CRmsChangerElement::CompareTo
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = E_FAIL;
|
|||
|
SHORT result = 1;
|
|||
|
|
|||
|
WsbTraceIn( OLESTR("CRmsChangerElement::CompareTo"), OLESTR("") );
|
|||
|
|
|||
|
try {
|
|||
|
|
|||
|
// Validate arguments - Okay if pResult is NULL
|
|||
|
WsbAssertPointer( pCollectable );
|
|||
|
|
|||
|
CComQIPtr<IRmsChangerElement, &IID_IRmsChangerElement> pElmt = pCollectable;
|
|||
|
WsbAssertPointer( pElmt );
|
|||
|
|
|||
|
switch ( m_findBy ) {
|
|||
|
|
|||
|
case RmsFindByElementNumber:
|
|||
|
{
|
|||
|
|
|||
|
LONG elementNo;
|
|||
|
|
|||
|
WsbAffirmHr( pElmt->GetElementNo( &elementNo ) );
|
|||
|
|
|||
|
if( m_elementNo == elementNo ) {
|
|||
|
|
|||
|
// Element numbers match
|
|||
|
hr = S_OK;
|
|||
|
result = 0;
|
|||
|
|
|||
|
}
|
|||
|
else {
|
|||
|
hr = S_FALSE;
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case RmsFindByMediaSupported:
|
|||
|
{
|
|||
|
|
|||
|
RmsMedia mediaSupported;
|
|||
|
|
|||
|
WsbAffirmHr( pElmt->GetMediaSupported( (LONG*) &mediaSupported ) );
|
|||
|
|
|||
|
if( m_mediaSupported == mediaSupported ) {
|
|||
|
|
|||
|
// media types supported match
|
|||
|
hr = S_OK;
|
|||
|
result = 0;
|
|||
|
|
|||
|
}
|
|||
|
else {
|
|||
|
hr = S_FALSE;
|
|||
|
result = 1;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
|
|||
|
// What default makes sense?
|
|||
|
WsbAssertHr( E_UNEXPECTED );
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
WsbCatch( hr );
|
|||
|
|
|||
|
if ( SUCCEEDED(hr) && (0 != pResult) ) {
|
|||
|
*pResult = result;
|
|||
|
}
|
|||
|
|
|||
|
WsbTraceOut( OLESTR("CRmsChangerElement::CompareTo"),
|
|||
|
OLESTR("hr = <%ls>, result = <%ls>"),
|
|||
|
WsbHrAsString( hr ), WsbPtrToShortAsString( pResult ) );
|
|||
|
|
|||
|
return hr;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
CRmsChangerElement::GetSizeMax(
|
|||
|
OUT ULARGE_INTEGER* /*pcbSize*/
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IPersistStream::GetSizeMax
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = E_NOTIMPL;
|
|||
|
|
|||
|
// ULARGE_INTEGER cartridgeLen;
|
|||
|
// ULARGE_INTEGER locationLen;
|
|||
|
|
|||
|
|
|||
|
// WsbTraceIn(OLESTR("CRmsChangerElement::GetSizeMax"), OLESTR(""));
|
|||
|
|
|||
|
// try {
|
|||
|
// WsbAssert(0 != pcbSize, E_POINTER);
|
|||
|
|
|||
|
// // We need the IRmsCartridge interface to get the value of the object.
|
|||
|
// CComQIPtr<IPersistStream, &IID_IPersistStream> pPersistCartridge = m_pCartridge;
|
|||
|
// WsbAssertPointer( pPersistCartridge );
|
|||
|
|
|||
|
// pPersistCartridge->GetSizeMax(&cartridgeLen);
|
|||
|
|
|||
|
// m_location.GetSizeMax(&locationLen);
|
|||
|
|
|||
|
// // Get max size
|
|||
|
// pcbSize->QuadPart = WsbPersistSizeOf(LONG) + // m_elementNo
|
|||
|
// locationLen.QuadPart + // m_location
|
|||
|
// WsbPersistSizeOf(LONG) + // m_mediaSupported
|
|||
|
// WsbPersistSizeOf(BOOL) + // m_isStorage
|
|||
|
// WsbPersistSizeOf(BOOL) + // m_isOccupied
|
|||
|
// cartridgeLen.QuadPart + // m_pCartridge
|
|||
|
// WsbPersistSizeOf(CLSID) + // m_ownerClassId
|
|||
|
// WsbPersistSizeOf(LONG) + // m_getCounter
|
|||
|
// WsbPersistSizeOf(LONG) + // m_putCounter
|
|||
|
// sizeof(DATE) + // m_resetCounterTimestamp
|
|||
|
// sizeof(DATE) + // m_lastGetTimestamp
|
|||
|
// sizeof(DATE) + // m_lastPutTimestamp
|
|||
|
// WsbPersistSizeOf(LONG) + // m_x1
|
|||
|
// WsbPersistSizeOf(LONG) + // m_x2
|
|||
|
// WsbPersistSizeOf(LONG); // m_x3
|
|||
|
|
|||
|
// } WsbCatch(hr);
|
|||
|
|
|||
|
// WsbTraceOut(OLESTR("CRmsChangerElement::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pcbSize));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
CRmsChangerElement::Load(
|
|||
|
IN IStream* pStream
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IPersistStream::Load
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsChangerElement::Load"), OLESTR(""));
|
|||
|
|
|||
|
try {
|
|||
|
CComQIPtr<IRmsServer, &IID_IRmsServer> pServer = g_pServer;
|
|||
|
ULONG temp;
|
|||
|
|
|||
|
WsbAssert(0 != pStream, E_POINTER);
|
|||
|
WsbAssertPointer(pServer);
|
|||
|
|
|||
|
WsbAffirmHr(CRmsComObject::Load(pStream));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_elementNo));
|
|||
|
|
|||
|
WsbAffirmHr(m_location.Load(pStream));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &temp));
|
|||
|
m_mediaSupported = (RmsMedia)temp;
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_isStorage));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_isOccupied));
|
|||
|
|
|||
|
GUID cartId;
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &cartId));
|
|||
|
if (0 != memcmp(&GUID_NULL, &cartId, sizeof(GUID))) {
|
|||
|
hr = pServer->FindCartridgeById(cartId, &m_pCartridge);
|
|||
|
if (S_OK == hr) {
|
|||
|
CComQIPtr<IRmsDrive, &IID_IRmsDrive> pDrive = (IRmsChangerElement*)this;
|
|||
|
|
|||
|
if (pDrive) {
|
|||
|
WsbAffirmHr(m_pCartridge->SetDrive(pDrive));
|
|||
|
}
|
|||
|
} else if (RMS_E_NOT_FOUND == hr) {
|
|||
|
// TODO ???
|
|||
|
} else {
|
|||
|
WsbThrow(hr);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_ownerClassId));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_getCounter));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_putCounter));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_x1));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_x2));
|
|||
|
|
|||
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_x3));
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsChangerElement::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
CRmsChangerElement::Save(
|
|||
|
IN IStream* pStream,
|
|||
|
IN BOOL clearDirty
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IPersistStream::Save
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsChangerElement::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
|
|||
|
|
|||
|
try {
|
|||
|
WsbAssert(0 != pStream, E_POINTER);
|
|||
|
|
|||
|
WsbAffirmHr(CRmsComObject::Save(pStream, clearDirty));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_elementNo));
|
|||
|
|
|||
|
WsbAffirmHr(m_location.Save(pStream, clearDirty));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, (ULONG) m_mediaSupported));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_isStorage));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_isOccupied));
|
|||
|
|
|||
|
// Save the ID (GUID) for the cartridge
|
|||
|
GUID cartId;
|
|||
|
if (!m_pCartridge) {
|
|||
|
cartId = GUID_NULL;
|
|||
|
} else {
|
|||
|
WsbAffirmHr(m_pCartridge->GetCartridgeId(&cartId));
|
|||
|
}
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, cartId));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_ownerClassId));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_getCounter));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_putCounter));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_x1));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_x2));
|
|||
|
|
|||
|
WsbAffirmHr(WsbSaveToStream(pStream, m_x3));
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsChangerElement::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
CRmsChangerElement::Test(
|
|||
|
OUT USHORT *pPassed,
|
|||
|
OUT USHORT *pFailed
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IWsbTestable::Test
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
CComPtr<IRmsLibrary> pLibrary1;
|
|||
|
CComPtr<IRmsLibrary> pLibrary2;
|
|||
|
|
|||
|
CComPtr<IPersistFile> pFile1;
|
|||
|
CComPtr<IPersistFile> pFile2;
|
|||
|
|
|||
|
LONG i;
|
|||
|
|
|||
|
LONG longVal1 = 11111111;
|
|||
|
LONG longWork1;
|
|||
|
|
|||
|
LONG longVal2 = 22222222;
|
|||
|
LONG longWork2;
|
|||
|
|
|||
|
LONG longVal3 = 33333333;
|
|||
|
LONG longWork3;
|
|||
|
|
|||
|
// DATE dateVal1;
|
|||
|
// DATE dateWork1;
|
|||
|
|
|||
|
CLSID clsidVal1 = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
|
|||
|
CLSID clsidWork1;
|
|||
|
|
|||
|
// CRmsLocator Fields
|
|||
|
LONG locVal1 = 11111111;
|
|||
|
GUID locVal2 = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
|
|||
|
GUID locVal3 = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1};
|
|||
|
LONG locVal4 = 44444444;
|
|||
|
LONG locVal5 = 55555555;
|
|||
|
LONG locVal6 = 66666666;
|
|||
|
LONG locVal7 = 77777777;
|
|||
|
BOOL locVal8 = TRUE;
|
|||
|
|
|||
|
LONG locWork1;
|
|||
|
GUID locWork2;
|
|||
|
GUID locWork3;
|
|||
|
LONG locWork4;
|
|||
|
LONG locWork5;
|
|||
|
LONG locWork6;
|
|||
|
LONG locWork7;
|
|||
|
BOOL locWork8;
|
|||
|
|
|||
|
|
|||
|
LONG mediaTable [RMSMAXMEDIATYPES] = { RmsMediaUnknown,
|
|||
|
RmsMedia8mm,
|
|||
|
RmsMedia4mm,
|
|||
|
RmsMediaDLT,
|
|||
|
RmsMediaOptical,
|
|||
|
RmsMediaMO35,
|
|||
|
RmsMediaWORM,
|
|||
|
RmsMediaCDR,
|
|||
|
RmsMediaDVD,
|
|||
|
RmsMediaDisk,
|
|||
|
RmsMediaFixed,
|
|||
|
RmsMediaTape };
|
|||
|
|
|||
|
|
|||
|
WsbTraceIn(OLESTR("CRmsChangerElement::Test"), OLESTR(""));
|
|||
|
|
|||
|
try {
|
|||
|
// Get the Library interface.
|
|||
|
hr = S_OK;
|
|||
|
|
|||
|
try {
|
|||
|
WsbAssertHr(((IUnknown*) (IRmsLibrary*) this)->QueryInterface(IID_IRmsLibrary, (void**) &pLibrary1));
|
|||
|
|
|||
|
// Test GetElementNo
|
|||
|
m_elementNo = longVal1;
|
|||
|
|
|||
|
GetElementNo(&longWork1);
|
|||
|
|
|||
|
if(longVal1 == longWork1){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetLocation & GetLocation
|
|||
|
SetLocation( locVal1, locVal2, locVal3, locVal4,
|
|||
|
locVal5, locVal6, locVal7, locVal8);
|
|||
|
|
|||
|
GetLocation( &locWork1, &locWork2, &locWork3, &locWork4,
|
|||
|
&locWork5, &locWork6, &locWork7, &locWork8);
|
|||
|
|
|||
|
if((locVal1 == locWork1) &&
|
|||
|
(locVal2 == locWork2) &&
|
|||
|
(locVal3 == locWork3) &&
|
|||
|
(locVal4 == locWork4) &&
|
|||
|
(locVal5 == locWork5) &&
|
|||
|
(locVal6 == locWork6) &&
|
|||
|
(locVal7 == locWork7) &&
|
|||
|
(locVal8 == locWork8)){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetMediaSupported & GetMediaSupported
|
|||
|
for (i = 0; i < RMSMAXMEDIATYPES; i++){
|
|||
|
|
|||
|
longWork1 = mediaTable[i];
|
|||
|
|
|||
|
SetMediaSupported (longWork1);
|
|||
|
|
|||
|
GetMediaSupported (&longWork2);
|
|||
|
|
|||
|
if (longWork1 == longWork2){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Test SetIsStorage & IsStorage to TRUE
|
|||
|
hr = S_OK;
|
|||
|
|
|||
|
try{
|
|||
|
WsbAffirmHr(SetIsStorage (TRUE));
|
|||
|
WsbAffirmHr(IsStorage ());
|
|||
|
} WsbCatch (hr);
|
|||
|
|
|||
|
if (hr == S_OK){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetIsStorage & IsStorage to FALSE
|
|||
|
hr = S_OK;
|
|||
|
|
|||
|
try{
|
|||
|
WsbAffirmHr(SetIsStorage (FALSE));
|
|||
|
WsbAffirmHr(IsStorage ());
|
|||
|
} WsbCatch (hr);
|
|||
|
|
|||
|
if (hr == S_OK){
|
|||
|
(*pFailed)++;
|
|||
|
} else {
|
|||
|
(*pPassed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetIsOccupied & IsOccupied to TRUE
|
|||
|
hr = S_OK;
|
|||
|
|
|||
|
try{
|
|||
|
WsbAffirmHr(SetIsOccupied (TRUE));
|
|||
|
WsbAffirmHr(IsOccupied ());
|
|||
|
} WsbCatch (hr);
|
|||
|
|
|||
|
if (hr == S_OK){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetIsOccupied & IsOccupied to FALSE
|
|||
|
hr = S_OK;
|
|||
|
|
|||
|
try{
|
|||
|
WsbAffirmHr(SetIsOccupied (FALSE));
|
|||
|
WsbAffirmHr(IsOccupied ());
|
|||
|
} WsbCatch (hr);
|
|||
|
|
|||
|
if (hr == S_OK){
|
|||
|
(*pFailed)++;
|
|||
|
} else {
|
|||
|
(*pPassed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetCartridge & GetCartridge
|
|||
|
|
|||
|
// Test SetOwnerClassId & GetOwnerClassId
|
|||
|
SetOwnerClassId(clsidVal1);
|
|||
|
|
|||
|
GetOwnerClassId(&clsidWork1);
|
|||
|
|
|||
|
if(clsidVal1 == clsidWork1){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test SetAccessCounters & GetAccessCounters & ResetAccessCounters
|
|||
|
m_getCounter = longVal1;
|
|||
|
|
|||
|
m_putCounter = longVal2;
|
|||
|
|
|||
|
GetAccessCounters(&longWork1, &longWork2);
|
|||
|
|
|||
|
if((longVal1 == longWork1) &&
|
|||
|
(longVal2 == longWork2)){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
ResetAccessCounters();
|
|||
|
|
|||
|
GetAccessCounters(&longWork1, &longWork2);
|
|||
|
|
|||
|
if((0 == longWork1) &&
|
|||
|
(0 == longWork2)){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
// Test GetResetCounterTimestamp
|
|||
|
|
|||
|
// Test GetLastGetTimestamp
|
|||
|
|
|||
|
// Test GetLastPutTimestamp
|
|||
|
|
|||
|
// Test SetCoordinates & GetCoordinates
|
|||
|
SetCoordinates(longVal1, longVal2, longVal3);
|
|||
|
|
|||
|
GetCoordinates(&longWork1, &longWork2, &longWork3);
|
|||
|
|
|||
|
if((longVal1 == longWork1) &&
|
|||
|
(longVal2 == longWork2) &&
|
|||
|
(longVal3 == longWork3)){
|
|||
|
(*pPassed)++;
|
|||
|
} else {
|
|||
|
(*pFailed)++;
|
|||
|
}
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
|
|||
|
// Tally up the results
|
|||
|
|
|||
|
hr = S_OK;
|
|||
|
if (*pFailed) {
|
|||
|
hr = S_FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
WsbTraceOut(OLESTR("CRmsChangerElement::Test"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
CRmsChangerElement::~CRmsChangerElement(
|
|||
|
void
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This is the destructor for the changer element class.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_pCartridge = NULL;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// IRmsChangerElement implementation
|
|||
|
//
|
|||
|
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetElementNo(
|
|||
|
LONG *pElementNo
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetElementNo
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pElementNo = m_elementNo;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetLocation(
|
|||
|
LONG *pType,
|
|||
|
GUID *pLibId,
|
|||
|
GUID *pMediaSetId,
|
|||
|
LONG *pPos,
|
|||
|
LONG *pAlt1,
|
|||
|
LONG *pAlt2,
|
|||
|
LONG *pAlt3,
|
|||
|
BOOL *pInvert)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetLocation
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
return m_location.GetLocation(pType, pLibId, pMediaSetId, pPos, pAlt1, pAlt2, pAlt3, pInvert);;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::SetLocation(
|
|||
|
LONG type,
|
|||
|
GUID libId,
|
|||
|
GUID mediaSetId,
|
|||
|
LONG pos,
|
|||
|
LONG alt1,
|
|||
|
LONG alt2,
|
|||
|
LONG alt3,
|
|||
|
BOOL invert)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::SetLocation
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_location.SetLocation( type, libId, mediaSetId, pos,
|
|||
|
alt1, alt2, alt3, invert );
|
|||
|
|
|||
|
// TODO: clean this up: pos, or m_elementNo, not both.
|
|||
|
m_elementNo = pos;
|
|||
|
|
|||
|
// m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetMediaSupported(
|
|||
|
LONG *pType
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetMediaSupported
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pType = m_mediaSupported;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::SetMediaSupported(
|
|||
|
LONG type
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::SetMediaSupported
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_mediaSupported = (RmsMedia) type;
|
|||
|
// m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::SetIsStorage(
|
|||
|
BOOL flag
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::SetIsStorage
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_isStorage = flag;
|
|||
|
// m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::IsStorage(
|
|||
|
void
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::IsStorage
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_FALSE;
|
|||
|
|
|||
|
if (m_isStorage){
|
|||
|
hr = S_OK;
|
|||
|
}
|
|||
|
|
|||
|
return (hr);
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::SetIsOccupied(
|
|||
|
BOOL flag
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::SetIsOccupied
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_isOccupied = flag;
|
|||
|
|
|||
|
if ( FALSE == m_isOccupied ) {
|
|||
|
|
|||
|
m_pCartridge = 0;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::IsOccupied(
|
|||
|
void
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::IsOccupied
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_FALSE;
|
|||
|
|
|||
|
if (m_isOccupied){
|
|||
|
hr = S_OK;
|
|||
|
}
|
|||
|
|
|||
|
return (hr);
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetCartridge(
|
|||
|
IRmsCartridge **ptr)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetCartridge
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
try {
|
|||
|
WsbAssertPointer(ptr);
|
|||
|
|
|||
|
*ptr = m_pCartridge;
|
|||
|
m_pCartridge->AddRef();
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::SetCartridge(
|
|||
|
IRmsCartridge *ptr)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::SetCartridge
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
HRESULT hr = S_OK;
|
|||
|
|
|||
|
try {
|
|||
|
WsbAssertPointer(ptr);
|
|||
|
|
|||
|
m_pCartridge = ptr;
|
|||
|
m_isOccupied = TRUE;
|
|||
|
|
|||
|
} WsbCatch(hr);
|
|||
|
|
|||
|
return(hr);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetOwnerClassId(
|
|||
|
CLSID *pClassId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetOwnerClassId
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pClassId = m_ownerClassId;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::SetOwnerClassId(
|
|||
|
CLSID classId
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::SetOwnerClassId
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_ownerClassId = classId;
|
|||
|
// m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetAccessCounters(
|
|||
|
LONG *pGets,
|
|||
|
LONG *pPuts
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetAccessCounters
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pGets = m_getCounter;
|
|||
|
*pPuts = m_putCounter;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::ResetAccessCounters(
|
|||
|
void
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::ResetAccessCounters
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_getCounter = 0;
|
|||
|
m_putCounter = 0;
|
|||
|
// m_resetCounterTimestamp = COleDatetime::GetCurrentTime();
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetResetCounterTimestamp(
|
|||
|
DATE *pDate
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetResetCounterTimestamp
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pDate = m_resetCounterTimestamp;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetLastGetTimestamp(
|
|||
|
DATE *pDate
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetLastGetTimestamp
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pDate = m_lastGetTimestamp;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetLastPutTimestamp(
|
|||
|
DATE *pDate
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetLastPutTimestamp
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pDate = m_lastPutTimestamp;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::GetCoordinates(
|
|||
|
LONG *pX1,
|
|||
|
LONG *pX2,
|
|||
|
LONG *pX3
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::GetCoordinates
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
*pX1 = m_x1;
|
|||
|
*pX2 = m_x2;
|
|||
|
*pX3 = m_x3;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|
|||
|
STDMETHODIMP
|
|||
|
CRmsChangerElement::SetCoordinates(
|
|||
|
LONG x1,
|
|||
|
LONG x2,
|
|||
|
LONG x3
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Implements:
|
|||
|
|
|||
|
IRmsChangerElement::SetCoordinates
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
m_x1 = x1;
|
|||
|
m_x2 = x2;
|
|||
|
m_x3 = x3;
|
|||
|
|
|||
|
// m_isDirty = TRUE;
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
|