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
zzha zzha
OpenXG-RAN
Commits
524d1b4c
Commit
524d1b4c
authored
Aug 26, 2014
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@5757
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
036870ad
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
36 additions
and
14 deletions
+36
-14
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+5
-2
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+3
-2
openair1/PHY/defs.h
openair1/PHY/defs.h
+8
-0
openair1/SCHED/phy_procedures_lte_common.c
openair1/SCHED/phy_procedures_lte_common.c
+5
-1
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+3
-3
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+12
-6
No files found.
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
524d1b4c
...
...
@@ -2877,6 +2877,9 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
mimo_mode
=
frame_parms
->
mode1_flag
==
1
?
SISO
:
ALAMOUTI
;
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
dl_power_off
=
1
;
//no power offset
LOG_D
(
PHY
,
"UE (%x/%d): Subframe %d Format1A DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d
\n
"
,
dlsch
[
0
]
->
rnti
,
harq_pid
,
subframe
,
ndi
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
DCINdi
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
first_tx
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
status
);
if
((
ndi
!=
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
DCINdi
)
||
// DCI has been toggled or this is the first transmission
(
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
first_tx
==
1
))
{
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
round
=
0
;
...
...
@@ -3000,8 +3003,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
mimo_mode
=
(
frame_parms
->
mode1_flag
==
1
)
?
SISO
:
ALAMOUTI
;
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
dl_power_off
=
1
;
//no power offset
LOG_D
(
PHY
,
"
Format1 DCI: ndi %d, old_ndi %d (first tx %d)
\n
"
,
ndi
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
DCINdi
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
first_tx
);
LOG_D
(
PHY
,
"
UE (%x/%d): Subframe %d Format1 DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d
\n
"
,
dlsch
[
0
]
->
rnti
,
harq_pid
,
subframe
,
ndi
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
DCINdi
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
first_tx
,
dlsch
[
0
]
->
harq_processes
[
harq_pid
]
->
status
);
// printf("Format1 DCI (UE, hard pid %d): ndi %d, old_ndi %d (first tx %d)\n",harq_pid,ndi,dlsch[0]->harq_processes[harq_pid]->DCINdi,
// dlsch[0]->harq_processes[harq_pid]->first_tx);
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
View file @
524d1b4c
...
...
@@ -409,7 +409,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
dlsch
->
harq_ack
[
subframe
].
harq_id
=
harq_pid
;
dlsch
->
harq_ack
[
subframe
].
send_harq_status
=
1
;
harq_process
->
round
++
;
// msg("DLSCH: Setting NACK for subframe %d (pid %d, round %d)\n"
,subframe,harq_pid,harq_process->round);
LOG_D
(
PHY
,
"[UE %d] DLSCH: Setting NACK for subframe %d (pid %d, round %d)
\n
"
,
phy_vars_ue
->
Mod_id
,
subframe
,
harq_pid
,
harq_process
->
round
);
if
(
harq_process
->
round
>=
dlsch
->
Mdlharq
)
{
harq_process
->
status
=
SCH_IDLE
;
}
...
...
@@ -422,7 +422,8 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
dlsch
->
harq_ack
[
subframe
].
ack
=
1
;
dlsch
->
harq_ack
[
subframe
].
harq_id
=
harq_pid
;
dlsch
->
harq_ack
[
subframe
].
send_harq_status
=
1
;
// msg("DLSCH decoding: Setting ACK for subframe %d (pid %d)\n",subframe,harq_pid);
LOG_D
(
PHY
,
"[UE %d] DLSCH: Setting ACK for subframe %d (pid %d, round %d)
\n
"
,
phy_vars_ue
->
Mod_id
,
subframe
,
harq_pid
,
harq_process
->
round
);
}
// Reassembly of Transport block here
offset
=
0
;
...
...
openair1/PHY/defs.h
View file @
524d1b4c
...
...
@@ -354,6 +354,12 @@ typedef struct
uint8_t
Mod_id
;
uint8_t
CC_id
;
uint8_t
local_flag
;
int
instance_cnt_tx
;
int
instance_cnt_rx
;
pthread_cond_t
cond_tx
;
pthread_cond_t
cond_rx
;
pthread_mutex_t
mutex_tx
;
pthread_mutex_t
mutex_rx
;
uint32_t
tx_total_gain_dB
;
uint32_t
rx_total_gain_dB
;
///this is a function of rx_gain_mode (and the corresponding gain) and the rx_gain of the card
uint32_t
rx_gain_max
[
4
];
...
...
@@ -365,6 +371,8 @@ typedef struct
int
tx_total_RE
;
int8_t
tx_power_max_dBm
;
uint32_t
frame
;
uint32_t
frame_rx
,
frame_tx
;
uint32_t
slot_tx
,
slot_rx
;
uint8_t
n_connected_eNB
;
uint8_t
ho_initiated
;
uint8_t
ho_triggered
;
...
...
openair1/SCHED/phy_procedures_lte_common.c
View file @
524d1b4c
...
...
@@ -321,10 +321,11 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
unsigned
char
subframe
,
unsigned
char
*
o_ACK
)
{
//printf("get_ack: SF %d\n",subframe);
uint8_t
status
=
0
;
uint8_t
subframe_dl
;
printf
(
"get_ack: SF %d
\n
"
,
subframe
);
if
(
frame_parms
->
frame_type
==
FDD
)
{
if
(
subframe
<
4
)
subframe_dl
=
subframe
+
6
;
...
...
@@ -372,6 +373,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
else
if
(
harq_ack
[
6
].
send_harq_status
==
1
)
o_ACK
[
0
]
=
harq_ack
[
6
].
ack
;
status
=
harq_ack
[
5
].
send_harq_status
+
(
harq_ack
[
6
].
send_harq_status
<<
1
);
printf
(
"Subframe 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
==
3
)
{
// ACK subframes 7 and 8
if
(
harq_ack
[
7
].
send_harq_status
==
1
)
{
...
...
@@ -383,6 +385,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
o_ACK
[
0
]
=
harq_ack
[
8
].
ack
;
status
=
harq_ack
[
7
].
send_harq_status
+
(
harq_ack
[
8
].
send_harq_status
<<
1
);
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]);
}
else
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
...
...
@@ -395,6 +398,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
o_ACK
[
0
]
=
harq_ack
[
8
].
ack
;
status
=
harq_ack
[
9
].
send_harq_status
+
(
harq_ack
[
0
].
send_harq_status
<<
1
);
printf
(
"Subframe 4, TDD config 3: harq_ack[9] = %d,harq_ack[0] = %d
\n
"
,
harq_ack
[
9
].
ack
,
harq_ack
[
0
].
ack
);
}
else
{
LOG_E
(
PHY
,
"phy_procedures_lte.c: get_ack, illegal subframe %d for tdd_config %d
\n
"
,
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
524d1b4c
...
...
@@ -2208,7 +2208,7 @@ void process_HARQ_feedback(uint8_t UE_id,
// but we have to adapt the code below. For example, if only one out of 2 are scheduled, only 1 bit o_ACK is used
dlsch_ACK
[
0
]
=
phy_vars_eNB
->
ulsch_eNB
[(
uint8_t
)
UE_id
]
->
o_ACK
[
0
];
dlsch_ACK
[
1
]
=
phy_vars_eNB
->
ulsch_eNB
[(
uint8_t
)
UE_id
]
->
o_ACK
[
1
];
dlsch_ACK
[
1
]
=
(
phy_vars_eNB
->
pucch_config_dedicated
[
UE_id
].
tdd_AckNackFeedbackMode
==
bundling
)
?
phy_vars_eNB
->
ulsch_eNB
[(
uint8_t
)
UE_id
]
->
o_ACK
[
0
]
:
phy_vars_eNB
->
ulsch_eNB
[(
uint8_t
)
UE_id
]
->
o_ACK
[
1
];
// printf("UE %d: ACK %d,%d\n",UE_id,dlsch_ACK[0],dlsch_ACK[1]);
}
...
...
@@ -2315,8 +2315,8 @@ void process_HARQ_feedback(uint8_t UE_id,
if
(
dlsch_ACK
[
mp
]
==
0
)
{
// Received NAK
#ifdef DEBUG_PHY_PROC
LOG_I
(
PHY
,
"[eNB %d][PDSCH %x/%d] NAK Received in round %d, requesting retransmission
\n
"
,
phy_vars_eNB
->
Mod_id
,
dlsch
->
rnti
,
dl_harq_pid
[
m
],
dlsch_harq_proc
->
round
);
LOG_I
(
PHY
,
"[eNB %d][PDSCH %x/%d]
M = %d, m= %d, mp=%d
NAK Received in round %d, requesting retransmission
\n
"
,
phy_vars_eNB
->
Mod_id
,
dlsch
->
rnti
,
dl_harq_pid
[
m
],
M
,
m
,
mp
,
dlsch_harq_proc
->
round
);
#endif
// if (dlsch_harq_proc->round == 0)
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
524d1b4c
...
...
@@ -2074,6 +2074,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[UE %d] Generated UE DLSCH C_RNTI format %d
\n
"
,
phy_vars_ue
->
Mod_id
,
dci_alloc_rx
[
i
].
format
);
dump_dci
(
&
phy_vars_ue
->
lte_frame_parms
,
&
dci_alloc_rx
[
i
]);
LOG_D
(
PHY
,
"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d
\n
"
,
phy_vars_ue
->
Mod_id
,(
last_slot
>>
1
),
last_slot
,
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
active
);
#endif
// we received a CRNTI, so we're in PUSCH
...
...
@@ -2352,6 +2353,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
n_symb
=
phy_vars_ue
->
lte_frame_parms
.
symbols_per_tti
/
2
;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LOG_D
(
PHY
,
"[UE %d] *********** dlsch->active in subframe %d (%d)=> %d
\n
"
,
phy_vars_ue
->
Mod_id
,(
last_slot
>>
1
),
last_slot
,
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
active
);
// This is normal processing (i.e. not MBSFN)
// RX processing of symbols in last_slot
...
...
@@ -2426,7 +2429,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
}
}
// trigger DLSCH decoding thread
if
(
!
(
last_slot
%
2
)
)
// odd slots
if
(
(
last_slot
%
2
)
==
1
)
// odd slots
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
active
=
0
;
}
}
...
...
@@ -2435,18 +2438,20 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
// process last DLSCH symbols + invoke decoding
if
(((
last_slot
%
2
)
==
0
)
&&
(
l
==
0
))
{
// Regular PDSCH
LOG_D
(
PHY
,
"[UE %d] dlsch->active in subframe %d => %d
\n
"
,
phy_vars_ue
->
Mod_id
,((
last_slot
>>
1
)
+
9
)
%
10
,
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
active
);
if
(
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
active
==
1
)
{
#ifndef DLSCH_THREAD //USER_MODE
harq_pid
=
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
current_harq_pid
;
//printf("PDSCH active in subframe %d, harq_pid %d\n",(last_slot>>1)-1
,harq_pid);
LOG_D
(
PHY
,
"[UE %d] PDSCH active in subframe %d, harq_pid %d
\n
"
,
phy_vars_ue
->
Mod_id
,((
last_slot
>>
1
)
+
1
)
%
10
,
harq_pid
);
if
((
phy_vars_ue
->
transmission_mode
[
eNB_id
]
==
5
)
&&
(
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
dl_power_off
==
0
)
&&
(
openair_daq_vars
.
use_ia_receiver
==
1
))
{
dual_stream_UE
=
1
;
eNB_id_i
=
phy_vars_ue
->
n_connected_eNB
;
i_mod
=
get_Qm
(
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
mcs
);
if
(
phy_vars_ue
->
frame
%
100
==
0
)
{
LOG_I
(
PHY
,
"using IA receiver
\n
"
);
if
(
phy_vars_ue
->
frame
%
100
==
0
)
{
LOG_I
(
PHY
,
"using IA receiver
\n
"
);
}
}
else
{
...
...
@@ -2541,9 +2546,9 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
#endif
}
else
{
LOG_I
(
PHY
,
"[UE %d][PDSCH %x/%d] Frame %d subframe %d: Received DLSCH (rv %d,mcs %d,TBS %d)
\n
"
,
LOG_I
(
PHY
,
"[UE %d][PDSCH %x/%d] Frame %d subframe %d
(last_slot %d)
: Received DLSCH (rv %d,mcs %d,TBS %d)
\n
"
,
phy_vars_ue
->
Mod_id
,
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
rnti
,
harq_pid
,
phy_vars_ue
->
frame
,((
last_slot
>>
1
)
==
0
)
?
9
:
(
last_slot
>>
1
)
-
1
,
harq_pid
,
phy_vars_ue
->
frame
,((
last_slot
>>
1
)
==
0
)
?
9
:
(
last_slot
>>
1
)
-
1
,
last_slot
,
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
rvidx
,
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
mcs
,
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
TBS
);
...
...
@@ -2943,6 +2948,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,uint8_t last_slot, PHY_VARS_UE *phy_v
#ifndef DLSCH_THREAD
if
(
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
active
==
1
)
{
harq_pid
=
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
current_harq_pid
;
LOG_D
(
PHY
,
"[UE %d] PDSCH active in subframe %d (%d), harq_pid %d
\n
"
,
phy_vars_ue
->
Mod_id
,(
last_slot
>>
1
),
last_slot
,
harq_pid
);
if
((
phy_vars_ue
->
transmission_mode
[
eNB_id
]
==
5
)
&&
(
phy_vars_ue
->
dlsch_ue
[
eNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
dl_power_off
==
0
)
&&
(
openair_daq_vars
.
use_ia_receiver
==
1
))
{
...
...
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