<?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>nRF52 SDK peripheral is not connecting to nRF-Connect SDK central device</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/102784/nrf52-sdk-peripheral-is-not-connecting-to-nrf-connect-sdk-central-device</link><description>Hi Devzone, 
 I have both nRF52 SDK(central and peripheral) and nRF-Connect SDK(central and peripheral) devices, The devices are connecting and communicating with their own SDK. However, I&amp;#39;m unable to connect nRF52 SDK peripheral to nRF-Connect SDK central</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 18 Aug 2023 09:21:20 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/102784/nrf52-sdk-peripheral-is-not-connecting-to-nrf-connect-sdk-central-device" /><item><title>RE: nRF52 SDK peripheral is not connecting to nRF-Connect SDK central device</title><link>https://devzone.nordicsemi.com/thread/442041?ContentTypeID=1</link><pubDate>Fri, 18 Aug 2023 09:21:20 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f1996a49-eea8-44a1-8415-f7ed124f58f0</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Kumar,&amp;nbsp;&lt;br /&gt;Please try capture a &lt;a href="https://www.nordicsemi.com/Products/Development-tools/nrf-sniffer-for-bluetooth-le"&gt;sniffer trace.&amp;nbsp;&lt;/a&gt;&lt;br /&gt;It&amp;#39;s most likely that the central (scanner) didn&amp;#39;t enable notification on the peer.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can use the sniffer trace and compare what you have when testing the firmware on the same SDK vs testing between nRF5SDK and nRFConnect SDK.&lt;br /&gt;You can find a tutorial on how to use the sniffer trace &lt;a href="https://academy.nordicsemi.com/courses/bluetooth-low-energy-fundamentals/lessons/lesson-6-bluetooth-le-sniffer/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 SDK peripheral is not connecting to nRF-Connect SDK central device</title><link>https://devzone.nordicsemi.com/thread/441993?ContentTypeID=1</link><pubDate>Fri, 18 Aug 2023 04:34:11 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1a640e4c-5077-44ae-af6c-1917f172b00d</guid><dc:creator>Theja</dc:creator><description>&lt;p&gt;Hi Hung Bui,&lt;/p&gt;
&lt;p&gt;Thanks for the reply,&lt;/p&gt;
&lt;p&gt;As of now I&amp;#39;m able to connect between&amp;nbsp;&lt;span&gt;nRF52 SDK peripheral to nRF-Connect SDK central device by changing security parameters to NULL but whatever data I&amp;nbsp;send through peripheral I&amp;#39;m not able to receive in scanner.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;here is scanner code snippet&amp;nbsp;&lt;pre class="ui-code" data-mode="text"&gt;
static void discovery_complete(struct bt_gatt_dm *dm,
							   void *context)
{
	struct bt_nus_client *nus = context;
	LOG_INF(&amp;quot;Service discovery completed&amp;quot;);

	bt_gatt_dm_data_print(dm);

	bt_nus_handles_assign(dm, nus);
	bt_nus_subscribe_receive(nus);

	bt_gatt_dm_data_release(dm);

	
	send_through_uart(&amp;quot;Service discovery completed\n&amp;quot;);
}

static void discovery_service_not_found(struct bt_conn *conn,
										void *context)
{
	LOG_INF(&amp;quot;Service not found&amp;quot;);

	send_through_uart(&amp;quot;Service not found\n&amp;quot;);
}

static void discovery_error(struct bt_conn *conn,
							int err,
							void *context)
{
	LOG_WRN(&amp;quot;Error while discovering GATT database: (%d)&amp;quot;, err);

	send_through_uart(&amp;quot;Error while discovering GATT database:\n&amp;quot;);
}

struct bt_gatt_dm_cb discovery_cb = {
	.completed = discovery_complete,
	.service_not_found = discovery_service_not_found,
	.error_found = discovery_error,
};

static void gatt_discover(struct bt_conn *conn)
{
	int err;

	if (conn != default_conn)
	{
		return;
	}

	err = bt_gatt_dm_start(conn,
						   BT_UUID_NUS_SERVICE,
						   &amp;amp;discovery_cb,
						   &amp;amp;nus_client);
	if (err)
	{
		LOG_ERR(&amp;quot;could not start the discovery procedure, error &amp;quot;
				&amp;quot;code: %d&amp;quot;,
				err);

		send_through_uart(&amp;quot;could not start the discovery procedure\n&amp;quot;);
	}
}

