Skip to content

09 ‐ Parameters

gfo974 edited this page Jul 6, 2026 · 30 revisions

This page describes every configurable parameter in detail: what it controls, how it affects device behavior, and recommended values for common deployment scenarios.

Parameters are read/written via the DTE protocol using 5-character keys (see DTE Commands). Default values can be overridden at deployment time using DTE configuration templates.


⚠️ Legacy / Renamed parameters

Older firmware versions and some GUI/template files still reference parameters that have been renamed or removed. The current firmware rejects these legacy keys; provisioning tools should map them to the active equivalents.

Legacy key (DTE rejected) Active replacement Notes
GNSS_NBLASTFIX_TOSEND ARGOS_DEPTH_PILE (ARP16) Same semantics: number of latest GPS fixes packed per TX. Used by both Argos and LoRa stacks.
LB_GNSS_NBLASTFIX_TOSEND LB_ARGOS_DEPTH_PILE (LBP08) Low-battery variant.
LAST_FULL_CHARGE_DATE (POT05) (removed) No reliable hardware "charge complete" signal on this platform. Slot reserved for future use.

Deployment configuration rules

⚠️ Hard rules learned from field incidents — violating any of these bricks, silences, or drains a deployed device:

Rule Why
LinkIt V4: keep SHUTDOWN_NTIME_SAT (PWP05) = 0 On LinkIt, powerdown is a pseudo power-off: the device soft-resets and waits for a reed-switch swipe before starting another session. A sealed animal at sea never gets one — the tracker stays dormant until physically recovered. Only RSPB (TPL5111 timer re-wakes it) should use PWP05 > 0.
RSPB: set SHUTDOWN_TIMER (PWP01) > 0 (recommended 600) The TPL5111 only wakes the board; power stays on until the firmware pulses MCU_DONE. A stuck session (GPS stall, wedged bus) with PWP01=0 never powers down → battery death.
RSPB: NTRY_PER_MESSAGE (ARP19) = 0 recommended A finite N below SHUTDOWN_NTIME_SAT (e.g. 3 < 5) makes the depth pile go inert before the TX-count powerdown fires — the session then idles until SHUTDOWN_TIMER. 0 = replay until the NTIME_SAT powerdown. If a finite N is needed, keep N ≥ SHUTDOWN_NTIME_SAT.
DUTY_CYCLE mode: never DUTY_CYCLE (ARP18) = 0x000000 An all-zero hour mask enables no TX hour at all — the device never transmits.
DOPPLER mode: never SURFACING_BURST_MAX_MSG (ARP43) = 0 ARP43 also bounds the Doppler sequence in DOPPLER mode; 0 = unlimited → continuous Doppler TX until the battery dies.
Keep ARGOS_RX_EN (ARP32) = 0 Argos downlink RX is not implemented on current KIM2/SMD builds (the RX service is never started). Keep configs honest; upload AOP via PASPW instead.
BLIND on: size airtime budgets ×retx_nb With ARGOS_BLIND_EN=1 every logical TX airs ARGOS_BLIND_RETX_NB copies, and SHUTDOWN_NTIME_SAT + the rolling rate limiter count all copies. See BLIND MAC Profile.
Re-provision after flashing across a config-version bump The device keeps only ARGOS_DECID/ARGOS_HEXID and factory-resets everything else — see Firmware upgrade note. Never OTA-update deployed animals across a bump.

Identity & Device Info

These parameters identify the device and its Argos credentials.

Key Name Type Default Description
IDP12 ARGOS_DECID UINT 0 Argos decimal platform ID. Assigned by CLS when registering the device on the Argos system. Must match the Argos account. Without a valid ID, transmitted messages will not be processed by the Argos ground segment.
IDT06 ARGOS_HEXID HEX 0 Argos hexadecimal platform ID. The hex representation of the Argos ID, embedded in every transmitted packet header. Set automatically when writing ARGOS_DECID on SMD builds.
IDP11 PROFILE_NAME TEXT "FACTORY" Human-readable deployment profile name. Used to identify which configuration is loaded on the device (e.g., "RSPB_MORTALITY_V1", "TURTLE_UW_V2"). No functional effect, purely organizational. Max 128 characters.
IDP13 ARGOS_SECKEY TEXT "" A+ security key (SMD builds only). 128-bit AES key used for KMAC authentication in A+ protocol. Set via PARMW; auto-written to SMD hardware at next boot (dirty-flag mechanism). Triggers KMAC profile reload. To verify what's actually programmed in the SMD or force a re-write, use SATVF.
IDP14 ARGOS_RADIOCONF TEXT "" Master radio configuration. TX power and frequency calibration data. Used when adaptive modulation is OFF. When adaptive modulation is ON, per-modulation RCONFs (ARP51/52/53) are used instead and this value is not written to the SMD at boot.

Read-only identity:

Key Name Description
IDT02 DEVICE_MODEL Board name (e.g., "LinkIt V4", "RSPB")
IDT03 FW_APP_VERSION Firmware version string (e.g., "v4.0.1-abc1234")
IDT04 HW_VERSION Hardware version from BSP (e.g., "LINKIT V4 V1.0")
IDT10 DEVICE_DECID Unique device ID derived from nRF52840 hardware identifier

Argos Satellite TX

These parameters control how and when the device transmits to Argos satellites.

Operating Mode

Key Name Values Description
ARP01 ARGOS_MODE OFF=0, PP=1, LEGACY=2, DUTY=3, DOPPLER=4, SURFACING_BURST=5 Argos transmission mode. Determines how the device schedules satellite transmissions. PASS_PREDICTION (1): Uses AOP satellite pass data to transmit only when a satellite is overhead — most power-efficient but requires valid AOP data. LEGACY (2): Transmits at fixed intervals regardless of satellite positions — simple but wastes power on transmissions with no satellite overhead. DUTY_CYCLE (3): Transmits during configurable time windows (24-bit mask, one bit per hour). DOPPLER (4): Minimal 3-byte packets for Doppler-based positioning — no GPS data, satellites estimate position from frequency shift. Used in low battery mode. SURFACING_BURST (5): Doppler burst on surface detection, then GNSS TX when fix available. See Underwater & Behavioral Modes and Argos TX Modes.

Transmission Timing

Key Name Range Default Description
ARP05 TR_NOM 30-1200s 60 Nominal TX repetition period. Time in seconds between consecutive satellite transmissions. Lower = more messages but higher power consumption. Argos requires minimum 30s between TX. For RSPB with SHUTDOWN_NTIME_SAT=3 and TR_NOM=60: 3 messages over ~3 minutes per session.
ARP19 NTRY_PER_MESSAGE 0-86400 0 TX repetitions per message. Number of times each depth-pile entry (position/sensor message) is transmitted, one TX slot per repetition. In LEGACY/DUTY_CYCLE/PASS_PREDICTION: N>0 = exactly N transmissions (N sweeps of the depth pile) then the entry goes inert; 0 = unlimited replay — the pile keeps cycling (A→B→C→A…) until newer fixes evict the entries. In SURFACING_BURST: 0 = transmit once per fix. Typical: 3-6 to bound airtime and power.
ARP35 ARGOS_TCXO_WARMUP_TIME 0-30s 5 TCXO warmup time before TX. Written to SMD via SPI at every boot (RAM-only register, not persisted in flash). Automatically skipped (set to 0) on the first TX after surfacing from underwater. 5s is safe for most conditions.
ARP30 ARGOS_TIME_SYNC_BURST_EN BOOL true Time-synchronized burst mode. When enabled, the device aligns TX to Argos time slots for better satellite detection probability. Should be enabled for production deployments.
ARP31 ARGOS_TX_JITTER_EN BOOL true TX jitter. Adds small random timing offset to prevent collisions when multiple devices transmit simultaneously. Should be enabled when deploying multiple trackers.

Data Packing

Key Name Values Default Description
ARP16 ARGOS_DEPTH_PILE 1,2,3,4,8,12,16,20,24 16 (UW: 1) Depth pile — number of GPS fixes per message AND in-RAM cap. Controls how many GPS positions are packed into a single Argos/LoRa packet. Since v4.x it also bounds the effective in-RAM capacity of the pile (previously hardcoded to 24): when the pile is full and a new fix arrives, the oldest entry is evicted via FIFO pop_front() even if its retry burst is not finished. This favors fresh data over stale retries — a deliberate trade-off for short turtle surfacings. 1: Send only the latest fix (used with frequent TX). 16-24: Accumulate many fixes before sending (pass-prediction history). UW model defaults to 1 because surface time is limited.
ARP11 DLOC_ARG_NOM AQPERIOD 600 (SB: 3600) GNSS acquisition period. GUI sends the index (0-15), firmware stores seconds. See BaseDeltaTimeLoc table below.

