# List of hardware/kernel features, which cannot be detected generically.
#
# The `feature` is enabled only if all three of adapter, device, and
# kernel have it.
#
# For each of the adapter/device/kernel, the match rules are processed
# one at a time, and the first one that matches is used.
#
# Features and tags:
#     msbc              "standard" mSBC (60 byte tx packet)
#     msbc-alt1         USB adapters with mSBC in ALT1 setting (24 byte tx packet)
#     msbc-alt1-rtl     Realtek USB adapters with mSBC in ALT1 setting (24 byte tx packet)
#     hw-volume         AVRCP and HSP/HFP hardware volume support
#     hw-volume-mic     Functional HSP/HFP microphone volume support
#     sbc-xq            "nonstandard" SBC codec setting with better sound quality
#     faststream        FastStream codec support
#     a2dp-duplex       A2DP duplex codec support
#
# Features are disabled with the key "no-features" whose value is an
# array of strings in the match rule.

bluez5.features.device = [
    # properties:
    # - name
    # - address ("ff:ff:ff:ff:ff:ff")
    # - vendor-id ("bluetooth:ffff", "usb:ffff")
    # - product-id
    # - version-id

    { name = "Air 1 Plus", no-features = [ hw-volume-mic ] },
    { name = "AirPods", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { name = "AirPods Pro", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { name = "Audio Pro_A26", address = "~^7c:96:d2:", no-features = [ hw-volume ]},  # doesn't remember volume, #pipewire-3225
    { name = "AXLOIE Goin", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { name = "BAA 100", no-features = [ hw-volume ] },  # Buxton BAA 100, doesn't remember volume, #pipewire-1449
    { name = "D50s", address = "~^00:13:ef:", no-features = [ hw-volume ] },  # volume has no effect, #pipewire-1562
    { name = "FiiO BTR3", address = "~^40:ed:98:", no-features = [ faststream ] },  # #pipewire-1658
    { name = "JBL Endurance RUN BT", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { name = "JBL LIVE650BTNC" },
    { name = "Motorola DC800", no-features = [ sbc-xq ] },  # #pipewire-1590
    { name = "Motorola S305", no-features = [ sbc-xq ] },  # #pipewire-1590
    { name = "PMK True Wireless Earbuds" no-features = [ sbc-xq ] }, # Primark earbud
    { name = "Rockbox Brick", no-features = [ hw-volume ] }, # #pipewire-3786
    { name = "Soundcore Life P2-L", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { name = "Soundcore Motion B", no-features = [ hw-volume ] },
    { name = "SoundCore mini", no-features = [ hw-volume ] },  # #pipewire-1686
    { name = "SoundCore mini2", no-features = [ hw-volume ] },  # #pipewire-2927
    { name = "SoundCore 2", no-features = [ sbc-xq ] },  # #pipewire-2291
    { name = "Tribit MAXSound Plus", no-features = [ hw-volume ] },  # #pipewire-1592
    { name = "Urbanista Stockholm Plus", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { name = "WorkTunes Connect", no-features = [ hw-volume ] },  # 3M WorkTunes Connect

    { address = "~^44:5e:cd:", no-features = [ faststream, a2dp-duplex ]},  # #pipewire-1756
    { address = "~^2c:53:d7:", no-features = [ sbc-xq ] },  # Phonak hearing aids #pipewire-3939

    { address = "~^94:16:25:", no-features = [ hw-volume ]},  # AirPods 2
    { address = "~^9c:64:8b:", no-features = [ hw-volume ]},  # AirPods 2
    { address = "~^a0:e9:db:", no-features = [ hw-volume ]},  # Ausdom M05
    { address = "~^0c:a6:94:", no-features = [ hw-volume ]},  # deepblue2
    { address = "~^00:14:02:", no-features = [ hw-volume ]},  # iKross IKBT83B HS
    { address = "~^44:5e:f3:", no-features = [ hw-volume ]},  # JayBird BlueBuds X
    { address = "~^d4:9c:28:", no-features = [ hw-volume ]},  # JayBird BlueBuds X
    { address = "~^00:18:6b:", no-features = [ hw-volume ]},  # LG Tone HBS-730
    { address = "~^b8:ad:3e:", no-features = [ hw-volume ]},  # LG Tone HBS-730
    { address = "~^a0:e9:db:", no-features = [ hw-volume ]},  # LG Tone HV-800
    { address = "~^00:24:1c:", no-features = [ hw-volume ]},  # Motorola Roadster
    { address = "~^00:11:b1:", no-features = [ hw-volume ]},  # Mpow Cheetah
    { address = "~^a4:15:66:", no-features = [ hw-volume ]},  # SOL REPUBLIC Tracks Air
    { address = "~^00:14:f1:", no-features = [ hw-volume ]},  # Swage Rokitboost HS
    { address = "~^00:26:7e:", no-features = [ hw-volume ]},  # VW Car Kit
    { address = "~^90:03:b7:", no-features = [ hw-volume ]},  # VW Car Kit

    # All features are enabled by default; it's simpler to block non-working devices one by one.
]

bluez5.features.adapter = [
    # properties:
    # - address ("ff:ff:ff:ff:ff:ff")
    # - bus-type ("usb", "other")
    # - vendor-id ("usb:ffff")
    # - product-id ("ffff")

    # Realtek Semiconductor Corp.
    { bus-type = "usb", vendor-id = "usb:0bda" },

    # Generic USB adapters
    { bus-type = "usb", no-features = [ msbc-alt1-rtl ] },

    # Other adapters
    { no-features = [ msbc-alt1-rtl ] },
]

bluez5.features.kernel = [
    # properties (as in uname):
    # - sysname
    # - release
    # - version

    # See https://lore.kernel.org/linux-bluetooth/20201210012003.133000-1-tpiepho@gmail.com/
    # https://lore.kernel.org/linux-bluetooth/b86543908684cc6cd9afaf4de10fac7af1a49665.camel@iki.fi/
    { sysname = "Linux", release = "~^[0-4]\\.", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { sysname = "Linux", release = "~^5\\.[1-7]\\.", no-features = [ msbc-alt1, msbc-alt1-rtl ] },
    { sysname = "Linux", release = "~^5\\.(8|9)\\.", no-features = [ msbc-alt1 ] },
    { sysname = "Linux", release = "~^5\\.10\\.(1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|51|52|53|54|55|56|57|58|59|60|61)($|[^0-9])", no-features = [ msbc-alt1 ] },
    { sysname = "Linux", release = "~^5\\.12\\.(18|19)($|[^0-9])", no-features = [ msbc-alt1 ] },
    { sysname = "Linux", release = "~^5\\.13\\.(3|4|5|6|7|8|9|10|11|12|13)($|[^0-9])", no-features = [ msbc-alt1 ] },

    { no-features = [] },
]
