📄 asound.h
字号:
unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */ int card; /* card number */ unsigned char id[64]; /* timer identificator */ unsigned char name[80]; /* timer name */ unsigned long reserved0; /* reserved for future use */ unsigned long resolution; /* average period resolution in ns */ unsigned char reserved[64]; /* reserved */};#define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */#define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */struct sndrv_timer_params { unsigned int flags; /* flags - SNDRV_MIXER_PSFLG_* */ unsigned int ticks; /* requested resolution in ticks */ unsigned int queue_size; /* total size of queue (32-1024) */ unsigned int reserved0; /* reserved, was: failure locations */ unsigned int filter; /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */ unsigned char reserved[60]; /* reserved */};struct sndrv_timer_status { struct timespec tstamp; /* Timestamp - last update */ unsigned int resolution; /* current period resolution in ns */ unsigned int lost; /* counter of master tick lost */ unsigned int overrun; /* count of read queue overruns */ unsigned int queue; /* used queue size */ unsigned char reserved[64]; /* reserved */};enum { SNDRV_TIMER_IOCTL_PVERSION = _IOR('T', 0x00, int), SNDRV_TIMER_IOCTL_NEXT_DEVICE = _IOWR('T', 0x01, struct sndrv_timer_id), SNDRV_TIMER_IOCTL_TREAD = _IOW('T', 0x02, int), SNDRV_TIMER_IOCTL_GINFO = _IOWR('T', 0x03, struct sndrv_timer_ginfo), SNDRV_TIMER_IOCTL_GPARAMS = _IOW('T', 0x04, struct sndrv_timer_gparams), SNDRV_TIMER_IOCTL_GSTATUS = _IOWR('T', 0x05, struct sndrv_timer_gstatus), SNDRV_TIMER_IOCTL_SELECT = _IOW('T', 0x10, struct sndrv_timer_select), SNDRV_TIMER_IOCTL_INFO = _IOR('T', 0x11, struct sndrv_timer_info), SNDRV_TIMER_IOCTL_PARAMS = _IOW('T', 0x12, struct sndrv_timer_params), SNDRV_TIMER_IOCTL_STATUS = _IOR('T', 0x14, struct sndrv_timer_status), /* The following four ioctls are changed since 1.0.9 due to confliction */ SNDRV_TIMER_IOCTL_START = _IO('T', 0xa0), SNDRV_TIMER_IOCTL_STOP = _IO('T', 0xa1), SNDRV_TIMER_IOCTL_CONTINUE = _IO('T', 0xa2), SNDRV_TIMER_IOCTL_PAUSE = _IO('T', 0xa3),};struct sndrv_timer_read { unsigned int resolution; unsigned int ticks;};enum sndrv_timer_event { SNDRV_TIMER_EVENT_RESOLUTION = 0, /* val = resolution in ns */ SNDRV_TIMER_EVENT_TICK, /* val = ticks */ SNDRV_TIMER_EVENT_START, /* val = resolution in ns */ SNDRV_TIMER_EVENT_STOP, /* val = 0 */ SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */ SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */ SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */ SNDRV_TIMER_EVENT_SUSPEND, /* val = 0 */ SNDRV_TIMER_EVENT_RESUME, /* val = resolution in ns */ /* master timer events for slave timer instances */ SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10, SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10, SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10, SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10, SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10, SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,};struct sndrv_timer_tread { int event; struct timespec tstamp; unsigned int val;};/**************************************************************************** * * * Section for driver control interface - /dev/snd/control? * * * ****************************************************************************/#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 3)struct sndrv_ctl_card_info { int card; /* card number */ int pad; /* reserved for future (was type) */ unsigned char id[16]; /* ID of card (user selectable) */ unsigned char driver[16]; /* Driver name */ unsigned char name[32]; /* Short name of soundcard */ unsigned char longname[80]; /* name + info text about soundcard */ unsigned char reserved_[16]; /* reserved for future (was ID of mixer) */ unsigned char mixername[80]; /* visual mixer identification */ unsigned char components[80]; /* card components / fine identification, delimited with one space (AC97 etc..) */ unsigned char reserved[48]; /* reserved for future */};enum sndrv_ctl_elem_type { SNDRV_CTL_ELEM_TYPE_NONE = 0, /* invalid */ SNDRV_CTL_ELEM_TYPE_BOOLEAN, /* boolean type */ SNDRV_CTL_ELEM_TYPE_INTEGER, /* integer type */ SNDRV_CTL_ELEM_TYPE_ENUMERATED, /* enumerated type */ SNDRV_CTL_ELEM_TYPE_BYTES, /* byte array */ SNDRV_CTL_ELEM_TYPE_IEC958, /* IEC958 (S/PDIF) setup */ SNDRV_CTL_ELEM_TYPE_INTEGER64, /* 64-bit integer type */ SNDRV_CTL_ELEM_TYPE_LAST = SNDRV_CTL_ELEM_TYPE_INTEGER64,};enum sndrv_ctl_elem_iface { SNDRV_CTL_ELEM_IFACE_CARD = 0, /* global control */ SNDRV_CTL_ELEM_IFACE_HWDEP, /* hardware dependent device */ SNDRV_CTL_ELEM_IFACE_MIXER, /* virtual mixer device */ SNDRV_CTL_ELEM_IFACE_PCM, /* PCM device */ SNDRV_CTL_ELEM_IFACE_RAWMIDI, /* RawMidi device */ SNDRV_CTL_ELEM_IFACE_TIMER, /* timer device */ SNDRV_CTL_ELEM_IFACE_SEQUENCER, /* sequencer client */ SNDRV_CTL_ELEM_IFACE_LAST = SNDRV_CTL_ELEM_IFACE_SEQUENCER,};#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0)#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1)#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3) /* when was control changed */#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is supported */#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is supported */#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6) /* TLV command is possible */#define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */#define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */#define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28) /* flag only for kernel */#define SNDRV_CTL_ELEM_ACCESS_USER (1<<29) /* user space element */#define SNDRV_CTL_ELEM_ACCESS_DINDIRECT (1<<30) /* indirect access for matrix dimensions in the info structure */#define SNDRV_CTL_ELEM_ACCESS_INDIRECT (1<<31) /* indirect access for element value in the value structure *//* for further details see the ACPI and PCI power management specification */#define SNDRV_CTL_POWER_D0 0x0000 /* full On */#define SNDRV_CTL_POWER_D1 0x0100 /* partial On */#define SNDRV_CTL_POWER_D2 0x0200 /* partial On */#define SNDRV_CTL_POWER_D3 0x0300 /* Off */#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000) /* Off, with power */#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001) /* Off, without power */struct sndrv_ctl_elem_id { unsigned int numid; /* numeric identifier, zero = invalid */ int iface; /* interface identifier */ unsigned int device; /* device/client number */ unsigned int subdevice; /* subdevice (substream) number */ unsigned char name[44]; /* ASCII name of item */ unsigned int index; /* index of item */};struct sndrv_ctl_elem_list { unsigned int offset; /* W: first element ID to get */ unsigned int space; /* W: count of element IDs to get */ unsigned int used; /* R: count of element IDs set */ unsigned int count; /* R: count of all elements */ struct sndrv_ctl_elem_id *pids; /* R: IDs */ unsigned char reserved[50];};struct sndrv_ctl_elem_info { struct sndrv_ctl_elem_id id; /* W: element ID */ int type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */ unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */ unsigned int count; /* count of values */ pid_t owner; /* owner's PID of this control */ union { struct { long min; /* R: minimum value */ long max; /* R: maximum value */ long step; /* R: step (0 variable) */ } integer; struct { long long min; /* R: minimum value */ long long max; /* R: maximum value */ long long step; /* R: step (0 variable) */ } integer64; struct { unsigned int items; /* R: number of items */ unsigned int item; /* W: item number */ char name[64]; /* R: value name */ } enumerated; unsigned char reserved[128]; } value; union { unsigned short d[4]; /* dimensions */ unsigned short *d_ptr; /* indirect */ } dimen; unsigned char reserved[64-4*sizeof(unsigned short)];};struct sndrv_ctl_elem_value { struct sndrv_ctl_elem_id id; /* W: element ID */ unsigned int indirect: 1; /* W: use indirect pointer (xxx_ptr member) */ union { union { long value[128]; long *value_ptr; } integer; union { long long value[64]; long long *value_ptr; } integer64; union { unsigned int item[128]; unsigned int *item_ptr; } enumerated; union { unsigned char data[512]; unsigned char *data_ptr; } bytes; struct sndrv_aes_iec958 iec958; } value; /* RO */ struct timespec tstamp; unsigned char reserved[128-sizeof(struct timespec)];};struct sndrv_ctl_tlv { unsigned int numid; /* control element numeric identification */ unsigned int length; /* in bytes aligned to 4 */ unsigned int tlv[0]; /* first TLV */};enum { SNDRV_CTL_IOCTL_PVERSION = _IOR('U', 0x00, int), SNDRV_CTL_IOCTL_CARD_INFO = _IOR('U', 0x01, struct sndrv_ctl_card_info), SNDRV_CTL_IOCTL_ELEM_LIST = _IOWR('U', 0x10, struct sndrv_ctl_elem_list), SNDRV_CTL_IOCTL_ELEM_INFO = _IOWR('U', 0x11, struct sndrv_ctl_elem_info), SNDRV_CTL_IOCTL_ELEM_READ = _IOWR('U', 0x12, struct sndrv_ctl_elem_value), SNDRV_CTL_IOCTL_ELEM_WRITE = _IOWR('U', 0x13, struct sndrv_ctl_elem_value), SNDRV_CTL_IOCTL_ELEM_LOCK = _IOW('U', 0x14, struct sndrv_ctl_elem_id), SNDRV_CTL_IOCTL_ELEM_UNLOCK = _IOW('U', 0x15, struct sndrv_ctl_elem_id), SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS = _IOWR('U', 0x16, int), SNDRV_CTL_IOCTL_ELEM_ADD = _IOWR('U', 0x17, struct sndrv_ctl_elem_info), SNDRV_CTL_IOCTL_ELEM_REPLACE = _IOWR('U', 0x18, struct sndrv_ctl_elem_info), SNDRV_CTL_IOCTL_ELEM_REMOVE = _IOWR('U', 0x19, struct sndrv_ctl_elem_id), SNDRV_CTL_IOCTL_TLV_READ = _IOWR('U', 0x1a, struct sndrv_ctl_tlv), SNDRV_CTL_IOCTL_TLV_WRITE = _IOWR('U', 0x1b, struct sndrv_ctl_tlv), SNDRV_CTL_IOCTL_TLV_COMMAND = _IOWR('U', 0x1c, struct sndrv_ctl_tlv), SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE = _IOWR('U', 0x20, int), SNDRV_CTL_IOCTL_HWDEP_INFO = _IOR('U', 0x21, struct sndrv_hwdep_info), SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE = _IOR('U', 0x30, int), SNDRV_CTL_IOCTL_PCM_INFO = _IOWR('U', 0x31, struct sndrv_pcm_info), SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE = _IOW('U', 0x32, int), SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE = _IOWR('U', 0x40, int), SNDRV_CTL_IOCTL_RAWMIDI_INFO = _IOWR('U', 0x41, struct sndrv_rawmidi_info), SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE = _IOW('U', 0x42, int), SNDRV_CTL_IOCTL_POWER = _IOWR('U', 0xd0, int), SNDRV_CTL_IOCTL_POWER_STATE = _IOR('U', 0xd1, int),};/* * Read interface. */enum sndrv_ctl_event_type { SNDRV_CTL_EVENT_ELEM = 0, SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM,};#define SNDRV_CTL_EVENT_MASK_VALUE (1<<0) /* element value was changed */#define SNDRV_CTL_EVENT_MASK_INFO (1<<1) /* element info was changed */#define SNDRV_CTL_EVENT_MASK_ADD (1<<2) /* element was added */#define SNDRV_CTL_EVENT_MASK_REMOVE (~0U) /* element was removed */struct sndrv_ctl_event { int type; /* event type - SNDRV_CTL_EVENT_* */ union { struct { unsigned int mask; struct sndrv_ctl_elem_id id; } elem; unsigned char data8[60]; } data;};/* * Control names */#define SNDRV_CTL_NAME_NONE ""#define SNDRV_CTL_NAME_PLAYBACK "Playback "#define SNDRV_CTL_NAME_CAPTURE "Capture "#define SNDRV_CTL_NAME_IEC958_NONE ""#define SNDRV_CTL_NAME_IEC958_SWITCH "Switch"#define SNDRV_CTL_NAME_IEC958_VOLUME "Volume"#define SNDRV_CTL_NAME_IEC958_DEFAULT "Default"#define SNDRV_CTL_NAME_IEC958_MASK "Mask"#define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask"#define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask"#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream"#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what/* * */struct sndrv_xferv { const struct iovec *vector; unsigned long count;};enum { SNDRV_IOCTL_READV = _IOW('K', 0x00, struct sndrv_xferv), SNDRV_IOCTL_WRITEV = _IOW('K', 0x01, struct sndrv_xferv),};#endif /* __SOUND_ASOUND_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -