void CLcfPsyDummy1::GetGenericPositionInfoL(TPositionInfoBase& aPosInfo)
    {
    _LIT(KStreetDescriptor,  "Tieteenkatu 1");
    _LIT(KCityDescriptor,    "Tampere");
    _LIT(KCountryDescriptor, "Finland");

    // The position info object is at least a
    // HPositionGenericInfo
    HPositionGenericInfo* posInfo =
        static_cast<HPositionGenericInfo*>(&aPosInfo);

    // This PSY can deliver street, city and country
    // information. Attach this data if it is requested by
    // the client
    if (posInfo->IsRequestedField(EPositionFieldStreet))
        {
        User::LeaveIfError(posInfo->SetValue(
            EPositionFieldStreet, KStreetDescriptor));
        }
    if (posInfo->IsRequestedField(EPositionFieldCity))
        {
        User::LeaveIfError(posInfo->SetValue(
            EPositionFieldCity, KCityDescriptor));
        }
    if (posInfo->IsRequestedField(EPositionFieldCountry))
        {
        User::LeaveIfError(posInfo->SetValue(
            EPositionFieldCountry, KCountryDescriptor));
        }

    }
// -----------------------------------------------------------------------------
// PosGenericInfoUser::CopyData
// -----------------------------------------------------------------------------
//
template < class T > TInt PosGenericInfoUser::CopyData( 
            const HPositionGenericInfo& aSrc,
            HPositionGenericInfo& aDes,
            TInt aFieldId )
    {
    T data;
    TInt err( KErrNone );
    err = aSrc.GetValue( aFieldId, data );
    if ( err != KErrNone )
        {
        return err;
        }
    return aDes.SetValue( aFieldId, data );
    }
// -----------------------------------------------------------------------------
// PosGenericInfoUser::CopyField
// -----------------------------------------------------------------------------
//
TInt PosGenericInfoUser::CopyField( 
            const HPositionGenericInfo& aSrc,
            HPositionGenericInfo& aDes,
            TInt aFieldId )
    {
    //Get field data type
    TInt dataType;
    TBool isList;
    TInt err( KErrNone );
    err = FieldDataType( aFieldId, dataType, isList );
    if ( err != KErrNone )
        {
        return err;
        }
        
    if ( isList )
        {
        //copy list
        TUint8 count; //length of the list
        err = aSrc.GetValue( aFieldId, count );
        if ( err != KErrNone )
            {
            return err;
            }
        for ( TInt i = 0; i < count; i++ )
            {
            err = CopyDataByType( aSrc, aDes, aFieldId + 1 + i, dataType );
            if ( err != KErrNone )
                {
                return err;
                }
            }
            
        err = aDes.SetValue( aFieldId, count );
        }
    else
        {
        err = CopyDataByType( aSrc, aDes, aFieldId, dataType );
        }
        
    return err;
    }
