--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsref/telephonyrefplugins/atltsy/atcommand/phone/src/initializephone.cpp Tue Jul 06 15:36:38 2010 +0300
@@ -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 <ctsy/ltsy/cctsydispatchercallback.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h>
+#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