<?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>Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/115738/issue-with-the-auto-connect-feature</link><description>Hi, 
 I&amp;#39;m developing a BLE Central using a nRF52840 DK. My project goal is to analyze the quality and the robustness of a peripheral&amp;#39;s BLE connection. 
 For some parts of my testing procedure, I need the central to automatically reconnect to the peripheral</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 30 Jan 2025 08:20:36 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/115738/issue-with-the-auto-connect-feature" /><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/520649?ContentTypeID=1</link><pubDate>Thu, 30 Jan 2025 08:20:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a6973e6c-ce09-4212-bad7-fdabc36e1d07</guid><dc:creator>Edvin</dc:creator><description>[quote user="dario.sortino"]I am not using the auto conn feature[/quote]
&lt;p&gt;In that case, this is not related. Please create a new ticket, including a description of your issue, and what HW you are using.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/520305?ContentTypeID=1</link><pubDate>Tue, 28 Jan 2025 07:54:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f487f491-686a-459e-b4e6-4cd35d800a7c</guid><dc:creator>dario.sortino</dc:creator><description>&lt;p&gt;Does anyone have some update about this? I am also experiencing a problem in which the disconnection callback in my central, sometimes,&amp;nbsp; is not called when&amp;nbsp;the peripheral disconnects. Thus creating a problem in reconnecting to the same peripheral as above (connection already existed), even If i unreference the connection.&lt;br /&gt;&lt;br /&gt;I am not using the auto conn feature and. I&amp;#39;m doing pretty much what have been done in the&amp;nbsp;&lt;a href="https://github.com/NordicMatt/multi-NUS"&gt;https://github.com/NordicMatt/multi-NUS &lt;/a&gt;sample.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m on NCS 2.6.0&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/511485?ContentTypeID=1</link><pubDate>Thu, 21 Nov 2024 13:04:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:41a3a6ce-0c12-484f-8154-bf83f721b12d</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;I see the same output as you do when running the &amp;quot;nrf_sniffer_ble.bat --extcap-interfaces&amp;quot;.&lt;/p&gt;
&lt;p&gt;But it doesn&amp;#39;t show up as a device in Wireshark?&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1732188580435v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;What happens if you try to select one of the USBPcap1 or USBPcap2?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BR,&lt;br /&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/511120?ContentTypeID=1</link><pubDate>Tue, 19 Nov 2024 14:15:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6022ac5f-8c26-494f-8246-9219b80267b2</guid><dc:creator>Victor Groux</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;I reinstall J-Link, using the version v7.88j and the link you provided. It did not solve the issue.&lt;/p&gt;
&lt;p&gt;I tried with three different devkits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2x &lt;strong&gt;nRF52840 DK&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;1x &lt;strong&gt;nRF52840-Preview-DK&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I flashed the .hex file named &amp;quot;&lt;strong&gt;sniffer_nrf52840dk_nrf52840_4.1.1.hex&lt;/strong&gt;&amp;quot; on the three previously said devkit.&lt;/p&gt;
&lt;p&gt;I connected a terminal to the devkit through the COM port, I did see some values, absolutely not human readable, but at least this means&amp;nbsp;that the devkits was running.&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Victor&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/510912?ContentTypeID=1</link><pubDate>Mon, 18 Nov 2024 14:13:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:127f829f-a4a5-4a8d-a57e-62229766c6c6</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Can you please try to install jlink v7.88j, and make sure that you tick off this box when installing?&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1731939090011v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Then restart Wireshark after the installation is complete. The DK is programmed with the sniffer firmware, right? Try power cycling it after it is programmed, and plug it into the computer before you start wireshark. What are you using as your sniffer device? And which .hex file did you program onto it?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Please download JLink from here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.segger.com/downloads/jlink/?utm_medium=top_menu&amp;amp;utm_source=www"&gt;https://www.segger.com/downloads/jlink/?utm_medium=top_menu&amp;amp;utm_source=www&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/510317?ContentTypeID=1</link><pubDate>Wed, 13 Nov 2024 13:53:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:330e58ca-b776-4e7d-a9cf-63de327ca5cb</guid><dc:creator>Victor Groux</dc:creator><description>&lt;p&gt;I effectively deleted the bonded information on both devices at the same time.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m currently trying to install the nRF Sniffer following &lt;a href="https://docs.nordicsemi.com/bundle/nrfutil_ble_sniffer_pdf/resource/nRF_Sniffer_BLE_UG_v4.0.0.pdf"&gt;this guide&lt;/a&gt;. However,&amp;nbsp;I don&amp;#39;t see the nRF Sniffer interface in the start page of Wireshark (I did refresh multiple time, reopened Wireshark in normal user and in admin, verified that the extcap files from the nRF Sniffer are in the &amp;quot;Personal Extcap&amp;quot; folder, rebooted the computer).&lt;/p&gt;
&lt;p&gt;At page the end of page 8, when I need to run the nRF Sniffer Tool to list the available interfaces, I get 2 errors and the same string as presented in the guide (line 2 and 3):&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="bat"&gt;C:\NSS\Wireshark\extcap&amp;gt;nrf_sniffer_ble.bat --extcap-interfaces
C:\NSS\Wireshark\extcap\nrf_sniffer_ble.py:187: SyntaxWarning: invalid escape sequence &amp;#39;\s&amp;#39;
  &amp;quot;{validation=^\s*((37|38|39)\s*,\s*){0,2}(37|38|39){1}\s*$}{required=true}&amp;quot; % CTRL_ARG_ADVHOP)
