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