VSF Documented
Macros | Functions
vsf_msg_tree.c File Reference
#include "osa_service/vsf_osa_service_cfg.h"
#include "vsf_msg_tree.h"

Macros

#define __VSF_MSG_TREE_CLASS_IMPLEMENT
 
#define vsf_this   (*this_ptr)
 
#define THIS_FSM_STATE   fsm_ptr->state
 
#define RESET_MSGT_HANDLING_FSM()    do { THIS_FSM_STATE = 0; } while(0)
 
#define THIS_FSM_STATE   this_ptr->BW.state
 
#define RESET_MSGT_BACKWARD_PROPAGATE_MSG_FSM()    do { THIS_FSM_STATE = 0; } while(0)
 
#define THIS_FSM_STATE   vsf_this.FWPOT.state
 
#define RESET_MSGT_FW_POT_PROPAGATE_MSG_FSM()    do { THIS_FSM_STATE = 0; } while(0)
 
#define THIS_FSM_STATE   vsf_this.FWDFS.state
 
#define RESET_MSGT_FW_DFS_PROPAGATE_MSG_FSM()    do { THIS_FSM_STATE = 0; } while(0)
 
#define THIS_FSM_STATE   vsf_this.FWBFS.state
 
#define RESET_MSGT_FW_BFS_PROPAGATE_MSG_FSM()    do { THIS_FSM_STATE = 0; } while(0)
 

Functions

 implement_vsf_rng_buf (__bfs_node_fifo_t, uint16_t, NO_RNG_BUF_PROTECT)
 
const vsf_msgt_node_t * vsf_msgt_get_next_node_within_container (const vsf_msgt_node_t *node_ptr)
 
const vsf_msgt_node_t * vsf_msgt_shoot_top_node (vsf_msgt_t *obj_ptr, const vsf_msgt_node_t *root_ptr, uintptr_t bullet_info_ptr)
 
const vsf_msgt_node_t * vsf_msgt_shoot_node (vsf_msgt_t *obj_ptr, const vsf_msgt_node_t *root_ptr, uintptr_t bullet_info_ptr)
 
fsm_rt_t __vsf_msg_handling (__vsf_msgt_msg_handling_fsm_t *fsm_ptr, vsf_msgt_t *obj_ptr, const vsf_msgt_node_t *node_ptr)
 
fsm_rt_t vsf_msgt_backward_propagate_msg (vsf_msgt_t *obj_ptr, const vsf_msgt_node_t *node_ptr, vsf_msgt_msg_t *msg_ptr)
 
const vsf_msgt_node_t * vsf_msgt_backward_propagate_msg_get_last_node (vsf_msgt_t *obj_ptr)
 
 VSF_CAL_SECTION (".text.vsf.osa_service.msg_tree" ".vsf_msgt_forward_propagate_msg_pre_order_traversal_init")
 
 VSF_CAL_SECTION (".text.vsf.osa_service.msg_tree" ".vsf_msgt_forward_propagate_msg_pre_order_traversal_setting")
 
 VSF_CAL_SECTION (".text.vsf.osa_service.msg_tree" ".vsf_msgt_forward_propagate_msg_pre_order_traversal")
 
void vsf_msgt_offset_tree_init (const vsf_msgt_container_t *root_ptr)
 
void vsf_msgt_forward_propagate_msg_dfs_init (vsf_msgt_t *obj_ptr)
 
fsm_rt_t vsf_msgt_forward_propagate_msg_dfs (vsf_msgt_t *obj_ptr, const vsf_msgt_node_t *root_ptr, vsf_msgt_msg_t *msg_ptr)
 
void vsf_msgt_forward_propagate_msg_bfs_init (vsf_msgt_t *obj_ptr, uint16_t *fifo_buffer_ptr, uint_fast16_t buff_size, bool is_support_container_post_handling)
 
void vsf_msgt_forward_propagate_msg_bfs_setting (vsf_msgt_t *obj_ptr, bool is_support_container_post_handling)
 
fsm_rt_t vsf_msgt_forward_propagate_msg_bfs (vsf_msgt_t *obj_ptr, const vsf_msgt_node_t *node_ptr, vsf_msgt_msg_t *msg_ptr, uint_fast8_t status_msk)
 

Macro Definition Documentation

◆ __VSF_MSG_TREE_CLASS_IMPLEMENT

#define __VSF_MSG_TREE_CLASS_IMPLEMENT

◆ vsf_this

#define vsf_this   (*this_ptr)

◆ THIS_FSM_STATE [1/5]

#define THIS_FSM_STATE   fsm_ptr->state

◆ RESET_MSGT_HANDLING_FSM

#define RESET_MSGT_HANDLING_FSM ( )     do { THIS_FSM_STATE = 0; } while(0)

◆ THIS_FSM_STATE [2/5]

#define THIS_FSM_STATE   this_ptr->BW.state

◆ RESET_MSGT_BACKWARD_PROPAGATE_MSG_FSM

#define RESET_MSGT_BACKWARD_PROPAGATE_MSG_FSM ( )     do { THIS_FSM_STATE = 0; } while(0)

◆ THIS_FSM_STATE [3/5]

#define THIS_FSM_STATE   vsf_this.FWPOT.state

◆ RESET_MSGT_FW_POT_PROPAGATE_MSG_FSM

#define RESET_MSGT_FW_POT_PROPAGATE_MSG_FSM ( )     do { THIS_FSM_STATE = 0; } while(0)

◆ THIS_FSM_STATE [4/5]

