Changeset 2cc5c835 in mainline for uspace/lib/drv/generic/remote_audio_pcm.c
- Timestamp:
- 2012-07-15T15:14:10Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 57e8b3b
- Parents:
- b497018
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/remote_audio_pcm.c
rb497018 r2cc5c835 33 33 34 34 #include <async.h> 35 #include <devman.h> 35 36 #include <ddf/log.h> 36 37 #include <errno.h> … … 55 56 * CLIENT SIDE 56 57 */ 57 int audio_pcm_get_info_str(async_exch_t *exch, const char **name) 58 { 59 if (!exch) 60 return EINVAL; 58 audio_pcm_sess_t *audio_pcm_open(const char *name) 59 { 60 devman_handle_t device_handle = 0; 61 const int ret = devman_fun_get_handle(name, &device_handle, 0); 62 if (ret != EOK) 63 return NULL; 64 return devman_device_connect(EXCHANGE_SERIALIZE, device_handle, 65 IPC_FLAG_BLOCKING); 66 } 67 68 audio_pcm_sess_t *audio_pcm_open_service(service_id_t id) 69 { 70 return loc_service_connect(EXCHANGE_SERIALIZE, id, IPC_FLAG_BLOCKING); 71 } 72 73 void audio_pcm_close(audio_pcm_sess_t *sess) 74 { 75 if (sess) 76 async_hangup(sess); 77 } 78 79 int audio_pcm_get_info_str(audio_pcm_sess_t *sess, const char **name) 80 { 81 async_exch_t *exch = async_exchange_begin(sess); 61 82 sysarg_t name_size; 62 83 const int ret = async_req_1_1(exch, … … 69 90 * as it waits for read request */ 70 91 async_data_read_start(exch, (void*)-1, 0); 92 async_exchange_end(exch); 71 93 return ENOMEM; 72 94 } … … 75 97 if (ret != EOK) { 76 98 free(name_place); 99 async_exchange_end(exch); 77 100 return ret; 78 101 } 79 102 *name = name_place; 80 103 } 81 return ret; 82 } 83 84 int audio_pcm_get_buffer(async_exch_t *exch, void **buffer, size_t *size, 104 async_exchange_end(exch); 105 return ret; 106 } 107 108 int audio_pcm_get_buffer(audio_pcm_sess_t *sess, void **buffer, size_t *size, 85 109 async_client_conn_t event_rec, void* arg) 86 110 { 87 if (! exch || !buffer || !size)111 if (!buffer || !size) 88 112 return EINVAL; 113 114 async_exch_t *exch = async_exchange_begin(sess); 89 115 90 116 sysarg_t buffer_size = *size; … … 96 122 int ret = async_share_in_start_0_0(exch, buffer_size, &dst); 97 123 if (ret != EOK) { 124 async_exchange_end(exch); 98 125 return ret; 99 126 } 100 127 ret = async_connect_to_me(exch, 0, 0, 0, event_rec, arg); 101 128 if (ret != EOK) { 129 async_exchange_end(exch); 102 130 return ret; 103 131 } … … 106 134 *size = buffer_size; 107 135 } 108 return ret; 109 } 110 111 int audio_pcm_release_buffer(async_exch_t *exch) 112 { 113 if (!exch) 114 return EINVAL; 115 return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 136 async_exchange_end(exch); 137 return ret; 138 } 139 140 int audio_pcm_release_buffer(audio_pcm_sess_t *sess) 141 { 142 async_exch_t *exch = async_exchange_begin(sess); 143 const int ret = async_req_1_0(exch, 144 DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 116 145 IPC_M_AUDIO_PCM_RELEASE_BUFFER); 117 } 118 119 int audio_pcm_start_playback(async_exch_t *exch, unsigned parts, 146 async_exchange_end(exch); 147 return ret; 148 } 149 150 int audio_pcm_start_playback(audio_pcm_sess_t *sess, unsigned parts, 120 151 unsigned channels, unsigned sample_rate, pcm_sample_format_t format) 121 152 { 122 if (!exch)123 return EINVAL;124 153 if (parts > UINT8_MAX || channels > UINT8_MAX) 125 154 return EINVAL; … … 127 156 const sysarg_t packed = 128 157 (parts << 24) | (channels << 16) | (format & UINT16_MAX); 129 return async_req_3_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 130 IPC_M_AUDIO_PCM_START_PLAYBACK, sample_rate, packed); 131 } 132 133 int audio_pcm_stop_playback(async_exch_t *exch) 134 { 135 if (!exch) 136 return EINVAL; 137 return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 158 async_exch_t *exch = async_exchange_begin(sess); 159 const int ret = async_req_3_0(exch, 160 DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 161 IPC_M_AUDIO_PCM_START_PLAYBACK, 162 sample_rate, packed); 163 async_exchange_end(exch); 164 return ret; 165 } 166 167 int audio_pcm_stop_playback(audio_pcm_sess_t *sess) 168 { 169 async_exch_t *exch = async_exchange_begin(sess); 170 const int ret = async_req_1_0(exch, 171 DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 138 172 IPC_M_AUDIO_PCM_STOP_PLAYBACK); 139 } 140 141 int audio_pcm_start_record(async_exch_t *exch, unsigned parts, 173 async_exchange_end(exch); 174 return ret; 175 } 176 177 int audio_pcm_start_record(audio_pcm_sess_t *sess, unsigned parts, 142 178 unsigned channels, unsigned sample_rate, pcm_sample_format_t format) 143 179 { 144 if (!exch)145 return EINVAL;146 180 if (parts > UINT8_MAX || channels > UINT8_MAX) 147 181 return EINVAL; … … 149 183 const sysarg_t packed = 150 184 (parts << 24) | (channels << 16) | (format & UINT16_MAX); 151 return async_req_3_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 152 IPC_M_AUDIO_PCM_START_RECORD, sample_rate, packed); 153 } 154 155 int audio_pcm_stop_record(async_exch_t *exch) 156 { 157 if (!exch) 158 return EINVAL; 159 return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 160 IPC_M_AUDIO_PCM_STOP_RECORD); 185 async_exch_t *exch = async_exchange_begin(sess); 186 const int ret = async_req_3_0(exch, 187 DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), IPC_M_AUDIO_PCM_START_RECORD, 188 sample_rate, packed); 189 async_exchange_end(exch); 190 return ret; 191 } 192 193 int audio_pcm_stop_record(audio_pcm_sess_t *sess) 194 { 195 async_exch_t *exch = async_exchange_begin(sess); 196 const int ret = async_req_1_0(exch, 197 DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), IPC_M_AUDIO_PCM_STOP_RECORD); 198 async_exchange_end(exch); 199 return ret; 161 200 } 162 201
Note:
See TracChangeset
for help on using the changeset viewer.