BaseDeltaTimeLoc — AQPERIOD index ↔ seconds (ARP11, ARP12, ZOP14)

Index Seconds Label Index Seconds Label
0 0 Disabled 8 21600 6 hours
1 600 10 min 9 43200 12 hours
2 900 15 min 10 86400 24 hours
3 1800 30 min 11 60 1 min
4 3600 1 hour 12 120 2 min
5 7200 2 hours 13 300 5 min
6 10800 3 hours 14 1200 20 min
7 14400 4 hours 15 2700 45 min

Breaking v4.0.5: Codes 6-10 remapped (old: 6=6h, 7=12h, 8=24h → new: 6=3h, 7=4h, 8=6h, 9=12h, 10=24h). Codes 11-15 are new. GUI must sort by duration for display, not by index.

Duty Cycle

Key Name Range Default Description
ARP18 DUTY_CYCLE 0-16777215 0 24-bit duty cycle mask (one bit per hour, bit 0 = midnight UTC). Only used when ARGOS_MODE=DUTY_CYCLE. Each set bit enables TX during that hour. Example: 0x0F0F0F = TX during hours 0-3, 8-11, 16-19. ⚠️ Never deploy DUTY_CYCLE mode with an all-zero mask — no hour enabled = the device never transmits.

BLIND MAC Profile (module-owned retransmission)

Kineis KMAC BLIND profile (2026-07, config version 0x20): the satellite module itself retransmits each message ARGOS_BLIND_RETX_NB times, ARGOS_BLIND_RETX_PERIOD_S seconds apart, and reports a single +TX at the end of the whole burst. The nRF keeps pacing the sequences (NTRY_PER_MESSAGE = number of blind sequences per entry, TR_NOM = interval between sequences); the module owns the copies within a burst. Supported on KIM2 (AT+KMAC=2) and SMD (KMAC profile 2, UART and SPI transports); if the module firmware rejects the BLIND profile, the driver logs a warning and falls back to BASIC (single TX per command).

Key Name Type Range Default Description
ARP44 ARGOS_BLIND_EN BOOL 0/1 false Enable the BLIND MAC profile. false = BASIC (nRF-paced single TX — pre-2026-07 behavior, unchanged). Global: applies to NORMAL/LB/Zone/HAULED regimes alike. Force-disabled when the effective mode is SURFACING_BURST or DOPPLER (those run their own nRF-paced burst; a module-owned retx would double-transmit).
ARP45 ARGOS_BLIND_RETX_NB UINT 1-127 4 Module retransmissions per blind burst. Clamped to 1..127 in the drivers (int8 on the module side).
ARP46 ARGOS_BLIND_RETX_PERIOD_S UINT 60-65535 60 Seconds between the module's retransmissions within a burst (module minimum 60 s). Distinct from TR_NOM, which spaces the blind sequences.

Airtime accounting. Every completed blind burst counts as ARGOS_BLIND_RETX_NB transmissions against SHUTDOWN_NTIME_SAT (PWP05) and the rolling TX rate limiter — those budgets bound actual airtime, not logical TX commands. Example: PWP05=12 with ARP45=4 powers down after 3 blind bursts. Size the budgets ×retx_nb.

Burst duration. Keep ARP45 × ARP46 under 2 hours: the TX service extends its safety timeout by the burst duration, capped at 2 h — a longer burst would be cancelled mid-flight.

See 11 — Satellite Communication → BLIND MAC profile for the behavior details.

Firmware upgrade note (config versions 0x1F / 0x20, 2026-07)

Current config version: 0x20 (0x1c07e800 | 0x20, config_store.hpp). Two bumps in 2026-07:

  • 0x1F: ARP36/ARP37 (ARGOS_TX_NO_FIX_POLICY / ARGOS_LAST_KNOWN_MAX_AGE_S) removed from the serialized config set — slots 223/224 back to reserved. (Required: the June builds serialized ARP36/37 without a version bump, so sequential deserialization could silently misalign every param after slot 222 on a cross-generation upgrade.)
  • 0x20: added the BLIND MAC profile params ARGOS_BLIND_EN/ARGOS_BLIND_RETX_NB/ARGOS_BLIND_RETX_PERIOD_S (ARP44/45/46, slots 243-245).

Consequence of flashing across a config-version bump: on first boot the device keeps only ARGOS_DECID/ARGOS_HEXID and resets every other parameter to factory defaults. Full re-provisioning over BLE is required after flashing. Never OTA-update deployed animals across a version bump — they would come back up on factory parameters with no way to re-provision them in the field.

No-Fix Behavior

v3 behavior (no parameter): in LEGACY / DUTY_CYCLE / PASS_PREDICTION, a no-fix GPS cycle caches a NO_FIX heartbeat entry, transmitted as a 0xFF-position packet ("alive" signal + delta_time_loc grid filler). Repetitions (heartbeats included) are governed by NTRY_PER_MESSAGE (ARP19). (The former ARGOS_TX_NO_FIX_POLICY/ARP36 and ARGOS_LAST_KNOWN_MAX_AGE_S/ARP37 params existed only 2026-06 → 2026-07 and were removed; slots 223/224 are reserved.) See Satellite Communication → No-fix behavior.


Argos Satellite RX

The device can receive downlink data from Argos satellites to update orbital prediction data (AOP).

Key Name Range Default Description
ARP32 ARGOS_RX_EN BOOL true Enable Argos downlink reception. ⚠️ Downlink RX is not implemented in current KIM2/SMD builds — the Argos RX service is never started, so this parameter has no effect on the hardware. Keep 0 in deployment configs so they reflect reality; AOP updates are uploaded via PASPW (pylinkit) instead. (Historical parameter from the upstream ARTIC R2 firmware, where RX cost ~3.75 mAh per window.)
ARP33 ARGOS_RX_MAX_WINDOW 1-MAX 900 Maximum RX window duration (seconds). How long the device listens for a satellite downlink after TX. 900s = 15 minutes. Longer windows increase AOP update probability but consume more power.
ARP34 ARGOS_RX_AOP_UPDATE_PERIOD 0-MAX 90 Minimum time between AOP updates (seconds). Prevents redundant AOP processing if multiple downlinks are received in quick succession.

Read-only telemetry:

Key Name Description
ART01 LAST_TX Timestamp of last successful transmission
ART02 TX_COUNTER Total number of transmissions since last reset
ART03 ARGOS_AOP_DATE Date of the loaded AOP bulletin (pass prediction data)
ART10 ARGOS_RX_COUNTER Number of successful RX receptions
ART11 ARGOS_RX_TIME Total time spent in RX mode (seconds)

GNSS (GPS)

These parameters control the u-blox M10Q GNSS module: when it runs, how it filters fixes, and how it interacts with underwater detection.

Core Settings

Key Name Range Default Description
GNP01 GNSS_EN BOOL true Enable GNSS module. When disabled, no GPS fixes are acquired. The device can still transmit Doppler-only packets (ARGOS_MODE=DOPPLER).
GNP05 GNSS_ACQ_TIMEOUT 10-600s 120 (UW: 240) Warm/hot start acquisition timeout. Maximum time the GNSS module runs when it has recent ephemeris data (warm start). If no valid fix within this time, GNSS powers off. UW model uses longer timeout (240s) because surface windows are precious. For RSPB: reduce to 90s to save battery on failed fixes.
GNP09 GNSS_COLD_ACQ_TIMEOUT 10-600s 530 Cold start acquisition timeout. Maximum time for first fix after power-on or when no almanac/ephemeris is available. Cold starts can take 1-10 minutes depending on sky visibility. For RSPB: reduce to 180s (3 min) as a battery-saving tradeoff.
GNP10 GNSS_FIX_MODE 2D=1, 3D=2, AUTO=3 AUTO Fix mode. AUTO lets the receiver choose 2D or 3D based on satellite geometry. 3D requires 4+ satellites but provides altitude. 2D works with 3 satellites but assumes fixed altitude.
GNP11 GNSS_DYN_MODEL 0-10 PORTABLE (0) u-blox dynamic model. Tells the GNSS receiver what kind of motion to expect, improving fix quality. 0 (PORTABLE): General use. 6 (AIRBORNE_1G): For birds — accepts high-speed, low-acceleration motion. 7 (AIRBORNE_2G): High-dynamics flight. Wrong model can prevent lock (e.g., PORTABLE rejects bird-speed motion).

