berthubert / galmon Goto Github PK
View Code? Open in Web Editor NEWgalileo open source monitoring
License: GNU General Public License v3.0
galileo open source monitoring
License: GNU General Public License v3.0
It is already a bit busy with all the ranges being displayed at the moment. It'd be nice to be able to toggle their display (a button/checkbox on the page one can click).
Currently the SV id's are sent as numeric values, however it would be useful for presentation purposes on grafana to show the SV names such as
E10, C08, EGNOS etc.
Since no matter what firmware is loaded onto a given module, "swversion" always indicates the ROM, consider using a different field that shows the flash version actually running.
I've submitted #26 as a set of edits that help move the ubxtool code from one massive block of code and present it with anything that touches devices (the tty device) into a separate file. The goal is to have a place to do O/S specific I/O code should this code be ported to a different platform.
Readability is at the moment the number one goal. There's no additional functionality so far. Stay tuned.
PS: Yes, I pushed the edits before creating the issue. Oops.
Is the stream of data collected by ubxtool compressed on its way to navrecv?
A central navrecv host might have more CPU than bandwidth and benefit from compression.
A remote ubxtool host might have a metered connection that is shared or a latent connection where less packets transmitted are less packets lost.
Accommodating those who like to tune the knobs, allowing a client to pick the preferred compression level can allow for variation between the slowest embedded processors and fastest workstations.
Reference: 5 ways Facebook improved compression at scale with Zstandard
Despite claims in the code, the NavmonMessage transmitter deals badly with timeouts, except during connect, where we handle them well. The timeout is not hooked up to the ReadBuffer class, and is not actually used by writen() in SocketCommunicator.
This issue is a work-in-progress, as although I've noted the excessive resolution I'm not yet sure of what resolution is needed if these are used in client-side calculations.
This list is to be ticked off when the relevant fixes are merged.
Homepage docker section links to faucet/faucet project - https://hub.docker.com/r/faucet/faucet
This seems to be incorrect. I guess https://hub.docker.com/r/gizmoguy/galmon is the correct one.
ubxtool does not work "out of the box" with the uBlox MAX-M8Q on the Uputronics Raspberry Pi+ GPS Expansion shield. the software itself does build on Raspbian Buster, so there is hope. toward that end, i propose for now these changes to the README.md file (no need yet to clone the repo just for these changes):
--- a/README.md
+++ b/README.md
@@ -5,7 +5,8 @@ galileo/GPS/GLONASS/BeiDou open source monitoring. GPL3 licensed. Live website: https://galmon.eu/
Theoretically multi-vendor, although currently only the U-blox 8 chipset is
-supported. Navilock NL-8012U receiver works really well, as does the U-blox evaluation kit for the 8MT.
+supported. Navilock NL-8012U receiver works really well, as does the U-blox evaluation kit for the 8MT,
+as well as the Uputronics Raspberry Pi+ GPS Expansion board in a future release.
Highlights:
* Processes raw frames/strings/words from GPS, GLONASS, BeiDou and Galileo
@@ -31,13 +32,13 @@ Goals: order calculations
Works on Linux (including Raspbian on Pi Zero W), OSX and OpenBSD.
-
+Builds on Raspbian Buster [g++-8] (but not Raspbian Stretch [g++-6]).
Build locally
-------------
-To get started, make sure you have a C++17 compiler, git, protobuf-compiler.
+To get started, make sure you have a C++17 compiler (g++ version 8 or better), git, protobuf-compiler, and ncurses-dev.
Then run 'make ubxtool navdump' to build the receiver-only tools.
To also run the webserver locally, intall libh2o-dev and run 'make'.
@@ -45,7 +46,7 @@ To also run the webserver locally, intall libh2o-dev and run 'make'. To build everything, try:
-apt-get install protobuf-compiler libh2o-dev libcurl4-openssl-dev libssl-dev libprotobuf-dev libh2o-evloop-dev libwslay-dev
+apt-get install protobuf-compiler libh2o-dev libcurl4-openssl-dev libssl-dev libprotobuf-dev libh2o-evloop-dev libwslay-dev libncurses-dev git clone https://github.com/ahupowerdns/galmon.git --recursive
cd galmon
make
Afaict they are always zero, and t0t
, wn0t
, delta-utc
are not present either.
There's no need for a logfile to be created by ubxtool for remote stations that are just feeding data over the net. The logfile should not be created by default and only enabled via a command line flag for specific uses.
BTW: While the file is benign, I found this was an issue when writing the systemd scripts as I wanted to run ubxtool as a daemon in a read-only folder as a dedicated user. Until this is fixed; I can't do that.
The purpose would be to use the same systems as NTP and position server, whilst ubxtool is running.
An example script, using OpenCageGeocode
takes a csv inputfile of lat,long
outputs a csv of lat,long,city,state,country_code
https://github.com/akhepcat/Miscellaneous/blob/master/LatLongParse.py
This could be run once a day (at most, probably) to populate a cache for displaying the general location of users' receivers.
requires a free API key, which nets 2000+ lookups per day, which is plenty for seeding/updating a local cache on a server.
If a receiver is offline (using same algo as what /observers.html uses to flag it), the map should not render the corresponding range ring on the map. (It'd probably still makes sense to draw the location box.)
Just wondering if my receiver (ublox NEO-M8N) is good enough for galmon.
I am operating it under Ubuntu 18.04 and it seems work with screen:
sudo screen /dev/ttyACM0 9600
$GATXT,01,01,02,u-blox AG - www.u-blox.com*41
$GATXT,01,01,02,HW UBX-M8030 00080000*6F
$GATXT,01,01,02,EXT CORE 3.01 (107900)*3C
$GATXT,01,01,02,ROM BASE 3.01 (107888)*2A
$GATXT,01,01,02,FWVER=SPG 3.01*49
$GATXT,01,01,02,PROTVER=18.00*1E
$GATXT,01,01,02,MOD=NEO-M8N-0*68
$GATXT,01,01,02,FIS=0xC22536 (100111)*27
$GATXT,01,01,02,GPS;GLO;GAL;BDS*78
$GATXT,01,01,02,SBAS;IMES;QZSS*46
$GATXT,01,01,02,GNSS OTP=GPS;GLO*38
$GATXT,01,01,02,LLC=FFFFFFFF-FFFFFFED-FFFFFFFF-FFFFFFFF-FFFFFF69*2C
$GATXT,01,01,02,ANTSUPERV=AC SD PDoS SR*31
$GATXT,01,01,02,ANTSTATUS=OK*2A
$GATXT,01,01,02,PF=3FF*44
$GARMC,,V,,,,,,,,,,N,V*38
$GAVTG,,,,,,,,,N*21
$GAGGA,,,,,,0,00,99.99,,,,,,*59
$GAGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99,3*3E
$GAGSV,1,1,00,0*74
...
...
However, when I run ubxtool, only a few messages are shown, after that it exits.
$ sudo ./ubxtool --wait --port /dev/ttyACM0 --station 1 --stdout
Fri, 08 Nov 2019 08:32:11 +0000 swVersion: EXT CORE 3.01 (107900)
Fri, 08 Nov 2019 08:32:11 +0000 hwVersion: 00080000
Fri, 08 Nov 2019 08:32:11 +0000 Extended info: ROM BASE 3.01 (107888)
Fri, 08 Nov 2019 08:32:11 +0000 Extended info: FWVER=SPG 3.01
Fri, 08 Nov 2019 08:32:11 +0000 Extended info: PROTVER=18.00
Fri, 08 Nov 2019 08:32:11 +0000 Extended info: MOD=NEO-M8N-0
Fri, 08 Nov 2019 08:32:11 +0000 Extended info: FIS=0xC22536 (100111)
Fri, 08 Nov 2019 08:32:11 +0000 Extended info: GPS;GLO;GAL;BDS
Fri, 08 Nov 2019 08:32:11 +0000 Extended info: SBAS;IMES;QZSS
BeiDou geostationary satellites emit D2 messages, which we don't parse yet. It also looks difficult, an initial attempt failed. Documentation may not match what we receive, or we just don't understand what we are doing.
./ubxtool --wait --port /dev/ttyACM0 --station 1 --gps --stdout | ./navparse 127.0.0.1:10000 html null
leads to following output:
Unknown type 10
Unknown type 10
Unknown type 10
Unknown type 10
Unknown type 10
Building ubxtool
on Ubuntu 20.04 gives some warnings about out-of-bound references:
sarnold@millbarge:~/trees/galmon$ git pull --recurse
Fetching submodule ext/powerblog
Fetching submodule ext/powerblog/ext/simplesocket
Fetching submodule ext/sgp4
Already up to date.
sarnold@millbarge:~/trees/galmon$ git log -1
commit 3b638de1ee11e985537924e4b3b3dc5c28ab274d (HEAD -> master, origin/master, origin/HEAD)
Author: bert hubert <[email protected]>
Date: Fri Jul 10 21:06:54 2020 +0200
adjust for NEO-8MP not doing *anything* with Galileo
sarnold@millbarge:~/trees/galmon$ make clean
rm -f *~ *.o *.d ext/*/*.o ext/*/*.d navparse ubxtool navnexus navcat navrecv navdump testrunner navdisplay tlecatch reporter sp3feed galmonmon rinreport rtcmtool navmon.pb.h navmon.pb.cc ext/sgp4/libsgp4/Observer.o ext/sgp4/libsgp4/DateTime.o ext/sgp4/libsgp4/Tle.o ext/sgp4/libsgp4/Globals.o ext/sgp4/libsgp4/TimeSpan.o ext/sgp4/libsgp4/DecayedException.o ext/sgp4/libsgp4/CoordTopocentric.o ext/sgp4/libsgp4/SolarPosition.o ext/sgp4/libsgp4/Vector.o ext/sgp4/libsgp4/Util.o ext/sgp4/libsgp4/SGP4.o ext/sgp4/libsgp4/CoordGeodetic.o ext/sgp4/libsgp4/Eci.o ext/sgp4/libsgp4/TleException.o ext/sgp4/libsgp4/OrbitalElements.o ext/sgp4/libsgp4/SatelliteException.o ext/powerblog/h2o-pp.o ext/powerblog/ext/simplesocket/swrappers.o ext/powerblog/ext/simplesocket/sclasses.o ext/powerblog/ext/simplesocket/comboaddress.o
rm -f ext/fmt-6.1.2/src/format.[do] ext/sgp4/libsgp4/*.d ext/powerblog/ext/simplesocket/*.d
sarnold@millbarge:~/trees/galmon$ make -j8 ubxtool
protoc --cpp_out=./ navmon.proto
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o ubxtool.o ubxtool.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o ubx.o ubx.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o bits.o bits.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o ext/fmt-6.1.2/src/format.o ext/fmt-6.1.2/src/format.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o galileo.o galileo.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o gps.o gps.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o beidou.o beidou.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o navmon.o navmon.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o ephemeris.o ephemeris.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o ext/powerblog/ext/simplesocket/swrappers.o ext/powerblog/ext/simplesocket/swrappers.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o ext/powerblog/ext/simplesocket/sclasses.o ext/powerblog/ext/simplesocket/sclasses.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o ext/powerblog/ext/simplesocket/comboaddress.o ext/powerblog/ext/simplesocket/comboaddress.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o osen.o osen.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o githash.o githash.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o nmmsender.o nmmsender.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o zstdwrap.o zstdwrap.cc
g++ -std=gnu++17 -Wall -O3 -ggdb -MMD -MP -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-6.1.2/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o navmon.pb.o navmon.pb.cc
ext/powerblog/ext/simplesocket/swrappers.cc: In function ‘std::vector<ComboAddress> resolveName(const string&, bool, bool)’:
ext/powerblog/ext/simplesocket/swrappers.cc:242:64: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘union ComboAddress’ from an array of ‘struct sockaddr’ [-Wclass-memaccess]
242 | memcpy(&remote, address->ai_addr, address->ai_addrlen);
| ^
In file included from ext/powerblog/ext/simplesocket/swrappers.hh:3,
from ext/powerblog/ext/simplesocket/swrappers.cc:1:
ext/powerblog/ext/simplesocket/comboaddress.hh:78:7: note: ‘union ComboAddress’ declared here
78 | union ComboAddress {
| ^~~~~~~~~~~~
In file included from /usr/include/string.h:495,
from /usr/include/google/protobuf/stubs/port.h:38,
from /usr/include/google/protobuf/stubs/common.h:46,
from navmon.pb.h:9,
from navmon.pb.cc:4:
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_GPSInav::SharedCtor()’ at navmon.pb.cc:1491:11,
inlined from ‘NavMonMessage_GPSInav::NavMonMessage_GPSInav()’ at navmon.pb.cc:1471:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_GPSInav()’ at navmon.pb.cc:1467:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [37, 52] from the object at ‘_NavMonMessage_GPSInav_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_GPSInav::gnsswn_’ with type ‘unsigned int’ at offset 32 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_GalileoInav::SharedCtor()’ at navmon.pb.cc:1022:11,
inlined from ‘NavMonMessage_GalileoInav::NavMonMessage_GalileoInav()’ at navmon.pb.cc:1002:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_GalileoInav()’ at navmon.pb.cc:998:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [37, 52] from the object at ‘_NavMonMessage_GalileoInav_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_GalileoInav::gnsswn_’ with type ‘unsigned int’ at offset 32 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_GPSCnav::SharedCtor()’ at navmon.pb.cc:7651:11,
inlined from ‘NavMonMessage_GPSCnav::NavMonMessage_GPSCnav()’ at navmon.pb.cc:7631:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_GPSCnav()’ at navmon.pb.cc:7627:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [37, 52] from the object at ‘_NavMonMessage_GPSCnav_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_GPSCnav::gnsswn_’ with type ‘unsigned int’ at offset 32 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_SBASMessage::SharedCtor()’ at navmon.pb.cc:7297:11,
inlined from ‘NavMonMessage_SBASMessage::NavMonMessage_SBASMessage()’ at navmon.pb.cc:7277:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_SBASMessage()’ at navmon.pb.cc:7273:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [37, 40] from the object at ‘_NavMonMessage_SBASMessage_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_SBASMessage::gnssid_’ with type ‘unsigned int’ at offset 32 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_BeidouInavD2::SharedCtor()’ at navmon.pb.cc:2429:11,
inlined from ‘NavMonMessage_BeidouInavD2::NavMonMessage_BeidouInavD2()’ at navmon.pb.cc:2409:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_BeidouInavD2()’ at navmon.pb.cc:2405:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [37, 52] from the object at ‘_NavMonMessage_BeidouInavD2_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_BeidouInavD2::gnsswn_’ with type ‘unsigned int’ at offset 32 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_GlonassInav::SharedCtor()’ at navmon.pb.cc:2897:11,
inlined from ‘NavMonMessage_GlonassInav::NavMonMessage_GlonassInav()’ at navmon.pb.cc:2877:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_GlonassInav()’ at navmon.pb.cc:2873:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [37, 48] from the object at ‘_NavMonMessage_GlonassInav_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_GlonassInav::gnssid_’ with type ‘unsigned int’ at offset 32 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_BeidouInavD1::SharedCtor()’ at navmon.pb.cc:1960:11,
inlined from ‘NavMonMessage_BeidouInavD1::NavMonMessage_BeidouInavD1()’ at navmon.pb.cc:1940:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_BeidouInavD1()’ at navmon.pb.cc:1936:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [37, 52] from the object at ‘_NavMonMessage_BeidouInavD1_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_BeidouInavD1::gnsswn_’ with type ‘unsigned int’ at offset 32 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_ReceptionData::SharedCtor()’ at navmon.pb.cc:3324:11,
inlined from ‘NavMonMessage_ReceptionData::NavMonMessage_ReceptionData()’ at navmon.pb.cc:3309:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_ReceptionData()’ at navmon.pb.cc:3305:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [29, 61] from the object at ‘_NavMonMessage_ReceptionData_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_ReceptionData::gnssid_’ with type ‘unsigned int’ at offset 24 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_ObserverPosition::SharedCtor()’ at navmon.pb.cc:4784:11,
inlined from ‘NavMonMessage_ObserverPosition::NavMonMessage_ObserverPosition()’ at navmon.pb.cc:4769:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_ObserverPosition()’ at navmon.pb.cc:4765:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [33, 64] from the object at ‘_NavMonMessage_ObserverPosition_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_ObserverPosition::x_’ with type ‘double’ at offset 24 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_RFData::SharedCtor()’ at navmon.pb.cc:3900:11,
inlined from ‘NavMonMessage_RFData::NavMonMessage_RFData()’ at navmon.pb.cc:3885:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_RFData()’ at navmon.pb.cc:3881:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [33, 113] from the object at ‘_NavMonMessage_RFData_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_RFData::rcvtow_’ with type ‘double’ at offset 24 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_UbloxJammingStats::SharedCtor()’ at navmon.pb.cc:6913:11,
inlined from ‘NavMonMessage_UbloxJammingStats::NavMonMessage_UbloxJammingStats()’ at navmon.pb.cc:6898:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_UbloxJammingStats()’ at navmon.pb.cc:6894:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [29, 40] from the object at ‘_NavMonMessage_UbloxJammingStats_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_UbloxJammingStats::noiseperms_’ with type ‘unsigned int’ at offset 24 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_GNSSOffset::SharedCtor()’ at navmon.pb.cc:8361:11,
inlined from ‘NavMonMessage_GNSSOffset::NavMonMessage_GNSSOffset()’ at navmon.pb.cc:8346:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_GNSSOffset()’ at navmon.pb.cc:8342:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [29, 60] from the object at ‘_NavMonMessage_GNSSOffset_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_GNSSOffset::gnssid_’ with type ‘unsigned int’ at offset 24 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage::SharedCtor()’ at navmon.pb.cc:9322:11,
inlined from ‘NavMonMessage::NavMonMessage()’ at navmon.pb.cc:9227:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage()’ at navmon.pb.cc:9223:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [33, 176] from the object at ‘_NavMonMessage_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage::gi_’ with type ‘NavMonMessage_GalileoInav*’ at offset 24 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_SARResponse::SharedCtor()’ at navmon.pb.cc:5194:11,
inlined from ‘NavMonMessage_SARResponse::NavMonMessage_SARResponse()’ at navmon.pb.cc:5169:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_SARResponse()’ at navmon.pb.cc:5165:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [45, 60] from the object at ‘_NavMonMessage_SARResponse_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_SARResponse::gnssid_’ with type ‘unsigned int’ at offset 40 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘void* memset(void*, int, size_t)’,
inlined from ‘void NavMonMessage_ObserverDetails::SharedCtor()’ at navmon.pb.cc:6061:11,
inlined from ‘NavMonMessage_ObserverDetails::NavMonMessage_ObserverDetails()’ at navmon.pb.cc:6006:13,
inlined from ‘void protobuf_navmon_2eproto::InitDefaultsNavMonMessage_ObserverDetails()’ at navmon.pb.cc:6002:1:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:71:33: warning: ‘void* __builtin_memset(void*, int, long unsigned int)’ offset [97, 124] from the object at ‘_NavMonMessage_ObserverDetails_default_instance_’ is out of the bounds of referenced subobject ‘NavMonMessage_ObserverDetails::clockoffsetns_’ with type ‘double’ at offset 88 [-Warray-bounds]
71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
g++ -std=gnu++17 navmon.pb.o ubxtool.o ubx.o bits.o ext/fmt-6.1.2/src/format.o galileo.o gps.o beidou.o navmon.o ephemeris.o ext/powerblog/ext/simplesocket/swrappers.o ext/powerblog/ext/simplesocket/sclasses.o ext/powerblog/ext/simplesocket/comboaddress.o osen.o githash.o nmmsender.o zstdwrap.o -o ubxtool -L/usr/local/lib -lprotobuf -pthread -lzstd
sarnold@millbarge:~/trees/galmon$ dpkg -S /usr/include/x86_64-linux-gnu/bits/string_fortified.h
libc6-dev:amd64: /usr/include/x86_64-linux-gnu/bits/string_fortified.h
sarnold@millbarge:~/trees/galmon$ dpkg -l libc6-dev
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-===============-=============-============-=====================================================
ii libc6-dev:amd64 2.31-0ubuntu9 amd64 GNU C Library: Development Libraries and Header Files
Thanks
Every time I go to /geo/, I do the same things:
It'd be nice if the viewer remembered my preferences instead of having to click around to make the map readable (for me).
I found two small bugs in ubxtool.sh, the following patch fix them:
-DEV="/run/ubxtool"
+DIR="/run/ubxtool"
-STATION="`/usr/local/ubxtool/station`"
+STATION="`cat /usr/local/ubxtool/station`"
Hi,
I have a receiver (https://galmon.eu/observer.html?observer=74) that will occasionally hang and stop generating serial data. This typically occurs a few times a week. When it happens kernel messages like these are generated:
[Sat Jun 27 17:11:16 2020] ftdi_sio ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32
[Mon Jun 29 22:10:58 2020] ftdi_sio ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32
This is on a Raspberry Pi 4 and I don't see the same issue on my desktop, so it's probably a hardware issue.
Closing and re-opening the serial port appears to clear the problem. My current workaround is to restart the ubxtool process every hour or so (e.g. RuntimeMaxSec=3600
in the systemd service unit), but I'm wondering if it might make more sense to have a watchdog option in the ubxtool process itself that exits the main loop if a message hasn't been received in a reasonable amount of time (e.g., 5–10 minutes?).
Thanks for considering!
It would be a nice feature if ubxtool could expose access to time via a Shared Memory Driver so that NTP Chrony etc can access the GNSS derived time.
https://docs.ntpsec.org/latest/driver_shm.html
GPSD manual here has a little on how GPSD exposes access to GPS data
http://manpages.ubuntu.com/manpages/trusty/man8/gpsd.8.html#shared-memory%20and%20dbus%20interfaces
GPSD has some code here that may help
https://docs.ntpsec.org/latest/driver_shm.html
For example, currently on the published site:
https://galmon.eu/observer.html?observer=38
I can see owner, remark, uptime, mods, vendor, and other fields.
The current GIT version of the html site does not provide this information, which would be nice to have for our self-hosted versions (see: https://www.denali.net/galmon/observer.html?observer=38 for comparison)
The gpsd project has shipped a ubxtool since September 2018. A very different thing than your ubxtool.
The gpsd project is adding link in their README to this project to lessen confusion. Can galmon please add a link back to our ubxtool?
Resolution of the values should be reduced, both for served filesize efficiency, and to prevent a determined party from reverse-engineering the exact location of an observer station.
eg.
https://galmon.eu/observers.json: G20@0":{"age-s":39,"azi":249.45191412415818,"db":22,"elev":5.876863024662498,
...
I'm assuming that _
in the ΔHz means "info not available". Unfortunately, it is a bit hard to read. It'd probably be easier to read if instead of _
it was a ?
or X
or even NA
.
It could possibly look very cool if for each sat on the map, there were 3 or 4 "previous positions" drawn as well. This is a common visualization on ATC radar showing the previous radar returns to at a glance ascertain the direction of the craft.
Estimating how fast GNSS sats move based on wikipedia MEO info, drawing the previous positions at 5, 10, and 15 mins prior to "current" may work well. The older the point, the less saturated it should be.
Newer GPS L2C should also be parsed, and we don't right now. These are very different messages.
The "stale" table sometimes includes svs with a list of sources. This seems counter-intuitive - if a sv is stale, isn't it because there are no receivers?
E.g., at the time of filing this issue, E19@1 is listed as stale with 8 as a source.
The map showing 'observer ranges' is now populated enough that it's difficult to tell how many observers are looking at which parts of the sky.
So I suggest it'd be nice to have counts for how many observers can see which sky segments, so we could tell if the little bit near the southern tip of Chile is observed by zero or six observers. Perhaps also with a 'ring' plotted on the ground to see where exactly receivers could be hosted to cover low-count patches.
This may help to encourage people to host receivers for their area, if they knew they had a high chance of helping.
Thanks
Due to the fact that my module is one of the cheap ones, it loses it's configuration each reboot, I'm currently using a bash script to parse the u-center configuration file and upload everything (including baudrate change) to the m8n module.
I am wondering, is there a way to do this nicely, with galmon and its set of tools?
After reconnecting my receiver, I had this repeatedly crashing:
pi@rpi4:~/galmon $ systemctl status galmon ● galmon.service - #41 Galmon GNSS Monitor Loaded: loaded (/etc/systemd/system/galmon.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: signal) since Sun 2019-12-29 22:04:08 GMT; 4s ago Process: 3926 ExecStart=/home/pi/galmon/ubxtool -c -g -r -e --wait --port /dev/ttyACM0 --station 41 --destination 82.94.213.34 --owner NJ8Z -- Main PID: 3926 (code=killed, signal=ABRT)
So I stopped the service and ran it once on the commandline with ./ubxtool -c -g -r -e --port /dev/ttyACM0 --stdout
and it came up just fine. I ctrl-c'd it after a moment. After that I could reenable the service which has --wait on its commandline, and it too came up just fine.
Presently the ubxtool
requires the --station
command (a number between 1 and N) which identifies a unique station. Let's upgrade that to a number colon name so that the database has a station identifier. (in my case, I'd use my ham radio callsign; but maybe someone wants to use their name or city.
For example ...
$ ubxtool ... --station 5:W6LHI ...
... in my case. This would be backward compatible because if no name was provided; then it's simply ""
.
The name would only need to be sent once to the database; leaving all other messages to simple use the g_srcid
in the regular NavMonMessage
messages.
Fri, 04 Oct 2019 21:19:48 +0000 wn 2073 GPS 20@0 change in URA [200 cm] -> [400 cm] 2, lastseen 0 hours
Fri, 04 Oct 2019 21:19:48 +0000 wn 2073 GPS 20@0 change in health [0] -> [63], lastseen 0 hours
Fri, 27 Sep 2019 21:19:48 +0000 wn 2072 GPS 20@0 change in health [63] -> [0], lastseen 0 hours
Fri, 27 Sep 2019 21:29:10 +0000 BeiDou C23@0 health changed from 0 to 1, lastseen 0.0711111
Fri, 27 Sep 2019 21:33:56 +0000 BeiDou C23@0 health changed from 1 to 0, lastseen -0.00166667
Mon, 04 Mar 2013 10:18:53 +0000 BeiDou C19@0 health changed from 0 to 1, lastseen 29.2881
Fri, 27 Sep 2019 22:04:26 +0000 BeiDou C19@0 health changed from 1 to 0, lastseen -29.2881
Sat, 28 Sep 2019 03:59:48 +0000 wn 2072 GPS 28@0 change in URA [282 cm] -> [400 cm] 2, lastseen -0.00166667 hours
Tue, 05 Mar 2013 23:31:29 +0000 BeiDou C29@0 health changed from 0 to 1, lastseen 0.0930556
Sat, 28 Sep 2019 06:05:26 +0000 BeiDou C29@0 health changed from 1 to 0, lastseen -0.0947222
Next to Issue #100 it would be good to then also add PPS support, this can be done with UBX_CFG_TP5, there are some settings to put in, checking both gpsd ubxtool and gpsctl the following seem to be OK, but might need tweaking:
"dmesg | grep pps" should show a pps source is detected, and after installing pps-tools, if PPS is woorking it should show output like:
$ sudo ppstest /dev/pps0 # press Ctrl-C to cancel.. trying PPS source "/dev/pps0" found PPS source "/dev/pps0" ok, found 1 source(s), now start fetching data... source 0 - assert 1351501153.999956346, sequence: 47481 - clear 0.000000000, sequence: 0 source 0 - assert 1351501154.999954601, sequence: 47482 - clear 0.000000000, sequence: 0 source 0 - assert 1351501155.999951856, sequence: 47483 - clear 0.000000000, sequence: 0 ^C
Together with the SHM driver this will allow ubxtool to be used together with Chrony/NTPd as time source.
The above is PPS info is taken from: http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html
On this page:
https://galmon.eu/sv.html?gnssid=3&sv=36&sigid=0
Currently a0 (af0) is -6262056, but af0 in the BeiDou Ephemeris is 24 bits, scaled 2^-33.
So the largest a0 can be is: 0.00048828122089616954
Ditto for a1 (af1)
rtcm.cc:9:10: warning: destination for this 'memset' call is a pointer to dynamic class 'GalileoMessage'; vtable
pointer will be overwritten [-Wdynamic-class-memaccess]
memset(&d_gm, 0, sizeof(d_gm));
~~~~~~ ^
rtcm.cc:9:10: note: explicitly cast the pointer to silence this warning
memset(&d_gm, 0, sizeof(d_gm));
^
(void*)
struct InfluxPusher
^
./navparse.hh:26:1: note: did you mean struct here?
class InfluxPusher;
^~~~~
struct
In file included from ubxtool.cc:36:
./nmmsender.hh:40:31: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
d_thread.emplace_back(std::move(std::make_unique<std::thread>(&NMMSender::sendTCPThread, this, d.get())));
^
./nmmsender.hh:40:31: note: remove std::move call here
d_thread.emplace_back(std::move(std::make_unique<std::thread>(&NMMSender::sendTCPThread, this, d.get())));
./rinex.hh:37:10: warning: private field 'd_time' is not used [-Wunused-private-field]
time_t d_time{0};
rinreport.cc:83:10: warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]
return std::move(stat);
^
rinreport.cc:83:10: note: remove std::move call here
return std::move(stat);
^~~~~~~~~~ ~
Sorry, no time to look at this now...
"what(): accepting new connection on socket: Too many open files"
using
$ g++ --version
g++ (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
galmon build almost immediately dies with
$ make
g++ -std=gnu++17 -Wall -O3 -MMD -MP -ggdb -fno-omit-frame-pointer -Iext/CLI11 -Iext/fmt-5.2.1/include/ -Iext/powerblog/ext/simplesocket -Iext/powerblog/ext/ -I/usr/local/opt/openssl/include/ -Iext/sgp4/libsgp4/ -I/usr/local/include -c -o navparse.o navparse.cc
navparse.cc:27:20: fatal error: optional: No such file or directory
#include <optional>
^
compilation terminated.
On Raspbian (maybe all Debian) it's expected that subdirectories of /run (/var/run) are deleted on reboot by systemd. So our current instructions for establishing a systemd service - which tell us to mkdir /run/ubxtool result in a service definition that doesn't survive reboot. If we use WorkingDirectory=/run/ it survives reboot. @mahtin what do you think? Ok to change WorkingDirectory to /run/ or should we establish that directory in a supported way?
building with head 0f7cb5143d81303aa23fee107046e90b0829242b
and I get this result:
pi@adsb:~/galmon $ make
g++ -std=gnu++17 navparse.o ext/fmt-6.1.2/src/format.o ext/powerblog/h2o-pp.o ext/powerblog/ext/simplesocket/swrappers.o ext/powerblog/ext/simplesocket/sclasses.o ext/powerblog/ext/simplesocket/comboaddress.o minicurl.o ubx.o bits.o navmon.pb.o gps.o ephemeris.o beidou.o glonass.o ext/sgp4/libsgp4/Observer.o ext/sgp4/libsgp4/Vector.o ext/sgp4/libsgp4/DateTime.o ext/sgp4/libsgp4/Tle.o ext/sgp4/libsgp4/SatelliteException.o ext/sgp4/libsgp4/TimeSpan.o ext/sgp4/libsgp4/DecayedException.o ext/sgp4/libsgp4/TleException.o ext/sgp4/libsgp4/Globals.o ext/sgp4/libsgp4/CoordTopocentric.o ext/sgp4/libsgp4/SolarPosition.o ext/sgp4/libsgp4/Util.o ext/sgp4/libsgp4/SGP4.o ext/sgp4/libsgp4/CoordGeodetic.o ext/sgp4/libsgp4/Eci.o ext/sgp4/libsgp4/OrbitalElements.o tle.o navmon.o coverage.o osen.o trkmeas.o influxpush.o githash.o -o navparse -pthread -L/usr/local/lib -L/usr/local/opt/openssl/lib/ -lh2o-evloop -lssl -lcrypto -lz -lcurl -lprotobuf
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `fmt::v5::basic_printf_context<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char, fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > > >::get_arg(fmt::v5::internal::null_terminating_iterator<char>, unsigned int) [clone .isra.296]':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/core.h:863: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/core.h:863: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/core.h:863: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `char* fmt::v5::internal::format_decimal<unsigned long long, char, fmt::v5::internal::no_thousands_sep>(char*, unsigned long long, unsigned int, fmt::v5::internal::no_thousands_sep) [clone .isra.356]':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1056: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `fmt::v5::basic_printf_context<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char, fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > > >::parse_header(fmt::v5::internal::null_terminating_iterator<char>&, fmt::v5::basic_format_specs<char>&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1590: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1590: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_double<double>(double, fmt::v5::basic_format_specs<char> const&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:2954: undefined reference to `int fmt::v5::internal::char_traits<char>::format_float<double>(char*, unsigned int, char const*, int, double)'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_double<long double>(long double, fmt::v5::basic_format_specs<char> const&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:2954: undefined reference to `int fmt::v5::internal::char_traits<char>::format_float<long double>(char*, unsigned int, char const*, int, long double)'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_padded<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<int, fmt::v5::basic_format_specs<char> >::dec_writer> >(unsigned int, fmt::v5::align_spec const&, fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<int, fmt::v5::basic_format_specs<char> >::dec_writer>&&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1058: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_padded<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<unsigned int, fmt::v5::basic_format_specs<char> >::dec_writer> >(unsigned int, fmt::v5::align_spec const&, fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<unsigned int, fmt::v5::basic_format_specs<char> >::dec_writer>&&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1058: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_padded<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<long long, fmt::v5::basic_format_specs<char> >::dec_writer> >(unsigned int, fmt::v5::align_spec const&, fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<long long, fmt::v5::basic_format_specs<char> >::dec_writer>&&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1058: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_padded<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<unsigned long long, fmt::v5::basic_format_specs<char> >::dec_writer> >(unsigned int, fmt::v5::align_spec const&, fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<unsigned long long, fmt::v5::basic_format_specs<char> >::dec_writer>&&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1058: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_padded<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<char, fmt::v5::basic_format_specs<char> >::dec_writer> >(unsigned int, fmt::v5::align_spec const&, fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::padded_int_writer<fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::int_writer<char, fmt::v5::basic_format_specs<char> >::dec_writer>&&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1058: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o:/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1038: more undefined references to `fmt::v5::internal::basic_data<void>::DIGITS' follow
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `void fmt::v5::basic_writer<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::write_int<unsigned int, fmt::v5::basic_format_specs<char> >(unsigned int, fmt::v5::basic_format_specs<char> const&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:2614: undefined reference to `char fmt::v5::internal::thousands_sep<char>(fmt::v5::locale_provider*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1220: undefined reference to `fmt::v5::internal::basic_data<void>::ZERO_OR_POWERS_OF_10_32'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `std::enable_if<std::is_integral<int>::value, std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> > >::type fmt::v5::internal::arg_formatter_base<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >::operator()<int>(int)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:2614: undefined reference to `char fmt::v5::internal::thousands_sep<char>(fmt::v5::locale_provider*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1058: undefined reference to `fmt::v5::internal::basic_data<void>::ZERO_OR_POWERS_OF_10_32'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1058: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `fmt::v5::internal::result_of<fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > > (int)>::type fmt::v5::visit<fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >, fmt::v5::basic_printf_context<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char, fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > > > >(fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > >&&, fmt::v5::basic_format_arg<fmt::v5::basic_printf_context<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char, fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > > > > const&)':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1332: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1320: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1326: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:2614: undefined reference to `char fmt::v5::internal::thousands_sep<char>(fmt::v5::locale_provider*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:2614: undefined reference to `char fmt::v5::internal::thousands_sep<char>(fmt::v5::locale_provider*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1548: undefined reference to `fmt::v5::internal::basic_data<void>::ZERO_OR_POWERS_OF_10_32'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1548: undefined reference to `fmt::v5::internal::basic_data<void>::DIGITS'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1548: undefined reference to `fmt::v5::internal::basic_data<void>::ZERO_OR_POWERS_OF_10_64'
/usr/bin/ld: ext/powerblog/ext/simplesocket/swrappers.o: in function `fmt::v5::basic_printf_context<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char, fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > > >::format()':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/format.h:1590: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: ext/powerblog/ext/simplesocket/sclasses.o: in function `fmt::v5::basic_printf_context<std::back_insert_iterator<fmt::v5::internal::basic_buffer<char> >, char, fmt::v5::printf_arg_formatter<fmt::v5::back_insert_range<fmt::v5::internal::basic_buffer<char> > > >::get_arg(fmt::v5::internal::null_terminating_iterator<char>, unsigned int) [clone .isra.236]':
/home/pi/galmon/ext/fmt-5.2.1/include/fmt/core.h:863: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/core.h:863: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
/usr/bin/ld: /home/pi/galmon/ext/fmt-5.2.1/include/fmt/core.h:863: undefined reference to `fmt::v5::internal::error_handler::on_error(char const*)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:40: navparse] Error 1
For example, stations 31 and 32 are at the same location but the new /geo/ hover-over doesn't realize that and therefore one of the stations (32) covers over the other (31) making it impossible to hover over station 31.
Possible solution: combine closely spaced stations into a single "hover-over region", and list multiple lines in the tool-tip identifying which sat is seen by with station in the "region".
Currently the influxdb address is hardcoded to 127.0.0.1 in the code.
Request that the address of a remote influxdb instance can be entered on the command line.
I did recompile my copy with a remote address and it works correctly, but this approach should only be regarded as a work around.
Hi,
the gpsd project is using the name 'ubxtool' since 2018. This will stop people from packaging galmon for Debian/Ubuntu - please rename your ubxtool.
Thanks,
Bernd
There is a perfectly fine Galileo parser in galileo.cc/.hh, but navparse.cc contains another galileo parser for hysterical raisins. These should be unified.
Raspberry Pi 3+. Buster. Ublox8.
`pi@raspberrypi:~/galmon $ ./ubxtool --wait --port /dev/ttyACM0 --station 1 --stdout | ./ubxparse 10000 html null
-bash: ./ubxparse: No such file or directory
Sending version query
swVersion: ROM CORE 3.01 (107888)
hwVersion: 00080000
Extended info: FWVER=SPG 3.01
Extended info: PROTVER=18.00
Extended info: GPS;GLO;GAL;BDS
Extended info: SBAS;IMES;QZSS
Sending GNSS query
GNSS status, got 7 rows:
GNSSID 0 enabled 1 minTrk 8 maxTrk 16 1 0 1 1
GNSSID 1 enabled 1 minTrk 1 maxTrk 3 1 0 1 1
GNSSID 2 enabled 0 minTrk 4 maxTrk 8 0 0 1 1
GNSSID 3 enabled 0 minTrk 8 maxTrk 16 0 0 1 1
GNSSID 4 enabled 0 minTrk 0 maxTrk 8 0 0 1 3
GNSSID 5 enabled 1 minTrk 0 maxTrk 3 1 0 1 5
GNSSID 6 enabled 1 minTrk 8 maxTrk 14 1 0 1 1
Got an ack for 6 62 while waiting for 6 62
Got ACK for our poll of GNSS settings
Sending GNSS setting, GPS: 0, Galileo: 0, BeiDou: 0, GLONASS: 0, SBAS: 0
Got an nack for 6 62 while waiting for 6 62
Got nack on GNSS setting
pi@raspberrypi:~/galmon $`
At this point, I visit my pi IP address:10000 and can not connect.
Any assistance would be gratefully received.
The world geometry sometimes carves holes into polygons, which shouldn't be filled, e.g. by adding .attr("fill-rule", "evenodd")
in the right place(s).
I didn't find an actual "visual" bug in the display, but for example "South Africa" has a hole, but it isn't water - it is another country "Lesotho" (which is why it looks the same).
When the system time is changed during the running of ubxtool, this causes the application uptime to be incorrectly calculated.
This happens often for SBC-based mobile observer stations, that in addition to being regularly powered on after hours or more switched off, may also take a while to establish internet connections and update their system time (through ntp/chrony). This jump forwards is then shown as an addition to the application uptime.
Reported by ptudor, also observed by me (craag).
Much like the main page, allow selection of which set of GNSS constellations should be displayed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.