<?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>nrf54l15-dk + Long Range + Pawr</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/119546/nrf54l15-dk-long-range-pawr</link><description>Hi,Team, 
 I am developing Long Range and Pawr using nrf54l15-dk. 
 For the Long Range example I refer to E:\NCS\v2.8.0\nrf\samples\bluetooth\central_and_peripheral_hr and peripheral_hr_coded. 
 For the Pawr example I refer to E:\NCS\v2.8.0\zephyr\samples</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 06 Mar 2025 09:47:15 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/119546/nrf54l15-dk-long-range-pawr" /><item><title>RE: nrf54l15-dk + Long Range + Pawr</title><link>https://devzone.nordicsemi.com/thread/526114?ContentTypeID=1</link><pubDate>Thu, 06 Mar 2025 09:47:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f9def7af-a0d1-4614-bdd7-7028bd123425</guid><dc:creator>dede</dc:creator><description>&lt;p&gt;&lt;span style="vertical-align:inherit;"&gt;&lt;span style="vertical-align:inherit;"&gt;Hi,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Timeout printing is a feature added to my application.&lt;br /&gt;In the periodic_adv_rsp project I wrote the template you provided, and then retested it, but the result was still an error: Timed out while synchronizing. Failed to start advertising set (err -120).&lt;/p&gt;
