// --------------------------------------------------------- // CT_LbsClientPosTp2::StartL // // (other items were commented in a header). // --------------------------------------------------------- // void CT_LbsClientPosTp2::StartL() { SetupPsyL(iUidMultiPsy); //synchronous request ConnectL(); User::LeaveIfError(OpenPositionerByName(iUidMultiPsy)); TPositionInfo info = TPositionInfo(); RequestL(info); CheckPositionInfoL(info); TPositionCourseInfo courseInfo; RequestL(courseInfo); CheckPositionCourseInfoL(courseInfo); TPositionSatelliteInfo satelliteInfo; RequestL(satelliteInfo); CheckPositionSatelliteInfoL(satelliteInfo); HPositionGenericInfo* genericInfo = HPositionGenericInfo::NewLC(); RequestL(*genericInfo); CheckGenericInfoL(*genericInfo); CleanupStack::PopAndDestroy(); //genericInfo ClosePositioner(); Disconnect(); }
// --------------------------------------------------------- // CT_LbsClientPosTp1::StartL // // (other items were commented in a header). // --------------------------------------------------------- // void CT_LbsClientPosTp1::StartL() { ConnectL(); CPosModules* db = CPosModules::OpenL(); CleanupStack::PushL(db); SetupPsyL(iUidMultiPsy); _LIT(KSetupPSY, "TP1: Has Setup Multi PSY"); INFO_PRINTF1(KSetupPSY); //setting priority TPositionModuleInfo moduleInfoHp;//Hp - high prio; TPositionModuleInfo moduleInfoLp;//Lp - low prio; CPosModuleIdList* prioList = db->ModuleIdListLC(); db->GetModuleInfoL(prioList->At(0), moduleInfoHp); CPosModuleUpdate* moduleUpdate = CPosModuleUpdate::NewLC(); moduleUpdate->SetUpdateAvailability(ETrue); if (iUidMultiPsy.iUid == moduleInfoHp.ModuleId().iUid) { // Case when Multi PSY has highest prio: // Ensuring it is enabled _LIT(KMultiHighest, "TP1: Case when Multi PSY has highest prio"); INFO_PRINTF1(KMultiHighest); db->UpdateModuleL((*prioList)[0], *moduleUpdate); } else { // Case when Multi PSY has not highest prio: // _LIT(KMultiNotHighest, "TP1: Case when Multi PSY has NOT highest prio"); INFO_PRINTF1(KMultiNotHighest); db->GetModuleInfoL(iUidMultiPsy, moduleInfoLp); // Ensuring it is enabled db->UpdateModuleL(iUidMultiPsy, *moduleUpdate); TUint hp = db->PriorityL(moduleInfoHp.ModuleId()); TUint lp = db->PriorityL(moduleInfoLp.ModuleId()); // Changing prio of highest prio PSY and Multi PSY. // Setting Multi PSY to highest prio db->SetModulePriorityL(iUidMultiPsy, hp); db->SetModulePriorityL((*prioList)[0], lp); } _LIT(KTestPSY1On, "TP1: Enabling Test PSY 1"); INFO_PRINTF1(KTestPSY1On); db -> UpdateModuleL(iUidTestPsy1, *moduleUpdate); _LIT(KTestPSY2On, "TP1: Enabling Test PSY 2"); INFO_PRINTF1(KTestPSY2On); db -> UpdateModuleL(iUidTestPsy2, *moduleUpdate); CleanupStack::PopAndDestroy(moduleUpdate); CleanupStack::PopAndDestroy(2, db); // db, prioList User::LeaveIfError(OpenPositioner()); // Request data from default psy should be Multi psy _LIT(KService, "service"); TPositionInfo posInfo = TPositionInfo(); TInt err = PerformSyncRequest(KService, &posInfo); if (err != KErrNone) { _LIT(KErrorRequest, "The request was not completed with KErrNone"); LogErrorAndLeaveL(KErrorRequest, err); } if (iUidMultiPsy.iUid != posInfo.ModuleId().iUid) { _LIT(KIncorrectPsyError, "TP1. Position from wrong PSY received"); LogErrorAndLeaveL(KIncorrectPsyError); } HPositionGenericInfo* genericInfo = HPositionGenericInfo::NewLC(); err = PerformSyncRequest(KService, &(*genericInfo)); if (err != KErrNone) { _LIT(KErrorRequest, "The request was not completed with KErrNone"); LogErrorAndLeaveL(KErrorRequest); } if (iUidMultiPsy.iUid != (genericInfo -> ModuleId()).iUid) { _LIT(KIncorrectPsyError, "TP1. Position from wrong PSY received"); LogErrorAndLeaveL(KIncorrectPsyError); } TPositionCourseInfo courseInfo = TPositionCourseInfo(); err = PerformSyncRequest(KService, &courseInfo); if (err != KErrNone) { _LIT(KErrorRequest, "Course info supported by default, but request failed"); LogErrorAndLeaveL(KErrorRequest); } TPositionSatelliteInfo satelliteInfo = TPositionSatelliteInfo(); err = PerformSyncRequest(KService, &satelliteInfo); if (err != KErrNone) { _LIT(KErrorRequest, "Satellite info supported by default, but request failed"); LogErrorAndLeaveL(KErrorRequest); } //Changing the priority and verifiy that it still possilbe //to request updated from a psy if basic position information //is used and that it is not possilbe to request sat or cource //any more. SetupPsyL(iUidTestPsy2); User::After(3000000); // Request data from default psy should be test psy 2 now err = PerformSyncRequest(KService, &posInfo); if (err != KErrNone) { _LIT(KErrorRequest, "The request was not completed with KErrNone"); LogErrorAndLeaveL(KErrorRequest); } if (iUidTestPsy2.iUid != posInfo.ModuleId().iUid) { _LIT(KIncorrectPsyError, "TP1. Position from wrong PSY received"); LogErrorAndLeaveL(KIncorrectPsyError); } err = PerformSyncRequest(KService, &(*genericInfo)); if (err != KErrNone) { _LIT(KErrorRequest, "The request was not completed with KErrNone"); LogErrorAndLeaveL(KErrorRequest); } if (iUidTestPsy2.iUid != (genericInfo -> ModuleId()).iUid) { _LIT(KIncorrectPsyError, "TP1. Position from wrong PSY received"); LogErrorAndLeaveL(KIncorrectPsyError); } err = PerformSyncRequest(KService, &courseInfo); if (err != KErrArgument) { _LIT(KErrorRequest, "Course info not supported by default, KErrArgument not returned"); LogErrorAndLeaveL(KErrorRequest); } err = PerformSyncRequest(KService, &satelliteInfo); if (err != KErrArgument) { _LIT(KErrorRequest, "Satellite info not supported by default, KErrArgument not returned"); LogErrorAndLeaveL(KErrorRequest); } //check that it is possilbe to change the different //type of class info during periodic request and //that the periodic update will fail if the class //type is incorrect. TTimeIntervalMicroSeconds interval = TTimeIntervalMicroSeconds(1000000); TPositionUpdateOptions posOption; posOption.SetUpdateInterval(interval); _LIT(KUpdateErr, "Error when setting update interval, %d"); err = iPositioner.SetUpdateOptions(posOption); AssertTrueL(err == KErrNone, KUpdateErr, err); _LIT(KErrPeriodic, "The periodic request did not return KErrNone, %d"); err = PerformSyncRequest(KService, &posInfo); AssertTrueL(err == KErrNone , KErrPeriodic, err); _LIT(KErrPeriodicArr, "The periodic request did not return KErrArgument, %d"); err = PerformSyncRequest(KService, &satelliteInfo); AssertTrueL(err == KErrArgument , KErrPeriodicArr, err); SetupPsyL(iUidMultiPsy); User::After(3000000); err = PerformSyncRequest(KService, &satelliteInfo); AssertTrueL(err == KErrNone , KErrPeriodic, err); CleanupStack::PopAndDestroy(genericInfo); ClosePositioner(); Disconnect(); }
// --------------------------------------------------------- // CT_LbsClientPosTp178::StartL // // (other items were commented in a header). // --------------------------------------------------------- // void CT_LbsClientPosTp178::StartL() { _LIT(KServiceAccept, "SAAA"); SetupPsyL(iUidTestPsy3); RPositioner positioner; TPositionInfo info = TPositionInfo(); ConnectL(); User::LeaveIfError(positioner.Open(iPosServer,iUidTestPsy3)); CleanupClosePushL(positioner); TInt Err = positioner.SetRequestor(CRequestor::ERequestorService, CRequestor::EFormatApplication, KServiceAccept); TPositionUpdateOptions updateOptionsLong, updateOptionsShort; TTimeIntervalMicroSeconds longInterval(7000000); updateOptionsLong.SetUpdateTimeOut(longInterval); Err = positioner.SetUpdateOptions(updateOptionsLong); TTimeIntervalMicroSeconds shortInterval(2000000); updateOptionsShort.SetUpdateTimeOut(shortInterval); TPositionUpdateOptions theUpdateOptions; Err = positioner.GetUpdateOptions(theUpdateOptions); if (theUpdateOptions.UpdateTimeOut() != updateOptionsLong.UpdateTimeOut() || updateOptionsLong.UpdateTimeOut() != longInterval) { _LIT(KUpdateOptions, "The update option was not set correctly"); LogErrorAndLeaveL(KUpdateOptions); } _LIT(KDelayMsg, "The successfull requests was completed within %d microsecs."); _LIT(KCancelMsg, "The canceled requests was completed within %d microsecs."); TRequestStatus status; for (TInt i = 0; i < 10; i++) // makes 10 test inorder to get some statistic { positioner.SetUpdateOptions(updateOptionsLong); TTime requestStartTime; requestStartTime.UniversalTime(); positioner.NotifyPositionUpdate(info, status); User::WaitForRequest(status); TTime requestStopTime; requestStopTime.UniversalTime(); TTimeIntervalMicroSeconds durationMicro = requestStopTime.MicroSecondsFrom(requestStartTime); TInt duration = durationMicro.Int64(); TBuf<100> timeMsg; timeMsg.Format(KDelayMsg, duration); INFO_PRINTF1(timeMsg); //check error status if (status != KErrNone) { _LIT(KErrPositionRequest, "error code returned from NotifyPositionUpdate, error code = %d"); TBuf<100> buf; buf.Format(KErrPositionRequest, status.Int()); LogErrorAndLeaveL(buf); } TTimeIntervalMicroSeconds shortInterval(2000000); updateOptionsShort.SetUpdateTimeOut(shortInterval); positioner.SetUpdateOptions(updateOptionsShort); requestStartTime.UniversalTime(); positioner.NotifyPositionUpdate(info, status); User::WaitForRequest(status); requestStopTime.UniversalTime(); durationMicro = requestStopTime.MicroSecondsFrom(requestStartTime); duration = durationMicro.Int64(); #ifdef __WINS__ TTimeIntervalMicroSeconds winsFail(100000); durationMicro = TTimeIntervalMicroSeconds(durationMicro.Int64()+winsFail.Int64()); #endif timeMsg.Format(KCancelMsg, duration); INFO_PRINTF1(timeMsg); if (status != KErrTimedOut) { _LIT(KErrPositionRequest, "Request did not returned KErrTimedOut, status code = %d."); TBuf<100> buf; buf.Format(KErrPositionRequest, status.Int()); LogErrorAndLeaveL(buf); } //Check that the request was not aborted before the Interval //Remove this condition if a lot of data is needed in test log. if (durationMicro < shortInterval) { _LIT(KErrInterval, " The request was aborted before the set timed out "); LogErrorAndLeaveL(KErrInterval); } } // end for loop CleanupStack::PopAndDestroy(1); //positioner Disconnect(); // Do timeout test TestTimeoutL(); // Do cancel test TestCancelL(); // ESLI-5QRA7U just check that it is not possible to set a timeout that is less than // the update interval TestOptionL(); }
// --------------------------------------------------------- // CT_LbsClientPosTp178::TestTimeout // // (other items were commented in a header). // --------------------------------------------------------- // void CT_LbsClientPosTp178::TestTimeoutL() { _LIT(KSTART, "TestTimeout()"); _LIT(KEND, "TestTimeout() passed"); _LIT(KTIME, "Request took %d us"); // Setup verification stuff INFO_PRINTF1(KSTART); //TPrivDlgDiagnostics tmpdiag; TTime requestStartTime; TTime requestStopTime; TTimeIntervalMicroSeconds durationMicro; TBuf<100> buf; _LIT(KService, "SAAA"); TPositionUpdateOptions updateOptions; TTimeIntervalMicroSeconds longInterval(7000000); ConnectL(); SetupPsyL(iUidTestPsy3); OpenPositionerByName(iUidTestPsy3); updateOptions.SetUpdateTimeOut(longInterval); // Access protected member (iPositioner) here iPositioner.SetUpdateOptions(updateOptions); _LIT(KONE, "Perform first request, should NOT time out"); INFO_PRINTF1(KONE); requestStartTime.UniversalTime(); //Make one request to verify psy PerformRequestL(KService, CRequestor::ERequestorService, CRequestor::EFormatApplication); CheckRequestResultL(KErrNone); requestStopTime.UniversalTime(); durationMicro = requestStopTime.MicroSecondsFrom(requestStartTime); TInt duration = durationMicro.Int64(); buf.Format(KTIME, duration); INFO_PRINTF1(buf); ClosePositioner(); OpenPositionerByName(iUidTestPsy3); // ECancelButton means that the Automatised class should wait for a cancel call // before returning result updateOptions.SetUpdateTimeOut(longInterval); // Access protected (iPositioner) member here iPositioner.SetUpdateOptions(updateOptions); _LIT(KTWO, "Perform second request, should not time out"); INFO_PRINTF1(KTWO); //Make one request to verify psy TPositionInfo info = TPositionInfo(); requestStartTime.UniversalTime(); TInt err = PerformSyncRequest(KService, &info); requestStopTime.UniversalTime(); if (err != KErrNone) { _LIT(KError, "Wrong result from iStatus, should be KErrNone, was %d"); TBuf<100> buf; buf.Format(KError, err); LogErrorAndLeaveL(buf); } durationMicro = requestStopTime.MicroSecondsFrom(requestStartTime); duration = durationMicro.Int64(); buf.Format(KTIME, duration); INFO_PRINTF1(buf); ClosePositioner(); Disconnect(); INFO_PRINTF1(KEND); }
// // Performes the test by connecting to MLFW // (and makes a number of Location requests if aFullTest is true // void DoTestL(TBool aFullTest, TInt aNumberOfRuns, TInt *aResult) { RPositionServer posServer; TInt errorCode = errorCode = posServer.Connect(); if (errorCode != KErrNone) { *aResult = KErrCouldNotConnect; return; } CleanupClosePushL(posServer); RPositioner positioner; // Full test means requesting position updates if (aFullTest) { TPositionInfo positionInfo = TPositionInfo(); const TInt32 KUidMultiPsy = 0x01010176; TUid uidMultiPsy; uidMultiPsy.iUid = KUidMultiPsy; errorCode = positioner.Open(posServer, uidMultiPsy); if (errorCode != KErrNone) { *aResult = errorCode; return; } CleanupClosePushL(positioner); _LIT(KService ,"Service"); errorCode = positioner.SetRequestor(CRequestor::ERequestorService, CRequestor::EFormatApplication, KService); if (errorCode != KErrNone) { *aResult = 1001; return; } TRequestStatus status; TLocality loca(TCoordinate(0,0,0),0); TPosition pos(loca, TTime(0)); for (TInt i = 0; i < aNumberOfRuns; i++) { positionInfo.SetPosition(pos); positioner.NotifyPositionUpdate(positionInfo, status); User::WaitForRequest(status); TInt err = status.Int(); if (err != KErrNone) { *aResult = err; } TPosition result; positionInfo.GetPosition(result); //sanity check if (result.Latitude() == pos.Latitude() || result.Longitude() == pos.Longitude() || result.Altitude() == pos.Altitude()) { //_LIT(KErrorPositon, "ERROR:: The postion was not updated"); errorCode = 1005; } } positioner.Close(); CleanupStack::PopAndDestroy(&positioner); } posServer.Close(); CleanupStack::PopAndDestroy(&posServer); }
/** * Performes the test by connecting to MLFW and makes 50 Location request */ TInt DoTestL() { TBuf<40> traceFile = GenerateFileNameForTraceL(); RFs fileserver; RFile file; User::LeaveIfError(fileserver.Connect()); CleanupClosePushL(fileserver); User::LeaveIfError(file.Open(fileserver, traceFile, EFileWrite)); CleanupClosePushL(file); _LIT(KClientStarted, "Client Started"); TraceL(KClientStarted, file); const TInt32 KUidMultiPsy = 0x01010176; TUid uidMultiPsy; uidMultiPsy.iUid = KUidMultiPsy; SetupPsyL(uidMultiPsy); _LIT(KMultiPsySetup, "MultiPsy set up"); TraceL(KMultiPsySetup, file); TInt numberOfRuns = 50; RPositionServer posServer; CleanupClosePushL(posServer); RPositioner positioner; CleanupClosePushL(positioner); TPositionInfo positionInfo = TPositionInfo(); _LIT(KConnectErr, "ERROR: Error when connecing to EPos server, %d"); TInt err = posServer.Connect(); AssertTrueL(err == KErrNone, KConnectErr, err, file); _LIT(KOpenErr, "ERROR: Error when opening positioner, %d"); err = positioner.Open(posServer, uidMultiPsy); AssertTrueL(err == KErrNone, KOpenErr, err, file); _LIT(KService ,"Service"); err = positioner.SetRequestor(CRequestor::ERequestorService, CRequestor::EFormatApplication, KService); _LIT(KRequestor, "ERROR: Not possible to set requestor"); AssertTrueL(err == KErrNone, KRequestor, err, file); TTime now, startTime; TTimeIntervalMicroSeconds requestTime; TRequestStatus status; TInt64 reqTime; TCoordinate corr(0,0,0); TLocality loca(corr,0); TPosition pos(loca, TTime(0)); TBool success = ETrue; _LIT(KStartingRequests, "Starting requests"); TraceL(KStartingRequests, file); for (TInt i = 0; i < numberOfRuns; i++) { startTime.UniversalTime(); positionInfo.SetPosition(pos); positioner.NotifyPositionUpdate(positionInfo, status); User::WaitForRequest(status); err = status.Int(); if (err != KErrNone) { success=EFalse; } now.UniversalTime(); requestTime = now.MicroSecondsFrom(startTime); _LIT(KError, "Request time, %d µs. Error code from Notify = %d"); TBuf<100> buf; reqTime = requestTime.Int64(); buf.Format(KError, reqTime, err); TraceL(buf, file); TPosition result; positionInfo.GetPosition(result); // Sanity check if (result.Latitude() == pos.Latitude() || result.Longitude() == pos.Longitude() || result.Altitude() == pos.Altitude()) { success = EFalse; _LIT(KErrorPositon, "ERROR:: The postion was not updated"); TraceL(KErrorPositon, file); } } CleanupStack::PopAndDestroy(&positioner); CleanupStack::PopAndDestroy(&posServer); if (success) { _LIT(KOk, "SUCCESS"); TraceL(KOk, file); } else { _LIT(KErr, "FAILED"); TraceL(KErr, file); } CleanupStack::PopAndDestroy(&file); CleanupStack::PopAndDestroy(&fileserver); return (success) ? 0 : 1; }