[PATCH BlueZ 2/2] adapter: add a btd_create_stored_device() call

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

 



Add a new btd_* call to add a new device to the database of known
devices.

This is particularly useful to register Bluetooth devices using
a non-Bluetooth mechanism (e.g. USB-pairing in the case of Playstation
peripherals).

The interface uses a btd_ prefix and relies only on native C types in
order to be more easily used by _external_ plugins.

External plugins can only use symbols marked as "global" in
src/bluetooth.ver, this patch avoids making global these symbols:

  store_sdp_record
  str2ba
  adapter_get_device
  device_set_name
  device_set_temporary
  device_set_trusted
---
 src/adapter.h |   11 +++++++++++
 src/adapter.c |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+)

diff --git a/src/adapter.h b/src/adapter.h
index cb6d0d6..13aadb5 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -207,3 +207,14 @@ void adapter_store_cached_name(const bdaddr_t *local, const bdaddr_t *peer,
 void btd_adapter_for_each_device(struct btd_adapter *adapter,
 			void (*cb)(struct btd_device *device, void *data),
 			void *data);
+
+int btd_create_stored_device(char *adapter_address,
+			     char *device_address,
+			     char *name,
+			     uint16_t vendor_id_source,
+			     uint16_t vendor_id,
+			     uint16_t product_id,
+			     uint16_t version_id,
+			     const char *uuid,
+			     char *sdp_record,
+			     bool trusted);
diff --git a/src/adapter.c b/src/adapter.c
index 5eac84f..7aee8f3 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6196,3 +6196,55 @@ void adapter_shutdown(void)
 	if (!adapter_remaining)
 		btd_exit();
 }
+
+int btd_create_stored_device(char *adapter_address,
+			     char *device_address,
+			     char *name,
+			     uint16_t vendor_id_source,
+			     uint16_t vendor_id,
+			     uint16_t product_id,
+			     uint16_t version_id,
+			     const char *uuid,
+			     char *sdp_record,
+			     bool trusted)
+{
+	struct btd_adapter *adapter;
+	struct btd_device *device;
+	bdaddr_t dst;
+	int ret = 0;
+
+	store_sdp_record(adapter_address, device_address, 0x10000, sdp_record);
+
+	str2ba(device_address, &dst);
+
+	adapter = btd_adapter_get_default();
+	if (adapter == NULL) {
+		DBG("Failed to get the adapter");
+		ret = -EPERM;
+		goto out;
+	}
+
+	/* This will create the device if necessary */
+	device = adapter_get_device(adapter, &dst, BDADDR_BREDR);
+	if (device == NULL) {
+		DBG("Failed to get the device");
+		ret = -ENODEV;
+		goto out;
+	}
+
+	if (name)
+		device_set_name(device, name);
+
+	btd_device_set_pnpid(device, vendor_id_source,
+			vendor_id, product_id, version_id);
+
+	if (uuid)
+		btd_device_add_uuid(device, uuid);
+
+	device_set_temporary(device, FALSE);
+
+	if (trusted)
+		device_set_trusted(device, TRUE);
+out:
+	return ret;
+}
-- 
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