1d5ac70f0Sopenharmony_ci/* 2d5ac70f0Sopenharmony_ci * ALSA client/server header file 3d5ac70f0Sopenharmony_ci * Copyright (c) 2000 by Abramo Bagnara <abramo@alsa-project.org> 4d5ac70f0Sopenharmony_ci * 5d5ac70f0Sopenharmony_ci * This library is free software; you can redistribute it and/or modify 6d5ac70f0Sopenharmony_ci * it under the terms of the GNU Lesser General Public License as 7d5ac70f0Sopenharmony_ci * published by the Free Software Foundation; either version 2.1 of 8d5ac70f0Sopenharmony_ci * the License, or (at your option) any later version. 9d5ac70f0Sopenharmony_ci * 10d5ac70f0Sopenharmony_ci * This program is distributed in the hope that it will be useful, 11d5ac70f0Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 12d5ac70f0Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13d5ac70f0Sopenharmony_ci * GNU Lesser General Public License for more details. 14d5ac70f0Sopenharmony_ci * 15d5ac70f0Sopenharmony_ci * You should have received a copy of the GNU Lesser General Public 16d5ac70f0Sopenharmony_ci * License along with this library; if not, write to the Free Software 17d5ac70f0Sopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18d5ac70f0Sopenharmony_ci * 19d5ac70f0Sopenharmony_ci */ 20d5ac70f0Sopenharmony_ci 21d5ac70f0Sopenharmony_ci#include "../src/pcm/pcm_local.h" 22d5ac70f0Sopenharmony_ci#include "../src/control/control_local.h" 23d5ac70f0Sopenharmony_ci#include <netdb.h> 24d5ac70f0Sopenharmony_ci 25d5ac70f0Sopenharmony_ciint snd_receive_fd(int sock, void *data, size_t len, int *fd); 26d5ac70f0Sopenharmony_ci 27d5ac70f0Sopenharmony_citypedef enum _snd_dev_type { 28d5ac70f0Sopenharmony_ci SND_DEV_TYPE_PCM, 29d5ac70f0Sopenharmony_ci SND_DEV_TYPE_CONTROL, 30d5ac70f0Sopenharmony_ci SND_DEV_TYPE_RAWMIDI, 31d5ac70f0Sopenharmony_ci SND_DEV_TYPE_TIMER, 32d5ac70f0Sopenharmony_ci SND_DEV_TYPE_HWDEP, 33d5ac70f0Sopenharmony_ci SND_DEV_TYPE_SEQ, 34d5ac70f0Sopenharmony_ci} snd_dev_type_t; 35d5ac70f0Sopenharmony_ci 36d5ac70f0Sopenharmony_citypedef enum _snd_transport_type { 37d5ac70f0Sopenharmony_ci SND_TRANSPORT_TYPE_SHM, 38d5ac70f0Sopenharmony_ci SND_TRANSPORT_TYPE_TCP, 39d5ac70f0Sopenharmony_ci} snd_transport_type_t; 40d5ac70f0Sopenharmony_ci 41d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_HWSYNC _IO ('A', 0x22) 42d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_STATE _IO ('A', 0xf1) 43d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_MMAP _IO ('A', 0xf2) 44d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_MUNMAP _IO ('A', 0xf3) 45d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_MMAP_COMMIT _IO ('A', 0xf4) 46d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_AVAIL_UPDATE _IO ('A', 0xf5) 47d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_ASYNC _IO ('A', 0xf6) 48d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_CLOSE _IO ('A', 0xf7) 49d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_POLL_DESCRIPTOR _IO ('A', 0xf8) 50d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_HW_PTR_FD _IO ('A', 0xf9) 51d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_APPL_PTR_FD _IO ('A', 0xfa) 52d5ac70f0Sopenharmony_ci#define SND_PCM_IOCTL_FORWARD _IO ('A', 0xfb) 53d5ac70f0Sopenharmony_ci 54d5ac70f0Sopenharmony_citypedef struct { 55d5ac70f0Sopenharmony_ci snd_pcm_uframes_t ptr; 56d5ac70f0Sopenharmony_ci int use_mmap; 57d5ac70f0Sopenharmony_ci off_t offset; /* for mmap */ 58d5ac70f0Sopenharmony_ci int changed; 59d5ac70f0Sopenharmony_ci} snd_pcm_shm_rbptr_t; 60d5ac70f0Sopenharmony_ci 61d5ac70f0Sopenharmony_citypedef struct { 62d5ac70f0Sopenharmony_ci long result; 63d5ac70f0Sopenharmony_ci int cmd; 64d5ac70f0Sopenharmony_ci snd_pcm_shm_rbptr_t hw; 65d5ac70f0Sopenharmony_ci snd_pcm_shm_rbptr_t appl; 66d5ac70f0Sopenharmony_ci union { 67d5ac70f0Sopenharmony_ci struct { 68d5ac70f0Sopenharmony_ci int sig; 69d5ac70f0Sopenharmony_ci pid_t pid; 70d5ac70f0Sopenharmony_ci } async; 71d5ac70f0Sopenharmony_ci snd_pcm_info_t info; 72d5ac70f0Sopenharmony_ci snd_pcm_hw_params_t hw_refine; 73d5ac70f0Sopenharmony_ci snd_pcm_hw_params_t hw_params; 74d5ac70f0Sopenharmony_ci snd_pcm_sw_params_t sw_params; 75d5ac70f0Sopenharmony_ci snd_pcm_status_t status; 76d5ac70f0Sopenharmony_ci struct { 77d5ac70f0Sopenharmony_ci snd_pcm_uframes_t frames; 78d5ac70f0Sopenharmony_ci } avail; 79d5ac70f0Sopenharmony_ci struct { 80d5ac70f0Sopenharmony_ci snd_pcm_sframes_t frames; 81d5ac70f0Sopenharmony_ci } delay; 82d5ac70f0Sopenharmony_ci struct { 83d5ac70f0Sopenharmony_ci int enable; 84d5ac70f0Sopenharmony_ci } pause; 85d5ac70f0Sopenharmony_ci snd_pcm_channel_info_t channel_info; 86d5ac70f0Sopenharmony_ci struct { 87d5ac70f0Sopenharmony_ci snd_pcm_uframes_t frames; 88d5ac70f0Sopenharmony_ci } rewind; 89d5ac70f0Sopenharmony_ci struct { 90d5ac70f0Sopenharmony_ci snd_pcm_uframes_t frames; 91d5ac70f0Sopenharmony_ci } forward; 92d5ac70f0Sopenharmony_ci struct { 93d5ac70f0Sopenharmony_ci int fd; 94d5ac70f0Sopenharmony_ci } link; 95d5ac70f0Sopenharmony_ci struct { 96d5ac70f0Sopenharmony_ci snd_pcm_uframes_t offset; 97d5ac70f0Sopenharmony_ci snd_pcm_uframes_t frames; 98d5ac70f0Sopenharmony_ci } mmap_commit; 99d5ac70f0Sopenharmony_ci struct { 100d5ac70f0Sopenharmony_ci char use_mmap; 101d5ac70f0Sopenharmony_ci int shmid; 102d5ac70f0Sopenharmony_ci off_t offset; 103d5ac70f0Sopenharmony_ci } rbptr; 104d5ac70f0Sopenharmony_ci } u; 105d5ac70f0Sopenharmony_ci char data[0]; 106d5ac70f0Sopenharmony_ci} snd_pcm_shm_ctrl_t; 107d5ac70f0Sopenharmony_ci 108d5ac70f0Sopenharmony_ci#define PCM_SHM_SIZE sizeof(snd_pcm_shm_ctrl_t) 109d5ac70f0Sopenharmony_ci 110d5ac70f0Sopenharmony_ci#define SND_CTL_IOCTL_READ _IOR('U', 0xf1, snd_ctl_event_t) 111d5ac70f0Sopenharmony_ci#define SND_CTL_IOCTL_CLOSE _IO ('U', 0xf2) 112d5ac70f0Sopenharmony_ci#define SND_CTL_IOCTL_POLL_DESCRIPTOR _IO ('U', 0xf3) 113d5ac70f0Sopenharmony_ci#define SND_CTL_IOCTL_ASYNC _IO ('U', 0xf4) 114d5ac70f0Sopenharmony_ci 115d5ac70f0Sopenharmony_citypedef struct { 116d5ac70f0Sopenharmony_ci int result; 117d5ac70f0Sopenharmony_ci int cmd; 118d5ac70f0Sopenharmony_ci union { 119d5ac70f0Sopenharmony_ci struct { 120d5ac70f0Sopenharmony_ci int sig; 121d5ac70f0Sopenharmony_ci pid_t pid; 122d5ac70f0Sopenharmony_ci } async; 123d5ac70f0Sopenharmony_ci int device; 124d5ac70f0Sopenharmony_ci int subscribe_events; 125d5ac70f0Sopenharmony_ci snd_ctl_card_info_t card_info; 126d5ac70f0Sopenharmony_ci snd_ctl_elem_list_t element_list; 127d5ac70f0Sopenharmony_ci snd_ctl_elem_info_t element_info; 128d5ac70f0Sopenharmony_ci snd_ctl_elem_value_t element_read; 129d5ac70f0Sopenharmony_ci snd_ctl_elem_value_t element_write; 130d5ac70f0Sopenharmony_ci snd_ctl_elem_id_t element_lock; 131d5ac70f0Sopenharmony_ci snd_ctl_elem_id_t element_unlock; 132d5ac70f0Sopenharmony_ci snd_hwdep_info_t hwdep_info; 133d5ac70f0Sopenharmony_ci snd_pcm_info_t pcm_info; 134d5ac70f0Sopenharmony_ci int pcm_prefer_subdevice; 135d5ac70f0Sopenharmony_ci snd_rawmidi_info_t rawmidi_info; 136d5ac70f0Sopenharmony_ci int rawmidi_prefer_subdevice; 137d5ac70f0Sopenharmony_ci unsigned int power_state; 138d5ac70f0Sopenharmony_ci snd_ctl_event_t read; 139d5ac70f0Sopenharmony_ci } u; 140d5ac70f0Sopenharmony_ci char data[0]; 141d5ac70f0Sopenharmony_ci} snd_ctl_shm_ctrl_t; 142d5ac70f0Sopenharmony_ci 143d5ac70f0Sopenharmony_ci#define CTL_SHM_SIZE 65536 144d5ac70f0Sopenharmony_ci#define CTL_SHM_DATA_MAXLEN (CTL_SHM_SIZE - offsetof(snd_ctl_shm_ctrl_t, data)) 145d5ac70f0Sopenharmony_ci 146d5ac70f0Sopenharmony_citypedef struct { 147d5ac70f0Sopenharmony_ci unsigned char dev_type; 148d5ac70f0Sopenharmony_ci unsigned char transport_type; 149d5ac70f0Sopenharmony_ci unsigned char stream; 150d5ac70f0Sopenharmony_ci unsigned char mode; 151d5ac70f0Sopenharmony_ci unsigned char namelen; 152d5ac70f0Sopenharmony_ci char name[0]; 153d5ac70f0Sopenharmony_ci} snd_client_open_request_t; 154d5ac70f0Sopenharmony_ci 155d5ac70f0Sopenharmony_citypedef struct { 156d5ac70f0Sopenharmony_ci long result; 157d5ac70f0Sopenharmony_ci int cookie; 158d5ac70f0Sopenharmony_ci} snd_client_open_answer_t; 159d5ac70f0Sopenharmony_ci 160