--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsref/telephonyrefplugins/atltsy/atcommand/phone/src/atdetectnetwork.cpp Tue Aug 31 16:23:08 2010 +0300
@@ -0,0 +1,230 @@
+// Copyright (c) 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:
+// Get the detected network
+
+#include "atdetectnetwork.h"
+#include "mslogger.h"
+
+_LIT8(KDetectNetworkCommand,"AT+COPS=?\r");
+_LIT8(KGetDetectNetworkRepondStr,"+COPS:");
+const TInt KLtsyDetectNetworkReadTimeOut = 80;
+
+// ---------------------------------------------------------------------------
+// NetworkIdL
+// Utility function to translate the 5 digit ASCII network identification
+// returned by the ME into Mobile Country Code (aCountryCode) and a Mobile
+// Network Code (aNetworkIdentity) strings. Tbe format returned by the ME is
+// XXXYY, where XXX represents the Mobile Country Code and YY represents the
+// Mobile Network Code.
+// ---------------------------------------------------------------------------
+static TInt NetworkIdL(const TDesC8& aCode,
+ RMobilePhone::TMobilePhoneNetworkCountryCode& aCountryCode,
+ RMobilePhone::TMobilePhoneNetworkIdentity& aNetworkIdentity)
+ {
+ if (aCode.Length()!=5)
+ {
+ return KErrGeneral;
+ }
+
+ aCountryCode.SetLength(3);
+ aCountryCode[0] = aCode[0];
+ aCountryCode[1] = aCode[1];
+ aCountryCode[2] = aCode[2];
+
+ aNetworkIdentity.SetLength(2);
+ aNetworkIdentity[0] = aCode[3];
+ aNetworkIdentity[1] = aCode[4];
+ return KErrNone;
+ }
+// Class CATDetectNetwork
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDetectNetwork* CATDetectNetwork::NewL(CGlobalPhonemanager& aGloblePhone,
+ CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+ {
+ CATDetectNetwork* self = new(ELeave) CATDetectNetwork(aGloblePhone,aCtsyDispatcherCallback);
+ CleanupStack::PushL(self );
+ self->ConstructL();
+ CleanupStack::Pop(self );
+ return self ;
+ }
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::CATDetectNetwork
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDetectNetwork::CATDetectNetwork(CGlobalPhonemanager& aGloblePhone,
+ CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+ :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+ {
+ iReadTimeOut = KLtsyDetectNetworkReadTimeOut;
+ }
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::ConstructL()
+ {
+ CAtCommandBase::ConstructL();
+ iList= NULL;
+ iCommandRunning = EFalse;
+ iCommandCancel = EFalse;
+ }
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::~CATDetectNetwork
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATDetectNetwork::~CATDetectNetwork()
+ {
+ if(iList)
+ {
+ delete iList;
+ iList = NULL;
+ }
+ }
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::StartRequestL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::StartRequest()
+ {
+ iCommandRunning = ETrue;
+ ExecuteCommand();
+ }
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::ExecuteCommand()
+ {
+ iTxBuffer.Copy(KDetectNetworkCommand);
+ Write();
+ }
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::CancelCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::CancelCommand()
+ {
+ iCommandCancel = ETrue;
+ }
+// ---------------------------------------------------------------------------
+// CATDetectNetwork::ParseResponseL
+// should be
+// +COPS: (status,"longname","shortname",code),... ,,(list),(list)
+// +COPS: [list of supported (<stat>,long alphanumeric <oper>,short alphanumeric
+// <oper>,numeric <oper>)s]
+// <stat>:
+// 0 unknown
+// 1 available
+// 2 current
+// 3 forbidden
+// <oper>: string type; <format> indicates if the format is alphanumeric or numeric;
+// long alphanumeric format can be upto 16 characters long and short format up to 8
+// characters (refer GSM MoU SE.13 [9]); numeric format is the GSM Location Area
+// Identification number (refer GSM 04.08 [8] subclause 10.5.1.3) which consists of
+// a three BCD digit country code coded as in ITU-T E.212 Annex A [10], plus a two
+// BCD digit network code, which is administration specific; returned <oper> shall
+// not be in BCD format, but in IRA characters converted from BCD; hence the number
+// has structure: (country code digit 3)(country code digit 2)(country code digit 1)
+// (network code digit 2)(network code digit 1)
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+ {
+ if (CurrentLine().Match(KLtsyOkString) != 0)
+ {
+ iError = KErrGeneral;
+ return ;
+ }
+ if(iList)
+ {
+ delete iList;
+ iList = NULL;
+ }
+ iList=CMobilePhoneNetworkListV2::NewL();
+
+ RArray<TPtrC8> array;
+ CleanupClosePushL(array);
+ iParser->ParseRespondedBuffer(array,PrecedingLine());
+ TInt Count = array.Count();
+ if (Count < 1)
+ {
+ CleanupStack::PopAndDestroy();
+ iError = KErrNotFound;
+ return ;
+ }
+ if( array[0].MatchF(KGetDetectNetworkRepondStr)==KErrNotFound)
+ {
+ CleanupStack::PopAndDestroy();
+ iError = KErrNotFound;
+ return ;
+ }
+ TInt count = array.Count() - 1;
+ for (TInt i = 1;i < count;i++)
+ {
+ RMobilePhone::TMobilePhoneNetworkInfoV2 info;
+ // This TSY only supports GSM mode so we can hardcode this
+ info.iMode=RMobilePhone::ENetworkModeGsm;
+ TInt val;
+ TLex8 lex(array[i]);
+ lex.Val(val);
+ info.iStatus = RMobilePhone::TMobilePhoneNetworkStatus(val);
+ i++;
+ info.iLongName.Copy(array[i]);
+ i++;
+ if(array[i].Length() > info.iShortName.MaxLength())
+ info.iShortName.Copy(array[i].Mid(0,info.iShortName.MaxLength()));
+ else
+ info.iShortName.Copy(array[i]);
+ i++;
+ User::LeaveIfError(NetworkIdL(array[i],info.iCountryCode, info.iNetworkId)); // MNC and MCC
+
+ iList->AddEntryL(info);
+ }
+ CleanupStack::PopAndDestroy();
+ } //ParseResponseL
+// ---------------------------------------------------------------------------
+// ATDetectNetwork::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATDetectNetwork::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+ {
+ if(KErrNone ==aStatus)
+ {
+ if(aEventSource == EReadCompletion)
+ {
+ aStatus = iError;
+ }
+ else
+ return;
+ }
+ if(iCommandCancel)
+ {
+ iCtsyDispatcherCallback.CallbackPhoneGetDetectedNetworksCancelComp(0);
+ }
+ else
+ {
+ iCtsyDispatcherCallback.CallbackPhoneGetDetectedNetworksComp(aStatus,*iList);
+ }
+ iCommandRunning = EFalse;
+ iCommandCancel = EFalse;
+ CAtCommandBase::Complete();
+ iPhoneGlobals.iEventSignalActive = EFalse;
+
+ }
+//
+// End of file
+