?? asound.h
字號:
/* * Advanced Linux Sound Architecture - ALSA - Driver * Copyright (c) 1994-2003 by Jaroslav Kysela <perex@suse.cz>, * Abramo Bagnara <abramo@alsa-project.org> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 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 __SOUND_ASOUND_H#define __SOUND_ASOUND_H#if defined(LINUX) || defined(__LINUX__) || defined(__linux__)#include <linux/ioctl.h>#ifdef __KERNEL__#include <linux/types.h>#include <linux/time.h>#include <asm/byteorder.h>#if __LITTLE_ENDIAN == 1234#define SNDRV_LITTLE_ENDIAN#elif __BIG_ENDIAN == 4321#define SNDRV_BIG_ENDIAN#else#error "Unsupported endian..."#endif#else /* !__KERNEL__ */#include <endian.h>#if __BYTE_ORDER == __LITTLE_ENDIAN#define SNDRV_LITTLE_ENDIAN#elif __BYTE_ORDER == __BIG_ENDIAN#define SNDRV_BIG_ENDIAN#else#error "Unsupported endian..."#endif#endif /* __KERNEL **/#endif /* LINUX */#ifndef __KERNEL__#include <sys/time.h>#include <sys/types.h>#endif/* * protocol version */#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor))#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff)#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff)#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff)#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \ (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \ (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \ SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion)))/**************************************************************************** * * * Digital audio interface * * * ****************************************************************************/struct sndrv_aes_iec958 { unsigned char status[24]; /* AES/IEC958 channel status bits */ unsigned char subcode[147]; /* AES/IEC958 subcode bits */ unsigned char pad; /* nothing */ unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */};/**************************************************************************** * * * Section for driver hardware dependent interface - /dev/snd/hw? * * * ****************************************************************************/#define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1)enum sndrv_hwdep_iface { SNDRV_HWDEP_IFACE_OPL2 = 0, SNDRV_HWDEP_IFACE_OPL3, SNDRV_HWDEP_IFACE_OPL4, SNDRV_HWDEP_IFACE_SB16CSP, /* Creative Signal Processor */ SNDRV_HWDEP_IFACE_EMU10K1, /* FX8010 processor in EMU10K1 chip */ SNDRV_HWDEP_IFACE_YSS225, /* Yamaha FX processor */ SNDRV_HWDEP_IFACE_ICS2115, /* Wavetable synth */ SNDRV_HWDEP_IFACE_SSCAPE, /* Ensoniq SoundScape ISA card (MC68EC000) */ SNDRV_HWDEP_IFACE_VX, /* Digigram VX cards */ SNDRV_HWDEP_IFACE_MIXART, /* Digigram miXart cards */ SNDRV_HWDEP_IFACE_USX2Y, /* Tascam US122, US224 & US428 usb */ SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */ SNDRV_HWDEP_IFACE_BLUETOOTH, /* Bluetooth audio */ SNDRV_HWDEP_IFACE_USX2Y_PCM, /* Tascam US122, US224 & US428 rawusb pcm */ SNDRV_HWDEP_IFACE_PCXHR, /* Digigram PCXHR */ SNDRV_HWDEP_IFACE_SB_RC, /* SB Extigy/Audigy2NX remote control */ /* Don't forget to change the following: */ SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_SB_RC};struct sndrv_hwdep_info { unsigned int device; /* WR: device number */ int card; /* R: card number */ unsigned char id[64]; /* ID (user selectable) */ unsigned char name[80]; /* hwdep name */ int iface; /* hwdep interface */ unsigned char reserved[64]; /* reserved for future */};/* generic DSP loader */struct sndrv_hwdep_dsp_status { unsigned int version; /* R: driver-specific version */ unsigned char id[32]; /* R: driver-specific ID string */ unsigned int num_dsps; /* R: number of DSP images to transfer */ unsigned int dsp_loaded; /* R: bit flags indicating the loaded DSPs */ unsigned int chip_ready; /* R: 1 = initialization finished */ unsigned char reserved[16]; /* reserved for future use */};struct sndrv_hwdep_dsp_image { unsigned int index; /* W: DSP index */ unsigned char name[64]; /* W: ID (e.g. file name) */ unsigned char *image; /* W: binary image */ size_t length; /* W: size of image in bytes */ unsigned long driver_data; /* W: driver-specific data */};enum { SNDRV_HWDEP_IOCTL_PVERSION = _IOR ('H', 0x00, int), SNDRV_HWDEP_IOCTL_INFO = _IOR ('H', 0x01, struct sndrv_hwdep_info), SNDRV_HWDEP_IOCTL_DSP_STATUS = _IOR('H', 0x02, struct sndrv_hwdep_dsp_status), SNDRV_HWDEP_IOCTL_DSP_LOAD = _IOW('H', 0x03, struct sndrv_hwdep_dsp_image)};/***************************************************************************** * * * Digital Audio (PCM) interface - /dev/snd/pcm?? * * * *****************************************************************************/#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)typedef unsigned long sndrv_pcm_uframes_t;typedef long sndrv_pcm_sframes_t;enum sndrv_pcm_class { SNDRV_PCM_CLASS_GENERIC = 0, /* standard mono or stereo device */ SNDRV_PCM_CLASS_MULTI, /* multichannel device */ SNDRV_PCM_CLASS_MODEM, /* software modem class */ SNDRV_PCM_CLASS_DIGITIZER, /* digitizer class */ /* Don't forget to change the following: */ SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER,};enum sndrv_pcm_subclass { SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */ SNDRV_PCM_SUBCLASS_MULTI_MIX, /* multichannel subdevices are mixed together */ /* Don't forget to change the following: */ SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX,};enum sndrv_pcm_stream { SNDRV_PCM_STREAM_PLAYBACK = 0, SNDRV_PCM_STREAM_CAPTURE, SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE,};enum sndrv_pcm_access { SNDRV_PCM_ACCESS_MMAP_INTERLEAVED = 0, /* interleaved mmap */ SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED, /* noninterleaved mmap */ SNDRV_PCM_ACCESS_MMAP_COMPLEX, /* complex mmap */ SNDRV_PCM_ACCESS_RW_INTERLEAVED, /* readi/writei */ SNDRV_PCM_ACCESS_RW_NONINTERLEAVED, /* readn/writen */ SNDRV_PCM_ACCESS_LAST = SNDRV_PCM_ACCESS_RW_NONINTERLEAVED,};enum sndrv_pcm_format { SNDRV_PCM_FORMAT_S8 = 0, SNDRV_PCM_FORMAT_U8, SNDRV_PCM_FORMAT_S16_LE, SNDRV_PCM_FORMAT_S16_BE, SNDRV_PCM_FORMAT_U16_LE, SNDRV_PCM_FORMAT_U16_BE, SNDRV_PCM_FORMAT_S24_LE, /* low three bytes */ SNDRV_PCM_FORMAT_S24_BE, /* low three bytes */ SNDRV_PCM_FORMAT_U24_LE, /* low three bytes */ SNDRV_PCM_FORMAT_U24_BE, /* low three bytes */ SNDRV_PCM_FORMAT_S32_LE, SNDRV_PCM_FORMAT_S32_BE, SNDRV_PCM_FORMAT_U32_LE, SNDRV_PCM_FORMAT_U32_BE, SNDRV_PCM_FORMAT_FLOAT_LE, /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */ SNDRV_PCM_FORMAT_FLOAT_BE, /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */ SNDRV_PCM_FORMAT_FLOAT64_LE, /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */ SNDRV_PCM_FORMAT_FLOAT64_BE, /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */ SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE, /* IEC-958 subframe, Little Endian */ SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE, /* IEC-958 subframe, Big Endian */ SNDRV_PCM_FORMAT_MU_LAW, SNDRV_PCM_FORMAT_A_LAW, SNDRV_PCM_FORMAT_IMA_ADPCM, SNDRV_PCM_FORMAT_MPEG, SNDRV_PCM_FORMAT_GSM, SNDRV_PCM_FORMAT_SPECIAL = 31, SNDRV_PCM_FORMAT_S24_3LE = 32, /* in three bytes */ SNDRV_PCM_FORMAT_S24_3BE, /* in three bytes */ SNDRV_PCM_FORMAT_U24_3LE, /* in three bytes */ SNDRV_PCM_FORMAT_U24_3BE, /* in three bytes */ SNDRV_PCM_FORMAT_S20_3LE, /* in three bytes */ SNDRV_PCM_FORMAT_S20_3BE, /* in three bytes */ SNDRV_PCM_FORMAT_U20_3LE, /* in three bytes */ SNDRV_PCM_FORMAT_U20_3BE, /* in three bytes */ SNDRV_PCM_FORMAT_S18_3LE, /* in three bytes */ SNDRV_PCM_FORMAT_S18_3BE, /* in three bytes */ SNDRV_PCM_FORMAT_U18_3LE, /* in three bytes */ SNDRV_PCM_FORMAT_U18_3BE, /* in three bytes */ SNDRV_PCM_FORMAT_LAST = SNDRV_PCM_FORMAT_U18_3BE,#ifdef SNDRV_LITTLE_ENDIAN SNDRV_PCM_FORMAT_S16 = SNDRV_PCM_FORMAT_S16_LE, SNDRV_PCM_FORMAT_U16 = SNDRV_PCM_FORMAT_U16_LE, SNDRV_PCM_FORMAT_S24 = SNDRV_PCM_FORMAT_S24_LE, SNDRV_PCM_FORMAT_U24 = SNDRV_PCM_FORMAT_U24_LE, SNDRV_PCM_FORMAT_S32 = SNDRV_PCM_FORMAT_S32_LE, SNDRV_PCM_FORMAT_U32 = SNDRV_PCM_FORMAT_U32_LE, SNDRV_PCM_FORMAT_FLOAT = SNDRV_PCM_FORMAT_FLOAT_LE, SNDRV_PCM_FORMAT_FLOAT64 = SNDRV_PCM_FORMAT_FLOAT64_LE, SNDRV_PCM_FORMAT_IEC958_SUBFRAME = SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE,#endif#ifdef SNDRV_BIG_ENDIAN SNDRV_PCM_FORMAT_S16 = SNDRV_PCM_FORMAT_S16_BE, SNDRV_PCM_FORMAT_U16 = SNDRV_PCM_FORMAT_U16_BE, SNDRV_PCM_FORMAT_S24 = SNDRV_PCM_FORMAT_S24_BE, SNDRV_PCM_FORMAT_U24 = SNDRV_PCM_FORMAT_U24_BE, SNDRV_PCM_FORMAT_S32 = SNDRV_PCM_FORMAT_S32_BE, SNDRV_PCM_FORMAT_U32 = SNDRV_PCM_FORMAT_U32_BE, SNDRV_PCM_FORMAT_FLOAT = SNDRV_PCM_FORMAT_FLOAT_BE, SNDRV_PCM_FORMAT_FLOAT64 = SNDRV_PCM_FORMAT_FLOAT64_BE, SNDRV_PCM_FORMAT_IEC958_SUBFRAME = SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE,#endif};enum sndrv_pcm_subformat { SNDRV_PCM_SUBFORMAT_STD = 0, SNDRV_PCM_SUBFORMAT_LAST = SNDRV_PCM_SUBFORMAT_STD,};#define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */#define SNDRV_PCM_INFO_MMAP_VALID 0x00000002 /* period data are valid during transfer */#define SNDRV_PCM_INFO_DOUBLE 0x00000004 /* Double buffering needed for PCM start/stop */#define SNDRV_PCM_INFO_BATCH 0x00000010 /* double buffering */#define SNDRV_PCM_INFO_INTERLEAVED 0x00000100 /* channels are interleaved */#define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200 /* channels are not interleaved */#define SNDRV_PCM_INFO_COMPLEX 0x00000400 /* complex frame organization (mmap only) */#define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000 /* hardware transfer block of samples */#define SNDRV_PCM_INFO_OVERRANGE 0x00020000 /* hardware supports ADC (capture) overrange detection */#define SNDRV_PCM_INFO_RESUME 0x00040000 /* hardware supports stream resume after suspend */#define SNDRV_PCM_INFO_PAUSE 0x00080000 /* pause ioctl is supported */#define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */#define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */#define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */enum sndrv_pcm_state { SNDRV_PCM_STATE_OPEN = 0, /* stream is open */ SNDRV_PCM_STATE_SETUP, /* stream has a setup */ SNDRV_PCM_STATE_PREPARED, /* stream is ready to start */ SNDRV_PCM_STATE_RUNNING, /* stream is running */ SNDRV_PCM_STATE_XRUN, /* stream reached an xrun */ SNDRV_PCM_STATE_DRAINING, /* stream is draining */ SNDRV_PCM_STATE_PAUSED, /* stream is paused */ SNDRV_PCM_STATE_SUSPENDED, /* hardware is suspended */ SNDRV_PCM_STATE_DISCONNECTED, /* hardware is disconnected */ SNDRV_PCM_STATE_LAST = SNDRV_PCM_STATE_DISCONNECTED,};enum { SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000, SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000, SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,};union sndrv_pcm_sync_id { unsigned char id[16]; unsigned short id16[8]; unsigned int id32[4];};struct sndrv_pcm_info { unsigned int device; /* RO/WR (control): device number */ unsigned int subdevice; /* RO/WR (control): subdevice number */ int stream; /* RO/WR (control): stream number */ int card; /* R: card number */ unsigned char id[64]; /* ID (user selectable) */ unsigned char name[80]; /* name of this device */ unsigned char subname[32]; /* subdevice name */ int dev_class; /* SNDRV_PCM_CLASS_* */ int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */ unsigned int subdevices_count;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -