<?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>LTE handler deregistered</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/89242/lte-handler-deregistered</link><description>Hi! 
 I am experiencing some odd behavior from the modem, and I hope you can help me understand it: 
 After I disconnect from LTE using lte_lc_func_mode_set(LTE_LC_FUNC_MODE_DEACTIVATE_LTE) , the lte_handler somehow get de-registered. When I try to turn</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 23 Jun 2022 09:01:43 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/89242/lte-handler-deregistered" /><item><title>RE: LTE handler deregistered</title><link>https://devzone.nordicsemi.com/thread/373872?ContentTypeID=1</link><pubDate>Thu, 23 Jun 2022 09:01:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4be1843f-f0b2-47f5-b93d-605553ab9586</guid><dc:creator>Albrecht Markus Schellenberger</dc:creator><description>&lt;p&gt;&lt;span&gt;Hei Torje,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
[quote user=""]Do you have any suggestions as to how I can get the LTE&amp;nbsp; handler back up?[/quote]
&lt;p&gt;&lt;span&gt;Trying to reproduce the basic concept of your approach, I did not manage to succeed. I took the &lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/2.0.0/zephyr/samples/hello_world/README.html"&gt;Hello World&lt;/a&gt; sample as a reference and added the following lines of code:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;main.c&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include &amp;lt;zephyr.h&amp;gt;
#include &amp;lt;modem/lte_lc.h&amp;gt;

/* Semaphore used to block the main thread until the link controller has
 * established an LTE connection.
 */
K_SEM_DEFINE(lte_connected, 0, 1);
K_SEM_DEFINE(enter_psm, 0, 1);
K_SEM_DEFINE(disable_lte, 0, 1);

static void lte_handler(const struct lte_lc_evt *const evt)
{
     switch (evt-&amp;gt;type) {
     case LTE_LC_EVT_NW_REG_STATUS:
		if ((evt-&amp;gt;nw_reg_status != LTE_LC_NW_REG_REGISTERED_HOME) &amp;amp;&amp;amp;
		(evt-&amp;gt;nw_reg_status != LTE_LC_NW_REG_REGISTERED_ROAMING)) {
		
			if(evt-&amp;gt;nw_reg_status == LTE_LC_NW_REG_NOT_REGISTERED) {
				printk(&amp;quot;Network connection lost!\n&amp;quot;);
				k_sem_give(&amp;amp;disable_lte);
			}
			break;
		}

		printk(&amp;quot;Connected to: %s network\n&amp;quot;,
		evt-&amp;gt;nw_reg_status == LTE_LC_NW_REG_REGISTERED_HOME ? &amp;quot;home&amp;quot; : &amp;quot;roaming&amp;quot;);

		k_sem_give(&amp;amp;lte_connected);

		break;
     case LTE_LC_EVT_PSM_UPDATE:
		printk(&amp;quot;Power Saving Mode negotiation completed!\nTracking Area Update interval: %ds, Active Time: %ds\n&amp;quot;, evt-&amp;gt;psm_cfg.tau, evt-&amp;gt;psm_cfg.active_time);
		break;
    case LTE_LC_EVT_MODEM_SLEEP_ENTER:
		if(evt-&amp;gt;modem_sleep.type == LTE_LC_MODEM_SLEEP_PSM) {
			printk(&amp;quot;Entering PSM. Good night!\n&amp;quot;);
			k_sem_give(&amp;amp;enter_psm);
		}

		break;
	 case LTE_LC_EVT_EDRX_UPDATE:
     case LTE_LC_EVT_RRC_UPDATE:
     case LTE_LC_EVT_CELL_UPDATE:
     case LTE_LC_EVT_LTE_MODE_UPDATE:
     case LTE_LC_EVT_TAU_PRE_WARNING:
     case LTE_LC_EVT_NEIGHBOR_CELL_MEAS:
     case LTE_LC_EVT_MODEM_SLEEP_EXIT_PRE_WARNING:
     case LTE_LC_EVT_MODEM_SLEEP_EXIT:
             /* Callback events carrying LTE link data */
             break;
     default:
             break;
     }
}

