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!
With 50 RBs and 100 RBs the UE crashes in the basic simulator
because of false detection of DCIs.
Putting nothing in the unused REs in the DCI instead of random
bits solves this issue and let the basic simulator run with 50 RBs
and 100 RBs.
Note that in the real UE the problem needs to be solved because
the channel may lead to false DCI detection and the consequent
crashes have to be solved. This commit sort of "hides" the issue
to have the basic simulator functional.
Note also that putting nothing in the unused REs in the DCI should
be the normal general case. But it has not been tested with anything
but the basic simulator so the previous code is left.
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.
Summary of changes:
- fix compilation on CentOS
- some work on the T tracer:
- add a 'multi' tracer to connect several tracers at the same time
- improve 'to_vcd' to be compatible with previous VCD traces
- preliminary work for X2 handover
- various bug fixes
A new version of asn1c is to be used with this commit.
Do:
cd [top directory of repository]
source oaienv
cd cmake_targets
./build_oai -I
- 'busy' has to be handled in a more atomic fashion to avoid crazy
runtime race conditions
- the basic simulator is too fast sometimes; rewrite the accesses to
the T cache to avoid there again crazy behaviors
Hopefully that's better...
This commit removes the warning:
make[4]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
Basically, inside a Makefile we should use $(MAKE) instead of make.
Since VCD has now to go through the T tracer, we enforce the consistency
of data found in common/utils/LOG/vcd_signal_dumper.[ch] with data
found in common/utils/T/T_messages.txt.
We might get completely rid of common/utils/LOG/vcd_signal_dumper.[ch] at some
point. For the moment, let's keep it.
This commit adds the program common/utils/T/check_vcd.c and necessary
modifications to enforce its use at compilation time.
If you modify common/utils/LOG/vcd_signal_dumper.[ch] but do not update
common/utils/T/T_messages.txt an error will pop up when you compile the
software. You have to keep both modules synchronized.
Make it compatible with 'template' gtwave files as found in openair's
repository.
The type VCD_NAME was added to the VCD IDs in T_messages.txt.
The database processing code was adapted to use it.
The tracer to_vcd was adapted to use it and render the produced vcd
output compatible with the 'template' gtkwave files.
When running to_vcd, do not forget to pass -vcd to use this feature.
This tracer allows the connection of several tracers to one tracee.
To use the multi tracer:
- run the tracee as usual, eg. ./lte-softmodem -O xxxx.conf --T_stdout 0
- run the multi tracer: ./multi -d ../T_messages.txt
- connect other tracers to the multi tracer:
- ./enb -d ../T_messages.txt -p 2022
- ./textlog -d ../T_messages.txt -p 2022
- etc.
By default the multi tracer connects to the tracee to the port 2021,
as for any other tracer.
Then it accepts connections from other tracers on the port 2022.
This can be changed with parameters on the command line.
The tracee and the other tracers can be stopped/started at any time.
One of the optimized RE allocation function does not work properly
and generates some decoding errors with a COTS UE. Let's use the
generic function for the moment, while analyzing what is wrong.
- install package 'vim-common' to have 'xxd' needed by the compilation
process of the T tracer
- change the way xxd is called so that no file is created in case
of error
The power estimation of the UE has to be debugged (calibrated?).
In the meantime, using "--ue-rxgain 140" lets the UE and eNB
talk to each other in the basic simulator.
Summary of changes:
- import work from Fujitsu:
- multiple UEs
- TDD configuration 1
- several bugs fixed:
- UE power changes
this one introduces two new parameters in the configuration file,
update yours! The new parameters are "puSch10xSnr" and "puCch10xSnr".
See targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
- IQ replay module
- use MAKE_VERSION(x,y,z) instead of RRC_VERSION
- some UE fixes
Some new problems may happen. The work from Fujitsu was huge
and their branch diverged a lot from develop, leading to a very
complex merge.
The UE power management may also have an impact. It expects the noise
level to be at around 30 (as seen in the enb T tracer, in the
"input signal" view) and asks for an SNR of 20dB (value 200 for puSch10xSnr
and puCch10xSnr in the configuration file). You may want to put a
lower value, say 100 (SNR of 10dB). This is still work in progress
and needs some more work (we need to calculate the noise level at
runtime and not use a hardcoded value of 30).
This commit reverts the change coming from
675fd0af4e.
On a test machine, running the basic simulator (both eNB, UE
and T tracer) with 100 RBs eats too much of memory on a computer
with 8GB of RAM, leading to a reboot because the computer
was not responsive anymore.
Other solutions are needed to solve the memory issues, but
multiplying by 50 this number is not a good one, at least
not in the basic mode of operation. If this value needs
to be that big, a #ifdef #else #endif may be used.
20 was wrong, it means 2 dB.
200 is a bit high on my setup. Today the code hardcodes the noise
level as 30dB and a target of 20dB above noise is chosen by default.
Some more work is needed to estimate the real noise level. Some
more work is needed to set proper defaults.
Since now pucch_n1_AN is taken from the configuration file,
it has to be set to 0. Value 32 will not work well, at least
in FDD. This has to be handled properly at some point
(do not use uplink resource blocks used by PUCCH for PUSCH).
Summary of changes:
- split UE and eNB directories
- nFAPI L2 emulator
- basic simulator
- various bug fixes
The nFAPI L2 emulator is not functional yet. Some code had to be removed
because it made the monolithic eNB non functional.
The unitary simulators (ulsim, dlsim) do not compile anymore. This will
be fixed later.