|
|
1 dienu atpakaļ | |
|---|---|---|
| .. | ||
| avr | 3 nedēļas atpakaļ | |
| .gitignore | 3 nedēļas atpakaļ | |
| HD44780-I2C.h | 3 nedēļas atpakaļ | |
| Makefile | 1 dienu atpakaļ | |
| README.md | 1 dienu atpakaļ | |
| UC1601S-I2C.h | 3 nedēļas atpakaļ | |
| autopause_wrapper.c | 3 nedēļas atpakaļ | |
| expander.h | 3 nedēļas atpakaļ | |
| gpx_wrapper.c | 3 nedēļas atpakaļ | |
| main.c | 1 dienu atpakaļ | |
| main.h | 1 dienu atpakaļ | |
| malformed_test.nmea | 3 nedēļas atpakaļ | |
| nmea_actual_wrapper.c | 3 nedēļas atpakaļ | |
| nmea_wrapper.c | 3 nedēļas atpakaļ | |
| settings.h | 3 nedēļas atpakaļ | |
| stime.h | 3 nedēļas atpakaļ | |
| syslog_wrapper.c | 3 nedēļas atpakaļ | |
| test_malformed.c | 1 dienu atpakaļ | |
| timec.h | 3 nedēļas atpakaļ | |
| xprintf.h | 3 nedēļas atpakaļ | |
Standalone PC program that reprocesses recorded NMEA logs (or lets you feed
NMEA sentences from a live source) through the actual embedded filtering
and GPX-generation code from ../soft (gpx.c, nmea.c, autopause.c,
syslog.c), unmodified. Useful for reviewing/re-tuning filter behavior
against real recorded tracks, and for regression-testing the parser against
malformed input, without flashing a device.
main.h is a single central header that switches between the embedded
build and a PC build via #define PC_BUILD:
stdio, time, math, ...) instead of AVR headersavr/*.h headers (pgmspace.h, interrupt.h, eeprom.h, io.h)
so __flash/PROGMEM-style code compiles as plain RAM datastime.h, settings.h, timec.h, expander.h,
display headers) that satisfy includes without pulling in embedded-only
codeFIL/f_*() FatFS-like shim backed by plain FILE*, so gpx.c can
write files without linking ff.cEach *_wrapper.c file just does #define PC_BUILD / #include "main.h"
and then #include "../soft/<file>.c", so the real embedded source is
compiled as-is, not copied. main.c is the tool's own driver/main() —
soft/main.c itself is not part of this build.
cd gps-test-tool
make # builds ./gps-test-tool
make clean # removes build artifacts and generated output/debug files
./gps-test-tool <input.nmea>
Each run processes the input file twice — once with filters enabled, once disabled — and produces four files in the current directory:
output_filtered.gpx / output_unfiltered.gpx — GPX 1.1 tracksdebug_filtered.txt / debug_unfiltered.txt — per-run debug console
output plus a summary (points processed, distance, elevation gain/loss,
moving/stopped time, average speeds)"Filters enabled" mirrors an out-of-the-box device: Kalman filtering,
distance/minimum-distance thresholds, 3-point averaging, and auto-pause are
all active. "Filters disabled" turns off the distance/Kalman filtering
(CONFFLAG_DISABLE_FILTERS) so you can compare raw vs. filtered output for
the same input.
Device settings can be given as options (defaults in brackets; the ranges
the device accepts are in soft/settings.c's limits_min_u8/limits_max_u8):
-A disable auto-pause [enabled]
-t SEC auto-pause time [30]
-d M auto-pause distance [10]
-s KMH auto-pause speed [3]
-k N points skipped after a fix [0]
-m N minimum satellites [4]
-v verbose system log
The auto-pause defaults match soft/settings.c's out-of-the-box defaults.
-o FILE makes a single run with the given settings instead of the
filtered/unfiltered pair, writing only that GPX file. -l FILE also writes
its debug output, and -n disables filters:
./gps-test-tool -o out.gpx -l out.txt -n -t 60 input.nmea
Plain text, one NMEA sentence per line (\n or \r\n), the same as a
device's raw log file. The parser only acts on recognized sentences (RMC,
GGA, GSA, VTG, ...); unrelated lines are ignored. Example minimal input:
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
A regression test (test-malformed) feeds the real gps_parse() a fixture
of real and synthetic edge-case NMEA sentences (malformed_test.nmea):
truncated lines, bad checksums, invalid epochs, short dialect variants, and
a run long enough to exercise HDOP-based speed-sample gating.
make run-test-malformed
This builds test-malformed and runs it against malformed_test.nmea. It
asserts that:
valgrind/ASan for a stronger guarantee than "exited zero")V, VTG mode N) do not add a speed
sampleTo run it against a different fixture file:
./test-malformed path/to/other.nmea
Any non-zero exit / FAIL: line means a check failed.