GNB-Changes: Enabling ulsyncvalidityDuration timer in SIB19
ntn-UlSyncValidityDuration in SIB19 from Spec 38.331 v17.12
A validity duration configured by the network for assistance information which indicates the maximum time duration
(from epochTime) during which the UE can apply assistance information without having acquired new assistance information.
The unit of ntn-UlSyncValidityDuration is second. Value s5 corresponds to 5 s, value s10 indicate 10 s and so on.
ntn-UlSyncValidityDuration-r17 ENUMERATED{ s5, s10, s15, s20, s25, s30, s35,s40, s45, s50, s55, s60, s120, s180, s240, s900}
Implementation of epochtime is under discussion.
It can be configured in configuration file according to the above enumeration. For GEO - 240s, MEO - 20s, LEO-5s can be used.
This commit is contained in:
@@ -124,6 +124,7 @@
|
||||
#define GNB_CONFIG_STRING_NROFUPLINKSYMBOLS2 "nrofUplinkSymbols2"
|
||||
#define GNB_CONFIG_STRING_SSPBCHBLOCKPOWER "ssPBCH_BlockPower"
|
||||
|
||||
#define GNB_CONFIG_STRING_ULSYNCVALIDITYDURATION "ntn-UlSyncValidityDuration-r17"
|
||||
#define GNB_CONFIG_STRING_CELLSPECIFICKOFFSET "cellSpecificKoffset_r17"
|
||||
#define GNB_CONFIG_STRING_EPHEMERIS_POSITION_X "positionX-r17"
|
||||
#define GNB_CONFIG_STRING_EPHEMERIS_POSITION_Y "positionY-r17"
|
||||
@@ -250,6 +251,7 @@
|
||||
{GNB_CONFIG_STRING_NROFUPLINKSLOTS,NULL,0,.i64ptr=&scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSlots,.defint64val=2,TYPE_INT64,0},\
|
||||
{GNB_CONFIG_STRING_NROFUPLINKSYMBOLS,NULL,0,.i64ptr=&scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSymbols,.defint64val=4,TYPE_INT64,0},\
|
||||
{GNB_CONFIG_STRING_SSPBCHBLOCKPOWER,NULL,0,.i64ptr=&scc->ss_PBCH_BlockPower,.defint64val=20,TYPE_INT64,0}, \
|
||||
{GNB_CONFIG_STRING_ULSYNCVALIDITYDURATION,NULL,0,.i64ptr=scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17,.defint64val=0,TYPE_INT64,0}, \
|
||||
{GNB_CONFIG_STRING_CELLSPECIFICKOFFSET,NULL,0,.i64ptr=scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17,.defint64val=0,TYPE_INT64,0}, \
|
||||
{GNB_CONFIG_STRING_EPHEMERIS_POSITION_X,NULL,0,.i64ptr=&scc->ext2->ntn_Config_r17->ephemerisInfo_r17->choice.positionVelocity_r17->positionX_r17,.defint64val=LONG_MAX,TYPE_INT64,0}, \
|
||||
{GNB_CONFIG_STRING_EPHEMERIS_POSITION_Y,NULL,0,.i64ptr=&scc->ext2->ntn_Config_r17->ephemerisInfo_r17->choice.positionVelocity_r17->positionY_r17,.defint64val=LONG_MAX,TYPE_INT64,0}, \
|
||||
|
||||
@@ -217,6 +217,7 @@ void prepare_scc(NR_ServingCellConfigCommon_t *scc)
|
||||
|
||||
scc->ext2 = calloc_or_fail(1, sizeof(*scc->ext2));
|
||||
scc->ext2->ntn_Config_r17 = calloc_or_fail(1, sizeof(*scc->ext2->ntn_Config_r17));
|
||||
scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17 = calloc_or_fail(1, sizeof(long));
|
||||
scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17 = calloc_or_fail(1, sizeof(*scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17));
|
||||
|
||||
scc->ext2->ntn_Config_r17->ephemerisInfo_r17 = calloc_or_fail(1, sizeof(*scc->ext2->ntn_Config_r17->ephemerisInfo_r17));
|
||||
@@ -466,6 +467,40 @@ static void fix_tdd_pattern(NR_ServingCellConfigCommon_t *scc)
|
||||
}
|
||||
}
|
||||
|
||||
static int get_ulsyncvalidityduration_enum_value(int val)
|
||||
{
|
||||
int retval = -1;
|
||||
|
||||
switch (val) {
|
||||
case 5:
|
||||
case 10:
|
||||
case 15:
|
||||
case 20:
|
||||
case 25:
|
||||
case 30:
|
||||
case 35:
|
||||
case 40:
|
||||
case 45:
|
||||
case 50:
|
||||
case 55:
|
||||
retval = val / 5 - 1;
|
||||
break;
|
||||
case 60:
|
||||
case 120:
|
||||
case 180:
|
||||
case 240:
|
||||
retval = 10 + val / 60;
|
||||
break;
|
||||
case 900:
|
||||
retval = 15;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1 == 0, "ulsyncvalidityDuration in SIB19 set to invalid value in Conf file\n");
|
||||
break;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
void fix_scc(NR_ServingCellConfigCommon_t *scc, uint64_t ssbmap)
|
||||
{
|
||||
scc->ssb_PositionsInBurst->present = get_ssb_len(scc);
|
||||
@@ -573,6 +608,13 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc, uint64_t ssbmap)
|
||||
AssertFatal(*scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon < 2,
|
||||
"pucch_ResourceConfig should be 0 or 1 for now\n");
|
||||
|
||||
if (*scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17 == 0) {
|
||||
free(scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17);
|
||||
scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17 = NULL;
|
||||
} else {
|
||||
int val = get_ulsyncvalidityduration_enum_value(*scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17);
|
||||
*scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17 = val;
|
||||
}
|
||||
if (*scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17 == 0) {
|
||||
free(scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17);
|
||||
scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17 = NULL;
|
||||
@@ -597,8 +639,10 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc, uint64_t ssbmap)
|
||||
scc->ext2->ntn_Config_r17->ephemerisInfo_r17 = NULL;
|
||||
}
|
||||
|
||||
if (!scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17 && !scc->ext2->ntn_Config_r17->ta_Info_r17
|
||||
&& !scc->ext2->ntn_Config_r17->ephemerisInfo_r17) {
|
||||
if (!scc->ext2->ntn_Config_r17->ntn_UlSyncValidityDuration_r17 &&
|
||||
!scc->ext2->ntn_Config_r17->cellSpecificKoffset_r17 &&
|
||||
!scc->ext2->ntn_Config_r17->ta_Info_r17 &&
|
||||
!scc->ext2->ntn_Config_r17->ephemerisInfo_r17) {
|
||||
free(scc->ext2->ntn_Config_r17);
|
||||
free(scc->ext2);
|
||||
scc->ext2 = NULL;
|
||||
|
||||
Reference in New Issue
Block a user