1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright (c) 1992-2001 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27#ifndef _MULTIMEDIA_AUDIO_DEVICE_H 28#define _MULTIMEDIA_AUDIO_DEVICE_H 29 30#pragma ident "%Z%%M% %I% %E% SMI" 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36#include <sys/types.h> 37#include <sys/ioccom.h> 38#include <sys/audioio.h> 39 40typedef audio_info_t Audio_info; 41 42/* 43 * The following macros read the current audio device configuration 44 * and convert the data encoding format into an Audio_hdr. 45 * 'F' is an open audio file descriptor. 46 * 'H' is a pointer to an Audio_hdr. 47 * The structure '*H' is updated after the device state has been read. 48 */ 49#define audio_get_play_config(F, H) \ 50 audio__setplayhdr((F), (H), AUDIO__PLAY) 51#define audio_get_record_config(F, H) \ 52 audio__setplayhdr((F), (H), AUDIO__RECORD) 53 54/* 55 * The following macros attempt to reconfigure the audio device so that 56 * it operates on data encoded according to a given Audio_hdr. 57 * 'F' is an open audio file descriptor. 58 * 'H' is a pointer to an Audio_hdr describing the desired encoding. 59 * The structure '*H' is updated after the device state has been read 60 * to reflect the actual state of the device. 61 * 62 * AUDIO_SUCCESS is returned if the device configuration matches the 63 * requested encoding. AUDIO_ERR_NOEFFECT is returned if it does not. 64 */ 65#define audio_set_play_config(F, H) \ 66 audio__setplayhdr((F), (H), AUDIO__SET|AUDIO__PLAY) 67#define audio_set_record_config(F, H) \ 68 audio__setplayhdr((F), (H), AUDIO__SET|AUDIO__RECORD) 69 70 71/* 72 * The following macros pause or resume the audio play and/or record channels. 73 * Note that requests to pause a channel that is not open will have no effect. 74 * In such cases, AUDIO_ERR_NOEFFECT is returned. 75 */ 76#define audio_pause(F) \ 77 audio__setpause((F), AUDIO__PLAYREC|AUDIO__PAUSE) 78#define audio_pause_play(F) \ 79 audio__setpause((F), AUDIO__PLAY|AUDIO__PAUSE) 80#define audio_pause_record(F) \ 81 audio__setpause((F), AUDIO__RECORD|AUDIO__PAUSE) 82 83#define audio_resume(F) \ 84 audio__setpause((F), AUDIO__PLAYREC|AUDIO__RESUME) 85#define audio_resume_play(F) \ 86 audio__setpause((F), AUDIO__PLAY|AUDIO__RESUME) 87#define audio_resume_record(F) \ 88 audio__setpause((F), AUDIO__RECORD|AUDIO__RESUME) 89 90 91/* 92 * The following macros get individual state values. 93 * 'F' is an open audio file descriptor. 94 * 'V' is a pointer to an unsigned int. 95 * The value '*V' is updated after the device state has been read. 96 */ 97#define audio_get_play_port(F, V) \ 98 audio__setval((F), (V), AUDIO__PLAY|AUDIO__PORT) 99#define audio_get_record_port(F, V) \ 100 audio__setval((F), (V), AUDIO__RECORD|AUDIO__PORT) 101#define audio_get_play_balance(F, V) \ 102 audio__setval((F), (V), AUDIO__PLAY|AUDIO__BALANCE) 103#define audio_get_record_balance(F, V) \ 104 audio__setval((F), (V), AUDIO__RECORD|AUDIO__BALANCE) 105#define audio_get_play_samples(F, V) \ 106 audio__setval((F), (V), AUDIO__PLAY|AUDIO__SAMPLES) 107#define audio_get_record_samples(F, V) \ 108 audio__setval((F), (V), AUDIO__RECORD|AUDIO__SAMPLES) 109#define audio_get_play_error(F, V) \ 110 audio__setval((F), (V), AUDIO__PLAY|AUDIO__ERROR) 111#define audio_get_record_error(F, V) \ 112 audio__setval((F), (V), AUDIO__RECORD|AUDIO__ERROR) 113#define audio_get_play_eof(F, V) \ 114 audio__setval((F), (V), AUDIO__PLAY|AUDIO__EOF) 115 116#define audio_get_play_open(F, V) \ 117 audio__setval((F), (V), AUDIO__PLAY|AUDIO__OPEN) 118#define audio_get_record_open(F, V) \ 119 audio__setval((F), (V), AUDIO__RECORD|AUDIO__OPEN) 120#define audio_get_play_active(F, V) \ 121 audio__setval((F), (V), AUDIO__PLAY|AUDIO__ACTIVE) 122#define audio_get_record_active(F, V) \ 123 audio__setval((F), (V), AUDIO__RECORD|AUDIO__ACTIVE) 124#define audio_get_play_waiting(F, V) \ 125 audio__setval((F), (V), AUDIO__PLAY|AUDIO__WAITING) 126#define audio_get_record_waiting(F, V) \ 127 audio__setval((F), (V), AUDIO__RECORD|AUDIO__WAITING) 128 129/* 130 * The following macros set individual state values. 131 * 'F' is an open audio file descriptor. 132 * 'V' is a pointer to an unsigned int. 133 * The value '*V' is updated after the device state has been read. 134 */ 135#define audio_set_play_port(F, V) \ 136 audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__PORT) 137#define audio_set_record_port(F, V) \ 138 audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__PORT) 139 140/* 141 * The value returned for these is the value *before* the state was changed. 142 * This allows you to atomically read and reset their values. 143 */ 144#define audio_set_play_balance(F, V) \ 145 audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__BALANCE) 146#define audio_set_record_balance(F, V) \ 147 audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__BALANCE) 148#define audio_set_play_samples(F, V) \ 149 audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__SAMPLES) 150#define audio_set_record_samples(F, V) \ 151 audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__SAMPLES) 152#define audio_set_play_error(F, V) \ 153 audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__ERROR) 154#define audio_set_record_error(F, V) \ 155 audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__ERROR) 156#define audio_set_play_eof(F, V) \ 157 audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__EOF) 158 159/* The value can only be set to one. It is reset to zero on close(). */ 160#define audio_set_play_waiting(F, V) \ 161 audio__setval((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__WAITING) 162#define audio_set_record_waiting(F, V) \ 163 audio__setval((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__WAITING) 164 165/* 166 * Gain routines take double values, mapping the valid range of gains 167 * to a floating-point value between zero and one, inclusive. 168 * The value returned will likely be slightly different than the value set. 169 * This is because the value is quantized by the device. 170 * 171 * Make sure that 'V' is a (double *)! 172 */ 173#define audio_get_play_gain(F, V) \ 174 audio__setgain((F), (V), AUDIO__PLAY|AUDIO__GAIN) 175#define audio_get_record_gain(F, V) \ 176 audio__setgain((F), (V), AUDIO__RECORD|AUDIO__GAIN) 177#define audio_get_monitor_gain(F, V) \ 178 audio__setgain((F), (V), AUDIO__MONGAIN) 179 180#define audio_set_play_gain(F, V) \ 181 audio__setgain((F), (V), AUDIO__SET|AUDIO__PLAY|AUDIO__GAIN) 182#define audio_set_record_gain(F, V) \ 183 audio__setgain((F), (V), AUDIO__SET|AUDIO__RECORD|AUDIO__GAIN) 184#define audio_set_monitor_gain(F, V) \ 185 audio__setgain((F), (V), AUDIO__SET|AUDIO__MONGAIN) 186 187/* 188 * The following macros flush the audio play and/or record queues. 189 * Note that requests to flush a channel that is not open will have no effect. 190 */ 191#define audio_flush(F) \ 192 audio__flush((F), AUDIO__PLAYREC) 193#define audio_flush_play(F) \ 194 audio__flush((F), AUDIO__PLAY) 195#define audio_flush_record(F) \ 196 audio__flush((F), AUDIO__RECORD) 197 198 199/* The following is used for 'which' arguments to get/set info routines */ 200#define AUDIO__PLAY (0x10000) 201#define AUDIO__RECORD (0x20000) 202#define AUDIO__PLAYREC (AUDIO__PLAY | AUDIO__RECORD) 203 204#define AUDIO__PORT (1) 205#define AUDIO__SAMPLES (2) 206#define AUDIO__ERROR (3) 207#define AUDIO__EOF (4) 208#define AUDIO__OPEN (5) 209#define AUDIO__ACTIVE (6) 210#define AUDIO__WAITING (7) 211#define AUDIO__GAIN (8) 212#define AUDIO__MONGAIN (9) 213#define AUDIO__PAUSE (10) 214#define AUDIO__RESUME (11) 215#define AUDIO__BALANCE (12) 216 217#define AUDIO__SET (0x80000000) 218#define AUDIO__SETVAL_MASK (0xff) 219 220#ifdef __cplusplus 221} 222#endif 223 224#endif /* !_MULTIMEDIA_AUDIO_DEVICE_H */ 225