<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bluetooth Observer Parse Advertising Manufacturing Data?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/111698/bluetooth-observer-parse-advertising-manufacturing-data</link><description>Hi, 
 Before, posting I tried this post below, but it did not work for me. It did not print the manufacturing data. 
 https://devzone.nordicsemi.com/f/nordic-q-a/84753/scan-and-parse-manufacturer-specific-data-zephyr/353544#353544 
 This is my device</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 31 May 2024 12:29:46 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/111698/bluetooth-observer-parse-advertising-manufacturing-data" /><item><title>RE: Bluetooth Observer Parse Advertising Manufacturing Data?</title><link>https://devzone.nordicsemi.com/thread/486901?ContentTypeID=1</link><pubDate>Fri, 31 May 2024 12:29:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0c9864dd-d12e-4bed-910a-0ac469adbb62</guid><dc:creator>mtrobregado</dc:creator><description>&lt;p&gt;Hi Vidar,&lt;/p&gt;
&lt;p&gt;It worked following the answer in this post below. But, I think I would need to implement filtering.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/86216/no-mfg-data-during-scan-response-when-bt_data_parse"&gt;https://devzone.nordicsemi.com/f/nordic-q-a/86216/no-mfg-data-during-scan-response-when-bt_data_parse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Markel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Bluetooth Observer Parse Advertising Manufacturing Data?</title><link>https://devzone.nordicsemi.com/thread/486864?ContentTypeID=1</link><pubDate>Fri, 31 May 2024 10:52:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:13419a70-ae5d-4117-bf76-13f974427483</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Hello Markel,&lt;/p&gt;
[quote userid="128695" url="~/f/nordic-q-a/111698/bluetooth-observer-parse-advertising-manufacturing-data/486854"]It is not possible with current code. The call of bt_data_parse() within scan_recv() is only 1 times.[/quote]
&lt;p&gt;I&amp;#39;m not sure I follow. Did you change the callback function to return &amp;#39;True&amp;#39; on BT_DATA_NAME_COMPLETE as I suggested?&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Vidar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Bluetooth Observer Parse Advertising Manufacturing Data?</title><link>https://devzone.nordicsemi.com/thread/486854?ContentTypeID=1</link><pubDate>Fri, 31 May 2024 10:31:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:94f22680-df9e-4b22-aca3-716733f7c560</guid><dc:creator>mtrobregado</dc:creator><description>&lt;p&gt;Hi Vidar,&lt;/p&gt;
&lt;p&gt;It is not possible with current code. The call of bt_data_parse() within scan_recv() is only 1 times. Is there an example program where I can get the advertisement data&amp;nbsp;which includes the&amp;nbsp;manufacturing data.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static void scan_recv(const struct bt_le_scan_recv_info *info,
		      struct net_buf_simple *buf)
{
	char le_addr[BT_ADDR_LE_STR_LEN];
	char name[NAME_LEN];
	uint8_t data_status;
	uint16_t data_len;	

	(void)memset(name, 0, sizeof(name));

	data_len = buf-&amp;gt;len;
	bt_data_parse(buf, data_cb, name);
	
	data_status = BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS(info-&amp;gt;adv_props);
   
	bt_addr_le_to_str(info-&amp;gt;addr, le_addr, sizeof(le_addr));
	printk(&amp;quot;[DEVICE]: %s, AD evt type %u, Tx Pwr: %i, RSSI %i &amp;quot;
	       &amp;quot;Data status: %u, AD data len: %u Name: %s &amp;quot;
	       &amp;quot;C:%u S:%u D:%u SR:%u E:%u Pri PHY: %s, Sec PHY: %s, &amp;quot;
	       &amp;quot;Interval: 0x%04x (%u ms), SID: %u\n&amp;quot;,
	       le_addr, info-&amp;gt;adv_type, info-&amp;gt;tx_power, info-&amp;gt;rssi,
	       data_status, data_len, name,
	       (info-&amp;gt;adv_props &amp;amp; BT_GAP_ADV_PROP_CONNECTABLE) != 0,
	       (info-&amp;gt;adv_props &amp;amp; BT_GAP_ADV_PROP_SCANNABLE) != 0,
	       (info-&amp;gt;adv_props &amp;amp; BT_GAP_ADV_PROP_DIRECTED) != 0,
	       (info-&amp;gt;adv_props &amp;amp; BT_GAP_ADV_PROP_SCAN_RESPONSE) != 0,
	       (info-&amp;gt;adv_props &amp;amp; BT_GAP_ADV_PROP_EXT_ADV) != 0,
	       phy2str(info-&amp;gt;primary_phy), phy2str(info-&amp;gt;secondary_phy),
	       info-&amp;gt;interval, info-&amp;gt;interval * 5 / 4, info-&amp;gt;sid);
		   
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I have a working Bluetooth Broadcaster running on nRF52840 DK with advertisement data below.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/* Define and initialize a variable of type adv_mfg_data_type */
static adv_mfg_data_type adv_mfg_data = {COMPANY_ID_CODE, 0x00, 0x00, 0x00, 0x00, 0x00};

static unsigned char url_data[] = { };

LOG_MODULE_REGISTER(Scoreboard, LOG_LEVEL_INF);

static const struct bt_data ad[] = {
	BT_DATA_BYTES(BT_DATA_FLAGS, BT_LE_AD_NO_BREDR),
	BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
	/* Include the Manufacturer Specific Data in the advertising packet. */
	BT_DATA(BT_DATA_MANUFACTURER_DATA, (unsigned char *)&amp;amp;adv_mfg_data, sizeof(adv_mfg_data)),
};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I need to parse this advertisement data at another nRF52840 DK with Bluetooth Observer code running. I already ordered the nRF52840 DK and will arrive next week.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Markel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Bluetooth Observer Parse Advertising Manufacturing Data?</title><link>https://devzone.nordicsemi.com/thread/486835?ContentTypeID=1</link><pubDate>Fri, 31 May 2024 09:22:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:66eac8d4-1156-4c88-8599-b0c7d51492c6</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Hello Markel,&lt;/p&gt;
[quote user=""]At data_cb the set&amp;nbsp;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;type is&amp;nbsp;&lt;/span&gt;BT_DATA_NAME_COMPLETE. There is no option to set the data-&amp;gt;type to&amp;nbsp;BT_DATA_MANUFACTURER_DATA. That is why I am unable to receive the manufacturer data.[/quote]
&lt;p&gt;The sample you are working on is only looking for the device name, but it should not be a problem to expand it to also look for the BT_DATA_MANUFACTURER_DATA field in the payload. However, you need to return &amp;#39;true&amp;#39; if the advertisement name is found to continue parsing the payload.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static bool data_cb(struct bt_data *data, void *user_data)
{
	char *name = user_data;
	uint8_t len;

	switch (data-&amp;gt;type) {
	case BT_DATA_MANUFACTURER_DATA:
		printk(&amp;quot;Found manuf. data\n);
		len = MIN(data-&amp;gt;data_len, NAME_LEN - 1);
		memcpy(name, data-&amp;gt;data, len);
		name[len] = &amp;#39;\0&amp;#39;;
	return false;

	case BT_DATA_NAME_SHORTENED:

	case BT_DATA_NAME_COMPLETE:
		len = MIN(data-&amp;gt;data_len, NAME_LEN - 1);
		(void)memcpy(name, data-&amp;gt;data, len);
		name[len] = &amp;#39;\0&amp;#39;;
		return true;

	default:
		return true;
	}
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Vidar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>