# Verify HFP functions

HFP defines how an audio gateway device can connect to a hands-free device for
functions like remote control and audio connection.

To perform HFP client or audio gateway functions, you must first complete the steps in the following procedure.

## Prerequisites

- Enable SSH to access your host device. For instructions, see [Sign in using SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-80022-254/how_to.html#use-ssh).
- Place the DUT and the remote device in the Bluetooth vicinity.

## Set up the device for HFP functions

1. Run the SSH in command prompt using the following command:

ssh root@<device_IP_address>
        Copy to clipboard

    **Example**

    If the IP address of the device is `10.92.160.222`, run the following command:

ssh root@10.92.160.222
        Copy to clipboard
2. Connect to the SSH by entering the following password:

oelinux123
        Copy to clipboard
3. Configure the DUT for the HFP [client](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-hfp.html#section-nlh-q3v-mcc-08-25-24-1246-29-767) or [audio gateway](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-hfp.html#section-jgk-r3v-mcc-08-25-24-1246-49-237) functions, as required.

## Configure the DUT for HFP client functions

After the [initial device set up](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-hfp.html#section-rmp-dgv-mcc-08-25-24-1227-32-765) for HFP functions, do the following for an HFP client:

1. Verify the status of ofono service by running the following command in SSH:

systemctl status ofono
        Copy to clipboard
2. Download the Bluetooth configuration file `bluetooth.conf` from [GitHub PipeWire page](https://github.com/PipeWire/wireplumber/blob/0.5.1/src/config/wireplumber.conf.d.examples/).
3. Push the `bluetooth.conf` file to the device at the `/usr/share/wireplumber/wireplumber.conf.d` directory.
4. Open the `bluetooth.conf` file in a text editor.
5. Uncomment the `bluez5.hfphsp-backend = "native"` property. Change its value from `"native"` to `"ofono"`.

> 
> 
> The file must appear as follows:

# bluez5.enable-hw-volume = true
        
        ## HFP/HSP backend (default: native).
        ## Available values: any, none, hsphfpd, ofono, native
        bluez5.hfphsp-backend = "ofono"
        
        ## HFP/HSP native backend modem (default: none).
        Copy to clipboard
6. Save the file.
7. Reload the daemon by running the following command:

systemctl daemon-reload
        Copy to clipboard
8. Restart the WirePlumber service by running the following command:

systemctl restart wireplumber
        Copy to clipboard

    After you reload the daemon and restart the WirePlumber service, the changes in the `bluetooth.conf` configuration file reflect in the system. PipeWire establishes a connection with ofono using DBUS.
9. Run `bluetoothctl` by running the following command in SSH:

bluetoothctl
        Copy to clipboard
10. Verify if the UUID of the hands-free-client device appears in the list by running the following command from the `bluetoothctl` menu:

> 
> 
> show
>     Copy to clipboard
> 
> 
> **Sample output**
> 
> 
> [bluetooth]# show
>     Controller 22:22:9B:2C:79:1E (public)
>        Name: qcm6490
>        Alias: qcm6490
>        Class: 0x002c0000
>        Powered: yes
>        Discoverable: no
>        DiscoverableTimeout: 0x000000b4
>        Pairable: yes
>        UUID: A/V Remote Control        (e000110e-0000-1000-8000-00805f9b34fb)
>        UUID: PnP Information           (e0001200-0000-1000-8000-00805f9b34fb)
>        UUID: Audio Source              (e000110a-0000-1000-8000-00805f9b34fb)
>        UUID: Audio Sink                (e000110b-0000-1000-8000-00805f9b34fb)
>        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
>        UUID: Generic Access Profile    (e0001800-0000-1000-8000-00805f9b34fb)
>        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
>        UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
>        UUID: Handsfree                 (e000111e-0000-1000-8000-00805f9b34fb)
>        Modalias: usb:v1D6Bp0246d0541
>        Discovering: no
>        Roles: central
>        Roles: peripheral
>     Advertising Features:
>        ActiveInstances: 0x00 (0)
>        SupportedInstances: 0x10 (16)
>        SupportedIncludes: tx-power
>        SupportedIncludes: appearance
>        SupportedIncludes: local-name
>        SupportedSecondaryChannels: 1M
>        SupportedSecondaryChannels: 2M
>        SupportedSecondaryChannels: Coded
>     [bluetooth]#
>     Copy to clipboard
> 
> 
> Note
> 
> 
> The hands-free audio gateway and headset UUIDs aren’t listed. Only the hands-free client UUID that’s configured from PipeWire appears in the list.

11. Open the `ofono/test` menu by running the following command in SSH:

> 
> 
> ls -rt /usr/lib/ofono/test
>     Copy to clipboard
> 
> 
> Note
> 
> 
> Build and install the `ofono-tests` package on your device for the `ofono/test` application.
> 
> 
> **Sample output**
> 
> 
> sh-5.1# ls -rt /usr/lib/ofono/test
>     unlock-pin                 set-ddr                     hangup-call
>     test-stk-menu              set-context-property        hangup-all
>     test-ss-control-cs         set-cbs-topics              hangup-active
>     test-ss-control-cf         set-call-forwarding         get-tech-preference
>     test-ss-control-cb         send-vcard                  get-serving-cell-info
>     test-ss                    send-vcal                   get-operators
>     test-sms                   send-ussd                   get-icon
>     test-smart-messaging       send-sms                    enter-pin
>     test-serving-cell-info     scan-for-operators          enable-throttling
>     test-push-notification     reset-pin                   enable-modem
>     test-phonebook             remove-contexts             enable-gprs
>     test-network-registration  release-and-swap            enable-cbs
>     test-modem                 release-and-answer          display-icon
>     test-message-waiting       reject-calls                disable-throttling
>     test-gnss                  register-operator           disable-modem
>     test-cbs                   register-auto               disable-gprs
>     test-call-settings         receive-sms                 disable-call-forwarding
>     test-call-forwarding       process-context-settings    dial-number
>     test-call-barring          private-chat                deactivate-context
>     test-advice-of-charge      online-modem                deactivate-all
>     swap-calls                 offline-modem               create-multiparty
>     set-use-sms-reports        monitor-ofono               create-mms-context
>     set-umts-band              lockdown-modem              create-internet-context
>     set-tty                    lock-pin                    change-pin
>     set-tech-preference        list-operators              cdma-set-credentials
>     set-speaker-volume         list-modems                 cdma-list-call
>     set-sms-smsc               list-messages               cdma-hangup
>     set-sms-bearer             list-contexts               cdma-dial-number
>     set-sms-alphabet           list-calls                  cdma-connman-enable
>     set-roaming-allowed        list-applications           cdma-connman-disable
>     set-msisdn                 list-allowed-access-points  cancel-ussd
>     set-mms-details            initiate-ussd               cancel-sms
>     set-mic-volume             ims-unregister              backtrace
>     set-lte-property           ims-register                answer-calls
>     set-gsm-band               hold-and-answer             activate-context
>     set-fast-dormancy          hangup-multiparty
>     Copy to clipboard

For HFP client functions, see [Perform Bluetooth HFP client functions](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-perform-bluetooth-hfp-client-functions.html#bluez-perform-bluetooth-hfp-client-functions).

## Configure the DUT for HFP audio gateway functions

After the [initial device set up](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-hfp.html#section-rmp-dgv-mcc-08-25-24-1227-32-765) for HFP functions, do the following for an HFP audio gateway:

1. Run `bluetoothctl` by running the following command in SSH:

bluetoothctl
        Copy to clipboard
2. Verify if the UUID of the hands-free audio gateway and the headset appear in the list by running the following command from the `bluetoothctl` menu:

show
        Copy to clipboard

    **Sample output**

[bluetooth]# show
        Controller 22:22:9B:2C:79:1E (public)
           Name: qcm6490
           Alias: qcm6490
           Class: 0x006c0000
           Powered: yes
           Discoverable: no
           DiscoverableTimeout: 0x000000b4
           Pairable: yes
           UUID: A/V Remote Control        (0000110a-0000-1000-8000-00805f9b34fb)
           UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
           UUID: Handsfree Audio Gateway   (0000111f-0000-1000-8000-00805f9b34fb)
           UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
           UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
           UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
           UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
           UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
           UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
           UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
           UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)
           Modalias: usb:v1D6Bp0246d0541
           Discovering: no
           Roles: central
           Roles: peripheral
        Advertising Features:
           ActiveInstances: 0x00 (0)
           SupportedInstances: 0x10 (16)
           SupportedIncludes: tx-power
           SupportedIncludes: appearance
           SupportedIncludes: local-name
           SupportedSecondaryChannels: 1M
           SupportedSecondaryChannels: 2M
           SupportedSecondaryChannels: Coded
        [bluetooth]# |
        Copy to clipboard
3. Enable Modified Sub Band Coding (mSBC) codec as the default codec for HFP audio gateway connection as follows:

    1. Open the `bluetooth.conf` file using a text editor on the device.
    2. Uncomment `bluez5.enable-msbc = true` line in the bluetooth.conf file.
    3. Save the `bluetooth.conf` file.
4. Reload the Bluetooth daemon by running the following command:

systemctl daemon-reload
        Copy to clipboard
5. Restart the WirePlumber service by running the following command:

systemctl restart wireplumber
        Copy to clipboard

    The changes in the `bluetooth.conf` configuration file are applied in the device.

For HFP audio gateway functions, see [Perform Bluetooth HFP audio gateway functions](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-perform-bluetooth-hfp-ag-functions.html#bluez-perform-bluetooth-hfp-ag-functions).

## Next steps

- [Perform Bluetooth HFP client functions](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-perform-bluetooth-hfp-client-functions.html)
You can perform HFP client functions using the `bluetoothctl` menu and `ofono/test` tools. Bluetooth HFP client functions include connecting or disconnecting to a remote device and managing phone calls over Bluetooth. You can dial a phone number, answer or reject incoming calls, and list active calls using HFP client functions.
- [Perform Bluetooth HFP audio gateway functions](https://docs.qualcomm.com/doc/80-80022-13/topic/bluez-perform-bluetooth-hfp-ag-functions.html)
You can perform HFP audio gateway functions using the `bluetoothctl` menu and `paplay` commands. Bluetooth HFP audio gateway functions allow you to connect or disconnect to a remote device and verify audio gateway functionality to ensure proper hands-free operation.

Last Published: May 10, 2026

[Previous Topic
Perform Bluetooth A2DP sink functions](https://docs.qualcomm.com/bundle/publicresource/80-80022-13/topics/bluez-perform-bluetooth-a2dp-sink-functions.md) [Next Topic
Perform Bluetooth HFP client functions](https://docs.qualcomm.com/bundle/publicresource/80-80022-13/topics/bluez-perform-bluetooth-hfp-client-functions.md)