Improve pair_two
When pair_two
is run multiple times in a row, BlueZ may fail to correctly
remove the previous pairing if a signal occurs between the RemoveDevice
call and its reply:
‣ Type=method_call Endian=l Flags=0 Version=1 Cookie=4
Sender=:1.569 Destination=org.bluez Path=/org/bluez/hci0 Interface=org.bluez.Adapter1 Member=RemoveDevice
UniqueName=:1.569
MESSAGE "o" {
OBJECT_PATH "/org/bluez/hci0/dev_5C_F3_70_02_35_F9";
};
‣ Type=signal Endian=l Flags=1 Version=1 Cookie=4722
Sender=:1.18 Path=/org/bluez/hci0/dev_5C_F3_70_02_35_F9 Interface=org.freedesktop.DBus.Properties Member=PropertiesChanged
UniqueName=:1.18
MESSAGE "sa{sv}as" {
STRING "org.bluez.Device1";
ARRAY "{sv}" {
DICT_ENTRY "sv" {
STRING "ServicesResolved";
VARIANT "b" {
BOOLEAN false;
};
};
};
ARRAY "s" {
};
};
‣ Type=method_return Endian=l Flags=1 Version=1 Cookie=4723 ReplyCookie=4
Sender=:1.18 Destination=:1.569
UniqueName=:1.18
MESSAGE "" {
};
instead of:
‣ Type=method_call Endian=l Flags=0 Version=1 Cookie=14
Sender=:1.569 Destination=org.bluez Path=/org/bluez/hci0 Interface=org.bluez.Adapter1 Member=RemoveDevice
UniqueName=:1.569
MESSAGE "o" {
OBJECT_PATH "/org/bluez/hci0/dev_5C_F3_70_02_35_F9";
};
‣ Type=signal Endian=l Flags=1 Version=1 Cookie=4740
Sender=:1.18 Path=/ Interface=org.freedesktop.DBus.ObjectManager Member=InterfacesRemoved
UniqueName=:1.18
MESSAGE "oas" {
OBJECT_PATH "/org/bluez/hci0/dev_5C_F3_70_02_35_F9";
ARRAY "s" {
STRING "org.freedesktop.DBus.Properties";
STRING "org.freedesktop.DBus.Introspectable";
STRING "org.bluez.Device1";
STRING "org.bluez.MediaControl1";
};
};
‣ Type=method_return Endian=l Flags=1 Version=1 Cookie=4741 ReplyCookie=14
Sender=:1.18 Destination=:1.569
UniqueName=:1.18
MESSAGE "" {
};
In this case pair_two
never receives the InterfacesAdded
for the
slave_device.
Luckily, pair_two
still receives PropertiesChanged
signals for the
slave_device and it can force removal of this device so there's a chance
to get the InterfacesAdded
signal and trigger the pairing.
Signed-off-by: Frédéric Danis frederic.danis@collabora.com