# Bluetooth configuration

Using the same format as the ALSA monitor, the configuration file `bluetooth.lua.d/50-bluez-config.lua` is charged to configure the Bluetooth devices and nodes created by WirePlumber.

- bluez_monitor.properties

  A Lua object that contains generic client configuration properties in the for of key pairs.

  Example:

      bluez_monitor.properties = {
        ["bluez5.enable-msbc"] = true,
      }

  This example will enable the MSBC codec in connected Bluetooth devices that support it.

  The list of valid properties are:

      ["bluez5.enable-sbc-xq"] = true

  Enables the SBC-XQ codec in connected Blueooth devices that support it

      ["bluez5.enable-msbc"] = true

  Enables the MSBC codec in connected Blueooth devices that support it

      ["bluez5.enable-hw-volume"] = true

  Enables hardware volume controls in Bluetooth devices that support it

      ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"

  Enabled headset roles (default: [ hsp_hs hfp_ag ]), this property only applies to native backend. Currently some headsets (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag enabled, disable either hsp_ag or hfp_ag to work around it.

  Supported headset roles: `hsp_hs` (HSP Headset), `hsp_ag` (HSP Audio Gateway), `hfp_hf` (HFP Hands-Free) and `hfp_ag` (HFP Audio Gateway)

      ["bluez5.codecs"] = "[ sbc sbc_xq aac ]"

  Enables `sbc`, `sbc_zq` and `aac` A2DP codecs.

  Supported codecs: `sbc`, `sbc_xq`, `aac`, `ldac`, `aptx`, `aptx_hd`, `aptx_ll`, `aptx_ll_duplex`, `faststream`, `faststream_duplex`.

  All codecs are supported by default.

      ["bluez5.hfphsp-backend"] = "native"

  HFP/HSP backend (default: native). Available values: `any`, `none`, `hsphfpd`, `ofono` or `native`.

      ["bluez5.default.rate"] = 48000

  The bluetooth default audio rate.

      ["bluez5.default.channels"] = 2

  The bluetooth default number of channels.

- bluez_monitor.rules

  Like in the ALSA configuration, this is a Lua array that can contain objects with rules for a Bluetooth device or node. Those objects have 2 properties. The first one is `matches`, which allows users to define rules to match a Bluetooth device or node. The second property is `apply_properties`, and it is used to apply properties on the matched Bluetooth device or node.

  Example:

      {
        matches = {
          {
            { "device.name", "matches", "bluez_card.*" },
          },
        },
        apply_properties = {
           ["bluez5.auto-connect"]  = "[ hfp_hf hsp_hs a2dp_sink ]"
        }
      }

  This will set the auto-connect property to `hfp_hf`, `hsp_hs` and `a2dp_sink` on bluetooth devices whose name matches the `bluez_card.*` pattern.

  A list of valid properties are:

      ["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]"

  Auto-connect device profiles on start up or when only partial profiles have connected. Disabled by default if the property is not specified.

  Supported values are: `hfp_hf`, `hsp_hs`, `a2dp_sink`, `hfp_ag`, `hsp_ag` and `a2dp_source`.

      ["bluez5.hw-volume"] = "[ hfp_ag hsp_ag a2dp_source ]"

  Hardware volume controls (default: `hfp_ag`, `hsp_ag`, and `a2dp_source`)

  Supported values are: `hfp_hf`, `hsp_hs`, `a2dp_sink`, `hfp_ag`, `hsp_ag` and `a2dp_source`.

      ["bluez5.a2dp.ldac.quality"] = "auto"

  LDAC encoding quality.

  Available values: `auto` (Adaptive Bitrate, default), `hq` (High Quality, 990/909kbps), `sq` (Standard Quality, 660/606kbps) and `mq` (Mobile use Quality, 330/303kbps).

      ["bluez5.a2dp.aac.bitratemode"] = 0

  AAC variable bitrate mode.

  Available values: 0 (cbr, default), 1-5 (quality level).

      ["device.profile"] = "a2dp-sink"

  Profile connected first.

  Available values: `a2dp-sink` (default) or `headset-head-unit`.