Finalize basic configuration logic
[staging/agl-audio-plugin.git] / zone.c
diff --git a/zone.c b/zone.c
index 7b1b04a..5b1cd07 100644 (file)
--- a/zone.c
+++ b/zone.c
  */
 #include "zone.h"
 
-struct pa_zoneset {
+struct agl_zoneset {
        struct {
                pa_hashmap     *hash;
                agl_zone       *index[AGL_ZONE_MAX];
        } zones;
 };
 
-pa_zoneset *pa_zoneset_init (struct userdata *u)
+agl_zoneset *agl_zoneset_init (struct userdata *u)
 {
-       pa_zoneset *zs;
+       agl_zoneset *zs;
 
        pa_assert (u);
 
-       zs = pa_xnew0 (pa_zoneset, 1);
+       zs = pa_xnew0 (agl_zoneset, 1);
        zs->zones.hash = pa_hashmap_new (pa_idxset_string_hash_func,
                                         pa_idxset_string_compare_func);
 
        return zs;
 }
 
-void pa_zoneset_done (struct userdata *u)
+void agl_zoneset_done (struct userdata *u)
 {
-       pa_zoneset *zs;
+       agl_zoneset *zs;
        void *state;
        agl_zone *zone;
 
@@ -56,3 +56,56 @@ void pa_zoneset_done (struct userdata *u)
                free (zs);
        }    
 }
+
+int agl_zoneset_add_zone (struct userdata *u, const char *name, uint32_t index)
+{
+       agl_zoneset *zs;
+       agl_zone *zone;
+
+       pa_assert (u);
+       pa_assert (name);
+       pa_assert (index < AGL_ZONE_MAX);
+       pa_assert_se (zs = u->zoneset);
+
+       zone = pa_xnew (agl_zone, 1);
+       zone->name = pa_xstrdup (name);
+       zone->index = index;
+
+       pa_hashmap_put (zs->zones.hash, (void *)zone->name, zone);
+
+       zs->zones.index[index] = zone;
+
+       return 0;
+}
+
+agl_zone *agl_zoneset_get_zone_by_name (struct userdata *u, const char *name)
+{
+       agl_zoneset *zs;
+       agl_zone *zone;
+
+       pa_assert (u);
+       pa_assert_se (zs = u->zoneset);
+
+       if (name && zs->zones.hash)
+               zone = pa_hashmap_get (zs->zones.hash, name);
+       else
+               zone = NULL;
+
+       return zone;
+}
+
+agl_zone *agl_zoneset_get_zone_by_index (struct userdata *u, uint32_t index)
+{
+       agl_zoneset *zs;
+       agl_zone *zone;
+
+       pa_assert (u);
+       pa_assert_se (zs = u->zoneset);
+
+       if (index < AGL_ZONE_MAX)
+               zone = zs->zones.index[index];
+       else
+               zone = NULL;
+
+       return zone;
+}