alsa-utils/topology/pre-processor.h
Ranjani Sridharan d999c267d3 topology: pre-process-object: Add support for processing Manifest object
The pre-processor converts the Topology2.0 objects into
the relevant sections by looking for attributes defined
in the template config for the section and reading the
attribute values from the object instance config.

The structure struct build_function_map contains the
mapping of the build function to use for each object
based on the type and name for the class that the object
belongs to. The manifest object is the simplest with
no attributes. So, the build function simply creates
a new Section called SectionManifest which will be
populated with the data section in the following patches.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-05-25 18:26:51 +02:00

87 lines
3.4 KiB
C

/*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __PRE_PROCESSOR_H
#define __PRE_PROCESSOR_H
#include <stdarg.h>
#include <stdbool.h>
#include <string.h>
#include "topology.h"
#define DEBUG_MAX_LENGTH 256
#define ARRAY_SIZE(a) (sizeof (a) / sizeof (a)[0])
#define MAX_CONFIGS_IN_TEMPLATE 32
struct config_template_items {
char *int_config_ids[MAX_CONFIGS_IN_TEMPLATE];
char *string_config_ids[MAX_CONFIGS_IN_TEMPLATE];
char *compound_config_ids[MAX_CONFIGS_IN_TEMPLATE];
};
typedef int (*build_func)(struct tplg_pre_processor *tplg_pp, snd_config_t *obj,
snd_config_t *parent);
struct build_function_map {
char *class_type;
char *class_name;
char *section_name;
build_func builder;
const struct config_template_items *template_items;
};
extern const struct build_function_map object_build_map[];
/* debug helpers */
void tplg_pp_debug(char *fmt, ...);
void tplg_pp_config_debug(struct tplg_pre_processor *tplg_pp, snd_config_t *cfg);
/* object build helpers */
int tplg_build_object_from_template(struct tplg_pre_processor *tplg_pp, snd_config_t *obj_cfg,
snd_config_t **wtop, snd_config_t *top_config,
bool skip_name);
/* object helpers */
int tplg_pre_process_objects(struct tplg_pre_processor *tplg_pp, snd_config_t *cfg,
snd_config_t *parent);
snd_config_t *tplg_object_get_instance_config(struct tplg_pre_processor *tplg_pp,
snd_config_t *class_type);
const char *tplg_object_get_name(struct tplg_pre_processor *tplg_pp,
snd_config_t *object);
/* class helpers */
snd_config_t *tplg_class_lookup(struct tplg_pre_processor *tplg_pp, snd_config_t *cfg);
snd_config_t *tplg_class_find_attribute_by_name(struct tplg_pre_processor *tplg_pp,
snd_config_t *class, const char *name);
bool tplg_class_is_attribute_mandatory(const char *attr, snd_config_t *class_cfg);
bool tplg_class_is_attribute_immutable(const char *attr, snd_config_t *class_cfg);
bool tplg_class_is_attribute_unique(const char *attr, snd_config_t *class_cfg);
const char *tplg_class_get_unique_attribute_name(struct tplg_pre_processor *tplg_pp,
snd_config_t *class);
snd_config_type_t tplg_class_get_attribute_type(struct tplg_pre_processor *tplg_pp,
snd_config_t *attr);
const char *tplg_class_get_attribute_token_ref(struct tplg_pre_processor *tplg_pp,
snd_config_t *class, const char *attr_name);
long tplg_class_attribute_valid_tuple_value(struct tplg_pre_processor *tplg_pp,
snd_config_t *class, snd_config_t *attr);
/* config helpers */
snd_config_t *tplg_find_config(snd_config_t *config, const char *name);
int tplg_config_make_add(snd_config_t **config, const char *id, snd_config_type_t type,
snd_config_t *parent);
char *tplg_snprintf(char *fmt, ...);
#endif