Nrf9160 GPS single fix mode

Hi,
I am using nRF connect sdk1.9.0 and modem firmware 1.3.1.

I have configured GPS to single fix mode.

err = nrf_modem_gnss_fix_interval_set(0);

err = nrf_modem_gnss_fix_retry_set(180)

as per documnetation
"To enable single fix navigation, set the fix interval to 0. If the fix retry parameter is non-zero, 
GNSS stops after the fix retry time is up if a valid PVT estimate has not been produced. If the fix retry parameter is set to zero, GNSS is allowed to run indefinitely until a valid PVT estimate is produced"

I have set the retry parameter to no zero like 180.if the GPS got fix it stopped ,but if GPS not got the fix in retry time it is still searching for indefinite period.

please guide us in this regard.



Thanks


 

Parents
  • please found the log and code.

     int gnss_init(void)
    {
    /* Default to continuous tracking. */
    	uint16_t fix_retry = 0;
    	uint16_t fix_interval = 1;
    
    
             if (nrf_modem_gnss_event_handler_set(gnss_event_handler) != 0) {
    		printk("Failed to set GNSS event handler");
    		return -1;
    	}
    
    
            /* Enable all supported NMEA messages. */
    	uint16_t nmea_mask = NRF_MODEM_GNSS_NMEA_RMC_MASK |
    			     NRF_MODEM_GNSS_NMEA_GGA_MASK |
    			     NRF_MODEM_GNSS_NMEA_GLL_MASK |
    			     NRF_MODEM_GNSS_NMEA_GSA_MASK |
    			     NRF_MODEM_GNSS_NMEA_GSV_MASK;
    
    	if (nrf_modem_gnss_nmea_mask_set(nmea_mask) != 0) {
    		printk("Failed to set GNSS NMEA mask");
    		return -1;
    	}
    
    	/* This use case flag should always be set. */
    	uint8_t use_case = NRF_MODEM_GNSS_USE_CASE_MULTIPLE_HOT_START;
    
    	if (IS_ENABLED(CONFIG_GNSS_SAMPLE_MODE_PERIODIC) &&
    	    !IS_ENABLED(CONFIG_GNSS_SAMPLE_ASSISTANCE_NONE)) {
    		/* Disable GNSS scheduled downloads when assistance is used. */
    		use_case |= NRF_MODEM_GNSS_USE_CASE_SCHED_DOWNLOAD_DISABLE;
    	}
    
    	
    
          uint8_t power_mode = NRF_MODEM_GNSS_PSM_DISABLED;
          if (nrf_modem_gnss_power_mode_set(power_mode) != 0) {
    		printk("Failed to set GNSS power saving mode");
    		return -1;
    	}
          if (nrf_modem_gnss_fix_retry_set(0) != 0) {
    		printk("Failed to set GNSS fix retry");
    		return -1;
    	}
    
    	if (nrf_modem_gnss_fix_interval_set(120) != 0) {
    		printk("Failed to set GNSS fix interval");
    		return -1;
    	}
    
            return 0;
    
    
    }
    
    void gps_work_init() {
      k_delayed_work_init(&gps_start_work, gps_start_work_fn);
      printk("\n\nGPS work queue initialised\n\n");
    
    }
    
    
    void run_gps() {
    
    
     k_work_schedule(&gps_start_work, K_NO_WAIT);
      printk("\n\nGPS work submitted to queue \n\n");
    
    }
    
    
    void main(void)
    {
    
    if (gnss_init() != 0) {
    		printk("Failed to initialize");
    		return -1;
    	}
            else{
            printk("\nGNSS intialized\n");
            }
          gps_work_init();   // Initialise GPS work queue
    
    }
    
    // stating gps on AWS Ready avent
    
    case AWS_IOT_EVT_READY:
    		printk("AWS_IOT_EVT_READY\n");
                    
                     run_gps();
                    
    
                    }
    		break;

Reply
  • please found the log and code.

     int gnss_init(void)
    {
    /* Default to continuous tracking. */
    	uint16_t fix_retry = 0;
    	uint16_t fix_interval = 1;
    
    
             if (nrf_modem_gnss_event_handler_set(gnss_event_handler) != 0) {
    		printk("Failed to set GNSS event handler");
    		return -1;
    	}
    
    
            /* Enable all supported NMEA messages. */
    	uint16_t nmea_mask = NRF_MODEM_GNSS_NMEA_RMC_MASK |
    			     NRF_MODEM_GNSS_NMEA_GGA_MASK |
    			     NRF_MODEM_GNSS_NMEA_GLL_MASK |
    			     NRF_MODEM_GNSS_NMEA_GSA_MASK |
    			     NRF_MODEM_GNSS_NMEA_GSV_MASK;
    
    	if (nrf_modem_gnss_nmea_mask_set(nmea_mask) != 0) {
    		printk("Failed to set GNSS NMEA mask");
    		return -1;
    	}
    
    	/* This use case flag should always be set. */
    	uint8_t use_case = NRF_MODEM_GNSS_USE_CASE_MULTIPLE_HOT_START;
    
    	if (IS_ENABLED(CONFIG_GNSS_SAMPLE_MODE_PERIODIC) &&
    	    !IS_ENABLED(CONFIG_GNSS_SAMPLE_ASSISTANCE_NONE)) {
    		/* Disable GNSS scheduled downloads when assistance is used. */
    		use_case |= NRF_MODEM_GNSS_USE_CASE_SCHED_DOWNLOAD_DISABLE;
    	}
    
    	
    
          uint8_t power_mode = NRF_MODEM_GNSS_PSM_DISABLED;
          if (nrf_modem_gnss_power_mode_set(power_mode) != 0) {
    		printk("Failed to set GNSS power saving mode");
    		return -1;
    	}
          if (nrf_modem_gnss_fix_retry_set(0) != 0) {
    		printk("Failed to set GNSS fix retry");
    		return -1;
    	}
    
    	if (nrf_modem_gnss_fix_interval_set(120) != 0) {
    		printk("Failed to set GNSS fix interval");
    		return -1;
    	}
    
            return 0;
    
    
    }
    
    void gps_work_init() {
      k_delayed_work_init(&gps_start_work, gps_start_work_fn);
      printk("\n\nGPS work queue initialised\n\n");
    
    }
    
    
    void run_gps() {
    
    
     k_work_schedule(&gps_start_work, K_NO_WAIT);
      printk("\n\nGPS work submitted to queue \n\n");
    
    }
    
    
    void main(void)
    {
    
    if (gnss_init() != 0) {
    		printk("Failed to initialize");
    		return -1;
    	}
            else{
            printk("\nGNSS intialized\n");
            }
          gps_work_init();   // Initialise GPS work queue
    
    }
    
    // stating gps on AWS Ready avent
    
    case AWS_IOT_EVT_READY:
    		printk("AWS_IOT_EVT_READY\n");
                    
                     run_gps();
                    
    
                    }
    		break;

Children
Related