Public Member Functions | |
Connect () | |
Initiate a service-level connection to the device. | |
Disconnect () | |
Close the service-level connection to the device. | |
OpenAudio () | |
Attempt to open an audio connection to the device. | |
CloseAudio () | |
Close the audio connection to the device. | |
Dial (in string phone_num) | |
Send a dial command to the audio gateway. | |
Redial () | |
Send a last number redial command to the audio gateway. | |
HangUp () | |
Send a hangup command to the audio gateway. | |
SendDtmf (in byte code) | |
Send a DTMF tone generation command to the audio gateway. | |
Answer () | |
Request the audio gateway answer the incoming call. | |
QueryNumber (out string number, out int32 type, out int32 service) | |
Query the telephone number of the audio gateway. | |
QueryCurrentCalls (out CallInfo[] calls) | |
Query the current calls of the audio gateway. | |
QueryOperator (out int32 mode, out int32 format, out string oper) | |
Query the operator of the audio gateway. | |
SetVoiceRecognition (in bool activate) | |
Request activation or deactivation of voice recognition on the audio gateway. | |
CallDropHeldUdub () | |
Send a drop held / UDUB command to the audio gateway. | |
CallSwapDropActive () | |
Send a drop active call command to the audio gateway. | |
CallDropIndex (int idx) | |
Send a drop specific call command to the audio gateway. | |
CallSwapHoldActive () | |
Send a hold active call command to the audio gateway. | |
CallLink () | |
Send a link calls command to the audio gateway. | |
CallPrivateConsult (int idx) | |
Send a private consult command to the audio gateway. | |
CallTransfer () | |
Send a transfer call command to the audio gateway. | |
signal | StateChanged (out byte state, out bool voluntary) |
Notification of a service-level connection state change. | |
signal | CallStateChanged (out byte call_state) |
Notification of a call state change. | |
signal | AudioStateChanged (out byte audio_state) |
Notification of an audio connection state change. | |
signal | ClaimStateChanged (out bool claim_state) |
Notification of the AudioGateway being claimed or unclaimed. | |
signal | AutoReconnectChanged (out bool autoreconnect) |
Notification of the AudioGateway auto-reconnect flag changing. | |
signal | Ring (out string number, out int32 number_type, out string subaddr, out int32 subaddr_type, out string caller_name) |
Ring notification. | |
signal | IndicatorChanged (out string indicator_name, out int32 value) |
Notification of miscellaneous audio gateway state change. | |
signal | NameResolved (out string name) |
Bluetooth name resolution complete notification. | |
signal | VoiceRecognitionActiveChanged (out bool state) |
Notification of voice recognition activatation or deactivatation. | |
signal | InBandRingToneEnableChanged (out bool state) |
Notification of change to the in-band ring tone setting of the audio gateway. | |
Public Attributes | |
const byte | State |
Service-level connection state of the device. | |
const byte | CallState |
Call state of the device. | |
const byte | AudioState |
Audio connection state of the device. | |
const bool | VoiceRecognitionActive |
Voice recognition state of the device. | |
const bool | InBandRingToneEnable |
In-Band ring tone state of the device. | |
const bool | Claimed |
D-Bus ownership state of the device. | |
const bool | VoluntaryDisconnect |
Mode of previous service-level disconnection of the device. | |
const string | Address |
Bluetooth address of the AudioGateway. | |
bool | Known |
Permanently known flag. | |
bool | AutoReconnect |
Automatic reconnection flag. | |
const dict< string, bool > | Features |
Feature set of device. | |
const uint32 | RawFeatures |
Feature set of the device, as reported by the device through handshaking. | |
Classes | |
struct | CallInfo |
For each audio gateway device known to hfpd, an object implementing the AudioGateway interface will be instantiated. A complete list of audio gateway objects is available via HandsFree.AudioGateways.
Audio gateway objects have three main forms of state:
An open audio connection to an audio gateway device does not imply that audio data is being streamed to and from the device. The D-Bus client is ultimately responsible for configuring streaming. When an audio connection is first established, ideally, the D-Bus client will either:
It is highly undesirable to leave an audio gateway device sitting with an open audio connection, without active streaming. D-Bus clients should take care to avoid this situation, and ensure that they close the audio connection if they are unable to start streaming.
Overall, HFPD should not need to initiate audio connections to devices -- audio gateway devices are suited to do all of the initiation on their own. If HFPD does initiate an audio connection, it should only be at the explicit request of the user.
When an audio gateway device initiates an audio connection, the device's D-Bus owner will be informed of it only by this signal.
net.sf.nohands.hfpd.AudioGateway.Connect | ( | ) |
Initiate a service-level connection to the device.
This method will start to transition the device to the connected state.
If a conneciton to the device is already in progress, or the device is already connected, this method will succeed and do nothing.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.Disconnect | ( | ) |
Close the service-level connection to the device.
This method will force the device to the disconnected state.
If a service-level connection to the device is in progress, it will be aborted. If a service-level connection to the device is fully established, it will be disconnected. If an audio connection to the device is open or in progress, it will also be closed or aborted. If the device is already disconnected, this method will succeed and do nothing.
This method may cause StateChanged() and possibly AudioStateChanged() and SoundIo.StateChanged() signals to be emitted.
net.sf.nohands.hfpd.AudioGateway.OpenAudio | ( | ) |
Attempt to open an audio connection to the device.
This method will attempt to push the device to the audio connected state. The device must have an existing service-level connection in order to push the audio state.
If an audio connection already exists, or an audio connection attempt is already in progress, this method will do nothing and succeed.
An open audio connection to an audio gateway device does not imply that audio data is being streamed to and from the device. See the Audio connection management section for more details.
This method may cause an AudioStateChanged() signal to be emitted.
net.sf.nohands.hfpd.AudioGateway.CloseAudio | ( | ) |
Close the audio connection to the device.
This method will force the device to the audio disconnected state.
If an audio connection to the device is in progress, it will be aborted. If an audio connection to the device is fully established, it will be disconnected. If the device is configured as the endpoint of the SoundIo object, audio streaming will be halted. If the audio connection to the device is already disconnected, this method will succeed and do nothing.
This method may cause AudioStateChanged() and SoundIo.StateChanged() signals to be emitted.
net.sf.nohands.hfpd.AudioGateway.Dial | ( | in string | phone_num | ) |
Send a dial command to the audio gateway.
This method causes a dial command to be sent to the audio gateway for a given phone number.
[in] | phone_num | Phone number to request the audio gateway to dial. |
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.Redial | ( | ) |
Send a last number redial command to the audio gateway.
This method causes a last number redial command to be sent to the audio gateway. The number to be dialed will be the last number dialed by the audio gateway, whether it was submitted by a Dial() command or dialed directly on the keypad of the audio gateway.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.HangUp | ( | ) |
Send a hangup command to the audio gateway.
This method causes a hangup command to be sent to the audio gateway. This has several uses:
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.SendDtmf | ( | in byte | code | ) |
Send a DTMF tone generation command to the audio gateway.
This method causes a DTMF tone generation command to be sent to the audio gateway. The audio gateway will generate the DTMF tone appropriate for the code and play it over the audio connection. This is useful for navigating menu systems such as for voice mail.
[in] | code | DTMF code to generate. Must be a decimal number, a letter A-D, #, or *. |
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.Answer | ( | ) |
Request the audio gateway answer the incoming call.
This method causes an answer call command to be sent to the audio gateway. If the audio gateway has an incoming, incomplete, ringing call, the call will be answered and will become the active call.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.QueryNumber | ( | out string | number, | |
out int32 | type, | |||
out int32 | service | |||
) |
Query the telephone number of the audio gateway.
This method queries the telephone number of the audio gateway and returns the result. This request is described in GSM 07.07 7.1.
[out] | number | The telephone number of the audio gateway on the public telephone network. The format of this number, e.g. organizational, local, or international, is described by the type parameter. |
[out] | type | The format of the number parameter. See GSM 04.10 section 10.5.4.7 for more information on the meaning. Some common values include:
|
[out] | service | Service related to the number. Values are described in GSM 07.07 section 7.1, and include:
|
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.QueryCurrentCalls | ( | out CallInfo[] | calls | ) |
Query the current calls of the audio gateway.
This method queries the current calls on the audio gateway, and returns the result. This request is described in GSM 07.07 7.17. The audio gateway is not required to support this request, but is likely to support it if the "EnhancedCallStatus"
feature in the AudioGateway.Features property is set to true
.
[out] | calls | An array of CallInfo structures, one per active call being handled by the audio gateway. If no calls are present, the array will be empty. The index members may be used |
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.QueryOperator | ( | out int32 | mode, | |
out int32 | format, | |||
out string | oper | |||
) |
Query the operator of the audio gateway.
This method queries the current operator information from the audio gateway and returns the result. This request is described in GSM 07.07 7.3, but as per Bluetooth HFP 1.5, only the long alphanumeric form of the operator information is available, e.g. "T-Mobile" or "Verizon".
[out] | mode | Operator selection mode. See GSM 07.07 |
[out] | format | Operator display format, always 0. |
[out] | oper | Operator name as an alphanumeric string, e.g. "AT&T". |
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.SetVoiceRecognition | ( | in bool | activate | ) |
Request activation or deactivation of voice recognition on the audio gateway.
Some audio gateway devices support voice recognition, and can use the audio link and the microphone of the hands-free for voice recognition. Support for voice recognition is indicated by the "VoiceRecognition"
feature in the AudioGateway.Features property being true
.
[in] | activate | Set to true to request activation of voice recognition, false to request deactivation. |
net.sf.nohands.hfpd.AudioGateway.CallDropHeldUdub | ( | ) |
Send a drop held / UDUB command to the audio gateway.
This method causes an oddly designed command to be sent to the audio gateway that has the following effect:
Support for this command by the audio gateway is optional, and is indicated by the "DropHeldUdub"
feature in the AudioGateway.Features property being true
.
Many audio gateways do not perform a unique action when this request is issued, and will often reject or ignore the incoming call. In general, the UDUB request is implemented so inconsistently that it is not worth presenting to the user.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.CallSwapDropActive | ( | ) |
Send a drop active call command to the audio gateway.
This method causes a command to be sent to the audio gateway that has the following effect:
Support for this command by the audio gateway is optional, and is indicated by the "SwapDropActive"
feature in the AudioGateway.Features property being true
.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.CallDropIndex | ( | int | idx | ) |
Send a drop specific call command to the audio gateway.
This method causes a command to be sent to the audio gateway requesting that it drop a specific call. This method is only useful when the audio gateway has the "EnhancedCallStatus"
feature, in which case call index numbers can be retrieved via QueryCurrentCalls(). Additionally, the audio gateway is only likely to support the command if it has the "EnhancedCallControl"
and "DropIndex"
features in the AudioGateway.Features property being true
.
[in] | idx | Index of the call to be dropped. |
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.CallSwapHoldActive | ( | ) |
Send a hold active call command to the audio gateway.
This method causes a command to be sent to the audio gateway that has the following effect:
Support for this command by the audio gateway is optional, and is indicated by the "SwapHoldActive"
feature in the AudioGateway.Features property being true
.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.CallLink | ( | ) |
Send a link calls command to the audio gateway.
This method causes a link calls command to be sent to the audio gateway. If the audio gateway has an active call, and a call placed on hold, the calls will be linked into a single three-way multiparty call.
Support for this command by the audio gateway is optional, and is indicated by the "Link"
feature in the AudioGateway.Features property being true
.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.CallPrivateConsult | ( | int | idx | ) |
Send a private consult command to the audio gateway.
This method causes a command to be sent to the audio gateway requesting that it remove all calls from the multiparty call except for a specific call. All calls removed from the multiparty will be placed on hold. This method is only useful when the audio gateway has the "EnhancedCallStatus"
feature, in which case call index numbers can be retrieved via QueryCurrentCalls(). Additionally, the audio gateway is only likely to support the command if it has the "EnhancedCallControl"
and "PrivateConsult"
features in the AudioGateway.Features property set to true
.
[in] | idx | Index of the call to go to private consult mode. |
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
net.sf.nohands.hfpd.AudioGateway.CallTransfer | ( | ) |
Send a transfer call command to the audio gateway.
This method causes a transfer call command to be sent to the audio gateway. If the audio gateway has an active call, and a call placed on hold, the calls will be linked to each other, and disconnected from the audio gateway.
Support for this command by the audio gateway is optional, and is indicated by the "Transfer"
feature in the AudioGateway.Features property being true
.
net.sf.nohands.hfpd.Error | Thrown on any sort of error, unspecific of the reason of failure. |
signal net.sf.nohands.hfpd.AudioGateway.StateChanged | ( | out byte | state, | |
out bool | voluntary | |||
) |
Notification of a service-level connection state change.
This signal is emitted whenever the service-level connection state of the device changes. This can be caused by calls to Connect() or Disconnect(), removal of a Bluetooth dongle, explicit connection or disconnection from the audio gateway, or a number of other events.
[out] | state | New value of the service-level connection state. See AudioGateway.State for more information. |
[out] | voluntary | If the state changed to disconnected, this parameter describes whether the disconnection was voluntary or involuntary. See AudioGateway.VoluntaryDisconnect for more information.. |
signal net.sf.nohands.hfpd.AudioGateway.CallStateChanged | ( | out byte | call_state | ) |
Notification of a call state change.
This signal is emitted whenever the call state of the device changes. This can be caused by calls to the Dial(), Answer(), or Hangup() methods, by an incoming call, or a number of other events.
[out] | call_state | New value of the audio gateway's call state. See AudioGateway.CallState for more information. |
signal net.sf.nohands.hfpd.AudioGateway.AudioStateChanged | ( | out byte | audio_state | ) |
Notification of an audio connection state change.
This signal is emitted whenever the audio connection state of the device changes. This can be caused by calls to SoundIo.AudioGatewayStart() or CloseAudio(), a service-level disconnection, or a number of other events.
[out] | audio_state | New value of the audio connection state. See AudioGateway.AudioState for more information. |
signal net.sf.nohands.hfpd.AudioGateway.ClaimStateChanged | ( | out bool | claim_state | ) |
Notification of the AudioGateway being claimed or unclaimed.
This signal is emitted whenever the ownership state of the AudioGateway changes. This can be caused by a D-Bus client invoking HandsFree.AddDevice() or HandsFree.RemoveDevice(), or the owner being disconnected from D-Bus.
[out] | claim_state | New value of the ownership state of the AudioGateway. See AudioGateway.Claimed for more information. |
signal net.sf.nohands.hfpd.AudioGateway.AutoReconnectChanged | ( | out bool | autoreconnect | ) |
Notification of the AudioGateway auto-reconnect flag changing.
[out] | autoreconnect | New value of the auto-reconnect state of the AudioGateway. See AudioGateway.AutoReconnect for more information. |
signal net.sf.nohands.hfpd.AudioGateway.Ring | ( | out string | number, | |
out int32 | number_type, | |||
out string | subaddr, | |||
out int32 | subaddr_type, | |||
out string | caller_name | |||
) |
Ring notification.
This signal is emitted whenever the phone "rings" due to an incoming call. The D-Bus owner of the AudioGateway should use this signal to start alerting the user and possibly start playing a ring tone.
[out] | number | The caller line identification reported by the audio gateway. The format of this number, e.g. organizational, local, or international, is described by the number_type parameter. The D-Bus client may use this value as a key for a phone book search. |
[out] | number_type | The format of the number parameter. See GSM 04.10 section 10.5.4.7 for more information on the meaning. Some common values include:
|
[out] | subaddr | The ISDN subaddress of the caller. This is unused in most situations. For more information, see ITU-T recommendation I.330. |
[out] | subaddr_type | The format of the subaddr parameter, in the same format as the number_type parameter. |
[out] | caller_name | Some audio gateway devices have built-in phone books, which may have an entry for the phone number of the caller. In such cases, this parameter contains the contact name associated with the phone number as reported by the audio gateway. |
signal net.sf.nohands.hfpd.AudioGateway.IndicatorChanged | ( | out string | indicator_name, | |
out int32 | value | |||
) |
Notification of miscellaneous audio gateway state change.
Some audio gateways are able to report optional state, such as signal strength ("bars"), battery charge level, and even whether voice mail is waiting. This signal is emitted when the audio gateway reports such a state change.
[out] | indicator_name | One of a set of semi-standardized indicator names described below. |
[out] | value | Value of indicator, as reported by the device. |
"service"
0 = no cellular service, 1 = service"roam"
0 = not roaming, 1 = roaming"signal"
Signal strength level, values 0-5"battchg"
Battery charge level, values 0-5"Voice Mail"
0 = no voice mail, 1 = voice mail, nonstandard and supported by some Motorola phones signal net.sf.nohands.hfpd.AudioGateway.NameResolved | ( | out string | name | ) |
Bluetooth name resolution complete notification.
When a service-level connection to the audio gateway is initiated, as soon as the low-level Bluetooth connection is complete, a request is made to read the Bluetooth name of the device. This signal apprises D-Bus clients of the result of the read name request.
[out] | name | Bluetooth name read from the audio gateway device. |
signal net.sf.nohands.hfpd.AudioGateway.VoiceRecognitionActiveChanged | ( | out bool | state | ) |
Notification of voice recognition activatation or deactivatation.
When the audio gateway activates or deactivates its built-in voice recognition feature, this signal will be emitted as a notification.
[out] | state | Set to true if voice recognition is being activated, false if deactivated. |
signal net.sf.nohands.hfpd.AudioGateway.InBandRingToneEnableChanged | ( | out bool | state | ) |
Notification of change to the in-band ring tone setting of the audio gateway.
When the audio gateway's in-band ring tone setting is changed, this signal will be emitted as a notification.
[out] | state | The new value of the in-band ring tone setting. Set to true if the in-band ring tones are enabled, false if disabled. |
The in-band ring tone setting may only be changed by the audio gateway itself, typically through an option in the user interface of the audio gateway.
const byte net.sf.nohands.hfpd.AudioGateway.State |
Service-level connection state of the device.
This property can be accessed using the standard D-Bus property interface.
This property describes the state of the service-level connection to the device. The service-level connection is used to control the device and retrieve its status. An audio connection cannot be attempted until the service-level connection is established.
This property may have values:
Changes to this value are reported by the StateChanged() signal.
const byte net.sf.nohands.hfpd.AudioGateway.CallState |
Call state of the device.
This property can be accessed using the standard D-Bus property interface.
This property describes the state of the active and incomplete calls being handled by the device.
This property may have values:
Changes to this value are reported by the CallStateChanged() signal.
const byte net.sf.nohands.hfpd.AudioGateway.AudioState |
Audio connection state of the device.
This property can be accessed using the standard D-Bus property interface.
This property describes the state of the audio connection to the device. The audio connection allows the device to stream audio data with the local sound card.
This property may have values:
Changes to this value are reported by the AudioStateChanged() signal.
An open audio connection to an audio gateway device does not imply that audio data is being streamed to and from the device. See the Audio connection management section for more details.
Voice recognition state of the device.
This property can be accessed using the standard D-Bus property interface.
This read-only property describes whether the audio gateway has its voice recognition feature activated. When activated, the audio gateway will use the audio link to feed its built-in voice recogintion mechanism, and recognize commands spoken into the microphone of the hands-free.
This property is present on all AudioGateway objects, but is only useful with devices that support voice recogintion. Such devices will have the "VoiceRecognition"
feature in AudioGateway.Features set to true
.
Changes to this value are reported by the VoiceRecognitionActiveChanged() signal.
This property is read-only, but changes may be effected by SetVoiceRecognition().
In-Band ring tone state of the device.
This property can be accessed using the standard D-Bus property interface.
This read-only property describes whether the audio gateway has its in-band ring tone feature enabled. When in-band ring tones are enabled, the audio gateway will use the audio link to play its normal alerting ring tone, which will be played over the speakers of the hands-free.
Changes to this value are reported by the InBandRingToneEnableChanged() signal.
This property is read-only. Changes may only be effected by changing the setting on the audio gateway itself, typically through an option in the user interface of the audio gateway.
This setting can be used to inhibit playback of alert sounds in situations where alert sounds take priority over the audio gateway audio link, or coexist with the audio link.
const bool net.sf.nohands.hfpd.AudioGateway.Claimed |
D-Bus ownership state of the device.
This property can be accessed using the standard D-Bus property interface.
This property describes whether a D-Bus client has claimed the device or not. If it is true
, then a D-Bus client has claimed the device using HandsFree.AddDevice(). If it is false
, no D-Bus client currently owns the device.
Claimed devices are granted access to specific services provided by HFPD:
false
. Any D-Bus client can be notified of this by receiving the StateChanged() signal.Changes to this value are reported by the ClaimStateChanged() signal.
Mode of previous service-level disconnection of the device.
This property can be accessed using the standard D-Bus property interface.
This property describes the nature of the reason of the most recent service-level disconnection of the device.
Voluntary disconnections are the result of a user initiated process, e.g. selecting "disconnect bluetooth" on a mobile phone. Involuntary disconnections are the result of other factors, such as a Bluetooth dongle being removed, or a mobile phone being moved out of radio range. When a disconnection is voluntary, reconnection should not be attempted until explicitly requested by the user.
Relevant samples of this value are reported by the StateChanged() signal.
const string net.sf.nohands.hfpd.AudioGateway.Address |
Bluetooth address of the AudioGateway.
This property can be accessed using the standard D-Bus property interface.
This property contains the Bluetooth address of the device, in colon-separated form, e.g. "01:23:45:67:89:AB".
Permanently known flag.
This property can be accessed using the standard D-Bus property interface.
This property describes whether the audio gateway device is permanently known by HFPD. This setting allows specific devices to make use of functionality of HFPD without the supervision of a D-Bus client. Permanently known devices are allowed to connect despite HandsFree.AcceptUnknown being set to false
. Such devices are also automatically configured for audio streaming when they initiate an audio connection, as long as HandsFree.VoiceAutoConnect is true
.
Automatic reconnection flag.
This property can be accessed using the standard D-Bus property interface.
This property describes whether the periodic auto-reconnect mechanism should be used with the device. For audio gateways that do not have a service-level connection, enabling periodic auto-reconnect will cause a connection attempt to the device to be initiated periodically.
Changes to this value are reported by the AutoReconnectChanged() signal.
const dict<string, bool> net.sf.nohands.hfpd.AudioGateway.Features |
Feature set of device.
This property can be accessed using the standard D-Bus property interface.
The Hands-Free Profile specification describes an optional set of features that audio gateway devices are allowed to support. This dictionary array contains feature names as keys, each mapping to a boolean value describing whether the device supports the named feature or not.
The values of the feature set are only meaningful when a service-level connection is established.
The D-Bus signature of this property is "a{sb}"
Known optional feature names include:
const uint32 net.sf.nohands.hfpd.AudioGateway.RawFeatures |
Feature set of the device, as reported by the device through handshaking.
This property can be accessed using the standard D-Bus property interface.
The Bluetooth Hands-Free Profile specification provides a means for the audio gateway to identify a set of optional features that it supports. Support for these optional features is reported by the +BRSF status code sent by the device during negotiation. For more information, see the Bluetooth Hands-Free Profile specification.
This presentation of the feature set does not contain as much detail as the AudioGateway.Features property, e.g. it has no way of representing whether the device supports a battery charge level indicator.