* join pthread_FH (ru_thread) once all condition variables have been set
* join RU FHTX only if it has been started (check as for pthread_create())
* join PRACH thread in the monolithic case
* send broadcast on condition variable cond_eNBs, as there can be multiple
waits on it
* integrate stop_ru(*ru) into kill_RU_proc(*ru)
* Correct memory freeing
* init_td_thread()/init_te_thread() are only initialized depending on condition
get_nprocs() > 2 && codingw
* apply the same the same for the functions kill_td_thread()/kill_te_thread()
Various problems were found with the basic simulator.
Variables used by various threads for synchronization need to
be initialized properly. That is before the various threads
start using them.
This goes for:
- UE->is_synchronized
- UE->proc.instance_cnt_synch
- UE->proc.instance_cnt_rxtx
The function "UE->rfdevice.trx_start_func" was called in
"UE_thread_synch" but should be called in "UE_thread" because
"UE_thread" is the one that calls "UE->rfdevice.trx_read_func"
and there is no guaranty that the call to "UE->rfdevice.trx_start_func"
is done before as it has to (it's in another thread).
And finally "pthread_cond_signal(&proc->cond_rxtx)" was called twice,
which may not be a problem but was certainly not intended. Plus
removing one call simplifies the code by removing some "if" logic,
which is a good thing per se.
This commit was not tested with a real UE and may thus introduce some
issues. Hopefully not!
Before this commit we were checking for UE->is_synchronized == 0
then we were waiting for a potentially active synch routine to
finish and then we were starting the synch routine again but the
synch routine that was running may have set UE->is_synchronized
to 1. This was leading to various problems, most notably the following
message repeated over and over in the UE log and the UE unable to
connect properly:
[RRC] [UE 0] Frame 377: OUT OF SYNC FROM eNB 0 (T310 active 0 : T310 0, N310 345, N311 0)
So let's wait for a potentially active synch routine to finish
before anything else.
TODO: Currently the driver picks the two first RX and TX channels when nb_tx and nb_rx are both set to 2. If a developers wants to force usage of two devices, 'set_rx_subdev_spec' and 'set_tx_subdev_spec' can be used to indicate to the driver so that antennas from separate devices will be used. To rephrase: until 4 antennas are supported by OAI, testing with two devices, so that antennas from both devices are used, requires manual configuration of which subdevices' antennas are used.
Conflicts:
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
-- stdbuf -o0 seems to be causing segmentation fault
-- using daemon instead of nohup
-- also repeating several time "got sync" message and flushing stdout/stderr
Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
2. minor modifications in dlsch_demodulation.c for 2 eNB TX antennas, 1 RX antenna. Inconsistant indexing of some arrays in this case.
3. change in config_load_configmodule.c : removed exit(-1) when no configuration file is used. This makes unitary simulators exit. Effect on lte-XXsoftmodem TBC.