void main(void)
{
	int err;
	enum lte_lc_func_mode func_mode;
	enum lte_lc_system_mode sys_mode;
	enum lte_lc_system_mode_preference sys_pref_mode;

	printk(&amp;quot;Hello World! %s\n&amp;quot;, CONFIG_BOARD);

	printk(&amp;quot;Connecting to LTE network. This may take a few minutes...\n&amp;quot;);

    err = lte_lc_init_and_connect_async(lte_handler);
    if (err) {
        printk(&amp;quot;lte_lc_init_and_connect_async, error: %d\n&amp;quot;, err);
        return;
    }

    k_sem_take(&amp;amp;lte_connected, K_FOREVER);

	/* Check current system &amp;amp; functional modes */
	err = lte_lc_system_mode_get(&amp;amp;sys_mode, &amp;amp;sys_pref_mode);
	if(err) {
		printk(&amp;quot;Could not get modem system mode, error: %d\n&amp;quot;, err);
		return;
	}
	else {
		printk(&amp;quot;Current modem system mode: %d\n&amp;quot;, sys_mode);
		printk(&amp;quot;Current modem preferred system mode: %d\n&amp;quot;, sys_pref_mode);
	}		
	
	err = lte_lc_func_mode_get(&amp;amp;func_mode);
	if(err) {
		printk(&amp;quot;Could not get modem functional mode, error: %d\n&amp;quot;, err);
		return;
	}
	else {
		printk(&amp;quot;Current modem functional mode: %d\n&amp;quot;, func_mode);
	}

	k_sem_take(&amp;amp;enter_psm, K_FOREVER);
	printk(&amp;quot;Waiting for 10s...\n&amp;quot;);
	k_msleep(10000);

	/* Continue execution... */

	/* Deactivate LTE services &amp;amp; cross-check new functional mode*/
	err = lte_lc_func_mode_set(LTE_LC_FUNC_MODE_DEACTIVATE_LTE);
	if(err) {
		printk(&amp;quot;Could not set modem functional mode, error: %d\n&amp;quot;, err);
		return;
	}
	err = lte_lc_func_mode_get(&amp;amp;func_mode);
	if(err) {
		printk(&amp;quot;Could not get modem functional mode, error: %d\n&amp;quot;, err);
		return;
	}
	else {
		printk(&amp;quot;Current modem functional mode: %d\n&amp;quot;, func_mode);
	}	

	k_sem_take(&amp;amp;disable_lte, K_FOREVER);
	printk(&amp;quot;Waiting for 10s...\n&amp;quot;);
	k_msleep(10000);

	/* Re-activate LTE services &amp;amp; cross-check new functional mode*/
	err = lte_lc_func_mode_set(LTE_LC_FUNC_MODE_ACTIVATE_LTE);
	if(err) {
		printk(&amp;quot;Could not set modem functional mode, error: %d\n&amp;quot;, err);
		return;
	}
	err = lte_lc_func_mode_get(&amp;amp;func_mode);
	if(err) {
		printk(&amp;quot;Could not get modem functional mode, error: %d\n&amp;quot;, err);
		return;
	}
	else {
		printk(&amp;quot;Current modem functional mode: %d\n&amp;quot;, func_mode);
	}	

	while(1);	
}&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;prj.conf&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="text"&gt;# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=y
## Power saving timers.
### 320 hours PSM.
CONFIG_LTE_PSM_REQ_RPTAU=&amp;quot;11000001&amp;quot;
### 20 seconds active time.
CONFIG_LTE_PSM_REQ_RAT=&amp;quot;00001010&amp;quot;
## Enable notifications when modem enters PSM
CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS=y&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The output is as expected:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="text"&gt;*** Booting Zephyr OS build v3.0.99-ncs1  ***
Hello World! nrf9160dk_nrf9160
Connecting to LTE network. This may take a few minutes...
Connected to: home network
Power Saving Mode negotiation completed!
Tracking Area Update interval: 1152000s, Active Time: 20s
Current modem system mode: 4
Current modem preferred system mode: 0
Current modem functional mode: 1
Entering PSM. Good night!
Waiting for 10s...
Network connection lost!
Current modem functional mode: 31
Waiting for 10s...
Current modem functional mode: 1
Connected to: home network
Entering PSM. Good night!&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I probably need more input since I might not have added all the functionality you are using.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Venleg helsing,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Markus&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>