X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=node.c;h=8ebfbc1dad4d18baa88100f75c9a54c68017b6e2;hb=refs%2Ftags%2F4.99.5;hp=e2c500787aa5dfd8ed860efe228503244ae27917;hpb=f259ec53101a3754cd2da24a369ea48bb1947e62;p=staging%2Fagl-audio-plugin.git diff --git a/node.c b/node.c index e2c5007..8ebfbc1 100644 --- a/node.c +++ b/node.c @@ -20,8 +20,11 @@ * */ #include "node.h" +#include "router.h" #include +#include +#include agl_nodeset *agl_nodeset_init (struct userdata *u) { @@ -129,12 +132,55 @@ agl_node *agl_node_create (struct userdata *u, agl_node *data) } } - /* TODO : register the node to the router */ - /* agl_router_register_node (u, node); */ - return node; } +void agl_node_destroy (struct userdata *u, agl_node *node) +{ + agl_nodeset *ns; + + pa_assert (u); + pa_assert (node); + pa_assert_se (ns = u->nodeset); + + pa_idxset_remove_by_index (ns->nodes, node->index); + + pa_xfree (node); +} + + +agl_node_type agl_node_type_from_str (const char *str) +{ + agl_node_type type; + + pa_assert (str); + + if (pa_streq (str, "agl_radio")) + type = agl_radio; + else if (pa_streq (str, "agl_player")) + type = agl_player; + else if (pa_streq (str, "agl_navigator")) + type = agl_navigator; + else if (pa_streq (str, "agl_game")) + type = agl_game; + else if (pa_streq (str, "agl_browser")) + type = agl_browser; + else if (pa_streq (str, "agl_camera")) + type = agl_camera; + else if (pa_streq (str, "agl_phone")) + type = agl_phone; + else if (pa_streq (str, "agl_alert")) + type = agl_alert; + else if (pa_streq (str, "agl_event")) + type = agl_event; + else if (pa_streq (str, "agl_system")) + type = agl_system; + else + type = agl_node_type_unknown; + + return type; +} + const char *agl_node_type_str (agl_node_type type) { switch (type) { @@ -149,7 +195,7 @@ const char *agl_node_type_str (agl_node_type type) case agl_alert: return "Alert"; case agl_event: return "Event"; case agl_system: return "System"; - default: return ""; + default: return "default"; } } @@ -208,3 +254,24 @@ agl_node *agl_node_get_from_client (struct userdata *u, pa_client *client) return NULL; } + +bool agl_node_has_highest_priority (struct userdata *u, agl_node *node) +{ + agl_nodeset *nodeset; + agl_node *n; + int priority; + uint32_t index; + + pa_assert (u); + pa_assert (node); + pa_assert (nodeset = u->nodeset); + + priority = agl_router_get_node_priority (u, node); + + PA_IDXSET_FOREACH(n, nodeset->nodes, index) { + if ((n != node) && (agl_router_get_node_priority (u, n) >= priority)) + return false; + } + + return true; +}