Fix Filtering

Key Name Range Default Description
GNP02 GNSS_HDOPFILT_EN BOOL true Enable HDOP filter. Reject fixes with poor geometric dilution of precision.
GNP03 GNSS_HDOPFILT_THR 2-15 2 HDOP filter threshold. Fixes with HDOP > this value are rejected. Lower = stricter. 2 is very strict (requires good satellite geometry).
GNP20 GNSS_HACCFILT_EN BOOL true Enable horizontal accuracy filter. Reject fixes with estimated accuracy worse than threshold.
GNP21 GNSS_HACCFILT_THR 0-MAX 5m Horizontal accuracy threshold (meters). Fixes with hAcc > this are rejected. 5m is strict. For RSPB: relax to 10m to get faster fixes (shorter TTFF = less battery).
GNP22 GNSS_MIN_NUM_FIXES 1-MAX 1 Consecutive valid fixes required. Number of successive fixes passing all filters before accepting. Higher = more reliable but longer acquisition. 1 is sufficient for most deployments.

Triggers & Scheduling

Key Name Default Description
GNP25 GNSS_TRIGGER_ON_SURFACED true Trigger GNSS when animal surfaces. When the UW detector confirms surface state, immediately start GNSS acquisition. Essential for marine trackers — maximizes the chance of getting a fix during limited surface time.
GNP26 GNSS_TRIGGER_ON_AXL_WAKEUP false Trigger GNSS on accelerometer wakeup. Start GNSS when the BMA400 detects motion. Useful for stationary deployments (e.g., nests) where the animal may not move for hours.
GNP28 GNSS_TRIGGER_COLD_START_ON_SURFACED false Force cold start on surfacing. Discard cached data and do a full cold start when surfacing. Useful if the device has been underwater for so long that ephemeris is stale.
GNP23 GNSS_COLD_START_RETRY_PERIOD 1-MAX 60s
GNP54 GNSS_COLD_START_AFTER_NTRY 0-255 0 (off)
GNP30 GNSS_SESSION_SINGLE_FIX BOOL false

AssistNow

Key Name Default Description
GNP24 GNSS_ASSISTNOW_EN true Enable AssistNow Online. Uses cached satellite data to speed up TTFF (time to first fix). Data is obtained from u-blox servers and loaded via GNSSBR bridge mode or pylinkit.
GNP27 GNSS_ASSISTNOW_OFFLINE_EN false Enable AssistNow Offline. Uses pre-loaded almanac data valid for days/weeks. More useful for deployments without frequent BLE connections. Check status with $GNSSA.
GNP31 GNSS_TOKEN TEXT ""

Advanced GNSS Settings

These parameters control the u-blox M10Q receiver's constellation selection, signal filtering, and AssistNow Autonomous orbit tolerance. They allow fine-tuning TTFF and fix reliability for specific deployment environments.

Key Name Range Default Description
GNP40 GNSS_CONSTELLATION_MASK 0x01-0x3F 15 (0x0F) Constellation bitmask. Each bit enables a GNSS constellation. See bit definitions and examples below. Default 0x0F = GPS + Galileo + GLONASS + BeiDou (M10Q factory default, 4 concurrent constellations). GPS (bit0) should always be enabled. Replaces the old unimplemented GNP08 (GLONASS_CONST_SELECT).
GNP41 GNSS_ORBMAXERR 10-1000m 300 AssistNow Autonomous maximum orbit error. Controls how old the predicted orbit data can be before being rejected. Higher values extend the window where warm starts are possible (using ANA extrapolated orbits), at the cost of initial fix accuracy. 300m is a good tradeoff for wildlife tracking where getting any fix matters more than sub-meter precision.
GNP42 GNSS_MIN_CNO 0-50 dBHz 10 Minimum carrier-to-noise ratio. Satellites with signal strength below this threshold are ignored by the navigation engine. Lower = more satellites considered (but noisier). 10 dBHz works well for marine environments with clear sky view. Reduce to 6 if operating in canopy/urban environments.
GNP43 GNSS_MIN_ELEV 0-90° 10 Minimum satellite elevation angle. Satellites below this elevation above the horizon are ignored. Low-elevation signals suffer from atmospheric delay and multipath. 10° is appropriate for sea-level marine tracking (waves obstruct low satellites). Reduce to 5° for land-based tracking with terrain obstructions.

Constellation bitmask (GNP40) — Bit definition

The value is a 6-bit unsigned integer. Each bit independently enables one GNSS constellation. The firmware configures the u-blox M10Q receiver accordingly at each power-on.

Bit Hex Decimal Constellation Signal Coverage Notes
0 0x01 1 GPS (USA) L1 C/A Global Always recommended. Primary constellation, best almanac/ephemeris support.
1 0x02 2 Galileo (EU) E1 Global Adds ~6-8 visible SVs. Excellent complement to GPS.
2 0x04 4 GLONASS (Russia) L1 Global Adds ~6-8 visible SVs. Different orbital plane improves geometry.
3 0x08 8 BeiDou (China) B1C Global (best in Asia-Pacific) Most useful in Asia-Pacific. M10Q uses B1C signal (not legacy B1I).
4 0x10 16 QZSS (Japan) L1 C/A Japan regional (~70-140°E) Augments GPS over Japan/Oceania. No benefit elsewhere.
5 0x20 32 SBAS L1 C/A Regional (WAAS/EGNOS/MSAS) Differential corrections for land use. Not useful at sea — wastes tracking channels.

To compute the value: add the decimal values of each constellation you want to enable.

Constellation bitmask — Common presets

Value (dec) Value (hex) Binary Constellations Use case
15 0x0F 001111 GPS + GAL + GLO + BDS Default. M10Q factory config, 4 constellations max
7 0x07 000111 GPS + GAL + GLO Global ocean, 3 constellations (slightly lower power)
31 0x1F 011111 GPS + GAL + GLO + BDS + QZSS Japan / East Asia
63 0x3F 111111 All constellations Maximum SVs, may slow TTFF on M10Q (channel sharing)
3 0x03 000011 GPS + GAL Low power, fewer tracking channels
1 0x01 000001 GPS only Minimum power, slowest TTFF

M10Q hardware note: The u-blox M10Q supports 4 concurrent major GNSS constellations (GPS, Galileo, GLONASS, BeiDou). QZSS and SBAS are augmentation systems that do not count toward this limit — they overlay GPS and function only when GPS is enabled. The default 0x0F (GPS+GAL+GLO+BDS) matches the M10Q factory configuration and provides maximum satellite visibility for fastest TTFF.

ANO Data & Fastloc

