Direwolf measures a per-frame signal metric — audio level rec(mark/space)
plus the retry/FEC decode level — but only emits it to stdout and the
APRS-only CSV log, never over the AGWPE monitor API. This adds an opt-in,
backwards-compatible way for an AGWPE client to receive it in-band.
A client enables the feature with a new 'q' command; the server replies
with a 'q' frame carrying "ExtSig=1". For clients that opted in, the
per-frame metrics are packed into the four otherwise-zero user_reserved
header bytes of 'U'/'S'/'I' monitor frames:
user_reserved[0] = rec (0..255)
user_reserved[1] = mark (0..255; 0xFF = N/A for non-AFSK)
user_reserved[2] = space (0..255; 0xFF = N/A)
user_reserved[3] = retries (0 = clean copy)
Backwards compatibility is structural: the bytes are written only in the
copy sent to a client that sent 'q', after the header is zeroed, so any
client that does not opt in — every stock AGWPE client — receives
byte-identical frames. A stock Direwolf ignores the unknown 'q' command,
so a client requesting the extension against stock never sees the ACK and
leaves the feature off.
alevel and the retry count are threaded from app_process_rec_packet
through server_send_rec_packet into server_send_monitored. Own
transmitted ('T') frames and synthetic packets (AIS objects, APRStt) pass
a rec = -1 sentinel, which suppresses the reserved-byte write.
to create ZIP package run
cpack
to add new generator modify CPACK_GENERATOR variable.
NOTE: pay attention on CPU flags optimization when you redistribuite
the package (segmentation fault)
this step unify the builing system for all platforms (windows, linux,
osx and *BSD)
* Requirements:
- gcc/clang (C/C++ compiler) (in debian build-essential)
- cmake (in debian cmake)
- git if you build from source (in debian git)
- posix threads
** Requirements on *BSD/macOS:
- portaudio
** Optional Requirements:
- gpsd (in debian libgps-dev)
- libhamlib (in debian libhamlib-dev)
** Optional Requirements in Linux
- udev (in debian libudev-dev)
- alsa (in debian libasound2-dev)
* Main changes:
- version is now set only on CMakeLists.txt and automatically used
on the code
- cpu flags are auto-discovered in the default build and it works
on gcc/clang/msvc on x86/x86_64/arm; you can force cpu flags with
-DFORCE_SSE=1 for example (see CMakeLists.txt on root)
- use a more "complex" tag on generic.conf to facilitate parsing
by cmake (not more platform dependent). Now it is %C% or %R% for
example
- target `tocalls-symbols` is now called `data-update`
- created debian/ directory to contains files to use debuild
* Example to build:
mkdir build && cd build
cmake ..
make
make install
make install-conf
then you have the binary files on src/ and in the system directory
* CMake options (see the head of CMakeLists.txt)
- FORCE_SSE force sse instruction
- FORCE_SSSE3 force ssse3 instruction
- FORCE_SSE41 force ssse4.1 instruction
- OPTIONAL_TEST compile optional test (might be broken)
- BUILD_TESTING enable tests (ctest framework)
- CMAKE_INSTALL_PREFIX if you want to change your install path
prefix
for example:
cmake .. -DOPTIONAL_TEST=ON