Create GPS message TOML files for configuring GPS receivers via satpulsetool
Create a complete TOML message file for a GPS receiver by using the gps-msg-add skill for each functional group.
Extract the following from the user's request or conversation context:
configs/gpsmsg/receiver.toml)/dev/ttyUSB0)115200)If any required information is missing, ask the user before proceeding.
Create the message file with a header:
#:schema ./gpsmsg-schema.json
# [Receiver model] configuration messages
# [Manufacturer] [Model] GNSS receiver
# Default baud rate: [speed]
Use /gps-msg-add to add each functional group, one at a time. If a device is provided, /gps-msg-add will invoke /gps-msg-test to verify each group and add verification comments.
Groups are ordered by testability - start with groups where effects are easy to observe and verify automatically.
get-version)Query firmware version - useful as a connectivity test. Do this first to verify basic communication works.
NMEA message output control with individual tags for each sentence type:
nmea-gga, nmea-gga-off - Fix data (position, quality, satellites)nmea-gsa, nmea-gsa-off - Active satellites and DOPnmea-gsv, nmea-gsv-off - Satellites in viewnmea-rmc, nmea-rmc-off - Recommended minimum (time, position, velocity)nmea-zda, nmea-zda-off - Time and datenmea-daemon - Convenience tag enabling RMC, GGA, GSV, GSA (messages used by satpulse daemon)Easy to verify by capturing before/after. Individual tags allow granular control.
reload)Reload configuration from NVM - restores saved settings. Safe to test (doesn't change persistent state) and useful for verifying other commands work. Should include delay = 3 to wait for reload to complete.
fix-rate-*, get-fix-rate)Fix rate (navigation solutions per second) configuration:
get-fix-rate - Query current fix ratefix-rate-1 through fix-rate-20 (1, 2, 5, 10, 20 Hz)Add if the receiver supports configuring the fix interval. Message output rate is often specified as a multiple of the fix rate (one message every N fixes), so the fix rate determines the actual message rate.
Skip if: Receiver has no configurable fix rate
Binary message output control with individual tags:
asbin-navtime, asbin-timeutc, asbin-svinfo, asbin-svin, ubx-navpvt)nmea-ver-*, get-nmea-ver)NMEA protocol version configuration:
get-nmea-ver - Query current versionnmea-ver-3 - Set to NMEA 3.01nmea-ver-400 - Set to NMEA 4.00nmea-ver-410 - Set to NMEA 4.10 (adds signal ID to GSV)nmea-ver-411 - Set to NMEA 4.11 (changes talker IDs: GB for BeiDou, GQ for QZSS)Verifiable by observing talker ID changes (BD vs GB) and GSV signal ID field.
min-elev-*, get-min-elev)Minimum satellite elevation configuration:
get-min-elev - Query current elevation maskmin-elev-0 through min-elev-45 in 5-degree incrementsVerifiable by cross-referencing GSA (satellites used) with GSV (satellite elevations).
gnss-*, get-gnss)GNSS constellation configuration with per-constellation and combination tags:
get-gnss - Query current constellation settingsgnss-gps - Enable GPS only (with all available bands)gnss-gal - Enable Galileo onlygnss-glo - Enable GLONASS onlygnss-bds - Enable BeiDou onlygnss-gps-gal - Enable GPS and Galileognss-all - Enable all constellationsVerifiable via GSV message prefixes (GPGSV, GAGSV, GLGSV, GBGSV).
pps, pps-off, get-pps)PPS configuration:
get-pps - Query current PPS configurationpps - Enable with sensible defaults (100us pulse width, rising edge, only when locked)pps-off - Disable PPS outputObservable effect requires oscilloscope or PHC with external timestamp input.
Restart commands with different levels of data clearing:
hot-start - Keeps ephemeris data (fastest restart)warm-start - Clears ephemeris, keeps almanaccold-start - Clears all satellite datareset - Reload config from NVM AND clear satellite data (combines reload + cold-start semantics)Verifiable by checking RMC status (V=void after reset) and GSV (missing elevation/azimuth data after cold start).
survey, survey-off, get-survey)Survey-in configuration for base station positioning:
get-survey - Query current survey configurationsurvey - Start survey with sensible defaults (2000 seconds, 20m accuracy)survey-off - Stop survey / return to mobile mode (sets parameters to 0)If the protocol provides a periodic survey status message, add:
asbin-svin or similar - Enable survey status message at 1HzSkip if: Receiver doesn't support survey-in mode
fixed-pos-example, fixed-pos-off, get-fixed-pos)Fixed ECEF position for base station:
get-fixed-pos - Query current fixed positionfixed-pos-example - Set fixed ECEF position (example coordinates - replace with yours)fixed-pos-off - Clear fixed positionSkip if: Receiver doesn't support fixed position mode
rtcm-arp, rtcm-msm4, rtcm-msm7, rtcm-off)RTCM message output for base station:
rtcm-arp - Enable ARP message (1005)rtcm-msm4 - Enable MSM4 messages for all constellations (1074/1084/1094/1124)rtcm-msm7 - Enable MSM7 messages for all constellations (1077/1087/1097/1127)rtcm-off - Disable all RTCM messagesSkip if: Receiver doesn't support RTCM output
get-uart0, get-uart1, speed-*)Serial port configuration:
get-uart0, get-uart1 - Query port configurationspeed-9600, speed-19200, speed-38400, speed-57600, speed-115200, speed-230400, speed-460800Verifiable on real UARTs (/dev/ttyUSBx) by reconnecting at new speed.
Notes:
save) - requires user consentSave current configuration to NVM. Only test if user consents - modifies persistent state.
factory-reset) - requires user consentReset receiver to factory defaults AND clear satellite data. Only test if user consents - loses all configuration.
Verifiable by checking that config reverts to defaults and RMC shows void status.
For each group, use the gps-msg-add skill, providing:
The gps-msg-add skill will:
Look at existing files in configs/gpsmsg/ for patterns:
allystar.toml - Allystar binary protocol (comprehensive example with verification comments)lg290p.toml - Quectel (NMEA proprietary sentences)atgm332d-f8.toml - ZKW CASIC binary protocolSee configs/gpsmsg/tags.md for the complete tag reference.
Key rules:
-off suffixget- prefixmin-elev-15, speed-115200