elemy-sensortree 1.0.0
el_st_global_ref

Usage of sensor tree

  1. Malloc/share memory area sufficient for need N number of nodes. This area would be treat as st_tree_t structure
    ST_TREE_SIZE(NODES) macros calc size of area enough for NODES nodes.
    ST_TREE_NODES(ST_TREE_SIZE) macros calc number of nodes in area with size ST_TREE_SIZE
  2. Init area for N nodes by void st_init(st_tree_t *tree, int count); Where tree - ptr ro area, count - number of nodes

For work with nodes in tree used

  1. To get data from tree
    sensors_node_t* st_sn_get(st_tree_t *tree, sensors_node_t *s_node, node_addr_t addr);
    data from tree node with address addr copied into sensors node s_node
    return ptr to s_node (not NULL) on success
    NULL if no node with address addr in tree.
  2. To set node in tree
    st_sn_set(st_tree_t *tree, sensors_node_t *s_node, node_addr_t addr);
    data from s_node copied into tree node with address addr
    return 1 - success. Data copied into tree node with address addr.
    0 - not set. Node with address addr absent and no free nodes in tree area.
  3. To delete node in tree
    void st_del_node(st_tree_t *tree, node_addr_t addr);
    Delete node in tree with all children recursively. Fix neighborhood links (prev,next).
    Check/fix parent of deleted node (parent->child).
    Don't delete parent node.
  4. To cleanup all tree reinit it with st_init.
    Area have no links outside area. Thats why its reinitializing is secure.
  5. Walking through tree is made by:
    void st_tree_walk_prepare(st_tree_t *tree, st_tree_walk_t *walker, node_addr_t addr);
    int st_tree_walk(st_tree_walk_t *walker);
    First prepare walker with curtain tree area and start node address. Second return next node index in tree starting from first.
    return next node index (not 0)
    0 - mean end of walk.

/file el_sensortree_shmem.c

Created on: 23 нояб. 2023 г. Author: ps

working with sensors tree nodes in shmem

Workflow:
init SHMEM area by
int el_sensorstree_init(el_area_list_t *tree_area);

work is set and get sensor node by address by:
int el_sensorstree_node_set(el_area_list_t <em>tree_area, sensors_node_t *s_node, node_addr_t addr);
sensors_node_t el_sensorstree_node_get(el_area_list_t *tree_area, sensors_node_t *s_node, node_addr_t addr);