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
b325d0a1
Commit
b325d0a1
authored
Feb 11, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into develop
parents
d141195e
e2ae88de
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
227 additions
and
142 deletions
+227
-142
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+7
-8
cmake_targets/build_oai
cmake_targets/build_oai
+5
-0
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+132
-88
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+2
-1
openair1/PHY/LTE_TRANSPORT/sss.c
openair1/PHY/LTE_TRANSPORT/sss.c
+44
-21
openair1/SCHED/phy_procedures_lte_common.c
openair1/SCHED/phy_procedures_lte_common.c
+3
-0
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+19
-20
openair2/RRC/LITE/rrc_UE.c
openair2/RRC/LITE/rrc_UE.c
+2
-2
openair3/NAS/COMMON/EMM/MSG/AttachAccept.c
openair3/NAS/COMMON/EMM/MSG/AttachAccept.c
+3
-1
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+8
-1
targets/SIMU/USER/oaisim_functions.c
targets/SIMU/USER/oaisim_functions.c
+2
-0
No files found.
cmake_targets/autotests/test_case_list.xml
View file @
b325d0a1
...
@@ -62,8 +62,7 @@
...
@@ -62,8 +62,7 @@
<compile_prog_args>
--oaisim -r Rel10 --noS1 -c
</compile_prog_args>
<compile_prog_args>
--oaisim -r Rel10 --noS1 -c
</compile_prog_args>
<compile_prog_out>
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
<compile_prog_out>
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/rb_tool
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/rb_tool
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
</compile_prog_out>
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/oai_nw_drv/oai_nw_drv.ko
</compile_prog_out>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec_args></pre_exec_args>
<pre_exec_args></pre_exec_args>
<main_exec></main_exec>
<main_exec></main_exec>
...
@@ -10486,7 +10485,7 @@ c
...
@@ -10486,7 +10485,7 @@ c
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_branch>
develop1B
</UE_branch>
<UE_branch>
develop1B
</UE_branch>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
; sudo rmmod oai_nw_drv
</UE_pre_exec>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
</UE_pre_exec>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec_args></UE_main_exec_args>
<UE_main_exec_args></UE_main_exec_args>
...
@@ -10586,7 +10585,7 @@ c
...
@@ -10586,7 +10585,7 @@ c
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_branch>
develop1B
</UE_branch>
<UE_branch>
develop1B
</UE_branch>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
; sudo rmmod oai_nw_drv
</UE_pre_exec>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
</UE_pre_exec>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec_args></UE_main_exec_args>
<UE_main_exec_args></UE_main_exec_args>
...
@@ -10686,7 +10685,7 @@ c
...
@@ -10686,7 +10685,7 @@ c
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_branch>
develop1B
</UE_branch>
<UE_branch>
develop1B
</UE_branch>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
; sudo rmmod oai_nw_drv
</UE_pre_exec>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
</UE_pre_exec>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec_args></UE_main_exec_args>
<UE_main_exec_args></UE_main_exec_args>
...
@@ -10787,7 +10786,7 @@ c
...
@@ -10787,7 +10786,7 @@ c
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_branch>
develop1B
</UE_branch>
<UE_branch>
develop1B
</UE_branch>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
; sudo rmmod oai_nw_drv
</UE_pre_exec>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
</UE_pre_exec>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec_args></UE_main_exec_args>
<UE_main_exec_args></UE_main_exec_args>
...
@@ -10887,7 +10886,7 @@ c
...
@@ -10887,7 +10886,7 @@ c
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_branch>
develop1B
</UE_branch>
<UE_branch>
develop1B
</UE_branch>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
; sudo rmmod oai_nw_drv
</UE_pre_exec>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
</UE_pre_exec>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec_args></UE_main_exec_args>
<UE_main_exec_args></UE_main_exec_args>
...
@@ -10989,7 +10988,7 @@ c
...
@@ -10989,7 +10988,7 @@ c
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x
</UE_compile_prog>
<UE_branch>
develop1B
</UE_branch>
<UE_branch>
develop1B
</UE_branch>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_compile_prog_args></UE_compile_prog_args>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
; sudo rmmod oai_nw_drv
</UE_pre_exec>
<UE_pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip
</UE_pre_exec>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_pre_exec_args></UE_pre_exec_args>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec>
sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125
</UE_main_exec>
<UE_main_exec_args></UE_main_exec_args>
<UE_main_exec_args></UE_main_exec_args>
...
...
cmake_targets/build_oai
View file @
b325d0a1
...
@@ -465,6 +465,11 @@ function main() {
...
@@ -465,6 +465,11 @@ function main() {
echo
"set (CPU_AFFINITY
\"
${
CPU_AFFINITY_FLAG_USER
}
\"
)"
>>
$cmake_file
echo
"set (CPU_AFFINITY
\"
${
CPU_AFFINITY_FLAG_USER
}
\"
)"
>>
$cmake_file
echo
"set ( T_TRACER
$T_TRACER
)"
>>
$cmake_file
echo
"set ( T_TRACER
$T_TRACER
)"
>>
$cmake_file
echo
"set (UE_AUTOTEST_TRACE
$UE_AUTOTEST_TRACE
)"
>>
$cmake_file
echo
"set (UE_AUTOTEST_TRACE
$UE_AUTOTEST_TRACE
)"
>>
$cmake_file
if
[
"
$UE
"
=
1
-a
"
$NOS1
"
=
"0"
]
;
then
echo_info
"Compiling UE S1 build : enabling Linux and NETLINK"
echo
"set (LINUX True )"
>>
$cmake_file
echo
"set (PDCP_USE_NETLINK True )"
>>
$cmake_file
fi
echo
'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'
>>
$cmake_file
echo
'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'
>>
$cmake_file
cd
$DIR
/
$lte_build_dir
/build
cd
$DIR
/
$lte_build_dir
/build
cmake ..
cmake ..
...
...
common/utils/T/T_messages.txt
View file @
b325d0a1
...
@@ -93,7 +93,7 @@ ID = ENB_MAC_UE_UL_PDU
...
@@ -93,7 +93,7 @@ ID = ENB_MAC_UE_UL_PDU
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu
ID = ENB_MAC_UE_UL_PDU_WITH_DATA
ID = ENB_MAC_UE_UL_PDU_WITH_DATA
DESC = MAC uplink UE received PDU
DESC = MAC uplink UE received PDU
GROUP = ALL:MAC:ENB
:HEAVY
GROUP = ALL:MAC:ENB
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu : buffer,data
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu : buffer,data
ID = ENB_MAC_UE_UL_SDU
ID = ENB_MAC_UE_UL_SDU
DESC = MAC uplink UE received SDU
DESC = MAC uplink UE received SDU
...
@@ -805,6 +805,85 @@ ID = LEGACY_CLI_TRACE
...
@@ -805,6 +805,85 @@ ID = LEGACY_CLI_TRACE
GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY
GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
FORMAT = string,log
#################
#### UE LOGS ####
#################
#general logs
ID = UE_MASTER_TICK
DESC = UE master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view
GROUP = ALL:GENERAL:UE
FORMAT = int,eNB_ID : int,frame : int,subframe
#PHY logs
ID = UE_PHY_UL_TICK
DESC = UE uplink tick - one tick per ms at start of uplink processing
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe
ID = UE_PHY_DL_TICK
DESC = UE downlink tick - one tick per ms at start of downlink processing
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe
ID = UE_PHY_DLSCH_UE_DCI
DESC = UE downlink UE specific DCI as sent by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS
ID = UE_PHY_DLSCH_UE_ACK
DESC = UE downlink UE ACK as seen by the PHY layer in process_HARQ_feedback
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_DLSCH_UE_NACK
DESC = UE downlink UE NACK as seen by the PHY layer in process_HARQ_feedback
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_ULSCH_UE_DCI
DESC = UE uplink UE specific DCI as sent by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS
ID = UE_PHY_ULSCH_UE_ACK
DESC = UE uplink UE ACK as seen by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_ULSCH_UE_NACK
DESC = UE uplink UE NACK as seen by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_INPUT_SIGNAL
DESC = UE received signal in the time domain for a duration of 1ms
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata
ID = UE_PHY_DL_CHANNEL_ESTIMATE
DESC = UE channel estimation in the time domain
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,antenna : buffer,chest_t
ID = UE_PHY_PDCCH_IQ
DESC = UE PDCCH received IQ data
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,nb_rb : int,NB_RB_DL : int,symbols_per_tti : buffer,rxdataF_comp
ID = UE_PHY_PDCCH_ENERGY
DESC = UE PDSCH 1 energy and threshold
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdcch_ch_level00 : int,pdcch_ch_level01 : int,pdcch_ch_level10: int,pdcch_ch_level11
ID = UE_PHY_PDSCH_IQ
DESC = UE PDSCH received IQ data
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : int,N_RB_UL : int,symbols_per_tti : buffer,pusch_comp
ID = UE_PHY_PDSCH_ENERGY
DESC = UE PDSCH 1 energy and threshold
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdsch_ch_level00 : int,pdsch_ch_level01 : int,pdsch_ch_level10: int,pdsch_ch_level11
ID = UE_PHY_PUSCH_TX_POWER
DESC = UE PUSCH tx power
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pusch : int,ampl: int,g_pusch: int,pl: int,nb_rb
ID = UE_PHY_PUCCH_TX_POWER
DESC = UE PDSCH 1 energy and threshold
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pucch : int,ampl: int,g_pucch: int,pl
ID = UE_PHY_MEAS
DESC = UE PHY measurements
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,rsrp : int,rssi : int,snr: int,rx_power: int,noise_power: int,w_cqi: int,freq_offset
#for debug/test - not used
#for debug/test - not used
ID = first
ID = first
ID = buf_test
ID = buf_test
...
@@ -963,6 +1042,10 @@ ID = VCD_VARIABLE_TRX_TST
...
@@ -963,6 +1042,10 @@ ID = VCD_VARIABLE_TRX_TST
DESC = VCD variable TRX_TST
DESC = VCD variable TRX_TST
GROUP = ALL:VCD:ENB:VCD_VARIABLE
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
FORMAT = ulong,value
ID = VCD_VARIABLE_TRX_WRITE_FLAGS
DESC = VCD variable TRX_WRITE_FLAGS
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_TX_TS
ID = VCD_VARIABLE_TX_TS
DESC = VCD variable TX_TS
DESC = VCD variable TX_TS
GROUP = ALL:VCD:ENB:VCD_VARIABLE
GROUP = ALL:VCD:ENB:VCD_VARIABLE
...
@@ -1267,13 +1350,29 @@ ID = VCD_VARIABLE_UE0_SFN7
...
@@ -1267,13 +1350,29 @@ ID = VCD_VARIABLE_UE0_SFN7
DESC = VCD variable UE0_SFN7
DESC = VCD variable UE0_SFN7
GROUP = ALL:VCD:ENB:VCD_VARIABLE
GROUP = ALL:VCD:ENB:VCD_VARIABLE
FORMAT = ulong,value
FORMAT = ulong,value
ID = VCD_VARIABLE_UE_PDCP_FLUSH_SIZE
DESC = VCD variable UE_PDCP_FLUSH_SIZE
GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_UE_PDCP_FLUSH_ERR
DESC = VCD variable UE_PDCP_FLUSH_ERR
GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_UE0_TRX_READ_NS
ID = VCD_VARIABLE_UE0_TRX_READ_NS
DESC = VCD variable UE0_TRX_READ_NS
DESC = VCD variable UE0_TRX_READ_NS
GROUP = ALL:VCD:
ENB
:VCD_VARIABLE
GROUP = ALL:VCD:
UE
:VCD_VARIABLE
FORMAT = ulong,value
FORMAT = ulong,value
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS
DESC = VCD variable UE0_TRX_WRITE_NS
DESC = VCD variable UE0_TRX_WRITE_NS
GROUP = ALL:VCD:ENB:VCD_VARIABLE
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_UE0_TRX_READ_NS_MISSING
DESC = VCD variable UE0_TRX_READ_NS_MISSING
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING
DESC = VCD variable UE0_TRX_WRITE_NS_MISSING
GROUP = ALL:VCD:UE:VCD_VARIABLE
FORMAT = ulong,value
FORMAT = ulong,value
#functions
#functions
...
@@ -1326,8 +1425,12 @@ ID = VCD_FUNCTION_TRX_WRITE_SF9
...
@@ -1326,8 +1425,12 @@ ID = VCD_FUNCTION_TRX_WRITE_SF9
DESC = VCD function TRX_WRITE_SF9
DESC = VCD function TRX_WRITE_SF9
GROUP = ALL:VCD:UE:VCD_FUNCTION
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
FORMAT = int,value
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX0
DESC = VCD function UE_SIGNAL_COND_RXTX
DESC = VCD function UE_SIGNAL_COND_RXTX0
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX1
DESC = VCD function UE_SIGNAL_COND_RXTX1
GROUP = ALL:VCD:UE:VCD_FUNCTION
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
FORMAT = int,value
ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0
ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0
...
@@ -1674,6 +1777,10 @@ ID = VCD_FUNCTION_UE_ULSCH_ENCODING
...
@@ -1674,6 +1777,10 @@ ID = VCD_FUNCTION_UE_ULSCH_ENCODING
DESC = VCD function UE_ULSCH_ENCODING
DESC = VCD function UE_ULSCH_ENCODING
GROUP = ALL:VCD:UE:VCD_FUNCTION
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
FORMAT = int,value
ID = VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI
DESC = VCD function UE_ULSCH_ENCODING_FILL_CQI
GROUP = ALL:VCD:UE:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING
ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING
DESC = VCD function UE_ULSCH_SCRAMBLING
DESC = VCD function UE_ULSCH_SCRAMBLING
GROUP = ALL:VCD:UE:VCD_FUNCTION
GROUP = ALL:VCD:UE:VCD_FUNCTION
...
@@ -1814,10 +1921,10 @@ ID = VCD_FUNCTION_RLC_DATA_REQ
...
@@ -1814,10 +1921,10 @@ ID = VCD_FUNCTION_RLC_DATA_REQ
DESC = VCD function RLC_DATA_REQ
DESC = VCD function RLC_DATA_REQ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
FORMAT = int,value
ID = VCD_FUNCTION_RLC_DATA_IND
#
ID = VCD_FUNCTION_RLC_DATA_IND
DESC = VCD function RLC_DATA_IND
#
DESC = VCD function RLC_DATA_IND
GROUP = ALL:VCD:ENB:VCD_FUNCTION
#
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
#
FORMAT = int,value
ID = VCD_FUNCTION_MAC_RLC_STATUS_IND
ID = VCD_FUNCTION_MAC_RLC_STATUS_IND
DESC = VCD function MAC_RLC_STATUS_IND
DESC = VCD function MAC_RLC_STATUS_IND
GROUP = ALL:VCD:ENB:VCD_FUNCTION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
...
@@ -1862,6 +1969,22 @@ ID = VCD_FUNCTION_PDCP_VALIDATE_SECURITY
...
@@ -1862,6 +1969,22 @@ ID = VCD_FUNCTION_PDCP_VALIDATE_SECURITY
DESC = VCD function PDCP_VALIDATE_SECURITY
DESC = VCD function PDCP_VALIDATE_SECURITY
GROUP = ALL:VCD:ENB:VCD_FUNCTION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
FORMAT = int,value
ID = VCD_FUNCTION_PDCP_FIFO_READ
DESC = VCD function PDCP_FIFO_READ
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_PDCP_FIFO_READ_BUFFER
DESC = VCD function PDCP_FIFO_READ_BUFFER
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_PDCP_FIFO_FLUSH
DESC = VCD function PDCP_FIFO_FLUSH
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER
DESC = VCD function PDCP_FIFO_FLUSH_BUFFER
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
ID = VCD_FUNCTION_RRC_RX_TX
ID = VCD_FUNCTION_RRC_RX_TX
DESC = VCD function RRC_RX_TX
DESC = VCD function RRC_RX_TX
GROUP = ALL:VCD:ENB:VCD_FUNCTION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
...
@@ -1938,82 +2061,3 @@ ID = VCD_FUNCTION_RECV_IF5
...
@@ -1938,82 +2061,3 @@ ID = VCD_FUNCTION_RECV_IF5
DESC = VCD function RECV_IF5
DESC = VCD function RECV_IF5
GROUP = ALL:VCD:ENB:VCD_FUNCTION
GROUP = ALL:VCD:ENB:VCD_FUNCTION
FORMAT = int,value
FORMAT = int,value
#################
#### UE LOGS ####
#################
#general logs
ID = UE_MASTER_TICK
DESC = UE master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view
GROUP = ALL:GENERAL:UE
FORMAT = int,eNB_ID : int,frame : int,subframe
#PHY logs
ID = UE_PHY_UL_TICK
DESC = UE uplink tick - one tick per ms at start of uplink processing
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe
ID = UE_PHY_DL_TICK
DESC = UE downlink tick - one tick per ms at start of downlink processing
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe
ID = UE_PHY_DLSCH_UE_DCI
DESC = UE downlink UE specific DCI as sent by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS
ID = UE_PHY_DLSCH_UE_ACK
DESC = UE downlink UE ACK as seen by the PHY layer in process_HARQ_feedback
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_DLSCH_UE_NACK
DESC = UE downlink UE NACK as seen by the PHY layer in process_HARQ_feedback
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_ULSCH_UE_DCI
DESC = UE uplink UE specific DCI as sent by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS
ID = UE_PHY_ULSCH_UE_ACK
DESC = UE uplink UE ACK as seen by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_ULSCH_UE_NACK
DESC = UE uplink UE NACK as seen by the PHY layer
GROUP = ALL:PHY:GRAPHIC:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
ID = UE_PHY_INPUT_SIGNAL
DESC = UE received signal in the time domain for a duration of 1ms
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata
ID = UE_PHY_DL_CHANNEL_ESTIMATE
DESC = UE channel estimation in the time domain
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,antenna : buffer,chest_t
ID = UE_PHY_PDCCH_IQ
DESC = UE PDCCH received IQ data
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,nb_rb : int,NB_RB_DL : int,symbols_per_tti : buffer,rxdataF_comp
ID = UE_PHY_PDCCH_ENERGY
DESC = UE PDSCH 1 energy and threshold
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdcch_ch_level00 : int,pdcch_ch_level01 : int,pdcch_ch_level10: int,pdcch_ch_level11
ID = UE_PHY_PDSCH_IQ
DESC = UE PDSCH received IQ data
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : int,N_RB_UL : int,symbols_per_tti : buffer,pusch_comp
ID = UE_PHY_PDSCH_ENERGY
DESC = UE PDSCH 1 energy and threshold
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdsch_ch_level00 : int,pdsch_ch_level01 : int,pdsch_ch_level10: int,pdsch_ch_level11
ID = UE_PHY_PUSCH_TX_POWER
DESC = UE PUSCH tx power
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pusch : int,ampl: int,g_pusch: int,pl: int,nb_rb
ID = UE_PHY_PUCCH_TX_POWER
DESC = UE PDSCH 1 energy and threshold
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pucch : int,ampl: int,g_pucch: int,pl
ID = UE_PHY_MEAS
DESC = UE PHY measurements
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,rsrp : int,rssi : int,snr: int,rx_power: int,noise_power: int,w_cqi: int,freq_offset
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
b325d0a1
...
@@ -1207,7 +1207,8 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
...
@@ -1207,7 +1207,8 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
*/
*/
int
pss_sss_extract
(
PHY_VARS_UE
*
phy_vars_ue
,
int
pss_sss_extract
(
PHY_VARS_UE
*
phy_vars_ue
,
int32_t
pss_ext
[
4
][
72
],
int32_t
pss_ext
[
4
][
72
],
int32_t
sss_ext
[
4
][
72
]);
int32_t
sss_ext
[
4
][
72
],
uint8_t
subframe
);
/*! \brief Extract only PSS resource elements
/*! \brief Extract only PSS resource elements
@param phy_vars_ue Pointer to UE variables
@param phy_vars_ue Pointer to UE variables
...
...
openair1/PHY/LTE_TRANSPORT/sss.c
View file @
b325d0a1
...
@@ -149,7 +149,8 @@ int pss_ch_est(PHY_VARS_UE *ue,
...
@@ -149,7 +149,8 @@ int pss_ch_est(PHY_VARS_UE *ue,
int
_do_pss_sss_extract
(
PHY_VARS_UE
*
ue
,
int
_do_pss_sss_extract
(
PHY_VARS_UE
*
ue
,
int32_t
pss_ext
[
4
][
72
],
int32_t
pss_ext
[
4
][
72
],
int32_t
sss_ext
[
4
][
72
],
int32_t
sss_ext
[
4
][
72
],
uint8_t
doPss
,
uint8_t
doSss
)
// add flag to indicate extracting only PSS, only SSS, or both
uint8_t
doPss
,
uint8_t
doSss
,
uint8_t
subframe
)
// add flag to indicate extracting only PSS, only SSS, or both
{
{
...
@@ -163,32 +164,52 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue,
...
@@ -163,32 +164,52 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue,
int
rx_offset
=
frame_parms
->
ofdm_symbol_size
-
3
*
12
;
int
rx_offset
=
frame_parms
->
ofdm_symbol_size
-
3
*
12
;
uint8_t
pss_symb
,
sss_symb
;
uint8_t
pss_symb
,
sss_symb
;
int32_t
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
0
].
rxdataF
;
int32_t
**
rxdataF
;
if
(
frame_parms
->
frame_type
==
FDD
)
{
pss_symb
=
6
-
frame_parms
->
Ncp
;
sss_symb
=
pss_symb
-
1
;
}
else
{
pss_symb
=
2
;
sss_symb
=
frame_parms
->
symbols_per_tti
-
1
;
}
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
if
(
frame_parms
->
frame_type
==
FDD
)
{
pss_symb
=
6
-
frame_parms
->
Ncp
;
sss_symb
=
pss_symb
-
1
;
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[(
subframe
&
0x1
)].
rxdataF
;
pss_rxF
=
&
rxdataF
[
aarx
][(
rx_offset
+
(
pss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
sss_rxF
=
&
rxdataF
[
aarx
][(
rx_offset
+
(
sss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
}
else
{
pss_symb
=
2
;
sss_symb
=
frame_parms
->
symbols_per_tti
-
1
;
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[(
subframe
&
0x1
)].
rxdataF
;
sss_rxF
=
&
rxdataF
[
aarx
][(
rx_offset
+
(
sss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[((
subframe
+
1
)
&
0x1
)].
rxdataF
;
pss_rxF
=
&
rxdataF
[
aarx
][(
rx_offset
+
(
pss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
}
//printf("extract_rbs: symbol_mod=%d, rx_offset=%d, ch_offset=%d\n",symbol_mod,
//printf("extract_rbs: symbol_mod=%d, rx_offset=%d, ch_offset=%d\n",symbol_mod,
// (rx_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2,
// (rx_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2,
// LTE_CE_OFFSET+ch_offset+(symbol_mod*(frame_parms->ofdm_symbol_size)));
// LTE_CE_OFFSET+ch_offset+(symbol_mod*(frame_parms->ofdm_symbol_size)));
pss_rxF
=
&
rxdataF
[
aarx
][(
rx_offset
+
(
pss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
sss_rxF
=
&
rxdataF
[
aarx
][(
rx_offset
+
(
sss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
pss_rxF_ext
=
&
pss_ext
[
aarx
][
0
];
pss_rxF_ext
=
&
pss_ext
[
aarx
][
0
];
sss_rxF_ext
=
&
sss_ext
[
aarx
][
0
];
sss_rxF_ext
=
&
sss_ext
[
aarx
][
0
];
for
(
rb
=
0
;
rb
<
nb_rb
;
rb
++
)
{
for
(
rb
=
0
;
rb
<
nb_rb
;
rb
++
)
{
// skip DC carrier
// skip DC carrier
if
(
rb
==
3
)
{
if
(
rb
==
3
)
{
sss_rxF
=
&
rxdataF
[
aarx
][(
1
+
(
sss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
if
(
frame_parms
->
frame_type
==
FDD
)
pss_rxF
=
&
rxdataF
[
aarx
][(
1
+
(
pss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
{
sss_rxF
=
&
rxdataF
[
aarx
][(
1
+
(
sss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
pss_rxF
=
&
rxdataF
[
aarx
][(
1
+
(
pss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
}
else
{
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[(
subframe
&
0x1
)].
rxdataF
;
sss_rxF
=
&
rxdataF
[
aarx
][(
1
+
(
sss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[((
subframe
+
1
)
&
0x1
)].
rxdataF
;
pss_rxF
=
&
rxdataF
[
aarx
][(
1
+
(
pss_symb
*
(
frame_parms
->
ofdm_symbol_size
)))];
}
}
}
for
(
i
=
0
;
i
<
12
;
i
++
)
{
for
(
i
=
0
;
i
<
12
;
i
++
)
{
...
@@ -209,16 +230,17 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue,
...
@@ -209,16 +230,17 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue,
int
pss_sss_extract
(
PHY_VARS_UE
*
phy_vars_ue
,
int
pss_sss_extract
(
PHY_VARS_UE
*
phy_vars_ue
,
int32_t
pss_ext
[
4
][
72
],
int32_t
pss_ext
[
4
][
72
],
int32_t
sss_ext
[
4
][
72
])
int32_t
sss_ext
[
4
][
72
],
uint8_t
subframe
)
{
{
return
_do_pss_sss_extract
(
phy_vars_ue
,
pss_ext
,
sss_ext
,
1
/* doPss */
,
1
/* doSss */
);
return
_do_pss_sss_extract
(
phy_vars_ue
,
pss_ext
,
sss_ext
,
1
/* doPss */
,
1
/* doSss */
,
subframe
);
}
}
int
pss_only_extract
(
PHY_VARS_UE
*
phy_vars_ue
,
int
pss_only_extract
(
PHY_VARS_UE
*
phy_vars_ue
,
int32_t
pss_ext
[
4
][
72
])
int32_t
pss_ext
[
4
][
72
])
{
{
static
int32_t
dummy
[
4
][
72
];
static
int32_t
dummy
[
4
][
72
];
return
_do_pss_sss_extract
(
phy_vars_ue
,
pss_ext
,
dummy
,
1
/* doPss */
,
0
/* doSss */
);
return
_do_pss_sss_extract
(
phy_vars_ue
,
pss_ext
,
dummy
,
1
/* doPss */
,
0
/* doSss */
,
0
);
}
}
...
@@ -226,7 +248,7 @@ int sss_only_extract(PHY_VARS_UE *phy_vars_ue,
...
@@ -226,7 +248,7 @@ int sss_only_extract(PHY_VARS_UE *phy_vars_ue,
int32_t
sss_ext
[
4
][
72
])
int32_t
sss_ext
[
4
][
72
])
{
{
static
int32_t
dummy
[
4
][
72
];
static
int32_t
dummy
[
4
][
72
];
return
_do_pss_sss_extract
(
phy_vars_ue
,
dummy
,
sss_ext
,
0
/* doPss */
,
1
/* doSss */
);
return
_do_pss_sss_extract
(
phy_vars_ue
,
dummy
,
sss_ext
,
0
/* doPss */
,
1
/* doSss */
,
0
);
}
}
...
@@ -295,10 +317,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_
...
@@ -295,10 +317,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_
0
,
0
,
1
);
1
);
}
}
// pss sss extract for subframe 0
pss_sss_extract
(
ue
,
pss_sss_extract
(
ue
,
pss_ext
,
pss_ext
,
sss0_ext
);
sss0_ext
,
0
);
/*
/*
write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1);
write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1);
write_output("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1);
write_output("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1);
...
@@ -346,9 +368,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_
...
@@ -346,9 +368,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_
1
);
1
);
}
}
// pss sss extract for subframe 5
pss_sss_extract
(
ue
,
pss_sss_extract
(
ue
,
pss_ext
,
pss_ext
,
sss5_ext
);
sss5_ext
,
5
);
// write_output("sss5_ext0.m","sss5ext0",sss5_ext,72,1,1);
// write_output("sss5_ext0.m","sss5ext0",sss5_ext,72,1,1);
// get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS
// get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS
...
...
openair1/SCHED/phy_procedures_lte_common.c
View file @
b325d0a1
...
@@ -339,6 +339,9 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -339,6 +339,9 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
o_ACK
[
0
]
=
harq_ack
[
subframe_dl0
].
ack
;
o_ACK
[
0
]
=
harq_ack
[
subframe_dl0
].
ack
;
status
=
harq_ack
[
subframe_dl0
].
send_harq_status
;
status
=
harq_ack
[
subframe_dl0
].
send_harq_status
;
if
(
do_reset
)
harq_ack
[
subframe_dl0
].
send_harq_status
=
0
;
//printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]);
//printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]);
}
else
{
}
else
{
switch
(
frame_parms
->
tdd_config
)
{
switch
(
frame_parms
->
tdd_config
)
{
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
b325d0a1
...
@@ -1184,11 +1184,12 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1184,11 +1184,12 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
=
19
;
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
=
19
;
}
}
LOG_I
(
PHY
,
"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d
\n
"
,
LOG_I
(
PHY
,
"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d,
PL %d,
P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d
\n
"
,
ue
->
Mod_id
,
ue
->
Mod_id
,
frame_tx
,
frame_tx
,
subframe_tx
,
subframe_tx
,
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
,
ue
->
prach_resources
[
eNB_id
]
->
ra_PreambleIndex
,
get_PL
(
ue
->
Mod_id
,
ue
->
CC_id
,
eNB_id
),
ue
->
tx_power_dBm
[
subframe_tx
],
ue
->
tx_power_dBm
[
subframe_tx
],
ue
->
prach_resources
[
eNB_id
]
->
ra_PREAMBLE_RECEIVED_TARGET_POWER
,
ue
->
prach_resources
[
eNB_id
]
->
ra_PREAMBLE_RECEIVED_TARGET_POWER
,
ue
->
prach_resources
[
eNB_id
]
->
ra_TDD_map_index
,
ue
->
prach_resources
[
eNB_id
]
->
ra_TDD_map_index
,
...
@@ -1377,7 +1378,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
...
@@ -1377,7 +1378,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
round
=
0
;
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
round
=
0
;
}
}
ack_status
=
g
et_ack
(
&
ue
->
frame_parms
,
ack_status
=
res
et_ack
(
&
ue
->
frame_parms
,
ue
->
dlsch
[
eNB_id
][
0
]
->
harq_ack
,
ue
->
dlsch
[
eNB_id
][
0
]
->
harq_ack
,
subframe_tx
,
subframe_tx
,
ue
->
ulsch
[
eNB_id
]
->
o_ACK
);
ue
->
ulsch
[
eNB_id
]
->
o_ACK
);
...
@@ -1393,14 +1394,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
...
@@ -1393,14 +1394,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
// check if we received a PDSCH at subframe_tx - 4
// check if we received a PDSCH at subframe_tx - 4
// ==> send ACK/NACK on PUSCH
// ==> send ACK/NACK on PUSCH
if
(
(
ue
->
dlsch
[
eNB_id
][
0
]
->
harq_ack
[
proc
->
subframe_rx
].
send_harq_status
)
==
1
)
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
O_ACK
=
ack_status
;
{
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
O_ACK
=
1
;
}
else
{
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
O_ACK
=
0
;
}
#if T_TRACER
#if T_TRACER
if
(
ue
->
ulsch
[
eNB_id
]
->
o_ACK
[
0
])
if
(
ue
->
ulsch
[
eNB_id
]
->
o_ACK
[
0
])
...
@@ -1710,6 +1704,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1710,6 +1704,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
int
tx_amp
;
int
tx_amp
;
int16_t
Po_PUCCH
;
int16_t
Po_PUCCH
;
uint8_t
ack_status
=
0
;
uint8_t
ack_status
=
0
;
uint8_t
ack_sr_generated
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH
,
VCD_FUNCTION_IN
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH
,
VCD_FUNCTION_IN
);
...
@@ -1781,7 +1776,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1781,7 +1776,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
// we need to transmit ACK/NAK in this subframe
// we need to transmit ACK/NAK in this subframe
ue
->
generate_ul_signal
[
eNB_id
]
=
1
;
ue
->
generate_ul_signal
[
eNB_id
]
=
1
;
ack_sr_generated
=
1
;
if
((
frame_parms
->
frame_type
==
TDD
)
&&
(
SR_payload
>
0
))
{
if
((
frame_parms
->
frame_type
==
TDD
)
&&
(
SR_payload
>
0
))
{
format
=
pucch_format1b
;
format
=
pucch_format1b
;
}
}
...
@@ -1882,6 +1878,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1882,6 +1878,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
}
}
else
if
(
SR_payload
==
1
)
{
// no ACK/NAK but SR is triggered by MAC
}
else
if
(
SR_payload
==
1
)
{
// no ACK/NAK but SR is triggered by MAC
ack_sr_generated
=
1
;
if
(
ue
->
mac_enabled
==
1
)
{
if
(
ue
->
mac_enabled
==
1
)
{
Po_PUCCH
=
pucch_power_cntl
(
ue
,
proc
,
subframe_tx
,
eNB_id
,
pucch_format1
);
Po_PUCCH
=
pucch_power_cntl
(
ue
,
proc
,
subframe_tx
,
eNB_id
,
pucch_format1
);
}
}
...
@@ -1940,7 +1937,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1940,7 +1937,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
// PUCCH 2x
// PUCCH 2x
if
(
ue
->
generate_ul_signal
[
eNB_id
]
==
0
)
{
// we have not generated ACK/NAK/SR in this subframe
if
(
ack_sr_generated
==
0
)
{
// we have not generated ACK/NAK/SR in this subframe
n2_pucch
=
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PUCCH_ResourceIndex
;
n2_pucch
=
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
cqi_PUCCH_ResourceIndex
;
// only use format2 for now, i.e. now ACK/NAK - CQI multiplexing
// only use format2 for now, i.e. now ACK/NAK - CQI multiplexing
...
@@ -1971,14 +1968,6 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1971,14 +1968,6 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
T
(
T_UE_PHY_PUCCH_TX_POWER
,
T_INT
(
eNB_id
),
T_INT
(
Mod_id
),
T_INT
(
frame_tx
%
1024
),
T_INT
(
subframe_tx
),
T_INT
(
ue
->
tx_power_dBm
[
subframe_tx
]),
T
(
T_UE_PHY_PUCCH_TX_POWER
,
T_INT
(
eNB_id
),
T_INT
(
Mod_id
),
T_INT
(
frame_tx
%
1024
),
T_INT
(
subframe_tx
),
T_INT
(
ue
->
tx_power_dBm
[
subframe_tx
]),
T_INT
(
tx_amp
),
T_INT
(
ue
->
dlsch
[
eNB_id
][
0
]
->
g_pucch
),
T_INT
(
get_PL
(
ue
->
Mod_id
,
ue
->
CC_id
,
eNB_id
)));
T_INT
(
tx_amp
),
T_INT
(
ue
->
dlsch
[
eNB_id
][
0
]
->
g_pucch
),
T_INT
(
get_PL
(
ue
->
Mod_id
,
ue
->
CC_id
,
eNB_id
)));
#endif
#endif
LOG_D
(
PHY
,
"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (CQI), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d
\n
"
,
Mod_id
,
ue
->
dlsch
[
eNB_id
][
0
]
->
rnti
,
frame_tx
,
subframe_tx
,
n2_pucch
,
Po_PUCCH
,
isShortenPucch
,
tx_amp
);
int
len
;
int
len
;
// get the payload : < 12 bits, returned in len
// get the payload : < 12 bits, returned in len
...
@@ -1997,6 +1986,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
...
@@ -1997,6 +1986,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
ue
->
pdcch_vars
[
eNB_id
]
->
crnti
);
ue
->
pdcch_vars
[
eNB_id
]
->
crnti
);
ue
->
generate_ul_signal
[
eNB_id
]
=
1
;
ue
->
generate_ul_signal
[
eNB_id
]
=
1
;
LOG_D
(
PHY
,
"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (CQI %d), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d
\n
"
,
Mod_id
,
ue
->
dlsch
[
eNB_id
][
0
]
->
rnti
,
frame_tx
,
subframe_tx
,
CQI_payload
,
n2_pucch
,
Po_PUCCH
,
isShortenPucch
,
tx_amp
);
}
}
// Periodic RI report
// Periodic RI report
else
if
((
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
ri_ConfigIndex
>
0
)
&&
else
if
((
ue
->
cqi_report_config
[
eNB_id
].
CQI_ReportPeriodic
.
ri_ConfigIndex
>
0
)
&&
...
...
openair2/RRC/LITE/rrc_UE.c
View file @
b325d0a1
...
@@ -3131,9 +3131,9 @@ static void dump_sib2( SystemInformationBlockType2_t *sib2 )
...
@@ -3131,9 +3131,9 @@ static void dump_sib2( SystemInformationBlockType2_t *sib2 )
sib2
->
radioResourceConfigCommon
.
soundingRS_UL_ConfigCommon
.
choice
.
setup
.
srs_SubframeConfig
);
sib2
->
radioResourceConfigCommon
.
soundingRS_UL_ConfigCommon
.
choice
.
setup
.
srs_SubframeConfig
);
LOG_I
(
RRC
,
"radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission : %d
\n
"
,
LOG_I
(
RRC
,
"radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission : %d
\n
"
,
sib2
->
radioResourceConfigCommon
.
soundingRS_UL_ConfigCommon
.
choice
.
setup
.
ackNackSRS_SimultaneousTransmission
);
sib2
->
radioResourceConfigCommon
.
soundingRS_UL_ConfigCommon
.
choice
.
setup
.
ackNackSRS_SimultaneousTransmission
);
LOG_I
(
RRC
,
"radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts : %ld
\n
"
,
//
LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts : %ld\n",
/* TODO: check that it's okay to access [0] */
/* TODO: check that it's okay to access [0] */
sib2
->
radioResourceConfigCommon
.
soundingRS_UL_ConfigCommon
.
choice
.
setup
.
srs_MaxUpPts
[
0
]
);
//
sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts[0] );
}
}
// uplinkPowerControlCommon
// uplinkPowerControlCommon
...
...
openair3/NAS/COMMON/EMM/MSG/AttachAccept.c
View file @
b325d0a1
...
@@ -28,6 +28,7 @@
...
@@ -28,6 +28,7 @@
#include "TLVEncoder.h"
#include "TLVEncoder.h"
#include "TLVDecoder.h"
#include "TLVDecoder.h"
#include "AttachAccept.h"
#include "AttachAccept.h"
#include "assertions.h"
int
decode_attach_accept
(
attach_accept_msg
*
attach_accept
,
uint8_t
*
buffer
,
uint32_t
len
)
int
decode_attach_accept
(
attach_accept_msg
*
attach_accept
,
uint8_t
*
buffer
,
uint32_t
len
)
{
{
...
@@ -59,7 +60,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint
...
@@ -59,7 +60,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint
decoded
+=
decoded_result
;
decoded
+=
decoded_result
;
/* Decoding optional fields */
/* Decoding optional fields */
while
(
len
-
decoded
>
0
)
{
while
(
((
int32_t
)
len
-
(
int32_t
)
decoded
)
>
0
)
{
uint8_t
ieiDecoded
=
*
(
buffer
+
decoded
);
uint8_t
ieiDecoded
=
*
(
buffer
+
decoded
);
/* Type | value iei are below 0x80 so just return the first 4 bits */
/* Type | value iei are below 0x80 so just return the first 4 bits */
...
@@ -189,6 +190,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint
...
@@ -189,6 +190,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint
default:
default:
errorCodeDecoder
=
TLV_DECODE_UNEXPECTED_IEI
;
errorCodeDecoder
=
TLV_DECODE_UNEXPECTED_IEI
;
LOG_TRACE
(
WARNING
,
"DECODE_UNEXPECTED_IEI %x (4 bits)"
,
ieiDecoded
);
LOG_TRACE
(
WARNING
,
"DECODE_UNEXPECTED_IEI %x (4 bits)"
,
ieiDecoded
);
AssertFatal
(
0
,
" "
);
return
TLV_DECODE_UNEXPECTED_IEI
;
return
TLV_DECODE_UNEXPECTED_IEI
;
}
}
}
}
...
...
targets/RT/USER/lte-ue.c
View file @
b325d0a1
...
@@ -453,7 +453,14 @@ static void *UE_thread_synch(void *arg)
...
@@ -453,7 +453,14 @@ static void *UE_thread_synch(void *arg)
// rerun with new cell parameters and frequency-offset
// rerun with new cell parameters and frequency-offset
for
(
i
=
0
;
i
<
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_num_channels
;
i
++
)
{
for
(
i
=
0
;
i
<
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_num_channels
;
i
++
)
{
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_gain
[
UE
->
rf_map
.
chain
+
i
]
=
UE
->
rx_total_gain_dB
;
//-USRP_GAIN_OFFSET;
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_gain
[
UE
->
rf_map
.
chain
+
i
]
=
UE
->
rx_total_gain_dB
;
//-USRP_GAIN_OFFSET;
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_freq
[
UE
->
rf_map
.
chain
+
i
]
-=
UE
->
common_vars
.
freq_offset
;
if
(
freq_offset
>=
0
)
{
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_freq
[
UE
->
rf_map
.
chain
+
i
]
+=
UE
->
common_vars
.
freq_offset
;
}
else
{
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_freq
[
UE
->
rf_map
.
chain
+
i
]
-=
UE
->
common_vars
.
freq_offset
;
}
openair0_cfg
[
UE
->
rf_map
.
card
].
tx_freq
[
UE
->
rf_map
.
chain
+
i
]
=
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_freq
[
UE
->
rf_map
.
chain
+
i
]
+
uplink_frequency_offset
[
CC_id
][
i
];
openair0_cfg
[
UE
->
rf_map
.
card
].
tx_freq
[
UE
->
rf_map
.
chain
+
i
]
=
openair0_cfg
[
UE
->
rf_map
.
card
].
rx_freq
[
UE
->
rf_map
.
chain
+
i
]
+
uplink_frequency_offset
[
CC_id
][
i
];
downlink_frequency
[
CC_id
][
i
]
=
openair0_cfg
[
CC_id
].
rx_freq
[
i
];
downlink_frequency
[
CC_id
][
i
]
=
openair0_cfg
[
CC_id
].
rx_freq
[
i
];
freq_offset
=
0
;
freq_offset
=
0
;
...
...
targets/SIMU/USER/oaisim_functions.c
View file @
b325d0a1
...
@@ -458,6 +458,8 @@ void get_simulation_options(int argc, char *argv[])
...
@@ -458,6 +458,8 @@ void get_simulation_options(int argc, char *argv[])
case
'a'
:
case
'a'
:
abstraction_flag
=
1
;
abstraction_flag
=
1
;
printf
(
"FATAL: -a flag not functional for the moment.
\n
We are working on fixing the abstraction mode.
\n
"
);
exit
(
1
);
break
;
break
;
case
'A'
:
case
'A'
:
...
...
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