Skip to content

M10 with ROM SPG 5.00: GNSS VALSET always NAKed, gps_ublox_use_* settings reset (BDS_B1C_ENA / QZSS_L1S_ENA unknown) #12174

Open

Description

@JesperMorais

Current Behavior

On a u-blox M10 module running the oldest ROM firmware, SPG 5.00 (PROTVER 34.00), every GNSS configuration INAV sends with configureGNSS10() is rejected with UBX-ACK-NAK, whatever the constellation settings are.

INAV then resets gps_ublox_use_galileo, gps_ublox_use_beidou and gps_ublox_use_glonass to their defaults in RAM. The user sees:

  • set gps_ublox_use_galileo = ON + save works, and the value is still ON right after reboot.
  • About 20 s later, once the GPS has been configured, get gps_ublox_use shows OFF again.
  • The next save of any kind (CLI or Configurator) persists OFF, so the setting "never sticks".

The receiver itself keeps running the set it already has (GPS, Galileo, BeiDou B1I, QZSS, SBAS), so in practice it works, but the constellation settings cannot be controlled from INAV and the Configurator shows the wrong state.

Module tested: Walksnail WS-M181 (M10, IST8310 compass). MON-VER:

swVersion  ROM SPG 5.00 (0dbd69)
hwVersion  000A0000
           FWVER=SPG 5.00
           PROTVER=34.00
           GPS;GLO;GAL;BDS
           SBAS;QZSS

Root cause

configureGNSS10() always includes two keys that do not exist in SPG 5.00:

  • CFG-SIGNAL-BDS_B1C_ENA (0x1031000F)
  • CFG-SIGNAL-QZSS_L1S_ENA (0x10310014)

Both are missing from the SPG 5.00 configuration database (UBX-CFG-VALGET for either key alone is also rejected). Since UBX-CFG-VALSET is applied all or nothing, one unknown key makes the receiver NAK the whole message.

Evidence

Tested with gpspassthrough from the CLI and hand built UBX-CFG-VALSET messages, same format as ubloxCfgFillBytes() (version 1, layer RAM, U1 values), with the values INAV sends for sbas = EGNOS, Galileo ON, BeiDou ON, GLONASS OFF.

Each key sent alone:

Key ID Value Result
SBAS_ENA 0x10310020 1 ACK
SBAS_L1CA_ENA 0x10310005 1 ACK
GAL_ENA 0x10310021 1 ACK
GAL_E1_ENA 0x10310007 1 ACK
BDS_ENA 0x10310022 1 ACK
BDS_B1_ENA 0x1031000D 1 ACK
BDS_B1C_ENA 0x1031000F 0 NAK
QZSS_ENA 0x10310024 1 ACK
QZSS_L1CA_ENA 0x10310012 1 ACK
QZSS_L1S_ENA 0x10310014 1 NAK
GLO_ENA 0x10310025 0 ACK
GLO_L1_ENA 0x10310018 0 ACK

Whole messages:

Message Result
INAV's exact 12 pairs NAK
Cumulative prefixes of INAV's list ACK up to BDS_B1_ENA, NAK from BDS_B1C_ENA onwards
INAV's list without B1C and L1S (10 pairs), GAL + BDS ON ACK
Same 10 pairs, GAL + BDS OFF ACK

Note that BDS_B1C_ENA is rejected even with value 0, so this is an unknown key, not an unsupported signal combination.

Steps to Reproduce

  1. Connect an M10 module with SPG 5.00 firmware (status shows HW Version: UBLOX10 Proto: 34.00).
  2. set gps_ublox_use_galileo = ON, save.
  3. Wait for the GPS to be configured, then get gps_ublox_use_galileo: it reads OFF.

Expected behavior

The VALSET is accepted and the constellation settings are applied and kept.

Suggested fix

Leave out BDS_B1C_ENA and QZSS_L1S_ENA when the receiver reports PROTVER 34.00 / FWVER=SPG 5.00. INAV already parses both from MON-VER. On SPG 5.00 BeiDou has to use B1I, which means BeiDou and GLONASS cannot run together on these modules.

I have tested this fix on the same module (built on 9.0.1). The VALSET is now ACKed and the module follows the settings:

Setting Settings after GPS init Module (status)
GAL ON, BDS ON, GLO OFF kept Galileo 1, BeiDou 1
GAL ON, BDS OFF, GLO OFF kept Galileo 1, BeiDou 0
GAL ON, BDS ON, GLO ON kept Galileo 1, BeiDou 0, Glonass 1

Without the fix, GAL + BDS ON and GAL ON alone were both NAKed and reset to OFF.

Related: #11965 fixes the same symptom (NAK, then silent reset of the settings) for F10 receivers and for capMaxGnss, but it still always sends these two keys, so it does not cover SPG 5.00.

Versions

  • Tested on INAV 9.0.1.
  • configureGNSS10() is unchanged in 9.1.0, 10.0.0-rc2 and current master, so the problem is the same there.

Activity

  1. MrScothh commented on Oct 20, 2026

    @MrScothh
    Contributor

    @JesperMorais thanks for the report and the key by key measurements, they made the fix straightforward. #11965 now reads the receiver's CFG-SIGNAL keys with one CFG-VALGET of the whole group before configuring the constellations, and sends only the keys it has: on SPG 5.00 that is the 10 pairs you measured as ACKed. The settings are no longer reset when the receiver refuses something, and status prints a line when the receiver runs other constellations than the settings, as it will on your module for BeiDou with Glonass on.

    I don't have an SPG 5.00 module. Could you try the #11965 build for your board on the WS-M181 and post status and get gps_ublox_use once the GPS is configured, with Galileo and BeiDou on, and with all three on?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions