Persistentdata for beginners: Feature Manager

Feature Manager provides APIs to query and configure the status of hardware and software features.

It controls a set of feature flags associated with the features (functional abilities) of a mobile device. Features include but are not limited to: Bluetooth, DRM, printing, and vibration. Each functional ability managed may have a feature flag or set of flags associated with that ability.

A feature flag is represented by three 32-bit values:

  • Feature UID: A UID that uniquely identifies the feature
  • Status flags: Feature flag properties (e.g. feature is supported)
  • Feature data: Additional feature information related to the feature

The initial state of the feature flags is defined by the features.dat file or feature information plug-ins stored in the ROM image. The Build package provides perl tools to generate the features.dat file from XML input files. Modified and added feature information is stored in the Feature Manager server’s private directory on the System drive. When the Feature Manager server starts up, it reads all the available feature information from these sources and holds that information in RAM.

Applications can query the feature manager to determine the capabilities of the device they are running on. For example, a game that supports vibration effects can determine whether the device supports a vibration capability by querying the Feature Manager.

Feature Manager API

Feature manager clients should link to featdiscovery.lib to use the CFeatureDiscovery public API. To use the other platform classes you need to link to featmgr.lib.

The purpose of each class is summarised below:

API Purpose
CFeatureDiscovery
(featdiscovery.h)
Provides methods to query which features are supported
TFeatureSet
(featdiscovery.h)
A collection of features used to query the status of multiple features in a single request
FeatureManager
(featmgr.h)
Deprecated API for querying whether features are supported; use CFeatureDiscovery instead
CFeatureInfoPlugin
(featureinfoplugin.h)
Base class for feature information plug-ins
MFeatureInfoPluginCallback
(featureinfoplugin.h)
Interface implemented by feature manager server to receive responses from feature information plug-ins
FeatureInfoCommand::
TEnhancedFeatureInfo
(featureinfoplugin.h)
Data structure used to pass data with ELoadEnhancedFeatureInfoCmdId response (for features that have custom flags and user data)
FeatureInfoCommand::TFeature
(featureinfoplugin.h)
Data structure used to list the features in data structure TFeatureInfo
FeatureInfoCommand::
TFeatureInfo
(featureinfoplugin.h)
Data structure used to pass data with ELoadFeatureInfoCmdId response (for “simple” features without custom flags and user data)
CFeatureNotifier
(featurenotifier.h)
Active object for notification of feature changes
MFeatureObserver
(featurenotifier.h)
Interface for feature change notification
TFeatureEntry
(featurecmn.h)
Encapsulates a feature, status flags and feature data
RFeatureControl
(featurecontrol.h)
Enable/disable features at run-time, plus query methods

Further resources

  • Symbian^3 reference documentation for Feature Manager
  • Configurability Mechanisms wiki documentation on Feature Manager
  • Coming up next…

    Feature Registry is the next part of the Persistentdata for beginners series.

    Advertisements

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s


    %d bloggers like this: