resourceinterfaces/fmtransmittercontrol/src/HWRMFmTxStatusObserver.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resourceinterfaces/fmtransmittercontrol/src/HWRMFmTxStatusObserver.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,226 @@
+// 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:
+//
+
+
+
+// INCLUDE FILES
+#include <hwrm/hwrmfmtx.h>
+#include "HWRMFmTxInternalPSKeys.h"
+#include "HWRMFmTxStatusObserver.h"
+#include "HWRMtrace.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::CHWRMFmTxStatusObserver
+// C++ constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CHWRMFmTxStatusObserver::CHWRMFmTxStatusObserver(MHWRMFmTxObserver* aCallback)
+    : CActive(EPriorityStandard), iCallback(aCallback)
+    {
+    COMPONENT_TRACE2( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::CHWRMFmTxStatusObserver(0x%x)" ), aCallback);
+
+    CActiveScheduler::Add(this);
+
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::CHWRMFmTxStatusObserver - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+CHWRMFmTxStatusObserver* CHWRMFmTxStatusObserver::NewL(MHWRMFmTxObserver* aCallback)
+    {
+
+    COMPONENT_TRACE2( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::NewLC(0x%x)" ), aCallback);
+
+	CHWRMFmTxStatusObserver* newInstance = new (ELeave) CHWRMFmTxStatusObserver(aCallback);
+
+	CleanupStack::PushL( newInstance );
+	
+	newInstance->ConstructL();
+
+	CleanupStack::Pop( newInstance );
+
+    COMPONENT_TRACE2( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::NewLC - return 0x%x" ), newInstance );
+
+	return newInstance;
+    }
+
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CHWRMFmTxStatusObserver::~CHWRMFmTxStatusObserver()
+    {
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::~CHWRMFmTxStatusObserver()" ));
+
+    // Cancel property separately, as the following Cancel() call doesn't seem to 
+    // cause DoCancel to fire.
+    iProperty.Cancel();
+
+    Cancel();
+    
+    iProperty.Close();
+    
+    iCallback = NULL; // PCLint demands
+
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::~CHWRMFmTxStatusObserver - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CHWRMFmTxStatusObserver::ConstructL()
+    {
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::ConstructL()" ));
+
+    User::LeaveIfError(iProperty.Attach(KPSUidHWRMFmTx, KHWRMFmTxStatus));
+    
+    // Call RunL to order notification and do the initial notifying of the client
+    RunL();
+
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::ConstructL - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::RunL
+// Handle notification from P&S session.
+// -----------------------------------------------------------------------------
+//
+void CHWRMFmTxStatusObserver::RunL()
+    {
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::RunL()" ));
+
+    // Reorder notification
+    OrderNotification();
+
+    // get value from P&S
+    TInt value(EFmTxStateUnknown);
+    
+    TInt err = iProperty.Get(value);
+    
+    // if no error or not found then no problem.
+    // Otherwise leave as something went wrong
+    if ( err == KErrNotFound || err == KErrNone )
+        {
+        TFmTxState state = static_cast<TFmTxState>(value);
+
+        // Only notify if value actually changed
+        if ( iCallback && iFmTxState != state)
+            {            
+            iCallback->FmTxStatusChanged(state);    
+            }
+        iFmTxState = state;
+        }
+    else
+        {
+        User::Leave(err);
+        }
+
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::RunL - return" ) );
+    }
+    
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::RunError
+// Handle error in RunL
+// -----------------------------------------------------------------------------
+//
+#if defined(_DEBUG) && defined(COMPONENT_TRACE_FLAG)
+TInt CHWRMFmTxStatusObserver::RunError(TInt aError)
+#else
+TInt CHWRMFmTxStatusObserver::RunError(TInt /*aError*/)
+#endif
+    {
+    COMPONENT_TRACE2( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::RunError(%d)" ), aError);
+
+    // Error occurred either while reordering notification or getting 
+    // property value. Set status accordingly
+    
+    if ( iCallback && iFmTxState != EFmTxStateUnknown)
+        {        
+        iCallback->FmTxStatusChanged(EFmTxStateUnknown);
+        }
+    
+    iFmTxState = EFmTxStateUnknown;
+    
+    COMPONENT_TRACE2( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::RunError - return %d" ), KErrNone );
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::DoCancel
+// Handle cancel order on this active object.
+// -----------------------------------------------------------------------------
+//
+void CHWRMFmTxStatusObserver::DoCancel()
+    {
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::DoCancel()" ));
+
+    iProperty.Cancel();
+
+    COMPONENT_TRACE1( _L( "HWRM FmTxClient - CHWRMFmTxStatusObserver::DoCancel - return" ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::OrderNotification
+// Order new notification from CenRep.
+// -----------------------------------------------------------------------------
+//
+void CHWRMFmTxStatusObserver::OrderNotification()
+    {
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::OrderNotification()" ));
+
+    iProperty.Subscribe(iStatus);
+    SetActive();
+
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::OrderNotification - return" ) );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHWRMFmTxStatusObserver::Status
+// Return FM Tx status
+// -----------------------------------------------------------------------------
+//
+TFmTxState CHWRMFmTxStatusObserver::Status()
+    {
+    COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::Status()" ));
+    
+    TInt value(EFmTxStateUnknown);
+    
+    TInt err = RProperty::Get(KPSUidHWRMFmTx, KHWRMFmTxStatus, value);
+    
+    if ( err == KErrNone )
+        {
+		COMPONENT_TRACE1( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::Status - RPropert::Get ok" ) );        	
+        	
+        iFmTxState = static_cast<TFmTxState>(value);
+        }
+    
+    COMPONENT_TRACE2( _L( "HWRM FM Tx Client - CHWRMFmTxStatusObserver::Status - return 0x%x" ), iFmTxState );
+    
+    return iFmTxState;
+    }
+    
+
+// End of File