static void exchange_func(struct bt_conn *conn, uint8_t err, struct bt_gatt_exchange_params *params)
{
	if (!err)
	{
		LOG_INF(&amp;quot;MTU exchange done&amp;quot;);

		send_through_uart(&amp;quot;MTU exchange done\n&amp;quot;);
	}
	else
	{
		LOG_WRN(&amp;quot;MTU exchange failed (err %&amp;quot; PRIu8 &amp;quot;)&amp;quot;, err);

		send_through_uart(&amp;quot;MTU exchange failed1\n&amp;quot;);
	}
}

static void connected(struct bt_conn *conn, uint8_t conn_err)
{

	int err;
	
	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

	if (conn_err)
	{
		LOG_INF(&amp;quot;Failed to connect to %s (%d)&amp;quot;, addr, conn_err);

		send_through_uart(&amp;quot;Failed to connect to\n&amp;quot;);

		if (default_conn == conn)
		{
			bt_conn_unref(default_conn);
			default_conn = NULL;

			err = bt_scan_start(BT_SCAN_TYPE_SCAN_ACTIVE);
			if (err)
			{
				LOG_ERR(&amp;quot;Scanning failed to start (err %d)&amp;quot;,
						err);

				send_through_uart(&amp;quot;Scanning failed to start\n&amp;quot;);
			}
		}

		return;
	}

	LOG_INF(&amp;quot;Connected: %s&amp;quot;, addr);

	send_through_uart(&amp;quot;Connected\n&amp;quot;);

	static struct bt_gatt_exchange_params exchange_params;

	exchange_params.func = exchange_func;
	err = bt_gatt_exchange_mtu(conn, &amp;amp;exchange_params);
	if (err)
	{
		LOG_WRN(&amp;quot;MTU exchange failed (err %d)&amp;quot;, err);

		send_through_uart(&amp;quot;MTU exchange failed2\n&amp;quot;);
	}

	// TODO: commented now
	err = bt_conn_set_security(conn, BT_SECURITY_L0);     //BT_SECURITY_L2
	if (err)
	{
		LOG_WRN(&amp;quot;Failed to set security: %d&amp;quot;, err);

		send_through_uart(&amp;quot;Failed to set security\n&amp;quot;);

		gatt_discover(conn);
	}

	// TODO: newly added
	gatt_discover(conn);


	err = bt_scan_stop();
	if ((!err) &amp;amp;&amp;amp; (err != -EALREADY))
	{
		LOG_ERR(&amp;quot;Stop LE scan failed (err %d)&amp;quot;, err);

		send_through_uart(&amp;quot;Stop LE scan failed\n&amp;quot;);
	}
}

