telephonyserverplugins/multimodetsy/Multimode/gprs/atgprsntwkregstatuschange.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/multimodetsy/Multimode/gprs/atgprsntwkregstatuschange.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,181 @@
+// Copyright (c) 2001-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 <et_phone.h>		// For CTelObject
+
+#include "atgprsntwkregstatuschange.h"		// Header file for this source file
+#include "mSLOGGER.H"					// For LOGTEXT macros
+#include "ATIO.H"							// For CATIO class
+#include "Matstd.h"						// For AT command strings and timeout values
+#include "gprs.h"							// for CGprs class
+#include "NOTIFY.H"						// for CNotifications
+
+// Macro for logging text to the log file using the local class name and a simpler 
+// call style.
+#ifdef __LOGDEB__
+_LIT8(KLogEntry,"CATGprsNtwkRegStatusChange::%S\t%S");
+#define LOCAL_LOGTEXT(function,text) {_LIT8(F,function);_LIT8(T,text);LOGTEXT3(KLogEntry,&F,&T);}
+#else
+#define LOCAL_LOGTEXT(function,text)
+#endif
+
+
+CATGprsNtwkRegStatusChange* CATGprsNtwkRegStatusChange::NewL(CATIO* aIo,CTelObject* aTelObject, CPhoneGlobals* aGlobals)
+/**
+ * Standard class factory function
+ */
+ 	{
+	return (new(ELeave) CATGprsNtwkRegStatusChange(aIo,aTelObject,aGlobals));
+	// Currently no need for a ConstructL call, maybe we'll need one in the future...
+	}
+
+CATGprsNtwkRegStatusChange::CATGprsNtwkRegStatusChange(CATIO* aIo, CTelObject* aTelObject,CPhoneGlobals* aGlobals)
+	:CATBase(aIo,aTelObject,aGlobals)
+ 	{
+	Enable();
+	}
+
+CATGprsNtwkRegStatusChange::~CATGprsNtwkRegStatusChange()
+	{
+	Disable();
+	}
+
+void CATGprsNtwkRegStatusChange::Enable()
+/** 
+ * Adds the all important +CGREG:* expect string so that our ::EventSignal is called when 
+ * we get an unsolicited network registration status changes.
+ */
+	{
+	LOCAL_LOGTEXT("Enable","Adding +CGREG:* expect string");
+	
+	// Ensure +CRING is not on the expect string stack before we add it.
+	// (Doing things this way means we do not have to maintain an expect string in our
+	// member data)
+	iIo->RemoveExpectStrings(this);		
+
+	// Add +CRING expect string
+	__ASSERT_ALWAYS(iIo->AddExpectString(this,KCGREGMatchString) != NULL, Panic(EGeneral));
+	}
+
+void CATGprsNtwkRegStatusChange::Disable()
+/** 
+ * Removes all expect strings added by this object. 
+ * This object will not process +CRING until ::Enable() is called.
+ */
+	{
+	LOCAL_LOGTEXT("Disable","Removing all CATGprsNtwkRegStatusCchange expect strings");
+	iIo->RemoveExpectStrings(this);		
+	}
+
+void CATGprsNtwkRegStatusChange::EventSignal(TEventSource aSource)
+/**
+ * Called when a '+CGREG:' is received.
+ * Parses the +CGREG:... string which we recieved from the phone and then triggers
+ * the EPacketNtwkRegStatusChange notification as appropriate.
+ */
+	{
+	LOCAL_LOGTEXT("EventSignal","Enter function");
+
+	TInt ret(KErrNone);
+	RPacketService::TRegistrationStatus regStatus(RPacketService::EUnknown);
+		
+	__ASSERT_ALWAYS(aSource == EReadCompletion, Panic(EATCommand_IllegalCompletionReadExpected));
+	TRAP(ret,ParseResponseL(regStatus));
+	if(ret!=KErrNone)
+		{
+		LOCAL_LOGTEXT("EventSignal","Unable to parse CGREG response");
+		}
+	else
+		{
+		//
+		// Trigger the notificaiton mechanism
+		LOCAL_LOGTEXT("EventSignal","Triggering EPacketNtwkRegStatusChange notification");
+		((CGprs*)iTelObject)->SetRegistrationStatus(regStatus);
+		iPhoneGlobals->iNotificationStore->CheckNotification(iTelObject, EPacketNtwkRegStatusChange);
+
+		// We are done, but there is no client request to complete
+		// we just return and wait until we get our next +CGREG:* command
+		}
+	}
+
+void CATGprsNtwkRegStatusChange::ParseResponseL(RPacketService::TRegistrationStatus& aRegStatus)
+/**
+ * Parses the +CGREG unsolicited string from the modem.
+ * An example response woulf be '+CGREG: 2' where the value denotes the
+ * current registration status.
+ * If parsing succeeds then aRegStatus is updated.
+ */
+	{
+	ParseBufferLC();
+	TDblQueIter<CATParamListEntry> iter(iRxResults);
+	CATParamListEntry* entry=iter++;
+	
+	// Validate we have +CGREG at the start 
+	if((entry==NULL) ||(entry->iResultPtr!=KCGREGResponseString))
+		{
+		LOCAL_LOGTEXT("ParseResponseL","Failed to find +CGREG:");
+		User::Leave(KErrNotSupported);
+		}
+	
+	// Read in value
+	entry=iter++;
+	if(!entry)
+		{
+		LOCAL_LOGTEXT("ParseResponseL","Failed to find 1st parameter");
+		User::Leave(KErrNotFound);
+		}		
+	TInt etsiVal;
+	CATParamListEntry::EntryValL(entry,etsiVal);
+
+	// Convert value to equivalent EtelMM enum
+	switch(etsiVal)
+		{
+	case 0:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		aRegStatus=RPacketService::ENotRegisteredNotSearching;
+		break;
+	case 1:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		aRegStatus=RPacketService::ERegisteredOnHomeNetwork;
+		break;
+	case 2:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		aRegStatus=RPacketService::ENotRegisteredSearching;
+		break;
+	case 3:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		aRegStatus=RPacketService::ERegistrationDenied;
+		break;
+	case 4:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		aRegStatus=RPacketService::EUnknown;
+		break;
+	case 5:		// ETSI value as defined in ETSI 07.07 section 10.1.14
+		aRegStatus=RPacketService::ERegisteredRoaming;
+		break;
+	default:
+		aRegStatus=RPacketService::EUnknown;
+		break;
+		}
+	CleanupStack::PopAndDestroy();	// Pop and destroy the object pushed by ParseBufferLC()
+	}
+
+
+void CATGprsNtwkRegStatusChange::CompleteWithIOError(TEventSource /*aSource*/,TInt /*aStatus*/)
+	{
+	LOCAL_LOGTEXT("CATGprsNtwkRegStatusChange","CompleteWithIOError");
+	// CATIO removes expect strings in event of IO error so don't do it here
+	// Also, CATErrorHandler::CleanUp completes notification with error
+	}
+
+
+
+
+