# "Internal" GPS (on notecard) not working

**URL:** <https://discuss.blues.com/t/internal-gps-on-notecard-not-working/3637>\
**Category:** Notecard Cellular\
**Created:** [September 18, 2026, 6:02pm UTC](https://discuss.blues.com/t/internal-gps-on-notecard-not-working/3637 "2026-09-18T18:02:24Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![richf](https://avatars.discourse-cdn.com/v4/letter/r/74df32/32.png) [@richf](https://discuss.blues.com/u/richf)\
**Post date:** [September 18, 2026, 6:02pm UTC](https://discuss.blues.com/t/internal-gps-on-notecard-not-working/3637/1 "2026-09-18T18:02:24Z")

</div>

Hi, no luck in acquiring (internal) GPS sentences on the Cell/Wifi Notecard (with Iridium card). I’ve modeled the firmware using acquireGPSLocation() source code from one of your examples. Here are my code snippetts ..

```auto
req = NoteNewRequest("card.transport");
JAddStringToObject(req, "method", "cell");

```

```auto
req = NoteNewRequest("hub.set");
JAddStringToObject(req, "mode", "periodic");
JAddStringToObject(req, "product", productUID);
JAddIntToObject(req, "outbound",120);
JAddIntToObject(req, "inbound", 240);

Loop until 'synced'
  NoteNewRequest("hub.sync");

Loop until "hub.status" is "connected" NoteRequestResponse(NoteNewRequest("hub.status"));

```

Loop FOREVER …

```auto
req = NoteNewRequest("card.location.mode");
  JAddStringToObject(req, "mode", "off");

NoteRequestResponse(NoteNewRequest("card.location"));
  gps_time_s = JGetInt(rsp, "time");

NoteNewRequest("card.location.mode");
  JAddStringToObject(req, "mode", "continuous");

Loop until 'gps time-out' OR gps-time change(indicating a new FIX). ("gps-timeout" set at 320 seconds.)

 rsp = NoteRequestResponse(NoteNewRequest("card.location"));
   Get time from JGetInt(rsp, "time");
   Get status from JGetString(rsp, "status") !!! NOTE that status always returns
   "GPS waiting to start {gps-starting}{gps-active}"

NOTE that after a 'cold' start, I am able to acquire one (and only one) valid GPS 'location' update.

Delay 3 seconds

Thx, Rich ..

```

---

<div class="post-metadata">

**Author:** ![RobLauer](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.blues.com/roblauer/32/1567_2.png) [@RobLauer](https://discuss.blues.com/u/RobLauer)\
**Post date:** [September 18, 2026, 6:34pm UTC](https://discuss.blues.com/t/internal-gps-on-notecard-not-working/3637/2 "2026-09-18T18:34:53Z")

</div>

Hi @richf,

I think there are a few things going on here:

Once a Notecard has been paired with a Starnote, the Starnote’s GNSS module permanently becomes the location source and the Notecard will not fall back (and setting `card.transport` to `cell` doesn’t change that, that’s just the transport method).

```auto
Loop until 'synced'
  NoteNewRequest("hub.sync");

```

👆 This may be a typo, but you are telling Notecard to sync repeatedly here and not actually waiting on a response.

Your `"GPS waiting to start {gps-starting}{gps-active}"` means GPS was enabled but zero NMEA sentences ever arrived, basically the Starnote’s GNSS isn’t producing data. On Starnote for Iridium, the single u.FL antenna carries both the satellite link and GPS, so please confirm it’s attached and has a clear view of the sky.

I would also strongly recommend updating to the latest versions of [Notecard](https://dev.blues.io/notecard/notecard-firmware-releases/) and [Starnote](https://dev.blues.io/starnote/starnote-for-iridium/updating-starnote-for-iridium-firmware/) firmware, as we have fixed a couple of GPS-related issues recently.

Hope that helps!  
Rob

---

<div class="post-metadata">

**Author:** ![richf](https://avatars.discourse-cdn.com/v4/letter/r/74df32/32.png) [@richf](https://discuss.blues.com/u/richf)\
**Post date:** [September 18, 2026, 7:35pm UTC](https://discuss.blues.com/t/internal-gps-on-notecard-not-working/3637/3 "2026-09-18T19:35:11Z")

</div>

Hi Rob, Thx a lot for the quick response. Regarding the ‘hub.sync’ call – below is the loop - I’ll update the firmware as suggested – is the Iridium firmware update procedure similar to how the Notecard is updated?

regards, Rich ..

```auto
success = false;
do
{
	req = NoteNewRequest("hub.sync");
	rsp = NoteRequestResponse(req);
	if (NoteResponseError(rsp))
	{
		dbgPrintf("hub.sync failed\r\n");
	}
	else
	{
		dbgPrintf("hub.sync success\r\n");
		success = true;
	}
	NoteDeleteResponse(rsp);
	delay_s(3);
} while (success == false);

```

---

<div class="post-metadata">

**Author:** ![RobLauer](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.blues.com/roblauer/32/1567_2.png) [@RobLauer](https://discuss.blues.com/u/RobLauer)\
**Post date:** [September 18, 2026, 7:53pm UTC](https://discuss.blues.com/t/internal-gps-on-notecard-not-working/3637/4 "2026-09-18T19:53:47Z")

</div>

Hi @richf,

The `hub.sync` command is fire-and-forget - so you’re retrying a sync until the request itself is accepted by the Notecard (it’s not waiting for a sync).

A better way forward is to poll `hub.sync.status`. Here is some AI-generated code that looks like it should work (disclaimer that I didn’t actually test it myself!)

```auto
// Initiate a sync and wait for the Notecard to report it finished.
// Returns true only when the sync completed with nothing left pending.
static bool syncAndWait(uint32_t timeoutSecs)
{
    // Fire-and-forget: a clean response only means the request was accepted.
    if (!NoteRequest(NoteNewRequest("hub.sync"))) {
        dbgPrintf("hub.sync request rejected\r\n");
        return false;
    }

    for (uint32_t elapsed = 0; elapsed < timeoutSecs; elapsed += 3) {
        delay_s(3);

        J *rsp = NoteRequestResponse(NoteNewRequest("hub.sync.status"));
        if (rsp == NULL) {
            continue; // transaction failed; just poll again
        }

        bool inFlight = JIsPresent(rsp, "requested");
        bool completed = JIsPresent(rsp, "completed");
        bool alert = JGetBool(rsp, "alert");
        bool pending = JGetBool(rsp, "sync"); // unsynced Notes remain
        dbgPrintf("sync: %s\r\n", JGetString(rsp, "status"));
        NoteDeleteResponse(rsp); // status string dies here

        if (inFlight) {
            continue;
        }
        if (completed) {
            if (alert) {
                dbgPrintf("sync completed with an error\r\n");
                return false;
            }
            return !pending;
        }
    }

    dbgPrintf("sync timed out\r\n");
    return false;
}

```
