diff -r 000000000000 -r 96e5fb8b040d kerneltest/f32test/shostmassstorage/msman/src/cusbotgwatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/shostmassstorage/msman/src/cusbotgwatcher.cpp Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,196 @@ +// Copyright (c) 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: +// + +#include +#include +#include +#include +#include + +#include "cusbotg.h" +#include "cusbotgwatcher.h" + +#include "tmslog.h" +#include "debug.h" + + +CUsbOtgBaseWatcher::CUsbOtgBaseWatcher(RUsbOtgDriver& aLdd) +: CActive(CActive::EPriorityStandard), + iLdd(aLdd) + { + __MSFNLOG + CActiveScheduler::Add(this); + } + + +CUsbOtgBaseWatcher::~CUsbOtgBaseWatcher() + { + __MSFNLOG + Cancel(); + } + +void CUsbOtgBaseWatcher::Start() + { + __MSFNLOG + Post(); + } + + + +CRequestSessionWatcher* CRequestSessionWatcher::NewL(MUsbRequestSessionObserver& aObserver) + { + __MSFNSLOG + CRequestSessionWatcher* r = new (ELeave) CRequestSessionWatcher(aObserver); + r->ConstructL(); + return r; + } + +CRequestSessionWatcher::CRequestSessionWatcher(MUsbRequestSessionObserver& aObserver) +: CActive(EPriorityStandard), + iObserver(aObserver) + { + __MSFNLOG + } + +void CRequestSessionWatcher::ConstructL() + { + __MSFNLOG + User::LeaveIfError(iProperty.Define(KUidUsbManCategory, KUsbRequestSessionProperty, RProperty::EInt)); + User::LeaveIfError(iProperty.Attach(KUidUsbManCategory, KUsbRequestSessionProperty)); + CActiveScheduler::Add(this); + + // initial subscription and process current property value + RunL(); + } + + +void CRequestSessionWatcher::DoCancel() + { + __MSFNLOG + iProperty.Cancel(); + } + + +CRequestSessionWatcher::~CRequestSessionWatcher() + { + __MSFNLOG + Cancel(); + iProperty.Close(); + iProperty.Delete(KUidUsbManCategory, KUsbRequestSessionProperty); + } + + +void CRequestSessionWatcher::RunL() + { + __MSFNLOG + // resubscribe before processing new value to prevent missing updates + iProperty.Subscribe(iStatus); + SetActive(); + TInt val; + User::LeaveIfError(iProperty.Get(KUidUsbManCategory, KUsbRequestSessionProperty, val)); + __USBOTGPRINT1(_L(">> CUsbRequestSessionWatcher[%d]"), val); + + switch(val) + { + case KUsbManSessionOpen: + { + iObserver.BusRequestL(); + } + break; + default: + __USBOTGPRINT(_L("Event ignored")); + break; + } + } + +TInt CRequestSessionWatcher::RunError(TInt aError) + { + __MSFNLOG + __USBOTGPRINT1(_L("CUsbRequestSessionWatcher::RunError[%d]"), aError); + return KErrNone; + } + + + + + + + + + +CUsbOtgEventWatcher* CUsbOtgEventWatcher::NewL(RUsbOtgDriver& aLdd, + CUsbOtg& aUsbOtg) + { + __MSFNSLOG + CUsbOtgEventWatcher* r = new (ELeave) CUsbOtgEventWatcher(aLdd, aUsbOtg); + r->ConstructL(); + return r; + } + +CUsbOtgEventWatcher::CUsbOtgEventWatcher(RUsbOtgDriver& aLdd, + CUsbOtg& aUsbOtg) +: CUsbOtgBaseWatcher(aLdd), + iUsbOtg(aUsbOtg) + { + __MSFNLOG + } + + +void CUsbOtgEventWatcher::ConstructL() + { + __MSFNLOG + } + + +void CUsbOtgEventWatcher::DoCancel() + { + __MSFNLOG + iLdd.CancelOtgEventRequest(); + } + + +CUsbOtgEventWatcher::~CUsbOtgEventWatcher() + { + __MSFNLOG + } + + +void CUsbOtgEventWatcher::Post() + { + __MSFNLOG + iLdd.QueueOtgEventRequest(iEvent, iStatus); + SetActive(); + } + +void CUsbOtgEventWatcher::RunL() + { + __MSFNLOG + + TInt r = iStatus.Int(); + User::LeaveIfError(r); + + __USBOTGPRINT1(_L(">> CUsbOtgEventWatcher[%x]"), iEvent); + User::LeaveIfError(r); + + iUsbOtg.HandleUsbOtgEvent(iEvent); + Start(); + } + +TInt CUsbOtgEventWatcher::RunError(TInt aError) + { + __MSFNLOG + __USBOTGPRINT1(_L("CUsbRequestSessionWatcher::RunError[%d]"), aError); + return KErrNone; + }