This TODO file lists ideas and features for future developments. They are
more or less ordered according to their benefit, but that is subjective
to some degree.

Unless written, no activity has been started on the topics.

TODOs for ongoing SDR output refactoring
----------------------------------------
Currently, all the frontend tuning and timestamping settings are UHD-specific.
To make it possible to run with synchronous=1 using Soapy, refactoring the
output to share the parts that are common.

This would go towards SFN support with LimeSDR devices, under the condition
that the LimeSDR gets support for a HW timestamp that can be set from a PPS
signal. Discussion ongoing here
https://discourse.myriadrf.org/t/synchronize-two-limesdr/1714

DPD will be possible too.


Test sleep_through_frame implementation.

Clean up and separate GPS and refclk checks.
 * *done* handle UHD GPSDO and time
 * *done* handle SoapySDR time
 * Add refclk stuff and timestamps to Soapy.
 * Ensure muting is set properly at startup.
 * Ensure synchronous is taken in account.
 * Verify resync after underflow and muting
 * Add GPSDO status to RC and munin.

*done* Add antenna selection to config.

Test RC entries.

*done* Portability: replace clock_gettime with std::chrono

*done* Make an abstraction for the DPD feedback server, use it for Soapy and UHD.

*optional* Move staticdelay into a new process block

Double-check all #includes

Move other non SDR outputs to the output folder.

Tests, both with B200 and LimeSDR:
- No timestamps
- with timestamps
- LO offset
- muting through RC
- proper muting in absence of timestamps
- GPS lock loss behaviour
- All RC commands
- Underrun recovery
- Proper teardown
- DPD server

Smaller things
--------------

Remove GuardIntervalInserter implementation for window==0, as it was shown both are equivalent.


Finalise EDI input
------------------
The EDI input, based on work started in http://git.mpb.li/git/odr-edilib/
is not complete:

 * Add option to define max fill of input udp buffer.
 * Flag and present errors in some way (packets missing, RS faults, sequence errors, etc)
 * Detect and handle changes in mux composition
 * Fix misbehaviours when packets are intentionnally interleaved
 * Fix hangup where it tries to decode old PSEQs for too long


Resampler improvements
----------------------
 * Assess quality of window currently used.
 * Evaluate usefulness of other windows.
 * Distribute energy of Fs bin equally to both negative and positive
   frequencies in the back buffer.


Review CicEq
------------
The CIC Equaliser was used for the USRP1 to compensate for spectrum flatness.
It is not documented, and its effect poorly explained. Review if still needed,
and document appropriately.

