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 

  • 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.

  • Hi

    I did try to strip down the asset_tracker sample to only use the GPS. Here is the code 

    /*
     * Copyright (c) 2018 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
     */
    
    #include <zephyr.h>
    #include <kernel_structs.h>
    #include <stdio.h>
    #include <string.h>
    #include <drivers/gps.h>
    #include <drivers/sensor.h>
    #include <console/console.h>
    #include <power/reboot.h>
    #include <logging/log_ctrl.h>
    #if defined(CONFIG_BSD_LIBRARY)
    #include <net/bsdlib.h>
    #include <bsd.h>
    #include <lte_lc.h>
    #include <modem_info.h>
    #endif /* CONFIG_BSD_LIBRARY */
    #include <net/cloud.h>
    #include <net/socket.h>
    #include <nrf_cloud.h>
    
    #if defined(CONFIG_BOOTLOADER_MCUBOOT)
    #include <dfu/mcuboot.h>
    #endif
    
    #include "cloud_codec.h"
    #include "env_sensors.h"
    #include "motion.h"
    #include "ui.h"
    #include "gps_controller.h"
    #include "service_info.h"
    #include "at_cmd.h"
    #include "watchdog.h"
    
    #include <logging/log.h>
    LOG_MODULE_REGISTER(asset_tracker, CONFIG_ASSET_TRACKER_LOG_LEVEL);
    
    #define CALIBRATION_PRESS_DURATION 	K_SECONDS(5)
    #define CLOUD_CONNACK_WAIT_DURATION	K_SECONDS(CONFIG_CLOUD_WAIT_DURATION)
    
    #ifdef CONFIG_ACCEL_USE_SIM
    #define FLIP_INPUT			CONFIG_FLIP_INPUT
    #define CALIBRATION_INPUT		-1
    #else
    #define FLIP_INPUT			-1
    #ifdef CONFIG_ACCEL_CALIBRATE
    #define CALIBRATION_INPUT		CONFIG_CALIBRATION_INPUT
    #else
    #define CALIBRATION_INPUT		-1
    #endif /* CONFIG_ACCEL_CALIBRATE */
    #endif /* CONFIG_ACCEL_USE_SIM */
    
    #if defined(CONFIG_BSD_LIBRARY) && \
    !defined(CONFIG_LTE_LINK_CONTROL)
    #error "Missing CONFIG_LTE_LINK_CONTROL"
    #endif
    
    #if defined(CONFIG_BSD_LIBRARY) && \
    defined(CONFIG_LTE_AUTO_INIT_AND_CONNECT) && \
    defined(CONFIG_NRF_CLOUD_PROVISION_CERTIFICATES)
    #error "PROVISION_CERTIFICATES \
    	requires CONFIG_LTE_AUTO_INIT_AND_CONNECT to be disabled!"
    #endif
    
    #define CLOUD_LED_ON_STR "{\"led\":\"on\"}"
    #define CLOUD_LED_OFF_STR "{\"led\":\"off\"}"
    #define CLOUD_LED_MSK UI_LED_1
    
    /* Interval in milliseconds after which the device will reboot
     * if the disconnect event has not been handled.
     */
    #define REBOOT_AFTER_DISCONNECT_WAIT_MS	K_SECONDS(15)
    
    /* Interval in milliseconds after which the device will
     * disconnect and reconnect if association was not completed.
     */
    #define CONN_CYCLE_AFTER_ASSOCIATION_REQ_MS	K_MINUTES(5)
    
    struct rsrp_data {
    	u16_t value;
    	u16_t offset;
    };
    
    
    /* Stack definition for application workqueue */
    K_THREAD_STACK_DEFINE(application_stack_area,
    		      CONFIG_APPLICATION_WORKQUEUE_STACK_SIZE);
    static struct k_work_q application_work_q;
    
    /* Sensor data */
    static struct gps_data gps_data;
    static struct cloud_channel_data gps_cloud_data;
    
    
    static atomic_val_t send_data_enable;
    
    /* Structures for work */
    
    static struct k_delayed_work long_press_button_work;
    
    #if defined(CONFIG_AT_CMD)
    #define MODEM_AT_CMD_BUFFER_LEN (CONFIG_AT_CMD_RESPONSE_MAX_LEN + 1)
    #else
    #define MODEM_AT_CMD_NOT_ENABLED_STR "Error: AT Command driver is not enabled"
    #define MODEM_AT_CMD_BUFFER_LEN (sizeof(MODEM_AT_CMD_NOT_ENABLED_STR))
    #endif
    #define MODEM_AT_CMD_RESP_TOO_BIG_STR "Error: AT Command response is too large to be sent"
    #define MODEM_AT_CMD_MAX_RESPONSE_LEN (2000)
    
    static K_SEM_DEFINE(modem_at_cmd_sem, 1, 1);
    
    
    
    enum error_type {
    	ERROR_CLOUD,
    	ERROR_BSD_RECOVERABLE,
    	ERROR_LTE_LC,
    	ERROR_SYSTEM_FAULT
    };
    
    static void set_gps_enable(const bool enable);
    
    /**@brief nRF Cloud error handler. */
    void error_handler(enum error_type err_type, int err_code)
    {
    	if (err_type == ERROR_CLOUD) {
    		if (gps_control_is_enabled()) {
    			LOG_ERR("Reboot");
    			sys_reboot(0);
    		}
    #if defined(CONFIG_LTE_LINK_CONTROL)
    		/* Turn off and shutdown modem */
    		LOG_ERR("LTE link disconnect");
    		int err = lte_lc_power_off();
    		if (err) {
    			LOG_ERR("lte_lc_power_off failed: %d", err);
    		}
    #endif /* CONFIG_LTE_LINK_CONTROL */
    #if defined(CONFIG_BSD_LIBRARY)
    		LOG_ERR("Shutdown modem");
    		bsdlib_shutdown();
    #endif
    	}
    
    #if !defined(CONFIG_DEBUG) && defined(CONFIG_REBOOT)
    	LOG_PANIC();
    	sys_reboot(0);
    #else
    	switch (err_type) {
    	case ERROR_CLOUD:
    		/* Blinking all LEDs ON/OFF in pairs (1 and 4, 2 and 3)
    		 * if there is an application error.
    		 */
    		ui_led_set_pattern(UI_LED_ERROR_CLOUD);
    		LOG_ERR("Error of type ERROR_CLOUD: %d", err_code);
    	break;
    	case ERROR_BSD_RECOVERABLE:
    		/* Blinking all LEDs ON/OFF in pairs (1 and 3, 2 and 4)
    		 * if there is a recoverable error.
    		 */
    		ui_led_set_pattern(UI_LED_ERROR_BSD_REC);
    		LOG_ERR("Error of type ERROR_BSD_RECOVERABLE: %d", err_code);
    	break;
    	default:
    		/* Blinking all LEDs ON/OFF in pairs (1 and 2, 3 and 4)
    		 * undefined error.
    		 */
    		ui_led_set_pattern(UI_LED_ERROR_UNKNOWN);
    		LOG_ERR("Unknown error type: %d, code: %d",
    			err_type, err_code);
    	break;
    	}
    
    	while (true) {
    		k_cpu_idle();
    	}
    #endif /* CONFIG_DEBUG */
    }
    
    void k_sys_fatal_error_handler(unsigned int reason,
    			       const z_arch_esf_t *esf)
    {
    	ARG_UNUSED(esf);
    
    	LOG_PANIC();
    	LOG_ERR("Running main.c error handler");
    	error_handler(ERROR_SYSTEM_FAULT, reason);
    	CODE_UNREACHABLE;
    }
    
    /**@brief Recoverable BSD library error. */
    void bsd_recoverable_error_handler(uint32_t err)
    {
    	error_handler(ERROR_BSD_RECOVERABLE, (int)err);
    }
    
    
    
    /**@brief Callback for GPS trigger events */
    static void gps_trigger_handler(struct device *dev, struct gps_trigger *trigger)
    {
    	static u32_t fix_count;
    
    	ARG_UNUSED(trigger);
    
    	if (!atomic_get(&send_data_enable)) {
    		return;
    	}
    
    	if (++fix_count < CONFIG_GPS_CONTROL_FIX_COUNT) {
    		return;
    	}
    
    	fix_count = 0;
    
    	ui_led_set_pattern(UI_LED_GPS_FIX);   //let the user know that a FIX
    
    	gps_sample_fetch(dev);
    	gps_channel_get(dev, GPS_CHAN_NMEA, &gps_data);
    	gps_cloud_data.data.buf = gps_data.nmea.buf;
    	gps_cloud_data.data.len = gps_data.nmea.len;
    	gps_cloud_data.tag += 1;
    
    	if (gps_cloud_data.tag == 0) {
    		gps_cloud_data.tag = 0x1;
    	}
    
    	gps_control_stop(K_NO_WAIT);
            printk("Yes I got a FIX !!!!!! \n\n");
    	//k_work_submit_to_queue(&application_work_q, &send_gps_data_work);
    	//env_sensors_poll();
    }
    
    
    static void set_gps_enable(const bool enable)
    {
    	if (enable == gps_control_is_enabled()) {
    		return;
    	}
    
    	if (enable) {
    		LOG_INF("Starting GPS");
    		gps_control_enable();
    		gps_control_start(K_SECONDS(1));
    
    	} else {
    		LOG_INF("Stopping GPS");
    		gps_control_disable();
    	}
    }
    
    
    
    /**@brief Configures modem to provide LTE link. Blocks until link is
     * successfully established.
     */
    static void modem_configure(void)
    {
    #if defined(CONFIG_BSD_LIBRARY)
    	if (IS_ENABLED(CONFIG_LTE_AUTO_INIT_AND_CONNECT)) {
    		/* Do nothing, modem is already turned on
    		 * and connected.
    		 */
    	} else {
    		int err;
    
    		LOG_INF("Connecting to LTE network. ");
    		LOG_INF("This may take several minutes.");
    		ui_led_set_pattern(UI_LTE_CONNECTING);
    
    		err = lte_lc_init_and_connect();
    		if (err) {
    			LOG_ERR("LTE link could not be established.");
    			error_handler(ERROR_LTE_LC, err);
    		}
    
    		LOG_INF("Connected to LTE network");
    		ui_led_set_pattern(UI_LTE_CONNECTED);
    	}
    #endif
    }
    
    
    #if defined(CONFIG_USE_UI_MODULE)
    /**@brief User interface event handler. */
    static void ui_evt_handler(struct ui_evt evt)
    {
    	/*if (IS_ENABLED(CONFIG_CLOUD_BUTTON) &&
    	   (evt.button == CONFIG_CLOUD_BUTTON_INPUT)) {
    		button_send(evt.type == UI_EVT_BUTTON_ACTIVE ? 1 : 0);
    	}*/
    
    	if (IS_ENABLED(CONFIG_ACCEL_USE_SIM) && (evt.button == FLIP_INPUT)
    	   && atomic_get(&send_data_enable)) {
    		motion_simulate_trigger();
    	}
    
    	if (IS_ENABLED(CONFIG_GPS_CONTROL_ON_LONG_PRESS) &&
    	   (evt.button == UI_BUTTON_1)) {
    		if (evt.type == UI_EVT_BUTTON_ACTIVE) {
    			k_delayed_work_submit_to_queue(&application_work_q,
    						       &long_press_button_work,
    			K_SECONDS(5));
    		} else {
    			k_delayed_work_cancel(&long_press_button_work);
    		}
    	}
    
    #if defined(CONFIG_LTE_LINK_CONTROL)
    	if ((evt.button == UI_SWITCH_2) &&
    	    IS_ENABLED(CONFIG_POWER_OPTIMIZATION_ENABLE)) {
    		int err;
    		if (evt.type == UI_EVT_BUTTON_ACTIVE) {
    			err = lte_lc_edrx_req(false);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    			err = lte_lc_psm_req(true);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    		} else {
    			err = lte_lc_psm_req(false);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    			err = lte_lc_edrx_req(true);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    		}
    	}
    #endif /* defined(CONFIG_LTE_LINK_CONTROL) */
    }
    #endif /* defined(CONFIG_USE_UI_MODULE) */
    
    void handle_bsdlib_init_ret(void)
    {
    	#if defined(CONFIG_BSD_LIBRARY)
    	int ret = bsdlib_get_init_ret();
    
    	/* Handle return values relating to modem firmware update */
    	switch (ret) {
    	case MODEM_DFU_RESULT_OK:
    		LOG_INF("MODEM UPDATE OK. Will run new firmware");
    		sys_reboot(SYS_REBOOT_COLD);
    		break;
    	case MODEM_DFU_RESULT_UUID_ERROR:
    	case MODEM_DFU_RESULT_AUTH_ERROR:
    		LOG_ERR("MODEM UPDATE ERROR %d. Will run old firmware", ret);
    		sys_reboot(SYS_REBOOT_COLD);
    		break;
    	case MODEM_DFU_RESULT_HARDWARE_ERROR:
    	case MODEM_DFU_RESULT_INTERNAL_ERROR:
    		LOG_ERR("MODEM UPDATE FATAL ERROR %d. Modem failiure", ret);
    		sys_reboot(SYS_REBOOT_COLD);
    		break;
    	default:
    		break;
    	}
    	#endif /* CONFIG_BSD_LIBRARY */
    }
    
    void main(void)
    {
    	int ret;
    
    	LOG_INF("Asset tracker started");
    	k_work_q_start(&application_work_q, application_stack_area,
    		       K_THREAD_STACK_SIZEOF(application_stack_area),
    		       CONFIG_APPLICATION_WORKQUEUE_PRIORITY);
    	if (IS_ENABLED(CONFIG_WATCHDOG)) {
    		watchdog_init_and_start(&application_work_q);
    	}
    	handle_bsdlib_init_ret();
            
    
    #if defined(CONFIG_USE_UI_MODULE)
    	ui_init(ui_evt_handler);
    #endif
         
    	//work_init();
    	modem_configure();
    
            /* Toggle GPS state */
            gps_control_init(&application_work_q, gps_trigger_handler);
    
    	set_gps_enable(!gps_control_is_enabled());
    
    }
    

    I did not touch the porting (prj_nrf9160_pca20035ns.conf). So I think the port should be correct.  

    #
    # Copyright (c) 2019 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
    #
    # General config
    CONFIG_NEWLIB_LIBC=y
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
    CONFIG_ASSERT=y
    CONFIG_REBOOT=y
    CONFIG_LOG=y
    CONFIG_LOG_IMMEDIATE=y
    
    # Network
    CONFIG_NETWORKING=y
    CONFIG_NET_NATIVE=n
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_OFFLOAD=y
    
    # LTE link control
    CONFIG_POWER_OPTIMIZATION_ENABLE=n
    CONFIG_LTE_LINK_CONTROL=y
    CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=y
    CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
    CONFIG_LTE_LINK_CONTROL_LOG_LEVEL_DBG=y
    
    CONFIG_LTE_NETWORK_MODE_NBIOT=n
    CONFIG_LTE_LEGACY_PCO_MODE=n
    CONFIG_LTE_PSM_REQ_RPTAU="00000110"
    CONFIG_LTE_PSM_REQ_RAT="00000000"
    
    CONFIG_LTE_LOCK_BANDS=y
    # Enable band 2, 3, 4, 8, 12, 13 ,20 and 28
    CONFIG_LTE_LOCK_BAND_MASK="1000000010000001100010001110"
    
    # Modem info
    CONFIG_MODEM_INFO=y
    
    # BSD library
    CONFIG_BSD_LIBRARY=y
    CONFIG_BSD_LIBRARY_TRACE_ENABLED=n
    
    # nRF Cloud
    CONFIG_CLOUD_API=y
    CONFIG_NRF_CLOUD=y
    CONFIG_NRF_CLOUD_LOG_LEVEL_DBG=y
    
    # Sensors
    CONFIG_SENSOR=y
    CONFIG_ACCEL_USE_EXTERNAL=y
    CONFIG_ACCEL_DEV_NAME="ADXL362"
    CONFIG_ADXL362=y
    CONFIG_ADXL362_TRIGGER_GLOBAL_THREAD=y
    CONFIG_ADXL362_ABS_REF_MODE=1
    CONFIG_ADXL362_ACTIVITY_THRESHOLD=200
    CONFIG_ADXL362_INACTIVITY_THRESHOLD=200
    CONFIG_ADXL362_INTERRUPT_MODE=1
    CONFIG_TEMP_USE_EXTERNAL=y
    CONFIG_TEMP_DEV_NAME="BME680"
    
    # Deselect CONFIG_BME680 if CONFIG_USE_BME680_BSEC is selected
    CONFIG_BME680=y
    CONFIG_USE_BME680_BSEC=n
    
    # GPS
    CONFIG_NRF9160_GPS_LOG_LEVEL_DBG=y
    CONFIG_NRF9160_GPS=y
    CONFIG_NRF9160_GPS_LOG_LEVEL_DBG=y
    CONFIG_GPS_USE_EXTERNAL=y
    CONFIG_GPS_DEV_NAME="NRF9160_GPS"
    
    CONFIG_GPS_CONTROL_FIRST_FIX_CHECK_DELAY=10
    CONFIG_GPS_CONTROL_FIX_CHECK_INTERVAL=30
    CONFIG_GPS_CONTROL_FIX_TRY_TIME=360
    CONFIG_GPS_CONTROL_PSM_DISABLE_ON_STOP=n
    
    # Library for buttons and LEDs
    CONFIG_DK_LIBRARY=y
    CONFIG_DK_LIBRARY_INVERT_LEDS=n
    
    # Console
    CONFIG_CLOUD_UA_BUTTONS=n
    CONFIG_CLOUD_UA_CONSOLE=n
    CONFIG_CONSOLE_SUBSYS=y
    CONFIG_CONSOLE_HANDLER=y
    CONFIG_CONSOLE_GETCHAR=y
    
    # Heap and stacks
    CONFIG_HEAP_MEM_POOL_SIZE=16384
    CONFIG_MAIN_STACK_SIZE=8192
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    CONFIG_HW_STACK_PROTECTION=y
    
    # Settings
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_FLASH_MAP=y
    CONFIG_FCB=y
    CONFIG_SETTINGS=y
    CONFIG_SETTINGS_FCB=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    
    # MCUBOOT
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_IMG_MANAGER=y
    CONFIG_MCUBOOT_IMG_MANAGER=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # AWS FOTA
    CONFIG_AWS_FOTA=y
    CONFIG_AWS_FOTA_LOG_LEVEL_DBG=y
    CONFIG_AWS_JOBS_LOG_LEVEL_DBG=y
    CONFIG_DFU_TARGET=y
    
    # Download client (needed by AWS FOTA)
    CONFIG_DOWNLOAD_CLIENT=y
    CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
    
    # Fatal error
    CONFIG_RESET_ON_FATAL_ERROR=n
    
    CONFIG_WATCHDOG=y
    

    However I still have the same issues, it can find several satellites but never get fix Disappointed

     

    Do you still think that the problem is with the port ?  In the asset_tracker sample it use the A-GPS, is it possible to make it work with just the GPS ? 

