telephonyutils/telephonywatchers/src/signalstrengthwatcher.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyutils/telephonywatchers/src/signalstrengthwatcher.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyutils/telephonywatchers/src/signalstrengthwatcher.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,229 +1,229 @@
-// Copyright (c) 2000-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:
-// SIGNALSTRENGHWATCHER.CPP
-// 
-//
-
-// User includes
-#include "watcherlog.h"
-#include "signalstrengthwatcher.h"
-
-// System includes
-#include <sacls.h>
-
- #include <commsdat.h>
-
-// In dBm
-const TInt32 KSignalStrengthHigh = -51;
-const TInt32 KSignalStrengthMedium = -77;
-const TInt32 KSignalStrengthNone = -113;
-const TInt8  KSignalZeroBars = 0;
-const TInt8  KSignalThreeBars = 3;
-const TInt8  KSignalFiveBars = 5;
-
-//
-// ------> Global exports
-//
-
-
-//
-// ------> CSignalStrengthWatcher (source)
-//
-
-CSignalStrengthWatcher::CSignalStrengthWatcher()
-:	CPhoneWatcher()
-	{
-	}
-
-CSignalStrengthWatcher* CSignalStrengthWatcher::NewL(TAny* /*aWatcherParams*/)
-	{
-	CSignalStrengthWatcher* self= new (ELeave) CSignalStrengthWatcher();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop();
-	
-	return self;
-	}
-	
-void CSignalStrengthWatcher::ConstructL()
-{
-	CWatcherBase::ConstructL();
-		
-	User::LeaveIfError(iNetworkStrengthProperty.Attach(KUidSystemCategory, KUidNetworkStrength.iUid));
-}
-
-CSignalStrengthWatcher::~CSignalStrengthWatcher()
-	{
-	Cancel();
-	iNetworkStrengthProperty.Close();
-	}
-
-//
-//
-//
-
-void CSignalStrengthWatcher::HandlePhoneStateEventL(TInt aCompletionCode)
-	{
-	switch(SignalStrengthState())
-		{
-	case ESignalStrengthNotYetInitialised:
-	case ESignalStrengthStateRequestInitialSignalStrength:
-		LOGSIGNAL1("SignalStrengthWatcher : Requesting initial signal strength");
-		Phone().GetSignalStrength(iStatus, iSignalStrength, iSignalBars);
-		SignalStrengthState() = ESignalStrengthWaitingForInitialSignalStrength;
-		SetActive();
-		break;
-
-	case ESignalStrengthWaitingForInitialSignalStrength:
-		SignalStrengthState() = ESignalStrengthStateIssuingSignalChangeNotificationRequest;
-		HandleSignalStrengthUpdateL(aCompletionCode);
-		break;
-
-	case ESignalStrengthStateIssuingSignalChangeNotificationRequest:
-		HandleSignalStrengthUpdateL(aCompletionCode);
-		break;
-
-	default:
-		__ASSERT_DEBUG(0, SignalPanic(EUnexpectedState));
-		}
-	}
-
-void CSignalStrengthWatcher::HandleCancel()
-	{
-	if	(Phone().SubSessionHandle() == KNullHandle)
-		return;
-
-	if	(SignalStrengthState() == ESignalStrengthWaitingForInitialSignalStrength)
-		Phone().CancelAsyncRequest(EMobilePhoneGetSignalStrength);
-	else if (SignalStrengthState() == ESignalStrengthStateIssuingSignalChangeNotificationRequest)
-		Phone().CancelAsyncRequest(EMobilePhoneNotifySignalStrengthChange);
-	}
-
-void CSignalStrengthWatcher::ReleasePhoneResources()
-//
-//	Called by the phone watcher base class. Release any telephony related
-//	resources and reset and state.
-//
-	{
-	// This is only called within RunL and therefore we can't be active
-	__ASSERT_DEBUG(!IsActive(), SignalPanic(EUnexpectedActiveState));
-
-	// Reset state
-	iState = ESignalStrengthNotYetInitialised;
-	}
-
-
-//
-//
-//
-
-void CSignalStrengthWatcher::HandleSignalStrengthUpdateL(TInt aCompletionCode)
-	{
-	LOGSIGNAL1("SignalStrengthNotifier : Handling signal strength update");
-	if	(aCompletionCode < KErrNone)
-		{
-		LOGSIGNAL2("SignalStrengthNotifier : Handling request error (%d)", aCompletionCode);
-
-		// Indicate we don't know what the signal strength is
-		TInt ret = iNetworkStrengthProperty.Set(ESANetworkStrengthUnknown);
-		if (!(ret == KErrNone || ret == KErrNotFound))
-			User::Leave(ret);
-
-		if	(aCompletionCode == KErrNotSupported)
-			{
-			// If the TSY returns 'Not supported' then it isn't 
-			// worth re-sending the request, so give up gracefully.
-			SetDisabled(_L("SignalStrengthNotifier : TSY returned not supported (%d)"), aCompletionCode);
-			}
-		else if	(aCompletionCode == KErrCancel)
-			{
-			// Signal Strength watcher was cancelled
-			SetDisabled(_L("SignalStrengthNotifier : TSY has cancelled request (%d)"), aCompletionCode);
-			}
-		else if	(aCompletionCode == KWatcherBaseModemNotDetected)
-			{
-			// We should release all telephony related resources until the
-			// phone is available again.
-			Cancel();
-			Reset();
-
-			// The modem / phone cannot be found. Wait until it becomes available again...
-			WaitForPhoneToPowerUpL();
-			}
-		else if	(ErrorCountIncrement() >= KErrorRetryCount)
-			{
-			// We've already tried as many times as possible. Shut ourselves down forever.
-			// This watcher will be restarted when the machine is rebooted.
-			SetDisabled(_L("SignalStrengthNotifier : Max retries reached or exceeded. Shutting down until reboot."), 0);
-			}
-		else
-			{
-			// Doing this means we will asynchronously request the signal strength 
-			// so that we can update to a real value again.
-			SignalStrengthState() = ESignalStrengthNotYetInitialised;
-			SuspendFor(KErrorRetryPausePeriod);
-			}
-		}
-	else
-		{
-		LOGSIGNAL2("SignalStrengthNotifier : Signal strength is: %d", (TInt) iSignalStrength);
-		LOGSIGNAL2("SignalStrengthNotifier : Signal bars is: %d", iSignalBars);
-
-		// What is the signal strength now?
-		TInt newState = ESANetworkStrengthUnknown;
-		// iSignalStrength is in dBm - hence use of negative numbers
-		if	((iSignalStrength == KSignalStrengthNone) || (iSignalBars == KSignalZeroBars))
-			newState = ESANetworkStrengthNone;
-		else if ((iSignalStrength < KSignalStrengthMedium) || (iSignalBars < KSignalThreeBars))
-			newState = ESANetworkStrengthLow;
-		else if ((iSignalStrength < KSignalStrengthHigh) || (iSignalBars < KSignalFiveBars))
-			newState = ESANetworkStrengthMedium;
-		else
-			newState = ESANetworkStrengthHigh;
-
-		// Update properties
-		LOGSIGNAL1("SignalStrengthNotifier : Informing properties of signal strength change");
-		TInt ret = iNetworkStrengthProperty.Set(newState);
-		if (!(ret == KErrNone || ret == KErrNotFound))
-			User::Leave(ret);
-				
-		LOGSIGNAL1("SignalStrengthNotifier : Requesting signal strength change notification");
-		Phone().NotifySignalStrengthChange(iStatus, iSignalStrength, iSignalBars);
-		SetActive();
-		}
-	}
-
-
-//
-//
-//
-
-//
-// Panic Function
-//
-void CSignalStrengthWatcher::SignalPanic(TWatcherPanic aPanicNumber)
-	{
-	_LIT(panicText,"Signal Strength Watcher");
-	User::Panic(panicText,aPanicNumber);
-	}
-
-
-
-
-
-
-
-
-
-
+// Copyright (c) 2000-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:
+// SIGNALSTRENGHWATCHER.CPP
+// 
+//
+
+// User includes
+#include "watcherlog.h"
+#include "signalstrengthwatcher.h"
+
+// System includes
+#include <sacls.h>
+
+ #include <commsdat.h>
+
+// In dBm
+const TInt32 KSignalStrengthHigh = -51;
+const TInt32 KSignalStrengthMedium = -77;
+const TInt32 KSignalStrengthNone = -113;
+const TInt8  KSignalZeroBars = 0;
+const TInt8  KSignalThreeBars = 3;
+const TInt8  KSignalFiveBars = 5;
+
+//
+// ------> Global exports
+//
+
+
+//
+// ------> CSignalStrengthWatcher (source)
+//
+
+CSignalStrengthWatcher::CSignalStrengthWatcher()
+:	CPhoneWatcher()
+	{
+	}
+
+CSignalStrengthWatcher* CSignalStrengthWatcher::NewL(TAny* /*aWatcherParams*/)
+	{
+	CSignalStrengthWatcher* self= new (ELeave) CSignalStrengthWatcher();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	
+	return self;
+	}
+	
+void CSignalStrengthWatcher::ConstructL()
+{
+	CWatcherBase::ConstructL();
+		
+	User::LeaveIfError(iNetworkStrengthProperty.Attach(KUidSystemCategory, KUidNetworkStrength.iUid));
+}
+
+CSignalStrengthWatcher::~CSignalStrengthWatcher()
+	{
+	Cancel();
+	iNetworkStrengthProperty.Close();
+	}
+
+//
+//
+//
+
+void CSignalStrengthWatcher::HandlePhoneStateEventL(TInt aCompletionCode)
+	{
+	switch(SignalStrengthState())
+		{
+	case ESignalStrengthNotYetInitialised:
+	case ESignalStrengthStateRequestInitialSignalStrength:
+		LOGSIGNAL1("SignalStrengthWatcher : Requesting initial signal strength");
+		Phone().GetSignalStrength(iStatus, iSignalStrength, iSignalBars);
+		SignalStrengthState() = ESignalStrengthWaitingForInitialSignalStrength;
+		SetActive();
+		break;
+
+	case ESignalStrengthWaitingForInitialSignalStrength:
+		SignalStrengthState() = ESignalStrengthStateIssuingSignalChangeNotificationRequest;
+		HandleSignalStrengthUpdateL(aCompletionCode);
+		break;
+
+	case ESignalStrengthStateIssuingSignalChangeNotificationRequest:
+		HandleSignalStrengthUpdateL(aCompletionCode);
+		break;
+
+	default:
+		__ASSERT_DEBUG(0, SignalPanic(EUnexpectedState));
+		}
+	}
+
+void CSignalStrengthWatcher::HandleCancel()
+	{
+	if	(Phone().SubSessionHandle() == KNullHandle)
+		return;
+
+	if	(SignalStrengthState() == ESignalStrengthWaitingForInitialSignalStrength)
+		Phone().CancelAsyncRequest(EMobilePhoneGetSignalStrength);
+	else if (SignalStrengthState() == ESignalStrengthStateIssuingSignalChangeNotificationRequest)
+		Phone().CancelAsyncRequest(EMobilePhoneNotifySignalStrengthChange);
+	}
+
+void CSignalStrengthWatcher::ReleasePhoneResources()
+//
+//	Called by the phone watcher base class. Release any telephony related
+//	resources and reset and state.
+//
+	{
+	// This is only called within RunL and therefore we can't be active
+	__ASSERT_DEBUG(!IsActive(), SignalPanic(EUnexpectedActiveState));
+
+	// Reset state
+	iState = ESignalStrengthNotYetInitialised;
+	}
+
+
+//
+//
+//
+
+void CSignalStrengthWatcher::HandleSignalStrengthUpdateL(TInt aCompletionCode)
+	{
+	LOGSIGNAL1("SignalStrengthNotifier : Handling signal strength update");
+	if	(aCompletionCode < KErrNone)
+		{
+		LOGSIGNAL2("SignalStrengthNotifier : Handling request error (%d)", aCompletionCode);
+
+		// Indicate we don't know what the signal strength is
+		TInt ret = iNetworkStrengthProperty.Set(ESANetworkStrengthUnknown);
+		if (!(ret == KErrNone || ret == KErrNotFound))
+			User::Leave(ret);
+
+		if	(aCompletionCode == KErrNotSupported)
+			{
+			// If the TSY returns 'Not supported' then it isn't 
+			// worth re-sending the request, so give up gracefully.
+			SetDisabled(_L("SignalStrengthNotifier : TSY returned not supported (%d)"), aCompletionCode);
+			}
+		else if	(aCompletionCode == KErrCancel)
+			{
+			// Signal Strength watcher was cancelled
+			SetDisabled(_L("SignalStrengthNotifier : TSY has cancelled request (%d)"), aCompletionCode);
+			}
+		else if	(aCompletionCode == KWatcherBaseModemNotDetected)
+			{
+			// We should release all telephony related resources until the
+			// phone is available again.
+			Cancel();
+			Reset();
+
+			// The modem / phone cannot be found. Wait until it becomes available again...
+			WaitForPhoneToPowerUpL();
+			}
+		else if	(ErrorCountIncrement() >= KErrorRetryCount)
+			{
+			// We've already tried as many times as possible. Shut ourselves down forever.
+			// This watcher will be restarted when the machine is rebooted.
+			SetDisabled(_L("SignalStrengthNotifier : Max retries reached or exceeded. Shutting down until reboot."), 0);
+			}
+		else
+			{
+			// Doing this means we will asynchronously request the signal strength 
+			// so that we can update to a real value again.
+			SignalStrengthState() = ESignalStrengthNotYetInitialised;
+			SuspendFor(KErrorRetryPausePeriod);
+			}
+		}
+	else
+		{
+		LOGSIGNAL2("SignalStrengthNotifier : Signal strength is: %d", (TInt) iSignalStrength);
+		LOGSIGNAL2("SignalStrengthNotifier : Signal bars is: %d", iSignalBars);
+
+		// What is the signal strength now?
+		TInt newState = ESANetworkStrengthUnknown;
+		// iSignalStrength is in dBm - hence use of negative numbers
+		if	((iSignalStrength == KSignalStrengthNone) || (iSignalBars == KSignalZeroBars))
+			newState = ESANetworkStrengthNone;
+		else if ((iSignalStrength < KSignalStrengthMedium) || (iSignalBars < KSignalThreeBars))
+			newState = ESANetworkStrengthLow;
+		else if ((iSignalStrength < KSignalStrengthHigh) || (iSignalBars < KSignalFiveBars))
+			newState = ESANetworkStrengthMedium;
+		else
+			newState = ESANetworkStrengthHigh;
+
+		// Update properties
+		LOGSIGNAL1("SignalStrengthNotifier : Informing properties of signal strength change");
+		TInt ret = iNetworkStrengthProperty.Set(newState);
+		if (!(ret == KErrNone || ret == KErrNotFound))
+			User::Leave(ret);
+				
+		LOGSIGNAL1("SignalStrengthNotifier : Requesting signal strength change notification");
+		Phone().NotifySignalStrengthChange(iStatus, iSignalStrength, iSignalBars);
+		SetActive();
+		}
+	}
+
+
+//
+//
+//
+
+//
+// Panic Function
+//
+void CSignalStrengthWatcher::SignalPanic(TWatcherPanic aPanicNumber)
+	{
+	_LIT(panicText,"Signal Strength Watcher");
+	User::Panic(panicText,aPanicNumber);
+	}
+
+
+
+
+
+
+
+
+
+