diff -r 43e37759235e -r 51a74ef9ed63 Symbian3/SDK/Source/GUID-A4B47A7A-17EB-570C-AD88-6756B34AF634.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/SDK/Source/GUID-A4B47A7A-17EB-570C-AD88-6756B34AF634.dita Wed Mar 31 11:11:55 2010 +0100 @@ -0,0 +1,137 @@ + + + + + +How +to Use Positioning Module InformationThis document describes how a client application uses the API to +get information about the available Positioning Modules. +
Purpose

This section describes how a client application +gets Positioning Module information using the Location Acquisition API and +how this information can be used in a request for location information.

+
Required background

Positioning +Modules describes module concepts.

+
How to get information about all Positioning Modules

Client +applications use the RPositionServer class to get information +about the Positioning Modules available to the Location Server. Applications +may want this information in order to choose a particular Positioning Module +to use for location information requests.

The following code is a +simple example of how a client application can get Positioning Module information. +The client specifies use of assisted GPS and accuracy better than 10 metres.

#include <lbs.h> +#include <LbsErrors.h> + +RPositionServer server; + +TUint numModules; +TPositionModuleId modId; +TPositionModuleInfo modInfo; +TPositionModuleStatus modStatus; + +TBool foundModule = EFalse; + + +// 1. Create a session with the Location Server +User::LeaveIfError(server.Connect()); +CleanupClosePushL(server); + +// 2. Get the number of modules installed +User::LeaveIfError(server.GetNumModules(numModules)); + +// 3. Iterate over the modules to get information about each module +// 4. Get the availability of a module +// 5. Get information about the module technology, quality etc. + +for (TUint I=0 ; I < numModules ; I++) + { + User::LeaveIfError(server.GetModuleInfoByIndex(I, modInfo)); + + /* Check module technology type and availability + In this example - does the module support assisted capability + and is the module available? */ + + if ( modInfo.IsAvailable() && (modInfo.TechnologyType() == ETechnologyAssisted) ) + { + + /* Check module capabilities + In this example does the module supply speed information? */ + + TCapabilities caps = modInfo.Capabilities(); + if (caps & ECapabilitySpeed) + { + // Check module position quality + TPositionQuality quality; + modInfo.GetPositionQuality(quality); + + // In this example, check for horizontal accuracy better than 10 metres + if ( !quality.HorizontalAccuracy().IsNaN() && quality.HorizontalAccuracy() < 10 ) + { + // This module has all the required characteristics! + modId = modInfo.ModuleId(); + foundModule = ETrue; + break; // stop searching + } + } + } + } + +if (foundModule) + { + // Can use the module to get location information + ... + } +else + { + // No module meets these requirements. Look for another? + ... + } + +// 6. Close the server session +CleanupStack::PopAndDestroy(&server); + +

The following sections describe the steps to get Positioning +Module information:

1. Create a session with the Location Server

A client application +creates a session with the Location Server from which Positioning Module information +is obtained. Note that if a server session has been created already (for example +to get location information) then the application must use it. If the application +attempts to open a second session with the server a panic will occur.

2. Get the number of Positioning Modules installed

The number +of installed Positioning Modules is known to the Location Server and is available +to client applications by calling RPositionServer::GetNumModules().

3. Iterate over the Positioning Modules to get information about each +one

Once a client application knows the number of Positioning +Modules, it can easily iterate over them to get information for each one by +calling RPositionServer::GetModuleInfoByIndex().

4. Get the availability of a Positioning Module

TPositionModuleInfo::IsAvailable() returns +the availability of a Positioning Module. If this method returns EFalse then +the Positioning Module cannot be used. It may have been taken offline or there +may be a device hardware problem. The availability will not change unless +there is some kind of user intervention, such as bringing the unavailable +Positioning Module back online in a control panel.

Note

A +Positioning Module also has a status that can change over time. Module status +provides more detailed information about a Positioning Module's state than +a simple availability flag. Module status information is held in a TPositionModuleStatus object. +A Positioning Module's status at a point in time is discovered by calling RPositionServer::GetModuleStatus().

5. Get information about the Positioning Module technology, capabilities +and position quality

TPositionModuleInfo::TechnologyType() returns +information about the type of technology used by the Positioning Module.

TPositionModuleInfo::Capabilities() returns +a Positioning Module's capabilities as a bit mask.

TPositionModuleInfo::GetPositionQuality() returns +a TPositionQuality object that describes the quality of +position that the Positioning Module can provide.

6. Close the server session

If the server session is not +needed for any further processing then the application must close it.

+
How to get information about a specific Positioning + Module

A client application calls RPositionServer::GetModuleById() to +get information about a Positioning Module when its ID is known.

+TPositionModuleInfo modInfo; + +// modId is known to the client application +User::LeaveIfError(server.GetModuleInfoById(modId, modInfo)); +... +
+
+How to Get +Location Information +How to Get +Module Status Changes +
\ No newline at end of file