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)); } }
void CNetworkPsy2::NotifyPositionUpdate( TPositionInfoBase& aPosInfo, TRequestStatus& aStatus) { iRequestStatus = &aStatus; iPositionInfoBase = &aPosInfo; if(aPosInfo.PositionClassType() & EPositionGenericInfoClass) { //Check if this is confiuration request HPositionGenericInfo* genInfo = static_cast<HPositionGenericInfo*>(&aPosInfo); if(genInfo->IsRequestedField(KIntGpsPsy1ConfigItemsNumber)) { //Config PSY TRAPD(err, ConfigPsyL(*genInfo)); CompleteRequest(err); StartTimerIfNeeded(); return; } } StartTimerIfNeeded(); }
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(); }