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
849ccbf7
Commit
849ccbf7
authored
May 31, 2023
by
Danil Ruban
Committed by
Jerome PERALDI
Jun 07, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugz #125608 rework vt timer task
parent
b7b038cb
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
235 additions
and
311 deletions
+235
-311
openair3/SS/ss_eNB_drb_task.c
openair3/SS/ss_eNB_drb_task.c
+7
-28
openair3/SS/ss_eNB_srb_task.c
openair3/SS/ss_eNB_srb_task.c
+3
-39
openair3/SS/ss_eNB_sys_task.c
openair3/SS/ss_eNB_sys_task.c
+71
-216
openair3/SS/ss_eNB_vt_timer_task.c
openair3/SS/ss_eNB_vt_timer_task.c
+143
-26
openair3/SS/ss_eNB_vt_timer_task.h
openair3/SS/ss_eNB_vt_timer_task.h
+11
-1
openair3/SS/ss_eNB_vtp_task.c
openair3/SS/ss_eNB_vtp_task.c
+0
-1
No files found.
openair3/SS/ss_eNB_drb_task.c
View file @
849ccbf7
...
...
@@ -168,32 +168,11 @@ static void ss_task_handle_drb_pdu_req(struct DRB_COMMON_REQ *req,int cell_index
}
SS_DRB_PDU_REQ
(
message_p
).
rnti
=
SS_context
.
SSCell_list
[
cell_index
].
ss_rnti_g
;
uint8_t
msg_queued
=
0
;
if
(
req
->
Common
.
TimingInfo
.
d
==
TimingInfo_Type_SubFrame
)
{
ss_set_timinfo_t
tinfo
,
timer_tinfo
;
tinfo
.
sfn
=
req
->
Common
.
TimingInfo
.
v
.
SubFrame
.
SFN
.
v
.
Number
;
tinfo
.
sf
=
req
->
Common
.
TimingInfo
.
v
.
SubFrame
.
Subframe
.
v
.
Number
;
timer_tinfo
=
tinfo
;
msg_queued
=
msg_can_be_queued
(
tinfo
,
&
timer_tinfo
);
LOG_A
(
ENB_SS_DRB_ACP
,
"VT_TIMER DRB task received MSG for future SFN %d , SF %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
if
(
msg_queued
)
{
msg_queued
=
vt_timer_setup
(
timer_tinfo
,
TASK_RRC_ENB
,
instance_g
,
message_p
);
LOG_A
(
ENB_SS_DRB_ACP
,
"DRB_PDU Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d"
,
tinfo
.
sfn
,
tinfo
.
sf
,
SS_context
.
sfn
,
SS_context
.
sf
);
}
}
if
(
!
msg_queued
)
{
int
send_res
=
itti_send_msg_to_task
(
TASK_RRC_ENB
,
instance_g
,
message_p
);
if
(
send_res
<
0
)
{
LOG_A
(
ENB_SS_DRB_ACP
,
"[SS_DRB] Error in itti_send_msg_to_task"
);
}
LOG_A
(
ENB_SS_DRB_ACP
,
"Send res: %d"
,
send_res
);
}
if
(
!
vt_timer_push_msg
(
&
req
->
Common
.
TimingInfo
,
TASK_RRC_ENB
,
instance_g
,
message_p
))
{
itti_send_msg_to_task
(
TASK_RRC_ENB
,
instance_g
,
message_p
);
}
}
}
...
...
@@ -303,10 +282,10 @@ void *ss_eNB_drb_process_itti_msg(void *notUsed)
}
task_id_t
origin_task
=
ITTI_MSG_ORIGIN_ID
(
received_msg
);
if
(
origin_task
==
TASK_SS_PORTMAN
)
if
(
origin_task
==
TASK_SS_PORTMAN
)
{
LOG_D
(
ENB_SS_DRB
,
"[SS_DRB] DUMMY WAKEUP recevied from PORTMAN state %d
\n
"
,
SS_context
.
SSCell_list
[
cell_index
].
State
);
}
}
else
{
LOG_A
(
ENB_SS_DRB
,
"[SS_DRB] Received SS_DRB_PDU_IND from RRC PDCP
\n
"
);
...
...
openair3/SS/ss_eNB_srb_task.c
View file @
849ccbf7
...
...
@@ -251,53 +251,17 @@ static void ss_task_handle_rrc_pdu_req(struct EUTRA_RRC_PDU_REQ *req)
LOG_P
(
OAILOG_DEBUG
,
"DL_DCCH_Message"
,
lttng_sdu
,
SS_RRC_PDU_REQ
(
message_p
).
sdu_size
);
}
LOG_A
(
ENB_SS_SRB
_ACP
,
"[SS_SRB][EUTRA_RRC_PDU_REQ] sending to TASK_RRC_ENB: {srb: %d, ch: %s, qty: %d rnti %d}
\n
"
,
LOG_A
(
ENB_SS_SRB
,
"[SS_SRB][EUTRA_RRC_PDU_REQ] sending to TASK_RRC_ENB: {srb: %d, ch: %s, qty: %d rnti %d}
\n
"
,
SS_RRC_PDU_REQ
(
message_p
).
srb_id
,
req
->
RrcPdu
.
d
==
RRC_MSG_Request_Type_Ccch
?
"CCCH"
:
"DCCH"
,
SS_RRC_PDU_REQ
(
message_p
).
sdu_size
,
rnti_g
);
SS_RRC_PDU_REQ
(
message_p
).
rnti
=
rnti_g
;
uint8_t
msg_queued
=
0
;
if
(
req
->
Common
.
TimingInfo
.
d
==
TimingInfo_Type_SubFrame
)
if
(
!
vt_timer_push_msg
(
&
req
->
Common
.
TimingInfo
,
TASK_RRC_ENB
,
instance_g
,
message_p
))
{
ss_set_timinfo_t
tinfo
,
timer_tinfo
;
memset
(
&
tinfo
,
0
,
sizeof
(
tinfo
));
memset
(
&
timer_tinfo
,
0
,
sizeof
(
timer_tinfo
));
tinfo
.
sfn
=
req
->
Common
.
TimingInfo
.
v
.
SubFrame
.
SFN
.
v
.
Number
;
tinfo
.
sf
=
req
->
Common
.
TimingInfo
.
v
.
SubFrame
.
Subframe
.
v
.
Number
;
timer_tinfo
=
tinfo
;
msg_queued
=
msg_can_be_queued
(
tinfo
,
&
timer_tinfo
);
LOG_I
(
ENB_SS_SRB_ACP
,
"msg_queued:%d
\n
"
,
msg_queued
);
LOG_A
(
ENB_SS_SRB_ACP
,
"VT_TIMER SRB task received MSG for future SFN %d , SF %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
if
(
msg_queued
)
{
/* Below adjustment is made as MAC is taking 1 extra SF before scheduling and "msg_can_be_queued" is adjusting by 4 SF */
if
(
timer_tinfo
.
sf
==
0
)
{
timer_tinfo
.
sfn
--
;
timer_tinfo
.
sf
=
9
;
}
else
timer_tinfo
.
sf
--
;
msg_queued
=
vt_timer_setup
(
timer_tinfo
,
TASK_RRC_ENB
,
instance_g
,
message_p
);
LOG_A
(
ENB_SS_SRB_ACP
,
"RRC_PDU Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d"
,
tinfo
.
sfn
,
tinfo
.
sf
,
SS_context
.
sfn
,
SS_context
.
sf
);
}
LOG_I
(
ENB_SS_SRB_ACP
,
"msg_queued2:%d
\n
"
,
msg_queued
);
itti_send_msg_to_task
(
TASK_RRC_ENB
,
instance_g
,
message_p
);
}
if
(
!
msg_queued
)
{
int
send_res
=
itti_send_msg_to_task
(
TASK_RRC_ENB
,
instance_g
,
message_p
);
if
(
send_res
<
0
)
{
LOG_A
(
ENB_SS_SRB_ACP
,
"[SS_SRB] Error in itti_send_msg_to_task"
);
}
LOG_A
(
ENB_SS_SRB_ACP
,
"Send res: %d"
,
send_res
);
}
}
}
...
...
openair3/SS/ss_eNB_sys_task.c
View file @
849ccbf7
This diff is collapsed.
Click to expand it.
openair3/SS/ss_eNB_vt_timer_task.c
View file @
849ccbf7
...
...
@@ -31,22 +31,16 @@
#include "ss_eNB_proxy_iface.h"
#include "ss_eNB_vt_timer_task.h"
#include <assert.h>
extern
SSConfigContext_t
SS_context
;
extern
RAN_CONTEXT_t
RC
;
/*
* Function : vt_add_sf
* Description: Helper function to add offset to SFN_SF
*/
static
uint8_t
_vt_timer_setup
(
ss_set_timinfo_t
*
tinfo
,
task_id_t
task_id
,
instance_t
instance
,
void
*
msg
);
static
uint8_t
_msg_can_be_queued
(
ss_set_timinfo_t
*
req_tinfo
);
static
void
vt_add_sf
(
uint16_t
*
frameP
,
uint8_t
*
subframeP
,
int
offset
)
{
*
frameP
=
(
*
frameP
+
((
*
subframeP
+
offset
)
/
10
))
%
1024
;
*
subframeP
=
((
*
subframeP
+
offset
)
%
10
);
}
/*
* Function : vt_subtract_sf
* Description: Helper function to substract offset to SFN_SF
...
...
@@ -82,6 +76,8 @@ uint8_t msg_can_be_queued(ss_set_timinfo_t req_tinfo, ss_set_timinfo_t *timer_ti
return
false
;
}
/*
* Function : vt_timer_setup
* Description: Function to set upt the VT timer for the SFN_SF
...
...
@@ -89,23 +85,143 @@ uint8_t msg_can_be_queued(ss_set_timinfo_t req_tinfo, ss_set_timinfo_t *timer_ti
*/
uint8_t
vt_timer_setup
(
ss_set_timinfo_t
tinfo
,
task_id_t
task_id
,
instance_t
instance
,
void
*
msg
)
{
LOG_A
(
ENB_SS_VT_TIMER
,
"VT_TIMER setup1 for SFN %d , SF %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
uint32_t
sfnSfKey
=
(
tinfo
.
sfn
<<
4
)
|
tinfo
.
sf
;
vt_timer_elm_t
*
timer_ele_p
;
timer_ele_p
=
calloc
(
1
,
sizeof
(
vt_timer_elm_t
));
return
_vt_timer_setup
(
&
tinfo
,
task_id
,
instance
,
msg
);
}
/*
* Function : vt_add_sf
* Description: Helper function to add offset to SFN_SF
*/
static
void
_vt_add_sf
(
uint16_t
*
frameP
,
uint8_t
*
subframeP
,
int
offset
)
{
if
(
offset
>
0
)
{
*
frameP
=
(
*
frameP
+
((
*
subframeP
+
offset
)
/
10
))
%
1024
;
*
subframeP
=
((
*
subframeP
+
offset
)
%
10
);
}
else
{
if
(
*
subframeP
<
offset
)
{
*
frameP
=
(
*
frameP
+
1024
-
1
)
%
1024
;
}
*
subframeP
=
(
*
subframeP
+
10
-
offset
)
%
10
;
}
}
void
vt_add_sf
(
struct
TimingInfo_Type
*
at
,
int
offset
)
{
if
(
at
!=
NULL
&&
at
->
d
==
TimingInfo_Type_SubFrame
)
{
uint8_t
sfn
=
SS_context
.
sfn
;
uint16_t
sf
=
SS_context
.
sf
;
if
(
at
->
v
.
SubFrame
.
SFN
.
d
==
SystemFrameNumberInfo_Type_Number
)
{
sfn
=
at
->
v
.
SubFrame
.
SFN
.
v
.
Number
;
}
if
(
at
->
v
.
SubFrame
.
Subframe
.
d
==
SubFrameInfo_Type_Number
)
{
sf
=
at
->
v
.
SubFrame
.
Subframe
.
v
.
Number
;
}
_vt_add_sf
(
&
sf
,
&
sfn
,
offset
);
at
->
v
.
SubFrame
.
SFN
.
d
=
SystemFrameNumberInfo_Type_Number
;
at
->
v
.
SubFrame
.
SFN
.
v
.
Number
=
sfn
;
at
->
v
.
SubFrame
.
Subframe
.
d
=
SubFrameInfo_Type_Number
;
at
->
v
.
SubFrame
.
Subframe
.
v
.
Number
=
sf
;
}
}
int
vt_timer_push_msg
(
struct
TimingInfo_Type
*
at
,
task_id_t
task_id
,
instance_t
instance
,
MessageDef
*
msg_p
)
{
int
msg_queued
=
0
;
if
(
at
!=
NULL
&&
at
->
d
==
TimingInfo_Type_SubFrame
)
{
if
(
at
->
v
.
SubFrame
.
HSFN
.
d
==
SystemFrameNumberInfo_Type_Number
)
{
return
0
;
}
ss_set_timinfo_t
timer_tinfo
=
{
.
sfn
=
SS_context
.
sfn
,
.
sf
=
SS_context
.
sf
+
6
,
};
if
(
at
->
v
.
SubFrame
.
SFN
.
d
==
SystemFrameNumberInfo_Type_Number
)
{
timer_tinfo
.
sfn
=
at
->
v
.
SubFrame
.
SFN
.
v
.
Number
;
}
if
(
at
->
v
.
SubFrame
.
Subframe
.
d
==
SubFrameInfo_Type_Number
)
{
timer_tinfo
.
sf
=
at
->
v
.
SubFrame
.
Subframe
.
v
.
Number
;
}
else
{
return
0
;
}
msg_queued
=
_msg_can_be_queued
(
&
timer_tinfo
);
if
(
msg_queued
)
{
msg_queued
=
_vt_timer_setup
(
&
timer_tinfo
,
task_id
,
instance
,
msg_p
);
LOG_E
(
ENB_SS
,
"Message Queued as the scheduled SFN is %d SF: %d and curr SFN %d , SF %d, msg_queued: %d
\r\n
"
,
timer_tinfo
.
sfn
,
timer_tinfo
.
sf
,
SS_context
.
sfn
,
SS_context
.
sf
,
msg_queued
);
}
else
{
vt_add_sf
(
at
,
-
3
);
LOG_E
(
ENB_SS
,
"VT_TIMER SYS Rescheduling MSG %p for future SFN %d , SF %d
\r\n
"
,
msg_p
,
timer_tinfo
.
sfn
,
timer_tinfo
.
sf
);
return
vt_timer_push_msg
(
at
,
task_id
,
instance
,
msg_p
);
}
}
return
msg_queued
;
}
/*
* Function : msg_can_be_queued
* Description: Helper function to check if the received MSG shall be queued
*/
static
uint8_t
_msg_can_be_queued
(
ss_set_timinfo_t
*
req_tinfo
)
{
ss_set_timinfo_t
curr_tinfo
;
curr_tinfo
.
sfn
=
SS_context
.
sfn
;
curr_tinfo
.
sf
=
SS_context
.
sf
;
uint32_t
sfnSfKey
=
(
req_tinfo
->
sfn
<<
4
)
|
req_tinfo
->
sf
;
/*It is nonsense to check req_tinfo is after curr_tinfo */
if
(
hashtable_is_key_exists
(
SS_context
.
vt_timer_table
,
sfnSfKey
)
!=
HASH_TABLE_OK
&&
(
req_tinfo
->
sfn
!=
curr_tinfo
.
sfn
||
((
req_tinfo
->
sfn
==
curr_tinfo
.
sfn
)
&&
(
req_tinfo
->
sf
-
curr_tinfo
.
sf
)
>
0
)))
{
LOG_E
(
ENB_APP
,
"VT_TIMER MSG to be queued TRUE for SFN %d , SF %d
\n
"
,
req_tinfo
->
sfn
,
req_tinfo
->
sf
);
return
true
;
}
return
false
;
}
/*
* Function : vt_timer_setup
* Description: Function to set upt the VT timer for the SFN_SF
* and store the message to received
*/
static
uint8_t
_vt_timer_setup
(
ss_set_timinfo_t
*
tinfo
,
task_id_t
task_id
,
instance_t
instance
,
void
*
msg
)
{
uint32_t
sfnSfKey
=
(
tinfo
->
sfn
<<
4
)
|
tinfo
->
sf
;
vt_timer_elm_t
*
timer_ele_p
=
calloc
(
1
,
sizeof
(
vt_timer_elm_t
));
assert
(
timer_ele_p
);
timer_ele_p
->
instance
=
instance
;
timer_ele_p
->
task_id
=
task_id
;
timer_ele_p
->
msg
=
msg
;
LOG_A
(
ENB_SS_VT_TIMER
,
"VT_TIMER setup2 for SFN %d , SF %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
if
(
hashtable_insert
(
SS_context
.
vt_timer_table
,
(
hash_key_t
)
sfnSfKey
,
(
void
*
)
timer_ele_p
)
==
HASH_TABLE_OK
)
{
LOG_
A
(
ENB_SS_VT_TIMER
,
"VT_TIMER setup for SFN %d , SF %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
LOG_
E
(
ENB_APP
,
"VT_TIMER setup for SFN %d , SF %d
\n
"
,
tinfo
->
sfn
,
tinfo
->
sf
);
return
1
;
}
LOG_A
(
ENB_SS_VT_TIMER
,
"VT_TIMER not setup for SFN %d , SF %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
return
0
;
return
false
;
}
/*
* Function : ss_vt_timer_check
...
...
@@ -121,30 +237,31 @@ static inline void ss_vt_timer_check(ss_set_timinfo_t tinfo)
//printf("VT_TIMER foudn queued SFN %d , SF %d\n",tinfo.sfn,tinfo.sf);
while
(
hashtable_is_key_exists
(
SS_context
.
vt_timer_table
,
(
hash_key_t
)
sfnSfKey
)
==
HASH_TABLE_OK
)
{
LOG_
D
(
ENB_SS_VT_TIMER
,
"VT_TIMER Timeout sending curr SFN %d SF %d
\n
"
,
LOG_
E
(
ENB_APP
,
"VT_TIMER Timeout sending curr SFN %d SF %d
\n
"
,
SS_context
.
sfn
,
SS_context
.
sf
);
hashtable_get
(
SS_context
.
vt_timer_table
,
(
hash_key_t
)
sfnSfKey
,
(
void
**
)
&
timer_ele_p
);
AssertFatal
(
timer_ele_p
,
"VT Timer - timer element is NULL"
);
LOG_A
(
ENB_SS_VT_TIMER
,
"VT_TIMER Enter check SFN %d , SF %d taskID %d timer_ele.task_id instance %ld
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
,
timer_ele_p
->
task_id
,
timer_ele_p
->
instance
);
int
send_res
=
itti_send_msg_to_task
(
timer_ele_p
->
task_id
,
timer_ele_p
->
instance
,
(
MessageDef
*
)
timer_ele_p
->
msg
);
if
(
send_res
<
0
)
{
LOG_
A
(
ENB_SS_VT_TIMER
,
"[VT_TIMER] Error in SS_VT_TIME_OUT itti_send_msg_to_task"
);
LOG_
E
(
ENB_APP
,
"[VT_TIMER] Error in SS_VT_TIME_OUT itti_send_msg_to_task"
);
}
else
{
LOG_
A
(
ENB_SS_VT_TIMER
,
"VT_TIMER Sent message to taskID %d timer_ele.task_id instance %ld
\n
"
,
LOG_
E
(
ENB_APP
,
"VT_TIMER Sent message to taskID %d timer_ele.task_id instance %ld
\n
"
,
timer_ele_p
->
task_id
,
timer_ele_p
->
instance
);
hashtable_remove
(
SS_context
.
vt_timer_table
,
(
hash_key_t
)
sfnSfKey
);
}
LOG_
D
(
ENB_SS_VT_TIMER
,
"VT_TIMER Timeout sending done curr SFN %d SF %d
\n
"
,
LOG_
E
(
ENB_APP
,
"VT_TIMER Timeout sending done curr SFN %d SF %d
\n
"
,
SS_context
.
sfn
,
SS_context
.
sf
);
}
}
/*
* Function : ss_eNB_vt_timer_process_itti_msg
* Description: Function to hanle the ITTI messages for VT_TIMER_TASK
...
...
@@ -165,7 +282,7 @@ void *ss_eNB_vt_timer_process_itti_msg(void *notUsed)
ss_set_timinfo_t
tinfo
;
tinfo
.
sf
=
SS_UPD_TIM_INFO
(
received_msg
).
sf
;
tinfo
.
sfn
=
SS_UPD_TIM_INFO
(
received_msg
).
sfn
;
LOG_D
(
ENB_
SS_VT_TIMER
,
"[VT_TIMER] received_UPD_TIM_INFO SFN: %d SF: %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
LOG_D
(
ENB_
APP
,
"[VT_TIMER] received_UPD_TIM_INFO SFN: %d SF: %d
\n
"
,
tinfo
.
sfn
,
tinfo
.
sf
);
ss_vt_timer_check
(
tinfo
);
}
...
...
@@ -176,7 +293,7 @@ void *ss_eNB_vt_timer_process_itti_msg(void *notUsed)
break
;
}
default:
LOG_E
(
ENB_
SS_VT_TIMER
,
"[SS-VT_TIMER] Received unhandled message %d:%s
\n
"
,
LOG_E
(
ENB_
APP
,
"[SS-VT_TIMER] Received unhandled message %d:%s
\n
"
,
ITTI_MSG_ID
(
received_msg
),
ITTI_MSG_NAME
(
received_msg
));
}
result
=
itti_free
(
ITTI_MSG_ORIGIN_ID
(
received_msg
),
received_msg
);
...
...
@@ -207,14 +324,14 @@ void* ss_eNB_vt_timer_task(void *arg) {
int
retVal
=
ss_eNB_vt_timer_init
();
if
(
retVal
!=
-
1
)
{
LOG_A
(
ENB_
SS_VT_TIMER
,
"[SS-VT_TIMER] Enabled TASK_VT_TIMER starting the itti_msg_handler
\n
"
);
LOG_A
(
ENB_
APP
,
"[SS-VT_TIMER] Enabled TASK_VT_TIMER starting the itti_msg_handler
\n
"
);
while
(
1
)
{
(
void
)
ss_eNB_vt_timer_process_itti_msg
(
NULL
);
}
}
else
{
LOG_A
(
ENB_
SS_VT_TIMER
,
"[SS-VT_TIMER] TASK_VT_TIMER port disabled at eNB
\n
"
);
LOG_A
(
ENB_
APP
,
"[SS-VT_TIMER] TASK_VT_TIMER port disabled at eNB
\n
"
);
sleep
(
10
);
}
...
...
openair3/SS/ss_eNB_vt_timer_task.h
View file @
849ccbf7
...
...
@@ -27,20 +27,30 @@
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "hashtable.h"
#include "intertask_interface.h"
#include "SidlCommon.h"
#ifndef SS_ENB_VT_TIMER_TASK_H_
#define SS_ENB_VT_TIMER_TASK_H_
void
*
ss_eNB_vt_timer_process_itti_msg
(
void
*
);
void
*
ss_eNB_vt_timer_task
(
void
*
arg
);
int
vt_timer_push_msg
(
struct
TimingInfo_Type
*
at
,
task_id_t
task_id
,
instance_t
instance
,
MessageDef
*
msg_p
);
void
vt_add_sf
(
struct
TimingInfo_Type
*
at
,
int
offset
);
uint8_t
msg_can_be_queued
(
ss_set_timinfo_t
req_tinfo
,
ss_set_timinfo_t
*
timer_tinfo
);
uint8_t
vt_timer_setup
(
ss_set_timinfo_t
tinfo
,
task_id_t
task_id
,
instance_t
instance
,
void
*
msg
);
typedef
struct
vt_timer_elm_s
{
//uint8_t msg_type; ///MSG type
task_id_t
task_id
;
instance_t
instance
;
ss_vt_time_out_t
*
msg
;
///< Optional argument that will be passed when timer expires
void
*
msg
;
///< Optional argument that will be passed when timer expires
}
vt_timer_elm_t
;
...
...
openair3/SS/ss_eNB_vtp_task.c
View file @
849ccbf7
...
...
@@ -37,7 +37,6 @@ extern SSConfigContext_t SS_context;
extern
RAN_CONTEXT_t
RC
;
int
cellIndex
=
0
;
int
ss_eNB_vtp_init
(
void
);
static
acpCtx_t
ctx_vtp_g
=
NULL
;
extern
SSConfigContext_t
SS_context
;
enum
MsgUserId
...
...
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