Key Name Range Default Description
GNP44 GNSS_ANO_STALE_DAYS 0-365 5 AssistNow Offline (ANO) staleness threshold in days. ANO data older than this is considered stale — the receiver falls back to cold start timeout instead of warm start. 0 = never discard (use ANO regardless of age). 5 days is aggressive but ensures fresh orbital data for marine deployments where timing matters. Increase to 14-25 days if BLE updates are infrequent.
GNP45 GNSS_FASTLOC_MODE UINT (0-2) 0 Fastloc mode. 0=OFF (no fallback), 1=DEGRADED_PVT (send degraded GPS fix — ex-fastloc), 2=CLOUDLOCATE (send raw GNSS measurement snapshot for cloud positioning). See Satellite Message Format. Rétrocompatible: ancien false=0, true=1.
GNP46 GNSS_CLOUDLOCATE_FORMAT UINT (0-2) 0 CloudLocate measurement format (only when GNP45=2). 0=MEASC12 (12B, needs position hint, compatible with sensor messages), 1=MEAS20 (20B, autonomous, LDA2 only on Argos), 2=MEAS50 (50B, LoRa only). MEAS50 on Argos board automatically falls back to MEAS20.
GNP51 GNSS_CLOUDLOCATE_ALWAYS BOOL false CloudLocate at every surface (override). Default behavior captures raw measurements only on the FIRST surface acquisition of a session (cold-start path), then powers off as soon as a real fix arrives on subsequent warm surfaces — battery-friendly but no fallback if warm fix fails. When true, raw-meas is captured at EVERY SURFACING_BURST surface, regardless of whether a real fix is obtained, giving the cloud a position fallback even when warm-GPS misses the 30 s timeout. Trade-off: GPS stays on the full cold_acq_timeout each surface (~30 s with fresh ANO). Useful for short-surface species (turtles surfacing < 30 s). Requires GNP45=2 and ARGOS_MODE=SURFACING_BURST.
GNP47 GNSS_BCKP_CHARGE_INT UINT DEPRECATED 2026-05 — slot _RESERVED_223. Replaced by GNP52 GNSS_DEEP_IDLE_AFTER_OFF_S. DTE PARMR/PARMW on the old key returns PARAM_KEY_NOT_FOUND. Existing flash values are inert (slot reserved for flash-layout compat).
GNP48 GNSS_BCKP_CHARGE_DUR UINT DEPRECATED 2026-05 — slot _RESERVED_224. Replaced by GNP52 GNSS_DEEP_IDLE_AFTER_OFF_S.
GNP49 GNSS_BCKP_CHARGE_UW_ONLY BOOL DEPRECATED 2026-05 — slot _RESERVED_225. Recharging is now scoped per-session via GNP52 GNSS_DEEP_IDLE_AFTER_OFF_S, not gated on UW state.
GNP52 GNSS_DEEP_IDLE_AFTER_OFF_S UINT (0-4294967295 s) 0 GNSS deep-idle window after end-of-session. When non-zero, at the end of each GPS session the rail stays powered for this many seconds with the M10Q in UBX-RXM-PMREQ backup (~10-12 µA, wakes via EXTINT pulse). V_BCKP coin cell charges naturally during that window. Replaces the deprecated periodic backup-charge scheduler. Sentinels: 0 = disabled (immediate poweroff — default, current behavior); 0xFFFFFFFF (4294967295) = never poweroff (rail always on, M10Q always in deep-idle — maximum battery economy for sealed 1-year deploys). Recommended per use-case: tortue short-surface 300 (5 min), bench validation 60, max-battery sealed 4294967295. See 10 — GPS Guide § Part D.
GNP53 GNSS_CLOUDLOCATE_ONLY BOOL false CloudLocate-only mode. When true AND GNP45=2 (CLOUDLOCATE), the GPS session terminates immediately on first raw measurement (GPSEventCloudLocateReady) — no waiting for full PVT or GNSS_ACQ_TIMEOUT. Drops typical session 30-120 s → 5-15 s. Trade-off: no local lat/lon (position resolved cloud-side from raw uploaded via Argos). LED double-blinks CYAN at capture moment (LEDGNSSCloudLocateReady). Off by default.

Fastloc Algorithm

When GNP45>=1 and the GNSS acquisition timeout expires without a fix passing quality filters:

  1. During acquisition, every NAV-PVT report with a valid 2D/3D fix (but failing hAcc or hDOP filter) is evaluated
  2. The fix with the lowest hAcc (best horizontal accuracy) is stored as the "degraded PVT"
  3. At timeout (max_nav_samples reached), if a degraded PVT exists:
    • Firmware emits GPSEventPVTDegraded instead of GPSEventMaxNavSamples
    • GPS service logs the entry with event_type = FASTLOC and valid = true
    • TX service builds a dedicated fastloc packet with quality metadata
  4. If no fix at all was obtained (not even a degraded 2D), the normal "no fix" path is used

Important behaviors:

  • Fastloc does not set the "first fix found" flag — cold start timeout continues to be used on subsequent sessions
  • Fastloc does not update the pass prediction scheduler position — avoids corrupting Argos pass scheduling with inaccurate coordinates
  • Fastloc does not end the Doppler burst phase in SURFACING_BURST mode — satellite Doppler may compute a better position

CloudLocate Algorithm

When GNP45=2 (CLOUDLOCATE), the M10 receiver captures raw GNSS measurement snapshots (MEASC12/MEAS20/MEAS50) alongside normal PVT acquisition:

  1. At power_on(), RXM-MEASC12/MEAS20/MEAS50 messages are enabled on the M10 UART
  2. The M10 outputs raw measurement snapshots periodically while navigation runs
  3. If a valid PVT fix is obtained → normal fix is used (CloudLocate data discarded)
  4. If timeout without valid fix and raw measurements are available:
    • CloudLocate takes priority over DEGRADED_PVT
    • The latest raw blob is stored in the depth pile (overlaid on unused position fields)
    • TX service sends a CloudLocate packet (type 7 Argos, type 4 LoRa)
  5. During surfacing burst: progressive CloudLocate — from the 2nd Doppler ping onwards, if raw data is available, a CloudLocate packet is sent instead of Doppler

Sensor data: When using MEASC12 format, sensor data can be included in the CloudLocate packet (93 bits available). With MEAS20/MEAS50, sensor data is not included (dedicated packet). A warning is logged at boot when sensor messages are impacted.

Depth pile: CloudLocate entries are stored with event_type=CLOUDLOCATE. If a real FIX arrives later, it takes priority over the CloudLocate entry.


Underwater Detection

These parameters control how the device detects whether the animal is submerged. When underwater, GNSS and Argos TX are suspended to save power (satellite communication is impossible underwater). See 13 — Underwater & Behavioral Modes for the full algorithm description.

Core Settings

Key Name Default Description
UNP01 UNDERWATER_EN false (UW: true) Enable underwater detection (SWS analog). Must be enabled for marine deployments. When disabled, the device assumes it is always at the surface.
UNP10 UNDERWATER_DETECT_SOURCE Removed. Only SWS analog is supported. Detection is enabled solely via UNP01. Slot 96 reserved.
UNP02 DRY_TIME_BEFORE_TX 0s Surface delay before TX. Seconds the device must be at the surface before Argos TX is allowed. 0 = TX immediately on surfacing. Increase if false surface detections cause wasted TX attempts.
UNP20 MIN_SURFACE_CYCLE_INTERVAL_S 2700 Surface cycle cooldown (seconds). Minimum time between surface cycles. 0 = disabled. Default: 2700 (45 min). Timer persists in noinit RAM. During cooldown: SWS is stopped, GPS and TX are disabled. A wake timer restarts SWS when cooldown expires. Range: 0-86400.
UNP30 COOLDOWN_TRIGGER_MODE 3 When to arm the cooldown timer. The timer starts on the next dive after being armed. 0=AT_SURFACE (arm on surface detection), 1=END_OF_DOPPLER (arm when Doppler phase ends — GNSS fix or max messages), 2=AFTER_FIRST_GNSS (arm after first GNSS TX), 3=AFTER_LAST_TX (arm on every TX complete, timer restarts — default, backward compatible).

Sampling

Key Name Default Description
UNP03 SAMPLING_UNDER_FREQ 1s Sampling interval underwater (seconds, FLOAT). How often the SWS electrode is read while submerged. Lower = faster surface detection but more power. Sub-second values supported (e.g. 0.1 = 100 ms). Range: 0.1–86400 s.
UNP04 SAMPLING_SURF_FREQ 10s Sampling interval at surface (seconds, FLOAT). How often the SWS electrode is read while at the surface. Sub-second values supported (e.g. 0.5 = 500 ms). Range: 0.1–86400 s.
UNP08 UW_PIN_SAMPLE_DELAY_US 1000µs Initial RC charge time before ADC read, in microseconds. Seed value for the adaptive sample delay, clamped by UNP09/UNP10 (range 50–30000µs). Auto-adjusts based on electrode contrast. Renamed from UW_PIN_SAMPLE_DELAY (was in ms) for unit consistency with UNP09/UNP10. Config version 0x1D→0x1E — old configs reset to default on first boot.
UNP05 UW_MAX_SAMPLES 1 Max readings per detection cycle (multi-sample debounce). The UWDetector takes up to this many samples per cycle, spaced by UW_SAMPLE_GAP, before deciding wet/dry. 1 = single-shot (the analog SWS path forces 1). Range 1+.
UNP06 UW_MIN_DRY_SAMPLES 1 Dry readings needed to confirm surface. Within a cycle's batch, this many consecutive "dry" samples declares surface and ends the batch early. Higher = more debounce against splashes/spray. Range 1+.
UNP07 UW_SAMPLE_GAP 1000 (ms) Delay between consecutive samples within a detection batch. Spaces out the multi-sample readings (only relevant when UW_MAX_SAMPLES > 1). Range 1+.

Safety

