diff -r 000000000000 -r bde4ae8d615e os/kernelhwsrv/kerneltest/e32test/usbho/t_usbdi/inc/BasicWatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/kernelhwsrv/kerneltest/e32test/usbho/t_usbdi/inc/BasicWatcher.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,155 @@ +#ifndef __BASIC_WATCHER_H +#define __BASIC_WATCHER_H + +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file BasicWatcher.h +* @internalComponent +* +* +*/ + + + +#include +#include +#include "testdebug.h" + +namespace NUnitTesting_USBDI + { + + +/** +This class watches for asynchronous completions and calls back +*/ +class CBasicWatcher : public CActive + { +public: + CBasicWatcher(const TCallBack& aCallBack,TInt aPriority=EPriorityStandard); + virtual ~CBasicWatcher(); + + void CompleteNow(TInt aCompletionCode = KErrNone); + void StartWatching(); + +protected: // From CActive + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + +private: + TCallBack iCallBack; + TInt iCompletionCode; + }; + + + + + +/** +This class describes a watcher for resumptions of interfaces +*/ +class CInterfaceWatcher : public CActive + { +public: + /** + Constructor, build + @param aInterface the usb interface to suspend + @param aCallBack the call back object to call once a resumption signal has happened + */ + CInterfaceWatcher(RUsbInterface& aInterface,const TCallBack& aCallBack) + : CActive(EPriorityUserInput), + iUsbInterface(aInterface), + iResumeCallBack(aCallBack), + iCompletionCode(KErrNone) + { + CActiveScheduler::Add(this); + } + + /** + Destructor + */ + ~CInterfaceWatcher() + { + Cancel(); + } + + /** + Suspend the interface and watch for resumtions + */ + void SuspendAndWatch() + { + iUsbInterface.PermitSuspendAndWaitForResume(iStatus); + SetActive(); + } + + /** + Obtains the most recent completion code for the interface resumption + asynchronous action + @return the completion error code + */ + TInt CompletionCode() const + { + return iCompletionCode; + } + +protected: // From CActive + + /** + */ + void DoCancel() + { + LOG_FUNC + iUsbInterface.CancelPermitSuspend(); + } + + + /** + */ + void RunL() + { + LOG_FUNC + iCompletionCode = iStatus.Int(); + User::LeaveIfError(iResumeCallBack.CallBack()); + } + + /** + */ + TInt RunError() + { + LOG_FUNC + + return KErrNone; + } + +private: + + /** + The USB interface resource + */ + RUsbInterface& iUsbInterface; + + /** + */ + TCallBack iResumeCallBack; + + /** + */ + TInt iCompletionCode; + }; + + + } + +#endif