/**
 * \file include/control_external.h
 * \brief External control plugin SDK
 * \author Takashi Iwai <tiwai@suse.de>
 * \date 2005
 *
 * External control plugin SDK.
 */

/*
 *   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., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *
 */
#ifndef __ALSA_CONTROL_EXTERNAL_H
#define __ALSA_CONTROL_EXTERNAL_H

#include "control.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 *  \defgroup CtlPlugin_SDK External Control Plugin SDK
 *  \{
 */

/**
 * Define the object entry for external control plugins
 */
#define SND_CTL_PLUGIN_ENTRY(name) _snd_ctl_##name##_open

/**
 * Define the symbols of the given control plugin with versions
 */
#define SND_CTL_PLUGIN_SYMBOL(name) SND_DLSYM_BUILD_VERSION(SND_CTL_PLUGIN_ENTRY(name), SND_CONTROL_DLSYM_VERSION);

/**
 * Define the control plugin
 */
#define SND_CTL_PLUGIN_DEFINE_FUNC(plugin) \
int SND_CTL_PLUGIN_ENTRY(plugin) (snd_ctl_t **handlep, const char *name,\
				  snd_config_t *root, snd_config_t *conf, int mode)

/** External control plugin handle */
typedef struct snd_ctl_ext snd_ctl_ext_t;
/** Callback table of control ext */
typedef struct snd_ctl_ext_callback snd_ctl_ext_callback_t;
/** Key to access a control pointer */
typedef unsigned long snd_ctl_ext_key_t;

/*
 * Protocol version
 */
#define SND_CTL_EXT_VERSION_MAJOR	1	/**< Protocol major version */
#define SND_CTL_EXT_VERSION_MINOR	0	/**< Protocol minor version */
#define SND_CTL_EXT_VERSION_TINY	0	/**< Protocol tiny version */
/**
 * external plugin protocol version
 */
#define SND_CTL_EXT_VERSION		((SND_CTL_EXT_VERSION_MAJOR<<16) |\
					 (SND_CTL_EXT_VERSION_MINOR<<8) |\
					 (SND_CTL_EXT_VERSION_TINY))

/** Handle of control ext */
struct snd_ctl_ext {
	/**
	 * protocol version; #SND_CTL_EXT_VERSION must be filled here
	 * before calling #snd_ctl_ext_create()
	 */
	unsigned int version;
	/**
	 * Index of this card; must be filled before calling #snd_ctl_ext_create()
	 */
	int card_idx;
	/**
	 * ID string of this card; must be filled before calling #snd_ctl_ext_create()
	 */
	char id[16];
	/**
	 * Driver name of this card; must be filled before calling #snd_ctl_ext_create()
	 */
	char driver[16];
	/**
	 * short name of this card; must be filled before calling #snd_ctl_ext_create()
	 */
	char name[32];
	/**
	 * Long name of this card; must be filled before calling #snd_ctl_ext_create()
	 */
	char longname[80];
	/**
	 * Mixer name of this card; must be filled before calling #snd_ctl_ext_create()
	 */
	char mixername[80];
	/**
	 * poll descriptor
	 */
	int poll_fd;

	/**
	 * callbacks of this plugin; must be filled before calling #snd_pcm_ioplug_create()
	 */
	const snd_ctl_ext_callback_t *callback;
	/**
	 * private data, which can be used freely in the driver callbacks
	 */
	void *private_data;
	/**
	 * control handle filled by #snd_ctl_ext_create()
	 */
	snd_ctl_t *handle;

	int nonblock;			/**< non-block mode; read-only */
	int subscribed;			/**< events subscribed; read-only */
};

