Commit Graph

10 Commits (master)

Author SHA1 Message Date
Mooneer Salem 38b20a9e56
Increase sleep time before killing recording to resolve macOS test failures. (#917)
* Increase sleep time before killing recording to resolve macOS test failures.

* Add PR #917 to changelog.
2025-06-05 12:58:05 -07:00
Mooneer Salem e9ec9347d9
Make sure RTSan-related code isn't added if not installed. (#900)
* Make sure RTSan-related code isn't added if not installed.

* Enable RTSan checks in GH Actions.

* Fix syntax error in GH action.

* Fix GCC compile failures.

* Use different GH workflow to get correct Clang installed.

* Split RTSan test into separate build and test steps

* Move LLVM installation to beginning in case there are side effects.

* Prevent dynamic resampling in AudioPipeline when playing back files.

* Mixed up sample calculation, causing tests to fail.

* Additional changes to see if it still hangs.

* Update cmake-macos.yml

* Do completion check after queuing to output FIFO.

* Fix buffer overflow.

* Some additional changes based on local testing.

* GH tests weren't actually being run through the resampler.

* Remove ExclusiveAccessStep files as they're not being used.

* Remove some logging that shouldn't be in RT context.

* Add reset() to IPipelineStep to avoid repeated deallocations and reallocations of the TX pipeline.

* Fix segfault from previous changes.

* Remove RADE specific logging in RT context and suppress RTSan for RADE EOO handling.

* Disable RTSan for RADE text handling.

* Try disabling real-time for macOS.

* Force Windows 2022.

* Revert "Try disabling real-time for macOS."

This reverts commit c8ee871406.

* Experiment: use O(1) heap allocator for Codec2.

* Fix patch commands.

* thread_local is only in C++11 and above.

* Force codec2 folder to be removed every call.

* Update codec2 patch.

* Fix Windows compiler error.

* Oops, should be _aligned_malloc.

* Integrate codec2 into source tree so we don't need to deal with patch.

* Update Codec2 README.

* mbest needs to use o1heap too.

* Remove rtsan disable from FreeDV TX/RX steps.

* Bring back AudioPipeline change previously removed by master merge.

* Result resampler needs to be initialized on construction.

* Create resampler only if input and output rates don't match.

* Increase Codec2 RT heap size.

* Fix Windows failures.

* Ensure separate threads spawned from PipelineStep are also checked by RTSan.

* Support RTSan builds on macOS if user has appropriate LLVM.

* Remove no longer needed patch.

* Remove unneeded resettingThread property.

* Fix issue discovered during testing.

* Test: match Linux and macOS requested latency to Windows.

* Add PR #900 to changelog.
2025-06-05 08:17:24 -07:00
Mooneer Salem 150b2cde7d
Improve macOS test reliability (#904)
* Return to 20ms block sizes on macOS to improve test reliability.

* Use Windows 2022 in test environment.

Don't want to be fighting Windows problems too.

* Don't want to be fighting gfortran either.

* Try caching Homebrew package install to decrease compile/test time for macOS.

* See if we can make RADE reporting a bit more reliable in the GH environment.
2025-05-31 19:00:45 -07:00
Mooneer Salem 30c9e5b9c6
Remove 800XA, 700C, 2020 and 2020B. (#889)
* Remove 800XA, 700C, 2020 and 2020B from UI,

* Remove additional 700C references in UI.

* Remove 2020/AVX detection logic from codebase.

* Remove LPCNet from build scripts.

* Add PR #889 to changelog.

* Forgot to remove LPCNet from Windows installer generation.

* Generate Release build for GH workflows.

* Disable PSK Reporter reporting during test execution as invalid callsigns are used.

* Build type was being overwritten.

* Missed mutex removal.

* Temporarily use Instruments to trace macOS CI execution.

* Minor update.

* Use 2 minute window in xctrace to actually capture wanted events.

* Disable xctrace execution but keep in tests just in case.

* Hide main window during tests to prevent GUI from interfering.

* Experiment: set infifo2 max length to 30 seconds

* Oops, forgot to remove division from previous commit.

* Deallocation of PulseAudio stream should occur while mainloop is locked.

* Revert "Hide main window during tests to prevent GUI from interfering."

This reverts commit 69689bb927.

* Based on online code snippets nullptr for neg is fine.

* Clear PYTHONHOME if set on the user's system (Windows/macOS only).

* Bring back locking in TxRxThread just in case.

* Remove unneeded backslash.

* Revert "Bring back locking in TxRxThread just in case."

This reverts commit fc6a9f8797.

* Manually back out the changes instead of using git checkout.

* Use shared_ptr for LinkStep.

* Try removing the TX mode change mutex again.

* Try moving actual codec activity out of RT context.

* Fix compiler error.

* Fix issue preventing legacy modes from transmitting.

* Another attempt at preventing RX dropouts.

* Try putting mode TX into separate threads again.

* Only limit output samples if input samples were provided.

* Put codec RX back into RT context.

* Put TX on RT context.

* Remove unused code.

* Deallocation should occur only in the destructor.

* Fix Windows spectrum plot formatting issues.

* Prevent buffer overflow during TX/RX processing.

* Bring FRAME_DURATION back down to 10ms.

* We want to feed samples into the RADE/FreeDV TX/RX FIFOs regardless of whether there's room in the output.

* ParallelStep should only feed FRAME_DURATION ms worth of samples at a time.

* Sleep fallback should track FRAME_DURATION.

* Don't execute the parallel steps if there isn't enough room in the output FIFO.

* We really can only inject a portion of EOO samples at a time.

* Queue EOO as a single unit to ensure it gets transmitted as a unit.

* Allow ParallelStep to provide up to 4x the number of input samples as output.

* Back to processing 20ms frames.

* Run GH Linux tests using asan enabled.

* Suppress Python related memory leaks and Hamlib related invalid memory accesses.

* Forgot suppressions= in test execution.

* Add more leak suppressions based on GH output.

* Resolve memory leaks.

* Fix broken RadeTextTest.

* Additional suppressions from GH.

* Go back to processing TxNumSpeechSamples every TX cycle.

* Revert "Go back to processing TxNumSpeechSamples every TX cycle."

This reverts commit abe816d00b.

* Fix 1600 mode dropouts.

* Make TX single-threaded again.

* Revert back to last working pipeline logic (for fullduplex_* anyway).

* Revert most EOO behavior.

* Run AddressSanitizer tests separately as they interfere with real time audio.

* Need to start Xvfb etc. before asan tests.

* Only a subset of tests need to run with asan enabled.

* Fix issue causing PTT input not to work.

* Maybe we don't need to restart servers after all.

* Try using rtkit to ask for high priority instead of RT.

* Clear FIFOs a different way.

* Windows: determine minimum number of audio channels supported.
2025-05-26 12:29:47 -07:00
Mooneer Salem 7cdb9e8a7d
Improve EOO TX/RX reliability (#855)
* Create FIFOs with correct sizes to reduce EOO time.

* Try using configured fifo size for all FIFOs.

* Use correct variable names when definining FIFO sizes.

* Update wxWidgets to 3.2.7 to see if that fixes the build failure.

* Use Ubuntu 24.04 for Windows build to match Linux.

* Patch libsamplerate to avoid GH action failure.

* Need to remove 3.1 from samplerate-cmake.patch

* Fix issue causing cmake to hang if being rerun.

* Temporarily use wxWidgets master as latest Xcode can't build 3.2.7.

* Add support for rig control during RADE EOO ctests.

* Try adding a bit of time to see if it'll decode.

* Fix GH action failure.

* Fix Windows build failure.

* Use same delay code as other existing similar logic.

* Add 20ms delay in mock rigctld to better match behavior with actual hardware.

* Fix Windows build issue for real.

* Fix samplerate patch issue.

* Include wxWidgets manifest code since 3.3 will soon require it.

* Use 3.2 branch as we can build on macOS now in that branch.

* Add IAudioDevice function to allow retrieval of device latency.

* Try shrinking the number of samples FreeDVInterface returns for RADE.

* Add missed get() call in PortAudio logic.

* We really shouldn't need to add txIn latency.

* We need to see the logs from when TX happens during ctest.

* Explicitly disable power savings for audio (macOS).

* Allow partial reads from TX output FIFO.

* First pass at calculating latency for WASAPI.

* Try IO frame size of 1024 to improve pass rate of GH Actions.

* Initial implementation of RADE reporting test on Windows.

* Remove unneeded flag from previously added script.

* Fix various issues with PS script.

* Revert "Try IO frame size of 1024 to improve pass rate of GH Actions."

This reverts commit 1161d9505d.

* Use FDV output, not mock rigctl output, for comparison.

* Use GetStreamLatency() instead.

* Add logging to help determine why WASAPI latency is incorrect.

* Need GetDevicePeriod as well for fully accurate latency measurements.

* Buffer size is the minimum bound on latency. Or at least it seems like it would be, anyway.

* Guarantee that we have universal macOS binary even if tests fail.

* Also take into account PTT response time (i.e. for SDRs).

* Only need to add half of the rig response time for good results.

* Forgot implementation of getRigResponseTimeMicroseconds() for OmniRig.

* Prevent negative zero SNRs from appearing in GUI.

* Try smallest buffer size possible for macOS audio.

* Fix macOS compiler error.

* (Windows) Use event based triggering to provide audio to/from FreeDV.

* Divide by number of channels to get actual latency on macOS.

* Increase minimum frame size to 128 on macOS.

* Oops, types need to be the same.

* Fix deadlock in Windows audio from previous commits.

* Try 256 buffer size on macOS.

* Use minimum of 40ms latency on macOS and Windows.

* No need for the samplerate patch anymore.

* Fix comments.
2025-04-11 19:33:33 -07:00
Mooneer Salem 7575c630b8
Fix dropouts related to virtual audio cables. (#840)
* Extend RADEv1 unit test time to try to force failures.

* txrx test wasn't actually respecting -txtime.

* Increase test length to 10min.

* Increase timeout.

* Temporarily disable macOS and Linux workflows.

* Run RADE test 10 times.

* Tweak to hopefully cause Windows test to actually fail.

* Ensure that all PortAudio calls are executed from the same thread.

* Use exclusive mode for radio devices for lower latency (at least on Windows).

* Reduce TX/RX thread delay to 10ms.

* Increase GH action timeout.

* Oops, need to tell PortAudio to actually set thread priority.

* Suggest low latency to PortAudio.

* Revert 10ms max wait.

* Try forcing shared mode again.

* Revert "Try forcing shared mode again."

This reverts commit cd025e9a8e.

* Revert "Revert 10ms max wait."

This reverts commit 0227ce5f0c.

* Reenable macOS/Linux builds.

* Run RADE tests 10x on Linux and macOS.

* Revert back to 60s tests on macOS/Linux.

* Use sh -c to run test.

* Try defining FPB as 0.

* Split out repeated RADE test into a separate ctest.

* Disable GH action timeout for Windows tests.

* Fix CMakeLists.txt error.

* Try increasing the timeout back to 20ms again.

* Back to 10ms.

* macOS: minimize CPU usage inside PortAudio.

* Use higher quality macOS settings.

* Use Intel macOS runner as it has more cores and RAM.

* Add debug output so we can adapt GH action for Intel.

* Fix gfortran path based on debug output.

* Fix permissions database issue.

* Disable exclusive mode due to invalid device errors.

* Disable stress tests in GitHub environment by default.

* Restructure TX out code to help the compiler optimize for the common case.

* Forgot to disable the repeated test.

* Use VB-Cable for radio device on macOS due to improved reliability.

* Fix side issue reported in original issue surrouding default mode selection.

* Need to restrict number of runs to 1 for RADE on Windows.

* Remove unnecessary API for setting exclusive mode.

* Wrap sync flag in std::atomic just in case the GH failures are actually threading related.

* Add PR #840 to changelog.
2025-03-06 00:40:05 -08:00
Mooneer Salem 8ca2d1ebb7
Experimental code changes to improve reliability of EOO TX. (#800)
* Update ctests to more reliably detect failure to transmit EOO.

* Wait for full EOO to be injected into the output FIFO before continuing with TX->RX switchover.

* PulseAudio: force immediate start to playback.

* Force lower latency in ctest loopback devices.

* Add 20ms of silence to end of EOO as part of further investigation.

* Add a bit extra silence to the end. This causes a 10/10 ctest pass rate for RADE text.

* Code cleanup.
2025-01-11 09:04:10 -08:00
Mooneer Salem 93770acdde
Add support for sending callsigns using RADE (#783)
* Prevent EOO from being repeatedly sent during TX stop.

* Make sure we don't accidentally overflow the output FIFO when transmitting EOO.

* Add additional logging to verify EOO behavior.

* Fix issue preventing EOO from being sent on voice keyer completion.

* Scale EOO the same as the primary waveform.

* Remove #ifdef code per PR comment.

* Use main branch for RADE.

* Add initial support for RADE callsign handling.

* Add additional logging and try different way to calculate amps.

* More debugging. We should also make sure all of EOO is initialized to 'zero'.

* Testing and other changes:

1. Add RadeTextTest to rule out any issues with freedv-gui.
2. Calculate RMS magnitude across all EOO bits, not just the ones used by RADE text.

* Fix test so it actually runs on Linux.

* Disable temporary fprintf of symbols.

* GH environment gave different BER, so let's try positive ROT45.

* set_eoo_bits should be receiving OFDM symbols.

* Don't fault if we don't have a RX callback.

* Fix issue preventing ctest from working in GH environment.

* Reenable interleaving.

* Initial code cleanup.

* Reformat code to make it easier to read.

* Inject noise into the TX sample in the ctest.

* Add initial test scripts for verifying RADE reporting.

* Add some sleeps since the UT framework can issue GUI events faster than the audio can escape FreeDV.

* Add ctest for test_rade_reporting.sh.

* Add RADE reporting noise test.

* Use codec2 ch tool to generate noise.

* Add raw/coded BER debugging output for tests.

* Fix formula used for BER.

* Update ctest to use mpp instead of AWGN, similar to RADE repo.

* Bring back AWGN test.

* Add Octave to build environment.

* Update cmake-macos.yml

* Fix buffer overrun from previous changes.

* Accidentally included previous change.

* Ensure we have defaults for txattempts and txtime.

* Coded BER should use output of LDPC decode.

* Install octave-signal in macOS CI environment.

* Need to pass -forge in to install signal properly.

* Need octave-control too.

* Need gcc to build control/signal.

* Some additional stuff is needed to get gfortran working.

* Need to use gcc 14 instead.

* Add debugging.

* Fix typo.

* Homebrew uses /opt/homebrew.

* Clarify logging as we also report to FreeDV Reporter.

* Forgot to update ctest acceptance criteria due to logging change.

* Add logic to output TX/RX floats to files.

* rade_text should handle stuffing of unused EOO bits, not upstream code.

* Test framework: remove hardcoded 5s delay after startup request.

* Calculate raw BER across entire EOO, not just the used portion.

* Code cleanup and EOO calculation fixes.

* FreeDV Reporter: only highlight for 2 seconds if there's no RX callsign.

* Switch RADE branch to main as EOO changes have now been merged.
2024-12-27 15:08:24 -08:00
Mooneer Salem e86bc18213
Rename RADE to RADEV1. (#788)
* Rename RADE to RADEV1.

* Fix GH action failures.
2024-12-15 01:41:54 -08:00
Mooneer Salem 0d40130f2e
Add tests to verify lack of sync loss in RX (#761)
* Add logic for automatically running RX/TX tests.

* Add GH action to load loopback audio driver.

* Add ctest configuration file.

* Try loading modules after installing packages.

* Add additional required packages.

* Add automated test script.

* Temporarily disable GH action changes.

* Have RX take 60 seconds as well.

* Ubuntu upgrade broke /bin/sh.

* Fix issue preventing no zero message from printing.

* Print sync status once per second and validate no resyncs.

* Fix spelling error.

* Switch to RADE main.

* Another attempt at enabling aloop in the GH action.

* Use _ instead of - for module name.

* Use pacmd to create virtual sound devices instead.

* Check sync state every 100ms instead of every 1s.

* Fix issue preventing sync changes from making it to the log.

* Add full duplex test.

* Add full duplex tests to CMakeLists.

* Generate sine wave for TX.

* Update GH action to allow new ctests to run.

* Add debugging for UT.

* pipewire-pulse is needed to actually use PipeWire.

* Install suggested packages to get additional required commands.

* Can't use --install-suggests, so explicitly mention packages.

* Enable pipewire service.

* Fix call to helper Python script.

* Show status of pipewire prior to running tests.

* Remove status display from GH action.

* Use module-loopback to simulate TX plugged into RX.

* Try explicitly starting pipewire.

* Use strict 20ms cadence for TX/RX thread instead of relying on the audio subsystem.

* Need to install wireplumber as well.

* Update regular expression in ctest as sync change message isn't printed unless there's a problem.

* Add RADE to ctests.

* RADE ctest pass wasn't actually a pass.

* Need to explicitly check for LINUX for PulseAudio based ctests.

* Reenable PortAudio build.

* Invert test criteria.

* Show pipewire status just before thye test run.

* List sink info prior to each test.

* Make sure virtual devices aren't suspended.

* Need to have the suspension disable code in another file.

* Actually, installing pulseaudio isn't a good idea.

* Need a window manager for things to refresh properly.

* Display wireplumber info after FDV start.

* Add additional sleep to guarantee that FreeDV is listening when wireplumber status is printed.

* Add pw-top for additional info.

* dbus needs to be running for pipewire to work.

* Need to wait a bit for Xvfb to become available.

* Get additional pipewire logs prior to UT run.

* Install/run rtkit too.

* Attempt to get pipewire logs after test execution.

* Looks like we still need to start pipewire manually.

* Further increase pipewire debugging.

* Too much debugging output before.

* Upgrade packages first before installing new ones.

* We weren't actually running 24.04 on GH.

* Adjust packages due to using 24.04.

* Suppress spellcheck issue.

* Disable pipewire debugging.

* Test changes to PulseAudioDevice to improve dropouts.

* Update tests to reflect 1 resync per 120s proposed threshold.

* Disable additional debugging output.

* Allow override of test audio devices from the command line.

* Enable ctests on macOS.

* getSync() isn't thread safe, causing false UT failures.

* Install virtual audio devices in CI environment for macOS.

* Use script to build drivers instead.

* Oops, forgot to remove some code first.

* Adjust permissions of script.

* Make tests work on Linux again with loopback devices.

* Attempt change to make virtual audio devices actually build.

* Try building on x86 macOS.

* Fix quote escape issues.

* More quote escape issues.

* Forgot missed folder change.

* Enable mirrored virtual audio devices.

* Fix incorrect device names in ctest execution.

* Need to append '2ch' to the other device names too.

* Clear sync when transmitting.

* Grant microphone access to FreeDV.

* Need to back out one of the changes due to voice keyer problems.

* Attempt to fix CI failures.

* Take screenshot of macOS CI environment for debugging.

* Let's try running the script separately to get a screenshot.

* Screenshot was in the wrong place.

* Need to grant access to provisioner for microphone.

* Alternate way of granting permissions.

* Oops, remove call to tccutil.

* Per PLT meeting, we shouldn't drop sync at all.

* Shorten test time to 60s.

* More tweaks to make sure that the devices are correct on Linux.

* Disable screen capture.

* Additional fixes to resolve script problems on macOS.

* I don't think previous PulseAudio changes made anything better.

* Improve dropouts when using PulseAudio/pipewire.

* Revert "Improve dropouts when using PulseAudio/pipewire."

This reverts commit f16c27f4d3.

* Have stream write callback get audio data from higher level code.

* Add PowerShell script for Windows testing.

* Move ctest files into a separate location for organization purposes.

* Add parameters for PowerShell test script.

* Add help text for the script.

* Update conf file path due to previous commits.

* Fix syntax errors in script.

* Experiment: Test Windows installer on GH action.

* Try actually running full duplex test inside Windows.

* Add 5 seconds to allow Xvfb to fully come up.

* Update other actions to use latest checkout.

* Need VS command prompt.

* Add additional debugging.

* Maybe we need to throw an exception to make the GH action fail.

* List devices another way.

* Add yet more debugging.

* Fix audio devices.

* Try with 700D to at least make sure we're on the right track.

* Fix GH action.

* Fix syntax errors.

* Try installing VAC instead as FreeDV is crashing with Scream.

* Fix syntax error.

* Try different hardware ID.

* Ignore error code that actually means success.

* Oops, fix syntax error.

* Try earlier version of VAC.

* Fix archive commands.

* Fix path.

* Probably need to start AudioEndpointBuilder too.

* Stop services first.

* Print out any errors that might be getting thrown.

* Revert "Print out any errors that might be getting thrown."

This reverts commit 15e3908c80.

* Disable test GH action for Windows and investigate failure later.

* Reenable Windows testing with new way of debugging.

* Add logging based on clues from Windows event log.

* Revert "Add logging based on clues from Windows event log."

This reverts commit de4f11362e.

* Use procdump to get a crash dump.

* Full dump seems to take a while.

* Run procdump in the background.

* Log audio errors.

* Print device name in error message.

* Make sure message box doesn't display.

* Enable additional PortAudio debugging.

* Add yet more logging.

* Add additional Registry key to ensure FreeDV has microphone permissions.

* Need to add Registry key.

* Add more keys to try to force microphone permission.

* Clean up debugging, add tests for RADE/700E/1600.

* More cleanup.
2024-11-23 08:08:40 -08:00