This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Tracking GPS but never get FIX

Hi, 

I wrote a code using gps_controller.c on my thingy:91. However, i could never get a GPS FIX so i decide to try the GPS sample but it doesn't work neither. 

I tried several places. Nevertheless, with the asset_tracker application I can get the location. 

Any idea of what is going on ? 

Regards,  

Parents
  • Hi Ricardo,
    Could you please try to flash the latest modem firmware (v1.2.0) and flash the GPS sample from latest NCS release and test the Thingy:91 in where you have an open sky. (not inside with a window between).

    If you still have issues, could you please update NCS to the master branch (use the following commands: cd ncs/nrf, git checkout master, git pull, west update) then either checkout this PR or add the changes in your sample to get out the extra NMEA strings. If you could do a run with NMEA strings enabled and share the log it would be easier to understand what is going on.

  • Hi ,

    Thanks for you replay

    I reinstalled the firmware v1.2.0. 

    I reinstall the all Toolchain Manager with nRF connect 3.4.0. 

    I changed my GPS sample with the link that you  gave me but I'm still stuck... I can track several satellites but never use it :(

    Here is the code :

    /*
     * Copyright (c) 2019 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
     */
    
    #include <zephyr.h>
    #include <nrf_socket.h>
    #include <net/socket.h>
    #include <stdio.h>
    #include <at_cmd.h>
    #include <at_notif.h>
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    #include <supl_os_client.h>
    #include <supl_session.h>
    #include "supl_support.h"
    #endif
    
    #define AT_XSYSTEMMODE    "AT\%XSYSTEMMODE=1,0,1,0"
    #define AT_ACTIVATE_GPS   "AT+CFUN=31"
    #define AT_ACTIVATE_LTE   "AT+CFUN=21"
    #define AT_DEACTIVATE_LTE "AT+CFUN=20"
    
    #define GNSS_INIT_AND_START 1
    #define GNSS_STOP           2
    #define GNSS_RESTART        3
    
    #define AT_CMD_SIZE(x) (sizeof(x) - 1)
    
    
    #ifdef CONFIG_BOARD_NRF9160_PCA10090NS
    #define AT_MAGPIO      "AT\%XMAGPIO=1,0,0,1,1,1574,1577"
    #define AT_COEX0       "AT\%XCOEX0=1,1,1570,1580"
    #endif
    
    static const char     update_indicator[] = {'\\', '|', '/', '-'};
    static const char     at_commands[][31]  = {
    				AT_XSYSTEMMODE,
    #ifdef CONFIG_BOARD_NRF9160_PCA10090NS
    				AT_MAGPIO,
    				AT_COEX0,
    #endif
    				AT_ACTIVATE_GPS
    			};
    
    static int            gnss_fd;
    static char           nmea_strings[10][NRF_GNSS_NMEA_MAX_LEN];
    static u32_t          nmea_string_cnt;
    
    static bool                  got_fix;
    static u64_t                 fix_timestamp;
    static nrf_gnss_data_frame_t last_pvt;
    
    K_SEM_DEFINE(lte_ready, 0, 1);
    
    void bsd_recoverable_error_handler(uint32_t error)
    {
    	printf("Err: %lu\n", (unsigned long)error);
    }
    
    static int setup_modem(void)
    {
    	for (int i = 0; i < ARRAY_SIZE(at_commands); i++) {
    
    		if (at_cmd_write(at_commands[i], NULL, 0, NULL) != 0) {
    			return -1;
    		}
    	}
    
    	return 0;
    }
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    /* Accepted network statuses read from modem */
    static const char status1[] = "+CEREG: 1";
    static const char status2[] = "+CEREG:1";
    static const char status3[] = "+CEREG: 5";
    static const char status4[] = "+CEREG:5";
    
    static void wait_for_lte(void *context, char *response)
    {
    	if (!memcmp(status1, response, AT_CMD_SIZE(status1)) ||
    		!memcmp(status2, response, AT_CMD_SIZE(status2)) ||
    		!memcmp(status3, response, AT_CMD_SIZE(status3)) ||
    		!memcmp(status4, response, AT_CMD_SIZE(status4))) {
    		k_sem_give(&lte_ready);
    	}
    }
    
    static int activate_lte(bool activate)
    {
    	if (activate) {
    		if (at_cmd_write(AT_ACTIVATE_LTE, NULL, 0, NULL) != 0) {
    			return -1;
    		}
    
    		at_notif_register_handler(NULL, wait_for_lte);
    		if (at_cmd_write("AT+CEREG=2", NULL, 0, NULL) != 0) {
    			return -1;
    		}
    
    		k_sem_take(&lte_ready, K_FOREVER);
    
    		at_notif_deregister_handler(NULL, wait_for_lte);
    		if (at_cmd_write("AT+CEREG=0", NULL, 0, NULL) != 0) {
    			return -1;
    		}
    	} else {
    		if (at_cmd_write(AT_DEACTIVATE_LTE, NULL, 0, NULL) != 0) {
    			return -1;
    		}
    	}
    
    	return 0;
    }
    
    #endif
    
    static int gnss_ctrl(uint32_t ctrl)
    {
    	int retval;
    	nrf_gnss_fix_retry_t    fix_retry    = 0;
    	nrf_gnss_fix_interval_t fix_interval = 1;
    	nrf_gnss_delete_mask_t	delete_mask  = 0;
    	nrf_gnss_nmea_mask_t	nmea_mask    = NRF_GNSS_NMEA_GSV_MASK |
    					       NRF_GNSS_NMEA_GSA_MASK |
    					       NRF_GNSS_NMEA_GLL_MASK |
    					       NRF_GNSS_NMEA_GGA_MASK |
    					       NRF_GNSS_NMEA_RMC_MASK;
    	if (ctrl == GNSS_INIT_AND_START) {
    		gnss_fd = nrf_socket(NRF_AF_LOCAL,
    				     NRF_SOCK_DGRAM,
    				     NRF_PROTO_GNSS);
    		if (gnss_fd >= 0) {
    			printk("GPS Socket created\n");
    		} else {
    			printk("Could not init socket (err: %d)\n", gnss_fd);
    			return -1;
    		}
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_FIX_RETRY,
    					&fix_retry,
    					sizeof(fix_retry));
    		if (retval != 0) {
    			printk("Failed to set fix retry value\n");
    			return -1;
    		}
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_FIX_INTERVAL,
    					&fix_interval,
    					sizeof(fix_interval));
    		if (retval != 0) {
    			printk("Failed to set fix interval value\n");
    			return -1;
    		}
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_NMEA_MASK,
    					&nmea_mask,
    					sizeof(nmea_mask));
    		if (retval != 0) {
    			printk("Failed to set nmea mask\n");
    			return -1;
    		}
    	}
    	if ((ctrl == GNSS_INIT_AND_START) ||
    	    (ctrl == GNSS_RESTART)) {
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_START,
    					&delete_mask,
    					sizeof(delete_mask));
    		if (retval != 0) {
    			printk("Failed to start GPS\n");
    			return -1;
    		}
    	}
    	if (ctrl == GNSS_STOP) {
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_STOP,
    					&delete_mask,
    					sizeof(delete_mask));
    		if (retval != 0) {
    			printk("Failed to stop GPS\n");
    			return -1;
    		}
    	}
    	return 0;
    }
    
    
    
    
    
    
    static int init_app(void)
    {
    	int retval;
    	if (setup_modem() != 0) {
    		printk("Failed to initialize modem\n");
    		return -1;
    	}
    	retval = gnss_ctrl(GNSS_INIT_AND_START);
    	return retval;
    }
    
    static void print_satellite_stats(nrf_gnss_data_frame_t *pvt_data)
    {
    	u8_t  tracked          = 0;
    	u8_t  in_fix           = 0;
    	u8_t  unhealthy        = 0;
    
    	for (int i = 0; i < NRF_GNSS_MAX_SATELLITES; ++i) {
    
    		if ((pvt_data->pvt.sv[i].sv > 0) &&
    		    (pvt_data->pvt.sv[i].sv < 33)) {
    
    			tracked++;
    
    			if (pvt_data->pvt.sv[i].flags &
    					NRF_GNSS_SV_FLAG_USED_IN_FIX) {
    				in_fix++;
    			}
    
    			if (pvt_data->pvt.sv[i].flags &
    					NRF_GNSS_SV_FLAG_UNHEALTHY) {
    				unhealthy++;
    			}
    		}
    	}
    
    	printk("Tracking: %d Using: %d Unhealthy: %d", tracked,
    						       in_fix,
    						       unhealthy);
    
    	printk("\nSeconds since last fix %lld\n",
    			(k_uptime_get() - fix_timestamp) / 1000);
    }
    
    static void print_gnss_stats(nrf_gnss_data_frame_t *pvt_data)
    {
    	if (pvt_data->pvt.flags & NRF_GNSS_PVT_FLAG_DEADLINE_MISSED) {
    		printk("GNSS notification deadline missed\n");
    	}
    	if (pvt_data->pvt.flags & NRF_GNSS_PVT_FLAG_NOT_ENOUGH_WINDOW_TIME) {
    		printk("GNSS operation blocked by insufficient time windows\n");
    	}
    }
    
    static void print_fix_data(nrf_gnss_data_frame_t *pvt_data)
    {
    	printf("Longitude:  %f\n", pvt_data->pvt.longitude);
    	printf("Latitude:   %f\n", pvt_data->pvt.latitude);
    	printf("Altitude:   %f\n", pvt_data->pvt.altitude);
    	printf("Speed:      %f\n", pvt_data->pvt.speed);
    	printf("Heading:    %f\n", pvt_data->pvt.heading);
    	printk("Date:       %02u-%02u-%02u\n", pvt_data->pvt.datetime.day,
    					       pvt_data->pvt.datetime.month,
    					       pvt_data->pvt.datetime.year);
    	printk("Time (UTC): %02u:%02u:%02u\n", pvt_data->pvt.datetime.hour,
    					       pvt_data->pvt.datetime.minute,
    					      pvt_data->pvt.datetime.seconds);
    }
    
    static void print_nmea_data(void)
    {
    	printk("NMEA strings:\n");
    
    	for (int i = 0; i < nmea_string_cnt; ++i) {
    		printk("%s\n", nmea_strings[i]);
    	}
    }
    
    int process_gps_data(nrf_gnss_data_frame_t *gps_data)
    {
    	int retval;
    
    	retval = nrf_recv(gnss_fd,
    			  gps_data,
    			  sizeof(nrf_gnss_data_frame_t),
    			  NRF_MSG_DONTWAIT);
    
    	if (retval > 0) {
    
    		switch (gps_data->data_id) {
    		case NRF_GNSS_PVT_DATA_ID:
    			memcpy(&last_pvt,
    			       gps_data,
    			       sizeof(nrf_gnss_data_frame_t));
    			nmea_string_cnt = 0;
    			got_fix = false;
    			
    			if ((gps_data->pvt.flags &
    				NRF_GNSS_PVT_FLAG_FIX_VALID_BIT)
    				== NRF_GNSS_PVT_FLAG_FIX_VALID_BIT) {
    
    				got_fix = true;
    				fix_timestamp = k_uptime_get();
    
    			}
    			break;
    
    		case NRF_GNSS_NMEA_DATA_ID:
    			if (nmea_string_cnt < 10) {
    				memcpy(nmea_strings[nmea_string_cnt++],
    				       gps_data->nmea,
    				       retval);
    			}
    			break;
    
    		case NRF_GNSS_AGPS_DATA_ID:
    #ifdef CONFIG_SUPL_CLIENT_LIB
    			printk("\033[1;1H");
    			printk("\033[2J");
    			printk("New AGPS data requested, contacting SUPL server, flags %d\n",
    			       gps_data->agps.data_flags);
    			activate_lte(true);
    			printk("Established LTE link\n");
    			if (open_supl_socket() == 0) {
    				printf("Starting SUPL session\n");
    				supl_session(&gps_data->agps);
    				printk("Done\n");
    				close_supl_socket();
    			}
    			activate_lte(false);
    			k_sleep(K_MSEC(2000));
    #endif
    			break;
    
    		default:
    			break;
    		}
    	}
    
    	return retval;
    }
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    int inject_agps_type(void *agps,
    		     size_t agps_size,
    		     nrf_gnss_agps_data_type_t type,
    		     void *user_data)
    {
    	ARG_UNUSED(user_data);
    	int retval = nrf_sendto(gnss_fd,
    				agps,
    				agps_size,
    				0,
    				&type,
    				sizeof(type));
    
    	if (retval != 0) {
    		printk("Failed to send AGNSS data, type: %d (err: %d)\n",
    		       type,
    		       errno);
    		return -1;
    	}
    
    	printk("Injected AGPS data, flags: %d, size: %d\n", type, agps_size);
    
    	return 0;
    }
    #endif
    
    int main(void)
    {
    	nrf_gnss_data_frame_t gps_data;
    	u8_t		      cnt = 0;
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    	static struct supl_api supl_api = {
    		.read       = supl_read,
    		.write      = supl_write,
    		.handler    = inject_agps_type,
    		.logger     = supl_logger,
    		.counter_ms = k_uptime_get
    	};
    #endif
    
    	printk("Starting GPS application\n");
    
    	if (init_app() != 0) {
    		return -1;
    	}
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    	int rc = supl_init(&supl_api);
    
    	if (rc != 0) {
    		return rc;
    	}
    #endif
    
    	printk("Getting GPS data...\n");
    
    	while (1) {
    
    		do {
    			/* Loop until we don't have more
    			 * data to read
    			 */
    		} while (process_gps_data(&gps_data) > 0);
    
    		if (IS_ENABLED(CONFIG_GPS_SAMPLE_NMEA_ONLY)) {
    			print_nmea_data();
    			nmea_string_cnt = 0;
    		} else {
    			printk("\033[1;1H");
    			printk("\033[2J");
    			print_satellite_stats(&last_pvt);
    			print_gnss_stats(&last_pvt);
    			printk("---------------------------------\n");
    
    			if (!got_fix) {
    				printk("Seconds since last fix: %lld\n",
    				       (k_uptime_get() - fix_timestamp) / 1000);
    				cnt++;
    				printk("Searching [%c]\n",
    				       update_indicator[cnt%4]);
    			} else {
    				print_fix_data(&last_pvt);
    			}
    			
    			printk("\nNMEA strings:\n\n");
    			print_nmea_data();
    			printk("---------------------------------");
    
    		}
    
    		k_sleep(K_MSEC(500));
    	}
    
    	return 0;
    }
    

    I also add CONFIG_GPS_SAMPLE_NMEA_ONLY=n to prj.conf

    and here are some log

    2020-06-17T12:48:10.862Z DEBUG modem << ---------------------------------\x1B[1;1H\x1B[2JTracking: 7 Using: 0 Unhealthy: 0\x0D\x0A
    2020-06-17T12:48:10.870Z DEBUG modem << Seconds since last fix 637\x0D\x0A
    2020-06-17T12:48:10.877Z DEBUG modem << ---------------------------------\x0D\x0A
    2020-06-17T12:48:10.882Z DEBUG modem << Seconds since last fix: 637\x0D\x0A
    2020-06-17T12:48:10.889Z DEBUG modem << Searching [|]\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.897Z DEBUG modem << NMEA strings:\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.905Z DEBUG modem << NMEA strings:\x0D\x0A
    2020-06-17T12:48:10.912Z DEBUG modem << $GPGGA,001036.00,,,,,0,07,99.99,,M,0,,*34\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.916Z DEBUG modem << $GPGLL,,,,,001036.00,V,A*41\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.921Z DEBUG modem << $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,1*2D\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.926Z DEBUG modem << $GPGSV,2,1,7,20,,,28,7,,,26,26,,,34,8,,,33,1*50\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.934Z DEBUG modem << $GPGSV,2,2,7,16,,,32,27,,,34,10,,,33,1*56\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.943Z DEBUG modem << $GPRMC,001036.00,V,,,,,,,060180,,,N,V*0C\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.247Z DEBUG modem << ---------------------------------\x1B[1;1H\x1B[2JTracking: 7 Using: 0 Unhealthy: 0\x0D\x0A
    2020-06-17T12:48:11.254Z DEBUG modem << Seconds since last fix 638\x0D\x0A
    2020-06-17T12:48:11.259Z DEBUG modem << ---------------------------------\x0D\x0A
    2020-06-17T12:48:11.265Z DEBUG modem << Seconds since last fix: 638\x0D\x0A
    2020-06-17T12:48:11.270Z DEBUG modem << Searching [/]\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.276Z DEBUG modem << NMEA strings:\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.283Z DEBUG modem << NMEA strings:\x0D\x0A
    2020-06-17T12:48:11.288Z DEBUG modem << $GPGGA,001037.00,,,,,0,07,99.99,,M,0,,*35\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.293Z DEBUG modem << $GPGLL,,,,,001037.00,V,A*40\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.298Z DEBUG modem << $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,1*2D\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.303Z DEBUG modem << $GPGSV,2,1,7,20,,,27,7,,,26,26,,,33,8,,,33,1*58\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.308Z DEBUG modem << $GPGSV,2,2,7,16,,,32,27,,,34,10,,,33,1*56\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.314Z DEBUG modem << $GPRMC,001037.00,V,,,,,,,060180,,,N,V*0D\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.597Z DEBUG modem << ---------------------------------\x1B[1;1H\x1B[2JTracking: 7 Using: 0 Unhealthy: 0\x0D\x0A
    2020-06-17T12:48:11.605Z DEBUG modem << Seconds since last fix 638\x0D\x0A
    2020-06-17T12:48:11.610Z DEBUG modem << ---------------------------------\x0D\x0A

    Any help please 

Reply
  • Hi ,

    Thanks for you replay

    I reinstalled the firmware v1.2.0. 

    I reinstall the all Toolchain Manager with nRF connect 3.4.0. 

    I changed my GPS sample with the link that you  gave me but I'm still stuck... I can track several satellites but never use it :(

    Here is the code :

    /*
     * Copyright (c) 2019 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
     */
    
    #include <zephyr.h>
    #include <nrf_socket.h>
    #include <net/socket.h>
    #include <stdio.h>
    #include <at_cmd.h>
    #include <at_notif.h>
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    #include <supl_os_client.h>
    #include <supl_session.h>
    #include "supl_support.h"
    #endif
    
    #define AT_XSYSTEMMODE    "AT\%XSYSTEMMODE=1,0,1,0"
    #define AT_ACTIVATE_GPS   "AT+CFUN=31"
    #define AT_ACTIVATE_LTE   "AT+CFUN=21"
    #define AT_DEACTIVATE_LTE "AT+CFUN=20"
    
    #define GNSS_INIT_AND_START 1
    #define GNSS_STOP           2
    #define GNSS_RESTART        3
    
    #define AT_CMD_SIZE(x) (sizeof(x) - 1)
    
    
    #ifdef CONFIG_BOARD_NRF9160_PCA10090NS
    #define AT_MAGPIO      "AT\%XMAGPIO=1,0,0,1,1,1574,1577"
    #define AT_COEX0       "AT\%XCOEX0=1,1,1570,1580"
    #endif
    
    static const char     update_indicator[] = {'\\', '|', '/', '-'};
    static const char     at_commands[][31]  = {
    				AT_XSYSTEMMODE,
    #ifdef CONFIG_BOARD_NRF9160_PCA10090NS
    				AT_MAGPIO,
    				AT_COEX0,
    #endif
    				AT_ACTIVATE_GPS
    			};
    
    static int            gnss_fd;
    static char           nmea_strings[10][NRF_GNSS_NMEA_MAX_LEN];
    static u32_t          nmea_string_cnt;
    
    static bool                  got_fix;
    static u64_t                 fix_timestamp;
    static nrf_gnss_data_frame_t last_pvt;
    
    K_SEM_DEFINE(lte_ready, 0, 1);
    
    void bsd_recoverable_error_handler(uint32_t error)
    {
    	printf("Err: %lu\n", (unsigned long)error);
    }
    
    static int setup_modem(void)
    {
    	for (int i = 0; i < ARRAY_SIZE(at_commands); i++) {
    
    		if (at_cmd_write(at_commands[i], NULL, 0, NULL) != 0) {
    			return -1;
    		}
    	}
    
    	return 0;
    }
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    /* Accepted network statuses read from modem */
    static const char status1[] = "+CEREG: 1";
    static const char status2[] = "+CEREG:1";
    static const char status3[] = "+CEREG: 5";
    static const char status4[] = "+CEREG:5";
    
    static void wait_for_lte(void *context, char *response)
    {
    	if (!memcmp(status1, response, AT_CMD_SIZE(status1)) ||
    		!memcmp(status2, response, AT_CMD_SIZE(status2)) ||
    		!memcmp(status3, response, AT_CMD_SIZE(status3)) ||
    		!memcmp(status4, response, AT_CMD_SIZE(status4))) {
    		k_sem_give(&lte_ready);
    	}
    }
    
    static int activate_lte(bool activate)
    {
    	if (activate) {
    		if (at_cmd_write(AT_ACTIVATE_LTE, NULL, 0, NULL) != 0) {
    			return -1;
    		}
    
    		at_notif_register_handler(NULL, wait_for_lte);
    		if (at_cmd_write("AT+CEREG=2", NULL, 0, NULL) != 0) {
    			return -1;
    		}
    
    		k_sem_take(&lte_ready, K_FOREVER);
    
    		at_notif_deregister_handler(NULL, wait_for_lte);
    		if (at_cmd_write("AT+CEREG=0", NULL, 0, NULL) != 0) {
    			return -1;
    		}
    	} else {
    		if (at_cmd_write(AT_DEACTIVATE_LTE, NULL, 0, NULL) != 0) {
    			return -1;
    		}
    	}
    
    	return 0;
    }
    
    #endif
    
    static int gnss_ctrl(uint32_t ctrl)
    {
    	int retval;
    	nrf_gnss_fix_retry_t    fix_retry    = 0;
    	nrf_gnss_fix_interval_t fix_interval = 1;
    	nrf_gnss_delete_mask_t	delete_mask  = 0;
    	nrf_gnss_nmea_mask_t	nmea_mask    = NRF_GNSS_NMEA_GSV_MASK |
    					       NRF_GNSS_NMEA_GSA_MASK |
    					       NRF_GNSS_NMEA_GLL_MASK |
    					       NRF_GNSS_NMEA_GGA_MASK |
    					       NRF_GNSS_NMEA_RMC_MASK;
    	if (ctrl == GNSS_INIT_AND_START) {
    		gnss_fd = nrf_socket(NRF_AF_LOCAL,
    				     NRF_SOCK_DGRAM,
    				     NRF_PROTO_GNSS);
    		if (gnss_fd >= 0) {
    			printk("GPS Socket created\n");
    		} else {
    			printk("Could not init socket (err: %d)\n", gnss_fd);
    			return -1;
    		}
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_FIX_RETRY,
    					&fix_retry,
    					sizeof(fix_retry));
    		if (retval != 0) {
    			printk("Failed to set fix retry value\n");
    			return -1;
    		}
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_FIX_INTERVAL,
    					&fix_interval,
    					sizeof(fix_interval));
    		if (retval != 0) {
    			printk("Failed to set fix interval value\n");
    			return -1;
    		}
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_NMEA_MASK,
    					&nmea_mask,
    					sizeof(nmea_mask));
    		if (retval != 0) {
    			printk("Failed to set nmea mask\n");
    			return -1;
    		}
    	}
    	if ((ctrl == GNSS_INIT_AND_START) ||
    	    (ctrl == GNSS_RESTART)) {
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_START,
    					&delete_mask,
    					sizeof(delete_mask));
    		if (retval != 0) {
    			printk("Failed to start GPS\n");
    			return -1;
    		}
    	}
    	if (ctrl == GNSS_STOP) {
    		retval = nrf_setsockopt(gnss_fd,
    					NRF_SOL_GNSS,
    					NRF_SO_GNSS_STOP,
    					&delete_mask,
    					sizeof(delete_mask));
    		if (retval != 0) {
    			printk("Failed to stop GPS\n");
    			return -1;
    		}
    	}
    	return 0;
    }
    
    
    
    
    
    
    static int init_app(void)
    {
    	int retval;
    	if (setup_modem() != 0) {
    		printk("Failed to initialize modem\n");
    		return -1;
    	}
    	retval = gnss_ctrl(GNSS_INIT_AND_START);
    	return retval;
    }
    
    static void print_satellite_stats(nrf_gnss_data_frame_t *pvt_data)
    {
    	u8_t  tracked          = 0;
    	u8_t  in_fix           = 0;
    	u8_t  unhealthy        = 0;
    
    	for (int i = 0; i < NRF_GNSS_MAX_SATELLITES; ++i) {
    
    		if ((pvt_data->pvt.sv[i].sv > 0) &&
    		    (pvt_data->pvt.sv[i].sv < 33)) {
    
    			tracked++;
    
    			if (pvt_data->pvt.sv[i].flags &
    					NRF_GNSS_SV_FLAG_USED_IN_FIX) {
    				in_fix++;
    			}
    
    			if (pvt_data->pvt.sv[i].flags &
    					NRF_GNSS_SV_FLAG_UNHEALTHY) {
    				unhealthy++;
    			}
    		}
    	}
    
    	printk("Tracking: %d Using: %d Unhealthy: %d", tracked,
    						       in_fix,
    						       unhealthy);
    
    	printk("\nSeconds since last fix %lld\n",
    			(k_uptime_get() - fix_timestamp) / 1000);
    }
    
    static void print_gnss_stats(nrf_gnss_data_frame_t *pvt_data)
    {
    	if (pvt_data->pvt.flags & NRF_GNSS_PVT_FLAG_DEADLINE_MISSED) {
    		printk("GNSS notification deadline missed\n");
    	}
    	if (pvt_data->pvt.flags & NRF_GNSS_PVT_FLAG_NOT_ENOUGH_WINDOW_TIME) {
    		printk("GNSS operation blocked by insufficient time windows\n");
    	}
    }
    
    static void print_fix_data(nrf_gnss_data_frame_t *pvt_data)
    {
    	printf("Longitude:  %f\n", pvt_data->pvt.longitude);
    	printf("Latitude:   %f\n", pvt_data->pvt.latitude);
    	printf("Altitude:   %f\n", pvt_data->pvt.altitude);
    	printf("Speed:      %f\n", pvt_data->pvt.speed);
    	printf("Heading:    %f\n", pvt_data->pvt.heading);
    	printk("Date:       %02u-%02u-%02u\n", pvt_data->pvt.datetime.day,
    					       pvt_data->pvt.datetime.month,
    					       pvt_data->pvt.datetime.year);
    	printk("Time (UTC): %02u:%02u:%02u\n", pvt_data->pvt.datetime.hour,
    					       pvt_data->pvt.datetime.minute,
    					      pvt_data->pvt.datetime.seconds);
    }
    
    static void print_nmea_data(void)
    {
    	printk("NMEA strings:\n");
    
    	for (int i = 0; i < nmea_string_cnt; ++i) {
    		printk("%s\n", nmea_strings[i]);
    	}
    }
    
    int process_gps_data(nrf_gnss_data_frame_t *gps_data)
    {
    	int retval;
    
    	retval = nrf_recv(gnss_fd,
    			  gps_data,
    			  sizeof(nrf_gnss_data_frame_t),
    			  NRF_MSG_DONTWAIT);
    
    	if (retval > 0) {
    
    		switch (gps_data->data_id) {
    		case NRF_GNSS_PVT_DATA_ID:
    			memcpy(&last_pvt,
    			       gps_data,
    			       sizeof(nrf_gnss_data_frame_t));
    			nmea_string_cnt = 0;
    			got_fix = false;
    			
    			if ((gps_data->pvt.flags &
    				NRF_GNSS_PVT_FLAG_FIX_VALID_BIT)
    				== NRF_GNSS_PVT_FLAG_FIX_VALID_BIT) {
    
    				got_fix = true;
    				fix_timestamp = k_uptime_get();
    
    			}
    			break;
    
    		case NRF_GNSS_NMEA_DATA_ID:
    			if (nmea_string_cnt < 10) {
    				memcpy(nmea_strings[nmea_string_cnt++],
    				       gps_data->nmea,
    				       retval);
    			}
    			break;
    
    		case NRF_GNSS_AGPS_DATA_ID:
    #ifdef CONFIG_SUPL_CLIENT_LIB
    			printk("\033[1;1H");
    			printk("\033[2J");
    			printk("New AGPS data requested, contacting SUPL server, flags %d\n",
    			       gps_data->agps.data_flags);
    			activate_lte(true);
    			printk("Established LTE link\n");
    			if (open_supl_socket() == 0) {
    				printf("Starting SUPL session\n");
    				supl_session(&gps_data->agps);
    				printk("Done\n");
    				close_supl_socket();
    			}
    			activate_lte(false);
    			k_sleep(K_MSEC(2000));
    #endif
    			break;
    
    		default:
    			break;
    		}
    	}
    
    	return retval;
    }
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    int inject_agps_type(void *agps,
    		     size_t agps_size,
    		     nrf_gnss_agps_data_type_t type,
    		     void *user_data)
    {
    	ARG_UNUSED(user_data);
    	int retval = nrf_sendto(gnss_fd,
    				agps,
    				agps_size,
    				0,
    				&type,
    				sizeof(type));
    
    	if (retval != 0) {
    		printk("Failed to send AGNSS data, type: %d (err: %d)\n",
    		       type,
    		       errno);
    		return -1;
    	}
    
    	printk("Injected AGPS data, flags: %d, size: %d\n", type, agps_size);
    
    	return 0;
    }
    #endif
    
    int main(void)
    {
    	nrf_gnss_data_frame_t gps_data;
    	u8_t		      cnt = 0;
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    	static struct supl_api supl_api = {
    		.read       = supl_read,
    		.write      = supl_write,
    		.handler    = inject_agps_type,
    		.logger     = supl_logger,
    		.counter_ms = k_uptime_get
    	};
    #endif
    
    	printk("Starting GPS application\n");
    
    	if (init_app() != 0) {
    		return -1;
    	}
    
    #ifdef CONFIG_SUPL_CLIENT_LIB
    	int rc = supl_init(&supl_api);
    
    	if (rc != 0) {
    		return rc;
    	}
    #endif
    
    	printk("Getting GPS data...\n");
    
    	while (1) {
    
    		do {
    			/* Loop until we don't have more
    			 * data to read
    			 */
    		} while (process_gps_data(&gps_data) > 0);
    
    		if (IS_ENABLED(CONFIG_GPS_SAMPLE_NMEA_ONLY)) {
    			print_nmea_data();
    			nmea_string_cnt = 0;
    		} else {
    			printk("\033[1;1H");
    			printk("\033[2J");
    			print_satellite_stats(&last_pvt);
    			print_gnss_stats(&last_pvt);
    			printk("---------------------------------\n");
    
    			if (!got_fix) {
    				printk("Seconds since last fix: %lld\n",
    				       (k_uptime_get() - fix_timestamp) / 1000);
    				cnt++;
    				printk("Searching [%c]\n",
    				       update_indicator[cnt%4]);
    			} else {
    				print_fix_data(&last_pvt);
    			}
    			
    			printk("\nNMEA strings:\n\n");
    			print_nmea_data();
    			printk("---------------------------------");
    
    		}
    
    		k_sleep(K_MSEC(500));
    	}
    
    	return 0;
    }
    

    I also add CONFIG_GPS_SAMPLE_NMEA_ONLY=n to prj.conf

    and here are some log

    2020-06-17T12:48:10.862Z DEBUG modem << ---------------------------------\x1B[1;1H\x1B[2JTracking: 7 Using: 0 Unhealthy: 0\x0D\x0A
    2020-06-17T12:48:10.870Z DEBUG modem << Seconds since last fix 637\x0D\x0A
    2020-06-17T12:48:10.877Z DEBUG modem << ---------------------------------\x0D\x0A
    2020-06-17T12:48:10.882Z DEBUG modem << Seconds since last fix: 637\x0D\x0A
    2020-06-17T12:48:10.889Z DEBUG modem << Searching [|]\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.897Z DEBUG modem << NMEA strings:\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.905Z DEBUG modem << NMEA strings:\x0D\x0A
    2020-06-17T12:48:10.912Z DEBUG modem << $GPGGA,001036.00,,,,,0,07,99.99,,M,0,,*34\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.916Z DEBUG modem << $GPGLL,,,,,001036.00,V,A*41\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.921Z DEBUG modem << $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,1*2D\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.926Z DEBUG modem << $GPGSV,2,1,7,20,,,28,7,,,26,26,,,34,8,,,33,1*50\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.934Z DEBUG modem << $GPGSV,2,2,7,16,,,32,27,,,34,10,,,33,1*56\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:10.943Z DEBUG modem << $GPRMC,001036.00,V,,,,,,,060180,,,N,V*0C\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.247Z DEBUG modem << ---------------------------------\x1B[1;1H\x1B[2JTracking: 7 Using: 0 Unhealthy: 0\x0D\x0A
    2020-06-17T12:48:11.254Z DEBUG modem << Seconds since last fix 638\x0D\x0A
    2020-06-17T12:48:11.259Z DEBUG modem << ---------------------------------\x0D\x0A
    2020-06-17T12:48:11.265Z DEBUG modem << Seconds since last fix: 638\x0D\x0A
    2020-06-17T12:48:11.270Z DEBUG modem << Searching [/]\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.276Z DEBUG modem << NMEA strings:\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.283Z DEBUG modem << NMEA strings:\x0D\x0A
    2020-06-17T12:48:11.288Z DEBUG modem << $GPGGA,001037.00,,,,,0,07,99.99,,M,0,,*35\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.293Z DEBUG modem << $GPGLL,,,,,001037.00,V,A*40\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.298Z DEBUG modem << $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,1*2D\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.303Z DEBUG modem << $GPGSV,2,1,7,20,,,27,7,,,26,26,,,33,8,,,33,1*58\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.308Z DEBUG modem << $GPGSV,2,2,7,16,,,32,27,,,34,10,,,33,1*56\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.314Z DEBUG modem << $GPRMC,001037.00,V,,,,,,,060180,,,N,V*0D\x0D\x0D\x0A\x0D\x0A
    2020-06-17T12:48:11.597Z DEBUG modem << ---------------------------------\x1B[1;1H\x1B[2JTracking: 7 Using: 0 Unhealthy: 0\x0D\x0A
    2020-06-17T12:48:11.605Z DEBUG modem << Seconds since last fix 638\x0D\x0A
    2020-06-17T12:48:11.610Z DEBUG modem << ---------------------------------\x0D\x0A

    Any help please 

Children
  • Hi Ricardo,
    I have seen something similar when LTE running in the 
    background when using iBasis in an area where the network did not support PSM mode or eDRX which caused this similar behavior you are seeing.



    Please make sure that you are only running the GPS. 
    (e.g. could you share the .config file found in the build/zephyr folder of your project?)

  • Hi, 

    What should I understand with your image ? 

    here is the .config

    #
    # Modules
    #
    
    #
    # Nordic nRF Connect
    #
    # CONFIG_NCS_SAMPLES_DEFAULTS is not set
    
    #
    # Bootloader
    #
    # CONFIG_MCUBOOT_BUILD_S1_VARIANT is not set
    # CONFIG_SECURE_BOOT is not set
    # CONFIG_SECURE_BOOT_CRYPTO is not set
    
    #
    # Secure Boot firmware validation
    #
    CONFIG_SB_VALIDATION_INFO_MAGIC=0x86518483
    CONFIG_SB_VALIDATION_POINTER_MAGIC=0x6919b47e
    CONFIG_SB_VALIDATION_INFO_CRYPTO_ID=1
    CONFIG_SB_VALIDATION_INFO_VERSION=2
    # end of Secure Boot firmware validation
    # end of Bootloader
    
    #
    # Bluetooth Low Energy
    #
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1024
    # end of Bluetooth Low Energy
    
    #
    # DFU
    #
    # CONFIG_DFU_TARGET is not set
    # end of DFU
    
    # CONFIG_NRF_ESB is not set
    
    #
    # Networking
    #
    
    #
    # Application protocols
    #
    # CONFIG_NRF_CLOUD is not set
    # CONFIG_DOWNLOAD_CLIENT is not set
    # CONFIG_AWS_IOT is not set
    # CONFIG_AWS_JOBS is not set
    # CONFIG_AWS_FOTA is not set
    # CONFIG_CLOUD_API is not set
    
    #
    # Self-Registration (Zi ZHu Ce)
    #
    # CONFIG_ZZHC is not set
    # end of Self-Registration (Zi ZHu Ce)
    # end of Application protocols
    # end of Networking
    
    #
    # NFC
    #
    # CONFIG_NFC_NDEF is not set
    # CONFIG_NFC_NDEF_PARSER is not set
    # CONFIG_NFC_T2T_PARSER is not set
    # CONFIG_NFC_T4T_ISODEP is not set
    # CONFIG_NFC_T4T_APDU is not set
    # CONFIG_NFC_T4T_CC_FILE is not set
    # CONFIG_NFC_T4T_HL_PROCEDURE is not set
    # CONFIG_NFC_PLATFORM is not set
    # CONFIG_NFC_TNEP_TAG is not set
    # CONFIG_NFC_TNEP_POLLER is not set
    # end of NFC
    
    # CONFIG_PROFILER is not set
    
    #
    # SPM
    #
    CONFIG_SPM=y
    # CONFIG_SPM_BUILD_STRATEGY_USE_HEX_FILE is not set
    # CONFIG_SPM_BUILD_STRATEGY_SKIP_BUILD is not set
    CONFIG_SPM_BUILD_STRATEGY_FROM_SOURCE=y
    # CONFIG_IS_SPM is not set
    CONFIG_ARM_ENTRY_VENEERS_LIB_NAME="spm/libspmsecureentries.a"
    # end of SPM
    
    CONFIG_FW_INFO=y
    CONFIG_FW_VALIDATION_METADATA_OFFSET=0
    CONFIG_FW_INFO_OFFSET=0x200
    CONFIG_FW_INFO_FIRMWARE_VERSION=1
    CONFIG_FW_INFO_MAGIC_COMMON=0x281ee6de
    CONFIG_FW_INFO_MAGIC_FIRMWARE_INFO=0x8fcebb4c
    CONFIG_FW_INFO_MAGIC_EXT_API=0xb845acea
    CONFIG_FW_INFO_HARDWARE_ID=91
    CONFIG_FW_INFO_VERSION=2
    CONFIG_FW_INFO_CRYPTO_ID=0
    CONFIG_FW_INFO_MAGIC_COMPATIBILITY_ID=0
    CONFIG_FW_INFO_MAGIC_LEN=12
    CONFIG_FW_INFO_VALID_VAL=0x9102FFFF
    # CONFIG_PPI_TRACE is not set
    
    #
    # Nordic MPSL
    #
    CONFIG_MPSL_THREAD_COOP_PRIO=8
    CONFIG_MPSL_SIGNAL_STACK_SIZE=1024
    # end of Nordic MPSL
    
    #
    # Libraries
    #
    
    #
    # Binary libraries
    #
    # end of Binary libraries
    
    #
    # BSD Library for nrf91
    #
    CONFIG_BSD_LIBRARY=y
    CONFIG_BSD_LIBRARY_SYS_INIT=y
    # CONFIG_BSD_LIBRARY_TRACE_ENABLED is not set
    # end of BSD Library for nrf91
    
    CONFIG_ADP536X=y
    CONFIG_ADP536X_BUS_NAME="I2C_2"
    
    #
    # AT Command driver
    #
    CONFIG_AT_CMD=y
    CONFIG_AT_CMD_SYS_INIT=y
    CONFIG_AT_CMD_INIT_PRIORITY=40
    CONFIG_AT_CMD_THREAD_PRIO=10
    CONFIG_AT_CMD_THREAD_STACK_SIZE=1024
    CONFIG_AT_CMD_RESPONSE_MAX_LEN=2700
    CONFIG_AT_CMD_RESPONSE_BUFFER_COUNT=2
    # end of AT Command driver
    
    # CONFIG_ST25R3911B_LIB is not set
    # CONFIG_LTE_LINK_CONTROL is not set
    # CONFIG_FPROTECT is not set
    CONFIG_AT_NOTIF=y
    CONFIG_AT_NOTIF_SYS_INIT=y
    
    #
    # AT Host Library for nrf91
    #
    # CONFIG_AT_HOST_LIBRARY is not set
    # end of AT Host Library for nrf91
    
    # CONFIG_DK_LIBRARY is not set
    # CONFIG_AT_CMD_PARSER is not set
    # CONFIG_MODEM_INFO is not set
    # CONFIG_PDN_MANAGEMENT is not set
    CONFIG_RESET_ON_FATAL_ERROR=y
    # CONFIG_SMS is not set
    # CONFIG_SUPL_CLIENT_LIB is not set
    # end of Libraries
    
    #
    # Device Drivers
    #
    CONFIG_ENTROPY_CC310=y
    # CONFIG_ETH_RTT is not set
    # CONFIG_SENSOR is not set
    
    #
    # GPS Drivers
    #
    # CONFIG_GPS_SIM is not set
    # CONFIG_NRF9160_GPS is not set
    # end of GPS Drivers
    
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC is not set
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH is not set
    # end of Device Drivers
    
    #
    # External libraries
    #
    # CONFIG_CJSON_LIB is not set
    # end of External libraries
    
    # CONFIG_UNITY is not set
    # end of Nordic nRF Connect
    
    #
    # MCUboot
    #
    CONFIG_BOOT_SIGNATURE_KEY_FILE="root-rsa-2048.pem"
    CONFIG_DT_FLASH_WRITE_BLOCK_SIZE=4
    # end of MCUboot
    
    #
    # Nordic nrfxlib
    #
    CONFIG_BSD_LIB=y
    # CONFIG_NFC_T2T_NRFXLIB is not set
    # CONFIG_NFC_T4T_NRFXLIB is not set
    
    #
    # Crypto libraries for nRF5x SOCs.
    #
    CONFIG_NRFXLIB_CRYPTO=y
    CONFIG_NRF_OBERON=y
    # CONFIG_NRF_CC310_BL is not set
    # CONFIG_NRF_CC310_PLATFORM is not set
    # end of Crypto libraries for nRF5x SOCs.
    
    #
    # Nordic Security
    #
    # CONFIG_NORDIC_SECURITY_BACKEND is not set
    # end of Nordic Security
    # end of Nordic nrfxlib
    
    #
    # Optional modules. Make sure they're installed, via the project manifest.
    #
    # CONFIG_CANOPENNODE is not set
    # CONFIG_CIVETWEB is not set
    # CONFIG_LIBMETAL is not set
    # CONFIG_HAS_SEMTECH_LORAMAC is not set
    # CONFIG_HAS_SEMTECH_RADIO_DRIVERS is not set
    # CONFIG_MBEDTLS is not set
    # CONFIG_HAS_MEC_HAL is not set
    CONFIG_HAS_NRFX=y
    
    #
    # nrfx drivers
    #
    # CONFIG_NRFX_CLOCK is not set
    # CONFIG_NRFX_DPPI is not set
    # CONFIG_NRFX_EGU is not set
    # CONFIG_NRFX_EGU0 is not set
    # CONFIG_NRFX_EGU1 is not set
    # CONFIG_NRFX_EGU2 is not set
    # CONFIG_NRFX_EGU3 is not set
    # CONFIG_NRFX_EGU4 is not set
    # CONFIG_NRFX_EGU5 is not set
    # CONFIG_NRFX_GPIOTE is not set
    # CONFIG_NRFX_I2S is not set
    # CONFIG_NRFX_IPC is not set
    CONFIG_NRFX_NVMC=y
    # CONFIG_NRFX_PDM is not set
    # CONFIG_NRFX_POWER is not set
    # CONFIG_NRFX_PWM is not set
    # CONFIG_NRFX_PWM0 is not set
    # CONFIG_NRFX_PWM1 is not set
    # CONFIG_NRFX_PWM2 is not set
    # CONFIG_NRFX_PWM3 is not set
    # CONFIG_NRFX_RTC is not set
    # CONFIG_NRFX_RTC0 is not set
    # CONFIG_NRFX_RTC1 is not set
    # CONFIG_NRFX_SAADC is not set
    CONFIG_NRFX_SPIM=y
    # CONFIG_NRFX_SPIM0 is not set
    # CONFIG_NRFX_SPIM1 is not set
    # CONFIG_NRFX_SPIM2 is not set
    CONFIG_NRFX_SPIM3=y
    # CONFIG_NRFX_SPIS is not set
    # CONFIG_NRFX_SPIS0 is not set
    # CONFIG_NRFX_SPIS1 is not set
    # CONFIG_NRFX_SPIS2 is not set
    # CONFIG_NRFX_SPIS3 is not set
    # CONFIG_NRFX_SYSTICK is not set
    # CONFIG_NRFX_TIMER is not set
    # CONFIG_NRFX_TIMER0 is not set
    # CONFIG_NRFX_TIMER1 is not set
    # CONFIG_NRFX_TIMER2 is not set
    CONFIG_NRFX_TWIM=y
    # CONFIG_NRFX_TWIM0 is not set
    # CONFIG_NRFX_TWIM1 is not set
    CONFIG_NRFX_TWIM2=y
    # CONFIG_NRFX_TWIM3 is not set
    # CONFIG_NRFX_TWIS is not set
    # CONFIG_NRFX_TWIS0 is not set
    # CONFIG_NRFX_TWIS1 is not set
    # CONFIG_NRFX_TWIS2 is not set
    # CONFIG_NRFX_TWIS3 is not set
    # CONFIG_NRFX_UARTE is not set
    # CONFIG_NRFX_UARTE0 is not set
    # CONFIG_NRFX_UARTE1 is not set
    # CONFIG_NRFX_UARTE2 is not set
    # CONFIG_NRFX_UARTE3 is not set
    # CONFIG_NRFX_WDT is not set
    # CONFIG_NRFX_WDT0 is not set
    # CONFIG_NRFX_PRS is not set
    # CONFIG_NRFX_PRS_BOX_0 is not set
    # CONFIG_NRFX_PRS_BOX_1 is not set
    # CONFIG_NRFX_PRS_BOX_2 is not set
    # CONFIG_NRFX_PRS_BOX_3 is not set
    # CONFIG_NRFX_PRS_BOX_4 is not set
    # end of nrfx drivers
    
    # CONFIG_OPENAMP is not set
    # CONFIG_MIPI_SYST_LIB is not set
    # CONFIG_TINYCBOR is not set
    # end of Modules
    
    CONFIG_SPI=y
    # CONFIG_NET_L2_ETHERNET is not set
    CONFIG_I2C=y
    # CONFIG_MODEM is not set
    CONFIG_UART_INTERRUPT_DRIVEN=y
    CONFIG_NET_IPV6=y
    # CONFIG_NET_CONFIG_NEED_IPV6 is not set
    # CONFIG_UART_1_NRF_UARTE is not set
    CONFIG_BOARD="nrf9160_pca20035"
    CONFIG_I2C_2=y
    CONFIG_SPI_3=y
    CONFIG_FLASH_LOAD_SIZE=0x0
    CONFIG_FLASH_LOAD_OFFSET=0x0
    CONFIG_SOC="nRF9160_SICA"
    CONFIG_SOC_SERIES="nrf91"
    CONFIG_NUM_IRQS=65
    CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=32768
    # CONFIG_WATCHDOG is not set
    # CONFIG_UART_NS16550 is not set
    CONFIG_GPIO=y
    CONFIG_SYS_POWER_MANAGEMENT=y
    # CONFIG_SYS_POWER_DEEP_SLEEP_STATES is not set
    CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1=y
    # CONFIG_DEVICE_POWER_MANAGEMENT is not set
    CONFIG_ARCH_HAS_CUSTOM_BUSY_WAIT=y
    # CONFIG_CORTEX_M_SYSTICK is not set
    CONFIG_CLOCK_CONTROL=y
    CONFIG_NRF_RTC_TIMER=y
    CONFIG_SYS_CLOCK_TICKS_PER_SEC=32768
    CONFIG_BUILD_OUTPUT_HEX=y
    CONFIG_FLOAT=y
    CONFIG_TEXT_SECTION_OFFSET=0
    CONFIG_FLASH_SIZE=1024
    CONFIG_FLASH_BASE_ADDRESS=0x0
    CONFIG_SRAM_SIZE=128
    CONFIG_SRAM_BASE_ADDRESS=0x20020000
    # CONFIG_CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS is not set
    # CONFIG_TINYCRYPT is not set
    # CONFIG_NET_L2_IEEE802154 is not set
    CONFIG_SOC_GECKO_EMU=y
    CONFIG_HEAP_MEM_POOL_SIZE=2048
    CONFIG_BOARD_NRF9160_PCA20035NS=y
    
    #
    # Board Options
    #
    # end of Board Options
    
    # CONFIG_SOC_SERIES_BEETLE is not set
    # CONFIG_SOC_SERIES_MPS2 is not set
    # CONFIG_SOC_SERIES_MUSCA is not set
    # CONFIG_SOC_SERIES_MUSCA_B1 is not set
    # CONFIG_SOC_SERIES_SAMD20 is not set
    # CONFIG_SOC_SERIES_SAMD21 is not set
    # CONFIG_SOC_SERIES_SAMD51 is not set
    # CONFIG_SOC_SERIES_SAME51 is not set
    # CONFIG_SOC_SERIES_SAME53 is not set
    # CONFIG_SOC_SERIES_SAME54 is not set
    # CONFIG_SOC_SERIES_SAMR21 is not set
    # CONFIG_SOC_SERIES_SAM3X is not set
    # CONFIG_SOC_SERIES_SAM4S is not set
    # CONFIG_SOC_SERIES_SAME70 is not set
    # CONFIG_SOC_SERIES_VALKYRIE is not set
    # CONFIG_SOC_SERIES_PSOC62 is not set
    # CONFIG_SOC_SERIES_MEC1501X is not set
    # CONFIG_SOC_SERIES_MEC1701X is not set
    # CONFIG_SOC_SERIES_NRF51X is not set
    # CONFIG_SOC_SERIES_NRF52X is not set
    # CONFIG_SOC_SERIES_NRF53X is not set
    CONFIG_SOC_SERIES_NRF91X=y
    # CONFIG_SOC_SERIES_IMX_6X_M4 is not set
    # CONFIG_SOC_SERIES_IMX7_M4 is not set
    # CONFIG_SOC_SERIES_IMX_RT is not set
    # CONFIG_SOC_SERIES_KINETIS_K2X is not set
    # CONFIG_SOC_SERIES_KINETIS_K6X is not set
    # CONFIG_SOC_SERIES_KINETIS_K8X is not set
    # CONFIG_SOC_SERIES_KINETIS_KE1XF is not set
    # CONFIG_SOC_SERIES_KINETIS_KL2X is not set
    # CONFIG_SOC_SERIES_KINETIS_KV5X is not set
    # CONFIG_SOC_SERIES_KINETIS_KWX is not set
    # CONFIG_SOC_SERIES_LPC54XXX is not set
    # CONFIG_SOC_SERIES_LPC55XXX is not set
    # CONFIG_SOC_SERIES_EFM32GG11B is not set
    # CONFIG_SOC_SERIES_EFM32HG is not set
    # CONFIG_SOC_SERIES_EFM32JG12B is not set
    # CONFIG_SOC_SERIES_EFM32PG12B is not set
    # CONFIG_SOC_SERIES_EFM32WG is not set
    # CONFIG_SOC_SERIES_EFR32FG1P is not set
    # CONFIG_SOC_SERIES_EFR32MG12P is not set
    # CONFIG_SOC_SERIES_STM32F0X is not set
    # CONFIG_SOC_SERIES_STM32F1X is not set
    # CONFIG_SOC_SERIES_STM32F2X is not set
    # CONFIG_SOC_SERIES_STM32F3X is not set
    # CONFIG_SOC_SERIES_STM32F4X is not set
    # CONFIG_SOC_SERIES_STM32F7X is not set
    # CONFIG_SOC_SERIES_STM32G0X is not set
    # CONFIG_SOC_SERIES_STM32G4X is not set
    # CONFIG_SOC_SERIES_STM32H7X is not set
    # CONFIG_SOC_SERIES_STM32L0X is not set
    # CONFIG_SOC_SERIES_STM32L1X is not set
    # CONFIG_SOC_SERIES_STM32L4X is not set
    # CONFIG_SOC_SERIES_STM32MP1X is not set
    # CONFIG_SOC_SERIES_STM32WBX is not set
    # CONFIG_SOC_TI_LM3S6965 is not set
    # CONFIG_SOC_SERIES_CC13X2_CC26X2 is not set
    # CONFIG_SOC_SERIES_CC32XX is not set
    # CONFIG_SOC_SERIES_MSP432P4XX is not set
    # CONFIG_SOC_XILINX_ZYNQMP_RPU is not set
    
    #
    # Hardware Configuration
    #
    CONFIG_CPU_HAS_ARM_MPU=y
    CONFIG_CPU_HAS_NRF_IDAU=y
    CONFIG_SOC_FAMILY="nordic_nrf"
    CONFIG_SOC_FAMILY_NRF=y
    CONFIG_HAS_HW_NRF_CC310=y
    CONFIG_HAS_HW_NRF_CLOCK=y
    CONFIG_HAS_HW_NRF_DPPIC=y
    CONFIG_HAS_HW_NRF_EGU0=y
    CONFIG_HAS_HW_NRF_EGU1=y
    CONFIG_HAS_HW_NRF_EGU2=y
    CONFIG_HAS_HW_NRF_EGU3=y
    CONFIG_HAS_HW_NRF_EGU4=y
    CONFIG_HAS_HW_NRF_EGU5=y
    CONFIG_HAS_HW_NRF_GPIO0=y
    CONFIG_HAS_HW_NRF_GPIOTE=y
    CONFIG_HAS_HW_NRF_I2S=y
    CONFIG_HAS_HW_NRF_IPC=y
    CONFIG_HAS_HW_NRF_PDM=y
    CONFIG_HAS_HW_NRF_POWER=y
    CONFIG_HAS_HW_NRF_PWM0=y
    CONFIG_HAS_HW_NRF_PWM1=y
    CONFIG_HAS_HW_NRF_PWM2=y
    CONFIG_HAS_HW_NRF_PWM3=y
    CONFIG_HAS_HW_NRF_RTC0=y
    CONFIG_HAS_HW_NRF_RTC1=y
    CONFIG_HAS_HW_NRF_SAADC=y
    CONFIG_HAS_HW_NRF_SPIM0=y
    CONFIG_HAS_HW_NRF_SPIM1=y
    CONFIG_HAS_HW_NRF_SPIM2=y
    CONFIG_HAS_HW_NRF_SPIM3=y
    CONFIG_HAS_HW_NRF_SPIS0=y
    CONFIG_HAS_HW_NRF_SPIS1=y
    CONFIG_HAS_HW_NRF_SPIS2=y
    CONFIG_HAS_HW_NRF_SPIS3=y
    CONFIG_HAS_HW_NRF_SPU=y
    CONFIG_HAS_HW_NRF_TIMER0=y
    CONFIG_HAS_HW_NRF_TIMER1=y
    CONFIG_HAS_HW_NRF_TIMER2=y
    CONFIG_HAS_HW_NRF_TWIM0=y
    CONFIG_HAS_HW_NRF_TWIM1=y
    CONFIG_HAS_HW_NRF_TWIM2=y
    CONFIG_HAS_HW_NRF_TWIM3=y
    CONFIG_HAS_HW_NRF_TWIS0=y
    CONFIG_HAS_HW_NRF_TWIS1=y
    CONFIG_HAS_HW_NRF_TWIS2=y
    CONFIG_HAS_HW_NRF_TWIS3=y
    CONFIG_HAS_HW_NRF_UARTE0=y
    CONFIG_HAS_HW_NRF_UARTE1=y
    CONFIG_HAS_HW_NRF_UARTE2=y
    CONFIG_HAS_HW_NRF_UARTE3=y
    CONFIG_HAS_HW_NRF_WDT=y
    CONFIG_NRF_ENABLE_ICACHE=y
    CONFIG_SOC_NRF9160=y
    CONFIG_SOC_NRF9160_SICA=y
    # end of Hardware Configuration
    
    CONFIG_SOC_COMPATIBLE_NRF=y
    
    #
    # ARM Options
    #
    CONFIG_CPU_CORTEX=y
    CONFIG_CPU_CORTEX_M=y
    CONFIG_ISA_THUMB2=y
    CONFIG_STACK_ALIGN_DOUBLE_WORD=y
    # CONFIG_RUNTIME_NMI is not set
    CONFIG_PLATFORM_SPECIFIC_INIT=y
    CONFIG_FAULT_DUMP=2
    # CONFIG_BUILTIN_STACK_GUARD is not set
    CONFIG_ARM_NONSECURE_FIRMWARE=y
    
    #
    # ARM TrustZone Options
    #
    
    #
    # Non-secure firmware
    #
    CONFIG_ARM_FIRMWARE_USES_SECURE_ENTRY_FUNCS=y
    # end of ARM TrustZone Options
    
    CONFIG_FP_HARDABI=y
    # CONFIG_FP_SOFTABI is not set
    CONFIG_CPU_CORTEX_M33=y
    CONFIG_CPU_CORTEX_M_HAS_SYSTICK=y
    CONFIG_CPU_CORTEX_M_HAS_DWT=y
    CONFIG_CPU_CORTEX_M_HAS_BASEPRI=y
    CONFIG_CPU_CORTEX_M_HAS_VTOR=y
    CONFIG_CPU_CORTEX_M_HAS_SPLIM=y
    CONFIG_CPU_CORTEX_M_HAS_PROGRAMMABLE_FAULT_PRIOS=y
    CONFIG_CPU_CORTEX_M_HAS_CMSE=y
    CONFIG_ARMV7_M_ARMV8_M_MAINLINE=y
    CONFIG_ARMV8_M_MAINLINE=y
    CONFIG_ARMV8_M_SE=y
    CONFIG_ARMV7_M_ARMV8_M_FP=y
    CONFIG_ARMV8_M_DSP=y
    CONFIG_XIP=y
    
    #
    # ARM Cortex-M0/M0+/M3/M4/M7/M23/M33 options
    #
    CONFIG_GEN_ISR_TABLES=y
    # CONFIG_ZERO_LATENCY_IRQS is not set
    # end of ARM Cortex-M0/M0+/M3/M4/M7/M23/M33 options
    
    CONFIG_GEN_IRQ_VECTOR_TABLE=y
    CONFIG_ARM_MPU=y
    CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE=32
    # CONFIG_MPU_STACK_GUARD is not set
    # CONFIG_MPU_ALLOW_FLASH_WRITE is not set
    # CONFIG_CUSTOM_SECTION_ALIGN is not set
    CONFIG_CUSTOM_SECTION_MIN_ALIGN_SIZE=32
    CONFIG_ARM_TRUSTZONE_M=y
    CONFIG_ARCH="arm"
    # end of ARM Options
    
    # CONFIG_ARC is not set
    CONFIG_ARM=y
    # CONFIG_X86 is not set
    # CONFIG_NIOS2 is not set
    # CONFIG_RISCV is not set
    # CONFIG_XTENSA is not set
    # CONFIG_ARCH_POSIX is not set
    
    #
    # General Architecture Options
    #
    # CONFIG_TRUSTED_EXECUTION_SECURE is not set
    CONFIG_TRUSTED_EXECUTION_NONSECURE=y
    # CONFIG_HW_STACK_PROTECTION is not set
    # CONFIG_USERSPACE is not set
    CONFIG_PRIVILEGED_STACK_SIZE=1024
    CONFIG_PRIVILEGED_STACK_TEXT_AREA=256
    CONFIG_KOBJECT_TEXT_AREA=256
    # CONFIG_STACK_GROWS_UP is not set
    
    #
    # Interrupt Configuration
    #
    # CONFIG_DYNAMIC_INTERRUPTS is not set
    CONFIG_GEN_SW_ISR_TABLE=y
    CONFIG_ARCH_SW_ISR_TABLE_ALIGN=0
    CONFIG_GEN_IRQ_START_VECTOR=0
    # end of Interrupt Configuration
    # end of General Architecture Options
    
    CONFIG_ARCH_HAS_TRUSTED_EXECUTION=y
    CONFIG_ARCH_HAS_STACK_PROTECTION=y
    CONFIG_ARCH_HAS_USERSPACE=y
    CONFIG_ARCH_HAS_EXECUTABLE_PAGE_BIT=y
    CONFIG_ARCH_HAS_RAMFUNC_SUPPORT=y
    CONFIG_ARCH_HAS_NESTED_EXCEPTION_DETECTION=y
    CONFIG_ARCH_HAS_THREAD_ABORT=y
    CONFIG_CPU_HAS_TEE=y
    CONFIG_CPU_HAS_FPU=y
    CONFIG_CPU_HAS_MPU=y
    CONFIG_MEMORY_PROTECTION=y
    CONFIG_MPU_REQUIRES_NON_OVERLAPPING_REGIONS=y
    CONFIG_MPU_GAP_FILLING=y
    CONFIG_FP_SHARING=y
    
    #
    # General Kernel Options
    #
    CONFIG_MULTITHREADING=y
    CONFIG_NUM_COOP_PRIORITIES=16
    CONFIG_NUM_PREEMPT_PRIORITIES=15
    CONFIG_MAIN_THREAD_PRIORITY=0
    CONFIG_COOP_ENABLED=y
    CONFIG_PREEMPT_ENABLED=y
    CONFIG_PRIORITY_CEILING=0
    CONFIG_NUM_METAIRQ_PRIORITIES=0
    # CONFIG_SCHED_DEADLINE is not set
    # CONFIG_SCHED_CPU_MASK is not set
    CONFIG_MAIN_STACK_SIZE=4096
    CONFIG_IDLE_STACK_SIZE=320
    CONFIG_ISR_STACK_SIZE=2048
    CONFIG_THREAD_STACK_INFO=y
    # CONFIG_THREAD_CUSTOM_DATA is not set
    CONFIG_ERRNO=y
    CONFIG_SCHED_DUMB=y
    # CONFIG_SCHED_SCALABLE is not set
    # CONFIG_SCHED_MULTIQ is not set
    # CONFIG_WAITQ_SCALABLE is not set
    CONFIG_WAITQ_DUMB=y
    
    #
    # Kernel Debugging and Metrics
    #
    # CONFIG_INIT_STACKS is not set
    # CONFIG_KERNEL_DEBUG is not set
    CONFIG_BOOT_BANNER=y
    CONFIG_BOOT_DELAY=0
    # CONFIG_EXECUTION_BENCHMARKING is not set
    # CONFIG_THREAD_MONITOR is not set
    # CONFIG_THREAD_NAME is not set
    # end of Kernel Debugging and Metrics
    
    #
    # Work Queue Options
    #
    CONFIG_SYSTEM_WORKQUEUE_PRIORITY=-1
    CONFIG_OFFLOAD_WORKQUEUE_STACK_SIZE=1024
    CONFIG_OFFLOAD_WORKQUEUE_PRIORITY=-1
    # end of Work Queue Options
    
    #
    # Atomic Operations
    #
    CONFIG_ATOMIC_OPERATIONS_BUILTIN=y
    # end of Atomic Operations
    
    #
    # Timer API Options
    #
    CONFIG_TIMESLICING=y
    CONFIG_TIMESLICE_SIZE=0
    CONFIG_TIMESLICE_PRIORITY=0
    CONFIG_POLL=y
    # end of Timer API Options
    
    #
    # Other Kernel Object Options
    #
    CONFIG_NUM_MBOX_ASYNC_MSGS=10
    CONFIG_NUM_PIPE_ASYNC_MSGS=10
    CONFIG_HEAP_MEM_POOL_MIN_SIZE=64
    # end of Other Kernel Object Options
    
    CONFIG_ARCH_HAS_CUSTOM_SWAP_TO_MAIN=y
    CONFIG_SWAP_NONATOMIC=y
    CONFIG_SYS_CLOCK_EXISTS=y
    
    #
    # Initialization Priorities
    #
    CONFIG_KERNEL_INIT_PRIORITY_OBJECTS=30
    CONFIG_KERNEL_INIT_PRIORITY_DEFAULT=40
    CONFIG_KERNEL_INIT_PRIORITY_DEVICE=50
    CONFIG_APPLICATION_INIT_PRIORITY=90
    # end of Initialization Priorities
    
    #
    # Security Options
    #
    # CONFIG_STACK_CANARIES is not set
    CONFIG_STACK_POINTER_RANDOM=0
    # end of Security Options
    
    #
    # SMP Options
    #
    CONFIG_MP_NUM_CPUS=1
    # end of SMP Options
    
    CONFIG_TICKLESS_IDLE=y
    CONFIG_TICKLESS_IDLE_THRESH=3
    CONFIG_TICKLESS_KERNEL=y
    # CONFIG_SYS_PM_STATE_LOCK is not set
    # CONFIG_SYS_PM_DIRECT_FORCE_MODE is not set
    # CONFIG_SYS_PM_DEBUG is not set
    CONFIG_SYS_PM_POLICY_RESIDENCY=y
    # CONFIG_SYS_PM_POLICY_DUMMY is not set
    # CONFIG_SYS_PM_POLICY_APP is not set
    CONFIG_SYS_PM_MIN_RESIDENCY_DEEP_SLEEP_1=60000
    # end of General Kernel Options
    
    CONFIG_HAS_DTS=y
    CONFIG_HAS_DTS_GPIO=y
    CONFIG_HAS_DTS_I2C=y
    
    #
    # Device Drivers
    #
    # CONFIG_IEEE802154 is not set
    # CONFIG_LORA is not set
    CONFIG_UART_CONSOLE_ON_DEV_NAME="UART_0"
    CONFIG_CONSOLE=y
    CONFIG_CONSOLE_INPUT_MAX_LINE_LEN=128
    CONFIG_CONSOLE_HAS_DRIVER=y
    # CONFIG_CONSOLE_HANDLER is not set
    CONFIG_UART_CONSOLE=y
    CONFIG_UART_CONSOLE_INIT_PRIORITY=60
    # CONFIG_UART_CONSOLE_DEBUG_SERVER_HOOKS is not set
    # CONFIG_UART_CONSOLE_MCUMGR is not set
    # CONFIG_USB_UART_CONSOLE is not set
    # CONFIG_RAM_CONSOLE is not set
    # CONFIG_IPM_CONSOLE_SENDER is not set
    # CONFIG_IPM_CONSOLE_RECEIVER is not set
    # CONFIG_UART_PIPE is not set
    # CONFIG_UART_MCUMGR is not set
    # CONFIG_NET_LOOPBACK is not set
    CONFIG_SERIAL=y
    
    #
    # Capabilities
    #
    CONFIG_SERIAL_HAS_DRIVER=y
    CONFIG_SERIAL_SUPPORT_ASYNC=y
    CONFIG_SERIAL_SUPPORT_INTERRUPT=y
    # CONFIG_UART_ASYNC_API is not set
    # CONFIG_UART_LINE_CTRL is not set
    # CONFIG_UART_DRV_CMD is not set
    
    #
    # Serial Drivers
    #
    # CONFIG_UART_NSIM is not set
    CONFIG_UART_NRFX=y
    CONFIG_UART_0_NRF_UARTE=y
    CONFIG_UART_0_INTERRUPT_DRIVEN=y
    # CONFIG_UART_0_NRF_PARITY_BIT is not set
    # CONFIG_UART_0_NRF_FLOW_CONTROL is not set
    CONFIG_UART_0_NRF_TX_BUFFER_SIZE=32
    CONFIG_NRF_UARTE_PERIPHERAL=y
    # CONFIG_UART_ALTERA_JTAG is not set
    # CONFIG_UART_PL011 is not set
    
    #
    # Interrupt Controllers
    #
    # CONFIG_SWERV_PIC is not set
    # CONFIG_MULTI_LEVEL_INTERRUPTS is not set
    # end of Interrupt Controllers
    
    #
    # Timer Drivers
    #
    # CONFIG_SYSTEM_CLOCK_DISABLE is not set
    # CONFIG_TIMER_READS_ITS_FREQUENCY_AT_RUNTIME is not set
    # CONFIG_SYSTEM_CLOCK_SLOPPY_IDLE is not set
    CONFIG_SYSTEM_CLOCK_INIT_PRIORITY=0
    CONFIG_TICKLESS_CAPABLE=y
    # end of Timer Drivers
    
    CONFIG_ENTROPY_GENERATOR=y
    CONFIG_ENTROPY_NRF_FORCE_ALT=y
    CONFIG_ENTROPY_HAS_DRIVER=y
    CONFIG_ENTROPY_NAME="ENTROPY_0"
    # CONFIG_GPIO_SHELL is not set
    # CONFIG_GPIO_DW is not set
    # CONFIG_GPIO_PCAL9535A is not set
    CONFIG_GPIO_NRFX=y
    CONFIG_GPIO_NRF_INIT_PRIORITY=40
    CONFIG_GPIO_NRF_P0=y
    # CONFIG_GPIO_SX1509B is not set
    # CONFIG_GPIO_INTEL_APL is not set
    # CONFIG_SHARED_IRQ is not set
    # CONFIG_SPI_ASYNC is not set
    # CONFIG_SPI_SLAVE is not set
    CONFIG_SPI_INIT_PRIORITY=70
    # CONFIG_SPI_0 is not set
    # CONFIG_SPI_1 is not set
    # CONFIG_SPI_2 is not set
    CONFIG_SPI_3_OP_MODES=1
    # CONFIG_SPI_4 is not set
    # CONFIG_SPI_5 is not set
    # CONFIG_SPI_6 is not set
    # CONFIG_SPI_7 is not set
    # CONFIG_SPI_8 is not set
    CONFIG_SPI_NRFX=y
    CONFIG_SPI_3_NRF_SPIM=y
    CONFIG_SPI_3_NRF_ORC=0xff
    CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=0
    # CONFIG_SPI_OC_SIMPLE is not set
    # CONFIG_I2C_SLAVE is not set
    # CONFIG_I2C_GPIO is not set
    CONFIG_I2C_NRFX=y
    CONFIG_I2C_2_NRF_TWIM=y
    # CONFIG_I2C_SBCON is not set
    CONFIG_I2C_INIT_PRIORITY=60
    # CONFIG_I2C_0 is not set
    # CONFIG_I2C_1 is not set
    # CONFIG_I2C_3 is not set
    # CONFIG_I2C_4 is not set
    # CONFIG_I2C_5 is not set
    # CONFIG_I2C_6 is not set
    # CONFIG_I2C_7 is not set
    # CONFIG_I2S is not set
    # CONFIG_PWM is not set
    # CONFIG_PINMUX is not set
    # CONFIG_ADC is not set
    CONFIG_CLOCK_CONTROL_NRF=y
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_150PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_100PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_75PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_50PPM is not set
    # CONFIG_CLOCK_CONTROL_NRF_K32SRC_30PPM is not set
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_20PPM=y
    # CONFIG_PTP_CLOCK is not set
    # CONFIG_IPM is not set
    # CONFIG_FLASH is not set
    # CONFIG_COUNTER is not set
    # CONFIG_DMA is not set
    # CONFIG_USB is not set
    # CONFIG_CRYPTO is not set
    # CONFIG_DISPLAY is not set
    # CONFIG_LED_STRIP is not set
    # CONFIG_WIFI is not set
    # CONFIG_LED is not set
    # CONFIG_CAN is not set
    # CONFIG_AUDIO is not set
    # CONFIG_NEURAL_NET_ACCEL is not set
    # CONFIG_HWINFO is not set
    # CONFIG_ESPI is not set
    # CONFIG_PS2 is not set
    # CONFIG_KSCAN is not set
    # CONFIG_VIDEO is not set
    # CONFIG_EEPROM is not set
    # end of Device Drivers
    
    #
    # C Library
    #
    # CONFIG_MINIMAL_LIBC is not set
    CONFIG_NEWLIB_LIBC=y
    # CONFIG_EXTERNAL_LIBC is not set
    CONFIG_HAS_NEWLIB_LIBC_NANO=y
    CONFIG_NEWLIB_LIBC_NANO=y
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
    # CONFIG_NEWLIB_LIBC_FLOAT_SCANF is not set
    CONFIG_STDOUT_CONSOLE=y
    # end of C Library
    
    #
    # Additional libraries
    #
    # CONFIG_LVGL is not set
    
    #
    # OS Support Library
    #
    # CONFIG_JSON_LIBRARY is not set
    # CONFIG_RING_BUFFER is not set
    # CONFIG_BASE64 is not set
    # end of OS Support Library
    
    CONFIG_POSIX_MAX_FDS=4
    # CONFIG_POSIX_API is not set
    # CONFIG_PTHREAD_IPC is not set
    # CONFIG_POSIX_CLOCK is not set
    CONFIG_MAX_TIMER_COUNT=5
    # CONFIG_POSIX_MQUEUE is not set
    # CONFIG_UPDATEHUB is not set
    # end of Additional libraries
    
    # CONFIG_BT is not set
    # CONFIG_CONSOLE_SUBSYS is not set
    # CONFIG_CPLUSPLUS is not set
    
    #
    # System Monitoring Options
    #
    # CONFIG_BOOT_TIME_MEASUREMENT is not set
    # CONFIG_STATS is not set
    # end of System Monitoring Options
    
    #
    # Debugging Options
    #
    # CONFIG_DEBUG is not set
    # CONFIG_TRACING is not set
    # CONFIG_STACK_USAGE is not set
    # CONFIG_STACK_SENTINEL is not set
    CONFIG_PRINTK=y
    CONFIG_EARLY_CONSOLE=y
    # CONFIG_ASSERT is not set
    # CONFIG_FORCE_NO_ASSERT is not set
    CONFIG_ASSERT_VERBOSE=y
    # CONFIG_ASSERT_NO_FILE_INFO is not set
    # CONFIG_ASSERT_NO_COND_INFO is not set
    # CONFIG_ASSERT_NO_MSG_INFO is not set
    # CONFIG_OBJECT_TRACING is not set
    # CONFIG_OVERRIDE_FRAME_POINTER_DEFAULT is not set
    # CONFIG_DEBUG_INFO is not set
    # CONFIG_OPENOCD_SUPPORT is not set
    # CONFIG_TRACING_CPU_STATS is not set
    # CONFIG_TRACING_CTF is not set
    CONFIG_HAS_SEGGER_RTT=y
    # CONFIG_USE_SEGGER_RTT is not set
    # end of Debugging Options
    
    # CONFIG_DISK_ACCESS is not set
    
    #
    # File Systems
    #
    # CONFIG_FILE_SYSTEM is not set
    # CONFIG_NVS is not set
    # end of File Systems
    
    # CONFIG_LOG is not set
    
    #
    # Management
    #
    # CONFIG_MCUMGR_SMP_BT is not set
    # CONFIG_MCUMGR_SMP_SHELL is not set
    # CONFIG_MCUMGR_SMP_UART is not set
    # CONFIG_MCUMGR is not set
    # end of Management
    
    #
    # Networking
    #
    CONFIG_NET_BUF=y
    CONFIG_NET_BUF_USER_DATA_SIZE=4
    # CONFIG_NET_BUF_LOG is not set
    # CONFIG_NET_BUF_POOL_USAGE is not set
    CONFIG_NETWORKING=y
    # CONFIG_NET_HOSTNAME_ENABLE is not set
    
    #
    # Link layer options
    #
    # CONFIG_NET_L2_DUMMY is not set
    # CONFIG_NET_L2_BT_SHELL is not set
    # CONFIG_NET_L2_PPP is not set
    # CONFIG_NET_L2_CANBUS_RAW is not set
    # CONFIG_NET_L2_WIFI_MGMT is not set
    # CONFIG_NET_L2_WIFI_SHELL is not set
    # end of Link layer options
    
    #
    # IP stack
    #
    # CONFIG_NET_NATIVE is not set
    # CONFIG_NET_OFFLOAD is not set
    CONFIG_NET_INIT_PRIO=90
    CONFIG_NET_IF_MAX_IPV6_COUNT=1
    CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=2
    CONFIG_NET_IF_MCAST_IPV6_ADDR_COUNT=3
    CONFIG_NET_IF_IPV6_PREFIX_COUNT=2
    CONFIG_NET_INITIAL_HOP_LIMIT=64
    CONFIG_NET_IPV6_MAX_NEIGHBORS=8
    # CONFIG_NET_IPV6_FRAGMENT is not set
    CONFIG_NET_IPV6_MLD=y
    CONFIG_NET_IPV6_NBR_CACHE=y
    CONFIG_NET_IPV6_ND=y
    CONFIG_NET_IPV6_DAD=y
    CONFIG_NET_IPV6_RA_RDNSS=y
    # CONFIG_NET_6LO is not set
    CONFIG_NET_IPV6_LOG_LEVEL=0
    CONFIG_NET_ICMPV6_LOG_LEVEL=0
    CONFIG_NET_IPV6_NBR_CACHE_LOG_LEVEL=0
    # CONFIG_NET_IPV4 is not set
    # CONFIG_NET_SHELL is not set
    CONFIG_NET_TC_TX_COUNT=1
    CONFIG_NET_TC_RX_COUNT=1
    CONFIG_NET_TC_MAPPING_STRICT=y
    CONFIG_NET_TX_DEFAULT_PRIORITY=1
    CONFIG_NET_RX_DEFAULT_PRIORITY=0
    CONFIG_NET_IP_ADDR_CHECK=y
    CONFIG_NET_MAX_ROUTERS=1
    CONFIG_NET_ROUTE=y
    CONFIG_NET_MAX_ROUTES=8
    CONFIG_NET_MAX_NEXTHOPS=8
    # CONFIG_NET_TCP is not set
    # CONFIG_NET_TEST_PROTOCOL is not set
    CONFIG_NET_UDP=y
    CONFIG_NET_UDP_CHECKSUM=y
    CONFIG_NET_UDP_LOG_LEVEL=0
    CONFIG_NET_MAX_CONN=4
    CONFIG_NET_MAX_CONTEXTS=6
    # CONFIG_NET_CONTEXT_NET_PKT_POOL is not set
    CONFIG_NET_CONTEXT_SYNC_RECV=y
    CONFIG_NET_CONTEXT_CHECK=y
    # CONFIG_NET_CONTEXT_PRIORITY is not set
    # CONFIG_NET_CONTEXT_TIMESTAMP is not set
    # CONFIG_NET_CONTEXT_TXTIME is not set
    # CONFIG_NET_TEST is not set
    # CONFIG_NET_TRICKLE is not set
    CONFIG_NET_PKT_RX_COUNT=4
    CONFIG_NET_PKT_TX_COUNT=4
    CONFIG_NET_BUF_RX_COUNT=16
    CONFIG_NET_BUF_TX_COUNT=16
    CONFIG_NET_BUF_FIXED_DATA_SIZE=y
    # CONFIG_NET_BUF_VARIABLE_DATA_SIZE is not set
    CONFIG_NET_BUF_DATA_SIZE=128
    CONFIG_NET_DEFAULT_IF_FIRST=y
    # CONFIG_NET_PKT_TIMESTAMP is not set
    # CONFIG_NET_PKT_TXTIME is not set
    # CONFIG_NET_PKT_RXTIME_STATS is not set
    # CONFIG_NET_PKT_TXTIME_STATS is not set
    # CONFIG_NET_PROMISCUOUS_MODE is not set
    
    #
    # Stack usage
    #
    CONFIG_NET_TX_STACK_SIZE=1200
    CONFIG_NET_RX_STACK_SIZE=1500
    # end of Stack usage
    
    # CONFIG_NET_MGMT is not set
    # CONFIG_NET_STATISTICS is not set
    # CONFIG_NET_LOG is not set
    CONFIG_NET_PKT_LOG_LEVEL=0
    # CONFIG_NET_DEBUG_NET_PKT_ALLOC is not set
    CONFIG_NET_DEBUG_NET_PKT_EXTERNALS=0
    # CONFIG_NET_DEBUG_NET_PKT_NON_FRAGILE_ACCESS is not set
    CONFIG_NET_CORE_LOG_LEVEL=0
    CONFIG_NET_IF_LOG_LEVEL=0
    CONFIG_NET_TC_LOG_LEVEL=0
    CONFIG_NET_UTILS_LOG_LEVEL=0
    CONFIG_NET_CONTEXT_LOG_LEVEL=0
    CONFIG_NET_CONN_LOG_LEVEL=0
    CONFIG_NET_ROUTE_LOG_LEVEL=0
    # end of IP stack
    
    #
    # Network Protocols
    #
    # CONFIG_COAP is not set
    # CONFIG_DNS_RESOLVER is not set
    # CONFIG_MQTT_LIB is not set
    # CONFIG_HTTP_PARSER is not set
    # CONFIG_HTTP_PARSER_URL is not set
    # CONFIG_HTTP_CLIENT is not set
    CONFIG_NET_HTTP_LOG_LEVEL=0
    # CONFIG_WEBSOCKET_CLIENT is not set
    # CONFIG_LWM2M is not set
    # CONFIG_SOCKS is not set
    # CONFIG_SNTP is not set
    # end of Network Protocols
    
    #
    # Network Libraries
    #
    CONFIG_NET_CONFIG_AUTO_INIT=y
    CONFIG_NET_CONFIG_INIT_PRIO=95
    CONFIG_NET_CONFIG_INIT_TIMEOUT=30
    # CONFIG_NET_CONFIG_NEED_IPV6_ROUTER is not set
    # CONFIG_NET_CONFIG_NEED_IPV4 is not set
    CONFIG_NET_CONFIG_LOG_LEVEL=0
    # CONFIG_NET_CONFIG_SETTINGS is not set
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_POSIX_NAMES=y
    CONFIG_NET_SOCKETS_POLL_MAX=3
    CONFIG_NET_SOCKETS_CONNECT_TIMEOUT=3000
    CONFIG_NET_SOCKETS_SOCKOPT_TLS=y
    # CONFIG_NET_SOCKETS_ENABLE_DTLS is not set
    CONFIG_NET_SOCKETS_TLS_MAX_CONTEXTS=1
    CONFIG_NET_SOCKETS_TLS_MAX_CREDENTIALS=4
    CONFIG_NET_SOCKETS_TLS_MAX_CIPHERSUITES=4
    CONFIG_NET_SOCKETS_OFFLOAD=y
    # CONFIG_NET_SOCKETS_CAN is not set
    CONFIG_NET_SOCKETS_LOG_LEVEL=0
    # CONFIG_TLS_CREDENTIALS is not set
    # end of Network Libraries
    
    #
    # Network additional services
    #
    # CONFIG_NET_CONNECTION_MANAGER is not set
    # end of Network additional services
    # end of Networking
    
    # CONFIG_SHELL is not set
    # CONFIG_IMG_MANAGER is not set
    
    #
    # Random subsystem
    #
    CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR=y
    # CONFIG_XOROSHIRO_RANDOM_GENERATOR is not set
    CONFIG_CSPRING_ENABLED=y
    CONFIG_HARDWARE_DEVICE_CS_GENERATOR=y
    # end of Random subsystem
    
    #
    # Storage
    #
    # end of Storage
    
    # CONFIG_SETTINGS is not set
    
    #
    # Testing
    #
    # CONFIG_ZTEST is not set
    # CONFIG_ZTEST_MOCKING is not set
    # CONFIG_TEST is not set
    # CONFIG_TEST_SHELL is not set
    CONFIG_TEST_EXTRA_STACKSIZE=0
    # CONFIG_TEST_USERSPACE is not set
    CONFIG_TEST_ARM_CORTEX_M=y
    # end of Testing
    
    # CONFIG_CHARACTER_FRAMEBUFFER is not set
    # CONFIG_JWT is not set
    
    #
    # Controller Area Network (CAN) bus subsystem
    #
    # end of Controller Area Network (CAN) bus subsystem
    
    #
    # External Sources
    #
    
    #
    # HALs
    #
    CONFIG_HAS_CMSIS_CORE=y
    CONFIG_HAS_CMSIS_CORE_M=y
    # end of HALs
    
    #
    # Cryptography
    #
    # end of Cryptography
    
    # CONFIG_FNMATCH is not set
    # end of External Sources
    
    CONFIG_TOOLCHAIN_GNUARMEMB=y
    
    #
    # Build and Link Features
    #
    
    #
    # Linker Options
    #
    # CONFIG_LINKER_ORPHAN_SECTION_PLACE is not set
    CONFIG_LINKER_ORPHAN_SECTION_WARN=y
    # CONFIG_LINKER_ORPHAN_SECTION_ERROR is not set
    # CONFIG_CODE_DATA_RELOCATION is not set
    CONFIG_HAS_FLASH_LOAD_OFFSET=y
    # CONFIG_USE_DT_CODE_PARTITION is not set
    # CONFIG_HAVE_CUSTOM_LINKER_SCRIPT is not set
    # CONFIG_CUSTOM_RODATA_LD is not set
    # CONFIG_CUSTOM_RWDATA_LD is not set
    # CONFIG_CUSTOM_SECTIONS_LD is not set
    CONFIG_KERNEL_ENTRY="__start"
    CONFIG_LINKER_SORT_BY_ALIGNMENT=y
    # end of Linker Options
    
    #
    # Compiler Options
    #
    # CONFIG_NATIVE_APPLICATION is not set
    CONFIG_SIZE_OPTIMIZATIONS=y
    # CONFIG_SPEED_OPTIMIZATIONS is not set
    # CONFIG_DEBUG_OPTIMIZATIONS is not set
    # CONFIG_NO_OPTIMIZATIONS is not set
    CONFIG_COMPILER_OPT=""
    # end of Compiler Options
    
    # CONFIG_ASSERT_ON_ERRORS is not set
    # CONFIG_NO_RUNTIME_CHECKS is not set
    CONFIG_RUNTIME_ERROR_CHECKS=y
    
    #
    # Build Options
    #
    CONFIG_KERNEL_BIN_NAME="zephyr"
    CONFIG_OUTPUT_STAT=y
    CONFIG_OUTPUT_DISASSEMBLY=y
    CONFIG_OUTPUT_PRINT_MEMORY_USAGE=y
    CONFIG_BUILD_OUTPUT_BIN=y
    # CONFIG_BUILD_OUTPUT_EXE is not set
    # CONFIG_BUILD_OUTPUT_S19 is not set
    # CONFIG_BUILD_NO_GAP_FILL is not set
    # CONFIG_BUILD_OUTPUT_STRIPPED is not set
    # CONFIG_APPLICATION_DEFINED_SYSCALL is not set
    # CONFIG_MAKEFILE_EXPORTS is not set
    # end of Build Options
    # end of Build and Link Features
    
    #
    # Boot Options
    #
    # CONFIG_IS_BOOTLOADER is not set
    # CONFIG_BOOTLOADER_MCUBOOT is not set
    # CONFIG_REBOOT is not set
    # CONFIG_MISRA_SANE is not set
    # end of Boot Options
    
    #
    # Compatibility
    #
    CONFIG_COMPAT_INCLUDES=y
    # end of Compatibility
    

     With the asset tracker it works, does it means that the network support PSM in my area ?

  • Hi,
    Sorry for the confusion.

    As Heidi explained in case: 250721
    The GPS sample isn't really made for the Thingy:91 (PCA20035), just the nRF9160DK (PCA10090). So if you want to open it for the Thingy:91 you will have to port it first. 

    We don't have a guide for how to port samples between the two devices, but you can take a look at the source code for the Asset Tracker application for an example of what changes you need to make.


  • Hi @martin leasund 

    Thanks for the answer.

    I'm still stuck. What should i change with the port to make it work ? I try to copy ma code the asset_tracker project but it still don't work. The asset tracker example has the correct port ? 

  • Hi,

    When you build the asset tracker sample for thingy91 it will use the separate "prj_thingy91_nrf9160ns.conf" which sets the different configuration needed for that sample to run on the device.

    One option I just to strip down the asset_tracker sample to only use the GPS controller there since you already confirmed that it works in your favor.

Related