sl@0: // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include "cusbotg.h" sl@0: #include "cusbotgwatcher.h" sl@0: sl@0: #include "tmslog.h" sl@0: #include "debug.h" sl@0: sl@0: sl@0: CUsbOtgBaseWatcher::CUsbOtgBaseWatcher(RUsbOtgDriver& aLdd) sl@0: : CActive(CActive::EPriorityStandard), sl@0: iLdd(aLdd) sl@0: { sl@0: __MSFNLOG sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: sl@0: CUsbOtgBaseWatcher::~CUsbOtgBaseWatcher() sl@0: { sl@0: __MSFNLOG sl@0: Cancel(); sl@0: } sl@0: sl@0: void CUsbOtgBaseWatcher::Start() sl@0: { sl@0: __MSFNLOG sl@0: Post(); sl@0: } sl@0: sl@0: sl@0: sl@0: CRequestSessionWatcher* CRequestSessionWatcher::NewL(MUsbRequestSessionObserver& aObserver) sl@0: { sl@0: __MSFNSLOG sl@0: CRequestSessionWatcher* r = new (ELeave) CRequestSessionWatcher(aObserver); sl@0: r->ConstructL(); sl@0: return r; sl@0: } sl@0: sl@0: CRequestSessionWatcher::CRequestSessionWatcher(MUsbRequestSessionObserver& aObserver) sl@0: : CActive(EPriorityStandard), sl@0: iObserver(aObserver) sl@0: { sl@0: __MSFNLOG sl@0: } sl@0: sl@0: void CRequestSessionWatcher::ConstructL() sl@0: { sl@0: __MSFNLOG sl@0: User::LeaveIfError(iProperty.Define(KUidUsbManCategory, KUsbRequestSessionProperty, RProperty::EInt)); sl@0: User::LeaveIfError(iProperty.Attach(KUidUsbManCategory, KUsbRequestSessionProperty)); sl@0: CActiveScheduler::Add(this); sl@0: sl@0: // initial subscription and process current property value sl@0: RunL(); sl@0: } sl@0: sl@0: sl@0: void CRequestSessionWatcher::DoCancel() sl@0: { sl@0: __MSFNLOG sl@0: iProperty.Cancel(); sl@0: } sl@0: sl@0: sl@0: CRequestSessionWatcher::~CRequestSessionWatcher() sl@0: { sl@0: __MSFNLOG sl@0: Cancel(); sl@0: iProperty.Close(); sl@0: iProperty.Delete(KUidUsbManCategory, KUsbRequestSessionProperty); sl@0: } sl@0: sl@0: sl@0: void CRequestSessionWatcher::RunL() sl@0: { sl@0: __MSFNLOG sl@0: // resubscribe before processing new value to prevent missing updates sl@0: iProperty.Subscribe(iStatus); sl@0: SetActive(); sl@0: TInt val; sl@0: User::LeaveIfError(iProperty.Get(KUidUsbManCategory, KUsbRequestSessionProperty, val)); sl@0: __USBOTGPRINT1(_L(">> CUsbRequestSessionWatcher[%d]"), val); sl@0: sl@0: switch(val) sl@0: { sl@0: case KUsbManSessionOpen: sl@0: { sl@0: iObserver.BusRequestL(); sl@0: } sl@0: break; sl@0: default: sl@0: __USBOTGPRINT(_L("Event ignored")); sl@0: break; sl@0: } sl@0: } sl@0: sl@0: TInt CRequestSessionWatcher::RunError(TInt aError) sl@0: { sl@0: __MSFNLOG sl@0: __USBOTGPRINT1(_L("CUsbRequestSessionWatcher::RunError[%d]"), aError); sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: CUsbOtgEventWatcher* CUsbOtgEventWatcher::NewL(RUsbOtgDriver& aLdd, sl@0: CUsbOtg& aUsbOtg) sl@0: { sl@0: __MSFNSLOG sl@0: CUsbOtgEventWatcher* r = new (ELeave) CUsbOtgEventWatcher(aLdd, aUsbOtg); sl@0: r->ConstructL(); sl@0: return r; sl@0: } sl@0: sl@0: CUsbOtgEventWatcher::CUsbOtgEventWatcher(RUsbOtgDriver& aLdd, sl@0: CUsbOtg& aUsbOtg) sl@0: : CUsbOtgBaseWatcher(aLdd), sl@0: iUsbOtg(aUsbOtg) sl@0: { sl@0: __MSFNLOG sl@0: } sl@0: sl@0: sl@0: void CUsbOtgEventWatcher::ConstructL() sl@0: { sl@0: __MSFNLOG sl@0: } sl@0: sl@0: sl@0: void CUsbOtgEventWatcher::DoCancel() sl@0: { sl@0: __MSFNLOG sl@0: iLdd.CancelOtgEventRequest(); sl@0: } sl@0: sl@0: sl@0: CUsbOtgEventWatcher::~CUsbOtgEventWatcher() sl@0: { sl@0: __MSFNLOG sl@0: } sl@0: sl@0: sl@0: void CUsbOtgEventWatcher::Post() sl@0: { sl@0: __MSFNLOG sl@0: iLdd.QueueOtgEventRequest(iEvent, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CUsbOtgEventWatcher::RunL() sl@0: { sl@0: __MSFNLOG sl@0: sl@0: TInt r = iStatus.Int(); sl@0: User::LeaveIfError(r); sl@0: sl@0: __USBOTGPRINT1(_L(">> CUsbOtgEventWatcher[%x]"), iEvent); sl@0: User::LeaveIfError(r); sl@0: sl@0: iUsbOtg.HandleUsbOtgEvent(iEvent); sl@0: Start(); sl@0: } sl@0: sl@0: TInt CUsbOtgEventWatcher::RunError(TInt aError) sl@0: { sl@0: __MSFNLOG sl@0: __USBOTGPRINT1(_L("CUsbRequestSessionWatcher::RunError[%d]"), aError); sl@0: return KErrNone; sl@0: }