diff -r 2473f5e227f9 -r 8b72faa1200f cbsref/telephonyrefplugins/atltsy/integrationtest/src/testltsymodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbsref/telephonyrefplugins/atltsy/integrationtest/src/testltsymodel.cpp Tue Jun 22 11:02:32 2010 +0100 @@ -0,0 +1,276 @@ +// TestTelephonyModel.cpp +// Copyright (c) Symbian Software Ltd 2008. All rights reserved. +// +// Implementation of the Class CTestTelephonyModel + +// CTSY include +#include + +#include "TestLtsyModel.h" +#include "testltsycallshareddata.h" +#include "TestLtsyPktSharedData.h" +#include "TestLtsySmsSharedData.h" +#include "TestLtsyPhoneStoreSharedData.h" + +// the file used to identify if we run on real environment +//_LIT(KCTsyRealEnvFilePath, "z:\\systemtest\\testdata\\telephony\\ctsyrealenv.txt"); +//_LIT(KMmTsyModuleName, "PhoneTsy"); + +/** + * Factory function + * + */ +CTestLtsyModel* CTestLtsyModel::NewL() + { + CTestLtsyModel* self = new (ELeave) CTestLtsyModel(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +/** + * Destructor + * + */ +CTestLtsyModel::~CTestLtsyModel() + { + delete iSharedPhoneEnv; + delete iCallSharedData; + delete iPktSharedData; + delete iSmsSharedData; + delete iPhoneStoreSharedData; + } + +/** + * 2nd Constructor + * + */ +void CTestLtsyModel::ConstructL() + { + iSharedPhoneEnv = CTestLtsySharedEnv::NewL(); + iCallSharedData = CTestLtsyCallSharedData::NewL(); + iPktSharedData = CTestLtsyPktSharedData::NewL(); + iSmsSharedData = CTestLtsySmsSharedData::NewL(); + iPhoneStoreSharedData = CTestLtsyPhoneStoreSharedData::NewL(); + } + +//============================================================================= +// class CTestTelephonyAdaptorEnv +//============================================================================= +/** + * Constructor + * + */ +CTestLtsySharedEnv::CTestLtsySharedEnv() + { + // reset iPhoneInitialized + iPhoneInitialized = EFalse; + iPhoneIndex = -1; + } + +/** + * Destructor + */ +CTestLtsySharedEnv::~CTestLtsySharedEnv() + { + ClosePhone(); + DestroyTelephony(); + } + +/** + * Factory function + * + */ +CTestLtsySharedEnv* CTestLtsySharedEnv::NewL() + { + CTestLtsySharedEnv* self = new (ELeave) CTestLtsySharedEnv(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +/** + * 2nd constructor + */ +void CTestLtsySharedEnv::ConstructL() + { + } + +/** + * Load phone module + * + * @param const TDesC& aModuleName The phone module used by ETel server for loading a specific TSY + */ +void CTestLtsySharedEnv::LoadModuleL(const TDesC& aModuleName) + { + + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + CleanupStack::PopAndDestroy(&fs); + + TInt ret = iSharedTelServer.LoadPhoneModule(aModuleName); + + if (ret != KErrNone) + { + iSharedTelServer.Close(); + User::Leave(ret); + } + } + +/** + * Open the shared phone + * + * @param const TDesC& aModuleName The phone module used by ETel server for loading a specific TSY + */ +void CTestLtsySharedEnv::OpenPhoneL(const TDesC& aModuleName) + { + THandleInfo handleInfo; + iSharedTelServer.HandleInfo(&handleInfo); + if(iPhoneInitialized) + { + // a panic occurs if handleInfo.iNumThreads <= 0 + if(handleInfo.iNumThreads <= 0) + { + iSharedPhone = NULL; + iPhoneInitialized = EFalse; + iSharedTelServer.Close(); + } + else + { + // return if phone has already been opened before + return; + } + } + + // make sure this pointer was NULL + ASSERT(iSharedPhone == NULL); + + // make a copy of module name + iModuleName.Copy(aModuleName); + + // start connect to ETel server + User::LeaveIfError(iSharedTelServer.Connect()); + User::LeaveIfError(iSharedTelServer.ShareAuto()); + + // start load module + LoadModuleL(aModuleName); + + // check if we can find corresponding phone object according to passed TSY module name + if(!FindPhoneIndex()) + { + // the phone index could not be found + User::Leave(KErrNotFound); + } + + // create a new RMobilePhone instance + iSharedPhone = new (ELeave) RMobilePhone(); + RTelServer::TPhoneInfo phoneInfo; + User::LeaveIfError(iSharedTelServer.GetPhoneInfo(iPhoneIndex,phoneInfo)); + + // start openning phone + TInt ret = iSharedPhone->Open(iSharedTelServer,phoneInfo.iName); + if(ret != KErrNone) + { + User::Leave(ret); + } + + iPhoneInitialized = ETrue; + } + +/** + * Find the phone index according to TSY name + * + */ +TBool CTestLtsySharedEnv::FindPhoneIndex() + { + TInt phoneNum = 0; + TInt err = iSharedTelServer.EnumeratePhones(phoneNum); + if(err != KErrNone) + { + return EFalse; + } + + TBool found = EFalse; + for(TInt i = 0; i < phoneNum; i++) + { + RTelServer::TPhoneInfo phoneInfo; + TBuf moduleName; + err = iSharedTelServer.GetTsyName(i,moduleName); + if(err != KErrNone) + { + return EFalse; + } + else + { + if(moduleName.CompareF(iModuleName) == 0) + { + iPhoneIndex = i; + found = ETrue; + break; + } + } + } + + return found; + } + +/** + * Close the shared phone and server + * Client must call this function, if it has called OpenPhoneL(). + * + */ +void CTestLtsySharedEnv::ClosePhone() + { + // close and delete the shared phone + iSharedPhone->Close(); + delete iSharedPhone; + iSharedPhone = NULL; + + // unload the phone module + iSharedTelServer.UnloadPhoneModule(iModuleName); + iSharedTelServer.Close(); + + // reset iPhoneInitialized + iPhoneInitialized = EFalse; + } + +/** + * Create a CTelephony object and related resource. + * + */ +void CTestLtsySharedEnv::CreateTelephonyL() + { + iActiveSchaduler = new (ELeave) CActiveScheduler(); + CActiveScheduler::Install(iActiveSchaduler); + + iTelephony = CTelephony::NewL(); + } + +/** + * Delete CTelephony object related source. + * + */ +void CTestLtsySharedEnv::DestroyTelephony() + { + + delete iActiveSchaduler; + iActiveSchaduler = NULL; + delete iTelephony; + iTelephony = NULL; + + delete iSharedPhone; + iSharedPhone = NULL; + + // reset iPhoneInitialized + iPhoneInitialized = EFalse; + } + +CTelephony* CTestLtsySharedEnv::Telephony() + { + return iTelephony; + } + +// end of file