When the user clicks on "next UE" or "prev UE" we change the
filters of loggers.
At the same time, the main thread of enb.c processes events
received from the soft-modem and uses the filters, some of them
maybe in the process of being changed.
Changing the filters is not atomic and has to be protected.
Just below the logo you see the current UE, eg. [UE 0],
and near that you have two "buttons" [prev UE] and [next UE].
You click with left button of mouse on those and the various
plots that depend on the UE are now done for the new UE (say UE 1
instead of UE 0 if you click on [next UE]).
The plots are not cleared when you switch.
Let's say it's a feature.
Something went wrong somewhere in the commit history, the function
was not correct.
The most obvious symptom was that way too much SR (scheduling requests)
were given to the UE whenever it had some PUCCH to send.
The case for TDD has not been tested.
The eNodeB may sometimes wrongly generate PHICH because somewhere
'phich_active' is not reset to 0, due to an unidentified reason. When
adding this hack the problem seems to disappear completely.
This is not the end of the story. The real underlying problem has to be
understood and fixed correctly.
The Msg3 ressource blocks used by random access procedure
were not correctly handled. The MAC scheduler could wrongly
allocate a ressource block for both random access Msg3 and
a regular UE.
This hotfix hopefully fixes the problem.
A new function "set_msg3_subframe" has been added in the
interface between PHY and MAC.
The PHICH generation is wrong.
HARQ process X is uplink scheduled at TTI n.
At TTI n+4 the eNB receives the data.
At TTI n+8 the eNB sends ACK/NACK on the PHICH.
The problem is that PHICH generation is done after scheduling.
And PHICH generation uses "first_rb" and "n_DMRS" to compute
"ngroup_PHICH" and "nseq_PHICH".
So at TTI n+8 if the eNB has reused the HARQ process X for
a new uplink scheduling the values "first_rb" and "n_DMRS"
may have changed.
We need to use the previous values.
One solution would have been to do PHICH generation before
scheduling. The problem is that "generate_phich_top" does more
than PHICH generation. It has to setup parameters to sort of
"emulate" a DCI0 in case of retransmission scheduled without
DCI0. So part of it has to be done after scheduling. We would
have to split the function.
The simple adopted fix is to store old values of "first_rb"
and "n_DMRS" and use those values in "generate_phich_top".
This fix has only been tested with FDD. TDD may miserably fail.
The case of a CRC == 0 is legal.
After discussion with Raymond, it is also possible to have all
bits at 0 (and so a CRC==0) if there is no transmission and thus
not much energy.
So this hotfix may introduce new problems (false decoding).
A future work is to handle this case properly by not calling the
turbo decoder if there is not enough energy received.
The problem might manifest itself more in the UE part, especially
when it tries to decode MIB and/or SIB (if I understood correctly).