Key Name Default Description
UNP24 UW_MAX_DIVE_TIME 7200s (2h) Escalating dive timeout. First 2 timeouts recalibrate water baseline and reset timer. 3rd timeout (3 × value = 6h default) forces surface + 30s lockout to give GPS/Argos a TX window. Counter resets on any real surface detection. ⚠ 0 = disabled — removes the last safety net against biofouling.
UNP25 UW_MIN_SURFACE_TIME 5s Surface lockout after detection. After detecting surface (via L1-L5 or threshold), ignore underwater readings for this duration. Prevents oscillation from wet electrode at surface. Range: 0-300 s.
UNP11 UNDERWATER_DETECT_THRESH 1.1 Pressure sensor logging threshold. Used by PressureSensorService to trigger logging on depth transitions.

SWS Analog Calibration

Key Name Default Description
(old UNP20) SWS_ANALOG_THRESHOLD_MIN Removed. Thresholds are now fully auto-calibrated. Slot 132 reused as GNP40. DTE key UNP20 reassigned to MIN_SURFACE_CYCLE_INTERVAL_S (slot 211).
UNP21 SWS_ANALOG_THRESHOLD_MAX Removed. Superseded by dynamic observed peak tracking. Slot 133 reused as GNSS_ORBMAXERR (GNP41).
UNP22 SWS_ANALOG_HYSTERESIS 4% Hysteresis as percentage of threshold. Higher = more stable transitions but slower detection. 4% is a good balance.
UNP23 SWS_ANALOG_CALIB_INTERVAL 3600s Air baseline recalibration interval. After this time at surface, the air baseline is fully recalibrated to current readings. Handles slow biofouling drift.

Dive Mode

Key Name Default Description
UNP12 UW_DIVE_MODE_ENABLE false Enable dive mode state machine. Adds reed switch pause/resume for dive tracking. Specialized for dive-logging deployments.
UNP13 UW_DIVE_MODE_START_TIME 0 Dive mode start time. Unix timestamp when dive mode was activated.

Low Battery Mode

When the battery drops below a threshold, the device switches to a reduced-power mode with different GNSS and Argos parameters. See RSPB Battery Modes for the full behavior description.

Mode Control

Key Name Default Description
LBP01 LB_EN false Enable low battery mode. When battery SOC drops below LB_THRESHOLD, the device switches to LB parameters. Essential for RSPB deployments to maximize lifetime.
LBP02 LB_THRESHOLD 10% Battery percentage to enter LB mode. When SOC < this value and LB_EN=1, the device uses LB parameters instead of normal ones. RSPB typical: 10-30%.
LBP12 LB_CRITICAL_THRESH 5% Critical battery threshold. Below this SOC, the device powers off immediately without any operation. Protects the battery from deep discharge. On RSPB, the TPL5111 keeps waking the device — once solar recharges above this threshold, operation resumes.

LB GNSS Settings

Key Name Default Description
LBP06 LB_GNSS_EN true GNSS in LB mode. Set to 0 for Doppler-only operation (no GPS). Saves significant power. Argos satellites estimate position from Doppler shift (~5-10km accuracy).
LBP09 LB_GNSS_ACQ_TIMEOUT 120s GNSS timeout in LB mode. Shorter timeout to fail faster and save battery.
LBP07 LB_GNSS_HDOPFILT_THR 2 HDOP filter in LB mode. Can be relaxed to accept lower-quality fixes.
LBP10 LB_GNSS_HACCFILT_THR 5m Accuracy filter in LB mode.

LB Argos Settings

Key Name Default Description
LBP04 LB_ARGOS_MODE LEGACY Argos mode in LB. Typically LEGACY or DOPPLER.
ARP06 TR_LB 240s TX interval in LB mode. Time between Doppler/LB transmissions. RSPB typical: 90s.
LBP11 LB_NTRY_PER_MESSAGE 4 TX repetitions in LB mode.
LBP08 LB_ARGOS_DEPTH_PILE 1 Depth pile in LB mode. Usually 1 (Doppler packets are small).
LBP05 LB_ARGOS_DUTY_CYCLE 0 Duty cycle mask in LB mode.
ARP12 DLOC_ARG_LB 3600s GNSS period in LB mode.
LBP14 LB_SHUTDOWN_NTIME_SAT 0 Number of TX before powerdown in LB mode (all boards). 0 = use SHUTDOWN_TIMER only. Set to 2 for RSPB to send 2 Doppler messages then power off. Exposed on all builds — powerdown semantics differ by board: RSPB cuts power via TPL5111 (MCU_DONE pulse), LinkIt V4 issues a soft reset (pseudo power-off, wakes on reed switch).

Geofencing Zone

Define a circular zone around a reference point. When the device detects it is outside this zone, it switches to alternate Argos parameters (typically more aggressive TX).

Key Name Default Description
ZOP04 ZONE_ENABLE_OUT_OF_ZONE_DETECTION_MODE false Enable geofencing. When enabled, the device compares each GPS fix against the zone boundary.
ZOP01 ZONE_TYPE CIRCLE Zone shape. Currently only CIRCLE is supported.
ZOP19 ZONE_CENTER_LATITUDE -48.8752 Zone center latitude (decimal degrees, -90 to 90).
ZOP18 ZONE_CENTER_LONGITUDE -123.3925 Zone center longitude (decimal degrees, -180 to 180).
ZOP20 ZONE_RADIUS 1000m Zone radius in meters.
ZOP05 ZONE_ENABLE_ACTIVATION_DATE true Enable zone activation date. Zone checking only starts after ZONE_ACTIVATION_DATE. Useful for delayed deployment.
ZOP06 ZONE_ACTIVATION_DATE 01/01/2020 Zone activation date (DD/MM/YYYY HH:MM:SS).

Out-of-zone Argos overrides (used when device is outside the zone):

Key Name Default Description
ZOP11 ZONE_ARGOS_MODE LEGACY Argos mode when out of zone
ZOP10 ZONE_ARGOS_REPETITION_SECONDS 240s TX interval when out of zone
ZOP08 ZONE_ARGOS_DEPTH_PILE 1 Depth pile when out of zone
ZOP12 ZONE_ARGOS_DUTY_CYCLE 0xFFFFFF Duty cycle when out of zone
ZOP13 ZONE_ARGOS_NTRY_PER_MESSAGE 0 TX repetitions when out of zone
ZOP14 ZONE_GNSS_DELTA_ARG_LOC_ARGOS_SECONDS 3600s GNSS period when out of zone
ZOP15 ZONE_GNSS_HDOPFILT_THR 2 HDOP filter when out of zone
ZOP16 ZONE_GNSS_HACCFILT_THR 5m Accuracy filter when out of zone
ZOP17 ZONE_GNSS_ACQ_TIMEOUT 240s GNSS timeout when out of zone

Pass Prediction

These parameters tune the Prepass algorithm used in PASS_PREDICTION mode (ARP01=1) to compute when Argos satellites are overhead.

Key Name Default Description
PPP01 PP_MIN_ELEVATION 15.0° Minimum satellite elevation. Ignore passes where the satellite is below this angle above the horizon. Higher = better signal but fewer passes.
PPP02 PP_MAX_ELEVATION 90.0° Maximum satellite elevation. Usually 90° (zenith).
PPP03 PP_MIN_DURATION 30s Minimum pass duration. Ignore passes shorter than this. Very short passes have poor reception.
PPP04 PP_MAX_PASSES 1000 Maximum passes to compute. Limits computation time and memory.
PPP05 PP_LINEAR_MARGIN 300s Linear margin (seconds). Time buffer added before/after computed pass window to account for prediction errors.
PPP06 PP_COMP_STEP 10s Computation step size. Resolution of the pass prediction search in seconds. Smaller = more precise but slower computation.

Sensors

All sensors follow the same parameter pattern. Each sensor has:

  • ENABLE — Turn the sensor on/off
  • PERIODIC — Sampling period in seconds (0 = sample only when triggered)
  • ENABLE_TX_MODE — How sensor data is included in satellite packets
  • ENABLE_TX_MAX_SAMPLES — Maximum samples aggregated per TX event
  • ENABLE_TX_SAMPLE_PERIOD — Sampling interval for TX data collection (ms)

TX Aggregation Modes

Value Mode Description
0 OFF Sensor data is not included in satellite packets
1 ONESHOT Include the most recent single sample
2 MEAN Include the average of all samples since last TX
3 MEDIAN Include the median of all samples since last TX

Pressure Sensor (LPS28DFW)

Requires ENABLE_PRESSURE_SENSOR at build time. Measures barometric pressure, temperature, and computes altitude.

