<?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>Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/121140/joiner-callback-never-being-executed</link><description>Hi all, 
 I&amp;#39;m trying to integrate joiner into my project, here&amp;#39;s my goal: 
 We will start a device as our commissioner, and while it is active, we will start the other devices as joiners such that they will handshake with the active commissioner and obtain</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 12 May 2025 09:29:12 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/121140/joiner-callback-never-being-executed" /><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/534828?ContentTypeID=1</link><pubDate>Mon, 12 May 2025 09:29:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:326455f4-20c1-49d6-bc9a-5a77c48f0c65</guid><dc:creator>Maria Gilje</dc:creator><description>&lt;p&gt;Hi Allan, &lt;/p&gt;
&lt;p&gt;Thank you for the update! Let me know if you need further support. &lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Maria&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/534712?ContentTypeID=1</link><pubDate>Fri, 09 May 2025 16:56:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f5b8abee-d396-4247-a949-8550412aed01</guid><dc:creator>Allan-led</dc:creator><description>&lt;p&gt;Hi Maria,&lt;/p&gt;
&lt;p&gt;Sorry, I forgot to get back to you yesterday.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I had trouble setting up the sniffer, but I found a piece of sample code that provided a solution to my problem:&lt;br /&gt;&lt;a id="" href="https://github.com/martelmy/NCS_examples/blob/main/openthread/joiner/src/main.c"&gt;https://github.com/martelmy/NCS_examples/blob/main/openthread/joiner/src/main.c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;openthread_api_mutex_lock(context) and an unlock need to be wrapped around OpenThread API function calls.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I believe this is good enough for me to start my integration and fix the overall structure of my codebase.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Allan Wang&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/534626?ContentTypeID=1</link><pubDate>Fri, 09 May 2025 11:07:16 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:892c56bd-2fd5-4d10-a4e8-0a5c6530635a</guid><dc:creator>Maria Gilje</dc:creator><description>&lt;p&gt;Hi Allan, &lt;/p&gt;
&lt;p&gt;I did a sniffer trace today, and noticed that the joiner device does not send a Discovery Request when otJoinerStart is called. I have not found out why this is yet, but this is where I&amp;#39;m at now. &lt;/p&gt;
&lt;p&gt;The commissioner was set up before starting the captures, and I have one capture where the joiner is started from CLI and one from the application. The network key is the standard (00112233445566778899aabbccddeeff).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/344777_5F00_joiner_5F00_start_5F00_cli.pcapng"&gt;devzone.nordicsemi.com/.../344777_5F00_joiner_5F00_start_5F00_cli.pcapng&lt;/a&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/344777_5F00_joiner_5F00_start_5F00_app.pcapng"&gt;devzone.nordicsemi.com/.../344777_5F00_joiner_5F00_start_5F00_app.pcapng&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll continue my investigations next week. &lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Maria&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/534498?ContentTypeID=1</link><pubDate>Thu, 08 May 2025 14:16:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bde08d5a-40cb-4620-8f62-34e106de1df7</guid><dc:creator>Maria Gilje</dc:creator><description>&lt;p&gt;Hi Allan,&lt;/p&gt;
[quote user="Allan-led"]Sorry I forgot to clarify this, but this was a piece of CLI code modified by a previous firmware engineer, and I do not know why there is a main.h either. [/quote]
&lt;p&gt;No worries, I just asked to be thorough. I can see that there are some include statements which are not in my main.c, so I have included them now.&lt;/p&gt;
[quote user="Allan-led"]&lt;p&gt;I still haven&amp;#39;t found a solution to the problem, but I would like you to know that we can also perform the following:&amp;nbsp;&lt;br /&gt;1. start the commissioner, add wildcard joiner&lt;/p&gt;
&lt;p&gt;2. factoryreset the joiner device&lt;/p&gt;
&lt;p&gt;3. `ot stop joiner` on joiner device&lt;/p&gt;
&lt;p&gt;4. `ot ifconfig down` on joiner device&lt;/p&gt;
&lt;p&gt;5. `ot ifconfig up` on joiner device&lt;/p&gt;
&lt;p&gt;6. `ot joiner start J01NME` on joiner device&lt;/p&gt;
&lt;p&gt;Then the join can still be successful, and everything works out, &lt;/p&gt;[/quote]
&lt;p&gt;Thank you for sharing this. It does indicate that starting the joiner through the source code is what is not working and not a limitation with configuration of the modified CLI sample.&lt;/p&gt;
&lt;p&gt;We could learn more by sniffing the traffic of this. I will do this tomorrow morning and report back with my findings. If you can also do a trace of the traffic that is a good bonus.&lt;/p&gt;
[quote user="Allan-led"]I ran the debugger on the Joiner program, but it seems like it halts due to reason 3. However, the command line seems to be active, always. Thus, I don&amp;#39;t think I have observed a fatal halt.&amp;nbsp;[/quote]
&lt;p&gt;I&amp;#39;ll look out for this as well. Are you building with debugging optimizations before running the debugging session?&lt;/p&gt;
[quote user="Allan-led"]Another strange thing that I have noticed recently is that when I run the debugger on my code, it lands at&amp;nbsp;a fatal halt with reason 3. Is this expected behaviour? What does reason 3 mean in this context? I don&amp;#39;t think this is something that affects the execution of my program though, as all of my programs run into this issue, but most of them execute without any problems.&amp;nbsp;[/quote]
&lt;p&gt;I tried to search for a short time for an explanation on what reason 3 is, but I did not find it. I will search some more and possibly ask one of my colleagues if they know.&lt;/p&gt;
[quote user="Allan-led"]By looking at my code and procedures, do you think it SHOULD &amp;quot;just work out&amp;quot; normally? I believe this is quite a simple program that should be straight forward to create.&amp;nbsp;[/quote]
&lt;p&gt;I think there are some pieces missing, but I don&amp;#39;t know which yet. I was considering the CONFIG_OPENTHREAD_JOINER_AUTOSTART feature, but then you won&amp;#39;t get the custom callback.&lt;/p&gt;
&lt;p&gt;Maybe the sniffer trace will shed some light on what is going on.&lt;/p&gt;
[quote user="Allan-led"]Please also note that I am conducting my experiments with the nRF54L15DK this time, instead of our custom modules which has caused some trouble in the past.&amp;nbsp;[/quote]
&lt;p&gt;Noted. I am also using nRF54L15 DKs. &lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Maria&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/534359?ContentTypeID=1</link><pubDate>Wed, 07 May 2025 22:49:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6c3dbd77-ce2d-4c67-9e96-53d8e9bba147</guid><dc:creator>Allan-led</dc:creator><description>&lt;p&gt;Hi Maria,&lt;/p&gt;
&lt;p&gt;I still haven&amp;#39;t figured out a solution to this issue. By looking at my code and procedures, do you think it SHOULD &amp;quot;just work out&amp;quot; normally? I believe this is quite a simple program that should be straight forward to create.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Another strange thing that I have noticed recently is that when I run the debugger on my code, it lands at&amp;nbsp;a fatal halt with reason 3. Is this expected behaviour? What does reason 3 mean in this context? I don&amp;#39;t think this is something that affects the execution of my program though, as all of my programs run into this issue, but most of them execute without any problems.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Also, I tried implementing a commissioner by program as well, but it seems like it gets stuck at the petitioning state, similar to how the joiner gets stuck at the discover state.&amp;nbsp;&lt;br /&gt;I made sure that the commissioner device would become the leader before starting commissioner as well.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here are some logs that the 2 programs produced:&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/pastedimage1746663638847v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;As you see, it is quite unusual, as the commissioner should petition for less than a second before it becomes active (given that it is the leader already), and the joiner should also return some kind of error and return to Idle mode, if it doesn&amp;#39;t find a corresponding commissioner within the set time.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Here are the logs when I manually interact with them, stopping their commissioner/joiner and restarting them by command line:&amp;nbsp;&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/pastedimage1746663901628v2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;The join is successful.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Below is the code for starting the commissioner. Please note that I did not implement a callback function for the commissioner when a join event occurs for simplicity.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;openthread/commissioner.h&amp;gt;
#include &amp;lt;openthread/instance.h&amp;gt;
#include &amp;lt;openthread/ip6.h&amp;gt;
#include &amp;lt;openthread/thread_ftd.h&amp;gt;
#include &amp;lt;openthread/platform/logging.h&amp;gt;
#include &amp;lt;zephyr/logging/log.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
LOG_MODULE_REGISTER(main, LOG_LEVEL_INF);

