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;