Key Name Default Description
PRP01 PRESSURE_SENSOR_ENABLE false Enable pressure sensor
PRP02 PRESSURE_SENSOR_PERIODIC 0 Sampling period (seconds). 0 = triggered only.
PRP03 PRESSURE_SENSOR_LOGGING_MODE ALWAYS (0) ALWAYS (0): Log every sample. UW_THRESHOLD (1): Log only when depth crosses a threshold (reduces flash writes for UW deployments).
PRP04 PRESSURE_SENSOR_ENABLE_TX_MODE OFF TX aggregation mode
PRP05 PRESSURE_SENSOR_ENABLE_TX_MAX_SAMPLES 1 Max samples per TX
PRP06 PRESSURE_SENSOR_ENABLE_TX_SAMPLE_PERIOD 1000ms TX sampling interval
PRP07 PRESSURE_SENSOR_FULL_SCALE 1260hPa (0) Full scale range. 0 = 1260 hPa (standard atmospheric). 1 = 4060 hPa (for deep underwater pressure measurement up to ~30m depth).

Accelerometer (BMA400)

Requires ENABLE_AXL_SENSOR. 3-axis accelerometer with wakeup detection and activity monitoring.

Key Name Default Description
AXP01 AXL_SENSOR_ENABLE false Enable accelerometer
AXP02 AXL_SENSOR_PERIODIC 0 Sampling period (seconds)
AXP03 AXL_SENSOR_WAKEUP_THRESH 0.0g Wakeup threshold (g). The acceleration level that triggers a wakeup interrupt. 0 = wakeup disabled. For mortality detection: any non-zero value detects movement.
AXP04 AXL_SENSOR_WAKEUP_SAMPLES 5 Wakeup samples. Number of consecutive samples above threshold before triggering wakeup. Higher = fewer false triggers.
AXP08 AXL_SENSOR_MEASUREMENT_RANGE 0 Measurement range. 0 = ±2g, 1 = ±4g, 2 = ±8g, 3 = ±16g. Lower range = better resolution. ±2g is sufficient for most wildlife tracking.
AXP09 AXL_SENSOR_POWER_MODE 0 Power mode. 0 = Low Power, 1 = Normal, 2 = Sleep. Low Power is recommended for battery-operated deployments.
AXP05 AXL_SENSOR_ENABLE_TX_MODE OFF TX aggregation mode
AXP06 AXL_SENSOR_ENABLE_TX_MAX_SAMPLES 1 Max samples per TX
AXP07 AXL_SENSOR_ENABLE_TX_SAMPLE_PERIOD 1000ms TX sampling interval
AXP10 AXL_FIFO_ENABLE false FIFO batch mode. When true, read N samples from BMA400's hardware FIFO at each sample and return the average — improves noise rejection for sustained activity / mortality classification. When false (default), single-sample mode (legacy behavior).
AXP11 AXL_FIFO_SAMPLE_COUNT 50 Samples per FIFO batch (range 1–170). Only used when AXP10=true. Higher = more averaging but adds I2C latency at sample time.

Thermistor (NTC)

Requires ENABLE_THERMISTOR_SENSOR. Reads temperature from an NTC thermistor via ADC.

Key Name Default Description
THP01 THERMISTOR_SENSOR_ENABLE false Enable thermistor
THP02 THERMISTOR_SENSOR_PERIODIC 0 Sampling period (seconds)
THP03 THERMISTOR_SENSOR_VALUE 0.0 Last reading (read-only). Current temperature value in °C. Read via STATR.
THP04 THERMISTOR_SENSOR_WAKEUP_THRESH 0.0°C Wakeup threshold. Temperature above which a wakeup event is generated. 0 = disabled.
THP05 THERMISTOR_SENSOR_WAKEUP_SAMPLES 0 Wakeup samples. Consecutive readings above threshold before triggering. 0 = disabled.
THP06 THERMISTOR_SENSOR_ENABLE_TX_MODE OFF TX aggregation mode
THP07 THERMISTOR_SENSOR_ENABLE_TX_MAX_SAMPLES 1 Max samples per TX
THP08 THERMISTOR_SENSOR_ENABLE_TX_SAMPLE_PERIOD 1000ms TX sampling interval

Other Sensors

These sensors follow the same ENABLE / PERIODIC / TX_MODE pattern. All require their respective ENABLE_* build flag.

Ambient Light (LTR-303) — Keys: LTP01-LTP06. Measures luminosity in lumens.

pH Sensor (OEM) — Keys: PHP01-PHP06. Measures pH value.

Sea Temperature (RTD or TSYS01) — Keys: STP01-STP06. High-precision ocean temperature.

Conductivity-Depth-Temperature (CDT) — Keys: CDP01-CDP05. Multi-parameter oceanographic sensor.

Camera — Keys: CAP01-CAP05. Triggers an external camera on surfaced or accelerometer wakeup events.

Mortality Detection (RSPB)

Requires ENABLE_MORTALITY_SENSOR at build time (auto-enabled on RSPB). Combines accelerometer activity, body temperature, and GPS stationarity to compute a mortality confidence percentage (0-100%) transmitted in every satellite sensor packet.

WARNING: Mortality detection requires AXL (AXP01=1), Thermistor (THP01=1), and GNSS (GNP01=1) to be enabled and active. If any sensor is disabled, the algorithm works with partial data only (biased toward ALIVE). The RSPB build script enables all three by default.

Key Name Default Description
MTP01 MORTALITY_ENABLE false Enable mortality detection. When false, service is disabled, zero CPU/flash impact.
MTP02 MORTALITY_ACTIVITY_THRESH 10 Activity threshold (0-255). BMA400 activity score below which the bird is considered immobile. At rest: ~0-5, walking: ~20-50, flying: ~100+.
MTP03 MORTALITY_TEMP_THRESH 25.0 Body temperature threshold (°C). Below this = hypothermic. Live bird body temp ~38-42°C. Dead bird converges to ambient (~10-25°C).
MTP04 MORTALITY_GPS_DISTANCE_THRESH 50 Stationarity threshold (meters). If GPS position moved less than this since last session AND speed < 0.1 m/s, bird is considered stationary.
MTP05 MORTALITY_CONFIRM_DAYS 3 Confirmation period (days). Number of consecutive days with confidence >= 80% before status transitions to CONFIRMED.
MTP06 MORTALITY_DUTY_CYCLE_MODULO 0 Duty cycle when confirmed. Replaces BOOT_COUNTER_MODULO when mortality is confirmed. 0 = disabled (never modify duty cycle, just report confidence). Set > 0 to opt in.
MTP07 MORTALITY_ORIGINAL_MODULO 0 Backup modulo (read-only). Auto-saved when mortality first confirmed. Used to restore original duty cycle on recovery.

Power Management (RSPB / TPL5111)

TPL5111-gated parameters (RSPB only) — PWP01, PWP02, PWP03, PWP04 are only implemented on EXTERNAL_WAKEUP builds. Their slots are reserved on all boards for stable indexing, but PARML omits them and PARMW rejects them on non-RSPB targets. They control the duty cycling behavior. See RSPB Behavior for the full description.

Cross-board parameters — PWP05 (SHUTDOWN_NTIME_SAT) and PWP06 (LAST_KNOWN_RTC) are exposed on all builds. The powerdown semantics differ by board (see PWP05 note below).

Key Name Default Availability Description
PWP01 SHUTDOWN_TIMER 0 RSPB only Safety shutdown timer (seconds). Maximum time the device stays awake per cycle. When this timer expires, the device powers down regardless of what it's doing. 0 = disabled. RSPB recommended: 600s (10 min). Prevents stuck sessions from draining the battery.
PWP03 BOOT_COUNTER_MODULO 2 RSPB only Active cycle frequency. The device runs an active cycle (GNSS + TX) every Nth TPL5111 wakeup. Intermediate wakeups just increment the counter and power off (~50ms). Effective cycle period = WAKEUP_PERIOD × BOOT_COUNTER_MODULO. With default 3600s × 2 = 2h. RSPB typical: 4 (~7h) or 5 (~8.75h).
PWP05 SHUTDOWN_NTIME_SAT 0 All boards TX count before powerdown. After sending this many satellite messages, the device calls PMU::powerdown(). 0 = disabled (only SHUTDOWN_TIMER controls session end). RSPB typical: 3-5. Powerdown semantics depend on the board: on RSPB, MCU_DONE is pulsed so the TPL5111 cuts VSYS (true power-off). On LinkIt V4 (SMD/KIM/LoRa), PSEUDO_POWER_OFF triggers a soft reset via GPREGRET — the device reboots into the pseudo power-off path and waits for reed switch re-engagement before starting another session.
PWP06 LAST_KNOWN_RTC 0 All boards Flash-persisted RTC (read-only). Updated on every GNSS session power-off, PMU powerdown, and RTCW command. On RSPB: used by the pseudo-RTC chain (last_rtc + WAKEUP_PERIOD). On LinkIt V4: restored directly at boot to enable MGA-ANO GNSS assistance and faster TTFF.

