TVerdict CT_LbsX3pAccRefPos::doTestStepL() { // Generic test step used to test the LBS Client Notify position update API. INFO_PRINTF1(_L("CT_LbsX3pAccRefPos::doTestStepL()")); // Stop the test if the preamble failed TESTL(TestStepResult() == EPass); const TInt KTimeOut = 30*1000*1000; const TInt KAdviceSystemStatusTimeout = 40*1000*1000; // >> AdviceSystemStatus(0) TESTL(iProxy->WaitForResponse(KAdviceSystemStatusTimeout) == ENetMsgGetCurrentCapabilitiesResponse); CLbsNetworkProtocolBase::TLbsSystemStatus status; // nothing is placed on cleanupstack for ENetMsgGetCurrentCapabilitiesResponse CleanupStack::PopAndDestroy(iProxy->GetArgsLC(ENetMsgGetCurrentCapabilitiesResponse, &status)); TESTL(status == CLbsNetworkProtocolBase::ESystemStatusNone); //Initiate X3P start // TransmitPosition() _LIT(KThirdParty,"+4407463842101"); const TInt KPriority(6); TLbsTransmitPositionOptions options(TTimeIntervalMicroSeconds(50*1000*1000)); TRequestStatus refPosStatus=KRequestPending; TRequestStatus transPosStatus=KRequestPending; TPositionInfo clientRefPosInfo; TPositionInfo transPosInfo; iTransmitter.SetTransmitOptions(options); iTransmitter.TransmitPosition(KThirdParty, KPriority, refPosStatus, clientRefPosInfo, transPosStatus, transPosInfo); // RequestTransmitLocation() TESTL(iProxy->WaitForResponse(KTimeOut) == ENetMsgRequestTransmitLocation); TBufC16<14> thirdParty(KThirdParty); TPtr16 ptr = thirdParty.Des(); HBufC16* getThirdParty = NULL; TLbsNetSessionId* getSessionId = NULL; TInt getPriority(0); TInt stackCnt = iProxy->GetArgsLC(ENetMsgRequestTransmitLocation, &getSessionId, &getThirdParty, &getPriority); TESTL(ptr.Compare(*getThirdParty)==KErrNone); TESTL(getPriority == KPriority); iSessionId = *getSessionId; //session ID is initialised by LBS CleanupStack::PopAndDestroy(stackCnt);//getSessionID,getThirdParty // ProcessStatusUpdate() const MLbsNetworkProtocolObserver::TLbsNetProtocolService service = MLbsNetworkProtocolObserver::EServiceTransmitThirdParty; iProxy->CallL(ENetMsgProcessStatusUpdate, &service); //End Initiate //Reference Position Notification Start // ProcessLocationUpdate() TPositionInfo refPosInfo; refPosInfo = ArgUtils::ReferencePositionInfo(); iProxy->CallL(ENetMsgProcessLocationUpdate, &iSessionId, &refPosInfo); //Reference Position Notification End //Assistance Data Notification Start // ProcessAssistanceData() TLbsAsistanceDataGroup dataRequestMask = EAssistanceDataReferenceTime; RLbsAssistanceDataBuilderSet assistanceData; ArgUtils::PopulateLC(assistanceData); TInt reason(KErrNone); iProxy->CallL(ENetMsgProcessAssistanceData, &dataRequestMask, &assistanceData, &reason); CleanupStack::PopAndDestroy(1); //assistanceData // Assistance Data Notification End // Network Result Notification Start // ProcessLocationUpdate() //Final Network Position = ref position refPosInfo.SetPositionMode(TPositionModuleInfo::ETechnologyNetwork | TPositionModuleInfo::ETechnologyAssisted); iProxy->CallL(ENetMsgProcessLocationUpdate, &iSessionId, &refPosInfo); // Network Result Notification Stop // Session Complete Start reason = KErrNone; iProxy->CallL(ENetMsgProcessSessionComplete, &iSessionId, &reason); MLbsNetworkProtocolObserver::TLbsNetProtocolServiceMask activeServiceMask = MLbsNetworkProtocolObserver::EServiceNone; iProxy->CallL(ENetMsgProcessStatusUpdate, &activeServiceMask); // Session Complete Stop // Allow session complete to be processed by LBS. TInt delta = 4 * 1000 * 1000; // 4 secs. TESTL(iProxy->WaitForResponse(delta) == ENetMsgTimeoutExpired); // Complete client request. User::WaitForRequest(refPosStatus, transPosStatus); // Verify client ref pos. TESTL(clientRefPosInfo.PositionMode() == TPositionModuleInfo::ETechnologyNetwork); TESTL(refPosStatus == KErrNone); // Verify client final pos. TESTL(transPosInfo.PositionMode() == (TPositionModuleInfo::ETechnologyNetwork | TPositionModuleInfo::ETechnologyAssisted)); TESTL(transPosStatus == KErrNone); return TestStepResult(); }
TVerdict CT_LbsHybridUEBasedX3PGPSFutile::doTestStepL() { // Generic test step used to test the LBS Client Notify position update API. INFO_PRINTF1(_L("CT_LbsHybridUEBasedX3PGPSFutile::doTestStepL()")); // Stop the test if the preamble failed TESTL(TestStepResult() == EPass); const TInt KTimeOut = 30*1000*1000; const TInt KAdviceSystemStatusTimeout = 40*1000*1000; const TInt KSmallTimeOut = 3*1000*1000; // Carryout unique test actions. if (GetIntFromConfig(ConfigSection(), KTestCaseId, iTestCaseId)) { INFO_PRINTF2(_L("Test id %d."), iTestCaseId); } // >> AdviceSystemStatus(0) TESTL(iProxy->WaitForResponse(KAdviceSystemStatusTimeout) == ENetMsgGetCurrentCapabilitiesResponse); CLbsNetworkProtocolBase::TLbsSystemStatus status; CleanupStack::PopAndDestroy(iProxy->GetArgsLC(ENetMsgGetCurrentCapabilitiesResponse, &status)); TESTL(status == CLbsNetworkProtocolBase::ESystemStatusNone); //Initiate X3P start // TransmitPosition() _LIT(KThirdParty,"+4407463842101"); const TInt KPriority= 1; TLbsTransmitPositionOptions options(TTimeIntervalMicroSeconds(50*1000*1000)); TRequestStatus refPosStatus=KRequestPending; TRequestStatus transPosStatus=KRequestPending; TPositionInfo refPosInfo; TPositionInfo transPosInfo; iTransmitter.SetTransmitOptions(options); iTransmitter.TransmitPosition(KThirdParty, KPriority, refPosStatus, refPosInfo, transPosStatus, transPosInfo); // RequestTransmitLocation() TESTL(iProxy->WaitForResponse(KTimeOut) == ENetMsgRequestTransmitLocation); TBufC16<14> thirdParty(KThirdParty); TPtr16 ptr = thirdParty.Des(); HBufC16* getThirdParty = NULL; TLbsNetSessionId* getSessionId = NULL; TInt getPriority(0); TInt cleanupCnt; cleanupCnt = iProxy->GetArgsLC(ENetMsgRequestTransmitLocation, &getSessionId, &getThirdParty, &getPriority); TESTL(ptr.Compare(*getThirdParty)==KErrNone); TESTL(getPriority == KPriority); iSessionId = *getSessionId; //session ID is initialised by LBS CleanupStack::PopAndDestroy(cleanupCnt); // ProcessStatusUpdate() MLbsNetworkProtocolObserver::TLbsNetProtocolService service = MLbsNetworkProtocolObserver::EServiceTransmitThirdParty; iProxy->CallL(ENetMsgProcessStatusUpdate, &service); //End Initiate //Reference Position Notification Start // ProcessLocationUpdate() refPosInfo = ArgUtils::ReferencePositionInfo(); iProxy->CallL(ENetMsgProcessLocationUpdate, &iSessionId, &refPosInfo); //Reference Position Notification End //Assistance Data Notification Start // ProcessAssistanceData() TLbsAsistanceDataGroup dataRequestMask = EAssistanceDataReferenceTime; RLbsAssistanceDataBuilderSet assistanceData; ArgUtils::PopulateLC(assistanceData); TInt reason = KErrNone; iProxy->CallL(ENetMsgProcessAssistanceData, &dataRequestMask, &assistanceData, &reason); CleanupStack::PopAndDestroy(1); //assistanceData // Assistance Data Notification End // Network Location Request Start // ProcessLocationRequest() const TBool emergency(EFalse); TLbsNetPosRequestQuality quality = ArgUtils::QualityAlpha2(); TLbsNetPosRequestMethod method; if (iTestCaseId == 1) { method = ArgUtils::RequestHybridMethod(); } else if (iTestCaseId == 2) { method = ArgUtils::RequestMethod(); } iProxy->CallL(ENetMsgProcessLocationRequest, &iSessionId, &emergency, &service, &quality, &method); // Network Location Request Stop // RequestAssistanceData(0) TESTL(iProxy->WaitForResponse(KSmallTimeOut) == ENetMsgRequestAssistanceData); TLbsAsistanceDataGroup dataGroup; CleanupStack::PopAndDestroy(iProxy->GetArgsLC(ENetMsgRequestAssistanceData, &dataGroup)); TESTL(dataGroup == EAssistanceDataNone); // User expects Reference Position User::WaitForRequest(refPosStatus); TESTL(refPosStatus==KErrNone); // Network expects location request response with KPositionCalculationFutile TESTL(iProxy->WaitForResponse(KAlpha2Timeout) == ENetMsgRespondLocationRequest); getSessionId = NULL; TInt getReason = KErrNone; TPositionSatelliteInfo* getPositionInfo = NULL; cleanupCnt = iProxy->GetArgsLC(ENetMsgRespondLocationRequest, &getSessionId, &getReason, &getPositionInfo); TESTL(getSessionId->SessionNum() == iSessionId.SessionNum()); TESTL(getReason==KPositionCalculationFutile); CleanupStack::PopAndDestroy(cleanupCnt); // Network Result Notification Start // ProcessLocationUpdate() , final network position = ref position refPosInfo.SetPositionMode(TPositionModuleInfo::ETechnologyNetwork | TPositionModuleInfo::ETechnologyAssisted); iProxy->CallL(ENetMsgProcessLocationUpdate, &iSessionId, &refPosInfo); // Network Result Notification Stop // Session Complete Start reason =KErrNone; iProxy->CallL(ENetMsgProcessSessionComplete, &iSessionId, &reason); MLbsNetworkProtocolObserver::TLbsNetProtocolServiceMask activeServiceMask = MLbsNetworkProtocolObserver::EServiceNone; iProxy->CallL(ENetMsgProcessStatusUpdate, &activeServiceMask); // Session Complete Stop // this call back has been changed, the seq diag was incorrect User::WaitForRequest(transPosStatus); TESTL(transPosStatus==KPositionQualityLoss); return TestStepResult(); }
TVerdict CT_LbsHybridUEAssistedX3PAccurateGPS::doTestStepL() { // Generic test step used to test the LBS Client Notify position update API. INFO_PRINTF1(_L("CT_LbsHybridUEAssistedX3PAccurateGPS::doTestStepL()")); // Stop the test if the preamble failed TESTL(TestStepResult() == EPass); const TInt KTimeOut = 30*1000*1000; const TInt KAdviceSystemStatusTimeout = 40*1000*1000; const TInt KSmallTimeOut = 3*1000*1000; // >> AdviceSystemStatus(0) TESTL(iProxy->WaitForResponse(KAdviceSystemStatusTimeout) == ENetMsgGetCurrentCapabilitiesResponse); CLbsNetworkProtocolBase::TLbsSystemStatus status; TInt cleanupCnt; cleanupCnt = iProxy->GetArgsLC(ENetMsgGetCurrentCapabilitiesResponse, &status); TESTL(status == CLbsNetworkProtocolBase::ESystemStatusNone); CleanupStack::PopAndDestroy(cleanupCnt); //Initiate X3P start // TransmitPosition() _LIT(KThirdParty,"+4407463842101"); const TInt KPriority= 6; TLbsTransmitPositionOptions options(TTimeIntervalMicroSeconds(50*1000*1000)); TRequestStatus refPosStatus=KRequestPending; TRequestStatus transPosStatus=KRequestPending; TPositionInfo refPosInfo; TPositionInfo transPosInfo; iTransmitter.SetTransmitOptions(options); iTransmitter.TransmitPosition(KThirdParty, KPriority, refPosStatus, refPosInfo, transPosStatus, transPosInfo); // RequestTransmitLocation() TESTL(iProxy->WaitForResponse(KTimeOut) == ENetMsgRequestTransmitLocation); TBufC16<14> thirdParty(KThirdParty); TPtr16 ptr = thirdParty.Des(); HBufC16* getThirdParty = NULL; TLbsNetSessionId* getSessionId = NULL; TInt getPriority(0); cleanupCnt = iProxy->GetArgsLC(ENetMsgRequestTransmitLocation, &getSessionId, &getThirdParty, &getPriority); TESTL(ptr.Compare(*getThirdParty)==KErrNone); TESTL(getPriority == KPriority); iSessionId = *getSessionId; //session ID is initialised by LBS CleanupStack::PopAndDestroy(cleanupCnt); // ProcessStatusUpdate() MLbsNetworkProtocolObserver::TLbsNetProtocolService service = MLbsNetworkProtocolObserver::EServiceTransmitThirdParty; iProxy->CallL(ENetMsgProcessStatusUpdate, &service); //End Initiate //Reference Position Notification Start // ProcessLocationUpdate() refPosInfo = ArgUtils::ReferencePositionInfo(); iProxy->CallL(ENetMsgProcessLocationUpdate, &iSessionId, &refPosInfo); //Reference Position Notification End //Assistance Data Notification Start // ProcessAssistanceData() TLbsAsistanceDataGroup dataRequestMask = EAssistanceDataReferenceTime; RLbsAssistanceDataBuilderSet assistanceData; ArgUtils::PopulateLC(assistanceData); TInt reason = KErrNone; iProxy->CallL(ENetMsgProcessAssistanceData, &dataRequestMask, &assistanceData, &reason); CleanupStack::PopAndDestroy(1); //assistanceData // Assistance Data Notification End // Network Location Request Start // ProcessLocationRequest() const TBool emergency(EFalse); TLbsNetPosRequestQuality quality = ArgUtils::QualityAlpha2(); TLbsNetPosRequestMethod method = ArgUtils::RequestHybridMethod(); iProxy->CallL(ENetMsgProcessLocationRequest, &iSessionId, &emergency, &service, &quality, &method); // Network Location Request Stop //Start the timer TTime timerStart; timerStart.HomeTime(); // RequestAssistanceData(0) TESTL(iProxy->WaitForResponse(KSmallTimeOut) == ENetMsgRequestAssistanceData); TLbsAsistanceDataGroup dataGroup; cleanupCnt = iProxy->GetArgsLC(ENetMsgRequestAssistanceData, &dataGroup); TESTL(dataGroup == EAssistanceDataNone); CleanupStack::PopAndDestroy(cleanupCnt); // now wait for either to complete - but we will expect only the asynchrous request // waiting for the REF position to complete with KErrNone User::WaitForRequest(refPosStatus, transPosStatus); TESTL(refPosStatus==KErrNone); TESTL(transPosStatus.Int() == KRequestPending); //Find the time elapsed from timer TTimeIntervalMicroSeconds microseconds; TTime timerStop; timerStop.HomeTime(); microseconds = timerStop.MicroSecondsFrom(timerStart); TInt64 timeElapsed = microseconds.Int64(); /*** NRH's Alpha2 timer expires. We enter Hybrid mode.***/ //Test that we do not get response before alpha2 has expired TESTL(iProxy->WaitForResponse(KAlpha2Timeout-timeElapsed-KDelta) == ENetMsgTimeoutExpired); TESTL(iProxy->WaitForResponse(2*KDelta) == ENetMsgRespondLocationRequest); getSessionId = NULL; TInt getReason = KErrNone; TPositionSatelliteInfo* getPositionInfo = NULL; cleanupCnt = iProxy->GetArgsLC(ENetMsgRespondLocationRequest, &getSessionId, &getReason, &getPositionInfo); TESTL(getSessionId->SessionNum() == iSessionId.SessionNum()); TESTL(getReason==KErrNone); CleanupStack::PopAndDestroy(cleanupCnt); // no need for looping, we assume that the next update location from GPS will give accurate fix quality = ArgUtils::Quality(); iProxy->CallL(ENetMsgProcessLocationRequest, &iSessionId, &emergency, &service, &quality, &method); // RequestAssistanceData(0) TESTL(iProxy->WaitForResponse(KSmallTimeOut) == ENetMsgRequestAssistanceData); cleanupCnt = iProxy->GetArgsLC(ENetMsgRequestAssistanceData, &dataGroup); TESTL(dataGroup == EAssistanceDataNone); CleanupStack::PopAndDestroy(cleanupCnt); // GPS positions meets required accuracy. This is sent immediately to protocol module // The ini file should contain accurate gps fix for this test case to work TESTL(iProxy->WaitForResponse(KTTimeout) == ENetMsgRespondLocationRequest); getSessionId = NULL; getReason = KErrNone; getPositionInfo = NULL; cleanupCnt = iProxy->GetArgsLC(ENetMsgRespondLocationRequest, &getSessionId, &getReason, &getPositionInfo); TESTL(getSessionId->SessionNum() == iSessionId.SessionNum()); TESTL(getReason == KErrNone); // Test position is the same as in the ini file data fed to the GPS module // $update,1,2,51.5015,-0.105,50,2,3* TPosition gpsPos; getPositionInfo->GetPosition(gpsPos); TESTL(gpsPos.Latitude()==51.5015 && gpsPos.Longitude()==-0.105 && gpsPos.Altitude()==50 && gpsPos.HorizontalAccuracy()==2 && gpsPos.VerticalAccuracy()==3); CleanupStack::PopAndDestroy(cleanupCnt); // Network Result Notification Start // ProcessLocationUpdate() //Final Network Position is the GPS position TPositionInfo gpsPosInfo; gpsPosInfo.SetPosition(gpsPos); gpsPosInfo.SetUpdateType(EPositionUpdateGeneral); gpsPosInfo.SetPositionMode(TPositionModuleInfo::ETechnologyNetwork | TPositionModuleInfo::ETechnologyAssisted); gpsPosInfo.SetPositionModeReason(EPositionModeReasonNone); iProxy->CallL(ENetMsgProcessLocationUpdate, &iSessionId, &gpsPosInfo); // Network Result Notification Stop // Session Complete Start reason = KErrNone; iProxy->CallL(ENetMsgProcessSessionComplete, &iSessionId, &reason); MLbsNetworkProtocolObserver::TLbsNetProtocolServiceMask activeServiceMask = MLbsNetworkProtocolObserver::EServiceNone; iProxy->CallL(ENetMsgProcessStatusUpdate, &activeServiceMask); // Session Complete Stop // the REF position request has completed, so now, after injecting the FNP and Session Complete // we expect that the other request to complete with KErrNone User::WaitForRequest(transPosStatus); TESTL(transPosStatus==KErrNone); return TestStepResult(); }