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
lizhongxiao
OpenXG-RAN
Commits
1029a622
Commit
1029a622
authored
May 24, 2017
by
hbilel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for TDD multiplexing
parent
9bef36f2
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
75 additions
and
24 deletions
+75
-24
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+1
-1
openair1/SCHED/phy_procedures_lte_common.c
openair1/SCHED/phy_procedures_lte_common.c
+7
-7
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+67
-16
No files found.
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
1029a622
...
@@ -8031,7 +8031,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
...
@@ -8031,7 +8031,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
if
(
ulsch
->
bundling
)
if
(
ulsch
->
bundling
)
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
=
(
dai
==
3
)
?
0
:
1
;
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
=
(
dai
==
3
)
?
0
:
1
;
else
else
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
=
(
dai
+
1
)
&
3
;
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
=
(
dai
>=
2
)
?
2
:
(
dai
+
1
)
&
3
;
//(dai
+1)&3;
// ulsch->harq_processes[harq_pid]->V_UL_DAI = dai+1;
// ulsch->harq_processes[harq_pid]->V_UL_DAI = dai+1;
}
}
...
...
openair1/SCHED/phy_procedures_lte_common.c
View file @
1029a622
...
@@ -576,16 +576,16 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -576,16 +576,16 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
case
4
:
case
4
:
if
(
subframe_tx
==
2
)
{
// ACK subframes 4, 5 and 0
if
(
subframe_tx
==
2
)
{
// ACK subframes 4, 5 and 0
subframe_dl0
=
4
;
subframe_dl0
=
0
;
subframe_dl1
=
5
;
subframe_dl1
=
4
;
subframe_dl2
=
0
;
subframe_dl2
=
5
;
subframe_ul
=
2
;
subframe_ul
=
2
;
//printf("subframe_tx 2, TDD config 3: harq_ack[5] = %d (%d),harq_ack[6] = %d (%d)\n",harq_ack[5].ack,harq_ack[5].send_harq_status,harq_ack[6].ack,harq_ack[6].send_harq_status);
//printf("subframe_tx 2, TDD config 3: harq_ack[5] = %d (%d),harq_ack[6] = %d (%d)\n",harq_ack[5].ack,harq_ack[5].send_harq_status,harq_ack[6].ack,harq_ack[6].send_harq_status);
}
else
if
(
subframe_tx
==
3
)
{
// ACK subframes 6, 7 8 and 9
}
else
if
(
subframe_tx
==
3
)
{
// ACK subframes 6, 7 8 and 9
subframe_dl0
=
6
;
subframe_dl0
=
7
;
subframe_dl1
=
7
;
subframe_dl1
=
8
;
subframe_dl2
=
8
;
subframe_dl2
=
9
;
subframe_dl3
=
9
;
subframe_dl3
=
6
;
subframe_ul
=
3
;
subframe_ul
=
3
;
//printf("Subframe 3, TDD config 3: harq_ack[7] = %d,harq_ack[8] = %d\n",harq_ack[7].ack,harq_ack[8].ack);
//printf("Subframe 3, TDD config 3: harq_ack[7] = %d,harq_ack[8] = %d\n",harq_ack[7].ack,harq_ack[8].ack);
//printf("status %d : o_ACK (%d,%d)\n", status,o_ACK[0],o_ACK[1]);
//printf("status %d : o_ACK (%d,%d)\n", status,o_ACK[0],o_ACK[1]);
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
1029a622
...
@@ -633,7 +633,8 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
...
@@ -633,7 +633,8 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
uint8_t
SR_payload
,
uint8_t
SR_payload
,
uint8_t
nb_cw
,
uint8_t
nb_cw
,
uint8_t
cqi_status
,
uint8_t
cqi_status
,
uint8_t
ri_status
)
uint8_t
ri_status
,
uint8_t
bundling_flag
)
{
{
if
((
cqi_status
==
0
)
&&
(
ri_status
==
0
))
if
((
cqi_status
==
0
)
&&
(
ri_status
==
0
))
{
{
...
@@ -641,10 +642,14 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
...
@@ -641,10 +642,14 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
// 1- SR only ==> PUCCH format 1
// 1- SR only ==> PUCCH format 1
// 2- 1bit Ack/Nack with/without SR ==> PUCCH format 1a
// 2- 1bit Ack/Nack with/without SR ==> PUCCH format 1a
// 3- 2bits Ack/Nack with/without SR ==> PUCCH format 1b
// 3- 2bits Ack/Nack with/without SR ==> PUCCH format 1b
if
(
nb_cw
==
1
)
if
(
(
nb_cw
==
1
)
&&
(
bundling_flag
==
bundling
)
)
{
{
return
pucch_format1a
;
return
pucch_format1a
;
}
}
if
((
nb_cw
==
1
)
&&
(
bundling_flag
==
multiplexing
))
{
return
pucch_format1b
;
}
if
(
nb_cw
==
2
)
if
(
nb_cw
==
2
)
{
{
return
pucch_format1b
;
return
pucch_format1b
;
...
@@ -916,7 +921,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
...
@@ -916,7 +921,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
nCCE1
=
ue
->
pdcch_vars
[
proc
->
subframe_rx
&
0x1
][
eNB_id
]
->
nCCE
[
2
+
subframe
];
nCCE1
=
ue
->
pdcch_vars
[
proc
->
subframe_rx
&
0x1
][
eNB_id
]
->
nCCE
[
2
+
subframe
];
n1_pucch1
=
get_Np
(
frame_parms
->
N_RB_DL
,
nCCE1
,
0
)
+
get_Np
(
frame_parms
->
N_RB_DL
,
nCCE1
,
1
)
+
nCCE1
+
frame_parms
->
pucch_config_common
.
n1PUCCH_AN
;
n1_pucch1
=
get_Np
(
frame_parms
->
N_RB_DL
,
nCCE1
,
0
)
+
get_Np
(
frame_parms
->
N_RB_DL
,
nCCE1
,
1
)
+
nCCE1
+
frame_parms
->
pucch_config_common
.
n1PUCCH_AN
;
// i=2
// i=2
nCCE2
=
ue
->
pdcch_vars
[
proc
->
subframe_rx
&
0x1
][
eNB_id
]
->
nCCE
[(
8
+
subframe
)
%
10
];
nCCE2
=
ue
->
pdcch_vars
[
proc
->
subframe_rx
&
0x1
][
eNB_id
]
->
nCCE
[(
3
+
subframe
)
%
10
];
n1_pucch2
=
2
*
get_Np
(
frame_parms
->
N_RB_DL
,
nCCE2
,
1
)
+
nCCE2
+
frame_parms
->
pucch_config_common
.
n1PUCCH_AN
;
n1_pucch2
=
2
*
get_Np
(
frame_parms
->
N_RB_DL
,
nCCE2
,
1
)
+
nCCE2
+
frame_parms
->
pucch_config_common
.
n1PUCCH_AN
;
// i=3
// i=3
//nCCE3 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(9+subframe)%10];
//nCCE3 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(9+subframe)%10];
...
@@ -929,8 +934,8 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
...
@@ -929,8 +934,8 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
if
(
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
2
+
subframe
].
send_harq_status
>
0
)
// n-6 // subframe 5 is to be ACK/NAKed
if
(
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
2
+
subframe
].
send_harq_status
>
0
)
// n-6 // subframe 5 is to be ACK/NAKed
harq_ack1
=
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
2
+
subframe
].
ack
;
harq_ack1
=
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
2
+
subframe
].
ack
;
if
(
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
3
+
subframe
].
send_harq_status
>
0
)
// n-6 // subframe 6 is to be ACK/NAKed
if
(
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
(
3
+
subframe
)
%
10
].
send_harq_status
>
0
)
// n-6 // subframe 6 is to be ACK/NAKed
harq_ack2
=
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
3
+
subframe
].
ack
;
harq_ack2
=
ue
->
dlsch
[
proc
->
subframe_rx
&
0x1
][
eNB_id
][
0
]
->
harq_ack
[
(
3
+
subframe
)
%
10
].
ack
;
//if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
//if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].send_harq_status>0) // n-6 // subframe 5 is to be ACK/NAKed
//harq_ack3 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].ack;
//harq_ack3 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(9+subframe)%10].ack;
...
@@ -1007,38 +1012,40 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
...
@@ -1007,38 +1012,40 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
return
(
n1_pucch_inter
);
return
(
n1_pucch_inter
);
}
else
if
((
bundling_flag
==
multiplexing
)
&&
(
SR
==
0
))
{
// Table 10.1
}
else
if
((
bundling_flag
==
multiplexing
)
&&
(
SR
==
0
))
{
// Table 10.1
if
(
subframe
==
3
)
{
LOG_I
(
PHY
,
"sbuframe=%d
\n
"
,
subframe
);
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
(
harq_ack2
==
1
)
&&
(
harq_ack3
==
1
))
{
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
(
harq_ack2
==
1
)
&&
(
harq_ack3
==
1
))
{
b
[
1
]
=
1
;
b
[
0
]
=
1
;
b
[
0
]
=
1
;
b
[
1
]
=
1
;
return
(
n1_pucch1
);
return
(
n1_pucch1
);
}
else
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
(
harq_ack2
==
1
)
&&
((
harq_ack3
==
2
)
||
(
harq_ack3
==
0
)))
{
}
else
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
(
harq_ack2
==
1
)
&&
((
harq_ack3
==
2
)
||
(
harq_ack3
==
0
)))
{
b
[
0
]
=
1
;
b
[
0
]
=
1
;
b
[
1
]
=
0
;
b
[
1
]
=
0
;
return
(
n1_pucch1
);
return
(
n1_pucch1
);
}
else
if
(((
harq_ack0
==
0
)
||
(
harq_ack0
==
2
))
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
0
)
&&
(
harq_ack3
==
2
))
{
}
else
if
(((
harq_ack0
==
0
)
||
(
harq_ack0
==
2
))
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
0
)
&&
(
harq_ack3
==
2
))
{
b
[
1
]
=
1
;
b
[
0
]
=
1
;
b
[
0
]
=
1
;
b
[
1
]
=
1
;
return
(
n1_pucch2
);
return
(
n1_pucch2
);
}
else
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
))
&&
(
harq_ack3
==
1
))
{
}
else
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
))
&&
(
harq_ack3
==
1
))
{
b
[
1
]
=
1
;
b
[
0
]
=
1
;
b
[
0
]
=
0
;
b
[
1
]
=
0
;
return
(
n1_pucch1
);
return
(
n1_pucch1
);
}
else
if
((
harq_ack0
==
0
)
&&
(
harq_ack1
==
2
)
&&
(
harq_ack2
==
2
)
&&
(
harq_ack3
==
2
))
{
}
else
if
((
harq_ack0
==
0
)
&&
(
harq_ack1
==
2
)
&&
(
harq_ack2
==
2
)
&&
(
harq_ack3
==
2
))
{
b
[
1
]
=
1
;
b
[
0
]
=
1
;
b
[
0
]
=
0
;
b
[
1
]
=
0
;
return
(
n1_pucch0
);
return
(
n1_pucch0
);
}
else
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
))
&&
((
harq_ack3
==
2
)
||
(
harq_ack3
==
0
)))
{
}
else
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
))
&&
((
harq_ack3
==
2
)
||
(
harq_ack3
==
0
)))
{
b
[
1
]
=
1
;
b
[
0
]
=
1
;
b
[
0
]
=
0
;
b
[
1
]
=
0
;
return
(
n1_pucch1
);
return
(
n1_pucch1
);
}
else
if
((
harq_ack0
==
1
)
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
1
)
&&
(
harq_ack3
==
1
))
{
}
else
if
((
harq_ack0
==
1
)
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
1
)
&&
(
harq_ack3
==
1
))
{
b
[
0
]
=
0
;
b
[
0
]
=
0
;
b
[
1
]
=
1
;
b
[
1
]
=
1
;
return
(
n1_pucch3
);
return
(
n1_pucch3
);
}
else
if
(((
harq_ack0
==
0
)
||
(
harq_ack0
==
2
))
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
))
&&
(
harq_ack3
==
0
))
{
}
else
if
(((
harq_ack0
==
0
)
||
(
harq_ack0
==
2
))
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
))
&&
(
harq_ack3
==
0
))
{
b
[
1
]
=
1
;
b
[
0
]
=
1
;
b
[
0
]
=
1
;
b
[
1
]
=
1
;
return
(
n1_pucch3
);
return
(
n1_pucch3
);
}
else
if
((
harq_ack0
==
1
)
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
1
)
&&
((
harq_ack3
==
2
)
||
(
harq_ack3
==
0
)))
{
}
else
if
((
harq_ack0
==
1
)
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
1
)
&&
((
harq_ack3
==
2
)
||
(
harq_ack3
==
0
)))
{
b
[
0
]
=
0
;
b
[
0
]
=
0
;
...
@@ -1085,7 +1092,50 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
...
@@ -1085,7 +1092,50 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
b
[
1
]
=
0
;
b
[
1
]
=
0
;
return
(
n1_pucch3
);
return
(
n1_pucch3
);
}
}
}
else
if
(
subframe
==
2
)
{
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
(
harq_ack2
==
1
))
{
b
[
0
]
=
1
;
b
[
1
]
=
1
;
return
(
n1_pucch2
);
}
else
if
((
harq_ack0
==
1
)
&&
(
harq_ack1
==
1
)
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
)))
{
b
[
0
]
=
1
;
b
[
1
]
=
1
;
return
(
n1_pucch1
);
}
else
if
((
harq_ack0
==
1
)
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
1
))
{
b
[
0
]
=
1
;
b
[
1
]
=
1
;
return
(
n1_pucch0
);
}
else
if
((
harq_ack0
==
1
)
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
)))
{
b
[
0
]
=
0
;
b
[
1
]
=
1
;
return
(
n1_pucch0
);
}
else
if
(((
harq_ack0
==
2
)
||
(
harq_ack0
==
0
))
&&
(
harq_ack1
==
1
)
&&
(
harq_ack2
==
1
))
{
b
[
0
]
=
1
;
b
[
1
]
=
0
;
return
(
n1_pucch2
);
}
else
if
(((
harq_ack0
==
2
)
||
(
harq_ack0
==
0
))
&&
(
harq_ack1
==
1
)
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
)))
{
b
[
1
]
=
0
;
b
[
0
]
=
0
;
return
(
n1_pucch1
);
}
else
if
(((
harq_ack0
==
2
)
||
(
harq_ack0
==
0
))
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
(
harq_ack2
==
1
))
{
b
[
0
]
=
0
;
b
[
1
]
=
0
;
return
(
n1_pucch2
);
}
else
if
((
harq_ack0
==
2
)
&&
(
harq_ack1
==
2
)
&&
(
harq_ack2
==
0
))
{
b
[
0
]
=
0
;
b
[
1
]
=
1
;
return
(
n1_pucch2
);
}
else
if
((
harq_ack0
==
2
)
&&
(
harq_ack1
==
0
)
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
)))
{
b
[
0
]
=
1
;
b
[
1
]
=
0
;
return
(
n1_pucch1
);
}
else
if
((
harq_ack0
==
0
)
&&
((
harq_ack1
==
2
)
||
(
harq_ack1
==
0
))
&&
((
harq_ack2
==
2
)
||
(
harq_ack2
==
0
)))
{
b
[
0
]
=
1
;
b
[
1
]
=
0
;
return
(
n1_pucch0
);
}
}
}
else
if
(
SR
==
1
)
{
// SR and 0,1,or 2 ACKS, (first 3 entries in Table 7.3-1 of 36.213)
}
else
if
(
SR
==
1
)
{
// SR and 0,1,or 2 ACKS, (first 3 entries in Table 7.3-1 of 36.213)
// this should be number of ACKs (including
// this should be number of ACKs (including
if
(
harq_ack0
==
1
)
if
(
harq_ack0
==
1
)
...
@@ -2114,7 +2164,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -2114,7 +2164,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
SR_payload
,
SR_payload
,
nb_cw
,
nb_cw
,
cqi_status
,
cqi_status
,
ri_status
);
ri_status
,
bundling_flag
);
// Determine PUCCH resources and payload: mandatory for pucch encoding
// Determine PUCCH resources and payload: mandatory for pucch encoding
get_pucch_param
(
ue
,
get_pucch_param
(
ue
,
proc
,
proc
,
...
...
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