usbengines/usbwatcher/src/cusbwatchersession.cpp
changeset 0 1e05558e2206
child 22 5b2a402e96ac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbwatcher/src/cusbwatchersession.cpp	Thu Dec 17 09:14:30 2009 +0200
@@ -0,0 +1,348 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  USB Watcher session class implementation.
+*
+*/
+
+
+#include "cusbwatchersession.h"
+#include "usbwatchershared.h"
+#include "cusbwatcher.h"
+#include "cusbwatcherserver.h"
+#include "debug.h"
+
+// ----------------------------------------------------------------------------
+// Symbian two-phase constructor
+// ----------------------------------------------------------------------------
+//
+CUsbWatcherSession* CUsbWatcherSession::NewL( CUsbWatcherServer* aServer )
+    {
+    LOG_FUNC
+
+    CUsbWatcherSession* r = new ( ELeave ) CUsbWatcherSession( aServer );
+    CleanupStack::PushL( r );
+    r->ConstructL();
+    CleanupStack::Pop();
+    return r;
+    }
+
+// ----------------------------------------------------------------------------
+// C++ constructor
+// ----------------------------------------------------------------------------
+//
+CUsbWatcherSession::CUsbWatcherSession( CUsbWatcherServer* aServer )
+    : iUsbWatcherServer( aServer )
+    {
+    LOG_FUNC
+
+    }
+
+// ----------------------------------------------------------------------------
+// Second-phase constructor
+// ----------------------------------------------------------------------------
+//
+void CUsbWatcherSession::ConstructL()
+    {
+    LOG_FUNC
+
+    iUsbWatcherServer->Watcher().RegisterObserverL( this );
+    }
+
+// ----------------------------------------------------------------------------
+// Desstructor
+// ----------------------------------------------------------------------------
+//
+CUsbWatcherSession::~CUsbWatcherSession()
+    {
+    LOG_FUNC
+
+    // if server isn't exist then session can not be exist
+    if ( iUsbWatcherServer )
+        {
+        iUsbWatcherServer->Watcher().DeRegisterObserver( this );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// Request handle entry point
+// ----------------------------------------------------------------------------
+//
+void CUsbWatcherSession::ServiceL( const RMessage2& aMessage )
+    {
+    LOG_FUNC
+
+    DispatchMessageL( aMessage );
+    }
+
+// ----------------------------------------------------------------------------
+// Request dispatch function
+// ----------------------------------------------------------------------------
+//
+void CUsbWatcherSession::DispatchMessageL( const RMessage2& aMessage )
+    {
+    LOG_FUNC
+
+    LOG1( "Message = %d", aMessage.Function() );
+
+    TBool complete( ETrue );
+    TInt ret( KErrNone );
+
+
+    switch ( aMessage.Function() )
+        {
+        case EUsbWatcherSetPersonality:
+            ret = SetPersonality( aMessage, complete );
+            break;
+
+        case EUsbWatcherCancelSetPersonality:
+            ret = CancelSetPersonality( aMessage, complete );
+            break;
+
+        case EUsbWatcherSetPreviousPersonality:
+            ret = SetPreviousPersonality( aMessage, complete );
+            break;
+
+        case EUsbWatcherSetPreviousPersonalitySync:
+            ret = SetPreviousPersonalitySync( aMessage, complete );
+            break;
+
+        case EUsbWatcherCancelSetPreviousPersonality:
+            ret = CancelSetPreviousPersonality( aMessage, complete );
+            break;
+
+        case EUsbWatcherSetPreviousPersonalityOnDisconnect:
+            ret = SetPreviousPersonalityOnDisconnect( aMessage, complete );
+            break;
+
+        default:
+            aMessage.Panic( KUsbWatcherCliPncCat, EUsbWatcherPanicIllegalIPC );
+            break;
+        }
+
+    if ( complete )
+        {
+        aMessage.Complete( ret );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// Set certain personality
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcherSession::SetPersonality( const RMessage2& aMessage,
+        TBool& aComplete )
+    {
+    LOG_FUNC
+
+    if( iSetPersonalityOutstanding )
+        {
+        LOG( "Completing outstanding" );
+        iSetPersonalityMessage.Complete( KErrNone );
+        iSetPersonalityOutstanding = EFalse;
+        }
+
+    // Cancel all other pending requests
+    iUsbWatcherServer->Watcher().Notify( KErrCancel );
+
+    iSetPersonalityMessage = aMessage;
+    aComplete = EFalse;
+    iSetPersonalityOutstanding = ETrue;
+
+    //Set force parameter to this session.
+    SetAskOnConnectionSuppression( aMessage.Int1() );
+
+    iUsbWatcherServer->Watcher().SetPersonality( aMessage.Int0(),
+        static_cast<TBool>( aMessage.Int2() ) );
+
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// Cancel pending set personality request
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcherSession::CancelSetPersonality( const RMessage2& aMessage,
+        TBool& aComplete )
+    {
+    LOG_FUNC
+
+    if ( !iSetPersonalityOutstanding )
+        {
+        LOG( "No outstanding SetPersonality request" );
+        return KErrNone;
+        }
+
+    SetAskOnConnectionSuppression( EFalse );
+    aComplete = EFalse;
+    iCancelSetPersonalityMessage = aMessage;
+    iCancelSetPersonalityOutstanding = ETrue;
+
+    iUsbWatcherServer->Watcher().CancelSetPersonality();
+
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// Change to previous personality, asynchronous version
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcherSession::SetPreviousPersonality( const RMessage2& aMessage,
+        TBool& aComplete )
+    {
+    LOG_FUNC
+
+    if( iSetPreviousPersonalityOutstanding )
+        {
+        iSetPreviousPersonalityMessage.Complete( KErrNone );
+        iSetPreviousPersonalityOutstanding = EFalse;
+        }
+
+    // Cancel all other pending requests
+    iUsbWatcherServer->Watcher().Notify( KErrCancel );
+
+    SetAskOnConnectionSuppression( EFalse );
+    iSetPreviousPersonalityOutstanding = ETrue;
+    iSetPreviousPersonalityMessage = aMessage;
+    aComplete = EFalse;
+
+    iUsbWatcherServer->Watcher().SetPreviousPersonality();
+
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// Change to previous personality, synchronous version
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcherSession::SetPreviousPersonalitySync( const RMessage2& /*aMsg*/,
+        TBool& /*aComplete*/ )
+    {
+    LOG_FUNC
+
+    if( iSetPreviousPersonalityOutstanding )
+        {
+        iSetPreviousPersonalityMessage.Complete( KErrNone );
+        iSetPreviousPersonalityOutstanding = EFalse;
+        }
+
+    // Cancel all other pending requests
+    iUsbWatcherServer->Watcher().Notify( KErrCancel );
+
+    SetAskOnConnectionSuppression( EFalse );
+    iUsbWatcherServer->Watcher().SetPreviousPersonality();
+
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// Cancel pending request to set previous personality
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcherSession::CancelSetPreviousPersonality( const RMessage2& aMsg,
+        TBool& aComplete )
+    {
+    LOG_FUNC
+
+    if( !iSetPreviousPersonalityOutstanding )
+        {
+        return KErrNone;
+        }
+
+    aComplete = EFalse;
+    iCancelSetPreviousPersonalityMessage = aMsg;
+    iCancelSetPreviousPersonalityOutstanding = ETrue;
+
+    iUsbWatcherServer->Watcher().CancelSetPreviousPersonality();
+
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// Set the flag to restore personality when disconnected
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcherSession::SetPreviousPersonalityOnDisconnect( const RMessage2&
+        /*aMessage*/, TBool& /*aComplete*/ )
+    {
+    LOG_FUNC
+
+    //connected currently, so ask on connection can be enabled
+    SetAskOnConnectionSuppression( EFalse );
+    iUsbWatcherServer->Watcher().SetPreviousPersonalityOnDisconnect();
+
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// Complete request
+// ----------------------------------------------------------------------------
+//
+void CUsbWatcherSession::Notify( TInt /*aPersonalityId*/, TInt aStatus )
+    {
+    LOG_FUNC
+
+    if( iCancelSetPersonalityOutstanding )
+        {
+        iCancelSetPersonalityOutstanding = EFalse;
+        iCancelSetPersonalityMessage.Complete( KErrNone );
+
+        iSetPersonalityMessage.Complete( aStatus );
+        iSetPersonalityOutstanding = EFalse;
+        }
+
+    if ( iSetPersonalityOutstanding )
+        {
+        iSetPersonalityMessage.Complete( aStatus );
+        iSetPersonalityOutstanding = EFalse;
+        }
+
+    if ( iCancelSetPreviousPersonalityOutstanding )
+        {
+        iCancelSetPreviousPersonalityOutstanding = EFalse;
+        iCancelSetPreviousPersonalityMessage.Complete( KErrNone );
+
+        iSetPreviousPersonalityMessage.Complete( aStatus );
+        iSetPreviousPersonalityOutstanding = EFalse;
+        }
+
+    if ( iSetPreviousPersonalityOutstanding )
+        {
+        iSetPreviousPersonalityMessage.Complete( aStatus );
+        iSetPreviousPersonalityOutstanding = EFalse;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// Set or clear AskOnConnection suppression
+// ----------------------------------------------------------------------------
+//
+void CUsbWatcherSession::SetAskOnConnectionSuppression( TBool aSuppress )
+    {
+    LOG_FUNC
+
+    iSuppressAskOnConnection = aSuppress;
+    }
+
+// ----------------------------------------------------------------------------
+// Check if AskOnConnection is suppressed
+// ----------------------------------------------------------------------------
+//
+TBool CUsbWatcherSession::IsAskOnConnectionSuppressed()
+    {
+    LOG_FUNC
+
+    return iSuppressAskOnConnection;
+    }
+
+// End of file