Merge remote-tracking branch 'origin/develop_bugfixes_w43' into develop_integration_w43
Conflicts: common/utils/T/.gitignore common/utils/T/tracer/Makefile
This commit is contained in:
@@ -14,4 +14,5 @@ tracer/ue
|
|||||||
tracer/to_vcd
|
tracer/to_vcd
|
||||||
tracer/extract_input_subframe
|
tracer/extract_input_subframe
|
||||||
tracer/extract_output_subframe
|
tracer/extract_output_subframe
|
||||||
|
tracer/extract
|
||||||
tracee/tracee
|
tracee/tracee
|
||||||
|
|||||||
@@ -29,10 +29,10 @@ typedef struct {
|
|||||||
#define T_SHM_FILENAME "/T_shm_segment"
|
#define T_SHM_FILENAME "/T_shm_segment"
|
||||||
|
|
||||||
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_NUM_FUNCTIONS 172
|
#define VCD_NUM_FUNCTIONS 178
|
||||||
|
|
||||||
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
|
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_NUM_VARIABLES 118
|
#define VCD_NUM_VARIABLES 128
|
||||||
|
|
||||||
/* first VCD function (to be kept up to date! see in T_messages.txt) */
|
/* first VCD function (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_FIRST_FUNCTION ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)
|
#define VCD_FIRST_FUNCTION ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)
|
||||||
|
|||||||
@@ -958,6 +958,38 @@ ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB
|
|||||||
DESC = VCD variable SUBFRAME_NUMBER_RX1_ENB
|
DESC = VCD variable SUBFRAME_NUMBER_RX1_ENB
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
FORMAT = ulong,value
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_FRAME_NUMBER_TX0_RU
|
||||||
|
DESC = VCD variable FRAME_NUMBER_TX0_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_FRAME_NUMBER_TX1_RU
|
||||||
|
DESC = VCD variable FRAME_NUMBER_TX1_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_FRAME_NUMBER_RX0_RU
|
||||||
|
DESC = VCD variable FRAME_NUMBER_RX0_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_FRAME_NUMBER_RX1_RU
|
||||||
|
DESC = VCD variable FRAME_NUMBER_RX1_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU
|
||||||
|
DESC = VCD variable SUBFRAME_NUMBER_TX0_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU
|
||||||
|
DESC = VCD variable SUBFRAME_NUMBER_TX1_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU
|
||||||
|
DESC = VCD variable SUBFRAME_NUMBER_RX0_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU
|
||||||
|
DESC = VCD variable SUBFRAME_NUMBER_RX1_RU
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
ID = VCD_VARIABLE_RUNTIME_TX_ENB
|
ID = VCD_VARIABLE_RUNTIME_TX_ENB
|
||||||
DESC = VCD variable RUNTIME_TX_ENB
|
DESC = VCD variable RUNTIME_TX_ENB
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
@@ -1050,6 +1082,14 @@ ID = VCD_VARIABLE_TRX_TST
|
|||||||
DESC = VCD variable TRX_TST
|
DESC = VCD variable TRX_TST
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
FORMAT = ulong,value
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_TRX_TS_UE
|
||||||
|
DESC = VCD variable TRX_TS_UE
|
||||||
|
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_TRX_TST_UE
|
||||||
|
DESC = VCD variable TRX_TST_UE
|
||||||
|
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
ID = VCD_VARIABLE_TRX_WRITE_FLAGS
|
ID = VCD_VARIABLE_TRX_WRITE_FLAGS
|
||||||
DESC = VCD variable TRX_WRITE_FLAGS
|
DESC = VCD variable TRX_WRITE_FLAGS
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
@@ -1413,6 +1453,14 @@ ID = VCD_FUNCTION_TRX_WRITE
|
|||||||
DESC = VCD function TRX_WRITE
|
DESC = VCD function TRX_WRITE
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_TRX_READ_UE
|
||||||
|
DESC = VCD function TRX_READ_UE
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_TRX_WRITE_UE
|
||||||
|
DESC = VCD function TRX_WRITE_UE
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_TRX_READ_IF
|
ID = VCD_FUNCTION_TRX_READ_IF
|
||||||
DESC = VCD function TRX_READ_IF
|
DESC = VCD function TRX_READ_IF
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
@@ -1565,12 +1613,28 @@ ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1
|
|||||||
DESC = VCD function PHY_PROCEDURES_ENB_TX1
|
DESC = VCD function PHY_PROCEDURES_ENB_TX1
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_COMMON
|
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX
|
||||||
DESC = VCD function PHY_PROCEDURES_ENB_RX_COMMON
|
DESC = VCD function PHY_PROCEDURES_RU_FEPRX
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_COMMON1
|
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1
|
||||||
DESC = VCD function PHY_PROCEDURES_ENB_RX_COMMON1
|
DESC = VCD function PHY_PROCEDURES_RU_FEPRX1
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM
|
||||||
|
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1
|
||||||
|
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM1
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC
|
||||||
|
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1
|
||||||
|
DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC1
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC
|
ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC
|
||||||
@@ -1581,10 +1645,6 @@ ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1
|
|||||||
DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC1
|
DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC1
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_ENB_SLOT_FEP
|
|
||||||
DESC = VCD function ENB_SLOT_FEP
|
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
|
||||||
FORMAT = int,value
|
|
||||||
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX
|
ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX
|
||||||
DESC = VCD function PHY_PROCEDURES_UE_TX
|
DESC = VCD function PHY_PROCEDURES_UE_TX
|
||||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
@@ -1781,6 +1841,10 @@ ID = VCD_FUNCTION_PHY_ENB_PRACH_RX
|
|||||||
DESC = VCD function PHY_ENB_PRACH_RX
|
DESC = VCD function PHY_ENB_PRACH_RX
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PHY_RU_PRACH_RX
|
||||||
|
DESC = VCD function PHY_RU_PRACH_RX
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_PHY_ENB_PDCCH_TX
|
ID = VCD_FUNCTION_PHY_ENB_PDCCH_TX
|
||||||
DESC = VCD function PHY_ENB_PDCCH_TX
|
DESC = VCD function PHY_ENB_PDCCH_TX
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ LIBS=-lm
|
|||||||
XLIBS=-lX11 -lpng -lXft
|
XLIBS=-lX11 -lpng -lXft
|
||||||
|
|
||||||
all: record replay extract_config textlog enb ue vcd macpdu2wireshark \
|
all: record replay extract_config textlog enb ue vcd macpdu2wireshark \
|
||||||
extract_input_subframe extract_output_subframe to_vcd
|
extract_input_subframe extract_output_subframe to_vcd extract
|
||||||
|
|
||||||
record: utils.o record.o database.o config.o
|
record: utils.o record.o database.o config.o
|
||||||
$(CC) $(CFLAGS) -o record $^ $(LIBS)
|
$(CC) $(CFLAGS) -o record $^ $(LIBS)
|
||||||
@@ -26,6 +26,9 @@ extract_output_subframe: extract_output_subframe.o database.o event.o utils.o \
|
|||||||
config.o
|
config.o
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
||||||
|
|
||||||
|
extract: extract.o database.o event.o utils.o config.o
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
||||||
|
|
||||||
textlog: utils.o textlog.o database.o event.o handler.o config.o \
|
textlog: utils.o textlog.o database.o event.o handler.o config.o \
|
||||||
event_selector.o view/view.a gui/gui.a logger/logger.a \
|
event_selector.o view/view.a gui/gui.a logger/logger.a \
|
||||||
filter/filter.a
|
filter/filter.a
|
||||||
@@ -74,7 +77,7 @@ filter/filter.a:
|
|||||||
clean:
|
clean:
|
||||||
rm -f *.o core tracer_remote textlog enb ue vcd record replay
|
rm -f *.o core tracer_remote textlog enb ue vcd record replay
|
||||||
rm -f extract_config macpdu2wireshark extract_input_subframe
|
rm -f extract_config macpdu2wireshark extract_input_subframe
|
||||||
rm -f extract_output_subframe to_vcd
|
rm -f extract_output_subframe to_vcd extract
|
||||||
cd gui && make clean
|
cd gui && make clean
|
||||||
cd view && make clean
|
cd view && make clean
|
||||||
cd logger && make clean
|
cd logger && make clean
|
||||||
|
|||||||
@@ -0,0 +1,124 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include "database.h"
|
||||||
|
#include "event.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
void usage(void)
|
||||||
|
{
|
||||||
|
printf(
|
||||||
|
"usage: [options] <file> <event> <buffer name>\n"
|
||||||
|
"options:\n"
|
||||||
|
" -d <database file> this option is mandatory\n"
|
||||||
|
" -o <output file> this option is mandatory\n"
|
||||||
|
" -f <name> <value> field 'name' of 'event' has to match 'value'\n"
|
||||||
|
" type of 'name' must be int\n"
|
||||||
|
" (you can use several -f options)\n"
|
||||||
|
);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_filter_arg(database_event_format *f, char *field, char *type)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < f->count; i++)
|
||||||
|
if (!strcmp(f->name[i], field)) {
|
||||||
|
if (strcmp(f->type[i], type)) break;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
printf("bad field %s, check that it exists and has type '%s'\n",field,type);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int n, char **v)
|
||||||
|
{
|
||||||
|
char *database_filename = NULL;
|
||||||
|
void *database;
|
||||||
|
int i;
|
||||||
|
int input_event_id;
|
||||||
|
database_event_format f;
|
||||||
|
char *file = NULL;
|
||||||
|
char *output_file = NULL;
|
||||||
|
FILE *out;
|
||||||
|
int fd;
|
||||||
|
char *event_name = NULL;
|
||||||
|
char *buffer_name = NULL;
|
||||||
|
char *filter[n];
|
||||||
|
int filter_arg[n];
|
||||||
|
int filter_value[n];
|
||||||
|
int filter_count = 0;
|
||||||
|
int buffer_arg;
|
||||||
|
int found;
|
||||||
|
|
||||||
|
for (i = 1; i < n; i++) {
|
||||||
|
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
||||||
|
if (!strcmp(v[i], "-d"))
|
||||||
|
{ if (i > n-2) usage(); database_filename = v[++i]; continue; }
|
||||||
|
if (!strcmp(v[i], "-o"))
|
||||||
|
{ if (i > n-2) usage(); output_file = v[++i]; continue; }
|
||||||
|
if (!strcmp(v[i], "-f")) { if (i>n-3) usage();
|
||||||
|
filter[filter_count] = v[++i];
|
||||||
|
filter_value[filter_count++] = atoi(v[++i]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (file == NULL) { file = v[i]; continue; }
|
||||||
|
if (event_name == NULL) { event_name = v[i]; continue; }
|
||||||
|
if (buffer_name == NULL) { buffer_name = v[i]; continue; }
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
if (file == NULL || event_name == NULL || buffer_name == NULL) usage();
|
||||||
|
|
||||||
|
if (database_filename == NULL) {
|
||||||
|
printf("ERROR: provide a database file (-d)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output_file == NULL) {
|
||||||
|
printf("gimme -o <output file>, thanks\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
out = fopen(output_file, "w"); if(out==NULL){perror(output_file);exit(1);}
|
||||||
|
|
||||||
|
database = parse_database(database_filename);
|
||||||
|
|
||||||
|
load_config_file(database_filename);
|
||||||
|
|
||||||
|
input_event_id = event_id_from_name(database, event_name);
|
||||||
|
f = get_format(database, input_event_id);
|
||||||
|
|
||||||
|
buffer_arg = get_filter_arg(&f, buffer_name, "buffer");
|
||||||
|
|
||||||
|
for (i = 0; i < filter_count; i++)
|
||||||
|
filter_arg[i] = get_filter_arg(&f, filter[i], "int");
|
||||||
|
|
||||||
|
fd = open(file, O_RDONLY);
|
||||||
|
if (fd == -1) { perror(file); exit(1); }
|
||||||
|
|
||||||
|
found = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
char v[T_BUFFER_MAX];
|
||||||
|
event e;
|
||||||
|
e = get_event(fd, v, database);
|
||||||
|
if (e.type == -1) break;
|
||||||
|
if (e.type != input_event_id) continue;
|
||||||
|
for (i = 0; i < filter_count; i++)
|
||||||
|
if (filter_value[i] != e.e[filter_arg[i]].i)
|
||||||
|
break;
|
||||||
|
if (i != filter_count)
|
||||||
|
continue;
|
||||||
|
if (fwrite(e.e[buffer_arg].b, e.e[buffer_arg].bsize, 1, out) != 1)
|
||||||
|
{ perror(output_file); exit(1); }
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found == 0) printf("ERROR: event not found\n");
|
||||||
|
|
||||||
|
fclose(out);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -227,11 +227,8 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
|
|
||||||
int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id)
|
int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id)
|
||||||
{
|
{
|
||||||
static int first_run=1;
|
|
||||||
static int max_pos_fil2=0;
|
|
||||||
int temp, i, aa, max_pos=0, max_val=0;
|
int temp, i, aa, max_pos=0, max_val=0;
|
||||||
short Re,Im,coef=24576;
|
short Re,Im;
|
||||||
short ncoef = 32768 - coef;
|
|
||||||
|
|
||||||
LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
|
LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
|
||||||
LTE_eNB_PUSCH *eNB_pusch_vars = eNB->pusch_vars[UE_id];
|
LTE_eNB_PUSCH *eNB_pusch_vars = eNB->pusch_vars[UE_id];
|
||||||
@@ -260,16 +257,9 @@ int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id)
|
|||||||
if (max_pos>frame_parms->ofdm_symbol_size/2)
|
if (max_pos>frame_parms->ofdm_symbol_size/2)
|
||||||
max_pos = max_pos-frame_parms->ofdm_symbol_size;
|
max_pos = max_pos-frame_parms->ofdm_symbol_size;
|
||||||
|
|
||||||
// filter position to reduce jitter
|
|
||||||
if (first_run == 1) {
|
|
||||||
first_run=0;
|
|
||||||
max_pos_fil2 = max_pos;
|
|
||||||
} else
|
|
||||||
max_pos_fil2 = ((max_pos_fil2 * coef) + (max_pos * ncoef)) >> 15;
|
|
||||||
|
|
||||||
//#ifdef DEBUG_PHY
|
//#ifdef DEBUG_PHY
|
||||||
LOG_D(PHY,"frame %d: max_pos = %d, max_pos_fil = %d, sync_pos=%d\n",eNB->proc.frame_rx,max_pos,max_pos_fil2,sync_pos);
|
LOG_D(PHY,"frame %d: max_pos = %d, sync_pos=%d\n",eNB->proc.frame_rx,max_pos,sync_pos);
|
||||||
//#endif //DEBUG_PHY
|
//#endif //DEBUG_PHY
|
||||||
|
|
||||||
return(max_pos_fil2-sync_pos);
|
return max_pos - sync_pos;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -663,7 +663,7 @@ void prach_procedures(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
{
|
{
|
||||||
if ((eNB->prach_energy_counter == 100) &&
|
if ((eNB->prach_energy_counter == 100) &&
|
||||||
(max_preamble_energy[0] > eNB->measurements.prach_I0+200)) {
|
(max_preamble_energy[0] > eNB->measurements.prach_I0+100)) {
|
||||||
|
|
||||||
LOG_D(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d\n",
|
LOG_D(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d\n",
|
||||||
eNB->Mod_id,
|
eNB->Mod_id,
|
||||||
@@ -1524,7 +1524,7 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe)
|
|||||||
pdu->data = eNB->ulsch[UE_id]->harq_processes[harq_pid]->b;
|
pdu->data = eNB->ulsch[UE_id]->harq_processes[harq_pid]->b;
|
||||||
// estimate timing advance for MAC
|
// estimate timing advance for MAC
|
||||||
sync_pos = lte_est_timing_advance_pusch(eNB,UE_id);
|
sync_pos = lte_est_timing_advance_pusch(eNB,UE_id);
|
||||||
timing_advance_update = sync_pos - eNB->frame_parms.nb_prefix_samples/4; //to check
|
timing_advance_update = sync_pos; // - eNB->frame_parms.nb_prefix_samples/4; //to check
|
||||||
|
|
||||||
// if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
|
// if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
|
||||||
// if (timing_advance_update < -10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
|
// if (timing_advance_update < -10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
|
||||||
|
|||||||
@@ -113,9 +113,13 @@ void rx_sdu(const module_id_t enb_mod_idP,
|
|||||||
UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0;
|
UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0;
|
||||||
UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0;
|
UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0;
|
||||||
UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= (~(1<<harq_pid));
|
UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= (~(1<<harq_pid));
|
||||||
/* don't take into account TA if timer is running */
|
/* Update with smoothing: 3/4 of old value and 1/4 of new.
|
||||||
if (UE_list->UE_sched_ctrl[UE_id].ta_timer == 0)
|
* This is the logic that was done in the function
|
||||||
UE_list->UE_sched_ctrl[UE_id].ta_update = timing_advance;
|
* lte_est_timing_advance_pusch, maybe it's not necessary?
|
||||||
|
* maybe it's even not correct at all?
|
||||||
|
*/
|
||||||
|
UE_list->UE_sched_ctrl[UE_id].ta_update =
|
||||||
|
(UE_list->UE_sched_ctrl[UE_id].ta_update * 3 + timing_advance)/4;
|
||||||
UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_idP] = ul_cqi;
|
UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_idP] = ul_cqi;
|
||||||
UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors = 0;
|
UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors = 0;
|
||||||
first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid];
|
first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid];
|
||||||
|
|||||||
@@ -156,6 +156,9 @@ void handle_ulsch(UL_IND_t *UL_info) {
|
|||||||
#define C do { size = 0; put(0); } while (0)
|
#define C do { size = 0; put(0); } while (0)
|
||||||
#define A(...) do { char t[4096]; sprintf(t, __VA_ARGS__); append_string(t); } while (0)
|
#define A(...) do { char t[4096]; sprintf(t, __VA_ARGS__); append_string(t); } while (0)
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
/* eats lots of ms at startup, disrupts realtime */
|
||||||
static char *s;
|
static char *s;
|
||||||
static int size;
|
static int size;
|
||||||
static int maxsize;
|
static int maxsize;
|
||||||
@@ -169,6 +172,22 @@ static void put(char x)
|
|||||||
s[size++] = x;
|
s[size++] = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* eats nothing at startup, but fixed size */
|
||||||
|
#define SMAX 65536
|
||||||
|
static char s[SMAX];
|
||||||
|
static int size;
|
||||||
|
static int maxsize = SMAX;
|
||||||
|
|
||||||
|
static void put(char x)
|
||||||
|
{
|
||||||
|
if (size == maxsize) { printf("incrase SMAX\n"); exit(1); }
|
||||||
|
s[size++] = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static void append_string(char *t)
|
static void append_string(char *t)
|
||||||
{
|
{
|
||||||
size--;
|
size--;
|
||||||
|
|||||||
Reference in New Issue
Block a user