@top_srcdir@/src/names.c \
@top_srcdir@/src/shmarea.c \
@top_srcdir@/src/userfile.c \
- @top_srcdir@/src/control \
+ @top_srcdir@/src/control/cards.c \
+ @top_srcdir@/src/control/control.c \
+ @top_srcdir@/src/control/control_plugin.c \
+ @top_srcdir@/src/control/control_hw.c \
+ @top_srcdir@/src/control/control_remap.c \
+ @top_srcdir@/src/control/control_shm.c \
+ @top_srcdir@/src/control/ctlparse.c \
+ @top_srcdir@/src/control/hcontrol.c \
+ @top_srcdir@/src/control/setup.c \
+ @top_srcdir@/src/control/tlv.c \
@top_srcdir@/src/mixer \
@top_srcdir@/src/pcm/pcm.c \
@top_srcdir@/src/pcm/pcm_mmap.c \
<UL>
<LI>Page \ref control explains the primitive controls API.
+ <LI>Page \ref control_plugins explains the design of primitive control plugins.
<LI>Page \ref hcontrol explains the high-level primitive controls API.
<LI>Page \ref mixer explains the mixer controls API.
<LI>Page \ref pcm explains the design of the PCM (digital audio) API.
--- /dev/null
+/**
+ * \file include/control_plugin.h
+ * \brief Common control plugin code
+ * \author Jaroslav Kysela <perex@perex.cz>
+ * \date 2021
+ *
+ * Application interface library for the ALSA driver.
+ * See the \ref control_plugins page for more details.
+ *
+ * \warning Using of contents of this header file might be dangerous
+ * in the sense of compatibility reasons. The contents might be
+ * freely changed in future.
+ */
+/*
+ * 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.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef __ALSA_CONTROL_PLUGIN_H
+#define __ALSA_CONTROL_PLUGIN_H
+
+/**
+ * \defgroup Control_Plugins Primitive Control Plugins
+ * \ingroup Control
+ * See the \ref control_plugins page for more details.
+ * \{
+ */
+
+/*
+ * Control HW
+ */
+int snd_ctl_hw_open(snd_ctl_t **handle, const char *name, int card, int mode);
+int _snd_ctl_hw_open(snd_ctl_t **handlep, char *name, snd_config_t *root ATTRIBUTE_UNUSED, snd_config_t *conf, int mode);
+
+/** \} */
+
+#endif /* __ALSA_CONTROL_PLUGIN_H */
libcontrol_la_SOURCES = cards.c tlv.c namehint.c hcontrol.c \
control.c control_hw.c setup.c ctlparse.c \
- control_symbols.c
+ control_plugin.c control_symbols.c
if BUILD_CTL_PLUGIN_REMAP
libcontrol_la_SOURCES += control_remap.c
endif
+/**
+ * \file control/control_hw.c
+ * \brief CTL HW Plugin Interface
+ * \author Jaroslav Kysela <perex@perex.cz>
+ * \date 2000
+ */
/*
* Control Interface - Hardware
* Copyright (c) 1998,1999,2000 by Jaroslav Kysela <perex@perex.cz>
.read = snd_ctl_hw_read,
};
+/**
+ * \brief Creates a new hw control
+ * \param handle Returns created control handle
+ * \param name Name of control device
+ * \param card Number of card
+ * \param mode Control mode
+ * \retval zero on success otherwise a negative error code
+ * \warning Using of this function might be dangerous in the sense
+ * of compatibility reasons. The prototype might be freely
+ * changed in future.
+ */
int snd_ctl_hw_open(snd_ctl_t **handle, const char *name, int card, int mode)
{
int fd, ver;
return 0;
}
+/*! \page control_plugins
+
+\section control_plugins_hw Plugin: hw
+
+This plugin communicates directly with the ALSA kernel driver. It is a raw
+communication without any conversions.
+
+\code
+control.name {
+ type hw # Kernel PCM
+ card INT/STR # Card name (string) or number (integer)
+}
+\endcode
+
+\subsection control_plugins_hw_funcref Function reference
+
+<UL>
+ <LI>snd_ctl_hw_open()
+ <LI>_snd_ctl_hw_open()
+</UL>
+
+*/
+
+/**
+ * \brief Creates a new hw control handle
+ * \param handlep Returns created control handle
+ * \param name Name of control device
+ * \param root Root configuration node
+ * \param conf Configuration node with hw PCM description
+ * \param mode Control Mode
+ * \warning Using of this function might be dangerous in the sense
+ * of compatibility reasons. The prototype might be freely
+ * changed in future.
+ */
int _snd_ctl_hw_open(snd_ctl_t **handlep, char *name, snd_config_t *root ATTRIBUTE_UNUSED, snd_config_t *conf, int mode)
{
snd_config_iterator_t i, next;
return -EINVAL;
return snd_ctl_hw_open(handlep, name, card, mode);
}
+#ifndef DOC_HIDDEN
SND_DLSYM_BUILD_VERSION(_snd_ctl_hw_open, SND_CONTROL_DLSYM_VERSION);
+#endif
--- /dev/null
+/**
+ * \file control/control_plugin.c
+ * \ingroup Control
+ * \brief Control Interface
+ * \author Jaroslav Kysela <perex@perex.cz>
+ * \date 2021
+ */
+/*
+ * Control - Common plugin code
+ * Copyright (c) 2021 by Jaroslav Kysela <perex@perex.cz>
+ *
+ *
+ * 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.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+/*!
+
+\page control_plugins Primitive control plugins
+
+Control plugins extends functionality and features of control devices.
+The plugins take care about various control mapping or so.
+
+The child configuration (in one compound):
+
+\code
+ctl.test {
+ type remap
+ child "hw:0"
+ ... map/remap configuration ...
+}
+\endcode
+
+The child may be defined as compound containing the full specification:
+
+\code
+ctl.test {
+ type remap
+ child {
+ type hw
+ card 0
+ }
+ ... map/remap configuration ...
+}
+\endcode
+
+*/
+
+#include "control_local.h"
+#include "control_plugin.h"
+
+/* move the common plugin code from control_remap.c here on demand */