proper adaptation of seed depending on iq replay/record or not
This commit is contained in:
@@ -485,8 +485,14 @@ void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t
|
|||||||
long deltaPreamble_Msg3 = 0;
|
long deltaPreamble_Msg3 = 0;
|
||||||
uint8_t noGroupB = 0;
|
uint8_t noGroupB = 0;
|
||||||
// Random seed generation
|
// Random seed generation
|
||||||
long long tmp = rdtsc_oai();
|
unsigned int seed;
|
||||||
unsigned short int *seed = (unsigned short int*)&tmp;
|
|
||||||
|
if (IS_SOFTMODEM_IQPLAYER || IS_SOFTMODEM_IQRECORDER) {
|
||||||
|
// Overwrite seed with non-random seed for IQ player/recorder
|
||||||
|
seed = 1;
|
||||||
|
} else {
|
||||||
|
seed=(unsigned int) (rdtsc_oai() && ~0);
|
||||||
|
}
|
||||||
|
|
||||||
RA_config_t *ra = &mac->ra;
|
RA_config_t *ra = &mac->ra;
|
||||||
NR_RACH_ConfigCommon_t *setup;
|
NR_RACH_ConfigCommon_t *setup;
|
||||||
@@ -500,11 +506,6 @@ void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t
|
|||||||
LOG_D(MAC, "In %s: deltaPreamble_Msg3 set to %ld\n", __FUNCTION__, deltaPreamble_Msg3);
|
LOG_D(MAC, "In %s: deltaPreamble_Msg3 set to %ld\n", __FUNCTION__, deltaPreamble_Msg3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_SOFTMODEM_IQPLAYER || IS_SOFTMODEM_IQRECORDER) {
|
|
||||||
// Overwrite seed with non-random seed for IQ player/recorder
|
|
||||||
tmp = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!setup->groupBconfigured) {
|
if (!setup->groupBconfigured) {
|
||||||
noGroupB = 1;
|
noGroupB = 1;
|
||||||
LOG_D(MAC, "In %s:%d: preambles group B is not configured...\n", __FUNCTION__, __LINE__);
|
LOG_D(MAC, "In %s:%d: preambles group B is not configured...\n", __FUNCTION__, __LINE__);
|
||||||
@@ -591,28 +592,28 @@ void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t
|
|||||||
if(ra->ra_PreambleIndex < 0 || ra->ra_PreambleIndex > 63) {
|
if(ra->ra_PreambleIndex < 0 || ra->ra_PreambleIndex > 63) {
|
||||||
if (noGroupB) {
|
if (noGroupB) {
|
||||||
// use Group A preamble
|
// use Group A preamble
|
||||||
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r((unsigned int *)seed) % ra->cb_preambles_per_ssb);
|
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r(&seed) % ra->cb_preambles_per_ssb);
|
||||||
ra->RA_usedGroupA = 1;
|
ra->RA_usedGroupA = 1;
|
||||||
} else if ((ra->Msg3_size < messageSizeGroupA) && (dl_pathloss > PLThreshold)) {
|
} else if ((ra->Msg3_size < messageSizeGroupA) && (dl_pathloss > PLThreshold)) {
|
||||||
// Group B is configured and RA preamble Group A is used
|
// Group B is configured and RA preamble Group A is used
|
||||||
// - todo add condition on CCCH_sdu_size for initiation by CCCH
|
// - todo add condition on CCCH_sdu_size for initiation by CCCH
|
||||||
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r((unsigned int *)seed) % sizeOfRA_PreamblesGroupA);
|
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r(&seed) % sizeOfRA_PreamblesGroupA);
|
||||||
ra->RA_usedGroupA = 1;
|
ra->RA_usedGroupA = 1;
|
||||||
} else {
|
} else {
|
||||||
// Group B preamble is configured and used
|
// Group B preamble is configured and used
|
||||||
// the first sizeOfRA_PreamblesGroupA RA preambles belong to RA Preambles Group A
|
// the first sizeOfRA_PreamblesGroupA RA preambles belong to RA Preambles Group A
|
||||||
// the remaining belong to RA Preambles Group B
|
// the remaining belong to RA Preambles Group B
|
||||||
ra->ra_PreambleIndex = ra->starting_preamble_nb + sizeOfRA_PreamblesGroupA + (rand_r((unsigned int *)seed) % (ra->cb_preambles_per_ssb - sizeOfRA_PreamblesGroupA));
|
ra->ra_PreambleIndex = ra->starting_preamble_nb + sizeOfRA_PreamblesGroupA + (rand_r(&seed) % (ra->cb_preambles_per_ssb - sizeOfRA_PreamblesGroupA));
|
||||||
ra->RA_usedGroupA = 0;
|
ra->RA_usedGroupA = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // Msg3 is being retransmitted
|
} else { // Msg3 is being retransmitted
|
||||||
if (ra->RA_usedGroupA && noGroupB) {
|
if (ra->RA_usedGroupA && noGroupB) {
|
||||||
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r((unsigned int *)seed) % ra->cb_preambles_per_ssb);
|
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r(&seed) % ra->cb_preambles_per_ssb);
|
||||||
} else if (ra->RA_usedGroupA && !noGroupB){
|
} else if (ra->RA_usedGroupA && !noGroupB){
|
||||||
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r((unsigned int *)seed) % sizeOfRA_PreamblesGroupA);
|
ra->ra_PreambleIndex = ra->starting_preamble_nb + (rand_r(&seed) % sizeOfRA_PreamblesGroupA);
|
||||||
} else {
|
} else {
|
||||||
ra->ra_PreambleIndex = ra->starting_preamble_nb + sizeOfRA_PreamblesGroupA + (rand_r((unsigned int *)seed) % (ra->cb_preambles_per_ssb - sizeOfRA_PreamblesGroupA));
|
ra->ra_PreambleIndex = ra->starting_preamble_nb + sizeOfRA_PreamblesGroupA + (rand_r(&seed) % (ra->cb_preambles_per_ssb - sizeOfRA_PreamblesGroupA));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1052,12 +1053,13 @@ void nr_ra_failed(uint8_t mod_id, uint8_t CC_id, NR_PRACH_RESOURCES_t *prach_res
|
|||||||
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||||
RA_config_t *ra = &mac->ra;
|
RA_config_t *ra = &mac->ra;
|
||||||
// Random seed generation
|
// Random seed generation
|
||||||
long long tmp = rdtsc_oai();
|
unsigned int seed;
|
||||||
unsigned short int *seed = (unsigned short int*)&tmp;
|
|
||||||
|
|
||||||
if (IS_SOFTMODEM_IQPLAYER || IS_SOFTMODEM_IQRECORDER) {
|
if (IS_SOFTMODEM_IQPLAYER || IS_SOFTMODEM_IQRECORDER) {
|
||||||
// Overwrite seed with non-random seed for IQ player/recorder
|
// Overwrite seed with non-random seed for IQ player/recorder
|
||||||
tmp = 1;
|
seed = 1;
|
||||||
|
} else {
|
||||||
|
seed=(unsigned int) (rdtsc_oai() && ~0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ra->first_Msg3 = 1;
|
ra->first_Msg3 = 1;
|
||||||
@@ -1071,7 +1073,7 @@ void nr_ra_failed(uint8_t mod_id, uint8_t CC_id, NR_PRACH_RESOURCES_t *prach_res
|
|||||||
LOG_D(MAC, "In %s: [UE %d][%d.%d] Maximum number of RACH attempts (%d) reached, selecting backoff time...\n",
|
LOG_D(MAC, "In %s: [UE %d][%d.%d] Maximum number of RACH attempts (%d) reached, selecting backoff time...\n",
|
||||||
__FUNCTION__, mod_id, frame, slot, ra->preambleTransMax);
|
__FUNCTION__, mod_id, frame, slot, ra->preambleTransMax);
|
||||||
|
|
||||||
ra->RA_backoff_cnt = rand_r((unsigned int *)seed) % (prach_resources->RA_PREAMBLE_BACKOFF + 1);
|
ra->RA_backoff_cnt = rand_r(&seed) % (prach_resources->RA_PREAMBLE_BACKOFF + 1);
|
||||||
prach_resources->RA_PREAMBLE_TRANSMISSION_COUNTER = 1;
|
prach_resources->RA_PREAMBLE_TRANSMISSION_COUNTER = 1;
|
||||||
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP += 2; // 2 dB increment
|
prach_resources->RA_PREAMBLE_POWER_RAMPING_STEP += 2; // 2 dB increment
|
||||||
prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER = nr_get_Po_NOMINAL_PUSCH(prach_resources, mod_id, CC_id);
|
prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER = nr_get_Po_NOMINAL_PUSCH(prach_resources, mod_id, CC_id);
|
||||||
|
|||||||
Reference in New Issue
Block a user