C:\NSS\Wireshark\extcap\nrf_sniffer_ble.py:716: SyntaxWarning: invalid escape sequence &amp;#39;\s&amp;#39;
  m = re.search(&amp;quot;^\s*rssi\s*(&amp;gt;=?)\s*(-?[0-9]+)\s*$&amp;quot;, capture_filter, re.IGNORECASE)
  extcap {version=4.1.1}{display=nRF Sniffer for Bluetooth LE}{help=https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Sniffer-for-Bluetooth-LE}
interface {value=COM7-None}{display=nRF Sniffer for Bluetooth LE COM7}
control {number=0}{type=selector}{display=Device}{tooltip=Device list}
control {number=1}{type=selector}{display=Key}{tooltip=}
control {number=2}{type=string}{display=Value}{tooltip=6 digit passkey or 16 or 32 bytes encryption key in hexadecimal starting with &amp;#39;0x&amp;#39;, big endian format.If the entered key is shorter than 16 or 32 bytes, it will be zero-padded in front&amp;#39;}{validation=\b^(([0-9]{6})|(0x[0-9a-fA-F]{1,64})|([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2}) (public|random))$\b}
control {number=3}{type=string}{display=Adv Hop}{default=37,38,39}{tooltip=Advertising channel hop sequence. Change the order in which the sniffer switches advertising channels. Valid channels are 37, 38 and 39 separated by comma.}{validation=^\s*((37|38|39)\s*,\s*){0,2}(37|38|39){1}\s*$}{required=true}
control {number=7}{type=button}{display=Clear}{tooltop=Clear or remove device from Device list}
control {number=4}{type=button}{role=help}{display=Help}{tooltip=Access user guide (launches browser)}
control {number=5}{type=button}{role=restore}{display=Defaults}{tooltip=Resets the user interface and clears the log file}
control {number=6}{type=button}{role=logger}{display=Log}{tooltip=Log per interface}
value {control=0}{value= }{display=All advertising devices}{default=true}
value {control=0}{value=[00,00,00,00,00,00,0]}{display=Follow IRK}
value {control=1}{value=0}{display=Legacy Passkey}{default=true}
value {control=1}{value=1}{display=Legacy OOB data}
value {control=1}{value=2}{display=Legacy LTK}
value {control=1}{value=3}{display=SC LTK}
value {control=1}{value=4}{display=SC Private Key}
value {control=1}{value=5}{display=IRK}
value {control=1}{value=6}{display=Add LE address}
value {control=1}{value=7}{display=Follow LE address}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The string &amp;quot;interface&amp;quot; are correct, it show the right COM port on which is connected the DK with the sniffer firmware (Checked with the nRF Connect for VS code (I did not connect the VS terminal to the devkit)).&lt;/p&gt;
&lt;p&gt;I&amp;#39;m using Python 3.11.9&lt;/p&gt;
&lt;p&gt;This is the interface Wireshark provide on the start page:&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1731506179129v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;br /&gt;Victor&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/510246?ContentTypeID=1</link><pubDate>Wed, 13 Nov 2024 09:17:04 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:30e91c95-8827-49ef-9e40-0e396962dbce</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;So you deleted it on both the nRF and the peripheral at the same time?&lt;/p&gt;
&lt;p&gt;Can you please provide a sniffer trace? You can use the &lt;a href="https://www.nordicsemi.com/Products/Development-tools/nRF-Sniffer-for-Bluetooth-LE"&gt;nRF Sniffer for Bluetooth LE&lt;/a&gt;&amp;nbsp;for this. I am not sure if it helps, but it may give some hints about what&amp;#39;s going on. However, if all it says is that the peripheral decides to disconnect, then you need to talk to the developers of the peripheral and ask what it expects the central to behave like.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/510152?ContentTypeID=1</link><pubDate>Tue, 12 Nov 2024 15:00:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:272692cb-f02a-4625-89f7-d0644ece2f38</guid><dc:creator>Victor Groux</dc:creator><description>&lt;p&gt;I&amp;nbsp;deleted the bonding information after 3-4 tests in a row, it didn&amp;#39;t change the result.&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Victor&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/510121?ContentTypeID=1</link><pubDate>Tue, 12 Nov 2024 13:57:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4fae2472-aa9c-4aed-8a17-30280ef805b1</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;It is difficult to say why 3rd party devices decide to disconnect without access to their application. Do you have any way to &amp;quot;forget device&amp;quot; on the 3rd party device, which would mean to delete the bonding information? Perhaps it has old bonding data that is no longer present on the nRF, which can cause it to disconnect.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t know, but they may also decide to use the error BT_SECURITY_ERR_UNSPECIFIED, for all I know.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/509932?ContentTypeID=1</link><pubDate>Mon, 11 Nov 2024 14:48:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1b96555e-b1ac-46a6-be17-7c3b567f7a4e</guid><dc:creator>Victor Groux</dc:creator><description>&lt;p&gt;Hello Edvin,&lt;/p&gt;
&lt;p&gt;Thanks for this answer. Sorry for not writing back sooner.&lt;/p&gt;
&lt;p&gt;Sadly, I can&amp;#39;t provide you a sample for that peripheral, it is a third-party peripheral and I don&amp;#39;t have the source code myself.&lt;br /&gt;But I&amp;#39;m pretty sure that the disconnection every 30 seconds comes from the peripheral too. I suspect it because I do not have issue while using a phone as a peripheral (Asus Zenfone 9, Android 13, using nRF Connect for Mobile) but I do have issues with at least 3 third-party peripherals (mainly connected watches).&lt;/p&gt;
&lt;p&gt;I did know that without the bt_le_set_auto_conn, I need to unref the connection in the disconnected callback. In fact I did not restart the scanning phase because it&amp;#39;s &lt;a href="https://docs.zephyrproject.org/apidoc/latest/group__bt__conn.html#ga8eea2211705d0691acc6ee4e0c37a47a"&gt;disabling the auto connect feature&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Now I was trying to get rig of that bt_le_set_auto_conn feature and to implement it by hands:&lt;/p&gt;
&lt;p&gt;When receiving an advertisement, compare the address with the bonded addresses that my central has. If they are equal, the central will connect to it.&lt;/p&gt;
&lt;p&gt;I works perfectly with my phone, however when trying with the peripheral, I get an error on security changed (err 9) and the disconnection with 0x13 as a reason being&amp;nbsp;BT_HCI_ERR_REMOTE_USER_TERM_CON, that means the disconnection is the peripheral&amp;#39;s decision. The error 9 on security changed is &lt;a href="https://docs.zephyrproject.org/apidoc/latest/group__bt__conn.html#gaa9420ff489fd5857ff076406442679ff"&gt;BT_SECURITY_ERR_UNSPECIFIED&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To achieve that, I added a second scan, device found and parse data (+ one little function to&amp;nbsp; be used by bt_foreach_bond):&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static struct tmp_bond {
  const bt_addr_le_t *addr;
  struct net_buf_simple *ad;
};

