some bug fixes for RA procedure in UE
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7765 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -107,6 +107,7 @@ int8_t get_DELTA_PREAMBLE(module_id_t module_idP,int CC_id)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// This routine implements Section 5.1.2 (UE Random Access Resource Selection) from 36.321
|
/// This routine implements Section 5.1.2 (UE Random Access Resource Selection) from 36.321
|
||||||
void get_prach_resources(module_id_t module_idP,
|
void get_prach_resources(module_id_t module_idP,
|
||||||
int CC_id,
|
int CC_id,
|
||||||
@@ -121,6 +122,11 @@ void get_prach_resources(module_id_t module_idP,
|
|||||||
RACH_ConfigCommon_t *rach_ConfigCommon = NULL;
|
RACH_ConfigCommon_t *rach_ConfigCommon = NULL;
|
||||||
uint8_t noGroupB = 0;
|
uint8_t noGroupB = 0;
|
||||||
uint8_t f_id = 0,num_prach=0;
|
uint8_t f_id = 0,num_prach=0;
|
||||||
|
int numberOfRA_Preambles = (1+rach_ConfigCommon->preambleInfo.numberOfRA_Preambles)<<2;
|
||||||
|
int messageSizeGroupA;
|
||||||
|
int sizeOfRA_PreamblesGroupA;
|
||||||
|
int messagePowerOffsetGroupB;
|
||||||
|
int PLThreshold;
|
||||||
|
|
||||||
if (CC_id>0) {
|
if (CC_id>0) {
|
||||||
LOG_E(MAC,"Transmission on secondary CCs is not supported yet\n");
|
LOG_E(MAC,"Transmission on secondary CCs is not supported yet\n");
|
||||||
@@ -147,8 +153,53 @@ void get_prach_resources(module_id_t module_idP,
|
|||||||
if (!rach_ConfigCommon->preambleInfo.preamblesGroupAConfig) {
|
if (!rach_ConfigCommon->preambleInfo.preamblesGroupAConfig) {
|
||||||
noGroupB = 1;
|
noGroupB = 1;
|
||||||
} else {
|
} else {
|
||||||
if (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA ==
|
sizeOfRA_PreamblesGroupA = (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA+1)<<2;
|
||||||
rach_ConfigCommon->preambleInfo.numberOfRA_Preambles) {
|
switch (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messageSizeGroupA) {
|
||||||
|
case 0:
|
||||||
|
messageSizeGroupA = 56;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
messageSizeGroupA = 144;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
messageSizeGroupA = 208;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
messageSizeGroupA = 256;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messagePowerOffsetGroupB) {
|
||||||
|
case 0:
|
||||||
|
messagePowerOffsetGroupB = -9999;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
messagePowerOffsetGroupB = 0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
messagePowerOffsetGroupB = 5;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
messagePowerOffsetGroupB = 8;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
messagePowerOffsetGroupB = 10;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
messagePowerOffsetGroupB = 12;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
messagePowerOffsetGroupB = 15;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
messagePowerOffsetGroupB = 18;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
PLThreshold = 0 - get_DELTA_PREAMBLE(module_idP,CC_id) - get_Po_NOMINAL_PUSCH(module_idP,CC_id) - messagePowerOffsetGroupB;
|
||||||
|
// Note Pcmax is set to 0 here, we have to fix this
|
||||||
|
|
||||||
|
if (sizeOfRA_PreamblesGroupA == numberOfRA_Preambles) {
|
||||||
noGroupB = 1;
|
noGroupB = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -156,20 +207,18 @@ void get_prach_resources(module_id_t module_idP,
|
|||||||
if (first_Msg3 == 1) {
|
if (first_Msg3 == 1) {
|
||||||
if (noGroupB == 1) {
|
if (noGroupB == 1) {
|
||||||
// use Group A procedure
|
// use Group A procedure
|
||||||
UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())&0x3f;
|
UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%numberOfRA_Preambles;
|
||||||
UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0;
|
UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0;
|
||||||
UE_mac_inst[module_idP].RA_usedGroupA = 1;
|
UE_mac_inst[module_idP].RA_usedGroupA = 1;
|
||||||
} else if ((Msg3_size < rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messageSizeGroupA) ||
|
} else if ((Msg3_size <messageSizeGroupA) ||
|
||||||
(mac_xface->get_PL(module_idP,0,eNB_index) > UE_mac_inst[module_idP].RA_maxPL)) {
|
(mac_xface->get_PL(module_idP,0,eNB_index) > PLThreshold)) {
|
||||||
// use Group A procedure
|
// use Group A procedure
|
||||||
UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA;
|
UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%sizeOfRA_PreamblesGroupA;
|
||||||
UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0;
|
UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0;
|
||||||
UE_mac_inst[module_idP].RA_usedGroupA = 1;
|
UE_mac_inst[module_idP].RA_usedGroupA = 1;
|
||||||
} else { // use Group B
|
} else { // use Group B
|
||||||
UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex =
|
UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = sizeOfRA_PreamblesGroupA +
|
||||||
rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA +
|
(taus())%(numberOfRA_Preambles - sizeOfRA_PreamblesGroupA);
|
||||||
(taus())%(rach_ConfigCommon->preambleInfo.numberOfRA_Preambles -
|
|
||||||
rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA);
|
|
||||||
UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0;
|
UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0;
|
||||||
UE_mac_inst[module_idP].RA_usedGroupA = 0;
|
UE_mac_inst[module_idP].RA_usedGroupA = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user