Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
9c22ed6c
Commit
9c22ed6c
authored
Jun 21, 2017
by
Nick Ho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dci still need to modify
parent
d71ce5a4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
58 additions
and
29 deletions
+58
-29
openair1/PHY/defs.h
openair1/PHY/defs.h
+2
-0
openair1/PHY/defs_nb_iot.h
openair1/PHY/defs_nb_iot.h
+1
-0
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+3
-0
openair1/SCHED/phy_procedures_lte_eNb_nb_iot.c
openair1/SCHED/phy_procedures_lte_eNb_nb_iot.c
+47
-23
openair2/PHY_INTERFACE/IF_Module_nb_iot.h
openair2/PHY_INTERFACE/IF_Module_nb_iot.h
+5
-6
No files found.
openair1/PHY/defs.h
View file @
9c22ed6c
...
@@ -474,6 +474,8 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -474,6 +474,8 @@ typedef struct PHY_VARS_eNB_s {
LTE_eNB_UE_stats
UE_stats
[
NUMBER_OF_UE_MAX
];
LTE_eNB_UE_stats
UE_stats
[
NUMBER_OF_UE_MAX
];
LTE_eNB_UE_stats
*
UE_stats_ptr
[
NUMBER_OF_UE_MAX
];
LTE_eNB_UE_stats
*
UE_stats_ptr
[
NUMBER_OF_UE_MAX
];
NB_IoT_eNB_NPBCH
npbch
;
/// cell-specific reference symbols
/// cell-specific reference symbols
uint32_t
lte_gold_table
[
20
][
2
][
14
];
uint32_t
lte_gold_table
[
20
][
2
][
14
];
...
...
openair1/PHY/defs_nb_iot.h
View file @
9c22ed6c
...
@@ -306,6 +306,7 @@ typedef struct PHY_VARS_eNB_NB_s {
...
@@ -306,6 +306,7 @@ typedef struct PHY_VARS_eNB_NB_s {
uint8_t
CC_id
;
uint8_t
CC_id
;
eNB_proc_NB_t
proc
;
eNB_proc_NB_t
proc
;
NB_DL_FRAME_PARMS
frame_parms
;
NB_DL_FRAME_PARMS
frame_parms
;
NB_IoT_eNB_NPBCH
npbch
;
//number of UE max = 1 // in fapy is udated dinamically each subframe and is no more a table
//number of UE max = 1 // in fapy is udated dinamically each subframe and is no more a table
LTE_eNB_DLSCH_t
*
dlsch
[
NUMBER_OF_UE_MAX
][
2
];
// Nusers times two spatial streams
LTE_eNB_DLSCH_t
*
dlsch
[
NUMBER_OF_UE_MAX
][
2
];
// Nusers times two spatial streams
...
...
openair1/PHY/impl_defs_lte.h
View file @
9c22ed6c
...
@@ -587,6 +587,9 @@ typedef struct {
...
@@ -587,6 +587,9 @@ typedef struct {
struct
MBSFN_SubframeConfig
*
mbsfn_SubframeConfig
[
MAX_MBSFN_AREA
];
struct
MBSFN_SubframeConfig
*
mbsfn_SubframeConfig
[
MAX_MBSFN_AREA
];
//NB-iot to be transfer in the new structure
unsigned
short
NB_IoT_RB_ID
;
}
LTE_DL_FRAME_PARMS
;
}
LTE_DL_FRAME_PARMS
;
typedef
enum
{
typedef
enum
{
...
...
openair1/SCHED/phy_procedures_lte_eNb_nb_iot.c
View file @
9c22ed6c
#include "PHY/defs.h"
#include "PHY/defs.h"
#include "PHY/defs_nb_iot.h"
#include "PHY/extern.h"
#include "PHY/extern.h"
#include "SCHED/defs.h"
#include "SCHED/defs.h"
#include "SCHED/extern.h"
#include "SCHED/extern.h"
...
@@ -90,14 +91,6 @@ void NB_common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
...
@@ -90,14 +91,6 @@ void NB_common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
With_NSSS
=
0
;
With_NSSS
=
0
;
}
}
/*NRS*/
generate_pilots_NB_IoT
(
eNB
,
txdataF
,
AMP
,
Ntti
,
RB_IoT_ID
,
With_NSSS
);
/*NPSS when subframe 5*/
/*NPSS when subframe 5*/
if
(
subframe
==
5
)
if
(
subframe
==
5
)
{
{
...
@@ -110,9 +103,9 @@ void NB_common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
...
@@ -110,9 +103,9 @@ void NB_common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
}
}
/*NSSS when subframe 9 on even frame*/
/*NSSS when subframe 9 on even frame*/
if
((
subframe
==
9
)
&&
(
With_NSSS
==
1
))
else
if
((
subframe
==
9
)
&&
(
With_NSSS
==
1
))
{
{
generate_
n
sss_NB_IoT
(
txdataF
,
generate_sss_NB_IoT
(
txdataF
,
AMP
,
AMP
,
fp
,
fp
,
3
,
3
,
...
@@ -121,6 +114,16 @@ void NB_common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
...
@@ -121,6 +114,16 @@ void NB_common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
RB_IoT_ID
);
RB_IoT_ID
);
}
}
else
{
/*NRS*/
generate_pilots_NB_IoT
(
eNB
,
txdataF
,
AMP
,
Ntti
,
RB_IoT_ID
,
With_NSSS
);
}
}
}
...
@@ -474,7 +477,6 @@ void NB_generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t * proc,Sched
...
@@ -474,7 +477,6 @@ void NB_generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t * proc,Sched
DCI_Content
->
DCIN1_RAR
.
Scheddly
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
scheduling_delay
;
DCI_Content
->
DCIN1_RAR
.
Scheddly
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
scheduling_delay
;
DCI_Content
->
DCIN1_RAR
.
ResAssign
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
resource_assignment
;
DCI_Content
->
DCIN1_RAR
.
ResAssign
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
resource_assignment
;
DCI_Content
->
DCIN1_RAR
.
mcs
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
mcs
;
DCI_Content
->
DCIN1_RAR
.
mcs
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
mcs
;
DCI_Content
->
DCIN1_RAR
.
RepNum
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
repetition_number
;
DCI_Content
->
DCIN1_RAR
.
ndi
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
new_data_indicator
;
DCI_Content
->
DCIN1_RAR
.
ndi
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
new_data_indicator
;
DCI_Content
->
DCIN1_RAR
.
HARQackRes
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
harq_ack_resource
;
DCI_Content
->
DCIN1_RAR
.
HARQackRes
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
harq_ack_resource
;
DCI_Content
->
DCIN1_RAR
.
DCIRep
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
dci_subframe_repetition_number
;
DCI_Content
->
DCIN1_RAR
.
DCIRep
=
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
dci_subframe_repetition_number
;
...
@@ -588,6 +590,9 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
...
@@ -588,6 +590,9 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
int8_t
UE_id
=
0
;
int8_t
UE_id
=
0
;
uint8_t
ul_subframe
;
uint8_t
ul_subframe
;
uint32_t
ul_frame
;
uint32_t
ul_frame
;
int
**
txdataF
=
eNB
->
common_vars
.
txdataF
[
0
];
//uint8_t num_npdcch_symbols = 0;
//uint8_t num_npdcch_symbols = 0;
//for NB-IoT
//for NB-IoT
...
@@ -617,25 +622,53 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
...
@@ -617,25 +622,53 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
}
}
while
(
!
oai_exit
)
while
(
!
oai_exit
)
{
{
//ignore the PMCH part only do the generate PSS/SSS, note: Seperate MIB from here
//ignore the PMCH part only do the generate PSS/SSS, note: Seperate MIB from here
NB_common_signal_procedures
(
eNB
,
proc
);
NB_common_signal_procedures
(
eNB
,
proc
);
//Not test yet , mutex_l2, cond_l2, instance_cnt_l2
//Not test yet , mutex_l2, cond_l2, instance_cnt_l2
//cond_l2 should be given by sched_rsp after the scheduling
if
(
wait_on_condition
(
&
proc
->
mutex_l2
,
&
proc
->
cond_l2
,
&
proc
->
instance_cnt_l2
,
"eNB_L2_thread"
)
<
0
)
if
(
wait_on_condition
(
&
proc
->
mutex_l2
,
&
proc
->
cond_l2
,
&
proc
->
instance_cnt_l2
,
"eNB_L2_thread"
)
<
0
)
break
;
break
;
/*Take the structures from the shared structures*/
/*Take the structures from the shared structures*/
//Sched_Rsp = ;
//Sched_Rsp = ;
/*
broadcast channel for n-FAPI style
pdu length - 14 (bytes)
pdu index - 1
num segments -1
segment length 5 bytes
segment data 34 bits (5 bytes)
*/
if
((
subframe
==
0
)
&&
(
Sched_Rsp
->
NB_DL
.
NB_BCH
.
MIB_pdu
.
segments
[
0
].
segment_data
)
!=
NULL
)
{
generate_npbch
(
&
eNB
->
npbch
,
txdataF
,
AMP
,
fp
,
&
Sched_Rsp
->
NB_DL
.
NB_BCH
.
MIB_pdu
.
segments
[
0
].
segment_data
,
frame
%
64
==
0
?
0
:
1
,
fp
->
NB_IoT_RB_ID
// iD of the resource block may be passed by the config request (phy config structure)
);
}
/*clear the existing ulsch dci allocations before applying info from MAC*/
/*clear the existing ulsch dci allocations before applying info from MAC*/
ul_subframe
=
(
subframe
+
4
)
%
10
;
ul_subframe
=
(
subframe
+
4
)
%
10
;
ul_frame
=
frame
+
(
ul_subframe
>=
6
?
1
:
0
);
ul_frame
=
frame
+
(
ul_subframe
>=
6
?
1
:
0
);
harq_pid
=
((
ul_frame
<<
1
)
+
ul_subframe
)
&
7
;
harq_pid
=
((
ul_frame
<<
1
)
+
ul_subframe
)
&
7
;
// NPDSCH management from nfapi
// what should be figurate this week
if
(
Sched_Rsp
->
NB_DL
.
NB_DLSCH
.
NPDSCH_pdu
.
segments
)
{
/*TODO: NPDSCH procedures for NB-IoT*/
//npdsch_procedures();
}
/*clear the DCI allocation maps for new subframe*/
/*clear the DCI allocation maps for new subframe*/
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
for
(
i
=
0
;
i
<
NUMBER_OF_UE_MAX
;
i
++
)
{
{
...
@@ -653,10 +686,9 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
...
@@ -653,10 +686,9 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
eNB
->
dlsch
[
i
][
0
]
->
subframe_tx
[
subframe
]
=
0
;
eNB
->
dlsch
[
i
][
0
]
->
subframe_tx
[
subframe
]
=
0
;
}
}
/*remove the part save old HARQ information for PHICH generation*/
/*Loop over all the dci to generate DLSCH allocation, there is only 1 or 2 DCIs for NB-IoT in the same time*/
/*Loop over all the dci to generate DLSCH allocation, there is only 1 or 2 DCIs for NB-IoT in the same time*/
// Add dci fapi structure for contain two dcis
/*Also Packed the DCI here*/
/*Also Packed the DCI here*/
if
(
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
rnti
<=
P_RNTI
)
if
(
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DL_DCI
.
npdcch_pdu_rel13
.
rnti
<=
P_RNTI
)
...
@@ -675,8 +707,6 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
...
@@ -675,8 +707,6 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
This is for UEs that have received this IE, which changes these DL and UL configuration, we apply after a delay for the eNodeB UL parameters
This is for UEs that have received this IE, which changes these DL and UL configuration, we apply after a delay for the eNodeB UL parameters
phy_config_dedicated_eNB_step2(eNB);*/
phy_config_dedicated_eNB_step2(eNB);*/
//dci_alloc = &DCI_pdu->dci_alloc[i];
if
(
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DCI_Format
==
DCIFormatN0
)
// this is a ULSCH allocation
if
(
Sched_Rsp
->
NB_DL
.
NB_DCI
.
DCI_Format
==
DCIFormatN0
)
// this is a ULSCH allocation
{
{
UE_id
=
find_ue
((
int16_t
)
Sched_Rsp
->
NB_DL
.
NB_DCI
.
UL_DCI
.
npdcch_dci_pdu_rel13
.
rnti
,
eNB
);
UE_id
=
find_ue
((
int16_t
)
Sched_Rsp
->
NB_DL
.
NB_DCI
.
UL_DCI
.
npdcch_dci_pdu_rel13
.
rnti
,
eNB
);
...
@@ -687,12 +717,6 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
...
@@ -687,12 +717,6 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
//NB_generate_dci_top();
//NB_generate_dci_top();
// what should be figurate this week
if
(
Sched_Rsp
->
NB_DL
.
NB_DLSCH
.
NPDSCH_pdu
.
segments
)
{
/*TODO: NPDSCH procedures for NB-IoT*/
//npdsch_procedures();
}
}
}
}
}
openair2/PHY_INTERFACE/IF_Module_nb_iot.h
View file @
9c22ed6c
...
@@ -154,14 +154,13 @@ typedef struct{
...
@@ -154,14 +154,13 @@ typedef struct{
}
npdsch_t
;
}
npdsch_t
;
typedef
struct
{
typedef
struct
{
// sinces FAPI spec didn't explain the format for the DCI clearly
DCI_format_NB_t
DCI_Format
;
DCI_format_NB_t
DCI_Format
;
uint8_t
NUM_DCI
;
/*DL DCI, it contains the DCI list and the other useful information*/
/*DL DCI*/
nfapi_dl_config_request_body_t
DL_DCI
;
nfapi_dl_config_npdcch_pdu
DL_DCI
;
/*UL DCI*/
/*UL DCI*/
nfapi_hi_dci0_request_body_t
UL_DCI
;
nfapi_hi_dci0_npdcch_dci_pdu
UL_DCI
;
}
npdcch_t
;
}
npdcch_t
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment