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