&lt;p&gt;Maybe it&amp;#39;s a broadcast configuration problem? I don&amp;#39;t know how to check, can you check the sample configuration for periodic_adv_rsp and periodic_sync_rsp?&lt;/p&gt;
&lt;p&gt;Here is some of the code for the periodic_adv_rsp example that I have changed:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;int main(void)
{
	int err;
	struct bt_le_ext_adv *pawr_adv;
	struct bt_gatt_discover_params discover_params;
	struct bt_gatt_write_params write_params;
	struct pawr_timing sync_config;

	
	err = dk_leds_init();
	if (err) {
		printk(&amp;quot;LEDs init failed (err %d)\n&amp;quot;, err);
		return -1;
	}
	init_bufs();
	printk(&amp;quot;Starting Periodic Advertising Demo\n&amp;quot;);

	/* Initialize the Bluetooth Subsystem */
	err = bt_enable(NULL);
	if (err) {
		printk(&amp;quot;Bluetooth init failed (err %d)\n&amp;quot;, err);
		return 0;
	}
		struct bt_le_adv_param param =
		BT_LE_ADV_PARAM_INIT(BT_LE_ADV_OPT_CONNECTABLE |
				     BT_LE_ADV_OPT_EXT_ADV |
				     BT_LE_ADV_OPT_CODED,
				     BT_GAP_ADV_FAST_INT_MIN_2,
				     BT_GAP_ADV_FAST_INT_MAX_2,
				     NULL);
	
	err = bt_le_ext_adv_create(BT_LE_EXT_ADV_CODED_NCONN, &amp;amp;adv_cb, &amp;amp;pawr_adv);
	//err = bt_le_ext_adv_create(&amp;amp;param,  &amp;amp;adv_cb, &amp;amp;pawr_adv);
	if (err) {
		printk(&amp;quot;Failed to create advertising set (err %d)\n&amp;quot;, err);
		return 0;
	}
	printk(&amp;quot;Created adv: %p\n&amp;quot;, pawr_adv);
	
	// 设置广播数据
	err = bt_le_ext_adv_set_data(pawr_adv, ad, ARRAY_SIZE(ad), NULL, 0);
	if (err) {
		printk(&amp;quot;Failed to set advertising data (err %d)\n&amp;quot;, err);
		return err;
	}

	/* Set periodic advertising parameters */
	err = bt_le_per_adv_set_param(pawr_adv, &amp;amp;per_adv_params);
	if (err) {
		printk(&amp;quot;Failed to set periodic advertising parameters (err %d)\n&amp;quot;, err);
		return 0;
	}

	
	/* Enable Periodic Advertising */
	// printk(&amp;quot;Start Periodic Advertising\n&amp;quot;);
	// err = bt_le_per_adv_start(pawr_adv);
	// if (err) {
	// 	printk(&amp;quot;Failed to enable periodic advertising (err %d)\n&amp;quot;, err);
	// 	return 0;
	// }
	static bool periodic_adv_started = false;

	if (!periodic_adv_started) {
		err = bt_le_per_adv_start(pawr_adv);
		if (err &amp;amp;&amp;amp; err != -EALREADY) {
			printk(&amp;quot;Failed to start periodic advertising (err %d)\n&amp;quot;, err);
			return 0;
		}
		periodic_adv_started = true;
	}
	// 启动扩展广播
	printk(&amp;quot;Start Extended Advertising\n&amp;quot;);
	err = bt_le_ext_adv_start(pawr_adv, BT_LE_EXT_ADV_START_DEFAULT);
	if (err) {
		printk(&amp;quot;Failed to start extended advertising (err %d)\n&amp;quot;, err);
		return 0;
	}

	struct bt_le_scan_param scan_param = {
		.type     = BT_LE_SCAN_TYPE_ACTIVE,
		.interval = BT_GAP_SCAN_FAST_INTERVAL,
		.window   = BT_GAP_SCAN_FAST_WINDOW,
		.options  = BT_LE_SCAN_OPT_CODED | BT_LE_SCAN_OPT_NO_1M
	};

	struct bt_scan_init_param scan_init = {
		.connect_if_match = 0,
		.scan_param = &amp;amp;scan_param,
		.conn_param = NULL
	};

	bt_scan_init(&amp;amp;scan_init);
	bt_scan_cb_register(&amp;amp;scan_cb);


	while (num_synced &amp;lt; MAX_SYNCS) {
		/* Enable continuous scanning BT_LE_SCAN_PASSIVE_CONTINUOUS*/		  
		err = bt_le_scan_start(BT_LE_SCAN_PASSIVE_CONTINUOUS, device_found);
		if (err) {
			printk(&amp;quot;Scanning failed to start (err %d)\n&amp;quot;, err);
			return 0;
		}

		printk(&amp;quot;Scanning successfully started\n&amp;quot;);

		k_sem_take(&amp;amp;sem_connected, K_FOREVER);
	
		err = bt_le_per_adv_set_info_transfer(pawr_adv, default_conn, 0);
		if (err) {
			printk(&amp;quot;Failed to send PAST (err %d)\n&amp;quot;, err);

			goto disconnect;
		}

		printk(&amp;quot;PAST sent\n&amp;quot;);

		discover_params.uuid = &amp;amp;pawr_char_uuid.uuid;
		discover_params.func = discover_func;
		discover_params.start_handle = BT_ATT_FIRST_ATTRIBUTE_HANDLE;
		discover_params.end_handle = BT_ATT_LAST_ATTRIBUTE_HANDLE;
		discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC;
		err = bt_gatt_discover(default_conn, &amp;amp;discover_params);
		if (err) {
			printk(&amp;quot;Discovery failed (err %d)\n&amp;quot;, err);

			goto disconnect;
		}

		printk(&amp;quot;Discovery started\n&amp;quot;);

		err = k_sem_take(&amp;amp;sem_discovered, K_SECONDS(10));
		if (err) {
			printk(&amp;quot;Timed out during GATT discovery\n&amp;quot;);

			goto disconnect;
		}

		sync_config.subevent =  num_synced; //% NUM_SUBEVENTS;
		sync_config.response_slot = num_synced; /// NUM_RSP_SLOTS;
		num_synced++;

		write_params.func = write_func;
		write_params.handle = pawr_attr_handle;
		write_params.offset = 0;
		write_params.data = &amp;amp;sync_config;
		write_params.length = sizeof(sync_config);

		err = bt_gatt_write(default_conn, &amp;amp;write_params);
		if (err) {
			printk(&amp;quot;Write failed (err %d)\n&amp;quot;, err);
			num_synced--;

			goto disconnect;
		}

		printk(&amp;quot;Write started\n&amp;quot;);

		err = k_sem_take(&amp;amp;sem_written, K_SECONDS(10));
		if (err) {
			printk(&amp;quot;Timed out during GATT write\n&amp;quot;);
			num_synced--;

			goto disconnect;
		}

		printk(&amp;quot;PAwR config written to sync %d, disconnecting\n&amp;quot;, num_synced - 1);

disconnect:
		/* Adding delay (2ms * interval value, using 2ms intead of the 1.25ms
		 * used by controller) to ensure sync is established before
		 * disconnection.
		 */
		k_sleep(K_MSEC(per_adv_params.interval_max * 2));

		err = bt_conn_disconnect(default_conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN);
		if (err) {
			return 0;
		}

		k_sem_take(&amp;amp;sem_disconnected, K_FOREVER);
	}

	printk(&amp;quot;Maximum numnber of syncs onboarded\n&amp;quot;);

	while (true) {
		k_sleep(K_SECONDS(1));
	}

	return 0;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align:inherit;"&gt;&lt;span style="vertical-align:inherit;"&gt;Thanks.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf54l15-dk + Long Range + Pawr</title><link>https://devzone.nordicsemi.com/thread/526107?ContentTypeID=1</link><pubDate>Thu, 06 Mar 2025 09:18:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2534b68a-3edb-47ac-bb87-6fd2864d53e7</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;The main issue you have seems to be connected to this error&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Failed to start advertising set (err -120)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The timeout print is something your application have added?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;error -120 (-EALREADY) means that the operation is already in progress or has been started previously. This suggests that periodic advertising synchronization or extended advertising was already started and let it continue if you get the error -120, causing the failure.&lt;/p&gt;
&lt;p&gt;Whenever you start periodic advertising check if it already, you can use this template check for instance.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;static bool periodic_adv_started = false;

if (!periodic_adv_started) {
    err = bt_le_per_adv_start(adv);
    if (err &amp;amp;&amp;amp; err != -EALREADY) {
        printk(&amp;quot;Failed to start periodic advertising (err %d)\n&amp;quot;, err);
        return 0;
    }
    periodic_adv_started = true;
}
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>