Reply
  • Hi

    I did try to strip down the asset_tracker sample to only use the GPS. Here is the code 

    /*
     * Copyright (c) 2018 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
     */
    
    #include <zephyr.h>
    #include <kernel_structs.h>
    #include <stdio.h>
    #include <string.h>
    #include <drivers/gps.h>
    #include <drivers/sensor.h>
    #include <console/console.h>
    #include <power/reboot.h>
    #include <logging/log_ctrl.h>
    #if defined(CONFIG_BSD_LIBRARY)
    #include <net/bsdlib.h>
    #include <bsd.h>
    #include <lte_lc.h>
    #include <modem_info.h>
    #endif /* CONFIG_BSD_LIBRARY */
    #include <net/cloud.h>
    #include <net/socket.h>
    #include <nrf_cloud.h>
    
    #if defined(CONFIG_BOOTLOADER_MCUBOOT)
    #include <dfu/mcuboot.h>
    #endif
    
    #include "cloud_codec.h"
    #include "env_sensors.h"
    #include "motion.h"
    #include "ui.h"
    #include "gps_controller.h"
    #include "service_info.h"
    #include "at_cmd.h"
    #include "watchdog.h"
    
    #include <logging/log.h>
    LOG_MODULE_REGISTER(asset_tracker, CONFIG_ASSET_TRACKER_LOG_LEVEL);
    
    #define CALIBRATION_PRESS_DURATION 	K_SECONDS(5)
    #define CLOUD_CONNACK_WAIT_DURATION	K_SECONDS(CONFIG_CLOUD_WAIT_DURATION)
    
    #ifdef CONFIG_ACCEL_USE_SIM
    #define FLIP_INPUT			CONFIG_FLIP_INPUT
    #define CALIBRATION_INPUT		-1
    #else
    #define FLIP_INPUT			-1
    #ifdef CONFIG_ACCEL_CALIBRATE
    #define CALIBRATION_INPUT		CONFIG_CALIBRATION_INPUT
    #else
    #define CALIBRATION_INPUT		-1
    #endif /* CONFIG_ACCEL_CALIBRATE */
    #endif /* CONFIG_ACCEL_USE_SIM */
    
    #if defined(CONFIG_BSD_LIBRARY) && \
    !defined(CONFIG_LTE_LINK_CONTROL)
    #error "Missing CONFIG_LTE_LINK_CONTROL"
    #endif
    
    #if defined(CONFIG_BSD_LIBRARY) && \
    defined(CONFIG_LTE_AUTO_INIT_AND_CONNECT) && \
    defined(CONFIG_NRF_CLOUD_PROVISION_CERTIFICATES)
    #error "PROVISION_CERTIFICATES \
    	requires CONFIG_LTE_AUTO_INIT_AND_CONNECT to be disabled!"
    #endif
    
    #define CLOUD_LED_ON_STR "{\"led\":\"on\"}"
    #define CLOUD_LED_OFF_STR "{\"led\":\"off\"}"
    #define CLOUD_LED_MSK UI_LED_1
    
    /* Interval in milliseconds after which the device will reboot
     * if the disconnect event has not been handled.
     */
    #define REBOOT_AFTER_DISCONNECT_WAIT_MS	K_SECONDS(15)
    
    /* Interval in milliseconds after which the device will
     * disconnect and reconnect if association was not completed.
     */
    #define CONN_CYCLE_AFTER_ASSOCIATION_REQ_MS	K_MINUTES(5)
    
    struct rsrp_data {
    	u16_t value;
    	u16_t offset;
    };
    
    
    /* Stack definition for application workqueue */
    K_THREAD_STACK_DEFINE(application_stack_area,
    		      CONFIG_APPLICATION_WORKQUEUE_STACK_SIZE);
    static struct k_work_q application_work_q;
    
    /* Sensor data */
    static struct gps_data gps_data;
    static struct cloud_channel_data gps_cloud_data;
    
    
    static atomic_val_t send_data_enable;
    
    /* Structures for work */
    
    static struct k_delayed_work long_press_button_work;
    
    #if defined(CONFIG_AT_CMD)
    #define MODEM_AT_CMD_BUFFER_LEN (CONFIG_AT_CMD_RESPONSE_MAX_LEN + 1)
    #else
    #define MODEM_AT_CMD_NOT_ENABLED_STR "Error: AT Command driver is not enabled"
    #define MODEM_AT_CMD_BUFFER_LEN (sizeof(MODEM_AT_CMD_NOT_ENABLED_STR))
    #endif
    #define MODEM_AT_CMD_RESP_TOO_BIG_STR "Error: AT Command response is too large to be sent"
    #define MODEM_AT_CMD_MAX_RESPONSE_LEN (2000)
    
    static K_SEM_DEFINE(modem_at_cmd_sem, 1, 1);
    
    
    
    enum error_type {
    	ERROR_CLOUD,
    	ERROR_BSD_RECOVERABLE,
    	ERROR_LTE_LC,
    	ERROR_SYSTEM_FAULT
    };
    
    static void set_gps_enable(const bool enable);
    
    /**@brief nRF Cloud error handler. */
    void error_handler(enum error_type err_type, int err_code)
    {
    	if (err_type == ERROR_CLOUD) {
    		if (gps_control_is_enabled()) {
    			LOG_ERR("Reboot");
    			sys_reboot(0);
    		}
    #if defined(CONFIG_LTE_LINK_CONTROL)
    		/* Turn off and shutdown modem */
    		LOG_ERR("LTE link disconnect");
    		int err = lte_lc_power_off();
    		if (err) {
    			LOG_ERR("lte_lc_power_off failed: %d", err);
    		}
    #endif /* CONFIG_LTE_LINK_CONTROL */
    #if defined(CONFIG_BSD_LIBRARY)
    		LOG_ERR("Shutdown modem");
    		bsdlib_shutdown();
    #endif
    	}
    
    #if !defined(CONFIG_DEBUG) && defined(CONFIG_REBOOT)
    	LOG_PANIC();
    	sys_reboot(0);
    #else
    	switch (err_type) {
    	case ERROR_CLOUD:
    		/* Blinking all LEDs ON/OFF in pairs (1 and 4, 2 and 3)
    		 * if there is an application error.
    		 */
    		ui_led_set_pattern(UI_LED_ERROR_CLOUD);
    		LOG_ERR("Error of type ERROR_CLOUD: %d", err_code);
    	break;
    	case ERROR_BSD_RECOVERABLE:
    		/* Blinking all LEDs ON/OFF in pairs (1 and 3, 2 and 4)
    		 * if there is a recoverable error.
    		 */
    		ui_led_set_pattern(UI_LED_ERROR_BSD_REC);
    		LOG_ERR("Error of type ERROR_BSD_RECOVERABLE: %d", err_code);
    	break;
    	default:
    		/* Blinking all LEDs ON/OFF in pairs (1 and 2, 3 and 4)
    		 * undefined error.
    		 */
    		ui_led_set_pattern(UI_LED_ERROR_UNKNOWN);
    		LOG_ERR("Unknown error type: %d, code: %d",
    			err_type, err_code);
    	break;
    	}
    
    	while (true) {
    		k_cpu_idle();
    	}
    #endif /* CONFIG_DEBUG */
    }
    
    void k_sys_fatal_error_handler(unsigned int reason,
    			       const z_arch_esf_t *esf)
    {
    	ARG_UNUSED(esf);
    
    	LOG_PANIC();
    	LOG_ERR("Running main.c error handler");
    	error_handler(ERROR_SYSTEM_FAULT, reason);
    	CODE_UNREACHABLE;
    }
    
    /**@brief Recoverable BSD library error. */
    void bsd_recoverable_error_handler(uint32_t err)
    {
    	error_handler(ERROR_BSD_RECOVERABLE, (int)err);
    }
    
    
    
    /**@brief Callback for GPS trigger events */
    static void gps_trigger_handler(struct device *dev, struct gps_trigger *trigger)
    {
    	static u32_t fix_count;
    
    	ARG_UNUSED(trigger);
    
    	if (!atomic_get(&send_data_enable)) {
    		return;
    	}
    
    	if (++fix_count < CONFIG_GPS_CONTROL_FIX_COUNT) {
    		return;
    	}
    
    	fix_count = 0;
    
    	ui_led_set_pattern(UI_LED_GPS_FIX);   //let the user know that a FIX
    
    	gps_sample_fetch(dev);
    	gps_channel_get(dev, GPS_CHAN_NMEA, &gps_data);
    	gps_cloud_data.data.buf = gps_data.nmea.buf;
    	gps_cloud_data.data.len = gps_data.nmea.len;
    	gps_cloud_data.tag += 1;
    
    	if (gps_cloud_data.tag == 0) {
    		gps_cloud_data.tag = 0x1;
    	}
    
    	gps_control_stop(K_NO_WAIT);
            printk("Yes I got a FIX !!!!!! \n\n");
    	//k_work_submit_to_queue(&application_work_q, &send_gps_data_work);
    	//env_sensors_poll();
    }
    
    
    static void set_gps_enable(const bool enable)
    {
    	if (enable == gps_control_is_enabled()) {
    		return;
    	}
    
    	if (enable) {
    		LOG_INF("Starting GPS");
    		gps_control_enable();
    		gps_control_start(K_SECONDS(1));
    
    	} else {
    		LOG_INF("Stopping GPS");
    		gps_control_disable();
    	}
    }
    
    
    
    /**@brief Configures modem to provide LTE link. Blocks until link is
     * successfully established.
     */
    static void modem_configure(void)
    {
    #if defined(CONFIG_BSD_LIBRARY)
    	if (IS_ENABLED(CONFIG_LTE_AUTO_INIT_AND_CONNECT)) {
    		/* Do nothing, modem is already turned on
    		 * and connected.
    		 */
    	} else {
    		int err;
    
    		LOG_INF("Connecting to LTE network. ");
    		LOG_INF("This may take several minutes.");
    		ui_led_set_pattern(UI_LTE_CONNECTING);
    
    		err = lte_lc_init_and_connect();
    		if (err) {
    			LOG_ERR("LTE link could not be established.");
    			error_handler(ERROR_LTE_LC, err);
    		}
    
    		LOG_INF("Connected to LTE network");
    		ui_led_set_pattern(UI_LTE_CONNECTED);
    	}
    #endif
    }
    
    
    #if defined(CONFIG_USE_UI_MODULE)
    /**@brief User interface event handler. */
    static void ui_evt_handler(struct ui_evt evt)
    {
    	/*if (IS_ENABLED(CONFIG_CLOUD_BUTTON) &&
    	   (evt.button == CONFIG_CLOUD_BUTTON_INPUT)) {
    		button_send(evt.type == UI_EVT_BUTTON_ACTIVE ? 1 : 0);
    	}*/
    
    	if (IS_ENABLED(CONFIG_ACCEL_USE_SIM) && (evt.button == FLIP_INPUT)
    	   && atomic_get(&send_data_enable)) {
    		motion_simulate_trigger();
    	}
    
    	if (IS_ENABLED(CONFIG_GPS_CONTROL_ON_LONG_PRESS) &&
    	   (evt.button == UI_BUTTON_1)) {
    		if (evt.type == UI_EVT_BUTTON_ACTIVE) {
    			k_delayed_work_submit_to_queue(&application_work_q,
    						       &long_press_button_work,
    			K_SECONDS(5));
    		} else {
    			k_delayed_work_cancel(&long_press_button_work);
    		}
    	}
    
    #if defined(CONFIG_LTE_LINK_CONTROL)
    	if ((evt.button == UI_SWITCH_2) &&
    	    IS_ENABLED(CONFIG_POWER_OPTIMIZATION_ENABLE)) {
    		int err;
    		if (evt.type == UI_EVT_BUTTON_ACTIVE) {
    			err = lte_lc_edrx_req(false);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    			err = lte_lc_psm_req(true);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    		} else {
    			err = lte_lc_psm_req(false);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    			err = lte_lc_edrx_req(true);
    			if (err) {
    				error_handler(ERROR_LTE_LC, err);
    			}
    		}
    	}
    #endif /* defined(CONFIG_LTE_LINK_CONTROL) */
    }
    #endif /* defined(CONFIG_USE_UI_MODULE) */
    
    void handle_bsdlib_init_ret(void)
    {
    	#if defined(CONFIG_BSD_LIBRARY)
    	int ret = bsdlib_get_init_ret();
    
    	/* Handle return values relating to modem firmware update */
    	switch (ret) {
    	case MODEM_DFU_RESULT_OK:
    		LOG_INF("MODEM UPDATE OK. Will run new firmware");
    		sys_reboot(SYS_REBOOT_COLD);
    		break;
    	case MODEM_DFU_RESULT_UUID_ERROR:
    	case MODEM_DFU_RESULT_AUTH_ERROR:
    		LOG_ERR("MODEM UPDATE ERROR %d. Will run old firmware", ret);
    		sys_reboot(SYS_REBOOT_COLD);
    		break;
    	case MODEM_DFU_RESULT_HARDWARE_ERROR:
    	case MODEM_DFU_RESULT_INTERNAL_ERROR:
    		LOG_ERR("MODEM UPDATE FATAL ERROR %d. Modem failiure", ret);
    		sys_reboot(SYS_REBOOT_COLD);
    		break;
    	default:
    		break;
    	}
    	#endif /* CONFIG_BSD_LIBRARY */
    }
    
    void main(void)
    {
    	int ret;
    
    	LOG_INF("Asset tracker started");
    	k_work_q_start(&application_work_q, application_stack_area,
    		       K_THREAD_STACK_SIZEOF(application_stack_area),
    		       CONFIG_APPLICATION_WORKQUEUE_PRIORITY);
    	if (IS_ENABLED(CONFIG_WATCHDOG)) {
    		watchdog_init_and_start(&application_work_q);
    	}
    	handle_bsdlib_init_ret();
            
    
    #if defined(CONFIG_USE_UI_MODULE)
    	ui_init(ui_evt_handler);
    #endif
         
    	//work_init();
    	modem_configure();
    
            /* Toggle GPS state */
            gps_control_init(&application_work_q, gps_trigger_handler);
    
    	set_gps_enable(!gps_control_is_enabled());
    
    }
    

    I did not touch the porting (prj_nrf9160_pca20035ns.conf). So I think the port should be correct.  

    #
    # Copyright (c) 2019 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
    #
    # General config
    CONFIG_NEWLIB_LIBC=y
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
    CONFIG_ASSERT=y
    CONFIG_REBOOT=y
    CONFIG_LOG=y
    CONFIG_LOG_IMMEDIATE=y
    
    # Network
    CONFIG_NETWORKING=y
    CONFIG_NET_NATIVE=n
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_OFFLOAD=y
    
    # LTE link control
    CONFIG_POWER_OPTIMIZATION_ENABLE=n
    CONFIG_LTE_LINK_CONTROL=y
    CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=y
    CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
    CONFIG_LTE_LINK_CONTROL_LOG_LEVEL_DBG=y
    
    CONFIG_LTE_NETWORK_MODE_NBIOT=n
    CONFIG_LTE_LEGACY_PCO_MODE=n
    CONFIG_LTE_PSM_REQ_RPTAU="00000110"
    CONFIG_LTE_PSM_REQ_RAT="00000000"
    
    CONFIG_LTE_LOCK_BANDS=y
    # Enable band 2, 3, 4, 8, 12, 13 ,20 and 28
    CONFIG_LTE_LOCK_BAND_MASK="1000000010000001100010001110"
    
    # Modem info
    CONFIG_MODEM_INFO=y
    
    # BSD library
    CONFIG_BSD_LIBRARY=y
    CONFIG_BSD_LIBRARY_TRACE_ENABLED=n
    
    # nRF Cloud
    CONFIG_CLOUD_API=y
    CONFIG_NRF_CLOUD=y
    CONFIG_NRF_CLOUD_LOG_LEVEL_DBG=y
    
    # Sensors
    CONFIG_SENSOR=y
    CONFIG_ACCEL_USE_EXTERNAL=y
    CONFIG_ACCEL_DEV_NAME="ADXL362"
    CONFIG_ADXL362=y
    CONFIG_ADXL362_TRIGGER_GLOBAL_THREAD=y
    CONFIG_ADXL362_ABS_REF_MODE=1
    CONFIG_ADXL362_ACTIVITY_THRESHOLD=200
    CONFIG_ADXL362_INACTIVITY_THRESHOLD=200
    CONFIG_ADXL362_INTERRUPT_MODE=1
    CONFIG_TEMP_USE_EXTERNAL=y
    CONFIG_TEMP_DEV_NAME="BME680"
    
    # Deselect CONFIG_BME680 if CONFIG_USE_BME680_BSEC is selected
    CONFIG_BME680=y
    CONFIG_USE_BME680_BSEC=n
    
    # GPS
    CONFIG_NRF9160_GPS_LOG_LEVEL_DBG=y
    CONFIG_NRF9160_GPS=y
    CONFIG_NRF9160_GPS_LOG_LEVEL_DBG=y
    CONFIG_GPS_USE_EXTERNAL=y
    CONFIG_GPS_DEV_NAME="NRF9160_GPS"
    
    CONFIG_GPS_CONTROL_FIRST_FIX_CHECK_DELAY=10
    CONFIG_GPS_CONTROL_FIX_CHECK_INTERVAL=30
    CONFIG_GPS_CONTROL_FIX_TRY_TIME=360
    CONFIG_GPS_CONTROL_PSM_DISABLE_ON_STOP=n
    
    # Library for buttons and LEDs
    CONFIG_DK_LIBRARY=y
    CONFIG_DK_LIBRARY_INVERT_LEDS=n
    
    # Console
    CONFIG_CLOUD_UA_BUTTONS=n
    CONFIG_CLOUD_UA_CONSOLE=n
    CONFIG_CONSOLE_SUBSYS=y
    CONFIG_CONSOLE_HANDLER=y
    CONFIG_CONSOLE_GETCHAR=y
    
    # Heap and stacks
    CONFIG_HEAP_MEM_POOL_SIZE=16384
    CONFIG_MAIN_STACK_SIZE=8192
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    CONFIG_HW_STACK_PROTECTION=y
    
    # Settings
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_FLASH_MAP=y
    CONFIG_FCB=y
    CONFIG_SETTINGS=y
    CONFIG_SETTINGS_FCB=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    
    # MCUBOOT
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_IMG_MANAGER=y
    CONFIG_MCUBOOT_IMG_MANAGER=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # AWS FOTA
    CONFIG_AWS_FOTA=y
    CONFIG_AWS_FOTA_LOG_LEVEL_DBG=y
    CONFIG_AWS_JOBS_LOG_LEVEL_DBG=y
    CONFIG_DFU_TARGET=y
    
    # Download client (needed by AWS FOTA)
    CONFIG_DOWNLOAD_CLIENT=y
    CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
    
    # Fatal error
    CONFIG_RESET_ON_FATAL_ERROR=n
    
    CONFIG_WATCHDOG=y
    

    However I still have the same issues, it can find several satellites but never get fix Disappointed

     

    Do you still think that the problem is with the port ?  In the asset_tracker sample it use the A-GPS, is it possible to make it work with just the GPS ? 

Children
Related