[PATCH] Fix PTS DID test case TP/SDI/BV-03-I

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

 



Now it's allowed to specify arbitrary vendor ID assigner in main.conf
file to be able verify PTS against DID test case TP/SDI/BV-03-I.
Available supported vendor assigner's are: BT SIG (0x1) and
USB Implementer's Forum (0x2).
---
 src/hcid.h         |    2 +-
 src/main.conf      |    7 ++++---
 src/sdpd-server.c  |   18 +++++++-----------
 src/sdpd-service.c |   14 +++++++++++---
 src/sdpd.h         |    4 ++--
 5 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/hcid.h b/src/hcid.h
index ea038e9..60e0ede 100644
--- a/src/hcid.h
+++ b/src/hcid.h
@@ -42,7 +42,7 @@ struct main_opts {
 
 	uint8_t		mode;
 	uint8_t		discov_interval;
-	char		deviceid[15]; /* FIXME: */
+	char		deviceid[20]; /* FIXME: */
 };
 
 enum {
diff --git a/src/main.conf b/src/main.conf
index 8cd132f..76779ba 100644
--- a/src/main.conf
+++ b/src/main.conf
@@ -37,9 +37,10 @@ InitiallyPowered = true
 # Remember the previously stored Powered state when initializing adapters
 RememberPowered = true
 
-# Use vendor, product and version information for DID profile support.
-# The values are separated by ":" and VID, PID and version.
-#DeviceID = 1234:5678:abcd
+# Use vendor assigner, vendor, product and version information for DID profile
+# support. The values are separated by ":" and VID assigner, VID, PID and
+# version. The values need to be in hex format.
+#DeviceID = 2:1234:5678:abcd
 
 # Do reverse service discovery for previously unknown devices that connect to
 # us. This option is really only needed for qualification since the BITE tester
diff --git a/src/sdpd-server.c b/src/sdpd-server.c
index a92ae2c..e54c397 100644
--- a/src/sdpd-server.c
+++ b/src/sdpd-server.c
@@ -241,17 +241,13 @@ int start_sdp_server(uint16_t mtu, const char *did, uint32_t flags)
 	}
 
 	if (did && strlen(did) > 0) {
-		const char *ptr = did;
-		uint16_t vid = 0x0000, pid = 0x0000, ver = 0x0000;
-
-		vid = (uint16_t) strtol(ptr, NULL, 16);
-		ptr = strchr(ptr, ':');
-		if (ptr) {
-			pid = (uint16_t) strtol(ptr + 1, NULL, 16);
-			ptr = strchr(ptr + 1, ':');
-			if (ptr)
-				ver = (uint16_t) strtol(ptr + 1, NULL, 16);
-			register_device_id(vid, pid, ver);
+		uint16_t vid = 0x0000, pid = 0x0000, ver = 0x0000, vid_assigner = 0x0000;
+		int result = EOF;
+		result = sscanf(did, "%4hx:%4hx:%4hx:%4hx", &vid_assigner, &vid, &pid, &ver);
+		if (result != EOF && result > 3) {
+			register_device_id(vid_assigner, vid, pid, ver);
+		} else {
+			info("DeviceID record not registered");
 		}
 	}
 
diff --git a/src/sdpd-service.c b/src/sdpd-service.c
index de11562..86f7d73 100644
--- a/src/sdpd-service.c
+++ b/src/sdpd-service.c
@@ -172,8 +172,8 @@ void register_server_service(void)
 	update_db_timestamp();
 }
 
-void register_device_id(const uint16_t vendor, const uint16_t product,
-						const uint16_t version)
+void register_device_id(const uint16_t vendor_assigner, const uint16_t vendor,
+                        const uint16_t product, const uint16_t version)
 {
 	const uint16_t spec = 0x0102, source = 0x0002;
 	const uint8_t primary = 1;
@@ -225,7 +225,15 @@ void register_device_id(const uint16_t vendor, const uint16_t product,
 	primary_data = sdp_data_alloc(SDP_BOOL, &primary);
 	sdp_attr_add(record, 0x0204, primary_data);
 
-	source_data = sdp_data_alloc(SDP_UINT16, &source);
+	/* check whether config's vendor ID assigner is valid
+	 * 0x0001 - BT SIG vendor id assigner
+	 * 0x0002 - USB Implementer's forum vendor id assigner (here default)
+	 */
+	if (vendor_assigner > 0 &&  vendor_assigner < 3)
+		source_data = sdp_data_alloc(SDP_UINT16, &vendor_assigner);
+	else
+		source_data = sdp_data_alloc(SDP_UINT16, &source);
+
 	sdp_attr_add(record, 0x0205, source_data);
 
 	update_db_timestamp();
diff --git a/src/sdpd.h b/src/sdpd.h
index 9f5415f..5ad44b2 100644
--- a/src/sdpd.h
+++ b/src/sdpd.h
@@ -53,8 +53,8 @@ int service_remove_req(sdp_req_t *req, sdp_buf_t *rsp);
 
 void register_public_browse_group(void);
 void register_server_service(void);
-void register_device_id(const uint16_t vendor, const uint16_t product,
-						const uint16_t version);
+void register_device_id(const uint16_t vendor_assigner, const uint16_t vendor,
+                        const uint16_t product, const uint16_t version);
 
 int record_sort(const void *r1, const void *r2);
 void sdp_svcdb_reset(void);
-- 
1.7.6.433.g1421f

--
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