otInstance *ot_instance;


// Optional callback
void commissioner_callback(otCommissionerState aState, void *aContext)
{
    switch (aState)
    {
    case OT_COMMISSIONER_STATE_ACTIVE:
        LOG_INF(&amp;quot;Commissioner started successfully&amp;quot;);
        break;
    case OT_COMMISSIONER_STATE_DISABLED:
        LOG_INF(&amp;quot;Commissioner disabled&amp;quot;);
        break;
    case OT_COMMISSIONER_STATE_PETITION:
        LOG_INF(&amp;quot;Commissioner petitioning&amp;quot;);
        break;
    }
}

int main() {
	ot_instance = otInstanceInitSingle();
	if (ot_instance == NULL) {
		LOG_ERR(&amp;quot;Failed to initialize OpenThread instance&amp;quot;);
		return -1;
	}

	otError err = otIp6SetEnabled(ot_instance, true);
	if (err != OT_ERROR_NONE) {
		LOG_ERR(&amp;quot;Failed to enable IPv6: %d&amp;quot;, err);
		return -1;
	}
	err = otThreadSetEnabled(ot_instance, true);
	if (err != OT_ERROR_NONE) {
		LOG_ERR(&amp;quot;Failed to enable Thread: %d&amp;quot;, err);
		return -1;
	}
	while (otThreadGetDeviceRole(ot_instance) != OT_DEVICE_ROLE_LEADER) {
		LOG_INF(&amp;quot;Waiting for the device to become a leader...&amp;quot;);
		k_msleep(4000);
	}
	LOG_INF(&amp;quot;Device is now leader&amp;quot;);
	for (int i = 0; i &amp;lt; 5; i++) {
		LOG_INF(&amp;quot;Delay time left: %d&amp;quot;, 5 - i);
		k_msleep(1000);
	}
	err = otCommissionerStart(ot_instance, commissioner_callback, NULL, NULL);
	if (err != OT_ERROR_NONE) {
		LOG_ERR(&amp;quot;Failed to start commissioner: %d&amp;quot;, err);
		return -1;
	}

	while (otCommissionerGetState(ot_instance) != OT_COMMISSIONER_STATE_ACTIVE) {
		LOG_INF(&amp;quot;Waiting for commissioner to become active...&amp;quot;);
		k_msleep(4000);
	}

	otCommissionerAddJoiner(ot_instance, NULL, &amp;quot;J01NME&amp;quot;, 300);

	while (1) {
		k_msleep(1000);
	}
	return 0;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Please also note that I am conducting my experiments with the nRF54L15DK this time, instead of our custom modules which has caused some trouble in the past.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Thanks.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Allan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/534170?ContentTypeID=1</link><pubDate>Tue, 06 May 2025 19:03:58 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a2380331-73b7-457a-b7bd-cdea00a20461</guid><dc:creator>Allan-led</dc:creator><description>&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/pastedimage1746557510759v1.png" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I ran the debugger on the Joiner program, but it seems like it halts due to reason 3. However, the command line seems to be active, always. Thus, I don&amp;#39;t think I have observed a fatal halt.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/533994?ContentTypeID=1</link><pubDate>Mon, 05 May 2025 20:39:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e945dda1-f9f6-41de-a3a0-74790fbd9a59</guid><dc:creator>Allan-led</dc:creator><description>&lt;p&gt;Hi Maria,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I still haven&amp;#39;t found a solution to the problem, but I would like you to know that we can also perform the following:&amp;nbsp;&lt;br /&gt;1. start the commissioner, add wildcard joiner&lt;/p&gt;
&lt;p&gt;2. factoryreset the joiner device&lt;/p&gt;
&lt;p&gt;3. `ot stop joiner` on joiner device&lt;/p&gt;
&lt;p&gt;4. `ot ifconfig down` on joiner device&lt;/p&gt;
&lt;p&gt;5. `ot ifconfig up` on joiner device&lt;/p&gt;
&lt;p&gt;6. `ot joiner start J01NME` on joiner device&lt;/p&gt;
&lt;p&gt;Then the join can still be successful, and everything works out, and the success logs are displayed on the commissioner, as shown below:&amp;nbsp;&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/pastedimage1746476888774v3.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/533970?ContentTypeID=1</link><pubDate>Mon, 05 May 2025 16:06:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ede4a3db-3efa-4e5e-9b38-b635d238278f</guid><dc:creator>Allan-led</dc:creator><description>&lt;p&gt;Hi Maria,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sorry I forgot to clarify this, but this was a piece of CLI code modified by a previous firmware engineer, and I do not know why there is a main.h either. But essentially the main.h just has include statements, and I have moved all the relevant ones into main.c already. I will go comment out #include main.h as well now.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s main.h for reference:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;// My stuff
#include &amp;lt;openthread/thread.h&amp;gt;
#include &amp;lt;openthread/joiner.h&amp;gt;
#include &amp;lt;openthread/instance.h&amp;gt;
#include &amp;lt;openthread/link.h&amp;gt;
#include &amp;lt;openthread/tasklet.h&amp;gt;
#include &amp;lt;openthread/ip6.h&amp;gt;
#include &amp;lt;openthread/dataset.h&amp;gt;
#include &amp;lt;openthread/commissioner.h&amp;gt;

void start_joiner(void);&lt;/pre&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I will let you know if I make any progress or findings as well.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Allan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/533963?ContentTypeID=1</link><pubDate>Mon, 05 May 2025 14:57:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3167fdbd-5d81-4c8c-b6d8-8cc408ca2ca9</guid><dc:creator>Maria Gilje</dc:creator><description>&lt;p&gt;Hi Allan, &lt;/p&gt;
&lt;p&gt;Thank you for sharing the prj.conf and main.c files. I have reproduced the issue, but I was not able to find an explanation nor a fix today. I&amp;#39;ll work on it more the next day(s). &lt;/p&gt;
&lt;p&gt;Just a quick question: Do you have something vital in main.h? I was able to build fine after just commenting it out, so I&amp;#39;m mostly wondering if there is something in it at all. &lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Maria&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/533802?ContentTypeID=1</link><pubDate>Sat, 03 May 2025 00:33:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a1f49720-8b58-420a-ad5f-5ca334625c46</guid><dc:creator>Allan-led</dc:creator><description>&lt;p&gt;Hi Maria,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;My device A acts as the commissioner, and it is controlled through the command line. The CLI sample code was flashed, and I have only modified its prj.conf file (full file below, the bottom parts were added on by me).&amp;nbsp;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;# Network shell
CONFIG_SHELL=y
CONFIG_OPENTHREAD_SHELL=y
CONFIG_SHELL_ARGC_MAX=26
CONFIG_SHELL_CMD_BUFF_SIZE=416

# Increase Settings storage size
CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE=0x8000

# Enable OpenThread features set
CONFIG_OPENTHREAD_NORDIC_LIBRARY_MASTER=y

CONFIG_NET_L2_OPENTHREAD=y

# Generic networking options
CONFIG_NETWORKING=y

CONFIG_GPIO_SHELL=y


CONFIG_SETTINGS_ZMS=y
CONFIG_ZMS=y
CONFIG_NVS=n
CONFIG_FLASH=y
CONFIG_FLASH_MAP=y
CONFIG_SPI_NOR=n

CONFIG_NRFX_POWER=y
CONFIG_SOC_NRF_FORCE_CONSTLAT=y&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;My device B acts as the joiner, here is main.c and its prj.conf file. This was also built on top of the CLI sample code.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;/*
 * Copyright (c) 2020 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

 #include &amp;lt;zephyr/kernel.h&amp;gt;
 #include &amp;lt;zephyr/logging/log.h&amp;gt;
 #include &amp;lt;openthread/thread.h&amp;gt;
 #include &amp;lt;openthread/joiner.h&amp;gt;
 #include &amp;lt;openthread/instance.h&amp;gt;
 #include &amp;lt;openthread/ip6.h&amp;gt;
 
 #include &amp;lt;zephyr/drivers/uart.h&amp;gt;
 #include &amp;lt;zephyr/usb/usb_device.h&amp;gt;
 
 #include &amp;quot;main.h&amp;quot;
 
 LOG_MODULE_REGISTER(cli_sample, CONFIG_OT_COMMAND_LINE_INTERFACE_LOG_LEVEL);
 
 
 #define JOINER_RETRY_DELAY_MS 5000
 #define JOINER_PSKD &amp;quot;J01NME&amp;quot;
 
 static otInstance *ot_instance;
 
 // Callback for joiner completion
 void joiner_callback(otError error, void *context)
 {
     if (error == OT_ERROR_NONE) {
         printk(&amp;quot;Joiner successfully joined the network.\n&amp;quot;);
     } else {
         printk(&amp;quot;Joiner failed to join the network: %d\n&amp;quot;, error);
     }
 }
 
 // Start the joiner process
 void start_joiner(void)
 {
     otError error = otJoinerStart(ot_instance, JOINER_PSKD, NULL, NULL, NULL, NULL, NULL, joiner_callback, NULL);
     if (error == OT_ERROR_NONE) {
         printk(&amp;quot;Joiner started successfully.\n&amp;quot;);
     } else {
         printk(&amp;quot;Failed to start joiner, retrying in %d ms...\n&amp;quot;, JOINER_RETRY_DELAY_MS);
         // Retry after a delay if joiner fails to start
         k_sleep(K_MSEC(JOINER_RETRY_DELAY_MS));
         start_joiner();
     }
 }
 
 int main(void)
 {
     ot_instance = otInstanceInitSingle();
     if (ot_instance == NULL) {
         printk(&amp;quot;Failed to initialize OpenThread instance.\n&amp;quot;);
         return 0;
     }
 
     otError error = otIp6SetEnabled(ot_instance, true);
     if (error != OT_ERROR_NONE) {
         printk(&amp;quot;Failed to enable IPv6: %d\n&amp;quot;, error);
         return 0;
     }
 
     // Start the joiner process
     start_joiner();
 
     while (1) {
         k_sleep(K_MSEC(1000));
     }
 
 
     return 0;
 }
 &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#
# Copyright (c) 2020 Nordic Semiconductor
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#

# Network shell
CONFIG_SHELL=y
CONFIG_OPENTHREAD_SHELL=y
CONFIG_SHELL_ARGC_MAX=26
CONFIG_SHELL_CMD_BUFF_SIZE=416

# Enable OpenThread features set
CONFIG_OPENTHREAD_NORDIC_LIBRARY_MASTER=y

CONFIG_NET_L2_OPENTHREAD=y

# Generic networking options
CONFIG_NETWORKING=y

CONFIG_MBEDTLS_SHA1_C=n
CONFIG_FPU=y

CONFIG_GPIO_SHELL=y

#THREAD CONFIGS
CONFIG_OPENTHREAD_COMMISSIONER=n
CONFIG_OPENTHREAD_JOINER=y
CONFIG_OPENTHREAD_FTD=y

#RTT CONFIG (Turn off if uart is on)
CONFIG_LOG=y
# CONFIG_USE_SEGGER_RTT=y
# CONFIG_RTT_CONSOLE=y
# CONFIG_SHELL_BACKEND_RTT=y

#UART CONFIGS FOR RECEIVING COMMANDS (Turn off if rtt is on)
# CONFIG_LOG=y
# CONFIG_SERIAL=y
# CONFIG_UART_CONSOLE=y
# CONFIG_SHELL=y
# CONFIG_SHELL_BACKEND_SERIAL=y

CONFIG_OPENTHREAD_OPERATIONAL_DATASET_AUTO_INIT=n
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I hope this helps with your reconstruction, was using two nRF54L15 dks for this job.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Allan Wang&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/533773?ContentTypeID=1</link><pubDate>Fri, 02 May 2025 15:04:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4df683ad-f3a0-461b-a7ed-741d18e77e93</guid><dc:creator>Maria Gilje</dc:creator><description>&lt;p&gt;Hi Allan, &lt;/p&gt;
&lt;p&gt;I&amp;#39;ll try to reproduce this on Monday. If there is more code you have edited than in your screenshot, please share. &lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Maria&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Joiner callback never being executed</title><link>https://devzone.nordicsemi.com/thread/533698?ContentTypeID=1</link><pubDate>Fri, 02 May 2025 00:26:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c27fc720-d62b-4c7f-a61f-216896f07a10</guid><dc:creator>Allan-led</dc:creator><description>&lt;p&gt;I would also like to follow up,&lt;/p&gt;
&lt;p&gt;I have also tried specifying eui64 in commissioner, but that does not work either, same behavior as described above.&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/pastedimage1746144937504v2.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>