diff -r 3553901f7fa8 -r 4047d69ee0e4 telephonyserverplugins/attestltsy/atcommand/phone/src/initializephone.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/attestltsy/atcommand/phone/src/initializephone.cpp Tue Feb 09 12:31:43 2010 +0000 @@ -0,0 +1,427 @@ +// 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: +// CInitializePhone + +#include +#include +#include "initializephone.h" +#include "mslogger.h" +#include "atgetmodemstatus.h" +#include "atgetnetworkregistrationstatus.h" +#include "atgetsimstatusready.h" +#include "getcurrentnetworkinfo.h" +#include "atgetnetworkinfo.h" +#include "atgetsignalstrength.h" +#include "atgetbatteryinfo.h" +#include "athelpercommand.h" +#include "notifybatteryandsignal.h" +#include "commengine.h" +#include "atnetworkregstatuschange.h" + +_LIT8(KATSMSSetting1, "AT+CMGF=0\r"); +_LIT8(KATSMSSetting2, "AT+CNMI=2,2\r"); +_LIT8(KATNwkRegistration, "AT+CREG=1\r"); +_LIT8(KATGprsNwkRegistration, "AT+CGREG=1\r"); +_LIT8(KATUnsolicitedWind, "AT+WIND=16383\r"); +_LIT8(KATSetTDRSingal, "AT&D1\r"); +// Class CInitializePhone +// --------------------------------------------------------------------------- +// CInitializePhone::NewL +// other items were commented in a header +// --------------------------------------------------------------------------- +CInitializePhone* CInitializePhone::NewL(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback, + CATNetworkRegStatusChange& aNtwkRegStatusChange, + CNotifyBatteryAndSignal& aNotifyBatteryAndSignal) + { + CInitializePhone* self = new(ELeave) CInitializePhone(aGloblePhone, + aCtsyDispatcherCallback, + aNtwkRegStatusChange, + aNotifyBatteryAndSignal); + CleanupStack::PushL(self ); + self->ConstructL(); + CleanupStack::Pop(self); + return self ; + } + +// --------------------------------------------------------------------------- +// CInitializePhone::CInitializePhone +// other items were commented in a header +// --------------------------------------------------------------------------- +CInitializePhone::CInitializePhone(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback, + CATNetworkRegStatusChange& aNtwkRegStatusChange, + CNotifyBatteryAndSignal& aNotifyBatteryAndSignal) + :CATCommandControlBase(aGloblePhone,aCtsyDispatcherCallback), + iNtwkRegStatusChange(aNtwkRegStatusChange), + iNotifyBatteryAndSignal(aNotifyBatteryAndSignal) + { + } + +// --------------------------------------------------------------------------- +// CInitializePhone::ConstructL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::ConstructL() + { + iATGetCurNetworkInfo = CGetCurrentNetworkInfo::NewL(iPhoneGlobals,iCtsyDispatcherCallback); + iATGetCurNetworkInfo->SetIpcRequestCompleteObserver(this); + + iATHelperCommand = CATHelperCommand::NewL(iPhoneGlobals,iCtsyDispatcherCallback); + + iATGetModemStatus = CATGetModemStatus::NewL(iPhoneGlobals,iCtsyDispatcherCallback); + + iATSIMCard = CATSIMCard::NewL(iPhoneGlobals,iCtsyDispatcherCallback); + + iNetworkRegStatus = CATNetworkRegistration::NewL(iPhoneGlobals,iCtsyDispatcherCallback); + iNetworkRegStatus->SetIpcRequestCompleteObserver(this); + iNetworkRegStatus->SetIpcId(MLtsyDispatchPhoneGetNetworkRegistrationStatus::KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId); + + iATGetSignal = CATGetSignal::NewL(iPhoneGlobals,iCtsyDispatcherCallback); + + iATGetBattery = CATGetBattery::NewL(iPhoneGlobals,iCtsyDispatcherCallback); + + iPendingRequestList.Reset(); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::~CInitializePhone +// other items were commented in a header +// --------------------------------------------------------------------------- +CInitializePhone::~CInitializePhone() + { + delete iATGetModemStatus; + iATGetModemStatus = NULL; + + delete iNetworkRegStatus; + iNetworkRegStatus = NULL; + + delete iATSIMCard; + iATSIMCard = NULL; + + delete iATGetCurNetworkInfo; + + delete iATGetSignal; + iATGetSignal = NULL; + + delete iATGetBattery; + iATGetBattery = NULL; + + delete iATHelperCommand; + iATHelperCommand = NULL; + + iPendingRequestList.Close(); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::AtCommandExecuteComplete +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::AtCommandExecuteComplete(TAtEventSource aEventSource, TInt aStatus) + { + // we are not going to handle the event of EWriteCompletion if no error was returned + if((aEventSource == EWriteCompletion)&&(KErrNone == aStatus)) + { + return; + } + + TInt err = aStatus; + switch(iATType) + { + case ELtsyAT_Phone_ModemStatus: + if(aStatus == KErrNone) + { + err = iATGetModemStatus->GetErrorValue(); + } + + ModemStatusComplete(err); + CompleteATCommand(iATGetModemStatus); + break; + + case ELtsyAT_Phone_NwkRegStatus: + if(KErrNone == aStatus) + { + err = iNetworkRegStatus->GetErrorValue(); + } + iCtsyDispatcherCallback.CallbackPhoneGetNetworkRegistrationStatusComp(err, + iPhoneGlobals.iPhoneStatus.iRegistrationStatus); + CompleteATCommand(iNetworkRegStatus); + break; + + case ELtsyAT_Phone_SimCardStatus: + if(KErrNone == aStatus) + { + err = iATSIMCard->GetErrorValue(); + } + iCtsyDispatcherCallback.CallbackPhoneBootNotifySimStatusReadyComp(err); + CompleteATCommand(iATSIMCard); + break; + + case ELtsyAT_Phone_GetSignal: + if(KErrNone == aStatus) + { + err = iATGetSignal->GetErrorValue(); + } + GetSignalComplete(err); + CompleteATCommand(iATGetSignal); + break; + + case ELtsyAT_Phone_GetBattery: + if(KErrNone == aStatus) + { + err = iATGetBattery->GetErrorValue(); + } + GetBatteryComplete(err); + CompleteATCommand(iATGetBattery); + break; + + case ELtsyAT_Phone_SMSSetting1: + ExecuteNextATHelpCommand(KATSMSSetting2,ELtsyAT_Phone_SMSSetting2); + break; + + case ELtsyAT_Phone_SMSSetting2: + ExecuteNextATHelpCommand(KATNwkRegistration,ELtsyAT_Phone_RegistNwk); + break; + case ELtsyAT_Phone_RegistNwk: + ExecuteNextATHelpCommand(KATGprsNwkRegistration,ELtsyAT_Phone_GPRSRegNwk); + break; + + case ELtsyAT_Phone_GPRSRegNwk: + ExecuteNextATHelpCommand(KATSetTDRSingal,ELtsyAT_Phone_SetTDRSingal); + break; + + case ELtsyAT_Phone_SetTDRSingal: + ExecuteNextATHelpCommand(KATUnsolicitedWind,ELtsyAT_Phone_SetWind); + break; + + case ELtsyAT_Phone_SetWind: + iPhoneGlobals.iEventSignalActive = EFalse; + if(iPhoneGlobals.iPhoneStatus.iInitStatus == EPhoneInitialising) + { + iPhoneGlobals.iPhoneStatus.iInitStatus = EPhoneInitialised; + } + CompleteATCommand(iATHelperCommand); + break; + + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CInitializePhone::StartRequestL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::StartRequest() + { + StartATCommand(iATGetModemStatus); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::ExecuteNextRequestL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::ExecutePendingRequest() + { + if(iPendingRequestList.Count() > 0 && !iIsPendingRequestStillRunning) + { + // Mark if the next pending request should be run immediately. + // There is a case: If we have alreay known the passed-back results for a certain API, so when such API passed by, + // what is going to to is to complete this IPC request immediately synchronously. + TBool nextPendingReqShouldBeExecutedImmediatley = EFalse; + + // get the IPC number + TInt ipc = iPendingRequestList[0]; + + // remove this request from the pending request list + iPendingRequestList.Remove(0); + + switch(ipc) + { + case MLtsyDispatchPhoneBootNotifySimStatusReady::KLtsyDispatchPhoneBootNotifySimStatusReadyApiId: + StartATCommand(iATSIMCard); + break; + + case MLtsyDispatchPhoneGetNetworkRegistrationStatus::KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId: + iNtwkRegStatusChange.Disable(); + StartATCommand(iNetworkRegStatus); + break; + + case MLtsyDispatchPhoneGetCurrentNetworkInfo::KLtsyDispatchPhoneGetCurrentNetworkInfoApiId: + iATGetCurNetworkInfo->StartRequest(); + break; + + case MLtsyDispatchPhoneGetNetworkMode::KLtsyDispatchPhoneGetNetworkModeApiId: + iCtsyDispatcherCallback.CallbackPhoneGetNetworkModeComp(0,RMobilePhone::ENetworkModeGsm); + nextPendingReqShouldBeExecutedImmediatley = ETrue; + break; + + case MLtsyDispatchPhoneGetNitzInfo::KLtsyDispatchPhoneGetNitzInfoApiId: + iCtsyDispatcherCallback.CallbackPhoneGetNitzInfoComp(0,iPhoneGlobals.iPhoneStatus.iMobilePhoneNITZ); + nextPendingReqShouldBeExecutedImmediatley = ETrue; + break; + + case MLtsyDispatchPhoneGetSignalStrength::KLtsyDispatchPhoneGetSignalStrengthApiId: + StartATCommand(iATGetSignal); + break; + + case MLtsyDispatchPhoneGetBatteryInfo::KLtsyDispatchPhoneGetBatteryInfoApiId: + StartATCommand(iATGetBattery); + break; + + case MLtsyDispatchPhoneGetHomeNetwork::KLtsyDispatchPhoneGetHomeNetworkApiId: + iCtsyDispatcherCallback.CallbackPhoneGetHomeNetworkComp(0,iNetworkInfo); + nextPendingReqShouldBeExecutedImmediatley = ETrue; + break; + + case MLtsyDispatchPhoneSimRefreshRegister::KLtsyDispatchPhoneSimRefreshRegisterApiId: + iCtsyDispatcherCallback.CallbackPhoneSimRefreshRegisterComp(0); + iATHelperCommand->SetAtCommandObserver(this); + ExecuteNextATHelpCommand(KATSMSSetting1,ELtsyAT_Phone_SMSSetting1); + break; + + default: + break; + } + + // if the request was complete, we need to call ExecutePendingRequest() to execute next pending request again + if(nextPendingReqShouldBeExecutedImmediatley) + { + ExecutePendingRequest(); + } + } + } + +// --------------------------------------------------------------------------- +// CInitializePhone::NotifyIpcRequestComplete +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::NotifyIpcRequestComplete(TInt aIpcId) + { + if(aIpcId == MLtsyDispatchPhoneGetCurrentNetworkInfo::KLtsyDispatchPhoneGetCurrentNetworkInfoApiId) + { + NetworkInfoComplete(); + } + else if(aIpcId == MLtsyDispatchPhoneGetNetworkRegistrationStatus::KLtsyDispatchPhoneGetNetworkRegistrationStatusApiId) + { + iNtwkRegStatusChange.Enable(); + } + } + +// --------------------------------------------------------------------------- +// CInitializePhone::ExecuteNextATHelpCommand +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::ExecuteNextATHelpCommand(const TDesC8& aATString,TLtsyATCommandType aATType) + { + iATHelperCommand->Complete(); + iATHelperCommand->SetAtCommandString(aATString); + iATType = aATType; + iATHelperCommand->StartRequest(); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::StartATCommand +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::StartATCommand(CAtCommandBase* aAtCommand) + { + iIsPendingRequestStillRunning = ETrue; + aAtCommand->SetAtCommandObserver(this); + iATType = aAtCommand->AtType(); + aAtCommand->StartRequest(); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::CompleteATCommand +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::CompleteATCommand(CAtCommandBase* aAtCommand) + { + iIsPendingRequestStillRunning = EFalse; + aAtCommand->RemoveAtCommandObserver(); + aAtCommand->Complete(); + ExecutePendingRequest(); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::ModemStatusComplete +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::ModemStatusComplete(TInt aError) + { + if(KErrNone == aError) + { + iCtsyDispatcherCallback.CallbackPhoneBootNotifyModemStatusReadyComp(aError, + ERfsStateInfoNormal); + } + else + { + User::After(5000000); + iCtsyDispatcherCallback.CallbackPhoneBootNotifyModemStatusReadyComp(aError, + ERfsStateInfoNormal); + } + } + +// --------------------------------------------------------------------------- +// CInitializePhone::NetworkInfoComplete +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::NetworkInfoComplete() + { + ExecutePendingRequest(); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::GetSignalComplete +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::GetSignalComplete(TInt aError) + { + if(KErrNone == aError) + { + iSignalInfo = iATGetSignal->getSignalInfo(); + iPhoneGlobals.iPhoneStatus.iSignalInfo = iSignalInfo; + } + iCtsyDispatcherCallback.CallbackPhoneGetSignalStrengthComp(aError, + iSignalInfo.iSignalStrength, + iSignalInfo.iBar); + } +// --------------------------------------------------------------------------- +// CInitializePhone::GetBatteryComplete +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::GetBatteryComplete(TInt aError) + { + if(KErrNone == aError) + { + iBatteryInfo = iATGetBattery->GetBatteryinfo(); + iPhoneGlobals.iPhoneStatus.iBatteryInfo = iBatteryInfo; + iPhoneGlobals.iPhoneStatus.iRfStateInfo = iATGetBattery->GetRfStateInfo(); + } + iCtsyDispatcherCallback.CallbackPhoneGetBatteryInfoComp(aError,iBatteryInfo); + } + +// --------------------------------------------------------------------------- +// CInitializePhone::GetBatteryComplete +// other items were commented in a header +// --------------------------------------------------------------------------- +void CInitializePhone::AppendIpcRequestToPendingListL(TInt aIpc) + { + iPendingRequestList.AppendL(aIpc); + } +// +// End of file