[bluez/bluez] 672b3b: shared/gatt: Add skip_secondary option for GATT cl...

Martin
2026-04-03T09:31:50Z

Branch: refs/heads/1076884
Home: https://github.com/bluez/bluez
Commit: 672b3bb43bec919cdb4bf2d27bd9c983aa37ebb7
https://github.com/bluez/bluez/commit/672b3bb43bec919cdb4bf2d27bd9c983aa37ebb7
Author: Martin BTS <martinbts@gmx.net>
Date: 2026-04-03 (Fri, 03 Apr 2026)

Changed paths:
M peripheral/gatt.c
M src/device.c
M src/device.h
M src/shared/gatt-client.c
M src/shared/gatt-client.h
M tools/btgatt-client.c
M unit/test-bap.c
M unit/test-gatt.c
M unit/test-gmap.c
M unit/test-mcp.c
M unit/test-micp.c
M unit/test-tmap.c

Log Message:
-----------
shared/gatt: Add skip_secondary option for GATT client

Some BLE devices reject or ignore secondary service discovery requests,
causing ATT timeouts that terminate the connection. Add a skip_secondary
parameter to bt_gatt_client_new() that skips the secondary service
discovery step during GATT client initialization. Add
btd_device_set_skip_secondary() so device-specific plugins can enable
this. All existing callers pass false (no behavior change).

Commit: 870484f24c73a98e8c3bd4c9f8d49b499eced638
https://github.com/bluez/bluez/commit/870484f24c73a98e8c3bd4c9f8d49b499eced638
Author: Martin BTS <martinbts@gmx.net>
Date: 2026-04-03 (Fri, 03 Apr 2026)

Changed paths:
M src/shared/gatt-client.c

Log Message:
-----------
shared/gatt: Add timeout for secondary service discovery

Some BLE devices do not respond to secondary service discovery
requests, causing the 30-second ATT timeout to fire and terminate the
connection. Add a 2-second timeout at the GATT client level that
cancels the pending ATT request and proceeds as if no secondary
services were found. This prevents the ATT timeout from killing the
connection while still giving well-behaved devices enough time to
respond.

Commit: 9ac05f452d964d733e17247d6a45f632b921a252
https://github.com/bluez/bluez/commit/9ac05f452d964d733e17247d6a45f632b921a252
Author: Martin BTS <martinbts@gmx.net>
Date: 2026-04-03 (Fri, 03 Apr 2026)

Changed paths:
M src/device.c
M src/device.h

Log Message:
-----------
device: Rename set_alias to btd_device_set_alias()

Renamed set_alias is exposed, so that plugins and others may set
the device alias progammatically. This is usefule for devices whose
Bluetooth name is generic (e.g. a bare BD addess, or literally
"DeviceName") but whose identity is known to the plugin after
protocol-level interrogation.

The signature was changed. The first parameter,
GDBusPendingPropertySet id was dropped and
g_dbus_pending_property_success moved to dev_property_set_alias().

Commit: 65454bc5c4ef42b179a0433e4a5f02f62b92f513
https://github.com/bluez/bluez/commit/65454bc5c4ef42b179a0433e4a5f02f62b92f513
Author: Martin BTS <martinbts@gmx.net>
Date: 2026-04-03 (Fri, 03 Apr 2026)

Changed paths:
M src/dbus-common.c

Log Message:
-----------
dbus-common: Add Gaming appearance class (0x2a)

Bluetooth 5.0+ defines appearance category 0x2a for gaming devices
(generic gaming, handheld game console, game controller, etc.).
Map it to "input-gaming" so the correct icon is exposed over D-Bus.

Commit: 7f8dc9a767b694ac50ab16ba304ef05e5693a7f6
https://github.com/bluez/bluez/commit/7f8dc9a767b694ac50ab16ba304ef05e5693a7f6
Author: Martin BTS <martinbts@gmx.net>
Date: 2026-04-03 (Fri, 03 Apr 2026)

Changed paths:
A plugins/gatt-uhid.c
A plugins/gatt-uhid.h
M src/shared/gatt-client.h

Log Message:
-----------
plugins/gatt-uhid: Add generic GATT-to-UHID bridge

Add a reusable bridge that creates a /dev/uhid device backed by BLE
GATT characteristics. It forwards GATT notifications as HID input
reports (UHID_INPUT2) and HID output reports (UHID_OUTPUT) back as
GATT write-without-response commands.

Report format (both directions):
byte 0: HID report ID (0x01)
byte 1-2: GATT handle, little-endian
byte 3+: payload

The bridge has no device-specific knowledge. It subscribes to all
notify-capable GATT characteristics passed by the caller and generates
a vendor-defined HID descriptor at runtime. A kernel HID driver matched
by vendor/product ID provides all protocol handling.

Input forwarding is gated on CCCD subscription completion: the bridge
suppresses UHID_INPUT2 writes until all GATT notification registrations
are confirmed, ensuring the kernel driver's output path is fully
operational before it receives any input events.

Commit: 275d48e314f59257b9b461e2f2ba9c18fb62c224
https://github.com/bluez/bluez/commit/275d48e314f59257b9b461e2f2ba9c18fb62c224
Author: Martin BTS <martinbts@gmx.net>
Date: 2026-04-03 (Fri, 03 Apr 2026)

Changed paths:
M Makefile.plugins
A plugins/switch2.c

Log Message:
-----------
plugins/switch2: Add Nintendo Switch 2 Controller plugin

Thin device-specific wrapper around the generic GATT-UHID bridge for
Nintendo Switch 2 controllers (Pro Controller 2, Joy-Con 2 L/R,
GameCube Controller).

The plugin handles:
- Profile registration with the Switch 2 GATT service UUID
- Dynamic GATT characteristic discovery (all notify handles)
- Controller type detection from product ID
- Vendor/product IDs and payload sizes for uhid device creation
- Low-latency connection parameters and BT_SECURITY_LOW
- Skip secondary service discovery (controller rejects it)

All protocol knowledge (init handshake, calibration, stick normalization,
button mapping, rumble) is delegated to a matched kernel HID driver.
The plugin itself contains no Nintendo protocol logic.

Compare: https://github.com/bluez/bluez/compare/672b3bb43bec%5E...275d48e314f5

To unsubscribe from these emails, change your notification settings at https://github.com/bluez/bluez/settings/notifications