|  | /* | 
|  | *  ALSA client/server header file | 
|  | *  Copyright (c) 2000 by Abramo Bagnara <abramo@alsa-project.org> | 
|  | * | 
|  | *   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 | 
|  | * | 
|  | */ | 
|  |  | 
|  | #include <netdb.h> | 
|  | #include "../src/pcm/pcm_local.h" | 
|  | #include "../src/control/control_local.h" | 
|  |  | 
|  | int snd_receive_fd(int sock, void *data, size_t len, int *fd); | 
|  |  | 
|  | typedef enum _snd_dev_type { | 
|  | SND_DEV_TYPE_PCM, | 
|  | SND_DEV_TYPE_CONTROL, | 
|  | SND_DEV_TYPE_RAWMIDI, | 
|  | SND_DEV_TYPE_TIMER, | 
|  | SND_DEV_TYPE_HWDEP, | 
|  | SND_DEV_TYPE_SEQ, | 
|  | } snd_dev_type_t; | 
|  |  | 
|  | typedef enum _snd_transport_type { | 
|  | SND_TRANSPORT_TYPE_SHM, | 
|  | SND_TRANSPORT_TYPE_TCP, | 
|  | } snd_transport_type_t; | 
|  |  | 
|  | #define SND_PCM_IOCTL_HWSYNC		_IO ('A', 0x22) | 
|  | #define SND_PCM_IOCTL_STATE		_IO ('A', 0xf1) | 
|  | #define SND_PCM_IOCTL_MMAP		_IO ('A', 0xf2) | 
|  | #define SND_PCM_IOCTL_MUNMAP		_IO ('A', 0xf3) | 
|  | #define SND_PCM_IOCTL_MMAP_COMMIT	_IO ('A', 0xf4) | 
|  | #define SND_PCM_IOCTL_AVAIL_UPDATE	_IO ('A', 0xf5) | 
|  | #define SND_PCM_IOCTL_ASYNC		_IO ('A', 0xf6) | 
|  | #define SND_PCM_IOCTL_CLOSE		_IO ('A', 0xf7) | 
|  | #define SND_PCM_IOCTL_POLL_DESCRIPTOR	_IO ('A', 0xf8) | 
|  | #define SND_PCM_IOCTL_HW_PTR_FD		_IO ('A', 0xf9) | 
|  | #define SND_PCM_IOCTL_APPL_PTR_FD	_IO ('A', 0xfa) | 
|  | #define SND_PCM_IOCTL_FORWARD		_IO ('A', 0xfb) | 
|  |  | 
|  | typedef struct { | 
|  | snd_pcm_uframes_t ptr; | 
|  | int use_mmap; | 
|  | off_t offset;		/* for mmap */ | 
|  | int changed; | 
|  | } snd_pcm_shm_rbptr_t; | 
|  |  | 
|  | typedef struct { | 
|  | long result; | 
|  | int cmd; | 
|  | snd_pcm_shm_rbptr_t hw; | 
|  | snd_pcm_shm_rbptr_t appl; | 
|  | union { | 
|  | struct { | 
|  | int sig; | 
|  | pid_t pid; | 
|  | } async; | 
|  | snd_pcm_info_t info; | 
|  | snd_pcm_hw_params_t hw_refine; | 
|  | snd_pcm_hw_params_t hw_params; | 
|  | snd_pcm_sw_params_t sw_params; | 
|  | snd_pcm_status_t status; | 
|  | struct { | 
|  | snd_pcm_uframes_t frames; | 
|  | } avail; | 
|  | struct { | 
|  | snd_pcm_sframes_t frames; | 
|  | } delay; | 
|  | struct { | 
|  | int enable; | 
|  | } pause; | 
|  | snd_pcm_channel_info_t channel_info; | 
|  | struct { | 
|  | snd_pcm_uframes_t frames; | 
|  | } rewind; | 
|  | struct { | 
|  | snd_pcm_uframes_t frames; | 
|  | } forward; | 
|  | struct { | 
|  | int fd; | 
|  | } link; | 
|  | struct { | 
|  | snd_pcm_uframes_t offset; | 
|  | snd_pcm_uframes_t frames; | 
|  | } mmap_commit; | 
|  | struct { | 
|  | char use_mmap; | 
|  | int shmid; | 
|  | off_t offset; | 
|  | } rbptr; | 
|  | } u; | 
|  | char data[0]; | 
|  | } snd_pcm_shm_ctrl_t; | 
|  |  | 
|  | #define PCM_SHM_SIZE sizeof(snd_pcm_shm_ctrl_t) | 
|  |  | 
|  | #define SND_CTL_IOCTL_READ		_IOR('U', 0xf1, snd_ctl_event_t) | 
|  | #define SND_CTL_IOCTL_CLOSE		_IO ('U', 0xf2) | 
|  | #define SND_CTL_IOCTL_POLL_DESCRIPTOR	_IO ('U', 0xf3) | 
|  | #define SND_CTL_IOCTL_ASYNC		_IO ('U', 0xf4) | 
|  |  | 
|  | typedef struct { | 
|  | int result; | 
|  | int cmd; | 
|  | union { | 
|  | struct { | 
|  | int sig; | 
|  | pid_t pid; | 
|  | } async; | 
|  | int device; | 
|  | int subscribe_events; | 
|  | snd_ctl_card_info_t card_info; | 
|  | snd_ctl_elem_list_t element_list; | 
|  | snd_ctl_elem_info_t element_info; | 
|  | snd_ctl_elem_value_t element_read; | 
|  | snd_ctl_elem_value_t element_write; | 
|  | snd_ctl_elem_id_t element_lock; | 
|  | snd_ctl_elem_id_t element_unlock; | 
|  | snd_hwdep_info_t hwdep_info; | 
|  | snd_pcm_info_t pcm_info; | 
|  | int pcm_prefer_subdevice; | 
|  | snd_rawmidi_info_t rawmidi_info; | 
|  | int rawmidi_prefer_subdevice; | 
|  | unsigned int power_state; | 
|  | snd_ctl_event_t read; | 
|  | } u; | 
|  | char data[0]; | 
|  | } snd_ctl_shm_ctrl_t; | 
|  |  | 
|  | #define CTL_SHM_SIZE 65536 | 
|  | #define CTL_SHM_DATA_MAXLEN (CTL_SHM_SIZE - offsetof(snd_ctl_shm_ctrl_t, data)) | 
|  |  | 
|  | typedef struct { | 
|  | unsigned char dev_type; | 
|  | unsigned char transport_type; | 
|  | unsigned char stream; | 
|  | unsigned char mode; | 
|  | unsigned char namelen; | 
|  | char name[0]; | 
|  | } snd_client_open_request_t; | 
|  |  | 
|  | typedef struct { | 
|  | long result; | 
|  | int cookie; | 
|  | } snd_client_open_answer_t; | 
|  |  |