summaryrefslogtreecommitdiffstats
path: root/src/systeminfo/symbian/telephonyinfo_s60.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/systeminfo/symbian/telephonyinfo_s60.cpp')
-rw-r--r--src/systeminfo/symbian/telephonyinfo_s60.cpp1134
1 files changed, 965 insertions, 169 deletions
diff --git a/src/systeminfo/symbian/telephonyinfo_s60.cpp b/src/systeminfo/symbian/telephonyinfo_s60.cpp
index 6d4dcc72f4..942a2db36c 100644
--- a/src/systeminfo/symbian/telephonyinfo_s60.cpp
+++ b/src/systeminfo/symbian/telephonyinfo_s60.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2010-2011 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010-2012 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
@@ -45,17 +45,21 @@
#include <mmtsy_names.h>
#endif
+#ifndef ETELMM_SUPPORTED
+// number of nested event loops allowed to avoid stackoverflow
+const int KMaxLoops = 25;
+
CTelephonyInfo::CTelephonyInfo(CTelephony &telephony) : CActive(EPriorityStandard),
- m_telephony(telephony)
+ m_telephony(telephony), m_loops()
{
CActiveScheduler::Add(this);
- m_wait = new CActiveSchedulerWait();
}
CTelephonyInfo::~CTelephonyInfo()
{
- delete m_wait;
+ //Cancel();
+ exitWait();
}
void CTelephonyInfo::addObserver(MTelephonyInfoObserver *observer)
@@ -68,29 +72,65 @@ void CTelephonyInfo::removeObserver(MTelephonyInfoObserver *observer)
m_observers.removeOne(observer);
}
-void CTelephonyInfo::RunL()
+void CTelephonyInfo::waitForRequest() const
{
- m_wait->AsyncStop();
+ TRACES (qDebug() << "CTelephonyInfo::waitForRequest<---");
+
+ //Restricing number of blocking loops
+ //Each call to api's e.g. IMSI must be blocked until they are initialized
+ //But we cannot maintain infinite number of blocked calls as stack is limited
+ //So restrict the number of loops after which we return uninitialized values
+ if (m_loops.size() <= KMaxLoops) {
+ QEventLoop* loop = NULL;
+ loop = new QEventLoop();
+ if ( loop != NULL ) {
+ m_loops.push(loop);
+ loop->exec();
+ delete loop;
+ }
+ } else {
+ qDebug() << "Blocked calls loop count exceeded";
+ }
+
+ TRACES (qDebug() << "CTelephonyInfo::waitForRequest--->");
}
-void CTelephonyInfo::makeRequest()
+void CTelephonyInfo::exitWait() const
{
- if (!IsActive())
- SetActive();
+ TRACES (qDebug() << "CTelephonyInfo::ExitWait<---");
- if (!m_wait->IsStarted()) {
- m_wait->Start();
- }
+ while (!m_loops.isEmpty())
+ {
+ QEventLoop* loop = m_loops.pop();
+ loop->quit();
+ }
+
+ TRACES (qDebug() << "CTelephonyInfo::ExitWait--->");
}
-CPhoneInfo::CPhoneInfo(CTelephony &telephony) : CTelephonyInfo(telephony),
- m_phoneIdV1Pckg(m_phoneIdV1)
+CPhoneInfo::CPhoneInfo(CTelephony &telephony) : CTelephonyInfo(telephony),m_initializing(true)
+ ,m_phoneIdV1Pckg(m_phoneIdV1)
{
TRACES (qDebug() << "CPhoneInfo::CPhoneInfo<---");
+ makeRequest();
+ TRACES (qDebug() << "CPhoneInfo::CPhoneInfo--->");
+}
+
+void CPhoneInfo::makeRequest()
+{
+ TRACES (qDebug() << "CPhoneInfo::makeRequest<--");
+ if (!IsActive()){
m_telephony.GetPhoneId(iStatus, m_phoneIdV1Pckg);
+ SetActive();
+ }
+ TRACES (qDebug() << "CPhoneInfo::makeRequest-->");
+}
- makeRequest();
+void CPhoneInfo::RunL()
+{
+ TRACES (qDebug() << "CPhoneInfo::RunL<---");
+ if (iStatus == KErrNone) {
TBuf<CTelephony::KPhoneSerialNumberSize> imei = m_phoneIdV1.iSerialNumber;
m_imei = QString::fromUtf16(imei.Ptr(), imei.Length());
@@ -99,7 +139,14 @@ CPhoneInfo::CPhoneInfo(CTelephony &telephony) : CTelephonyInfo(telephony),
TBuf<CTelephony::KPhoneModelIdSize> model = m_phoneIdV1.iModel;
m_model = QString::fromUtf16(model.Ptr(), model.Length());
- TRACES (qDebug() << "CPhoneInfo::CPhoneInfo--->");
+
+ m_initializing = false;
+ }
+
+ if (iStatus == KErrPermissionDenied) m_initializing =false;
+ exitWait();
+
+ TRACES (qDebug() << "CPhoneInfo::RunL--->");
}
CPhoneInfo::~CPhoneInfo()
@@ -109,34 +156,81 @@ CPhoneInfo::~CPhoneInfo()
void CPhoneInfo::DoCancel()
{
- m_telephony.CancelAsync(CTelephony::EGetPhoneIdCancel);
+ TRACES (qDebug() << "CPhoneInfo::DoCancel<---");
+ if (m_initializing) {
+ m_telephony.CancelAsync(CTelephony::EGetPhoneIdCancel);
+ }
+ TRACES (qDebug() << "CPhoneInfo::DoCancel--->");
}
-QString CPhoneInfo::imei() const
+QString CPhoneInfo::imei()
{
- return m_imei;
+ TRACES (qDebug() << "CPhoneInfo::imei:" << m_imei);
+
+ if (m_initializing) {
+ makeRequest();
+ waitForRequest();
+ }
+
+ return m_imei;
}
-QString CPhoneInfo::manufacturer() const
+QString CPhoneInfo::manufacturer()
{
- return m_manufacturer;
+ TRACES (qDebug() << "CPhoneInfo::manufacturer:" << m_manufacturer);
+
+ if (m_initializing) {
+ makeRequest();
+ waitForRequest();
+ }
+
+ return m_manufacturer;
}
-QString CPhoneInfo::model() const
+QString CPhoneInfo::model()
{
- return m_model;
+ TRACES (qDebug() << "CPhoneInfo::model:" << m_model);
+
+ if (m_initializing) {
+ makeRequest();
+ waitForRequest();
+ }
+
+ return m_model;
}
-CSubscriberInfo::CSubscriberInfo(CTelephony &telephony) : CTelephonyInfo(telephony),
- m_subscriberIdV1Pckg(m_subscriberIdV1)
+CSubscriberInfo::CSubscriberInfo(CTelephony &telephony) : CTelephonyInfo(telephony),m_initializing(true)
+ ,m_subscriberIdV1Pckg(m_subscriberIdV1)
{
TRACES (qDebug() << "CSubscriberInfo::CSubscriberInfo<---");
+ makeRequest();
+ TRACES (qDebug() << "CSubscriberInfo::CSubscriberInfo--->");
+}
+
+void CSubscriberInfo::makeRequest()
+{
+ TRACES (qDebug() << "CSubscriberInfo::MakeRequest<---");
+ if (!IsActive()) {
m_telephony.GetSubscriberId(iStatus, m_subscriberIdV1Pckg);
- makeRequest();
+ SetActive();
+ }
+ TRACES (qDebug() << "CSubscriberInfo::MakeRequest--->");
+}
+void CSubscriberInfo::RunL()
+{
+ TRACES (qDebug() << "CSubscriberInfo::RunL<---");
+
+ if (iStatus == KErrNone) {
TBuf<CTelephony::KIMSISize> imsi = m_subscriberIdV1.iSubscriberId;
m_imsi = QString::fromUtf16(imsi.Ptr(), imsi.Length());
- TRACES (qDebug() << "CSubscriberInfo::CSubscriberInfo--->");
+ m_initializing = false;
+ }
+
+ if (iStatus == KErrPermissionDenied ) m_initializing = false;
+ exitWait();
+
+ TRACES (qDebug() << "CSubscriberInfo::RunL--->");
}
CSubscriberInfo::~CSubscriberInfo()
@@ -146,26 +240,31 @@ CSubscriberInfo::~CSubscriberInfo()
void CSubscriberInfo::DoCancel()
{
- m_telephony.CancelAsync(CTelephony::EGetSubscriberIdCancel);
+ TRACES (qDebug() << "CSubscriberInfo::DoCancel<---");
+ if (m_initializing) {
+ m_telephony.CancelAsync(CTelephony::EGetSubscriberIdCancel);
+ }
+ TRACES (qDebug() << "CSubscriberInfo::DoCancel--->");
}
-QString CSubscriberInfo::imsi() const
+QString CSubscriberInfo::imsi()
{
- return m_imsi;
+ TRACES (qDebug() << "CSubscriberInfo::imsi:" << m_imsi);
+ if (m_initializing) {
+ makeRequest();
+ waitForRequest();
+ }
+ return m_imsi;
}
CBatteryInfo::CBatteryInfo(CTelephony &telephony) : CTelephonyInfo(telephony),
m_initializing(true), m_batteryInfoV1Pckg(m_batteryInfoV1)
{
TRACES (qDebug() << "CBatteryInfo::CBatteryInfo<---");
- m_telephony.GetBatteryInfo(iStatus, m_batteryInfoV1Pckg);
-
- makeRequest();
- m_batteryLevel = m_batteryInfoV1.iChargeLevel;
- m_previousBatteryLevel = m_batteryLevel;
+ m_telephony.GetBatteryInfo(iStatus, m_batteryInfoV1Pckg);
+ SetActive();
- startMonitoring();
TRACES (qDebug() << "CBatteryInfo::CBatteryInfo--->");
}
@@ -177,46 +276,64 @@ CBatteryInfo::~CBatteryInfo()
void CBatteryInfo::RunL()
{
TRACES (qDebug() << "CBatteryInfo::RunL<---");
- if (m_initializing) {
- CTelephonyInfo::RunL();
- m_initializing = false;
- } else {
- m_batteryLevel = m_batteryInfoV1.iChargeLevel;
+
+ if (iStatus == KErrNone) {
+ m_batteryLevel = m_batteryInfoV1.iChargeLevel;
+
+ if (!m_initializing) {
foreach (MTelephonyInfoObserver *observer, m_observers) {
- if (m_batteryLevel != m_previousBatteryLevel) {
- observer->batteryLevelChanged();
- }
- }
+ if (m_batteryLevel != m_previousBatteryLevel)
+ observer->batteryLevelChanged();
+ }
+ }
+ m_previousBatteryLevel = m_batteryLevel;
+ }
+
+ if (m_initializing) {
+ m_initializing = false;
+ exitWait();
+ if (iStatus == KErrPermissionDenied) {
+ return; //No monitoring required
+ }
}
- m_previousBatteryLevel = m_batteryLevel;
+
startMonitoring();
+
TRACES (qDebug() << "CBatteryInfo::RunL--->");
}
void CBatteryInfo::DoCancel()
{
TRACES (qDebug() << "CBatteryInfo::DoCancel<---");
- if (m_initializing) {
- m_telephony.CancelAsync(CTelephony::EGetBatteryInfoCancel);
- } else {
- m_telephony.CancelAsync(CTelephony::EBatteryInfoChangeCancel);
+ if (m_initializing) {
+ m_telephony.CancelAsync(CTelephony::EGetBatteryInfoCancel);
+ }
+ else
+ {
+ m_telephony.CancelAsync(CTelephony::EBatteryInfoChangeCancel);
}
TRACES (qDebug() << "CBatteryInfo::DoCancel--->");
}
-
int CBatteryInfo::batteryLevel() const
{
- return m_batteryLevel;
+ TRACES (qDebug() << "CBatteryInfo::batteryLevel:" << m_batteryLevel);
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_batteryLevel;
}
void CBatteryInfo::startMonitoring()
{
TRACES (qDebug() << "CBatteryInfo::startMonitoring<---");
+
if (!IsActive()) {
m_telephony.NotifyChange(iStatus, CTelephony::EBatteryInfoChange, m_batteryInfoV1Pckg);
SetActive();
}
+
TRACES (qDebug() << "CBatteryInfo::startMonitoring--->");
}
@@ -224,35 +341,10 @@ CCellNetworkInfo::CCellNetworkInfo(CTelephony &telephony) : CTelephonyInfo(telep
m_initializing(true), m_networkInfoV1Pckg(m_networkInfoV1)
{
TRACES (qDebug() << "CCellNetworkInfo::CCellNetworkInfo<---");
- m_telephony.GetCurrentNetworkInfo(iStatus, m_networkInfoV1Pckg);
- makeRequest();
-
- m_cellId = m_networkInfoV1.iCellId;
- m_previouscellId = m_cellId;
- m_locationAreaCode = m_networkInfoV1.iLocationAreaCode;
-
- TBuf<CTelephony::KNetworkIdentitySize> networkId = m_networkInfoV1.iNetworkId;
- m_networkId = QString::fromUtf16(networkId.Ptr(), networkId.Length());
- m_previousNetworkId = m_networkId;
-
- TBuf<CTelephony::KNetworkCountryCodeSize> countryCode = m_networkInfoV1.iCountryCode;
- m_countryCode = QString::fromUtf16(countryCode.Ptr(), countryCode.Length());
- m_previousCountryCode = m_countryCode;
- TBuf<CTelephony::KNetworkLongNameSize> longName = m_networkInfoV1.iLongName;
- if (longName.Length() > 0) {
- m_networkName = QString::fromUtf16(longName.Ptr(), longName.Length());
- } else {
- TBuf<CTelephony::KNetworkDisplayTagSize> displayTag = m_networkInfoV1.iDisplayTag;
- m_networkName = QString::fromUtf16(displayTag.Ptr(), displayTag.Length());
- }
- m_previousNetworkName = m_networkName;
-
- m_networkMode = m_networkInfoV1.iMode;
- m_previousNetworkMode = m_networkMode;
- m_initializing = false;
+ m_telephony.GetCurrentNetworkInfo(iStatus, m_networkInfoV1Pckg);
+ SetActive();
- startMonitoring();
TRACES (qDebug() << "CCellNetworkInfo::CCellNetworkInfo--->");
}
@@ -264,95 +356,130 @@ CCellNetworkInfo::~CCellNetworkInfo()
void CCellNetworkInfo::RunL()
{
TRACES (qDebug() << "CCellNetworkInfo::RunL<---");
- if (m_initializing) {
- CTelephonyInfo::RunL();
- m_initializing = false;
- } else {
- if (iStatus != KErrNone) return; //To avoid looping if app doesn't have ReadDeviceData caps
- m_cellId = m_networkInfoV1.iCellId;
- m_locationAreaCode = m_networkInfoV1.iLocationAreaCode;
- TBuf<CTelephony::KNetworkIdentitySize> networkId = m_networkInfoV1.iNetworkId;
- m_networkId = QString::fromUtf16(networkId.Ptr(), networkId.Length());
+ if (iStatus == KErrNone) {
+ m_cellId = m_networkInfoV1.iCellId;
+ m_locationAreaCode = m_networkInfoV1.iLocationAreaCode;
- TBuf<CTelephony::KNetworkCountryCodeSize> countryCode = m_networkInfoV1.iCountryCode;
- m_countryCode = QString::fromUtf16(countryCode.Ptr(), countryCode.Length());
+ TBuf<CTelephony::KNetworkIdentitySize> networkId = m_networkInfoV1.iNetworkId;
+ m_networkId = QString::fromUtf16(networkId.Ptr(), networkId.Length());
- TBuf<CTelephony::KNetworkLongNameSize> longName = m_networkInfoV1.iLongName;
- if (longName.Length() > 0) {
- m_networkName = QString::fromUtf16(longName.Ptr(), longName.Length());
- } else {
- TBuf<CTelephony::KNetworkDisplayTagSize> displayTag = m_networkInfoV1.iDisplayTag;
- m_networkName = QString::fromUtf16(displayTag.Ptr(), displayTag.Length());
- }
+ TBuf<CTelephony::KNetworkCountryCodeSize> countryCode = m_networkInfoV1.iCountryCode;
+ m_countryCode = QString::fromUtf16(countryCode.Ptr(), countryCode.Length());
- m_networkMode = m_networkInfoV1.iMode;
+ TBuf<CTelephony::KNetworkLongNameSize> longName = m_networkInfoV1.iLongName;
+ if (longName.Length() > 0) {
+ m_networkName = QString::fromUtf16(longName.Ptr(), longName.Length());
+ } else {
+ TBuf<CTelephony::KNetworkDisplayTagSize> displayTag = m_networkInfoV1.iDisplayTag;
+ m_networkName = QString::fromUtf16(displayTag.Ptr(), displayTag.Length());
+ }
- foreach (MTelephonyInfoObserver *observer, m_observers) {
- if (m_networkId != m_previousNetworkId) {
- observer->networkCodeChanged();
- }
- if (m_countryCode != m_previousCountryCode) {
- observer->countryCodeChanged();
- }
- if (m_networkName != m_previousNetworkName) {
- observer->networkNameChanged();
- }
- if (m_networkMode != m_previousNetworkMode) {
- observer->networkModeChanged();
- }
- if (m_cellId != m_previouscellId) {
- observer->changedCellId(m_cellId);
- }
- }
- m_previousNetworkId = m_networkId;
- m_previousCountryCode = m_countryCode;
- m_previousNetworkName = m_networkName;
- m_previousNetworkMode = m_networkMode;
- m_previouscellId = m_cellId;
- startMonitoring();
+ m_networkMode = m_networkInfoV1.iMode;
+
+ if (!m_initializing) {
+ foreach (MTelephonyInfoObserver *observer, m_observers) {
+ if (m_networkId != m_previousNetworkId) {
+ observer->networkCodeChanged();
+ }
+ if (m_countryCode != m_previousCountryCode) {
+ observer->countryCodeChanged();
+ }
+ if (m_networkName != m_previousNetworkName) {
+ observer->networkNameChanged();
+ }
+ if (m_networkMode != m_previousNetworkMode) {
+ observer->networkModeChanged();
+ }
+ if (m_cellId != m_previouscellId) {
+ observer->changedCellId(m_cellId);
+ }
+ }
+ }
+
+ m_previouscellId = m_cellId;
+ m_previousNetworkId = m_networkId;
+ m_previousCountryCode = m_countryCode;
+ m_previousNetworkName = m_networkName;
+ m_previousNetworkMode = m_networkMode;
}
+
+ if (m_initializing) {
+ m_initializing = false;
+ exitWait();
+ if (iStatus == KErrPermissionDenied) {
+ return; //No monitoring required
+ }
+ }
+
+ startMonitoring();
TRACES (qDebug() << "CCellNetworkInfo::RunL--->");
}
void CCellNetworkInfo::DoCancel()
{
- TRACES (qDebug() << "CCellNetworkInfo::DoCancel--->");
+ TRACES (qDebug() << "CCellNetworkInfo::DoCancel<---");
if (m_initializing) {
m_telephony.CancelAsync(CTelephony::EGetCurrentNetworkInfoCancel);
} else {
m_telephony.CancelAsync(CTelephony::ECurrentNetworkInfoChangeCancel);
}
- TRACES (qDebug() << "CCellNetworkInfo::DoCancel<---");
+ TRACES (qDebug() << "CCellNetworkInfo::DoCancel--->");
}
int CCellNetworkInfo::cellId() const
{
- return m_cellId;
+ TRACES (qDebug() << "CCellNetworkInfo::cellId:" << m_cellId);
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_cellId;
}
int CCellNetworkInfo::locationAreaCode() const
{
- return m_locationAreaCode;
+ TRACES (qDebug() << "CCellNetworkInfo::locationAreaCode:" << m_locationAreaCode);
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_locationAreaCode;
}
QString CCellNetworkInfo::countryCode() const
{
- return m_countryCode;
+ TRACES (qDebug() << "CCellNetworkInfo::countryCode:" << m_countryCode);
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_countryCode;
}
QString CCellNetworkInfo::networkCode() const
{
- return m_networkId;
+ TRACES (qDebug() << "CCellNetworkInfo::networkCode:" << m_networkId);
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_networkId;
}
QString CCellNetworkInfo::networkName() const
{
- return m_networkName;
+ TRACES (qDebug() << "CCellNetworkInfo::networkName<---");
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_networkName;
}
QString CCellNetworkInfo::homeNetworkCode()
{
+ TRACES (qDebug() << "CCellNetworkInfo::homeNetworkCode<---");
#ifdef ETELMM_SUPPORTED
RTelServer telServer;
RMobilePhone mobilePhone;
@@ -402,14 +529,23 @@ QString CCellNetworkInfo::homeNetworkCode()
CTelephony::TNetworkMode CCellNetworkInfo::networkMode() const
{
- return m_networkMode;
+ TRACES (qDebug() << "CCellNetworkInfo::networkMode:" << m_networkMode);
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_networkMode;
}
void CCellNetworkInfo::startMonitoring()
{
TRACES (qDebug() << "CCellNetworkInfo::startMonitoring<---");
+
+ if (!IsActive()) {
m_telephony.NotifyChange(iStatus, CTelephony::ECurrentNetworkInfoChange, m_networkInfoV1Pckg);
SetActive();
+ }
+
TRACES (qDebug() << "CCellNetworkInfo::startMonitoring--->");
}
@@ -417,15 +553,10 @@ CCellNetworkRegistrationInfo::CCellNetworkRegistrationInfo(CTelephony &telephony
m_initializing(true), m_networkRegistrationV1Pckg(m_networkRegistrationV1)
{
TRACES (qDebug() << "CCellNetworkRegistrationInfo::CCellNetworkRegistrationInfo--->");
- m_telephony.GetNetworkRegistrationStatus(iStatus, m_networkRegistrationV1Pckg);
- makeRequest();
-
- m_networkStatus = m_networkRegistrationV1.iRegStatus;
- m_previousNetworkStatus = m_networkStatus;
- m_initializing = false;
+ m_telephony.GetNetworkRegistrationStatus(iStatus, m_networkRegistrationV1Pckg);
+ SetActive();
- startMonitoring();
TRACES (qDebug() << "CCellNetworkRegistrationInfo::CCellNetworkRegistrationInfo<---");
}
@@ -437,21 +568,27 @@ CCellNetworkRegistrationInfo::~CCellNetworkRegistrationInfo()
void CCellNetworkRegistrationInfo::RunL()
{
TRACES (qDebug() << "CCellNetworkRegistrationInfo::RunL<---");
- if (m_initializing) {
- CTelephonyInfo::RunL();
- m_initializing = false;
- } else {
- if (iStatus != KErrNone) return; //To avoid looping if app doesn't have ReadDeviceData caps
- m_networkStatus = m_networkRegistrationV1.iRegStatus;
-
+ if (iStatus == KErrNone) {
+ m_networkStatus = m_networkRegistrationV1.iRegStatus;
+ if (!m_initializing) {
foreach (MTelephonyInfoObserver *observer, m_observers) {
if (m_networkStatus != m_previousNetworkStatus) {
observer->cellNetworkStatusChanged();
}
}
- m_previousNetworkStatus = m_networkStatus;
- startMonitoring();
+ }
+ m_previousNetworkStatus = m_networkStatus;
+ }
+
+ if (m_initializing) {
+ m_initializing = false;
+ exitWait();
+ if (iStatus == KErrPermissionDenied) {
+ return; //No monitoring required
+ }
}
+
+ startMonitoring();
TRACES (qDebug() << "CCellNetworkRegistrationInfo::RunL--->");
}
@@ -468,14 +605,23 @@ void CCellNetworkRegistrationInfo::DoCancel()
CTelephony::TRegistrationStatus CCellNetworkRegistrationInfo::cellNetworkStatus() const
{
- return m_networkStatus;
+ TRACES (qDebug() << "CCellNetworkRegistrationInfo::cellNetworkStatus:" << m_networkStatus);
+
+ if (m_initializing)
+ waitForRequest();
+
+ return m_networkStatus;
}
void CCellNetworkRegistrationInfo::startMonitoring()
{
TRACES (qDebug() << "CCellNetworkRegistrationInfo::startMonitoring<---");
+
+ if (!IsActive()) {
m_telephony.NotifyChange(iStatus, CTelephony::ENetworkRegistrationStatusChange, m_networkRegistrationV1Pckg);
SetActive();
+ }
+
TRACES (qDebug() << "CCellNetworkRegistrationInfo::startMonitoring--->");
}
@@ -483,18 +629,10 @@ CCellSignalStrengthInfo::CCellSignalStrengthInfo(CTelephony &telephony) : CTelep
m_initializing(true), m_signalStrengthV1Pckg(m_signalStrengthV1)
{
TRACES (qDebug() << "CCellSignalStrengthInfo::CCellSignalStrengthInfo<---");
- m_telephony.GetSignalStrength(iStatus, m_signalStrengthV1Pckg);
- makeRequest();
-
- m_cellNetworkSignalStrength = m_signalStrengthV1.iSignalStrength;
- m_previousCellNetworkSignalStrength = m_cellNetworkSignalStrength;
- m_signalBar = m_signalStrengthV1.iBar;
- m_previousSignalBar = m_signalBar;
-
- m_initializing = false;
+ m_telephony.GetSignalStrength(iStatus, m_signalStrengthV1Pckg);
+ SetActive();
- startMonitoring();
TRACES (qDebug() << "CCellSignalStrengthInfo::CCellSignalStrengthInfo--->");
}
@@ -506,21 +644,33 @@ CCellSignalStrengthInfo::~CCellSignalStrengthInfo()
void CCellSignalStrengthInfo::RunL()
{
TRACES (qDebug() << "CCellSignalStrengthInfo::RunL<---");
- if (m_initializing) {
- CTelephonyInfo::RunL();
- } else {
- if (iStatus != KErrNone) return; //To avoid looping if app doesn't have ReadDeviceData caps
- m_cellNetworkSignalStrength = m_signalStrengthV1.iSignalStrength;
- m_signalBar = m_signalStrengthV1.iBar;
- if (m_signalBar != m_previousSignalBar) {
- foreach (MTelephonyInfoObserver *observer, m_observers) {
- observer->cellNetworkSignalStrengthChanged();
- }
- }
- m_previousSignalBar = m_signalBar;
- startMonitoring();
+ if (iStatus == KErrNone) {
+ m_cellNetworkSignalStrength = m_signalStrengthV1.iSignalStrength;
+ m_signalBar = m_signalStrengthV1.iBar;
+
+ if (!m_initializing) {
+ if (m_signalBar != m_previousSignalBar) {
+ foreach (MTelephonyInfoObserver *observer, m_observers) {
+ observer->cellNetworkSignalStrengthChanged();
+ }
+ }
+ }
+
+ m_previousCellNetworkSignalStrength = m_cellNetworkSignalStrength;
+ m_previousSignalBar = m_signalBar;
}
+
+ if (m_initializing) {
+ m_initializing = false;
+ exitWait();
+ if (iStatus == KErrPermissionDenied) {
+ return; //No monitoring required
+ }
+ }
+
+ startMonitoring();
+
TRACES (qDebug() << "CCellSignalStrengthInfo::RunL--->");
}
@@ -537,6 +687,9 @@ void CCellSignalStrengthInfo::DoCancel()
int CCellSignalStrengthInfo::cellNetworkSignalStrength() const
{
+ TRACES (qDebug() << "CCellSignalStrengthInfo::cellNetworkSignalStrength<---");
+ if (m_initializing)
+ waitForRequest();
//Workaround solution based on the number of signal bars (max. 7)
return int((TReal(m_signalBar) * 100.0 + 0.5) / 7.0);
}
@@ -544,7 +697,650 @@ int CCellSignalStrengthInfo::cellNetworkSignalStrength() const
void CCellSignalStrengthInfo::startMonitoring()
{
TRACES (qDebug() << "CCellSignalStrengthInfo::startMonitoring<---");
+ if (!IsActive()) {
m_telephony.NotifyChange(iStatus, CTelephony::ESignalStrengthChange, m_signalStrengthV1Pckg);
SetActive();
+ }
TRACES (qDebug() << "CCellSignalStrengthInfo::startMonitoring--->");
}
+#else //ETELMM_SUPPORTED
+CPhoneInfo::CPhoneInfo(RMobilePhone &aMobilePhone):
+ m_rmobilePhone(aMobilePhone),m_phoneInfoinitialised(false)
+{
+ TRACES (qDebug() << "CPhoneInfov2::Constructor<--");
+ TRACES (qDebug() << "CPhoneInfov2::Constructor-->");
+}
+
+CPhoneInfo::~CPhoneInfo()
+{
+ TRACES (qDebug() << "CPhoneInfov2::Destructor<--");
+ TRACES (qDebug() << "CPhoneInfov2::Destructor-->");
+}
+
+void CPhoneInfo::initialise()
+{
+ TRACES (qDebug() << "CPhoneInfov2::Initialise<--");
+
+ if (m_phoneInfoinitialised)
+ {
+ TRACES(qDebug() << "CPhoneInfov2 already initialised, return");
+ return;
+ }
+
+ //RMobilePhone implementation
+ //check for identity capabilities
+ TUint32 identityCaps;
+ TInt capabilityErr = m_rmobilePhone.GetIdentityCaps(identityCaps);
+ if (capabilityErr != KErrNone)
+ {
+ TRACES ( qDebug() << "CPhoneInfo::initialise-capability error:" << capabilityErr);
+ return;
+ }
+
+ //Initialize imei,imsi, manufacturer
+ TRequestStatus phoneInforeqstatus;
+ RMobilePhone::TMobilePhoneIdentityV1 mobilePhoneIdentity;
+ m_rmobilePhone.GetPhoneId(phoneInforeqstatus, mobilePhoneIdentity);
+ User::WaitForRequest(phoneInforeqstatus);
+ if ( phoneInforeqstatus == KErrNone ) {
+ m_model = QString::fromUtf16(mobilePhoneIdentity.iModel.Ptr(), mobilePhoneIdentity.iModel.Length());
+ m_manufacturer = QString::fromUtf16(mobilePhoneIdentity.iManufacturer.Ptr(), mobilePhoneIdentity.iManufacturer.Length());
+ m_imei = QString::fromUtf16(mobilePhoneIdentity.iSerialNumber.Ptr(), mobilePhoneIdentity.iSerialNumber.Length());
+ TRACES ( qDebug() << "CPhoneInfov2::Model:" << m_model);
+ TRACES ( qDebug() << "CPhoneInfov2::Manufacturer:" << m_manufacturer);
+ TRACES ( qDebug() << "CPhoneInfov2::Imei:" << m_imei);
+ m_phoneInfoinitialised = true;
+ }
+
+ TRACES (qDebug() << "CPhoneInfov2::Initialise-->");
+}
+
+QString CPhoneInfo::imei()
+{
+ TRACES (qDebug() << "query CPhoneInfov2::IMEI" << m_imei);
+ initialise();
+ return m_imei;
+}
+
+QString CPhoneInfo::manufacturer()
+{
+ TRACES (qDebug() << "query CPhoneInfov2::manufacturer" << m_manufacturer);
+ initialise();
+ return m_manufacturer;
+}
+
+QString CPhoneInfo::model()
+{
+ TRACES (qDebug() << "query CPhoneInfov2::model" << m_model);
+ initialise();
+ return m_model;
+}
+
+CSubscriberInfo::CSubscriberInfo(RMobilePhone &aMobilePhone):
+ m_rmobilePhone(aMobilePhone),m_subscriberInfoinitialised(false)
+{
+ TRACES (qDebug() << "CSubscriberInfov2::Constructor<--");
+ TRACES (qDebug() << "CSubscriberInfov2::Constructor-->");
+}
+
+CSubscriberInfo::~CSubscriberInfo()
+{
+ TRACES (qDebug() << "CSubscriberInfov2::Destructor<--");
+ TRACES (qDebug() << "CSubscriberInfo2::Destructor-->");
+}
+
+void CSubscriberInfo::initialise()
+{
+ TRACES (qDebug() << "CSubscriberInfov2::Initialise<--");
+
+ if (m_subscriberInfoinitialised)
+ {
+ TRACES(qDebug() << "CSubscriberInfov2 already initialised, return");
+ return;
+ }
+
+ //RMobilePhone implementation
+ //check for identity capabilities
+ TUint32 identityCaps;
+ TInt capabilityErr = m_rmobilePhone.GetIdentityCaps(identityCaps);
+ if (capabilityErr != KErrNone)
+ {
+ TRACES ( qDebug() << "CSubscriberInfo::initialise-capability error:" << capabilityErr);
+ return;
+ }
+
+ //Initialize imei,imsi, manufacturer
+ TRequestStatus subscriberInforeqstatus;
+ RMobilePhone::TMobilePhoneSubscriberId subscriberId;
+ m_rmobilePhone.GetSubscriberId(subscriberInforeqstatus, subscriberId);
+ User::WaitForRequest(subscriberInforeqstatus);
+ if ( subscriberInforeqstatus == KErrNone ) {
+ m_imsi = QString::fromUtf16(subscriberId.Ptr(), subscriberId.Length());
+ TRACES ( qDebug() << "CSubscriberInfov2::Initialise.Imsi:" << m_imsi);
+ m_subscriberInfoinitialised = true;
+ }
+
+ TRACES (qDebug() << "CSubscriberInfov2::Initialise-->");
+}
+
+QString CSubscriberInfo::imsi()
+{
+ TRACES (qDebug() << "query CSubscriberInfov2::IMSI" << m_imsi);
+ initialise();
+ return m_imsi;
+}
+
+CEtelInfo::CEtelInfo(RMobilePhone &aMobilePhone):CActive(EPriorityStandard),
+ m_rmobilePhone(aMobilePhone),m_initialised(false)
+{
+ CActiveScheduler::Add(this);
+}
+
+CEtelInfo::~CEtelInfo()
+{
+}
+
+void CEtelInfo::addObserver(MTelephonyInfoObserver *observer)
+{
+ m_observers.append(observer);
+}
+
+void CEtelInfo::removeObserver(MTelephonyInfoObserver *observer)
+{
+ m_observers.removeOne(observer);
+}
+
+CBatteryInfo::CBatteryInfo(RMobilePhone &aMobilePhone)
+ : CEtelInfo(aMobilePhone),m_batteryLevel(0)
+{
+ TRACES ( qDebug() << "CBatteryInfov2::constructor<--" );
+ initialise();
+ TRACES ( qDebug() << "CBatteryInfov2::constructor-->" );
+}
+
+void CBatteryInfo::initialise()
+{
+ TRACES (qDebug() << "CBatteryInfov2::initialise<--");
+ if (m_initialised)
+ {
+ TRACES (qDebug() << "CBatteryInfov2 already initialised,return");
+ return;
+ }
+ //Check BatteryCaps
+ TUint32 batteryCaps;
+ TInt batteryCapserror = m_rmobilePhone.GetBatteryCaps(batteryCaps);
+ if ( batteryCapserror != KErrNone) TRACES ( qDebug() << "CBatteryInfo::initialise-capability error:" << batteryCapserror);
+
+ if ( batteryCapserror == KErrNone && (batteryCaps & RMobilePhone::KCapsGetBatteryInfo) ) {
+ TRequestStatus batterystatus;
+ m_rmobilePhone.GetBatteryInfo(batterystatus, m_batteryinfo);
+ User::WaitForRequest(batterystatus);
+ if (batterystatus == KErrNone){
+ m_batteryLevel = m_batteryinfo.iChargeLevel;
+ TRACES(qDebug() << "CBatteryInfov2:Initial chargelevel:" << m_batteryLevel);
+ m_initialised = true;
+ }
+ }
+
+ if ( batteryCapserror == KErrPermissionDenied)
+ {
+ m_initialised = true;
+ return;
+ }
+
+ if (batteryCaps & RMobilePhone::KCapsNotifyBatteryInfoChange) startMonitoring();
+
+ TRACES (qDebug() << "CBatteryInfov2::initialise-->");
+}
+
+CBatteryInfo::~CBatteryInfo()
+{
+ Cancel();
+}
+
+void CBatteryInfo::DoCancel()
+{
+ TRACES ( qDebug() << "CBatteryInfov2::DoCancel<--" );
+ if (IsActive())
+ m_rmobilePhone.CancelAsyncRequest(EMobilePhoneNotifyBatteryInfoChange);
+ TRACES ( qDebug() << "CBatteryInfov2::DoCancel-->" );
+}
+
+void CBatteryInfo::RunL()
+{
+ TRACES(qDebug() << "CBatteryInfov2::RunL()<---");
+ if (iStatus == KErrNone)
+ {
+ if ( m_batteryLevel != m_batteryinfo.iChargeLevel ) {
+ foreach (MTelephonyInfoObserver *observer, m_observers) {
+ TRACES (qDebug() << "Notifying batteryLevelChanged");
+ observer->batteryLevelChanged();
+ }
+ }
+ m_batteryLevel = m_batteryinfo.iChargeLevel;
+ }
+ startMonitoring();
+ TRACES(qDebug() << "CBatteryInfov2::RunL()--->");
+}
+
+void CBatteryInfo::startMonitoring()
+{
+ TRACES(qDebug() << "CBatteryInfov2::StartMonitoring--start");
+ if (!IsActive()) {
+ m_rmobilePhone.NotifyBatteryInfoChange(iStatus, m_batteryinfo);
+ SetActive();
+ }
+ TRACES(qDebug() << "CBatteryInfov2::StartMonitoring--End");
+}
+
+int CBatteryInfo::batteryLevel() const
+{
+ TRACES (qDebug() << "CBatteryInfov2::batteryLevel:" << m_batteryLevel);
+ return m_batteryLevel;
+}
+
+//Signal Strength
+CCellSignalStrengthInfo::CCellSignalStrengthInfo(RMobilePhone &aMobilePhone)
+ :CEtelInfo(aMobilePhone)
+{
+ TRACES(qDebug() << "CCellSignalStrengthInfov2::CCellSignalStrengthInfov2<---");
+ initialise();
+ TRACES(qDebug() << "CCellSignalStrengthInfov2::CCellSignalStrengthInfov2--->");
+}
+
+void CCellSignalStrengthInfo::initialise()
+{
+ TRACES (qDebug() << "CCellSignalStrengthInfov2::initialise<--");
+ if (m_initialised)
+ {
+ TRACES (qDebug() << "CCellSignalStrengthInfov2 already initialised,return");
+ return;
+ }
+ //Check Signal related Caps
+ TUint32 signalCaps;
+ TInt signalCapserror = m_rmobilePhone.GetSignalCaps(signalCaps);
+ if ( signalCapserror != KErrNone) TRACES ( qDebug() << "CCellSignalStrengthInfo::initialise-capability error:" << signalCapserror);
+
+ if (signalCapserror == KErrNone)
+ {
+ TRequestStatus signalstatus;
+ if (signalCaps & RMobilePhone::KCapsGetSignalStrength)
+ {
+ m_rmobilePhone.GetSignalStrength(signalstatus, m_cellNetworkSignalStrength, m_signalBar);
+ User::WaitForRequest(signalstatus);
+ if ( signalstatus == KErrNone ) {
+ //m_prevcellNetworkSignalStrength = m_cellNetworkSignalStrength;
+ m_prevsignalBar = m_signalBar;
+ m_initialised = true;
+ }
+ }
+ }
+
+ if ( signalCapserror == KErrPermissionDenied)
+ {
+ m_initialised = true;
+ return;
+ }
+
+ if (signalCaps & RMobilePhone::KCapsNotifySignalStrengthChange) startMonitoring();
+ TRACES (qDebug() << "CCellSignalStrengthInfov2::initialise-->");
+}
+
+CCellSignalStrengthInfo::~CCellSignalStrengthInfo()
+{
+ Cancel();
+}
+
+void CCellSignalStrengthInfo::DoCancel()
+{
+ TRACES ( qDebug() << "CCellSignalStrengthInfov2::DoCancel<--" );
+ if (IsActive())
+ m_rmobilePhone.CancelAsyncRequest(EMobilePhoneNotifySignalStrengthChange);
+ TRACES ( qDebug() << "CCellSignalStrengthInfov2::DoCancel-->" );
+}
+
+void CCellSignalStrengthInfo::RunL()
+{
+ TRACES(qDebug() << "CCellSignalStrengthInfov2::RunL()<---");
+ if (iStatus == KErrNone)
+ {
+ if ( m_signalBar != m_prevsignalBar ) {
+ foreach (MTelephonyInfoObserver *observer, m_observers) {
+ TRACES (qDebug() << "Notifying cellNetworkSignalStrengthChanged");
+ observer->cellNetworkSignalStrengthChanged();
+ }
+ }
+ m_prevsignalBar = m_signalBar;
+ }
+ startMonitoring();
+ TRACES(qDebug() << "CCellSignalStrengthInfov2::RunL()--->");
+}
+
+void CCellSignalStrengthInfo::startMonitoring()
+{
+ TRACES(qDebug() << "CCellSignalStrengthInfov2::StartMonitoring--start");
+ if (!IsActive()) {
+ m_rmobilePhone.NotifySignalStrengthChange(iStatus, m_cellNetworkSignalStrength, m_signalBar);
+ SetActive();
+ }
+ TRACES(qDebug() << "CCellSignalStrengthInfov2::StartMonitoring--End");
+}
+
+int CCellSignalStrengthInfo::cellNetworkSignalStrength() const
+{
+ TRACES(qDebug() << "CCellsignalstrengthv2::cellNetworkSignalStrength");
+ return int((TReal(m_signalBar) * 100.0 + 0.5) / 7.0);
+}
+
+CCellNetworkRegistrationInfo::CCellNetworkRegistrationInfo(RMobilePhone &aMobilePhone):CEtelInfo(aMobilePhone)
+{
+ TRACES(qDebug() << "CCellNetworkRegistrationInfov2::CCellNetworkRegistrationInfov2<---");
+ initialise();
+ TRACES(qDebug() << "CCellNetworkRegistrationInfov2::CCellNetworkRegistrationInfov2--->");
+}
+
+CCellNetworkRegistrationInfo::~CCellNetworkRegistrationInfo()
+{
+ Cancel();
+}
+
+void CCellNetworkRegistrationInfo::initialise()
+{
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::initialise<--");
+ if (m_initialised)
+ {
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2 already initialised,return");
+ return;
+ }
+
+ TUint32 capsPhone;
+ TInt capserror = m_rmobilePhone.GetMultimodeCaps(capsPhone);
+ if ( capserror != KErrNone) TRACES ( qDebug() << "CCellNetworkRegistrationInfo::initialise-capability error:" << capserror);
+ if (!capserror) {
+ TRequestStatus reqStatus;
+ m_rmobilePhone.GetNetworkRegistrationStatus(reqStatus, m_networkStatus);
+ User::WaitForRequest(reqStatus);
+ m_previousNetworkStatus = m_networkStatus;
+ m_initialised = true;
+ }
+
+ if ( capserror == KErrPermissionDenied)
+ {
+ m_initialised = true;
+ return;
+ }
+
+ startMonitoring();
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::initialise-->");
+}
+
+void CCellNetworkRegistrationInfo::RunL()
+{
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::RunL()<---");
+ if (iStatus == KErrNone)
+ {
+ if ( m_networkStatus != m_previousNetworkStatus) {
+ foreach (MTelephonyInfoObserver *observer, m_observers) {
+ TRACES (qDebug() << "Notifying cellnetworkstatusChanged");
+ observer->cellNetworkStatusChanged();
+ }
+ }
+ m_previousNetworkStatus = m_networkStatus;
+ }
+ startMonitoring();
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::RunL()--->");
+}
+
+void CCellNetworkRegistrationInfo::startMonitoring()
+{
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::StartMonitoring<---");
+ if (!IsActive()) {
+ m_rmobilePhone.NotifyNetworkRegistrationStatusChange(iStatus,m_networkStatus);
+ SetActive();
+ }
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::StartMonitoring--->");
+}
+
+void CCellNetworkRegistrationInfo::DoCancel()
+{
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::DoCancel");
+ m_rmobilePhone.CancelAsyncRequest(EMobilePhoneNotifyNetworkRegistrationStatusChange);
+}
+
+RMobilePhone::TMobilePhoneRegistrationStatus CCellNetworkRegistrationInfo::cellNetworkStatus() const
+{
+ TRACES (qDebug() << "CCellNetworkRegistrationInfov2::cellNetworkStatus:" << m_networkStatus);
+ return m_networkStatus;
+}
+
+CCellNetworkInfo::CCellNetworkInfo(RMobilePhone &aMobilePhone)
+ :CEtelInfo(aMobilePhone),iNetworkInfoPckg(iNetworkInfo)
+{
+ TRACES(qDebug() << "CCellNetworkInfov2::CCellNetworkInfov2<---");
+ initialise();
+ TRACES(qDebug() << "CCellNetworkInfov2::CCellNetworkInfov2--->");
+}
+
+void CCellNetworkInfo::initialise()
+{
+ TRACES (qDebug() << "CCellNetworkInfov2::initialise<--");
+
+ if (m_initialised)
+ {
+ TRACES (qDebug() << "CCellNetworkInfov2 already initialised,return");
+ return;
+ }
+
+ // Check Signal related Caps
+ TUint32 networkCaps;
+ TInt capserror = m_rmobilePhone.GetNetworkCaps(networkCaps);
+ if ( capserror != KErrNone) TRACES ( qDebug() << "CCellNetworkInfo::initialise-capability error:" << capserror);
+ if ( capserror == KErrNone && (networkCaps & RMobilePhone::KCapsGetCurrentNetwork))
+ {
+ //For cellid & location area code, networkid, countrycode
+ TRequestStatus locationstatus;
+ m_rmobilePhone.GetCurrentNetwork(locationstatus, iNetworkInfoPckg, iLocation);
+ User::WaitForRequest(locationstatus);
+ if ( locationstatus == KErrNone )
+ {
+ //cellid
+ m_cellId = iLocation.iCellId;
+ m_previouscellId = m_cellId;
+
+ //location area code
+ m_locationAreaCode = iLocation.iLocationAreaCode;
+
+ //network id
+ m_networkId = QString::fromUtf16(iNetworkInfo.iNetworkId.Ptr(), iNetworkInfo.iNetworkId.Length());
+ m_previousNetworkId = m_networkId;
+
+ //country code
+ m_countryCode = QString::fromUtf16(iNetworkInfo.iCountryCode.Ptr(), iNetworkInfo.iCountryCode.Length());
+ m_previousCountryCode = m_countryCode;
+
+ //networkname
+ RMobilePhone::TMobilePhoneNetworkLongName longName = iNetworkInfo.iLongName;
+ if (longName.Length() > 0 ) {
+ m_networkName = QString::fromUtf16(longName.Ptr(), longName.Length());
+ } else {
+ RMobilePhone::TMobilePhoneNetworkDisplayTag displayTag = iNetworkInfo.iDisplayTag;
+ m_networkName = QString::fromUtf16(displayTag.Ptr(), displayTag.Length());
+ }
+ m_previousNetworkName = m_networkName;
+ //network mode
+ m_networkMode = iNetworkInfo.iMode;
+ m_previousNetworkMode = m_networkMode;
+ m_initialised = true;
+ }
+ }
+
+ if (capserror == KErrPermissionDenied) {
+ m_initialised = true;
+ return;
+ }
+
+ if (networkCaps & RMobilePhone::KCapsNotifyCurrentNetwork) startMonitoring();
+
+ TRACES (qDebug() << "CCellNetworkInfov2::initialise-->");
+}
+
+CCellNetworkInfo::~CCellNetworkInfo()
+{
+ Cancel();
+}
+
+int CCellNetworkInfo::cellId() const
+{
+ TRACES (qDebug() << "CCellNetworkInfov2::cellId():" << m_cellId);
+ return m_cellId;
+}
+
+int CCellNetworkInfo::locationAreaCode() const
+{
+ TRACES (qDebug() << "CCellNetworkInfov2::cellId():" << m_locationAreaCode);
+ return m_locationAreaCode;
+}
+
+QString CCellNetworkInfo::countryCode() const
+{
+ TRACES (qDebug() << "CCellNetworkInfov2::countryCode():" << m_countryCode);
+ return m_countryCode;
+}
+
+QString CCellNetworkInfo::networkCode() const
+{
+ TRACES (qDebug() << "CCellNetworkInfov2::networkCode():" << m_networkId);
+ return m_networkId;
+}
+
+QString CCellNetworkInfo::networkName() const
+{
+ TRACES (qDebug() << "CCellNetworkInfov2::networkName():" << m_networkName);
+ return m_networkName;
+}
+
+QString CCellNetworkInfo::homeNetworkCode()
+{
+ TRequestStatus homenetworkstatus;
+ RMobilePhone::TMobilePhoneNetworkInfoV1 infov1;
+ RMobilePhone::TMobilePhoneNetworkInfoV1Pckg statusPkg(infov1);
+ m_rmobilePhone.GetHomeNetwork(homenetworkstatus, statusPkg);
+ User::WaitForRequest(homenetworkstatus);
+ if (homenetworkstatus.Int() == KErrNone)
+ {
+ QString homeNetworkCode= QString::fromUtf16(infov1.iNetworkId.Ptr(), infov1.iNetworkId.Length());
+ return homeNetworkCode;
+ }
+ else
+ return QString();
+}
+
+CTelephony::TNetworkMode CCellNetworkInfo::networkMode() const
+{
+ TRACES (qDebug() << "CCellNetworkInfov2::networkMode():" << m_networkMode);
+ switch (m_networkMode){
+ case RMobilePhone::ENetworkModeUnregistered:
+ return CTelephony::ENetworkModeUnregistered;
+ case RMobilePhone::ENetworkModeGsm:
+ return CTelephony::ENetworkModeGsm;
+ case RMobilePhone::ENetworkModeAmps:
+ return CTelephony::ENetworkModeAmps;
+ case RMobilePhone::ENetworkModeCdma95:
+ return CTelephony::ENetworkModeCdma95;
+ case RMobilePhone::ENetworkModeCdma2000:
+ return CTelephony::ENetworkModeCdma2000;
+ case RMobilePhone::ENetworkModeWcdma:
+ return CTelephony::ENetworkModeWcdma;
+ /*case RMobilePhone::ENetworkModeTdcdma:
+ return CTelephony::ENetworkModeTdcdma;*/
+ default:
+ return CTelephony::ENetworkModeUnknown;
+ }
+}
+
+void CCellNetworkInfo::DoCancel()
+{
+ TRACES ( qDebug() << "CCellNetworkInfov2::DoCancel<--" );
+ if (IsActive())
+ m_rmobilePhone.CancelAsyncRequest(EMobilePhoneNotifyCurrentNetworkChange);
+ TRACES ( qDebug() << "CCellNetworkInfov2::DoCancel-->" );
+}
+
+void CCellNetworkInfo::RunL()
+{
+ TRACES(qDebug() << "CCellNetworkInfov2::RunL()<---");
+ if (iStatus == KErrNone)
+ {
+ //cellid
+ m_cellId = iLocation.iCellId;
+
+ //location area code
+ m_locationAreaCode = iLocation.iLocationAreaCode;
+
+ //network id
+ m_networkId = QString::fromUtf16(iNetworkInfo.iNetworkId.Ptr(), iNetworkInfo.iNetworkId.Length());
+
+ //country code
+ m_countryCode = QString::fromUtf16(iNetworkInfo.iCountryCode.Ptr(), iNetworkInfo.iCountryCode.Length());
+
+ //networkname
+ RMobilePhone::TMobilePhoneNetworkLongName longName = iNetworkInfo.iLongName;
+ if (longName.Length() > 0 ) {
+ m_networkName = QString::fromUtf16(longName.Ptr(), longName.Length());
+ } else {
+ RMobilePhone::TMobilePhoneNetworkDisplayTag displayTag = iNetworkInfo.iDisplayTag;
+ m_networkName = QString::fromUtf16(displayTag.Ptr(), displayTag.Length());
+ }
+
+ //network mode
+ m_networkMode = iNetworkInfo.iMode;
+
+ foreach (MTelephonyInfoObserver *observer, m_observers)
+ {
+ if (m_networkId != m_previousNetworkId) {
+ TRACES (qDebug() << "Notifying networkcodechanged");
+ observer->networkCodeChanged();
+ }
+ if (m_countryCode != m_previousCountryCode) {
+ TRACES (qDebug() << "Notifying countryCodeChanged");
+ observer->countryCodeChanged();
+ }
+ if (m_networkName != m_previousNetworkName) {
+ TRACES (qDebug() << "Notifying networkNameChanged");
+ observer->networkNameChanged();
+ }
+ if (m_networkMode != m_previousNetworkMode) {
+ TRACES (qDebug() << "Notifying networkModeChanged");
+ observer->networkModeChanged();
+ }
+ if (m_cellId != m_previouscellId) {
+ TRACES (qDebug() << "Notifying cellId changes");
+ observer->changedCellId(m_cellId);
+ }
+ }
+ m_previouscellId = m_cellId;
+ m_previousNetworkId = m_networkId;
+ m_previousCountryCode = m_countryCode;
+ m_previousNetworkName = m_networkName;
+ m_previousNetworkMode = m_networkMode;
+ }
+
+ if (iStatus != KErrPermissionDenied) {
+ // NotifyCurrentNetworkChange requires ReadDeviceData so don't retry if app does not
+ // have required capabilities
+ startMonitoring();
+ }
+ TRACES(qDebug() << "CCellNetworkInfov2::RunL()--->");
+}
+
+void CCellNetworkInfo::startMonitoring()
+{
+ TRACES(qDebug() << "CCellNetworkInfov2::StartMonitoring--start");
+ if (!IsActive()) {
+ m_rmobilePhone.NotifyCurrentNetworkChange(iStatus, iNetworkInfoPckg, iLocation);
+ SetActive();
+ }
+ TRACES(qDebug() << "CCellNetworkInfov2::StartMonitoring--End");
+}
+
+#endif