diff -r 3553901f7fa8 -r 4047d69ee0e4 telephonyserverplugins/attestltsy/atcommand/phone/src/atgetnetworkinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/atgetnetworkinfo.cpp Tue Feb 09 12:31:43 2010 +0000 @@ -0,0 +1,250 @@ +// 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: +// CATGetModemStatus +// Description: +// Basic GSM Network and Operator information Implementation file. +// +// This file contains the implementation of the CATNetworkInfo, CATDetectNetwork, +// CNotifyNetworkRegistrationStatusChange and CCurrentNetworkChangedNotify classes. +// Find the current Network Operator in Numeric, Long and Short formats. +// NB - Some phones do not fully support all the formats, if any. The commands are +// supported implement this command. Valid responses are set in the TMobilePhoneLocationAreaV1 +// and the TMobilePhoneNetworkInfoV1 structures and the Network's status is set to Current. + + + +#include +#include "atgetnetworkinfo.h" +#include "mslogger.h" + +_LIT8(KGetCurrentNetworkInfoCommand, "AT+COPS?\r"); +_LIT8(KGetCurrentNetworkInfoResponse,"+COPS:"); +/** + * 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 CATNetworkInfo +// --------------------------------------------------------------------------- +// CATNetworkInfo::NewL +// other items were commented in a header +// --------------------------------------------------------------------------- +CATNetworkInfo* CATNetworkInfo::NewL(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + { + CATNetworkInfo* self = new(ELeave) CATNetworkInfo(aGloblePhone, + aCtsyDispatcherCallback); + CleanupStack::PushL(self ); + self->ConstructL(); + CleanupStack::Pop(self ); + return self ; + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::CATNetworkInfo +// other items were commented in a header +// --------------------------------------------------------------------------- +CATNetworkInfo::CATNetworkInfo(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback) + { + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::ConstructL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CATNetworkInfo::ConstructL() + { + CAtCommandBase::ConstructL(); + iGetHomeNwk = EFalse; + iAtType = ELtsyAT_Phone_NwkInfo; + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::~CATNetworkInfo +// other items were commented in a header +// --------------------------------------------------------------------------- +CATNetworkInfo::~CATNetworkInfo() + { + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::StartRequestL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CATNetworkInfo::StartRequest() + { + ExecuteCommand(); + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::ExecuteCommand +// other items were commented in a header +// --------------------------------------------------------------------------- +void CATNetworkInfo::ExecuteCommand( ) + { + iTxBuffer.Copy(KGetCurrentNetworkInfoCommand); + Write(); + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::GetNetWorkInfo +// other items were commented in a header +// --------------------------------------------------------------------------- +RMobilePhone::TMobilePhoneNetworkInfoV5 CATNetworkInfo:: GetNetWorkInfo() + { + return iNetworkInfo; + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::GetErrorValue +// other items were commented in a header +// --------------------------------------------------------------------------- +TInt CATNetworkInfo::GetErrorValue() + { + return iError; + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::SetToGetHomeNwk +// other items were commented in a header +// --------------------------------------------------------------------------- +void CATNetworkInfo::SetToGetHomeNwk() + { + iGetHomeNwk = ETrue; + } +/** + * This method parses the modems response to the 'AT+CGREG?' command. + * An example response is '+CGREG: 0,1' where second value denotes the + * current registration status. + */ +// --------------------------------------------------------------------------- +// CATNetworkInfo::ParseResponseL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CATNetworkInfo::ParseResponseL(const TDesC8& /*aResponseBuf*/) + { + if (CurrentLine().Match(KLtsyOkString) != 0) + { + iError = KErrGeneral; + return ; + } + RArray array; + CleanupClosePushL(array); + iParser->ParseRespondedBuffer(array,PrecedingLine()); + TInt Count = array.Count(); + if (Count < 1) + { + CleanupStack::PopAndDestroy(); + iError = KErrNotFound; + return ; + } + + if( array[0].MatchF(KGetCurrentNetworkInfoResponse)==KErrNotFound) + { + CleanupStack::PopAndDestroy(); + iError = KErrNotFound; + return ; + } + TInt val = 0; + TLex8 lex(array[1]); + lex.Val(val); + iPhoneGlobals.iPhoneStatus.iLocalNetworkSel.iMethod = RMobilePhone::TMobilePhoneSelectionMethod(val); + if(Count > 2) + { + TLex8 lex1(array[2]); + lex1.Val(iNameFormat); + switch (iNameFormat) + { + case 0: + if(array[3].Length() > iNetworkInfo.iLongName.MaxLength()) + iNetworkInfo.iLongName.Copy(array[3].Mid(0,iNetworkInfo.iLongName.MaxLength())); + else + iNetworkInfo.iLongName.Copy(array[3]); + break; + case 1: + if(array[2].Length() > iNetworkInfo.iShortName.MaxLength()) + iNetworkInfo.iShortName.Copy(array[3].Mid(0,iNetworkInfo.iShortName.MaxLength())); + else + iNetworkInfo.iShortName.Copy(array[3]); + break; + case 2: + /*if(array[2].Length() > iNetworkInfo.iShortName.MaxLength()) + iNetworkInfo.iShortName.Copy(array[3].Mid(0,iNetworkInfo.iShortName.MaxLength())); + else + iNetworkInfo.iShortName.Copy(array[3]);*/ + User::LeaveIfError(NetworkIdL(array[3],iNetworkInfo.iCountryCode, iNetworkInfo.iNetworkId)); + break; + default: + User::Leave(KErrGeneral); + break; + } + } + else + { + iError = KErrGeneral; + } + iNetworkInfo.iStatus=RMobilePhone::ENetworkStatusCurrent; + CleanupStack::PopAndDestroy(); + iError = KErrNone; + } +// --------------------------------------------------------------------------- +// CATNetworkInfo::EventSignal +// other items were commented in a header +// --------------------------------------------------------------------------- +void CATNetworkInfo::EventSignal(TAtEventSource aEventSource, TInt aStatus) + { + if(KErrNone ==aStatus) + { + if(aEventSource == EReadCompletion) + { + aStatus = iError; + } + else + return; + } + iPhoneGlobals.iPhoneStatus.iCurrentNetwork = iNetworkInfo; + if(iGetHomeNwk) + { + iCtsyDispatcherCallback.CallbackPhoneGetHomeNetworkComp(aStatus,iNetworkInfo); + } + else + { + iCtsyDispatcherCallback.CallbackPhoneGetCurrentNetworkInfoComp(aStatus, + iNetworkInfo, + iPhoneGlobals.iPhoneStatus.iLocationArea); + } + CAtCommandBase::Complete(); + iPhoneGlobals.iEventSignalActive = EFalse; + } +// +// End of file + + + + +