Hi
I have worked out a patch to fix bug 1608. I added the DeviceCreated signal 
handler to create the PAN network. Currently Bluez can not send DeviceCreated 
signal when creating device from storage. I have worked out a patch to fix the 
issue and send it to Bluez community to review. So this patch depends on the 
bluez patch.

diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index 1607ca7..04fc311 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -49,6 +49,7 @@
 #define PROPERTY_CHANGED               "PropertyChanged"
 #define GET_PROPERTIES                 "GetProperties"
 #define SET_PROPERTY                   "SetProperty"
+#define DEVICE_CREATED                 "DeviceCreated"
 
 #define CONNECT                                "Connect"
 #define DISCONNECT                     "Disconnect"
@@ -669,6 +670,37 @@ static void remove_adapter(DBusConnection *connection, 
const char *path)
        connman_device_unref(adapter);
 }
 
+static void create_device(const char *path)
+{
+       struct connman_device *adapter;
+       struct connman_network *network;
+       char *node, *adapter_path;
+
+       DBG("path %s", path);
+
+       adapter_path = g_dirname(path);
+       adapter = find_adapter(adapter_path);
+       if (adapter == NULL)
+               return;
+
+       node = g_basename(path);
+
+       network = connman_device_get_network(adapter, node);
+       if (network != NULL)
+               return;
+
+       network = connman_network_create(node,
+                                       CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN);
+       if (network == NULL)
+               return;
+
+       connman_network_set_protocol(network, CONNMAN_NETWORK_PROTOCOL_IP);
+
+       connman_network_set_string(network, "Node", path);
+
+       connman_device_add_network(adapter, network);
+}
+
 static void list_adapters_reply(DBusPendingCall *call, void *user_data)
 {
        DBusConnection *connection = user_data;
@@ -766,6 +798,13 @@ static DBusHandlerResult bluetooth_signal(DBusConnection 
*connection,
                                        DBUS_TYPE_OBJECT_PATH, &path,
                                                        DBUS_TYPE_INVALID);
                remove_adapter(connection, path);
+       } else if (dbus_message_is_signal(message, BLUEZ_ADAPTER_INTERFACE,
+                                               DEVICE_CREATED) == TRUE) {
+               const char *path;
+               dbus_message_get_args(message, NULL,
+                                       DBUS_TYPE_OBJECT_PATH, &path,
+                                                       DBUS_TYPE_INVALID);
+               create_device(path);
        }
 
        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
@@ -782,6 +821,9 @@ static const char *removed_rule = "type=signal,member=" 
ADAPTER_REMOVED
 static const char *adapter_rule = "type=signal,member=" PROPERTY_CHANGED
                                        ",interface=" BLUEZ_ADAPTER_INTERFACE;
 
+static const char *device_rule = "type=signal,member=" DEVICE_CREATED
+                                       ",interface=" BLUEZ_ADAPTER_INTERFACE;
+
 static int bluetooth_init(void)
 {
        int err = -EIO;
@@ -819,6 +861,8 @@ static int bluetooth_init(void)
        dbus_bus_add_match(connection, added_rule, NULL);
        dbus_bus_add_match(connection, removed_rule, NULL);
        dbus_bus_add_match(connection, adapter_rule, NULL);
+       dbus_bus_add_match(connection, device_rule, NULL);
+
        dbus_connection_flush(connection);
 
        return 0;
_______________________________________________
connman mailing list
[email protected]
https://lists.moblin.org/mailman/listinfo/connman

Reply via email to