// -----------------------------------------------------------------------------
// PosGenericInfoUser::CopyHGenericInfo
// -----------------------------------------------------------------------------
//
TInt PosGenericInfoUser::CopyHGenericInfo( 
            const HPositionGenericInfo& aSrc,
            HPositionGenericInfo& aDes )
    {
    //TRACESTRING( "PosGenericInfoUser::CopyHGenericInfo start" )
    //TRACEHEX2( reinterpret_cast < const TUint8* >( &aSrc ), aSrc.PositionClassSize() )
    //Set position
    TPosition position;
    aSrc.GetPosition( position );
    aDes.SetPosition( position );
        
    TInt err( KErrNone );
    TInt fieldId = aDes.FirstRequestedFieldId();
    while ( fieldId != EPositionFieldNone )
        {
        //TRACESTRING2( "FieldId=%d", fieldId )

        if ( aSrc.IsFieldAvailable( fieldId ) )
            {
            err = CopyField( aSrc, aDes, fieldId );
            if ( err != KErrNone )
                {
                return err;
                }
            }
        fieldId = aDes.NextRequestedFieldId( fieldId );
        }
    //TRACESTRING( "PosGenericInfoUser::CopyHGenericInfo end" )
    return err;
    }
// ---------------------------------------------------------
// CPosPSYClearPositionDataTest::HandlePositionCompleteL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosPSYClearPositionDataTest::HandlePositionCompleteL(
	TInt aCompleteCode,
	TTimeIntervalMicroSeconds /*aRequestTime*/)
	{
	if (iTestStatus == KErrCancel)
		{
		CompleteClearPositionDataTest(iTestStatus);
		return;
		}

	if (iCurrentTestClass == 0 || iCurrentTestClass == EPositionInfoClass)
		{
		_LIT(KTitleTestInfo, "==== Testing clearing of TPositionInfo ====");
		AddTestResultL(KTitleTestInfo, EDisplayMessage);
		if (iPSYInfo.ClassesSupported() & EPositionInfoClass && 
			!(iClassesTested & EPositionInfoClass))
			{
			iCurrentTestClass = EPositionInfoClass;
			
			if (iRequestNumber == 0) 
				{
				iClassesTested |= EPositionInfoClass;
				PerformTestL(aCompleteCode);
				}
			}
		else
			{
			_LIT(KTestInfo, "Clearing of position data tests not performed with TPositionInfo because PSY didn't support it.");
			AddTestResultL(KTestInfo, EInfoMessage);
			}
		}

	if (iCurrentTestClass == 0 || iCurrentTestClass == EPositionGenericInfoClass)
		{
		if (iRequestNumber == 0)
			{
			_LIT(KTestInfoGeneric, "==== Testing clearing of HPositionGenericInfo ====");
			AddTestResultL(KTestInfoGeneric, EDisplayMessage);
			}
		if (iPSYInfo.ClassesSupported() & EPositionGenericInfoClass && 
			!(iClassesTested & EPositionGenericInfoClass))
			{
			iCurrentTestClass = EPositionGenericInfoClass;
			
			if (iRequestNumber == 1) 
				{
				iClassesTested |= EPositionGenericInfoClass;
				PerformTestL(aCompleteCode);	
				}
			else
				{
				HPositionGenericInfo* genInfo = HPositionGenericInfo::NewLC(KPositionGenericInfoDefaultBufferSize * 2, 
													  KPositionGenericInfoDefaultMaxFields * 2);

				SetHPositionGenericInfoDataL(*genInfo);
				CleanupStack::Pop(genInfo);
				genInfo->SetPosition(iPosition);
				iPosInfo = static_cast<TPositionInfo*> (genInfo);
				iRequester->MakeRequest(*iPosInfo);
				iRequestNumber++;
				}
			}
		else
			{
			_LIT(KTestInfo, "Clearing of position data tests not performed with HPositionGenericInfo because PSY didn't support it.");
			AddTestResultL(KTestInfo, EInfoMessage);
			}
		}
    
	if (iCurrentTestClass == 0 || iCurrentTestClass == EPositionCourseInfoClass)
		{
		if (iRequestNumber == 0)
			{
			_LIT(KTestInfo, "==== Testing clearing of TPositionCourseInfo ====");
			AddTestResultL(KTestInfo, EDisplayMessage);
			}
		if (iPSYInfo.ClassesSupported() & EPositionCourseInfoClass && 
			!(iClassesTested & EPositionCourseInfoClass))
			{
			iCurrentTestClass = EPositionCourseInfoClass;
			if (iRequestNumber == 1) 
				{
				iClassesTested |= EPositionCourseInfoClass;
				PerformTestL(aCompleteCode);
				}
			else
				{
				TPositionCourseInfo* courseInfo = new (ELeave) TPositionCourseInfo;
				courseInfo->SetCourse(iCourse);
				courseInfo->SetPosition(iPosition);
				iPosInfo = static_cast<TPositionInfo*> (courseInfo);
				iRequester->MakeRequest(*iPosInfo);
				iRequestNumber++;
				}
			}
		else
			{
			_LIT(KTestInfo, "Clearing of position data tests not performed with TPositionCourseInfo because PSY didn't support it.");
			AddTestResultL(KTestInfo, EInfoMessage);
			}
		}

	if (iCurrentTestClass == 0 || iCurrentTestClass == EPositionSatelliteInfoClass)
		{
		if (iRequestNumber == 0)
			{
			_LIT(KTestInfo, "==== Testing clearing of TPositionSatelliteInfo ====");
			AddTestResultL(KTestInfo, EDisplayMessage);
			}
		if (iPSYInfo.ClassesSupported() & EPositionSatelliteInfoClass &&
			!(iClassesTested & EPositionSatelliteInfoClass))
			{
			iCurrentTestClass = EPositionSatelliteInfoClass;
			if (iRequestNumber == 1)
				{
				iClassesTested |= EPositionSatelliteInfoClass;
				PerformTestL(aCompleteCode);
				}
			else
				{
				TPositionSatelliteInfo* satInfo = new (ELeave) TPositionSatelliteInfo;
				
				satInfo->SetSatelliteTime(KSatelliteTime);
				satInfo->SetHorizontalDoP(KSatelliteHorizontalDoP);
				satInfo->SetVerticalDoP(KSatelliteVerticalDoP);
				satInfo->SetTimeDoP(KSatelliteTimeDoP);

				for (TInt  i = 0; i < KSatelliteNumInView; i++)
					{
					TSatelliteData satellite;
					satellite.SetSatelliteId(KSatelliteId+i);
					satellite.SetAzimuth(KAzimuth);
					satellite.SetElevation(KElevation);
					satellite.SetIsUsed(KIsUsed);
					satellite.SetSignalStrength(KSignalStrength);
	
					satInfo->AppendSatelliteData(satellite);
					}
				
				satInfo->SetCourse(iCourse);
				satInfo->SetPosition(iPosition);
				iPosInfo = static_cast<TPositionInfo*> (satInfo);
				iRequester->MakeRequest(*iPosInfo);
				iRequestNumber++;
				}
			}
		else
			{
			_LIT(KTestInfo, "Clearing of position data tests not performed with TPositionSatelliteInfo because PSY didn't support it.");
			AddTestResultL(KTestInfo, EInfoMessage);
			}
		}
	}