40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#include <cstdio>
|
|
|
|
#include "gps.hpp"
|
|
|
|
int main()
|
|
{
|
|
gps::Reader reader;
|
|
|
|
if (!reader.begin()) {
|
|
std::fprintf(stderr, "gps open failed\n"
|
|
" check /dev/serial0 (UART)\n"
|
|
" enable serial: sudo raspi-config -> Interfaces -> Serial Port\n"
|
|
" login shell = No, hardware = Yes\n");
|
|
return 1;
|
|
}
|
|
std::fprintf(stderr, "gps reading /dev/serial0 at 9600...\n");
|
|
|
|
char line[128];
|
|
gps::Fix fix;
|
|
for (;;) {
|
|
if (!reader.readLine(line, sizeof(line))) {
|
|
std::fprintf(stderr, "uart read error\n");
|
|
break;
|
|
}
|
|
if (!gps::Reader::parseRmc(line, fix)) {
|
|
// Not an RMC sentence or no fix — print raw line for debug
|
|
// std::fprintf(stderr, "raw: %s", line);
|
|
continue;
|
|
}
|
|
if (fix.valid) {
|
|
std::fprintf(stderr, "fix lat=%+.6f lon=%+.6f spd=%.1f kn "
|
|
"time=%s date=%s\n",
|
|
fix.lat, fix.lon, fix.speed_knots,
|
|
fix.time, fix.date);
|
|
} else {
|
|
std::fprintf(stderr, "no fix\n");
|
|
}
|
|
}
|
|
}
|