/** Callback table of ext */
struct snd_ctl_ext_callback {
	/**
	 * close the control handle; optional
	 */
	void (*close)(snd_ctl_ext_t *ext);
	/**
	 * return the total number of elements; required
	 */
	int (*elem_count)(snd_ctl_ext_t *ext);
	/**
	 * return the element id of the given offset (array index); required
	 */
	int (*elem_list)(snd_ctl_ext_t *ext, unsigned int offset, snd_ctl_elem_id_t *id);
	/**
	 * convert the element id to a search key; required
	 */
	snd_ctl_ext_key_t (*find_elem)(snd_ctl_ext_t *ext, const snd_ctl_elem_id_t *id);
	/**
	 * the destructor of the key; optional
	 */
	void (*free_key)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key);
	/**
	 * get the attribute of the element; required
	 */
	int (*get_attribute)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key,
			     int *type, unsigned int *acc, unsigned int *count);
	/**
	 * get the element information of integer type
	 */
	int (*get_integer_info)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key,
				long *imin, long *imax, long *istep);
	/**
	 * get the element information of integer64 type
	 */
	int (*get_integer64_info)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key,
				  int64_t *imin, int64_t *imax, int64_t *istep);
	/**
	 * get the element information of enumerated type
	 */
	int (*get_enumerated_info)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, unsigned int *items);
	/**
	 * get the name of the enumerated item
	 */
	int (*get_enumerated_name)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, unsigned int item,
				   char *name, size_t name_max_len);
	/**
	 * read the current values of integer type
	 */
	int (*read_integer)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, long *value);
	/**
	 * read the current values of integer64 type
	 */
	int (*read_integer64)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, int64_t *value);
	/**
	 * read the current values of enumerated type
	 */
	int (*read_enumerated)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, unsigned int *items);
	/**
	 * read the current values of bytes type
	 */
	int (*read_bytes)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, unsigned char *data,
			  size_t max_bytes);
	/**
	 * read the current values of iec958 type
	 */
	int (*read_iec958)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, snd_aes_iec958_t *iec958);
	/**
	 * update the current values of integer type with the given values
	 */
	int (*write_integer)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, long *value);
	/**
	 * update the current values of integer64 type with the given values
	 */
	int (*write_integer64)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, int64_t *value);
	/**
	 * update the current values of enumerated type with the given values
	 */
	int (*write_enumerated)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, unsigned int *items);
	/**
	 * update the current values of bytes type with the given values
	 */
	int (*write_bytes)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, unsigned char *data,
			   size_t max_bytes);
	/**
	 * update the current values of iec958 type with the given values
	 */
	int (*write_iec958)(snd_ctl_ext_t *ext, snd_ctl_ext_key_t key, snd_aes_iec958_t *iec958);
	/**
	 * subscribe/unsubscribe the event notification; optional
	 */
	void (*subscribe_events)(snd_ctl_ext_t *ext, int subscribe);
	/**
	 * read a pending notification event; optional
	 */
	int (*read_event)(snd_ctl_ext_t *ext, snd_ctl_elem_id_t *id, unsigned int *event_mask);
	/**
	 * return the number of poll descriptors; optional
	 */
	int (*poll_descriptors_count)(snd_ctl_ext_t *ext);
	/**
	 * fill the poll descriptors; optional
	 */
	int (*poll_descriptors)(snd_ctl_ext_t *ext, struct pollfd *pfds, unsigned int space);
	/**
	 * mangle the revents of poll descriptors
	 */
	int (*poll_revents)(snd_ctl_ext_t *ext, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
};

/**
 * The access type bits stored in get_attribute callback
 */
typedef enum snd_ctl_ext_access {
	SND_CTL_EXT_ACCESS_READ = (1<<0),
	SND_CTL_EXT_ACCESS_WRITE = (1<<1),
	SND_CTL_EXT_ACCESS_READWRITE = (3<<0),
	SND_CTL_EXT_ACCESS_VOLATILE = (1<<2),
	SND_CTL_EXT_ACCESS_INACTIVE = (1<<8),
} snd_ctl_ext_access_t;

/**
 * find_elem callback returns this if no matching control element is found
 */
#define SND_CTL_EXT_KEY_NOT_FOUND	(snd_ctl_ext_key_t)(-1)

int snd_ctl_ext_create(snd_ctl_ext_t *ext, const char *name, int mode);
int snd_ctl_ext_delete(snd_ctl_ext_t *ext);

/** \} */

#ifdef __cplusplus
}
#endif

#endif /* __ALSA_CONTROL_EXTERNAL_H */
