From: Vibhav Pant vibhavp@gmail.com
--- dlls/winebth.sys/dbus.c | 20 ++++++++++++++++++++ dlls/winebth.sys/winebth.c | 6 ++++++ dlls/winebth.sys/winebth_priv.h | 13 +++++++++---- 3 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/dlls/winebth.sys/dbus.c b/dlls/winebth.sys/dbus.c index d8a4247d453..bebe11e4f2b 100644 --- a/dlls/winebth.sys/dbus.c +++ b/dlls/winebth.sys/dbus.c @@ -524,6 +524,26 @@ static void bluez_device_prop_from_dict_entry( const char *prop_name, DBusMessag parse_mac_address( addr_str, props->address.rgBytes ); *props_mask |= WINEBLUETOOTH_DEVICE_PROPERTY_ADDRESS; } + else if (wanted_props_mask & WINEBLUETOOTH_DEVICE_PROPERTY_CONNECTED && + !strcmp( prop_name, "Connected" ) && + p_dbus_message_iter_get_arg_type( variant ) == DBUS_TYPE_BOOLEAN) + { + dbus_bool_t connected; + + p_dbus_message_iter_get_basic( variant, &connected ); + props->connected = !!connected; + *props_mask |= WINEBLUETOOTH_DEVICE_PROPERTY_CONNECTED; + } + else if (wanted_props_mask & WINEBLUETOOTH_DEVICE_PROPERTY_PAIRED && + !strcmp( prop_name, "Paired" ) && + p_dbus_message_iter_get_arg_type( variant ) == DBUS_TYPE_BOOLEAN) + { + dbus_bool_t paired; + + p_dbus_message_iter_get_basic( variant, &paired ); + props->paired = !!paired; + *props_mask |= WINEBLUETOOTH_DEVICE_PROPERTY_PAIRED; + } }
static NTSTATUS bluez_adapter_get_props_async( void *connection, const char *radio_object_path, diff --git a/dlls/winebth.sys/winebth.c b/dlls/winebth.sys/winebth.c index 5d1f128c491..5c0376c4324 100644 --- a/dlls/winebth.sys/winebth.c +++ b/dlls/winebth.sys/winebth.c @@ -193,6 +193,12 @@ static NTSTATUS WINAPI dispatch_bluetooth( DEVICE_OBJECT *device, IRP *irp ) info->flags |= BDIF_ADDRESS; info->address = RtlUlonglongByteSwap( device->props.address.ullLong ); } + if (device->props_mask & WINEBLUETOOTH_DEVICE_PROPERTY_CONNECTED && + device->props.connected) + info->flags |= BDIF_CONNECTED; + if (device->props_mask & WINEBLUETOOTH_DEVICE_PROPERTY_PAIRED && + device->props.paired) + info->flags |= (BDIF_PAIRED | BDIF_PERSONAL); LeaveCriticalSection( &device->props_cs );
irp->IoStatus.Information += sizeof( *info ); diff --git a/dlls/winebth.sys/winebth_priv.h b/dlls/winebth.sys/winebth_priv.h index cdedea7bab1..0646a18409f 100644 --- a/dlls/winebth.sys/winebth_priv.h +++ b/dlls/winebth.sys/winebth_priv.h @@ -140,11 +140,14 @@ typedef struct
typedef UINT16 winebluetooth_device_props_mask_t;
-#define WINEBLUETOOTH_DEVICE_PROPERTY_NAME (1) -#define WINEBLUETOOTH_DEVICE_PROPERTY_ADDRESS (1 << 1) +#define WINEBLUETOOTH_DEVICE_PROPERTY_NAME (1) +#define WINEBLUETOOTH_DEVICE_PROPERTY_ADDRESS (1 << 1) +#define WINEBLUETOOTH_DEVICE_PROPERTY_CONNECTED (1 << 2) +#define WINEBLUETOOTH_DEVICE_PROPERTY_PAIRED (1 << 3)
-#define WINEBLUETOOTH_DEVICE_ALL_PROPERTIES \ - (WINEBLUETOOTH_DEVICE_PROPERTY_NAME | WINEBLUETOOTH_DEVICE_PROPERTY_ADDRESS) +#define WINEBLUETOOTH_DEVICE_ALL_PROPERTIES \ + (WINEBLUETOOTH_DEVICE_PROPERTY_NAME | WINEBLUETOOTH_DEVICE_PROPERTY_ADDRESS | \ + WINEBLUETOOTH_DEVICE_PROPERTY_CONNECTED | WINEBLUETOOTH_DEVICE_PROPERTY_PAIRED)
union winebluetooth_property { @@ -171,6 +174,8 @@ struct winebluetooth_device_properties { BLUETOOTH_ADDRESS address; CHAR name[BLUETOOTH_MAX_NAME_SIZE]; + BOOL connected; + BOOL paired; };
NTSTATUS winebluetooth_radio_get_unique_name( winebluetooth_radio_t radio, char *name,