The HandsFreePhone event-source plugin represents the Bluetooth HFP phone service. This plugin is responsible for notifying the HNM of incoming phone call events. The plugin generates display events so that subscribing HMI applications will know how to handle incoming handsfree phone calls.
This plugin subscribes to the /pps/services/bluetooth/handsfree/status object, which the Bluetooth Manager uses to publish the results of commands sent to the /pps/services/bluetooth/handsfree/control object. For details on these objects, see their entries in the PPS Objects Reference.
The plugin generates display events in response to state changes in the Bluetooth HFP service. When the plugin detects a state change in the HFP status object, one or more events will be generated to open and close display windows appropriately. New events are added to the tail of the queue following HFP state changes.
HFP state | Plugin behavior |
---|---|
HFP_INITIALIZED |
When the HFP system is first initialized, there should be no active call. When the HFP status object gets to this state, a display-end event is issued to ensure that no displays associated with handsfree calls are currently displayed. Note that the initialized state occurs when a call ends as well as when the system is first initialized. No priority is explicitly assigned to the initialized state—this state issues only display-end requests, which do not depend on priority. |
HFP_CONNECTED_IDLE | The HFP service is connected and ready for call activity. |
HFP_CALL_OUTGOING_DIALING | A remote party's number is being dialed. |
HFP_CALL_INCOMING |
When an incoming call is received, the plugin will issue a display-start event requesting an Overlay window type. The name of the event is simply the state's name (i.e., HFP_CALL_INCOMING). The HMI view responsible for handling the specific display request is the Communication app. If the incoming call can't be displayed by a popup overlay, then the fallback display type is a growl notification. This growl will require that the user activate the Communication app (e.g., by tapping the growl notification window) to accept or reject the incoming call.
Whether a communication dialog can be displayed depends on the priority of the currently
display application and on the priority of the incoming call event. An incoming call event has
default priority unless a custom priority is specified in the policy configuration. You can set a
custom priority by adding the line HFP_CALL_INCOMING = 0 to the
HandsFreePhone module definition in the policy configuration file as shown:
modules { ... HandsFreePhone { dll = /lib/dll/hpm/event-source-handsfree.so event-priorities { ... HFP_CALL_INCOMING = 0 # Set custom priority ... } } ... } |
Since the HandsFreePhone plugin wraps the Bluetooth HFP service's PPS status object, the open() callback must subscribe to this PPS object so that the plugin will be notified of any state changes by the HFP subsystem.
The close() callback closes the PPS object that this plugin subscribes to.
The read_event callback is the mechanism that the HNM uses to get event information from this plugin. If there's a pending event from the Bluetooth HFP service, this callback will return the event data in the specified event buffer.
For more information, see "API Reference" in this guide.
HandsFreePhone { dll = /lib/dll/hmi-notification/event-source-handsfree.so event-priorities { HFP_INITIALIZED = 0 HFP_CONNECTED_IDLE = 0 HFP_CALL_OUTGOING_DIALING = 1 HFP_CALL_INCOMING = 1 }