// ---------------------------------------------------------
// CPosPSYClearPositionDataTest::SetHPositionGenericInfoDataL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosPSYClearPositionDataTest::SetHPositionGenericInfoDataL(
	HPositionGenericInfo& aGenericInfo)
	{
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldCountry, 
											 KCountry));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldCountryCode, 
											 KCountryCode));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldState, 
											 KState));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldCity, 
											 KCity));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldDistrict,
											 KDistrict));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldStreet, 
										     KStreet));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldStreetExtension, 
											 KStreetExtension));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldLocationName, 
											 KLocationName));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldPostalCode, 
											 KPostalCode));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldLocality,	
											 KLocality));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldCrossing1, 
											 KCrossing1));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldCrossing2, 
											 KCrossing2));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldHorizontalSpeed, 
										     KHorizontalSpeed));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldHorizontalSpeedError, 
										     KHorizontalSpeedError ));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldVerticalSpeedError, 
											 KVerticalSpeedError));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldVerticalSpeed, 
											 KVerticalSpeed));		
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldHeading, 
											 KHeading));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldHeadingError, 
											 KHeadingError));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldTrueCourse, 
											 KTrueCourse));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldTrueCourseError, 
											 KTrueCourseError));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldMagneticCourse, 
											 KMagneticCourse));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldBuildingName, 
										     KBuildingName));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldBuildingFloor, 
											 KBuildingFloor));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldBuildingRoom, 
											 KBuildingRoom));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldBuildingZone, 
										     KBuildingZone));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldBuildingTelephone, 
											 KBuildingTelephone));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldNMEASentences, 
										     KNMEASentences));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldNMEASentencesStart, 
										     KNMEASentencesStart));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteNumInView, 
											 KSatelliteNumInView));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteNumUsed, 
											 KSatelliteNumUsed));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteTime, 
											 KSatelliteTime));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteHorizontalDoP, 
										     KSatelliteHorizontalDoP));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteVerticalDoP, 
											 KSatelliteVerticalDoP));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteTimeDoP, 
											 KSatelliteTimeDoP));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatellitePositionDoP, 
											 KSatellitePositionDoP));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteSeaLevelAltitude, 
											 KSatelliteSeaLevelAltitude));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldSatelliteGeoidalSeparation, 
											 KSatelliteGeoidalSeparation));
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldMediaLinks, 
											 KMediaLinks));	
	User::LeaveIfError(aGenericInfo.SetValue(EPositionFieldMediaLinksStart, 
											 KMediaLinksStart));
	}
void CNetworkPsy2::TimerCompleted()
    {
    TPsyConfig& config(iPsyConfigArray[iCurrentIndex]);
    if(config.iType==TPsyConfig::EConfigLRResponse)
        {
        //If no pending LR, then just return
        if(!iRequestStatus)
            {
            return;
            }
            
        TInt err = config.iData.iLRConfig.iErr;
        //complete location request
        if(iPositionInfoBase->PositionClassType() & EPositionInfoClass)
            {
            //Set TPositionInfo
            TPosition pos;
            pos.SetCoordinate(
                config.iData.iLRConfig.iLat,
                config.iData.iLRConfig.iLon,
                config.iData.iLRConfig.iAlt);
                
            TPositionInfo* posInfo = reinterpret_cast<TPositionInfo*>(iPositionInfoBase);
            posInfo->SetPosition(pos);
            }
        if(iPositionInfoBase->PositionClassType() & EPositionGenericInfoClass)
            {
            //Set HGeneric Info
            HPositionGenericInfo* genInfo =
                static_cast<HPositionGenericInfo*>(iPositionInfoBase);
            if(genInfo->IsRequestedField(EPositionFieldNMEASentences))
                {
                genInfo->SetValue(EPositionFieldNMEASentences, TInt8(1));
                HBufC8* nmea = NULL;
                TRAP(err, nmea = HBufC8::NewL(config.iData.iLRConfig.iNmeaDataSize));
                if(KErrNone == err)
                	{
	                TPtr8 nmeaPtr(nmea->Des());
	                nmeaPtr.Fill('H', config.iData.iLRConfig.iNmeaDataSize);
	                err = genInfo->SetValue(EPositionFieldNMEASentences+1, *nmea);
                	}
                delete nmea;
                }
            }
        CompleteRequest(err);
        if(config.iData.iLRConfig.iNumOfResponse>1)
            {
            config.iData.iLRConfig.iNumOfResponse--;
            }
        else if(config.iData.iLRConfig.iNumOfResponse>0)
            {
            iCurrentIndex++;
            }
        else
            {
            //0 means forever response with this
            }
        }
    else //ECinfigModuleStatus
        {
        //Change module status
        TPositionModuleStatus modStatus;
        modStatus.SetDataQualityStatus(config.iData.iStatusConfig.iDataQuality);
        modStatus.SetDeviceStatus(config.iData.iStatusConfig.iDeviceStatus);
        MPositionerStatus* observer = PositionerStatus();
        observer->ReportStatus(modStatus);
        iCurrentIndex++;
        }
    iTimer->Cancel();
    
    if(iCurrentIndex>=iPsyConfigArray.Count())
        {
        //When all items are used, then clean the config items
        iPsyConfigArray.Reset();
        iCurrentIndex = 0;
        }
        
    StartTimerIfNeeded();
    }