OpenSolaris_b135/cmd/audio/include/audio_device.h

Compare this file to the similar file:
Show the results in this format:

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 1992-2001 by Sun Microsystems, Inc.
 * All rights reserved.
 */

#ifndef _MULTIMEDIA_AUDIO_DEVICE_H
#define	_MULTIMEDIA_AUDIO_DEVICE_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef __cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <sys/ioccom.h>
#include <sys/audioio.h>

typedef audio_info_t	Audio_info;

/*
 * The following macros read the current audio device configuration
 * and convert the data encoding format into an Audio_hdr.
 * 'F' is an open audio file descriptor.
 * 'H' is a pointer to an Audio_hdr.
 * The structure '*H' is updated after the device state has been read.
 */
#define	audio_get_play_config(F, H)					\
		audio__setplayhdr((F), (H), AUDIO__PLAY)
#define	audio_get_record_config(F, H)					\
		audio__setplayhdr((F), (H), AUDIO__RECORD)

/*
 * The following macros attempt to reconfigure the audio device so that
 * it operates on data encoded according to a given Audio_hdr.
 * 'F' is an open audio file descriptor.
 * 'H' is a pointer to an Audio_hdr describing the desired encoding.
 * The structure '*H' is updated after the device state has been read
 * to reflect the actual state of the device.
 *
 * AUDIO_SUCCESS is returned if the device configuration matches the
 * requested encoding.  AUDIO_ERR_NOEFFECT is returned if it does not.
 */
#define	audio_set_play_config(F, H)					\
		audio__setplayhdr((F), (H), AUDIO__SET|AUDIO__PLAY)
#define	audio_set_record_config(F, H)					\
		audio__setplayhdr((F), (H), AUDIO__SET|AUDIO__RECORD)


/*
 * The following macros pause or resume the audio play and/or record channels.
 * Note that requests to pause a channel that is not open will have no effect.
 * In such cases, AUDIO_ERR_NOEFFECT is returned.
 */
#define	audio_pause(F)							\
		audio__setpause((F), AUDIO__PLAYREC|AUDIO__PAUSE)
#define	audio_pause_play(F)						\
		audio__setpause((F), AUDIO__PLAY|AUDIO__PAUSE)
#define	audio_pause_record(F)						\
		audio__setpause((F), AUDIO__RECORD|AUDIO__PAUSE)

#define	audio_resume(F)							\
		audio__setpause((F), AUDIO__PLAYREC|AUDIO__RESUME)
#define	audio_resume_play(F)						\
		audio__setpause((F), AUDIO__PLAY|AUDIO__RESUME)
#define	audio_resume_record(F)						\
		audio__setpause((F), AUDIO__RECORD|AUDIO__RESUME)


/*
 * The following macros get individual state values.
 * 'F' is an open audio file descriptor.
 * 'V' is a pointer to an unsigned int.
 * The value '*V' is updated after the device state has been read.
 */
#define	audio_get_play_port(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__PORT)
#define	audio_get_record_port(F, V)					\
		audio__setval((F), (V), AUDIO__RECORD|AUDIO__PORT)
#define	audio_get_play_balance(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__BALANCE)
#define	audio_get_record_balance(F, V)					\
		audio__setval((F), (V), AUDIO__RECORD|AUDIO__BALANCE)
#define	audio_get_play_samples(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__SAMPLES)
#define	audio_get_record_samples(F, V)					\
		audio__setval((F), (V), AUDIO__RECORD|AUDIO__SAMPLES)
#define	audio_get_play_error(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__ERROR)
#define	audio_get_record_error(F, V)					\
		audio__setval((F), (V), AUDIO__RECORD|AUDIO__ERROR)
#define	audio_get_play_eof(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__EOF)

#define	audio_get_play_open(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__OPEN)
#define	audio_get_record_open(F, V)					\
		audio__setval((F), (V), AUDIO__RECORD|AUDIO__OPEN)
