modifications to statistics gathering for NR
This commit is contained in:
@@ -358,6 +358,7 @@ void *nrL1_stats_thread(void *param) {
|
|||||||
fd=fopen("nrL1_stats.log","w");
|
fd=fopen("nrL1_stats.log","w");
|
||||||
AssertFatal(fd!=NULL,"Cannot open nrL1_stats.log\n");
|
AssertFatal(fd!=NULL,"Cannot open nrL1_stats.log\n");
|
||||||
dump_nr_I0_stats(fd,gNB);
|
dump_nr_I0_stats(fd,gNB);
|
||||||
|
dump_pdsch_stats(fd,gNB);
|
||||||
dump_pusch_stats(fd,gNB);
|
dump_pusch_stats(fd,gNB);
|
||||||
// nr_dump_uci_stats(fd,eNB,eNB->proc.L1_proc_tx.frame_tx);
|
// nr_dump_uci_stats(fd,eNB,eNB->proc.L1_proc_tx.frame_tx);
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
|
|||||||
@@ -87,7 +87,8 @@ void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB) {
|
|||||||
fprintf(fd,"%2d.",gNB->measurements.n0_subband_power_tot_dB[i]-gNB->measurements.n0_subband_power_avg_dB);
|
fprintf(fd,"%2d.",gNB->measurements.n0_subband_power_tot_dB[i]-gNB->measurements.n0_subband_power_avg_dB);
|
||||||
if (i%25 == 24) fprintf(fd,"\n");
|
if (i%25 == 24) fprintf(fd,"\n");
|
||||||
}
|
}
|
||||||
|
fprintf(fd,"\n");
|
||||||
|
fprintf(fd,"max_IO = %d (%d), min_I0 = %d (%d), avg_I0 = %d dB\n",max_I0,amax,min_I0,amin,gNB->measurements.n0_subband_power_avg_dB);
|
||||||
fprintf(fd,"PRACH I0 = %d.%d dB\n",gNB->measurements.prach_I0/10,gNB->measurements.prach_I0%10);
|
fprintf(fd,"PRACH I0 = %d.%d dB\n",gNB->measurements.prach_I0/10,gNB->measurements.prach_I0%10);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -526,15 +526,17 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dump_pdsch_stats(PHY_VARS_gNB *gNB) {
|
void dump_pdsch_stats(FILE *fd,PHY_VARS_gNB *gNB) {
|
||||||
|
|
||||||
for (int i=0;i<NUMBER_OF_NR_SCH_STATS_MAX;i++)
|
for (int i=0;i<NUMBER_OF_NR_SCH_STATS_MAX;i++)
|
||||||
if (gNB->dlsch_stats[i].rnti > 0)
|
if (gNB->dlsch_stats[i].rnti > 0 && gNB->dlsch_stats[i].frame != gNB->dlsch_stats[i].dump_frame) {
|
||||||
LOG_D(PHY,"DLSCH RNTI %x: current_Qm %d, current_RI %d, total_bytes TX %d\n",
|
gNB->dlsch_stats[i].dump_frame = gNB->dlsch_stats[i].frame;
|
||||||
|
fprintf(fd,"DLSCH RNTI %x: current_Qm %d, current_RI %d, total_bytes TX %d\n",
|
||||||
gNB->dlsch_stats[i].rnti,
|
gNB->dlsch_stats[i].rnti,
|
||||||
gNB->dlsch_stats[i].current_Qm,
|
gNB->dlsch_stats[i].current_Qm,
|
||||||
gNB->dlsch_stats[i].current_RI,
|
gNB->dlsch_stats[i].current_RI,
|
||||||
gNB->dlsch_stats[i].total_bytes_tx);
|
gNB->dlsch_stats[i].total_bytes_tx);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
|
|||||||
void init_dlsch_tpool(uint8_t nun_dlsch_threads);
|
void init_dlsch_tpool(uint8_t nun_dlsch_threads);
|
||||||
void nr_emulate_dlsch_payload(uint8_t* payload, uint16_t size);
|
void nr_emulate_dlsch_payload(uint8_t* payload, uint16_t size);
|
||||||
|
|
||||||
void dump_pdsch_stats(PHY_VARS_gNB *gNB);
|
void dump_pdsch_stats(FILE *fd,PHY_VARS_gNB *gNB);
|
||||||
|
|
||||||
void clear_pdsch_stats(PHY_VARS_gNB *gNB);
|
void clear_pdsch_stats(PHY_VARS_gNB *gNB);
|
||||||
|
|
||||||
|
|||||||
@@ -137,27 +137,23 @@ void nr_ulsch_unscrambling_optim(int16_t* llr,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define STATSTRLEN 16384
|
|
||||||
void dump_pusch_stats(FILE *fd,PHY_VARS_gNB *gNB) {
|
void dump_pusch_stats(FILE *fd,PHY_VARS_gNB *gNB) {
|
||||||
|
|
||||||
char output[16384];
|
|
||||||
int stroff=0;
|
|
||||||
|
|
||||||
for (int i=0;i<gNB->number_of_nr_ulsch_max;i++) {
|
for (int i=0;i<gNB->number_of_nr_ulsch_max;i++) {
|
||||||
if (gNB->ulsch_stats[i].rnti>0) {
|
|
||||||
|
if (gNB->ulsch_stats[i].rnti>0 && gNB->ulsch_stats[i].frame != gNB->ulsch_stats[i].dump_frame) {
|
||||||
|
gNB->ulsch_stats[i].dump_frame = gNB->ulsch_stats[i].frame;
|
||||||
for (int aa=0;aa<gNB->frame_parms.nb_antennas_rx;aa++)
|
for (int aa=0;aa<gNB->frame_parms.nb_antennas_rx;aa++)
|
||||||
if (aa==0) stroff+=sprintf(output+stroff,"ULSCH RNTI %4x: ulsch_power[%d] %d,%d ulsch_noise_power[%d] %d.%d\n",
|
if (aa==0) fprintf(fd,"ULSCH RNTI %4x, %d.%d: ulsch_power[%d] %d,%d ulsch_noise_power[%d] %d.%d\n",
|
||||||
gNB->ulsch_stats[i].rnti,
|
gNB->ulsch_stats[i].rnti,gNB->ulsch_stats[i].frame,gNB->ulsch_stats[i].dump_frame,
|
||||||
aa,gNB->ulsch_stats[i].power[aa]/10,gNB->ulsch_stats[i].power[aa]%10,
|
aa,gNB->ulsch_stats[i].power[aa]/10,gNB->ulsch_stats[i].power[aa]%10,
|
||||||
aa,gNB->ulsch_stats[i].noise_power[aa]/10,gNB->ulsch_stats[i].noise_power[aa]%10);
|
aa,gNB->ulsch_stats[i].noise_power[aa]/10,gNB->ulsch_stats[i].noise_power[aa]%10);
|
||||||
else stroff+=sprintf(output+stroff," ulsch_power[%d] %d.%d, ulsch_noise_power[%d] %d.%d\n",
|
else fprintf(fd," ulsch_power[%d] %d.%d, ulsch_noise_power[%d] %d.%d\n",
|
||||||
aa,gNB->ulsch_stats[i].power[aa]/10,gNB->ulsch_stats[i].power[aa]%10,
|
aa,gNB->ulsch_stats[i].power[aa]/10,gNB->ulsch_stats[i].power[aa]%10,
|
||||||
aa,gNB->ulsch_stats[i].noise_power[aa]/10,gNB->ulsch_stats[i].noise_power[aa]%10);
|
aa,gNB->ulsch_stats[i].noise_power[aa]/10,gNB->ulsch_stats[i].noise_power[aa]%10);
|
||||||
|
|
||||||
AssertFatal(stroff<(STATSTRLEN-1000),"Increase STATSTRLEN\n");
|
|
||||||
|
|
||||||
|
fprintf(fd," round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d, DTX %d, current_Qm %d, current_RI %d, total_bytes RX/SCHED %d/%d\n",
|
||||||
stroff+=sprintf(output+stroff," round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d, DTX %d, current_Qm %d, current_RI %d, total_bytes RX/SCHED %d/%d\n",
|
|
||||||
gNB->ulsch_stats[i].round_trials[0],
|
gNB->ulsch_stats[i].round_trials[0],
|
||||||
(double)gNB->ulsch_stats[i].round_trials[1]/gNB->ulsch_stats[i].round_trials[0],
|
(double)gNB->ulsch_stats[i].round_trials[1]/gNB->ulsch_stats[i].round_trials[0],
|
||||||
gNB->ulsch_stats[i].round_trials[1],
|
gNB->ulsch_stats[i].round_trials[1],
|
||||||
@@ -165,14 +161,13 @@ void dump_pusch_stats(FILE *fd,PHY_VARS_gNB *gNB) {
|
|||||||
gNB->ulsch_stats[i].round_trials[2],
|
gNB->ulsch_stats[i].round_trials[2],
|
||||||
(double)gNB->ulsch_stats[i].round_trials[3]/gNB->ulsch_stats[i].round_trials[0],
|
(double)gNB->ulsch_stats[i].round_trials[3]/gNB->ulsch_stats[i].round_trials[0],
|
||||||
gNB->ulsch_stats[i].round_trials[3],
|
gNB->ulsch_stats[i].round_trials[3],
|
||||||
gNB->ulsch_stats[i].DTX,
|
gNB->ulsch_stats[i].DTX,
|
||||||
gNB->ulsch_stats[i].current_Qm,
|
gNB->ulsch_stats[i].current_Qm,
|
||||||
gNB->ulsch_stats[i].current_RI,
|
gNB->ulsch_stats[i].current_RI,
|
||||||
gNB->ulsch_stats[i].total_bytes_rx,
|
gNB->ulsch_stats[i].total_bytes_rx,
|
||||||
gNB->ulsch_stats[i].total_bytes_tx);
|
gNB->ulsch_stats[i].total_bytes_tx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf(fd,"%s",output);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_pusch_stats(PHY_VARS_gNB *gNB) {
|
void clear_pusch_stats(PHY_VARS_gNB *gNB) {
|
||||||
|
|||||||
@@ -556,6 +556,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (stats) {
|
if (stats) {
|
||||||
|
stats->frame = frame;
|
||||||
stats->rnti = ulsch->rnti;
|
stats->rnti = ulsch->rnti;
|
||||||
stats->round_trials[harq_process->round]++;
|
stats->round_trials[harq_process->round]++;
|
||||||
for (int aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
|
for (int aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
|
||||||
|
|||||||
@@ -127,6 +127,8 @@ typedef struct {
|
|||||||
} NR_gNB_UL_PDCCH_t;
|
} NR_gNB_UL_PDCCH_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
int frame;
|
||||||
|
int dump_frame;
|
||||||
uint16_t rnti;
|
uint16_t rnti;
|
||||||
int round_trials[8];
|
int round_trials[8];
|
||||||
int total_bytes_tx;
|
int total_bytes_tx;
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
if (do_meas==1) stop_meas(&gNB->phy_proc_tx);
|
if (do_meas==1) stop_meas(&gNB->phy_proc_tx);
|
||||||
|
|
||||||
if ((frame&127) == 0) dump_pdsch_stats(gNB);
|
// if ((frame&127) == 0) dump_pdsch_stats(gNB);
|
||||||
|
|
||||||
//apply the OFDM symbol rotation here
|
//apply the OFDM symbol rotation here
|
||||||
for (aa=0; aa<cfg->carrier_config.num_tx_ant.value; aa++) {
|
for (aa=0; aa<cfg->carrier_config.num_tx_ant.value; aa++) {
|
||||||
|
|||||||
@@ -74,8 +74,11 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
|
|||||||
memset(output,0,MACSTATSSTRLEN);
|
memset(output,0,MACSTATSSTRLEN);
|
||||||
int stroff=0;
|
int stroff=0;
|
||||||
for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) {
|
for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) {
|
||||||
stroff = sprintf(output,"UE ID %d RNTI %04x (%d/%d)\n", UE_id, UE_info->rnti[UE_id], num++, UE_info->num_UEs);
|
stroff = sprintf(output,"UE ID %d RNTI %04x (%d/%d)\n", UE_id, UE_info->rnti[UE_id], num++, UE_info->num_UEs,
|
||||||
LOG_I(NR_MAC, "UE ID %d RNTI %04x (%d/%d) PH %d dB PCMAX %d dBm\n",
|
UE_info->UE_sched_ctrl[UE_id].ph,
|
||||||
|
UE_info->UE_sched_ctrl[UE_id].pcmax);
|
||||||
|
|
||||||
|
LOG_D(NR_MAC, "UE ID %d RNTI %04x (%d/%d) PH %d dB PCMAX %d dBm\n",
|
||||||
UE_id,
|
UE_id,
|
||||||
UE_info->rnti[UE_id],
|
UE_info->rnti[UE_id],
|
||||||
num++,
|
num++,
|
||||||
@@ -89,7 +92,7 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
|
|||||||
stats->dlsch_rounds[0], stats->dlsch_rounds[1],
|
stats->dlsch_rounds[0], stats->dlsch_rounds[1],
|
||||||
stats->dlsch_rounds[2], stats->dlsch_rounds[3], stats->dlsch_errors,
|
stats->dlsch_rounds[2], stats->dlsch_rounds[3], stats->dlsch_errors,
|
||||||
avg_rsrp, stats->num_rsrp_meas);
|
avg_rsrp, stats->num_rsrp_meas);
|
||||||
LOG_I(NR_MAC, "UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, average RSRP %d (%d meas)\n",
|
LOG_D(NR_MAC, "UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, average RSRP %d (%d meas)\n",
|
||||||
UE_id,
|
UE_id,
|
||||||
stats->dlsch_rounds[0], stats->dlsch_rounds[1],
|
stats->dlsch_rounds[0], stats->dlsch_rounds[1],
|
||||||
stats->dlsch_rounds[2], stats->dlsch_rounds[3], stats->dlsch_errors,
|
stats->dlsch_rounds[2], stats->dlsch_rounds[3], stats->dlsch_errors,
|
||||||
@@ -107,14 +110,14 @@ void dump_mac_stats(gNB_MAC_INST *gNB)
|
|||||||
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d\n",
|
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d\n",
|
||||||
UE_id,
|
UE_id,
|
||||||
stats->ulsch_total_bytes_scheduled, stats->ulsch_total_bytes_rx);
|
stats->ulsch_total_bytes_scheduled, stats->ulsch_total_bytes_rx);
|
||||||
LOG_I(NR_MAC, "UE %d: dlsch_total_bytes %d\n", UE_id, stats->dlsch_total_bytes);
|
LOG_D(NR_MAC, "UE %d: dlsch_total_bytes %d\n", UE_id, stats->dlsch_total_bytes);
|
||||||
LOG_I(NR_MAC, "UE %d: ulsch_rounds %d/%d/%d/%d, ulsch_DTX %d, ulsch_errors %d\n",
|
LOG_D(NR_MAC, "UE %d: ulsch_rounds %d/%d/%d/%d, ulsch_DTX %d, ulsch_errors %d\n",
|
||||||
UE_id,
|
UE_id,
|
||||||
stats->ulsch_rounds[0], stats->ulsch_rounds[1],
|
stats->ulsch_rounds[0], stats->ulsch_rounds[1],
|
||||||
stats->ulsch_rounds[2], stats->ulsch_rounds[3],
|
stats->ulsch_rounds[2], stats->ulsch_rounds[3],
|
||||||
stats->ulsch_DTX,
|
stats->ulsch_DTX,
|
||||||
stats->ulsch_errors);
|
stats->ulsch_errors);
|
||||||
LOG_I(NR_MAC,
|
LOG_D(NR_MAC,
|
||||||
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d\n",
|
"UE %d: ulsch_total_bytes_scheduled %d, ulsch_total_bytes_received %d\n",
|
||||||
UE_id,
|
UE_id,
|
||||||
stats->ulsch_total_bytes_scheduled, stats->ulsch_total_bytes_rx);
|
stats->ulsch_total_bytes_scheduled, stats->ulsch_total_bytes_rx);
|
||||||
@@ -402,7 +405,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// if ((slot == 0) && (frame & 127) == 0) dump_mac_stats(RC.nrmac[module_idP]);
|
if ((slot == 0) && (frame & 127) == 0) dump_mac_stats(RC.nrmac[module_idP]);
|
||||||
|
|
||||||
|
|
||||||
// This schedules MIB
|
// This schedules MIB
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ void nr_fill_nfapi_pucch(module_id_t mod_id,
|
|||||||
memset(pucch_pdu, 0, sizeof(nfapi_nr_pucch_pdu_t));
|
memset(pucch_pdu, 0, sizeof(nfapi_nr_pucch_pdu_t));
|
||||||
future_ul_tti_req->n_pdus += 1;
|
future_ul_tti_req->n_pdus += 1;
|
||||||
|
|
||||||
LOG_D(MAC,
|
LOG_D(NR_MAC,
|
||||||
"%4d.%2d Scheduling pucch reception in %4d.%2d: bits SR %d, ACK %d, CSI %d on res %d\n",
|
"%4d.%2d Scheduling pucch reception in %4d.%2d: bits SR %d, ACK %d, CSI %d on res %d\n",
|
||||||
frame,
|
frame,
|
||||||
slot,
|
slot,
|
||||||
@@ -243,7 +243,7 @@ void compute_csi_bitlen(NR_CSI_MeasConfig_t *csi_MeasConfig, NR_UE_info_t *UE_in
|
|||||||
csi_report->CSI_report_bitlen.diff_rsrp_bitlen =0;
|
csi_report->CSI_report_bitlen.diff_rsrp_bitlen =0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_I (MAC, "UCI: CSI_bit len : ssbri %d, rsrp: %d, diff_rsrp: %d\n",
|
LOG_I (NR_MAC, "UCI: CSI_bit len : ssbri %d, rsrp: %d, diff_rsrp: %d\n",
|
||||||
csi_report->CSI_report_bitlen.cri_ssbri_bitlen,
|
csi_report->CSI_report_bitlen.cri_ssbri_bitlen,
|
||||||
csi_report->CSI_report_bitlen.rsrp_bitlen,
|
csi_report->CSI_report_bitlen.rsrp_bitlen,
|
||||||
csi_report->CSI_report_bitlen.diff_rsrp_bitlen);
|
csi_report->CSI_report_bitlen.diff_rsrp_bitlen);
|
||||||
@@ -501,7 +501,7 @@ void nr_csi_meas_reporting(int Mod_idP,
|
|||||||
// preparation is done in first slot of tdd period
|
// preparation is done in first slot of tdd period
|
||||||
if (frame % (period / n_slots_frame) != offset / n_slots_frame)
|
if (frame % (period / n_slots_frame) != offset / n_slots_frame)
|
||||||
continue;
|
continue;
|
||||||
LOG_D(MAC, "CSI in frame %d slot %d\n", frame, sched_slot);
|
LOG_D(NR_MAC, "CSI in frame %d slot %d\n", frame, sched_slot);
|
||||||
|
|
||||||
const NR_PUCCH_CSI_Resource_t *pucchcsires = csirep->reportConfigType.choice.periodic->pucch_CSI_ResourceList.list.array[0];
|
const NR_PUCCH_CSI_Resource_t *pucchcsires = csirep->reportConfigType.choice.periodic->pucch_CSI_ResourceList.list.array[0];
|
||||||
const NR_PUCCH_ResourceSet_t *pucchresset = pucch_Config->resourceSetToAddModList->list.array[1]; // set with formats >1
|
const NR_PUCCH_ResourceSet_t *pucchresset = pucch_Config->resourceSetToAddModList->list.array[1]; // set with formats >1
|
||||||
@@ -583,7 +583,7 @@ static void handle_dl_harq(module_id_t mod_id,
|
|||||||
harq->ndi ^= 1;
|
harq->ndi ^= 1;
|
||||||
NR_mac_stats_t *stats = &UE_info->mac_stats[UE_id];
|
NR_mac_stats_t *stats = &UE_info->mac_stats[UE_id];
|
||||||
stats->dlsch_errors++;
|
stats->dlsch_errors++;
|
||||||
LOG_D(MAC, "retransmission error for UE %d (total %d)\n", UE_id, stats->dlsch_errors);
|
LOG_D(NR_MAC, "retransmission error for UE %d (total %d)\n", UE_id, stats->dlsch_errors);
|
||||||
} else {
|
} else {
|
||||||
add_tail_nr_list(&UE_info->UE_sched_ctrl[UE_id].retrans_dl_harq, harq_pid);
|
add_tail_nr_list(&UE_info->UE_sched_ctrl[UE_id].retrans_dl_harq, harq_pid);
|
||||||
harq->round++;
|
harq->round++;
|
||||||
@@ -609,7 +609,7 @@ int checkTargetSSBInFirst64TCIStates_pdschConfig(int ssb_index_t, int Mod_idP, i
|
|||||||
else if(tci->qcl_Type2 != NULL && tci->qcl_Type2->referenceSignal.present == NR_QCL_Info__referenceSignal_PR_ssb) {
|
else if(tci->qcl_Type2 != NULL && tci->qcl_Type2->referenceSignal.present == NR_QCL_Info__referenceSignal_PR_ssb) {
|
||||||
if(tci->qcl_Type2->referenceSignal.choice.ssb == ssb_index_t)
|
if(tci->qcl_Type2->referenceSignal.choice.ssb == ssb_index_t)
|
||||||
return tci->tci_StateId; // returned TCI state ID
|
return tci->tci_StateId; // returned TCI state ID
|
||||||
} else LOG_I(MAC,"SSB index is not found in first 64 TCI states of TCI_statestoAddModList[%d]", i);
|
} else LOG_I(NR_MAC,"SSB index is not found in first 64 TCI states of TCI_statestoAddModList[%d]", i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -733,7 +733,7 @@ void tci_handling(module_id_t Mod_idP, int UE_id, frame_t frame, slot_t slot) {
|
|||||||
stats->cumul_rsrp += strongest_ssb_rsrp;
|
stats->cumul_rsrp += strongest_ssb_rsrp;
|
||||||
stats->num_rsrp_meas++;
|
stats->num_rsrp_meas++;
|
||||||
ssb_rsrp[idx * nb_of_csi_ssb_report] = strongest_ssb_rsrp;
|
ssb_rsrp[idx * nb_of_csi_ssb_report] = strongest_ssb_rsrp;
|
||||||
LOG_D(MAC,"ssb_rsrp = %d\n",strongest_ssb_rsrp);
|
LOG_D(NR_MAC,"ssb_rsrp = %d\n",strongest_ssb_rsrp);
|
||||||
|
|
||||||
//if current ssb rsrp is greater than better rsrp
|
//if current ssb rsrp is greater than better rsrp
|
||||||
if(ssb_rsrp[idx * nb_of_csi_ssb_report] > better_rsrp_reported) {
|
if(ssb_rsrp[idx * nb_of_csi_ssb_report] > better_rsrp_reported) {
|
||||||
@@ -756,7 +756,7 @@ void tci_handling(module_id_t Mod_idP, int UE_id, frame_t frame, slot_t slot) {
|
|||||||
if(ssb_index[target_ssb_beam_index] != ssb_index[curr_ssb_beam_index] && ssb_rsrp[target_ssb_beam_index] > ssb_rsrp[curr_ssb_beam_index]) {
|
if(ssb_index[target_ssb_beam_index] != ssb_index[curr_ssb_beam_index] && ssb_rsrp[target_ssb_beam_index] > ssb_rsrp[curr_ssb_beam_index]) {
|
||||||
if( ssb_rsrp[target_ssb_beam_index] - ssb_rsrp[curr_ssb_beam_index] > L1_RSRP_HYSTERIS) {
|
if( ssb_rsrp[target_ssb_beam_index] - ssb_rsrp[curr_ssb_beam_index] > L1_RSRP_HYSTERIS) {
|
||||||
is_triggering_ssb_beam_switch = 1;
|
is_triggering_ssb_beam_switch = 1;
|
||||||
LOG_D(MAC, "Triggering ssb beam switching using tci\n");
|
LOG_D(NR_MAC, "Triggering ssb beam switching using tci\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -950,7 +950,7 @@ void extract_pucch_csi_report (NR_CSI_MeasConfig_t *csi_MeasConfig,
|
|||||||
*payload >>= 4;
|
*payload >>= 4;
|
||||||
}
|
}
|
||||||
UE_info->csi_report_template[UE_id][csi_report_id].nb_of_csi_ssb_report++;
|
UE_info->csi_report_template[UE_id][csi_report_id].nb_of_csi_ssb_report++;
|
||||||
LOG_D(MAC,"csi_payload size = %d, rsrp_id = %d\n",payload_size, sched_ctrl->CSI_report[idx].choice.ssb_cri_report.RSRP);
|
LOG_D(NR_MAC,"csi_payload size = %d, rsrp_id = %d\n",payload_size, sched_ctrl->CSI_report[idx].choice.ssb_cri_report.RSRP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -974,7 +974,7 @@ static NR_UE_harq_t *find_harq(module_id_t mod_id, frame_t frame, sub_frame_t sl
|
|||||||
/* old feedbacks we missed: mark for retransmission */
|
/* old feedbacks we missed: mark for retransmission */
|
||||||
while (harq->feedback_frame != frame
|
while (harq->feedback_frame != frame
|
||||||
|| (harq->feedback_frame == frame && harq->feedback_slot < slot)) {
|
|| (harq->feedback_frame == frame && harq->feedback_slot < slot)) {
|
||||||
LOG_W(MAC,
|
LOG_W(NR_MAC,
|
||||||
"expected HARQ pid %d feedback at %d.%d, but is at %d.%d instead (HARQ feedback is in the past)\n",
|
"expected HARQ pid %d feedback at %d.%d, but is at %d.%d instead (HARQ feedback is in the past)\n",
|
||||||
pid,
|
pid,
|
||||||
harq->feedback_frame,
|
harq->feedback_frame,
|
||||||
@@ -990,7 +990,7 @@ static NR_UE_harq_t *find_harq(module_id_t mod_id, frame_t frame, sub_frame_t sl
|
|||||||
}
|
}
|
||||||
/* feedbacks that we wait for in the future: don't do anything */
|
/* feedbacks that we wait for in the future: don't do anything */
|
||||||
if (harq->feedback_slot > slot) {
|
if (harq->feedback_slot > slot) {
|
||||||
LOG_W(MAC,
|
LOG_W(NR_MAC,
|
||||||
"expected HARQ pid %d feedback at %d.%d, but is at %d.%d instead (HARQ feedback is in the future)\n",
|
"expected HARQ pid %d feedback at %d.%d, but is at %d.%d instead (HARQ feedback is in the future)\n",
|
||||||
pid,
|
pid,
|
||||||
harq->feedback_frame,
|
harq->feedback_frame,
|
||||||
@@ -1009,7 +1009,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
|
|||||||
{
|
{
|
||||||
int UE_id = find_nr_UE_id(mod_id, uci_01->rnti);
|
int UE_id = find_nr_UE_id(mod_id, uci_01->rnti);
|
||||||
if (UE_id < 0) {
|
if (UE_id < 0) {
|
||||||
LOG_E(MAC, "%s(): unknown RNTI %04x in PUCCH UCI\n", __func__, uci_01->rnti);
|
LOG_E(NR_MAC, "%s(): unknown RNTI %04x in PUCCH UCI\n", __func__, uci_01->rnti);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NR_UE_info_t *UE_info = &RC.nrmac[mod_id]->UE_info;
|
NR_UE_info_t *UE_info = &RC.nrmac[mod_id]->UE_info;
|
||||||
@@ -1034,7 +1034,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id,
|
|||||||
if (uci_01->pduBitmap & 0x1 && uci_01->sr->sr_indication && uci_01->sr->sr_confidence_level == 0 && uci_01->ul_cqi >= 148) {
|
if (uci_01->pduBitmap & 0x1 && uci_01->sr->sr_indication && uci_01->sr->sr_confidence_level == 0 && uci_01->ul_cqi >= 148) {
|
||||||
// SR detected with SNR >= 10dB
|
// SR detected with SNR >= 10dB
|
||||||
sched_ctrl->SR |= true;
|
sched_ctrl->SR |= true;
|
||||||
LOG_D(MAC, "SR UE %04x ul_cqi %d\n", uci_01->rnti, uci_01->ul_cqi);
|
LOG_D(NR_MAC, "SR UE %04x ul_cqi %d\n", uci_01->rnti, uci_01->ul_cqi);
|
||||||
}
|
}
|
||||||
|
|
||||||
// tpc (power control) only if we received AckNack or positive SR. For a
|
// tpc (power control) only if we received AckNack or positive SR. For a
|
||||||
@@ -1052,7 +1052,7 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
|
|||||||
{
|
{
|
||||||
int UE_id = find_nr_UE_id(mod_id, uci_234->rnti);
|
int UE_id = find_nr_UE_id(mod_id, uci_234->rnti);
|
||||||
if (UE_id < 0) {
|
if (UE_id < 0) {
|
||||||
LOG_E(MAC, "%s(): unknown RNTI %04x in PUCCH UCI\n", __func__, uci_234->rnti);
|
LOG_E(NR_MAC, "%s(): unknown RNTI %04x in PUCCH UCI\n", __func__, uci_234->rnti);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AssertFatal(RC.nrmac[mod_id]->UE_info.CellGroup[UE_id],"Cellgroup is null for UE %d/%x\n",UE_id,uci_234->rnti);
|
AssertFatal(RC.nrmac[mod_id]->UE_info.CellGroup[UE_id],"Cellgroup is null for UE %d/%x\n",UE_id,uci_234->rnti);
|
||||||
@@ -1161,7 +1161,7 @@ int nr_acknack_scheduling(int mod_id,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_D(MAC,"1. DL slot %d, UL_ACK %d\n",slot,pucch->ul_slot);
|
LOG_D(NR_MAC,"1. DL slot %d, UL_ACK %d\n",slot,pucch->ul_slot);
|
||||||
/* if the UE's next PUCCH occasion is after the possible UL slots (within the
|
/* if the UE's next PUCCH occasion is after the possible UL slots (within the
|
||||||
* same frame) or wrapped around to the next frame, then we assume there is
|
* same frame) or wrapped around to the next frame, then we assume there is
|
||||||
* no possible PUCCH allocation anymore */
|
* no possible PUCCH allocation anymore */
|
||||||
@@ -1228,14 +1228,14 @@ int nr_acknack_scheduling(int mod_id,
|
|||||||
// Find the right timing_indicator value.
|
// Find the right timing_indicator value.
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i < 8) {
|
while (i < 8) {
|
||||||
LOG_D(MAC,"pdsch_to_harq_feedback[%d] = %d (pucch->ul_slot %d - slot %d)\n",
|
LOG_D(NR_MAC,"pdsch_to_harq_feedback[%d] = %d (pucch->ul_slot %d - slot %d)\n",
|
||||||
i,pdsch_to_harq_feedback[i],pucch->ul_slot,slot);
|
i,pdsch_to_harq_feedback[i],pucch->ul_slot,slot);
|
||||||
if (pdsch_to_harq_feedback[i] == pucch->ul_slot - slot)
|
if (pdsch_to_harq_feedback[i] == pucch->ul_slot - slot)
|
||||||
break;
|
break;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
if (i >= 8) {
|
if (i >= 8) {
|
||||||
LOG_W(MAC,
|
LOG_W(NR_MAC,
|
||||||
"%4d.%2d could not find pdsch_to_harq_feedback for UE %d: earliest "
|
"%4d.%2d could not find pdsch_to_harq_feedback for UE %d: earliest "
|
||||||
"ack slot %d\n",
|
"ack slot %d\n",
|
||||||
frame,
|
frame,
|
||||||
@@ -1276,7 +1276,7 @@ int nr_acknack_scheduling(int mod_id,
|
|||||||
|
|
||||||
pucch->timing_indicator = i; // index in the list of timing indicators
|
pucch->timing_indicator = i; // index in the list of timing indicators
|
||||||
|
|
||||||
LOG_D(MAC,"2. DL slot %d, UL_ACK %d (index %d)\n",slot,pucch->ul_slot,i);
|
LOG_D(NR_MAC,"2. DL slot %d, UL_ACK %d (index %d)\n",slot,pucch->ul_slot,i);
|
||||||
|
|
||||||
pucch->dai_c++;
|
pucch->dai_c++;
|
||||||
pucch->resource_indicator = 0; // each UE has dedicated PUCCH resources
|
pucch->resource_indicator = 0; // each UE has dedicated PUCCH resources
|
||||||
@@ -1302,7 +1302,7 @@ int nr_acknack_scheduling(int mod_id,
|
|||||||
uint16_t *vrb_map_UL = &RC.nrmac[mod_id]->common_channels[CC_id].vrb_map_UL[pucch->ul_slot * MAX_BWP_SIZE];
|
uint16_t *vrb_map_UL = &RC.nrmac[mod_id]->common_channels[CC_id].vrb_map_UL[pucch->ul_slot * MAX_BWP_SIZE];
|
||||||
const uint16_t symb = 1 << resource->format.choice.format0->startingSymbolIndex;
|
const uint16_t symb = 1 << resource->format.choice.format0->startingSymbolIndex;
|
||||||
if ((vrb_map_UL[resource->startingPRB] & symb) != 0)
|
if ((vrb_map_UL[resource->startingPRB] & symb) != 0)
|
||||||
LOG_W(MAC, "symbol 0x%x is not free for PUCCH alloc in vrb_map_UL at RB %ld and slot %d.%d\n", symb, resource->startingPRB, pucch->frame, pucch->ul_slot);
|
LOG_W(NR_MAC, "symbol 0x%x is not free for PUCCH alloc in vrb_map_UL at RB %ld and slot %d.%d\n", symb, resource->startingPRB, pucch->frame, pucch->ul_slot);
|
||||||
vrb_map_UL[resource->startingPRB] |= symb;
|
vrb_map_UL[resource->startingPRB] |= symb;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1448,6 +1448,7 @@ void nr_sr_reporting(int Mod_idP, frame_t SFN, sub_frame_t slot)
|
|||||||
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
for (int UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
||||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
||||||
|
|
||||||
|
if (sched_ctrl->ul_failure==1) continue;
|
||||||
NR_PUCCH_Config_t *pucch_Config = NULL;
|
NR_PUCCH_Config_t *pucch_Config = NULL;
|
||||||
if (sched_ctrl->active_ubwp) {
|
if (sched_ctrl->active_ubwp) {
|
||||||
pucch_Config = sched_ctrl->active_ubwp->bwp_Dedicated->pucch_Config->choice.setup;
|
pucch_Config = sched_ctrl->active_ubwp->bwp_Dedicated->pucch_Config->choice.setup;
|
||||||
@@ -1459,7 +1460,8 @@ void nr_sr_reporting(int Mod_idP, frame_t SFN, sub_frame_t slot)
|
|||||||
RC.nrmac[Mod_idP]->UE_info.CellGroup[UE_id]->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup) {
|
RC.nrmac[Mod_idP]->UE_info.CellGroup[UE_id]->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup) {
|
||||||
pucch_Config = RC.nrmac[Mod_idP]->UE_info.CellGroup[UE_id]->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
|
pucch_Config = RC.nrmac[Mod_idP]->UE_info.CellGroup[UE_id]->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
|
||||||
}
|
}
|
||||||
|
else continue;
|
||||||
|
if (!pucch_Config->schedulingRequestResourceToAddModList) continue;
|
||||||
AssertFatal(pucch_Config->schedulingRequestResourceToAddModList->list.count>0,"NO SR configuration available");
|
AssertFatal(pucch_Config->schedulingRequestResourceToAddModList->list.count>0,"NO SR configuration available");
|
||||||
|
|
||||||
for (int SR_resource_id =0; SR_resource_id < pucch_Config->schedulingRequestResourceToAddModList->list.count;SR_resource_id++) {
|
for (int SR_resource_id =0; SR_resource_id < pucch_Config->schedulingRequestResourceToAddModList->list.count;SR_resource_id++) {
|
||||||
@@ -1470,9 +1472,10 @@ void nr_sr_reporting(int Mod_idP, frame_t SFN, sub_frame_t slot)
|
|||||||
periodicity__SRR(SchedulingRequestResourceConfig,&SR_period,&SR_offset);
|
periodicity__SRR(SchedulingRequestResourceConfig,&SR_period,&SR_offset);
|
||||||
// convert to int to avoid underflow of uint
|
// convert to int to avoid underflow of uint
|
||||||
int sfn_sf = SFN * n_slots_frame + slot;
|
int sfn_sf = SFN * n_slots_frame + slot;
|
||||||
|
LOG_D(NR_MAC,"SR_resource_id %d: SR_period %d, SR_offset %d\n",SR_resource_id,SR_period,SR_offset);
|
||||||
if ((sfn_sf - SR_offset) % SR_period != 0)
|
if ((sfn_sf - SR_offset) % SR_period != 0)
|
||||||
continue;
|
continue;
|
||||||
LOG_D(MAC, "%4d.%2d Scheduling Request identified\n", SFN, slot);
|
LOG_D(NR_MAC, "%4d.%2d Scheduling Request identified\n", SFN, slot);
|
||||||
NR_PUCCH_ResourceId_t *PucchResourceId = SchedulingRequestResourceConfig->resource;
|
NR_PUCCH_ResourceId_t *PucchResourceId = SchedulingRequestResourceConfig->resource;
|
||||||
|
|
||||||
int found = -1;
|
int found = -1;
|
||||||
@@ -1504,7 +1507,7 @@ void nr_sr_reporting(int Mod_idP, frame_t SFN, sub_frame_t slot)
|
|||||||
&& pdu->initial_cyclic_shift == pucch_res->format.choice.format0->initialCyclicShift
|
&& pdu->initial_cyclic_shift == pucch_res->format.choice.format0->initialCyclicShift
|
||||||
&& pdu->nr_of_symbols == pucch_res->format.choice.format0->nrofSymbols
|
&& pdu->nr_of_symbols == pucch_res->format.choice.format0->nrofSymbols
|
||||||
&& pdu->start_symbol_index == pucch_res->format.choice.format0->startingSymbolIndex) {
|
&& pdu->start_symbol_index == pucch_res->format.choice.format0->startingSymbolIndex) {
|
||||||
LOG_D(MAC,"%4d.%2d adding SR_flag 1 to PUCCH nFAPI SR for RNTI %04x\n", SFN, slot, pdu->rnti);
|
LOG_I(NR_MAC,"%4d.%2d adding SR_flag 1 to PUCCH nFAPI SR for RNTI %04x\n", SFN, slot, pdu->rnti);
|
||||||
pdu->sr_flag = 1;
|
pdu->sr_flag = 1;
|
||||||
nfapi_allocated = true;
|
nfapi_allocated = true;
|
||||||
break;
|
break;
|
||||||
@@ -1519,7 +1522,7 @@ void nr_sr_reporting(int Mod_idP, frame_t SFN, sub_frame_t slot)
|
|||||||
NR_sched_pucch_t *curr_pucch = &sched_ctrl->sched_pucch[0];
|
NR_sched_pucch_t *curr_pucch = &sched_ctrl->sched_pucch[0];
|
||||||
if (curr_pucch->frame == SFN && curr_pucch->ul_slot == slot) {
|
if (curr_pucch->frame == SFN && curr_pucch->ul_slot == slot) {
|
||||||
if (curr_pucch->resource_indicator != found) {
|
if (curr_pucch->resource_indicator != found) {
|
||||||
LOG_W(MAC, "%4d.%2d expected PUCCH in this slot to have resource indicator of SR (%d), skipping SR\n", SFN, slot, found);
|
LOG_W(NR_MAC, "%4d.%2d expected PUCCH in this slot to have resource indicator of SR (%d), skipping SR\n", SFN, slot, found);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
curr_pucch->sr_flag = true;
|
curr_pucch->sr_flag = true;
|
||||||
|
|||||||
@@ -1034,28 +1034,29 @@ void fill_initial_SpCellConfig(rnti_t rnti,
|
|||||||
pucchres0->format.choice.format0->startingSymbolIndex=13;
|
pucchres0->format.choice.format0->startingSymbolIndex=13;
|
||||||
ASN_SEQUENCE_ADD(&pucch_Config->resourceToAddModList->list,pucchres0);
|
ASN_SEQUENCE_ADD(&pucch_Config->resourceToAddModList->list,pucchres0);
|
||||||
|
|
||||||
|
if (0) {
|
||||||
// configure Scheduling request
|
// configure Scheduling request
|
||||||
// 40 slot period
|
// 40 slot period
|
||||||
pucch_Config->schedulingRequestResourceToAddModList = calloc(1,sizeof(*pucch_Config->schedulingRequestResourceToAddModList));
|
pucch_Config->schedulingRequestResourceToAddModList = calloc(1,sizeof(*pucch_Config->schedulingRequestResourceToAddModList));
|
||||||
NR_SchedulingRequestResourceConfig_t *schedulingRequestResourceConfig = calloc(1,sizeof(*schedulingRequestResourceConfig));
|
NR_SchedulingRequestResourceConfig_t *schedulingRequestResourceConfig = calloc(1,sizeof(*schedulingRequestResourceConfig));
|
||||||
schedulingRequestResourceConfig->schedulingRequestResourceId = 1;
|
schedulingRequestResourceConfig->schedulingRequestResourceId = 1;
|
||||||
schedulingRequestResourceConfig->schedulingRequestID= 0;
|
schedulingRequestResourceConfig->schedulingRequestID= 0;
|
||||||
schedulingRequestResourceConfig->periodicityAndOffset = calloc(1,sizeof(*schedulingRequestResourceConfig->periodicityAndOffset));
|
schedulingRequestResourceConfig->periodicityAndOffset = calloc(1,sizeof(*schedulingRequestResourceConfig->periodicityAndOffset));
|
||||||
schedulingRequestResourceConfig->periodicityAndOffset->present = NR_SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl40;
|
schedulingRequestResourceConfig->periodicityAndOffset->present = NR_SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl40;
|
||||||
// note: make sure that there is no issue here. Later choose the RNTI accordingly.
|
// note: make sure that there is no issue here. Later choose the RNTI accordingly.
|
||||||
// Here we would be limited to 8 UEs on this resource (2 Frames 30 kHz SCS, 5 ms TDD periodicity => slots 8,9,18,19,28,29,38,39).
|
// Here we would be limited to 3 UEs on this resource (1 1/2 Frames 30 kHz SCS, 5 ms TDD periodicity => slots 7,8,9).
|
||||||
// This should be a temporary resource until the first RRCReconfiguration gives new pucch resources.
|
// This should be a temporary resource until the first RRCReconfiguration gives new pucch resources.
|
||||||
// Check for above configuration and exit for now if it is not the case
|
// Check for above configuration and exit for now if it is not the case
|
||||||
AssertFatal(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing==NR_SubcarrierSpacing_kHz30,
|
AssertFatal(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing==NR_SubcarrierSpacing_kHz30,
|
||||||
"SCS != 30kHz\n");
|
"SCS != 30kHz\n");
|
||||||
AssertFatal(scc->tdd_UL_DL_ConfigurationCommon->pattern1.dl_UL_TransmissionPeriodicity==NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms5,
|
AssertFatal(scc->tdd_UL_DL_ConfigurationCommon->pattern1.dl_UL_TransmissionPeriodicity==NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms5,
|
||||||
"TDD period != 5ms : %ld\n",scc->tdd_UL_DL_ConfigurationCommon->pattern1.dl_UL_TransmissionPeriodicity);
|
"TDD period != 5ms : %ld\n",scc->tdd_UL_DL_ConfigurationCommon->pattern1.dl_UL_TransmissionPeriodicity);
|
||||||
|
|
||||||
schedulingRequestResourceConfig->periodicityAndOffset->choice.sl40 = 10*((rnti>>1)&3) + (rnti&2);
|
schedulingRequestResourceConfig->periodicityAndOffset->choice.sl40 = (10*(rnti&3));//(10*((rnti>>1)&3)) + (rnti&1);
|
||||||
schedulingRequestResourceConfig->resource = calloc(1,sizeof(*schedulingRequestResourceConfig->resource));
|
schedulingRequestResourceConfig->resource = calloc(1,sizeof(*schedulingRequestResourceConfig->resource));
|
||||||
*schedulingRequestResourceConfig->resource = 0;
|
*schedulingRequestResourceConfig->resource = 0;
|
||||||
ASN_SEQUENCE_ADD(&pucch_Config->schedulingRequestResourceToAddModList->list,schedulingRequestResourceConfig);
|
ASN_SEQUENCE_ADD(&pucch_Config->schedulingRequestResourceToAddModList->list,schedulingRequestResourceConfig);
|
||||||
|
}
|
||||||
SpCellConfig->spCellConfigDedicated->initialDownlinkBWP = calloc(1,sizeof(*SpCellConfig->spCellConfigDedicated->initialDownlinkBWP));
|
SpCellConfig->spCellConfigDedicated->initialDownlinkBWP = calloc(1,sizeof(*SpCellConfig->spCellConfigDedicated->initialDownlinkBWP));
|
||||||
NR_BWP_DownlinkDedicated_t *bwp_Dedicated = SpCellConfig->spCellConfigDedicated->initialDownlinkBWP;
|
NR_BWP_DownlinkDedicated_t *bwp_Dedicated = SpCellConfig->spCellConfigDedicated->initialDownlinkBWP;
|
||||||
bwp_Dedicated->pdcch_Config=calloc(1,sizeof(*bwp_Dedicated->pdcch_Config));
|
bwp_Dedicated->pdcch_Config=calloc(1,sizeof(*bwp_Dedicated->pdcch_Config));
|
||||||
@@ -1241,15 +1242,17 @@ void fill_initial_cellGroupConfig(rnti_t rnti,
|
|||||||
/* mac CellGroup Config */
|
/* mac CellGroup Config */
|
||||||
if (1) {
|
if (1) {
|
||||||
mac_CellGroupConfig = calloc(1, sizeof(*mac_CellGroupConfig));
|
mac_CellGroupConfig = calloc(1, sizeof(*mac_CellGroupConfig));
|
||||||
mac_CellGroupConfig->schedulingRequestConfig = calloc(1, sizeof(*mac_CellGroupConfig->schedulingRequestConfig));
|
if (0) {
|
||||||
mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList = CALLOC(1,sizeof(*mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList));
|
mac_CellGroupConfig->schedulingRequestConfig = calloc(1, sizeof(*mac_CellGroupConfig->schedulingRequestConfig));
|
||||||
struct NR_SchedulingRequestToAddMod *schedulingrequestlist;
|
mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList = CALLOC(1,sizeof(*mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList));
|
||||||
schedulingrequestlist = CALLOC(1,sizeof(*schedulingrequestlist));
|
struct NR_SchedulingRequestToAddMod *schedulingrequestlist;
|
||||||
schedulingrequestlist->schedulingRequestId = 0;
|
schedulingrequestlist = CALLOC(1,sizeof(*schedulingrequestlist));
|
||||||
schedulingrequestlist->sr_ProhibitTimer = CALLOC(1,sizeof(*schedulingrequestlist->sr_ProhibitTimer));
|
schedulingrequestlist->schedulingRequestId = 0;
|
||||||
*(schedulingrequestlist->sr_ProhibitTimer) = 0;
|
schedulingrequestlist->sr_ProhibitTimer = CALLOC(1,sizeof(*schedulingrequestlist->sr_ProhibitTimer));
|
||||||
schedulingrequestlist->sr_TransMax = 0;
|
*(schedulingrequestlist->sr_ProhibitTimer) = 0;
|
||||||
ASN_SEQUENCE_ADD(&(mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList->list),schedulingrequestlist);
|
schedulingrequestlist->sr_TransMax = 0;
|
||||||
|
ASN_SEQUENCE_ADD(&(mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList->list),schedulingrequestlist);
|
||||||
|
}
|
||||||
mac_CellGroupConfig->bsr_Config = calloc(1, sizeof(*mac_CellGroupConfig->bsr_Config));
|
mac_CellGroupConfig->bsr_Config = calloc(1, sizeof(*mac_CellGroupConfig->bsr_Config));
|
||||||
mac_CellGroupConfig->bsr_Config->periodicBSR_Timer = NR_BSR_Config__periodicBSR_Timer_sf10;
|
mac_CellGroupConfig->bsr_Config->periodicBSR_Timer = NR_BSR_Config__periodicBSR_Timer_sf10;
|
||||||
mac_CellGroupConfig->bsr_Config->retxBSR_Timer = NR_BSR_Config__retxBSR_Timer_sf80;
|
mac_CellGroupConfig->bsr_Config->retxBSR_Timer = NR_BSR_Config__retxBSR_Timer_sf80;
|
||||||
|
|||||||
@@ -1032,7 +1032,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
|
|||||||
schedulingRequestResourceConfig->schedulingRequestID = 0;
|
schedulingRequestResourceConfig->schedulingRequestID = 0;
|
||||||
schedulingRequestResourceConfig->periodicityAndOffset = calloc(1,sizeof(*schedulingRequestResourceConfig->periodicityAndOffset));
|
schedulingRequestResourceConfig->periodicityAndOffset = calloc(1,sizeof(*schedulingRequestResourceConfig->periodicityAndOffset));
|
||||||
schedulingRequestResourceConfig->periodicityAndOffset->present = NR_SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl10;
|
schedulingRequestResourceConfig->periodicityAndOffset->present = NR_SchedulingRequestResourceConfig__periodicityAndOffset_PR_sl10;
|
||||||
schedulingRequestResourceConfig->periodicityAndOffset->choice.sl10 = 7;
|
schedulingRequestResourceConfig->periodicityAndOffset->choice.sl10 = 2;
|
||||||
schedulingRequestResourceConfig->resource = calloc(1,sizeof(*schedulingRequestResourceConfig->resource));
|
schedulingRequestResourceConfig->resource = calloc(1,sizeof(*schedulingRequestResourceConfig->resource));
|
||||||
*schedulingRequestResourceConfig->resource = 1;
|
*schedulingRequestResourceConfig->resource = 1;
|
||||||
ASN_SEQUENCE_ADD(&pucch_Config->schedulingRequestResourceToAddModList->list,schedulingRequestResourceConfig);
|
ASN_SEQUENCE_ADD(&pucch_Config->schedulingRequestResourceToAddModList->list,schedulingRequestResourceConfig);
|
||||||
|
|||||||
Reference in New Issue
Block a user