static void auto_start_rescan(void);

static bool reparse_data_cb(struct bt_data *data, void *user_data)
{
  bt_addr_le_t *addr = user_data;
  char addr_peer[BT_ADDR_LE_STR_LEN];

  switch (data-&amp;gt;type)
  {
    case BT_DATA_NAME_SHORTENED:
    case BT_DATA_NAME_COMPLETE:
      bt_addr_le_to_str(addr, addr_peer, sizeof(addr_peer));
      ((uint8_t *)data-&amp;gt;data)[data-&amp;gt;data_len] = &amp;#39;\0&amp;#39;;
      LOG_ERR(&amp;quot;connect to %s&amp;quot;, data-&amp;gt;data);

      if (true)
      {
        int err = bt_le_scan_stop();
        if (err)
        {
          LOG_ERR(&amp;quot;Stop LE scan failed (err %d)&amp;quot;, err);
          return false;
        }

        struct bt_conn_le_create_param *create_param = BT_CONN_LE_CREATE_CONN;
        struct bt_le_conn_param *param = BT_LE_CONN_PARAM_DEFAULT;

        err = bt_conn_le_create(addr, create_param, param, &amp;amp;default_conn);
        if (err)
        {
          LOG_WRN(&amp;quot;Connection failed (err %d)&amp;quot;, err);
          auto_start_rescan();
        }
        return false;
      }
      break;
    default:
      return true;
  }
  return true;
}

static void parse_bond_cb(const struct bt_bond_info *info, void *user_data)
{
  struct tmp_bond *temp = (struct tmp_bond *)user_data;

  if (bt_addr_le_eq(&amp;amp;(info-&amp;gt;addr), temp-&amp;gt;addr))
    bt_data_parse(temp-&amp;gt;ad, reparse_data_cb, (void *)temp-&amp;gt;addr);
}

static void on_device_refound_cb(const bt_addr_le_t *addr, int8_t rssi, uint8_t type, struct net_buf_simple *ad)
{
  if (type == BT_GAP_ADV_TYPE_ADV_IND || type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND || type == BT_GAP_ADV_TYPE_EXT_ADV || type == BT_GAP_ADV_TYPE_SCAN_RSP)
  {
    if (rssi &amp;lt; 30)
    {
      struct tmp_bond temp;
      temp.addr = addr;
      temp.ad = ad;
      bt_foreach_bond(BT_ID_DEFAULT, parse_bond_cb, &amp;amp;temp);
    }
  }
}