static void disconnected(struct bt_conn *conn, uint8_t reason)
{
	char addr[BT_ADDR_LE_STR_LEN];
	int err;

	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

	LOG_INF(&amp;quot;Disconnected: %s (reason %u)&amp;quot;, addr, reason);

	uint8_t buffer_t[100] = {&amp;#39;\0&amp;#39;};
	sprintf(buffer_t, &amp;quot;Disconnected: %s (reason %u)&amp;quot;, addr, reason);

	send_through_uart(buffer_t);

	if (default_conn != conn)
	{
		return;
	}

	bt_conn_unref(default_conn);
	default_conn = NULL;

	err = bt_scan_start(BT_SCAN_TYPE_SCAN_ACTIVE);
	if (err)
	{
		LOG_ERR(&amp;quot;Scanning failed to start (err %d)&amp;quot;,
				err);

		send_through_uart(&amp;quot;Scanning failed to start\n&amp;quot;);		
	}
}

static void security_changed(struct bt_conn *conn, bt_security_t level,
							 enum bt_security_err err)
{
	uint8_t ddata[100] = {&amp;#39;\0&amp;#39;};
	char addr[BT_ADDR_LE_STR_LEN];

	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

	if (!err)
	{
		LOG_INF(&amp;quot;Security changed: %s level %u&amp;quot;, addr, level);

		send_through_uart(&amp;quot;Security changed:\n&amp;quot;);
	}
	else
	{
		LOG_WRN(&amp;quot;Security failed: %s level %u err %d&amp;quot;, addr,
				level, err);

		sprintf(ddata, &amp;quot;Security failed: %s level %u err %d\n&amp;quot;, addr, level, err);
		send_through_uart(ddata);
	}

	gatt_discover(conn);
}

BT_CONN_CB_DEFINE(conn_callbacks) = {
	.connected = connected,
	.disconnected = disconnected,

	// TODO: commented now
	.security_changed = security_changed
	};

static void scan_filter_match(struct bt_scan_device_info *device_info,
							  struct bt_scan_filter_match *filter_match,
							  bool connectable)
{
	char addr[BT_ADDR_LE_STR_LEN];

	bt_addr_le_to_str(device_info-&amp;gt;recv_info-&amp;gt;addr, addr, sizeof(addr));

	LOG_INF(&amp;quot;Filters matched. Address: %s connectable: %d&amp;quot;,
			addr, connectable);

	send_through_uart(&amp;quot;Filters matched\n&amp;quot;);
}

static void scan_connecting_error(struct bt_scan_device_info *device_info)
{
	LOG_WRN(&amp;quot;Connecting failed&amp;quot;);

	send_through_uart(&amp;quot;Connecting failed\n&amp;quot;);
}

static void scan_connecting(struct bt_scan_device_info *device_info,
							struct bt_conn *conn)
{
	default_conn = bt_conn_ref(conn);
}

static int nus_client_init(void)
{
	int err;
	struct bt_nus_client_init_param init = {
		.cb = {
			.received = ble_data_received,
			.sent = ble_data_sent,
		}};

	err = bt_nus_client_init(&amp;amp;nus_client, &amp;amp;init);
	if (err)
	{
		LOG_ERR(&amp;quot;NUS Client initialization failed (err %d)&amp;quot;, err);

		send_through_uart(&amp;quot;NUS Client initialization failed\n&amp;quot;);

		return err;
	}

	LOG_INF(&amp;quot;NUS Client module initialized&amp;quot;);

	send_through_uart(&amp;quot;NUS Client module initialized\n&amp;quot;);

	return err;
}

BT_SCAN_CB_INIT(scan_cb, scan_filter_match, NULL,
				scan_connecting_error, scan_connecting);

static int scan_init(void)
{
	int err;
		// TODO:need to un comment that
		// struct bt_scan_init_param scan_init = {
		// 	.connect_if_match = 1,
		// };

	 struct bt_scan_init_param scan_init = {
        .scan_param = &amp;amp;scan1_param,
		.connect_if_match = 1,
		.conn_param = &amp;amp;conn1_param,
	};

	bt_scan_init(&amp;amp;scan_init);
	bt_scan_cb_register(&amp;amp;scan_cb);

	err = bt_scan_filter_add(BT_SCAN_FILTER_TYPE_UUID, BT_UUID_NUS_SERVICE);
	if (err)
	{
		LOG_ERR(&amp;quot;Scanning filters cannot be set (err %d)&amp;quot;, err);

		send_through_uart(&amp;quot;Scanning filters cannot be set\n&amp;quot;);

		return err;
	}

	err = bt_scan_filter_enable(BT_SCAN_UUID_FILTER, false);
	if (err)
	{
		LOG_ERR(&amp;quot;Filters cannot be turned on (err %d)&amp;quot;, err);

		send_through_uart(&amp;quot;Filters cannot be turned on\n&amp;quot;);

		return err;
	}

	LOG_INF(&amp;quot;Scan module initialized&amp;quot;);

	send_through_uart(&amp;quot;Scan module initialized\n&amp;quot;);

	return err;
}

static void auth_cancel(struct bt_conn *conn)
{
	char addr[BT_ADDR_LE_STR_LEN];

	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

	LOG_INF(&amp;quot;Pairing cancelled: %s&amp;quot;, addr);

	send_through_uart(&amp;quot;Pairing cancelled:\n&amp;quot;);
}

static void pairing_complete(struct bt_conn *conn, bool bonded)
{
	char addr[BT_ADDR_LE_STR_LEN];

	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

	LOG_INF(&amp;quot;Pairing completed: %s, bonded: %d&amp;quot;, addr, bonded);

	send_through_uart(&amp;quot;Pairing completed: , bonded\n&amp;quot;);
}

static void pairing_failed(struct bt_conn *conn, enum bt_security_err reason)
{
	char addr[BT_ADDR_LE_STR_LEN];

	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

	LOG_WRN(&amp;quot;Pairing failed conn: %s, reason %d&amp;quot;, addr, reason);

	send_through_uart(&amp;quot;Pairing failed conn:\n&amp;quot;);
}

static struct bt_conn_auth_cb conn_auth_callbacks = {
	.cancel = auth_cancel,

	// TODO: changed
	.passkey_display = NULL,
	.passkey_confirm = NULL,
	.pairing_confirm = NULL,
};

static struct bt_conn_auth_info_cb conn_auth_info_callbacks = {
	.pairing_complete = pairing_complete,
	.pairing_failed = pairing_failed};

void bluetooth_init(void)
{
	int err;

	// TODO: commented Now
	err = bt_conn_auth_cb_register(&amp;amp;conn_auth_callbacks);
	if (err)
	{
		LOG_ERR(&amp;quot;Failed to register authorization callbacks.&amp;quot;);

		send_through_uart(&amp;quot;Failed to register authorization callbacks.\n&amp;quot;);
		return;
	}

	err = bt_conn_auth_info_cb_register(&amp;amp;conn_auth_info_callbacks);
	if (err)
	{
		printk(&amp;quot;Failed to register authorization info callbacks.\n&amp;quot;);

		send_through_uart(&amp;quot;Failed to register authorization info callbacks.\n&amp;quot;);
		return;
	}

	err = bt_enable(NULL);
	if (err)
	{
		LOG_ERR(&amp;quot;Bluetooth init failed (err %d)&amp;quot;, err);

		send_through_uart(&amp;quot;Bluetooth init failed\n&amp;quot;);
		return;
	}
	LOG_INF(&amp;quot;Bluetooth initialized&amp;quot;);

	send_through_uart(&amp;quot;Bluetooth initialized\n&amp;quot;);

	if (IS_ENABLED(CONFIG_SETTINGS))
	{
		settings_load();
	}
}

void scan_start(void)
{
	int err;
	err = bt_scan_start(BT_SCAN_TYPE_SCAN_ACTIVE);
	if (err)
	{
		LOG_ERR(&amp;quot;Scanning failed to start (err %d)&amp;quot;, err);

		send_through_uart(&amp;quot;Scanning failed to start \n&amp;quot;);
		return;
	}
	else
	{
		send_through_uart(&amp;quot;Scanning started\n&amp;quot;);
	}
}
&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Scanner can able do MTU exchange and service discovery but it not receiving data, here is debug prints prints&amp;nbsp;&lt;pre class="ui-code" data-mode="text"&gt;18-08-2023 10:01:04.668 [RX] - &amp;lt;NUL&amp;gt;*** Booting Zephyr OS build v3.2.99-ncs2 ***&amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt;

18-08-2023 10:01:08.046 [RX] - Bluetooth initialized&amp;lt;LF&amp;gt;
Scan module initialized&amp;lt;LF&amp;gt;
NUS Client module initialized&amp;lt;LF&amp;gt;
GND Scanner Application Started&amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt;
TIME:UTC&amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt;

18-08-2023 10:01:12.880 [RX] - TIME:ACK&amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt;
Scanning started&amp;lt;LF&amp;gt;

18-08-2023 10:01:20.195 [RX] - Filters matched&amp;lt;LF&amp;gt;
Connected&amp;lt;LF&amp;gt;
MTU exchange done&amp;lt;LF&amp;gt;
Service discovery completed&amp;lt;LF&amp;gt;

18-08-2023 10:01:22.192 [RX] - Disconnected: FF:15:11:11:11:C3 (random) (reason 19)&lt;/pre&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;after sending data from peripheral I&amp;#39;m disconnecting from peripheral side that data I&amp;#39;m not able to see in scanner.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF52 SDK peripheral is not connecting to nRF-Connect SDK central device</title><link>https://devzone.nordicsemi.com/thread/441129?ContentTypeID=1</link><pubDate>Mon, 14 Aug 2023 11:18:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a454f06c-a9c1-4e0b-ba7a-4d878986adf8</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Kumar,&lt;/p&gt;
&lt;p&gt;It&amp;#39;s pretty strange. They should be compatible.&amp;nbsp;&lt;br /&gt;Could you try to do only scanning and no connecting. Just to see if you can scan the advertising packet of nRF5 SDK advertiser on NCS&amp;nbsp; scanner.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After that if you can see the advertising packet, you can try to connect. If it doesn&amp;#39;t work check if you receive a timeout.&lt;/p&gt;
&lt;p&gt;Also use nRF Sniffer and check if you see any connect request sent from the scanner.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Please try to test using some simple application in our SDK, for example peripheral lbs and central lbs (ble_app_blinky and ble_app_blinky_c)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>