this fixes the subframe-accurate rx in tracking mode.
previously we've only alligned to the next subframe start in find and
when there was a single overflow we've lost the track.
this patch calculates the offset in samples to the actual start of the
subframe (full ms of the receive timestamp) vs. the actual
receive timestamp and uses the value as the "next_rf_sample_offset"
to realign on the next receive
we've used a macro that can return -1 as access index
for an array. this has now been converted in a member
that is initialized and checked during init
fixes Coverity issue 1480088 where srslte_ue_dl_find_dl_dci() expects
an array of struct srslte_dci_dl_t but is only given one element.
srslte_ue_dl_find_and_decode() itself only uses the first decoded
message but find_dl_dci() may still decode more than that
this patch adds a buffer len paramter to the receive_samples() call
that protects the (also) provided buffer from overflowing.
currently each call to srslte_ue_sync_zerocopy() which then calls receive_samples()
relies on a buffer that is "big enough". But that buffer is sometimes
2 subframes, sometimes 3 or 5, sometimes has space for the maximum PRB size, sometimes
only for 6 PRBs (i.e. during cell search).
By extending the interface to pass the buffer size we can make sure that
only samples are received that actually fit inside the provided buffer.
this fixes an issue in which, during cell search, the sync code
itself would set the serving cell whenever it found a new cell.
instead, only report the found cell to RRC and keep the sample
rate at 1.92 MHz. RRC may select a new serving cell and then tell
PHY to camp on it.