static void auto_start_rescan(void)
{
  int err;

  struct bt_le_scan_param scan_param = {
    .type       = BT_LE_SCAN_TYPE_ACTIVE,
    .options    = BT_LE_SCAN_OPT_FILTER_DUPLICATE,
    .interval   = BT_GAP_SCAN_FAST_INTERVAL,
    .window     = BT_GAP_SCAN_FAST_WINDOW,
  };

  err = bt_le_scan_start(&amp;amp;scan_param, on_device_refound_cb);
  if (err) {
    LOG_ERR(&amp;quot;Scanning failed to start (err %d)&amp;quot;, err);
    return;
  }

  LOG_INF(&amp;quot;Scanning successfully started&amp;quot;);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I modified the disconnect callback to start this second scanning method:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static void disconnected_cb(struct bt_conn *conn, uint8_t reason)
{
  LOG_DBG(&amp;quot;Beginning disconnected_cb&amp;quot;);

  k_thread_abort(th_id_example);

  const bt_addr_le_t * addr = bt_conn_get_dst(conn);
  if (default_conn != conn)
    return;

  bt_conn_unref(default_conn);
  default_conn = NULL;

  LOG_INF(&amp;quot;Disconnected: %02X:%02X:%02X:%02X:%02X:%02X (reason 0x%02x)&amp;quot;, addr-&amp;gt;a.val[5], addr-&amp;gt;a.val[4], addr-&amp;gt;a.val[3], addr-&amp;gt;a.val[2], addr-&amp;gt;a.val[1], addr-&amp;gt;a.val[0], reason);

  auto_start_rescan();
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The sample in total:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;zephyr/types.h&amp;gt;
#include &amp;lt;stddef.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/device.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;zephyr/sys/util.h&amp;gt;
#include &amp;lt;zephyr/drivers/gpio.h&amp;gt;

#include &amp;lt;zephyr/logging/log.h&amp;gt;
#include &amp;lt;zephyr/logging/log_ctrl.h&amp;gt;

#include &amp;lt;zephyr/bluetooth/bluetooth.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/hci.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/conn.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/uuid.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/gatt.h&amp;gt;
#include &amp;lt;zephyr/sys/byteorder.h&amp;gt;

#define PERIPHERAL_TO_CONNECT_TO &amp;quot;MY_PERIPHERAL&amp;quot;

LOG_MODULE_REGISTER(main, LOG_LEVEL_DBG);

static struct bt_conn *default_conn;

#define THREAD_STACK_SIZE_EXAMPLE 1000
static k_tid_t th_id_example;
static struct k_thread th_data_example;
static K_THREAD_STACK_DEFINE(th_stack_example, THREAD_STACK_SIZE_EXAMPLE);

static void start_scan(void);

static struct tmp_bond {
  const bt_addr_le_t *addr;
  struct net_buf_simple *ad;
};

static void auto_start_rescan(void);

static bool reparse_data_cb(struct bt_data *data, void *user_data)
{
  bt_addr_le_t *addr = user_data;
  char addr_peer[BT_ADDR_LE_STR_LEN];

  switch (data-&amp;gt;type)
  {
    case BT_DATA_NAME_SHORTENED:
    case BT_DATA_NAME_COMPLETE:
      bt_addr_le_to_str(addr, addr_peer, sizeof(addr_peer));
      ((uint8_t *)data-&amp;gt;data)[data-&amp;gt;data_len] = &amp;#39;\0&amp;#39;;
      LOG_ERR(&amp;quot;connect to %s&amp;quot;, data-&amp;gt;data);

      if (true)
      {
        int err = bt_le_scan_stop();
        if (err)
        {
          LOG_ERR(&amp;quot;Stop LE scan failed (err %d)&amp;quot;, err);
          return false;
        }

        struct bt_conn_le_create_param *create_param = BT_CONN_LE_CREATE_CONN;
        struct bt_le_conn_param *param = BT_LE_CONN_PARAM_DEFAULT;

        err = bt_conn_le_create(addr, create_param, param, &amp;amp;default_conn);
        if (err)
        {
          LOG_WRN(&amp;quot;Connection failed (err %d)&amp;quot;, err);
          auto_start_rescan();
        }
        return false;
      }
      break;
    default:
      return true;
  }
  return true;
}

static void parse_bond_cb(const struct bt_bond_info *info, void *user_data)
{
  struct tmp_bond *temp = (struct tmp_bond *)user_data;

  if (bt_addr_le_eq(&amp;amp;(info-&amp;gt;addr), temp-&amp;gt;addr))
    bt_data_parse(temp-&amp;gt;ad, reparse_data_cb, (void *)temp-&amp;gt;addr);
}

static void on_device_refound_cb(const bt_addr_le_t *addr, int8_t rssi, uint8_t type, struct net_buf_simple *ad)
{
  if (type == BT_GAP_ADV_TYPE_ADV_IND || type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND || type == BT_GAP_ADV_TYPE_EXT_ADV || type == BT_GAP_ADV_TYPE_SCAN_RSP)
  {
    if (rssi &amp;lt; 30)
    {
      struct tmp_bond temp;
      temp.addr = addr;
      temp.ad = ad;
      bt_foreach_bond(BT_ID_DEFAULT, parse_bond_cb, &amp;amp;temp);
    }
  }
}

static void auto_start_rescan(void)
{
  int err;

  struct bt_le_scan_param scan_param = {
    .type       = BT_LE_SCAN_TYPE_ACTIVE,
    .options    = BT_LE_SCAN_OPT_FILTER_DUPLICATE,
    .interval   = BT_GAP_SCAN_FAST_INTERVAL,
    .window     = BT_GAP_SCAN_FAST_WINDOW,
  };

  err = bt_le_scan_start(&amp;amp;scan_param, on_device_refound_cb);
  if (err) {
    LOG_ERR(&amp;quot;Scanning failed to start (err %d)&amp;quot;, err);
    return;
  }

  LOG_INF(&amp;quot;Scanning successfully started&amp;quot;);
}

static bool parse_data_cb(struct bt_data *data, void *user_data)
{
  bt_addr_le_t *addr = user_data;

  switch (data-&amp;gt;type)
  {
    case BT_DATA_NAME_SHORTENED:
    case BT_DATA_NAME_COMPLETE:
      ((uint8_t *)data-&amp;gt;data)[data-&amp;gt;data_len] = &amp;#39;\0&amp;#39;;
      LOG_INF(&amp;quot;[DEVICE]: %02X:%02X:%02X:%02X:%02X:%02X\tDevice name: %s&amp;quot;, addr-&amp;gt;a.val[5], addr-&amp;gt;a.val[4], addr-&amp;gt;a.val[3], addr-&amp;gt;a.val[2], addr-&amp;gt;a.val[1], addr-&amp;gt;a.val[0], data-&amp;gt;data);
      if (strncmp(data-&amp;gt;data, PERIPHERAL_TO_CONNECT_TO, data-&amp;gt;data_len) == 0)
      {
        int err = bt_le_scan_stop();
        if (err)
        {
          LOG_ERR(&amp;quot;Stop LE scan failed (err %d)&amp;quot;, err);
          return false;
        }

        struct bt_conn_le_create_param *create_param = BT_CONN_LE_CREATE_CONN;
        struct bt_le_conn_param *param = BT_LE_CONN_PARAM_DEFAULT;

        err = bt_conn_le_create(addr, create_param, param, &amp;amp;default_conn);
        if (err)
        {
          LOG_WRN(&amp;quot;Connection failed (err %d)&amp;quot;, err);
          start_scan();
        }
        return false;
      }
      break;
    default:
      break;
  }
  return true;
}

static void on_device_found_cb(const bt_addr_le_t *addr, int8_t rssi, uint8_t type, struct net_buf_simple *ad)
{
  if (type == BT_GAP_ADV_TYPE_ADV_IND || type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND || type == BT_GAP_ADV_TYPE_EXT_ADV || type == BT_GAP_ADV_TYPE_SCAN_RSP)
  {
    if (rssi &amp;lt; -30)
    {
      bt_data_parse(ad, parse_data_cb, (void *)addr);
    }
  }
}

static void start_scan(void)
{
  int err;

  struct bt_le_scan_param scan_param = {
    .type       = BT_LE_SCAN_TYPE_ACTIVE,
    .options    = BT_LE_SCAN_OPT_NONE,
    .interval   = BT_GAP_SCAN_FAST_INTERVAL,
    .window     = BT_GAP_SCAN_FAST_WINDOW,
  };

  err = bt_le_scan_start(&amp;amp;scan_param, on_device_found_cb);
  if (err) {
    LOG_ERR(&amp;quot;Scanning failed to start (err %d)&amp;quot;, err);
    return;
  }

  LOG_INF(&amp;quot;Scanning successfully started&amp;quot;);
}

static enum bt_conn_state get_state(struct bt_conn *conn)
{
  struct bt_conn_info info;

  int err = bt_conn_get_info(conn, &amp;amp;info);
  if (err)
  {
    LOG_ERR(&amp;quot;Error: bt_conn_get_info() return %d&amp;quot;, err);
    return BT_CONN_STATE_DISCONNECTED;
  }
  return info.state;
}

static void thread_entrypoint_example(void *p1, void *p2, void *p3)
{
  struct bt_conn *conn = p1;

  while (1)
  {
    switch (get_state(conn))
    {
      case BT_CONN_STATE_CONNECTED:
        LOG_INF(&amp;quot;bla bla bla&amp;quot;);
        break;
      default:
        LOG_INF(&amp;quot;peer disconnected&amp;quot;);
        return;
    }
    k_sleep(K_SECONDS(1));
  }
}

static void connected_cb(struct bt_conn *conn, uint8_t conn_err)
{
  LOG_WRN(&amp;quot;CONNECTED CALLBACK !!!&amp;quot;);
  const bt_addr_le_t * addr = bt_conn_get_dst(conn);

  if (conn_err) {
    LOG_ERR(&amp;quot;Failed to connect to %02X:%02X:%02X:%02X:%02X:%02X (err %u)&amp;quot;, addr-&amp;gt;a.val[5], addr-&amp;gt;a.val[4], addr-&amp;gt;a.val[3], addr-&amp;gt;a.val[2], addr-&amp;gt;a.val[1], addr-&amp;gt;a.val[0], conn_err);

    bt_conn_unref(default_conn);
    default_conn = NULL;
    start_scan();
  }
  LOG_INF(&amp;quot;Connected: %02X:%02X:%02X:%02X:%02X:%02X&amp;quot;, addr-&amp;gt;a.val[5], addr-&amp;gt;a.val[4], addr-&amp;gt;a.val[3], addr-&amp;gt;a.val[2], addr-&amp;gt;a.val[1], addr-&amp;gt;a.val[0]);

  if (conn == default_conn)
  {
    switch (bt_conn_get_security(conn))
    {
      case BT_SECURITY_L0:
        LOG_WRN(&amp;quot;Security level 0&amp;quot;);
        break;
      case BT_SECURITY_L1:
        LOG_WRN(&amp;quot;Security level 1&amp;quot;);
        break;
      case BT_SECURITY_L2:
        LOG_WRN(&amp;quot;Security level 2&amp;quot;);
        break;
      case BT_SECURITY_L3:
        LOG_WRN(&amp;quot;Security level 3&amp;quot;);
        break;
      case BT_SECURITY_L4:
        LOG_WRN(&amp;quot;Security level 4&amp;quot;);
        break;
      default:
        LOG_WRN(&amp;quot;Security FORCE_PAIR&amp;quot;);
        break;
    }

    int err = bt_conn_set_security(conn, BT_SECURITY_L3);
    if (err)
      LOG_ERR(&amp;quot;Error while pairing %d&amp;quot;, err);

    th_id_example = k_thread_create(&amp;amp;th_data_example,
      th_stack_example,
      K_THREAD_STACK_SIZEOF(th_stack_example),
      thread_entrypoint_example,
      conn,
      NULL,
      NULL,
      K_PRIO_PREEMPT(1),
      0,
      K_NO_WAIT);
  }
}

static void disconnected_cb(struct bt_conn *conn, uint8_t reason)
{
  LOG_DBG(&amp;quot;Beginning disconnected_cb&amp;quot;);

  k_thread_abort(th_id_example);

  const bt_addr_le_t * addr = bt_conn_get_dst(conn);
  if (default_conn != conn)
    return;

  bt_conn_unref(default_conn);
  default_conn = NULL;

  LOG_INF(&amp;quot;Disconnected: %02X:%02X:%02X:%02X:%02X:%02X (reason 0x%02x)&amp;quot;, addr-&amp;gt;a.val[5], addr-&amp;gt;a.val[4], addr-&amp;gt;a.val[3], addr-&amp;gt;a.val[2], addr-&amp;gt;a.val[1], addr-&amp;gt;a.val[0], reason);

  auto_start_rescan();
}

static void auth_passkey_display_cb(struct bt_conn *conn, unsigned int passkey)
{
  LOG_WRN(&amp;quot;Passkey is: %06u&amp;quot;, passkey);
}

static void auth_passkey_confirm_cb(struct bt_conn *conn, unsigned int passkey)
{
  LOG_WRN(&amp;quot;Passkey confirmed&amp;quot;);
  bt_conn_auth_passkey_confirm(conn);
}

static void le_param_updated_cb(struct bt_conn *conn, uint16_t interval, uint16_t latency, uint16_t timeout)
{
  LOG_WRN(&amp;quot;CONN PARAMS UPDATED  interval %d, latency %d, timeout %d&amp;quot;, interval, latency, timeout);
}

static bool le_param_req_cb(struct bt_conn *conn, struct bt_le_conn_param *param)
{
  LOG_WRN(&amp;quot;CONN PARAMS UPDATE REQUESTED  interval_min %d, interval_max %d, latency %d, timeout %d&amp;quot;, param-&amp;gt;interval_min, param-&amp;gt;interval_max, param-&amp;gt;latency, param-&amp;gt;timeout);

  return true;
}

static void auth_cancel_cb(struct bt_conn *conn)
{
  LOG_WRN(&amp;quot;Pairing cancelled&amp;quot;);
}

static void le_phy_update_cb(struct bt_conn *conn, struct bt_conn_le_phy_info *param)
{
  switch (param-&amp;gt;tx_phy)
  {
    case BT_CONN_LE_TX_POWER_PHY_1M:
    case BT_CONN_LE_TX_POWER_PHY_2M:
      LOG_WRN(&amp;quot;Phy updated to %dM&amp;quot;, param-&amp;gt;tx_phy);
      break;
    default:
      LOG_WRN(&amp;quot;Phy updated to CODED&amp;quot;);
      break;
  }
}

static void le_data_len_updated(struct bt_conn *conn, struct bt_conn_le_data_len_info *info)
{
  uint16_t tx_len     = info-&amp;gt;tx_max_len;
  uint16_t rx_len     = info-&amp;gt;rx_max_len;
  uint16_t tx_time    = info-&amp;gt;tx_max_time;
  uint16_t rx_time    = info-&amp;gt;rx_max_time;
  LOG_INF(&amp;quot;Data length updated. Length %d/%d bytes, time %d/%d us&amp;quot;, tx_len, rx_len, tx_time, rx_time);
}

static void security_changed_cb(struct bt_conn *conn, bt_security_t level, enum bt_security_err err)
{
  if (err)
    LOG_ERR(&amp;quot;Error on security changed. err %d&amp;quot;, err);
  else
  {
    switch (level)
    {
      case BT_SECURITY_L0:
        LOG_INF(&amp;quot;Security changed to level 0&amp;quot;);
        break;
      case BT_SECURITY_L1:
        LOG_INF(&amp;quot;Security changed to level 1&amp;quot;);
        break;
      case BT_SECURITY_L2:
        LOG_INF(&amp;quot;Security changed to level 2&amp;quot;);
        break;
      case BT_SECURITY_L3:
        LOG_INF(&amp;quot;Security changed to level 3&amp;quot;);
        break;
      case BT_SECURITY_L4:
        LOG_INF(&amp;quot;Security changed to level 4&amp;quot;);
        break;
      default:
        LOG_INF(&amp;quot;Security changed to FORCE_PAIR&amp;quot;);
        break;
    }
  }
}

static void pairing_complete(struct bt_conn *conn, bool bonded)
{
  if (!bonded)
    LOG_DBG(&amp;quot;Pairing failed&amp;quot;);
  else
    LOG_DBG(&amp;quot;Pairing complete&amp;quot;);
}

BT_CONN_CB_DEFINE(conn_callbacks) = {
    .connected = connected_cb,
    .disconnected = disconnected_cb,
    .le_param_req = le_param_req_cb,
    .le_param_updated = le_param_updated_cb,
    .le_data_len_updated = le_data_len_updated,
    .le_phy_updated = le_phy_update_cb,
    .security_changed = security_changed_cb,
};

static struct bt_conn_auth_cb conn_auth_callbacks = {
  .passkey_display = auth_passkey_display_cb,
  .passkey_confirm = auth_passkey_confirm_cb,
  .cancel = auth_cancel_cb,
};

static struct bt_conn_auth_info_cb auth_info_cb = {
  .pairing_complete = pairing_complete
};

int main(void)
{
  LOG_INIT();

  int err = bt_conn_auth_cb_register(&amp;amp;conn_auth_callbacks);
  bt_conn_auth_info_cb_register(&amp;amp;auth_info_cb);

  // Init Bluetooth subsystem
  err = bt_enable(NULL);
  if (err)
  {
    LOG_ERR(&amp;quot;Bluetooth init failed (err %d)&amp;quot;, err);
    return  1;
  }

  bt_set_bondable(true);
  LOG_INF(&amp;quot;Bluetooth initialized&amp;quot;);

  start_scan();

  return 0;
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The log&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;[00:00:01.402,038] &amp;lt;inf&amp;gt; main: [DEVICE]: 64:72:49:26:EC:91      Device name: MY_PERIPHERAL
[00:00:01.426,177] &amp;lt;wrn&amp;gt; main: CONNECTED CALLBACK !!!
[00:00:01.426,177] &amp;lt;inf&amp;gt; main: Connected: 64:72:49:26:EC:91
[00:00:01.426,208] &amp;lt;wrn&amp;gt; main: Security level 1
[00:00:01.426,727] &amp;lt;inf&amp;gt; main: bla bla bla
[00:00:01.528,137] &amp;lt;inf&amp;gt; main: Data length updated. Length 69/69 bytes, time 2120/2120 us
[00:00:01.830,413] &amp;lt;wrn&amp;gt; main: Passkey confirmed
[00:00:02.277,770] &amp;lt;inf&amp;gt; main: Security changed to level 4
[00:00:02.378,631] &amp;lt;dbg&amp;gt; main: pairing_complete: Pairing complete
[00:00:02.426,818] &amp;lt;inf&amp;gt; main: bla bla bla
[00:00:03.427,001] &amp;lt;inf&amp;gt; main: bla bla bla
[00:00:03.827,178] &amp;lt;wrn&amp;gt; main: Phy updated to 2M
[00:00:04.427,215] &amp;lt;inf&amp;gt; main: bla bla bla
[00:00:05.427,276] &amp;lt;inf&amp;gt; main: bla bla bla
[00:00:05.627,593] &amp;lt;dbg&amp;gt; main: disconnected_cb: Beginning disconnected_cb
[00:00:05.627,624] &amp;lt;inf&amp;gt; main: Disconnected: CA:D5:C8:E6:52:E9 (reason 0x13)
[00:00:05.628,448] &amp;lt;inf&amp;gt; main: Scanning successfully started
[00:00:08.415,985] &amp;lt;err&amp;gt; main: connect to MY_PERIPHERAL
[00:00:08.464,172] &amp;lt;wrn&amp;gt; main: CONNECTED CALLBACK !!!
[00:00:08.464,202] &amp;lt;inf&amp;gt; main: Connected: CA:D5:C8:E6:52:E9
[00:00:08.464,202] &amp;lt;wrn&amp;gt; main: Security level 1
[00:00:08.464,813] &amp;lt;inf&amp;gt; main: bla bla bla
[00:00:08.665,557] &amp;lt;err&amp;gt; main: Error on security changed. err 9
[00:00:08.665,679] &amp;lt;dbg&amp;gt; main: disconnected_cb: Beginning disconnected_cb
[00:00:08.665,710] &amp;lt;inf&amp;gt; main: Disconnected: CA:D5:C8:E6:52:E9 (reason 0x13)
[00:00:08.666,534] &amp;lt;inf&amp;gt; main: Scanning successfully started&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/509807?ContentTypeID=1</link><pubDate>Mon, 11 Nov 2024 08:17:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9340b435-1673-4691-930c-113be164ad5c</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;After someone from our SDK team have looked into this, they say that the behavior is a little weird, and it looks like it comes from the Zephyr implementation of the Bluetooth Host. They will look into it, but for now, they recommended not to use this feature, unless you have a specific reason to do so. So is there a particular reason why you are using it? To me, it seems like a feature that simplifies things a bit too much. At least if the intention is that it will restart scanning whenever you disconnect from a device in the auto_conn list. To me, it seems like a better option to do this &amp;quot;manually&amp;quot; from the disconnected event. This way, you can decide yourself when you want to scan and not.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Let me know your thoughts, but at least for now, until this bug is fixed, I would not recommend using this feature.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/509113?ContentTypeID=1</link><pubDate>Tue, 05 Nov 2024 13:15:50 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fbc864d5-165e-46f7-9009-593530830ee4</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello Victor,&lt;/p&gt;
&lt;p&gt;I was working from home when I originally got your ticket, and I didn&amp;#39;t have an DK at hand, so I asked someone in our softdevice team to check it, and I didn&amp;#39;t hear from them. Sorry for not picking this up sooner (my fault, not theirs). Thank you for pinging back!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;So now, after testing your central application with the peripheral_uart sample as the peripheral, I saw some weird behavior, although not exactly the same as you. I saw the same error messages, but I didn&amp;#39;t see the disconnects. However, when I removed the bt_le_set_auto_conn() I still saw some weird behavior, that it couldn&amp;#39;t connect, because &amp;quot;a connection already existed in the disconnected state&amp;quot;:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;[00:01:20.563,415] &amp;lt;inf&amp;gt; main: [DEVICE]: C6:10:0A:A5:6A:85      Device name: Nordic_UART_Service

[00:01:20.564,300] &amp;lt;wrn&amp;gt; bt_conn: Found valid connection (0x20002040) with address C6:10:0A:A5:6A:85 (random) in disconnected state

[00:01:20.564,300] &amp;lt;wrn&amp;gt; main: Connection failed (err -22)

[00:01:20.565,185] &amp;lt;inf&amp;gt; main: Scanning successfully started
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;So something similar to what you said about a missing disconnect event.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So in your disconnected callback, you should unreference the connection pointer:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;static void disconnected_cb(struct bt_conn *conn, uint8_t reason)
{
  LOG_INF(&amp;quot;Beginning disconnected_cb&amp;quot;);

  k_thread_abort(th_id_example);

  const bt_addr_le_t * addr = bt_conn_get_dst(conn);
  if (default_conn != conn)
    return;

  bt_conn_unref(conn);

  LOG_INF(&amp;quot;Disconnected: %02X:%02X:%02X:%02X:%02X:%02X (reason 0x%02x)&amp;quot;, addr-&amp;gt;a.val[5], addr-&amp;gt;a.val[4], addr-&amp;gt;a.val[3], addr-&amp;gt;a.val[2], addr-&amp;gt;a.val[1], addr-&amp;gt;a.val[0], reason);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This made it work without the bt_le_set_auto_conn(). However, turning it back on, I still see the same error messages after the connected event (except for the first time). However, no disconnects.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Another thing I didn&amp;#39;t understand is that I didn&amp;#39;t see where you restarted your scanning after the disconnect. Apparently, setting the auto conn feature makes the device scan at all times, also when you are in a connection. This is something you need to be aware of, at least if your device is battery powered.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;However, let me ping back on our internal softdevice team to see if they have any insight of why these error messages are present. As of the disconnect events every 30 seconds, I can&amp;#39;t reproduce that, so if you want me to look into it, please provide a peripheral sample that can reproduce this, but I suspect this is the peripheral&amp;#39;s decision, since it is not present during my tests.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/509048?ContentTypeID=1</link><pubDate>Tue, 05 Nov 2024 08:14:37 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:95bdaf41-51d8-43e5-abb6-8c9044864832</guid><dc:creator>Victor Groux</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I hope you are well.&lt;/p&gt;
&lt;p&gt;Have you made any progress in the understanding of&amp;nbsp;my problem ?&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Victor&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Issue with the auto connect feature</title><link>https://devzone.nordicsemi.com/thread/507652?ContentTypeID=1</link><pubDate>Wed, 23 Oct 2024 20:08:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d6db5c45-4771-4eca-8dc1-31f0b3cf301b</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I must admit that I was not aware of this auto_conn feature, and thus, I don&amp;#39;t know if it is intentional that the disconnected callback should disappear. However, it sounds odd that it should, since it is useful for the application to know whether you are currently connected or not.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Let me ask internally, and I will get back to you, hopefully this week, no later than the beginning of next week.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>