#define	audio_get_play_active(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__ACTIVE)
#define	audio_get_record_active(F, V)					\
		audio__setval((F), (V), AUDIO__RECORD|AUDIO__ACTIVE)
#define	audio_get_play_waiting(F, V)					\
		audio__setval((F), (V), AUDIO__PLAY|AUDIO__WAITING)
#define	audio_get_record_waiting(F, V)					\
		audio__setval((F), (V), AUDIO__RECORD|AUDIO__WAITING)

/*
 * The following macros set individual state values.
 * 'F' is an open audio file descriptor.
 * 'V' is a pointer to an unsigned int.
 * The value '*V' is updated after the device state has been read.
 */
#define	audio_set_play_port(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__PORT)
#define	audio_set_record_port(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__PORT)

/*
 * The value returned for these is the value *before* the state was changed.
 * This allows you to atomically read and reset their values.
 */
#define	audio_set_play_balance(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__BALANCE)
#define	audio_set_record_balance(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__BALANCE)
#define	audio_set_play_samples(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__SAMPLES)
#define	audio_set_record_samples(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__SAMPLES)
#define	audio_set_play_error(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__ERROR)
#define	audio_set_record_error(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__ERROR)
#define	audio_set_play_eof(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__EOF)

/* The value can only be set to one.  It is reset to zero on close(). */
#define	audio_set_play_waiting(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__WAITING)
#define	audio_set_record_waiting(F, V)					\
		audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__WAITING)

/*
 * Gain routines take double values, mapping the valid range of gains
 * to a floating-point value between zero and one, inclusive.
 * The value returned will likely be slightly different than the value set.
 * This is because the value is quantized by the device.
 *
 * Make sure that 'V' is a (double *)!
 */
#define	audio_get_play_gain(F, V)					\
		audio__setgain((F), (V), AUDIO__PLAY|AUDIO__GAIN)
#define	audio_get_record_gain(F, V)					\
		audio__setgain((F), (V), AUDIO__RECORD|AUDIO__GAIN)
#define	audio_get_monitor_gain(F, V)					\
		audio__setgain((F), (V), AUDIO__MONGAIN)

#define	audio_set_play_gain(F, V)					\
		audio__setgain((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__GAIN)
#define	audio_set_record_gain(F, V)					\
		audio__setgain((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__GAIN)
#define	audio_set_monitor_gain(F, V)					\
		audio__setgain((F), (V), AUDIO__SET|AUDIO__MONGAIN)

/*
 * The following macros flush the audio play and/or record queues.
 * Note that requests to flush a channel that is not open will have no effect.
 */
#define	audio_flush(F)							\
		audio__flush((F), AUDIO__PLAYREC)
#define	audio_flush_play(F)						\
		audio__flush((F), AUDIO__PLAY)
#define	audio_flush_record(F)						\
		audio__flush((F), AUDIO__RECORD)


/* The following is used for 'which' arguments to get/set info routines */
#define	AUDIO__PLAY		(0x10000)
#define	AUDIO__RECORD		(0x20000)
#define	AUDIO__PLAYREC		(AUDIO__PLAY | AUDIO__RECORD)

#define	AUDIO__PORT		(1)
#define	AUDIO__SAMPLES		(2)
#define	AUDIO__ERROR		(3)
#define	AUDIO__EOF		(4)
#define	AUDIO__OPEN		(5)
#define	AUDIO__ACTIVE		(6)
#define	AUDIO__WAITING		(7)
#define	AUDIO__GAIN		(8)
#define	AUDIO__MONGAIN		(9)
#define	AUDIO__PAUSE		(10)
#define	AUDIO__RESUME		(11)
#define	AUDIO__BALANCE		(12)

#define	AUDIO__SET		(0x80000000)
#define	AUDIO__SETVAL_MASK	(0xff)

#ifdef __cplusplus
}
#endif

#endif /* !_MULTIMEDIA_AUDIO_DEVICE_H */