-
Notifications
You must be signed in to change notification settings - Fork 3
09 ‐ Parameters
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.
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. |
| 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.
|
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 |
These parameters control how and when the device transmits to Argos satellites.
| 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. |
| 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. |
| 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. |
| 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.
| 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. |
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.
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.
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.
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. 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) |
These parameters control the u-blox M10Q GNSS module: when it runs, how it filters fixes, and how it interacts with underwater detection.
| 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). |
| 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. |
| 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 |
| 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 | "" |
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. |
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.
| 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.
| 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. |
| — |
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). |
|||
| — |
DEPRECATED 2026-05 — slot _RESERVED_224. Replaced by GNP52 GNSS_DEEP_IDLE_AFTER_OFF_S. |
|||
| — |
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. |
When GNP45>=1 and the GNSS acquisition timeout expires without a fix passing quality filters:
- During acquisition, every NAV-PVT report with a valid 2D/3D fix (but failing hAcc or hDOP filter) is evaluated
- The fix with the lowest hAcc (best horizontal accuracy) is stored as the "degraded PVT"
- At timeout (
max_nav_samplesreached), if a degraded PVT exists:- Firmware emits
GPSEventPVTDegradedinstead ofGPSEventMaxNavSamples - GPS service logs the entry with
event_type = FASTLOCandvalid = true - TX service builds a dedicated fastloc packet with quality metadata
- Firmware emits
- 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
When GNP45=2 (CLOUDLOCATE), the M10 receiver captures raw GNSS measurement snapshots (MEASC12/MEAS20/MEAS50) alongside normal PVT acquisition:
- At
power_on(), RXM-MEASC12/MEAS20/MEAS50 messages are enabled on the M10 UART - The M10 outputs raw measurement snapshots periodically while navigation runs
- If a valid PVT fix is obtained → normal fix is used (CloudLocate data discarded)
- 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)
- 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.
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.
| 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. |
| — | 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). |
| 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+. |
| 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. |
| Key | Name | Default | Description |
|---|---|---|---|
| — | Removed. Thresholds are now fully auto-calibrated. Slot 132 reused as GNP40. DTE key UNP20 reassigned to MIN_SURFACE_CYCLE_INTERVAL_S (slot 211). | ||
| — | 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. |
| 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. |
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.
| 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. |
| 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. |
| 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). |
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 |
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. |
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)
| 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 |
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). |
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. |
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 |
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.
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. |
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. |
| 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. |
| — |
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. |
| 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):
NDEBUGdefined (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.
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. |
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. |
Parameters for the Surfacing Burst mode (ARP01=5). See Underwater & Behavioral Modes for detailed session timeline.
| 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. |
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. |
| Interface | Read | Write |
|---|---|---|
| SPI |
0x11 → 1 byte bitmap |
0x12 (REQ) → ACK, then 0x13 + bitmap |
| UART |
AT+LPM=? → +LPM=0xNN
|
AT+LPM=0xNN → +OK
|
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-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). |
These parameters are only available on LORA_RAK3172=ON builds (LinkIt V4 LoRa). They configure the RAK3172-SiP LoRaWAN module.
| 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. |
| 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). |
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).
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_EVENTSconsecutive 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. |
| 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. |
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. |
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.