#define THIS_FSM_STATE   vsf_this.FWDFS.state

◆ RESET_MSGT_FW_DFS_PROPAGATE_MSG_FSM

#define RESET_MSGT_FW_DFS_PROPAGATE_MSG_FSM ( )     do { THIS_FSM_STATE = 0; } while(0)

◆ THIS_FSM_STATE [5/5]

#define THIS_FSM_STATE   vsf_this.FWBFS.state

◆ RESET_MSGT_FW_BFS_PROPAGATE_MSG_FSM

#define RESET_MSGT_FW_BFS_PROPAGATE_MSG_FSM ( )     do { THIS_FSM_STATE = 0; } while(0)

Function Documentation

◆ implement_vsf_rng_buf()

implement_vsf_rng_buf ( __bfs_node_fifo_t  ,
uint16_t  ,
NO_RNG_BUF_PROTECT   
)

◆ vsf_msgt_get_next_node_within_container()

const vsf_msgt_node_t * vsf_msgt_get_next_node_within_container ( const vsf_msgt_node_t *  node_ptr)

check offset of next node

< the last node

point to next node with offset

◆ vsf_msgt_shoot_top_node()

const vsf_msgt_node_t * vsf_msgt_shoot_top_node ( vsf_msgt_t *  obj_ptr,
const vsf_msgt_node_t *  root_ptr,
uintptr_t  bullet_info_ptr 
)

shoot the root item

not in the range

transparent container

not in the range

check nodes in this container

shoot a node

◆ vsf_msgt_shoot_node()

const vsf_msgt_node_t * vsf_msgt_shoot_node ( vsf_msgt_t *  obj_ptr,
const vsf_msgt_node_t *  root_ptr,
uintptr_t  bullet_info_ptr 
)

the same container (we only hit a container)

< the leaf node

◆ __vsf_msg_handling()

fsm_rt_t __vsf_msg_handling ( __vsf_msgt_msg_handling_fsm_t fsm_ptr,
vsf_msgt_t *  obj_ptr,
const vsf_msgt_node_t *  node_ptr 
)

illegal Node ID detected, ignore this

not valid or enabled

empty handler

it's not possible to call sub eda

< unknown type

message has been handled

message is not handled

todo add support for subcall

◆ vsf_msgt_backward_propagate_msg()

fsm_rt_t vsf_msgt_backward_propagate_msg ( vsf_msgt_t *  obj_ptr,
const vsf_msgt_node_t *  node_ptr,
vsf_msgt_msg_t msg_ptr 
)

backward propagate

no parent

◆ vsf_msgt_backward_propagate_msg_get_last_node()

const vsf_msgt_node_t * vsf_msgt_backward_propagate_msg_get_last_node ( vsf_msgt_t *  obj_ptr)

◆ VSF_CAL_SECTION() [1/3]

VSF_CAL_SECTION ( ".text.vsf.osa_service.msg_tree" ".vsf_msgt_forward_propagate_msg_pre_order_traversal_init"  )

◆ VSF_CAL_SECTION() [2/3]

VSF_CAL_SECTION ( ".text.vsf.osa_service.msg_tree" ".vsf_msgt_forward_propagate_msg_pre_order_traversal_setting"  )

◆ VSF_CAL_SECTION() [3/3]

VSF_CAL_SECTION ( ".text.vsf.osa_service.msg_tree" ".vsf_msgt_forward_propagate_msg_pre_order_traversal"  )

a normal node is visited

a corner case for container post handling

it is the last item in the container, return to previous level

it is the top container / root container, cpl

container post handling

container post handling

◆ vsf_msgt_offset_tree_init()

void vsf_msgt_offset_tree_init ( const vsf_msgt_container_t *  root_ptr)

go deep

this is an empty container

visit node

update parent

update node list pointer

visit node

update parent

visited the entry node

it is the last item in the container

it is the top container

◆ vsf_msgt_forward_propagate_msg_dfs_init()

void vsf_msgt_forward_propagate_msg_dfs_init ( vsf_msgt_t *  obj_ptr)

◆ vsf_msgt_forward_propagate_msg_dfs()

fsm_rt_t vsf_msgt_forward_propagate_msg_dfs ( vsf_msgt_t *  obj_ptr,
const vsf_msgt_node_t *  root_ptr,
vsf_msgt_msg_t msg_ptr 
)

this is an empty container

visited the entry node

it is the last item in the container

it is the top container

◆ vsf_msgt_forward_propagate_msg_bfs_init()

void vsf_msgt_forward_propagate_msg_bfs_init ( vsf_msgt_t *  obj_ptr,
uint16_t fifo_buffer_ptr,
uint_fast16_t  buff_size,
bool  is_support_container_post_handling 
)

◆ vsf_msgt_forward_propagate_msg_bfs_setting()

void vsf_msgt_forward_propagate_msg_bfs_setting ( vsf_msgt_t *  obj_ptr,
bool  is_support_container_post_handling 
)

◆ vsf_msgt_forward_propagate_msg_bfs()

fsm_rt_t vsf_msgt_forward_propagate_msg_bfs ( vsf_msgt_t *  obj_ptr,
const vsf_msgt_node_t *  node_ptr,
vsf_msgt_msg_t msg_ptr,
uint_fast8_t  status_msk 
)

search complete

calculate target item address

check whether the node is visited or not

mark node as visited

add nodes to fifo

put all nodes into fifo

mark child node as unvisited

send the container node again

visit parent is requested