[RFC 09/16] android: Add adapter and device struct for BlueZ daemon

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Andrei Emeltchenko <andrei.emeltchenko@xxxxxxxxx>

Adapter structure in BlueZ daemon keeps track of default adapter
and device structure keeps track about found devices.
---
 android/bt_adapter.c |  129 ++++++++++++++++++++++++++++++++++++++++++++++++++
 android/bt_adapter.h |   68 ++++++++++++++++++++++++++
 2 files changed, 197 insertions(+)
 create mode 100644 android/bt_adapter.c
 create mode 100644 android/bt_adapter.h

diff --git a/android/bt_adapter.c b/android/bt_adapter.c
new file mode 100644
index 0000000..9f64839
--- /dev/null
+++ b/android/bt_adapter.c
@@ -0,0 +1,129 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2013  Intel Corporation. All rights reserved.
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include "bt_adapter.h"
+#include "log.h"
+#include "src/shared/mgmt.h"
+
+struct bt_device *bt_device_ref(struct bt_device *device)
+{
+	DBG("");
+
+	__sync_fetch_and_add(&device->refcnt, 1);
+
+	return device;
+}
+
+void bt_device_unref(struct bt_device *device)
+{
+	DBG("");
+
+	if (__sync_sub_and_fetch(&device->refcnt, 1))
+		return;
+
+	/* TODO: */
+	DBG("%s: Freeing device %p name %s", __func__, device, device->name);
+
+	free(device->name);
+	free(device);
+}
+
+struct bt_adapter *bt_adapter_lookup(uint16_t index)
+{
+	GList *list;
+
+	for (list = g_list_first(adapter_list); list;
+						list = g_list_next(list)) {
+		struct bt_adapter *adapter = list->data;
+
+		if (adapter->dev_id == index)
+			return adapter;
+	}
+
+	return NULL;
+}
+
+struct bt_adapter *bt_adapter_ref(struct bt_adapter *adapter)
+{
+	DBG("");
+
+	__sync_fetch_and_add(&adapter->refcnt, 1);
+
+	return adapter;
+}
+
+static void bt_adapter_free(struct bt_adapter *adapter)
+{
+	DBG("");
+
+	while (adapter->found_devices) {
+		struct bt_device *device = adapter->found_devices->data;
+
+		adapter->found_devices = g_list_remove(adapter->found_devices,
+								device);
+		bt_device_unref(device);
+	}
+
+	mgmt_unref(adapter->mgmt);
+	free(adapter);
+}
+
+void bt_adapter_unref(struct bt_adapter *adapter)
+{
+	DBG("");
+
+	if (__sync_sub_and_fetch(&adapter->refcnt, 1))
+		return;
+
+	bt_adapter_free(adapter);
+}
+
+struct bt_adapter *bt_adapter_new(uint16_t index, struct mgmt *mgmt_if)
+{
+	struct bt_adapter *adapter;
+
+	adapter = g_try_new0(struct bt_adapter, 1);
+	if (!adapter)
+		return NULL;
+
+	adapter->dev_id = index;
+	adapter->mgmt = mgmt_ref(mgmt_if);
+
+	return bt_adapter_ref(adapter);
+}
+
+void adapter_start(struct bt_adapter *adapter)
+{
+	DBG("enabled %u", adapter->dev_id);
+
+	/* TODO: CB: report scan mode */
+
+	/* TODO: SDP start here */
+
+	/* TODO: CB: report state on */
+}
+
+void adapter_stop(struct bt_adapter *adapter)
+{
+	DBG("disabled %u", adapter->dev_id);
+}
diff --git a/android/bt_adapter.h b/android/bt_adapter.h
new file mode 100644
index 0000000..5634729
--- /dev/null
+++ b/android/bt_adapter.h
@@ -0,0 +1,68 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2013  Intel Corporation. All rights reserved.
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <glib.h>
+
+#include "lib/bluetooth.h"
+
+struct bt_device {
+	int refcnt;
+
+	bdaddr_t bdaddr;
+	uint8_t bdaddr_type;
+	uint32_t cod;
+	char *name;
+};
+
+struct bt_adapter {
+	int refcnt;
+
+	uint16_t dev_id;
+	struct mgmt *mgmt;
+	bdaddr_t bdaddr;
+	uint32_t dev_class;
+
+	char *name;
+	char *short_name;
+
+	uint32_t supported_settings;
+	uint32_t current_settings;
+
+	GList *found_devices;
+};
+
+extern GList *adapter_list;
+
+struct bt_adapter *bt_adapter_lookup(uint16_t index);
+struct bt_adapter *bt_adapter_ref(struct bt_adapter *adapter);
+void bt_adapter_unref(struct bt_adapter *adapter);
+struct bt_adapter *bt_adapter_new(uint16_t index, struct mgmt *mgmt_if);
+
+struct bt_device *bt_device_ref(struct bt_device *device);
+void bt_device_unref(struct bt_device *device);
+
+void adapter_start(struct bt_adapter *adapter);
+void adapter_stop(struct bt_adapter *adapter);
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux