/*++ © 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, public CRmsDevice, // inherits CRmsChangerElement public CWsbObject, // inherits CComObjectRoot public IRmsMoveMedia, public CComCoClass { 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_