nRF9161-DK SMS sample. message not receiving to controller on time

Hello all smart people.

Currently I am working with SMS sample and I want to toggle LED with pwm after receiving message, but I can not get sms on the "live" only after restart I see that message is received on terminal.

What did I wrong or how to get sms on controller live time?

Thank you, fizz drink on me

/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */
 
#include <stdio.h>
#include <zephyr/kernel.h>
#include <string.h>
#include <modem/sms.h>
#include <modem/nrf_modem_lib.h>
#include <modem/lte_lc.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/pwm.h>
 
static struct k_work sms_workk;
 
static const struct pwm_dt_spec pwm_led0 = PWM_DT_SPEC_GET(DT_ALIAS(pwm_led0));
 
/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS   2500
 
/* The devicetree node identifier for the "led0" alias. */
#define LED0_NODE DT_ALIAS(led0)
 
/*
 * A build error on this line means your board is unsupported.
 * See the sample documentation for information on how to fix this.
 */
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
 
 
static void sms_callback(struct sms_data *const data, void *context)
{
    if (data == NULL) {
        printk("%s with NULL data\n", __func__);
        return;
    }
 
    if (data->type == SMS_TYPE_DELIVER) {
        gpio_pin_toggle_dt(&led);//
        /* When SMS message is received, print information */
        struct sms_deliver_header *header = &data->header.deliver;
 
        printk("\nSMS received:\n");
        printk("\tTime:   %02d-%02d-%02d %02d:%02d:%02d\n",
            header->time.year,
            header->time.month,
            header->time.day,
            header->time.hour,
            header->time.minute,
            header->time.second);
 
        printk("\tText:   '%s'\n", data->payload);
        printk("\tLength: %d\n", data->payload_len);
 
        if (header->app_port.present) {
            printk("\tApplication port addressing scheme: dest_port=%d, src_port=%d\n",
                header->app_port.dest_port,
                header->app_port.src_port);
        }
        if (header->concatenated.present) {
            printk("\tConcatenated short message: ref_number=%d, msg %d/%d\n",
                header->concatenated.ref_number,
                header->concatenated.seq_number,
                header->concatenated.total_msgs);
        }
    } else if (data->type == SMS_TYPE_STATUS_REPORT) {
        printk("SMS status report received\n");
    } else {
        printk("SMS protocol message with unknown type received\n");
    }
}
 
int main(void)
{
    int handle = 0;
    int ret = 0;
    uint32_t period = 1000000U;
    uint32_t pulse_width = period/100*100;
    uint32_t dummy =0;
 
    printk("\nSMS sample starting\n");
 
    ret = nrf_modem_lib_init();
    if (ret) {
        printk("Modem library initialization failed, error: %d\n", ret);
        return 0;
    }
 
    ret = lte_lc_connect();
    if (ret) {
        printk("Lte_lc failed to initialize and connect, err %d", ret);
        return 0;
    }
 
    handle = sms_register_listener(sms_callback, NULL);
    if (handle) {
        printk("sms_register_listener returned err: %d\n", handle);
        return 0;
    }
 
    printk("SMS sample is ready for receiving messages\n");
 
    /* Sending is done to the phone number specified in the configuration,
     * or if it's left empty, an information text is printed.
     */
    if (strcmp(CONFIG_SMS_SEND_PHONE_NUMBER, "")) {
        printk("Sending SMS: number=%s, text=\"SMS sample: testing\"\n",
            CONFIG_SMS_SEND_PHONE_NUMBER);
        ret = sms_send_text(CONFIG_SMS_SEND_PHONE_NUMBER, "SMS sample: testing");
        if (ret) {
            printk("Sending SMS failed with error: %d\n", ret);
        }
    } else {
        printk("\nSMS sending is skipped but receiving will still work.\n"
            "If you wish to send SMS, please configure CONFIG_SMS_SEND_PHONE_NUMBER\n");
    }
 
    if (!gpio_is_ready_dt(&led)) {
        return 0;
    }
 
    ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
    if (ret < 0) {
        return 0;
    }
 
    /* if (!pwm_is_ready_dt(&pwm_led0)) {
        printk("Error: PWM device %s is not ready\n",
               pwm_led0.dev->name);
        return 0;
    }  
 
    ret = pwm_set_dt(&pwm_led0, period, pulse_width);
    if (ret) {
        printk("Error %d: failed to set pulse width\n", ret);
        return 0;
    } */
 
    for(;;)
    {      
        //ret = pwm_set_pulse_dt(&pwm_led0, pulse_width);
        k_msleep(SLEEP_TIME_MS);
        dummy++;
    }
 
    /* In our application, we should unregister SMS in some conditions with:
     *   sms_unregister_listener(handle);
     * However, this sample will continue to be registered for
     * received SMS messages and they can be seen in serial port log.
     */
    return 0;
}

  • I upgraded the modem FW. Situation did not change. After some additional testing / debugging I conclude that indeed the network provider does not forward the SMSes reliably. I need to provide a demo to the customer showcasing remote control of the device. I saw that there are no examples with nRF Cloud and this SMS does not work for me as mentioned above. Do you have any other examples which could be useful to me?

Related