sipvoipprovider/src/svppositioningprovider.cpp
branchRCL_3
changeset 21 f742655b05bf
parent 20 65a3ef1d5bd0
child 22 d38647835c2e
equal deleted inserted replaced
20:65a3ef1d5bd0 21:f742655b05bf
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Provides position information
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <dhcppsy.h>
       
    20 
       
    21 #include "svppositioningprovider.h"
       
    22 #include "svppositioningproviderobserver.h"
       
    23 #include "svplogger.h" // For logging
       
    24 
       
    25 
       
    26 // ======== MEMBER FUNCTIONS ========
       
    27 
       
    28 // ---------------------------------------------------------------------------
       
    29 // Default constructor
       
    30 // ---------------------------------------------------------------------------
       
    31 //
       
    32 CSVPPositioningProvider::CSVPPositioningProvider( 
       
    33     TPriority aPriority, MSVPPositioningProviderObserver& aObserver )
       
    34     : CActive( aPriority ), 
       
    35       iObserver( aObserver )
       
    36     {  
       
    37     iPositionServer = RPositionServer();
       
    38     iPositioner = RPositioner();
       
    39     
       
    40     CActiveScheduler::Add( this );
       
    41     }
       
    42     
       
    43 
       
    44 // ---------------------------------------------------------------------------
       
    45 // ConstructL
       
    46 // ---------------------------------------------------------------------------
       
    47 //
       
    48 void CSVPPositioningProvider::ConstructL()
       
    49     {
       
    50     User::LeaveIfError( iPositionServer.Connect() );
       
    51     }
       
    52 
       
    53 
       
    54 // ---------------------------------------------------------------------------
       
    55 // NewL
       
    56 // ---------------------------------------------------------------------------
       
    57 //
       
    58 CSVPPositioningProvider* CSVPPositioningProvider::NewL( 
       
    59     TPriority aPriority, MSVPPositioningProviderObserver& aObserver )
       
    60     {
       
    61     CSVPPositioningProvider* self = 
       
    62         CSVPPositioningProvider::NewLC( aPriority, aObserver );
       
    63     CleanupStack::Pop( self );
       
    64     return self;
       
    65     }
       
    66 
       
    67 
       
    68 // ---------------------------------------------------------------------------
       
    69 // NewLC
       
    70 // ---------------------------------------------------------------------------
       
    71 //
       
    72 CSVPPositioningProvider* CSVPPositioningProvider::NewLC( 
       
    73     TPriority aPriority, MSVPPositioningProviderObserver& aObserver )
       
    74     {
       
    75     SVPDEBUG1("CSVPPositioningProvider::NewLC");
       
    76     
       
    77     CSVPPositioningProvider* self = 
       
    78         new( ELeave ) CSVPPositioningProvider( aPriority, aObserver );
       
    79     CleanupStack::PushL( self );
       
    80     self->ConstructL();
       
    81     return self;
       
    82     }
       
    83 
       
    84 
       
    85 // ---------------------------------------------------------------------------
       
    86 // Destructor
       
    87 // ---------------------------------------------------------------------------
       
    88 //
       
    89 CSVPPositioningProvider::~CSVPPositioningProvider()
       
    90     {
       
    91     SVPDEBUG1("CSVPPositioningProvider::~CSVPPositioningProvider");
       
    92     
       
    93     Cancel();
       
    94     
       
    95     iPositioner.Close();
       
    96     iPositionServer.Close();
       
    97     
       
    98     delete iPositionGenericInfo;
       
    99     }
       
   100 
       
   101 
       
   102 // ---------------------------------------------------------------------------
       
   103 // Opens positioning module
       
   104 // ---------------------------------------------------------------------------
       
   105 //
       
   106 void CSVPPositioningProvider::OpenModuleL( TInt aModuleId )
       
   107     {
       
   108     SVPDEBUG1("CSVPPositioningProvider::OpenModuleL");
       
   109     
       
   110     TPositionModuleId moduleId;
       
   111     moduleId.iUid = aModuleId;
       
   112     User::LeaveIfError( iPositioner.Open( iPositionServer, moduleId ) );
       
   113     }
       
   114 
       
   115 
       
   116 // ---------------------------------------------------------------------------
       
   117 // Closes positioning module
       
   118 // ---------------------------------------------------------------------------
       
   119 //
       
   120 void CSVPPositioningProvider::CloseModule()
       
   121     {
       
   122     SVPDEBUG1("CSVPPositioningProvider::CloseModule");
       
   123     
       
   124     Cancel();
       
   125     
       
   126     iPositioner.Close();
       
   127     }
       
   128 
       
   129 
       
   130 // ---------------------------------------------------------------------------
       
   131 // Requests position information asynchronically for the given SIP profile
       
   132 // ---------------------------------------------------------------------------
       
   133 //
       
   134 void CSVPPositioningProvider::MakePositioningRequestL( 
       
   135     TUint32 aIapId, const TDesC& aApplicationName, TUint32 /*aTimeout*/ )
       
   136     {
       
   137     SVPDEBUG1("CSVPPositioningProvider::MakePositioningRequestL");
       
   138     
       
   139     delete iPositionGenericInfo;
       
   140     iPositionGenericInfo = NULL;
       
   141     iPositionGenericInfo = HPositionGenericInfo::NewL();
       
   142     
       
   143     // Set requested field
       
   144     iPositionGenericInfo->SetRequestedField( EDhcpPsyIAPProfileIdField );
       
   145     iPositionGenericInfo->SetValue( EDhcpPsyIAPProfileIdField, aIapId );
       
   146     
       
   147     // Set requestor 
       
   148     // - ERequestorService: request originates from an application 
       
   149     // - EFormatApplication: request contains the textual name of an 
       
   150     //   application
       
   151     User::LeaveIfError( iPositioner.SetRequestor( 
       
   152         CRequestor::ERequestorService,
       
   153         CRequestor::EFormatApplication,
       
   154         aApplicationName ) );    
       
   155     
       
   156     /* TEMPORARY FIX
       
   157     // Set timeout
       
   158     TPositionUpdateOptions positionUpdateOptions;
       
   159     positionUpdateOptions.SetUpdateTimeOut( 
       
   160         TTimeIntervalMicroSeconds( aTimeout ) );
       
   161     User::LeaveIfError( 
       
   162         iPositioner.SetUpdateOptions( positionUpdateOptions ) );
       
   163     */
       
   164 
       
   165     // Make position request
       
   166     iPositioner.NotifyPositionUpdate( *iPositionGenericInfo, iStatus);
       
   167     SetActive();
       
   168     }
       
   169 
       
   170 
       
   171 // ---------------------------------------------------------------------------
       
   172 // From class CActive.
       
   173 // DoCancel
       
   174 // ---------------------------------------------------------------------------
       
   175 //
       
   176 void CSVPPositioningProvider::DoCancel()
       
   177     {
       
   178     iPositioner.CancelRequest( EPositionerNotifyPositionUpdate );
       
   179     }
       
   180 
       
   181 
       
   182 // ---------------------------------------------------------------------------
       
   183 // From class CActive.
       
   184 // RunL
       
   185 // ---------------------------------------------------------------------------
       
   186 //
       
   187 void CSVPPositioningProvider::RunL()
       
   188     {
       
   189     SVPDEBUG1("CSVPPositioningProvider::RunL");
       
   190     
       
   191     if ( KErrNone != iStatus.Int() )
       
   192         {
       
   193         iObserver.PositioningErrorOccurred( iStatus.Int() );
       
   194         }
       
   195     else if ( iPositionGenericInfo && 
       
   196               iPositionGenericInfo->IsRequestedField( 
       
   197                   EDhcpPsyLocationResultDataField ) 
       
   198             )
       
   199         {
       
   200         TPtrC8 locInfo;
       
   201         iPositionGenericInfo->GetValue( 
       
   202             EDhcpPsyLocationResultDataField, locInfo );
       
   203         iObserver.PositioningRequestComplete( locInfo );
       
   204         }
       
   205     else
       
   206         {
       
   207         iObserver.PositioningErrorOccurred( KErrNotFound );
       
   208         }
       
   209     }