|
|
/*++
� 1998 Seagate Software, Inc. All rights reserved
Module Name:
RmsChngr.h
Abstract:
Declaration of the CRmsMediumChanger class
Author:
Brian Dodd [brian] 15-Nov-1996
Revision History:
--*/
#ifndef _RMSCHNGR_
#define _RMSCHNGR_
#include "resource.h" // resource symbols
#include "RmsDvice.h" // CRmsDevice
#include "RmsLocat.h" // CRmsLocator
/*++
Class Name:
CRmsMediumChanger
Class Description:
A CRmsMediumChanger represents the robotic or human mechanism that moves media between the elements of a library. The state of in-progress move operations is maintained with this object to aid recovery.
--*/
class CRmsMediumChanger : public CComDualImpl<IRmsMediumChanger, &IID_IRmsMediumChanger, &LIBID_RMSLib>, public CRmsDevice, // inherits CRmsChangerElement
public CWsbObject, // inherits CComObjectRoot
public IRmsMoveMedia, public CComCoClass<CRmsMediumChanger,&CLSID_CRmsMediumChanger> { public: CRmsMediumChanger() {} BEGIN_COM_MAP(CRmsMediumChanger) COM_INTERFACE_ENTRY2(IDispatch, IRmsMediumChanger) COM_INTERFACE_ENTRY(IRmsMediumChanger) COM_INTERFACE_ENTRY(IRmsMoveMedia) COM_INTERFACE_ENTRY(IRmsComObject) COM_INTERFACE_ENTRY(IRmsChangerElement) COM_INTERFACE_ENTRY(IRmsDevice) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY2(IPersist, IPersistStream) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(IWsbCollectable) COM_INTERFACE_ENTRY(IWsbPersistStream) COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP()
DECLARE_REGISTRY_RESOURCEID(IDR_RmsMediumChanger)
// CComObjectRoot
public: STDMETHOD(FinalConstruct)(void); STDMETHOD(FinalRelease)(void);
// IPersist
public: STDMETHOD(GetClassID)(CLSID *pClsid);
// IPersistStream
public: STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pSize); STDMETHOD(Load)(IStream* pStream); STDMETHOD(Save)(IStream* pStream, BOOL clearDirty);
// IWsbCollectable
public: STDMETHOD(CompareTo)(IUnknown* pCollectable, SHORT* pResult); WSB_FROM_CWSBOBJECT;
// IWsbTestable
public: STDMETHOD(Test)( OUT USHORT *pPassed, OUT USHORT *pFailed);
// IRmsMediumChanger
public: STDMETHOD( Initialize )( void );
STDMETHOD( AcquireDevice )( void ); STDMETHOD( ReleaseDevice )( void );
STDMETHOD( GetHome )( LONG *pType, LONG *pPos, BOOL *pInvert ); STDMETHOD( SetHome )( LONG type, LONG pos, BOOL invert );
STDMETHOD( SetAutomatic )( BOOL flag ); STDMETHOD( IsAutomatic )( void );
STDMETHOD( SetCanRotate )( BOOL flag ); STDMETHOD( CanRotate )( void );
STDMETHOD( GetOperation )( BSTR *pOperation ); STDMETHOD( SetOperation )( BSTR pOperation );
STDMETHOD( GetPercentComplete )( BYTE *pPercent ); STDMETHOD( SetPercentComplete )( BYTE percent );
STDMETHOD( TestReady )( void );
STDMETHOD( ImportCartridge )( IRmsCartridge **pCart ); STDMETHOD( ExportCartridge )( IRmsCartridge **pCart ); STDMETHOD( MoveCartridge )( IN IRmsCartridge *pSrcCart, IN IUnknown *pDestElmt ); STDMETHOD( HomeCartridge )( IN IRmsCartridge *pCart );
// IRmsMoveMedia
public: STDMETHOD( GetParameters )( IN OUT PDWORD pSize, OUT PGET_CHANGER_PARAMETERS pParms ); STDMETHOD( GetProductData )( IN OUT PDWORD pSize, OUT PCHANGER_PRODUCT_DATA pData ); STDMETHOD( RezeroUnit )( void ); STDMETHOD( InitializeElementStatus )( IN CHANGER_ELEMENT_LIST elementList, IN BOOL barCodeScan ); STDMETHOD( Status )( void ); STDMETHOD( SetAccess )( IN CHANGER_ELEMENT element, IN DWORD control ); STDMETHOD( GetElementStatus )( IN CHANGER_ELEMENT_LIST elementList, IN BOOL volumeTagInfo, IN OUT PDWORD pSize, OUT PREAD_ELEMENT_ADDRESS_INFO pElementInformation ); STDMETHOD( ExchangeMedium )( IN CHANGER_ELEMENT source, IN CHANGER_ELEMENT destination1, IN CHANGER_ELEMENT destination2, IN BOOL flip1, IN BOOL flip2 ); STDMETHOD( MoveMedium )( IN CHANGER_ELEMENT source, IN CHANGER_ELEMENT destination, IN BOOL flip ); STDMETHOD( Position )( IN CHANGER_ELEMENT destination, IN BOOL flip ); // STDMETHOD( GetDisplay )( OUT PCHANGER_DISPLAY pDisplay );
// STDMETHOD( SetDisplay )( IN PCHANGER_DISPLAY pDisplay );
STDMETHOD( QueryVolumeTag )( IN CHANGER_ELEMENT startingElement, IN DWORD actionCode, IN PUCHAR pVolumeIDTemplate, OUT PDWORD pNumberOfElementsReturned, OUT PREAD_ELEMENT_ADDRESS_INFO pElementInformation );
// CRmsServer
private:
private:
enum { // Class specific constants:
//
Version = 1, // Class version, this should be
// incremented each time the
// the class definition changes.
MaxInfo = 64 // Max size of the device identifier.
}; //
CRmsLocator m_home; // The position to move to in response to
// to the Home operation.
BOOL m_isAutomatic; // If TRUE, the changer is a robotic device.
BOOL m_canRotate; // If TRUE, the changer can rotate a
// unit of media.
CWsbBstrPtr m_operation; // A description of the in-progress operation.
BYTE m_percentComplete; // A value between 0-100 that indicates
// what portion of the operation is complete.
HANDLE m_handle; // The handle to the changer device. This is used
// by the IRmsMoveMedia interface.
GET_CHANGER_PARAMETERS m_parameters; // Device specific parameters. See NT DDK.
};
#endif // _RMSCHNGR_
|