Read-only:

Key Name Availability Description
PWP02 BOOT_COUNTER RSPB only Current boot counter value since last active cycle
PWP04 WAKEUP_PERIOD RSPB only TPL5111 wakeup period in seconds. Writable (PWP04); compiled default 3600 via build_rspb.sh (WAKEUP_PERIOD). MUST match the fitted TPL5111 timing resistor — the firmware uses it to advance the pseudo-RTC between wakeups.

LED

Key Name Default Description
LDP01 LED_MODE HRS_24 (1) Internal RGB LED behavior. OFF (0): LED always off — recommended for bird trackers (invisible, saves energy). HRS_24 (1): LED active for the first 24 hours after boot — useful for initial deployment verification, then auto-disables. ALWAYS (3): LED always active — useful for development and testing. Note: HRS_24 / ALWAYS only light the LED during active events (TX in progress, GNSS on, surface/dive transitions). Between events the LED is off — there is no "constantly lit" mode.
LDP02 EXT_LED_MODE DEPRECATED (slot 117 reserved). External LED was an Icoteq Horizon / Artic-R2 era through-pot indicator. EXT_LED_PIN is not wired on LinkIt V4 or RSPB, so the param had no visible effect. Slot kept reserved (hidden from DTE PARMR/PARMW) for flash-layout backward compat. Old configs that still write LDP02 are silently ignored.
LDP03 LED_HRS24_RTC_CUTOFF 0 (unset) RTC epoch at which the HRS_24 window expires (DATESTRING / time_t). Auto-set by GPSService at the first valid GNSS fix to (GNSS RTC + 24h), then read by ledsm.cpp to gate LEDs in HRS_24 mode. Effective only on EXTERNAL_WAKEUP boards (RSPB) — needed there because system_timer resets on every TPL5111 hard wake-up, so an uptime-based window would never expire. On regular boards (LinkIt) the HRS_24 window is system_timer->get_counter() < 24h and LDP03 is neither written nor read. 0 = not yet anchored (first fix pending); HRS_24 mode keeps LEDs visible until the anchor is set.

Debug

Key Name Default Description
DBP01 DEBUG_OUTPUT_MODE depends on build Debug log output interface. Default depends on the build type — see below. UART (0): Debug output on the J3 UART connector at 460800 baud. Default for RSPB Debug builds (no USB). Requires a USB-to-UART adapter. USB_CDC (1): Debug output on the USB connector as a virtual serial port. Default for LinkIt V4 Debug builds (KIM, SMD, LoRa). Connect at 115200 baud 8N1. BLE_NUS (2): Debug output over Bluetooth (Nordic UART Service). Available on all boards. Use nRF Connect app or pylinkit --log. NONE (3): No debug output — default for Release builds (CMAKE_BUILD_TYPE=Release defines NDEBUG). UART/USB/BLE debug init is skipped entirely (console_log = nullptr), reducing idle power from ~1.9mA to ~10µA. system.log flash filesystem logging is unaffected and can be retrieved via BLE in configuration mode.

Default value depends on build flavor (see ports/nrf52840/main.cpp):

  • NDEBUG defined (CMAKE_BUILD_TYPE=Release) → NONE (3) on every board. Field default.
  • Debug build on RSPB → UART (0)
  • Debug build on LinkIt V4 (KIM/SMD/LoRa) → USB_CDC (1)

The compile-time default can be overridden at runtime via PARMW,DBP01,<mode>. The override persists in flash. See Building § Release build behaviour.


Certification Test

These parameters are used for Argos TX certification and testing. Not used in normal operation.

Key Name Default Description
CTP01 CERT_TX_ENABLE false Enable certification TX mode. When enabled, the device continuously transmits a fixed payload for TX power and frequency certification. Overrides normal Argos behavior.
CTP02 CERT_TX_PAYLOAD 27 bytes 0xFF Certification TX payload. Fixed hex-encoded data transmitted in certification mode.
CTP03 CERT_TX_MODULATION LDA2 (1) Certification modulation. 0 = LDK, 1 = LDA2, 2 = VLDA4.
CTP04 CERT_TX_REPETITION 60s Certification TX interval. Time between certification transmissions.

Adaptive Modulation & Radio Configuration

Per-modulation radio configurations and adaptive modulation control. When adaptive modulation is enabled, the firmware auto-selects LDK/LDA2/VLDA4 based on packet type.

Key Name Default Description
ARP51 ARGOS_RADIOCONF_LDK (device-specific) LDK radio configuration. 16-byte hex string for LDK modulation parameters from Kineis.
ARP52 ARGOS_RADIOCONF_LDA2 (device-specific) LDA2 radio configuration. 16-byte hex string for LDA2 modulation parameters from Kineis.
ARP53 ARGOS_RADIOCONF_VLDA4 (device-specific) VLDA4 radio configuration. 16-byte hex string for VLDA4 modulation parameters from Kineis.
ARP54 ARGOS_ADAPTIVE_MODULATION false Adaptive modulation enable. When ON, firmware auto-selects modulation (LDK/LDA2/VLDA4) based on packet type. When OFF, LDA2 is used for all packets.

Surfacing Burst

Parameters for the Surfacing Burst mode (ARP01=5). See Underwater & Behavioral Modes for detailed session timeline.

Doppler Phase

Key Name Default Range Description
ARP40 SURFACING_BURST_INIT_S 5 1-120 Initial Doppler interval (seconds). Delay before the 2nd Doppler message. 1st message is always immediate.
ARP41 SURFACING_BURST_STEP_S 1 0-60 Interval increment per message. Each subsequent Doppler adds this to the interval. 0 = fixed interval.
ARP42 SURFACING_BURST_MAX_S 30 5-600 Maximum Doppler interval cap (seconds). Progressive interval is capped at this value.
ARP43 SURFACING_BURST_MAX_MSG 0 0-255 Maximum Doppler messages. 0 = unlimited. When reached, Doppler phase stops even without GNSS fix. Recommended: 5-10 for sea turtles.

SMD Module Configuration

Parameters specific to the SMD satellite module hardware (ARGOS_SMD=ON builds only).

Power management: The SMD module is fully powered off (SAT_PWR_EN=LOW) between communication sessions. The LPM mode only affects idle waits within a session (e.g., between consecutive TX in a surfacing burst). At the end of each session, the host cuts power to the SMD.

Key Name Default Range Description
ARP60 SMD_LPM_MODE 0x01 0x01-0x1F NOT IMPLEMENTED. Parameter exists at slot 213 but is hidden (readable=false, writable=false). The write_lpm() SPI command is commented out in smd_sat.cpp. Since the SMD module is fully powered off between TX sessions, LPM would only be useful if the SMD stayed powered during idle — which is not the current design. Kept as a placeholder for future use.

SPI / UART Commands

Interface Read Write
SPI 0x11 → 1 byte bitmap 0x12 (REQ) → ACK, then 0x13 + bitmap
UART AT+LPM=?+LPM=0xNN AT+LPM=0xNN+OK

Wakeup Pin (STANDBY/SHUTDOWN only)

When LPM includes STANDBY (0x08) or SHUTDOWN (0x10), the SAT_WKUP GPIO (PB3 on STM32WL) controls sleep entry/exit:

  • idle_enter: WKUP LOW → SMD can sleep between TX
  • idle_exit: WKUP HIGH + 50ms delay → SMD wakes before next TX
  • power_on: WKUP HIGH → ensure wake from cold start
  • stopped: WKUP LOW → release before power cut

RSPB Configuration

RSPB-specific parameters (only on BOARD=RSPB builds).

Key Name Default Description
RSP01 RSPB_PACKET_FORMAT 0 RSPB packet format. 0 = RSPB Long (LDA2, 192-bit frame: 181 data + 3 reserved + 8-bit CRC, full sensors + AXL XYZ), 1 = RSPB Short (LDK, 122 bits, compact).

LoRa RAK3172 Configuration

These parameters are only available on LORA_RAK3172=ON builds (LinkIt V4 LoRa). They configure the RAK3172-SiP LoRaWAN module.

Network Credentials

