Skip to content

winebth.sys part 12: Introduce support for Low Energy GATT services

Vibhav Pant requested to merge vibhavp/wine:vibhavp/winebth-sys-part-12 into master

Generic ATTribute Profile (GATT) is a protocol used by BLE devices for data exchange. Broadly, every LE device contains one or more GATT services, with each service having multiple characteristics, which contain the actual piece of data to be exchanged. The Win32 BLE api is defined in bluetoothleapis.h, and operates on HANDLEs to PDOs created by the driver to remote devices and services, using the GUID_BLUETOOTHLE_DEVICE_INTERFACE and GUID_BLUETOOTH_GATT_SERVICE_DEVICE_INTERFACE class interfaces respectively.

This MR introduces initial support for accessing GATT services on LE devices:

  • Create PDOs for remote devices that we discover GATT services on, and enabling GUID_BLUETOOTHLE_DEVICE_INTERFACE for them.
    • Because the driver also creates PDOs for bluetooth radios, a tagged union is used to distinguish between device extension values to dispatch IOCTL and PnP IRPs appropriately.
  • Enumerate through all org.bluez.GattService1 objects on BlueZ, and store them on the PE driver inside the associated devices.
  • Implement IOCTL_WINEBTH_LE_DEVICE_GET_GATT_SERVICES for device PDOs.
  • Use the newly added IOCTL to implement BluetoothGATTGetServices.
Edited by Vibhav Pant

Merge request reports

Loading