diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyutils/telephonywatchers/src/signalstrengthwatcher.cpp --- 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 - - #include - -// 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 + + #include + +// 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); + } + + + + + + + + + +