Key Name Description
LRP01 LORA_DEVEUI Device EUI (read-only). 16 hex chars. Unique identifier burned into the RAK3172 module. Cannot be changed.
LRP02 LORA_APPEUI Application EUI. 16 hex chars. Provided by the LoRaWAN network server (e.g., TTN, Chirpstack).
LRP03 LORA_APPKEY Application key. 32 hex chars. Secret key for OTAA join. Must match the network server configuration.
LRP04 LORA_DEVADDR Device address (ABP mode). 8 hex chars.
LRP05 LORA_APPSKEY Application session key (ABP mode). 32 hex chars.
LRP06 LORA_NWKSKEY Network session key (ABP mode). 32 hex chars.

Radio Configuration

Key Name Default Description
LRP07 LORA_NJM 1 (OTAA) Network join mode. 0 = ABP (pre-provisioned keys), 1 = OTAA (over-the-air activation). OTAA is recommended for most deployments.
LRP08 LORA_BAND 4 (EU868) Frequency band. 0=EU433, 1=CN470, 2=RU864, 3=IN865, 4=EU868, 5=US915, 6=AU915, 7=KR920, 8=AS923-1, 9=AS923-2, 10=AS923-3, 11=AS923-4. Must match your regional regulations.
LRP09 LORA_CLASS 0 (A) LoRaWAN class. 0=A (uplink-initiated, lowest power), 1=B (beacon-synchronized), 2=C (continuous RX). Class A is recommended for battery-operated wildlife trackers.
LRP10 LORA_DR 3 (SF9) Data rate. 0=SF12 (longest range, lowest throughput), 5=SF7 (shortest range, highest throughput). DR3 (SF9) is a good compromise for wildlife tracking payloads. Auto-bumped at boot to the minimum DR that fits the active packet config — e.g. if CloudLocate MEAS50 (GNP45=2, GNP46=2) is enabled and LORA_DR=0, the driver forces DR≥3 and logs a WARN. See 12 — LoRa § DR Trade-offs.
LRP11 LORA_ADR false Adaptive data rate. Let the network server optimize the data rate based on signal quality. Useful in fixed deployments, less predictable for mobile wildlife trackers.
LRP12 LORA_TXP 0 TX power index. 0 = maximum power (14 dBm for EU868). Higher index = lower power.
LRP13 LORA_CFM false Confirmed uplinks. Request server acknowledgment for each message. Increases reliability but uses more airtime and battery (downlink RX windows).
LRP14 LORA_FPORT 2 Application FPort. LoRaWAN port number (1-223). Used by the server to route messages to the correct application handler.
LRP15 LORA_LP_MODE 1 (standby) RAK3172 low-power mode. 0 = stop mode (deepest sleep, slower wake), 1 = standby mode (faster wake, slightly higher idle current).

Rolling TX Rate Limiter (Plan 1 step 2)

Hard cap on Argos TX inside a sliding time window. Disabled by default. Applies uniformly to every TX — including the first ping of a SURFACING_BURST cycle. The battery-saving guarantee deliberately takes precedence over the §5.3 first-TX-fast objective (CLAUDE.md). State persists in .noinit RAM with CRC16: survives soft reset, resets on real power cut.

Key Name Default Description
RLP01 RATE_LIMIT_EN false Master enable.
RLP02 RATE_LIMIT_WINDOW_S 3600 Sliding window size in seconds.
RLP03 RATE_LIMIT_MAX_TX 10 Max TX inside the window. Bounded 0..128 (ring buffer cap, bumped 32 → 128 in 143aedc9 for multi-day rolling windows). 0 disables the cap. Noinit footprint grew 256 → 1024 bytes.

When the cap is hit, the scheduler reschedules the next TX to the moment the oldest in-window entry rolls out (oldest + WINDOW_S).

Hauled vs At-Sea Mode (Plan 1 step 3)

Auto-detects hauled-out animals based on continuous UW idle time. When engaged, substitutes a narrow set of communication-side params (Argos mode, TX interval, GNSS enable, GNSS strategy) — clones the LOW_BATTERY override pattern. Priority cascade: LOW_BATTERY > HAULED > OUT_OF_ZONE > NORMAL.

Detection logic:

  • AT_SEA → HAULED: (now - last_uw_event_rtc) > HAULED_IDLE_THRESHOLD_H × 3600
  • HAULED → AT_SEA: HAULED_RETURN_EVENTS consecutive dive events (hysteresis)

State (in-hauled flag + counters) persists in .noinit RAM with CRC16. Cold boot conservatively resets to AT_SEA — the device waits for evidence before substituting battery-saving params.

Key Name Default Description
HMP00 HAULED_DETECT_EN false Master enable.
HMP01 HAULED_IDLE_THRESHOLD_H 24 Hours dry before declaring HAULED.
HMP02 HAULED_RETURN_EVENTS 3 Consecutive dives to return AT_SEA.
HMP10 HAULED_ARGOS_MODE LEGACY Override ARGOS_MODE while hauled (uses same encoding as ARP01). Restricted in 49687eec to {LEGACY, DUTY_CYCLE, DOPPLER, PASS_PRED} — SURFACING_BURST is silently auto-promoted to LEGACY at config read for legacy persisted configs; DTE PARMW rejects value 5.
HMP11 HAULED_TR_NOM 7200 Override TR_NOM (TX interval, seconds) while hauled.
HMP12 HAULED_GNSS_EN false Override GNSS_EN while hauled.
HMP13 HAULED_GNSS_STRAT 1 (REUSE_LAST) GNSS strategy (BaseGnssStrategy): 0=FRESH (acquire new fix), 1=REUSE_LAST (use cached fix up to GNP50 age), 2=OFF (Doppler-only). When OFF, HMP12 is ignored.

GNSS Strategy Reuse-Last (Plan 1 step 1)

Key Name Default Description
GNP50 GNSS_REUSE_FIX_MAX_AGE_S 86400 Max age (seconds) of a cached GPS fix that may be reused when BaseGnssStrategy::REUSE_LAST is selected (e.g. via HMP13). Stale fixes fall back to Doppler-only. 0 disables reuse entirely.

SMD Diagnostic (Read-only via PARMR)

Internal SMD module state, exposed read-only for field-debug. Both are persisted in flash, survive reboot, and tell the field engineer "what timing profile is currently engaged" and "what modulation was last cached".

Key Name Encoding Default Description
SMP00 SMD_DEGRADED_MODE UINT (0-1) 0 SMD autofallback state flag. 0 = FAST timings active (default). 1 = SAFE timings active — SmdSat::degraded_mode_engage() flipped this after 3 consecutive errors (cf 11 — Satellite Communication § Part D). When 1, every SMD operation uses the v4.1.4 SAFE delay constants until the retest window elapses. Persists in flash to survive WDT reset. Writable since 29af5362: PARMW SMP00=0 accepted (operator clear path — manual SAFE-mode exit); PARMW SMP00=1 rejected (manual SAFE engagement remains under exclusive autofallback control). Lazy sync of the runtime flag from the persisted param at the top of send()SMP00=0 takes effect on next TX without reboot.
SMP01 ARGOS_CACHED_MODULATION UINT (0-2) 0 Cached Argos modulation enum mirroring SmdArgosModulation. 0 = LDA2 (default), 1 = LDK, 2 = VLDA4. Set by SmdSat after the credentials-dirty path writes the master RCONF and reads it back via read_radio_conf(). Read-only via DTE — switch_modulation() and write_credentials_from_config() are the writers. Lets field engineers verify the device boots with the expected modulation without having to attach a logic analyser.

Battery & System Status (Read-only)

These values are read via $STATR:

Key Name Description
POT03 BATT_SOC Battery state of charge (%). Fuel gauge on RSPB (STC3117), estimated from voltage on LinkIt V4 via the per-chemistry LUT selected at build time (BATTERY_CHEMISTRY, see Building → Battery Chemistry Profiles). For Li-SOCl2 (BATT_CHEM_LS17500_2P), SOC is intrinsically coarse — prefer BATT_VOLTAGE for fine-grained tracking.
POT06 BATT_VOLTAGE Battery voltage in volts (e.g., 3.85). Authoritative reading; preferred over BATT_SOC for Li-SOCl2 deployments.
SYT01 RTC_CURRENT_TIME Current RTC value as Unix timestamp. On RSPB, this is approximate between GNSS fixes.

POT05 (LAST_FULL_CHARGE_DATE) was removed in v4.x — see the Legacy / Renamed parameters table at the top of this page.

Clone this wiki locally