Changeset b497018 in mainline for uspace/lib/drv/generic/remote_audio_pcm.c
- Timestamp:
- 2012-07-15T15:13:34Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2cc5c835
- Parents:
- 44d1311
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/remote_audio_pcm.c
r44d1311 rb497018 83 83 84 84 int audio_pcm_get_buffer(async_exch_t *exch, void **buffer, size_t *size, 85 unsigned *id,async_client_conn_t event_rec, void* arg)86 { 87 if (!exch || !buffer || !size || !id)88 return EINVAL; 89 90 sysarg_t buffer_size = *size , buffer_id = 0;91 const int ret = async_req_2_ 2(exch,85 async_client_conn_t event_rec, void* arg) 86 { 87 if (!exch || !buffer || !size) 88 return EINVAL; 89 90 sysarg_t buffer_size = *size; 91 const int ret = async_req_2_1(exch, 92 92 DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), IPC_M_AUDIO_PCM_GET_BUFFER, 93 (sysarg_t)buffer_size, &buffer_size , &buffer_id);93 (sysarg_t)buffer_size, &buffer_size); 94 94 if (ret == EOK) { 95 95 void *dst = NULL; … … 105 105 *buffer = dst; 106 106 *size = buffer_size; 107 *id = buffer_id;108 107 } 109 108 return ret; 110 109 } 111 110 112 int audio_pcm_release_buffer(async_exch_t *exch , unsigned id)111 int audio_pcm_release_buffer(async_exch_t *exch) 113 112 { 114 113 if (!exch) 115 114 return EINVAL; 116 return async_req_ 2_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),117 IPC_M_AUDIO_PCM_RELEASE_BUFFER , id);118 } 119 120 int audio_pcm_start_playback(async_exch_t *exch, unsigned id, unsignedparts,115 return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 116 IPC_M_AUDIO_PCM_RELEASE_BUFFER); 117 } 118 119 int audio_pcm_start_playback(async_exch_t *exch, unsigned parts, 121 120 unsigned channels, unsigned sample_rate, pcm_sample_format_t format) 122 121 { … … 128 127 const sysarg_t packed = 129 128 (parts << 24) | (channels << 16) | (format & UINT16_MAX); 130 return async_req_ 4_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),131 IPC_M_AUDIO_PCM_START_PLAYBACK, id,sample_rate, packed);132 } 133 134 int audio_pcm_stop_playback(async_exch_t *exch , unsigned id)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) 135 134 { 136 135 if (!exch) 137 136 return EINVAL; 138 return async_req_ 2_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),139 IPC_M_AUDIO_PCM_STOP_PLAYBACK , id);140 } 141 142 int audio_pcm_start_record(async_exch_t *exch, unsigned id, unsignedparts,137 return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 138 IPC_M_AUDIO_PCM_STOP_PLAYBACK); 139 } 140 141 int audio_pcm_start_record(async_exch_t *exch, unsigned parts, 143 142 unsigned channels, unsigned sample_rate, pcm_sample_format_t format) 144 143 { … … 150 149 const sysarg_t packed = 151 150 (parts << 24) | (channels << 16) | (format & UINT16_MAX); 152 return async_req_ 4_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),153 IPC_M_AUDIO_PCM_START_RECORD, id,sample_rate, packed);154 } 155 156 int audio_pcm_stop_record(async_exch_t *exch , unsigned id)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) 157 156 { 158 157 if (!exch) 159 158 return EINVAL; 160 return async_req_ 2_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),161 IPC_M_AUDIO_PCM_STOP_RECORD , id);159 return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), 160 IPC_M_AUDIO_PCM_STOP_RECORD); 162 161 } 163 162 … … 233 232 void *buffer = NULL; 234 233 size_t size = DEV_IPC_GET_ARG1(*call); 235 unsigned id = 0; 236 int ret = pcm_iface->get_buffer(fun, &buffer, &size, &id); 237 async_answer_2(callid, ret, size, id); 234 int ret = pcm_iface->get_buffer(fun, &buffer, &size); 235 async_answer_1(callid, ret, size); 238 236 if (ret != EOK || size == 0) 239 237 return; … … 246 244 if (!async_share_in_receive(&share_id, &share_size)) { 247 245 ddf_msg(LVL_DEBUG, "Failed to share pcm buffer."); 248 pcm_iface->release_buffer(fun , id);246 pcm_iface->release_buffer(fun); 249 247 async_answer_0(share_id, EPARTY); 250 248 return; … … 254 252 if (share_size != size) { 255 253 ddf_msg(LVL_DEBUG, "Incorrect pcm buffer size requested."); 256 pcm_iface->release_buffer(fun , id);254 pcm_iface->release_buffer(fun); 257 255 async_answer_0(share_id, ELIMIT); 258 256 return; … … 264 262 if (ret != EOK) { 265 263 ddf_msg(LVL_DEBUG, "Failed to share buffer."); 266 pcm_iface->release_buffer(fun , id);264 pcm_iface->release_buffer(fun); 267 265 return; 268 266 } … … 277 275 if (sess == NULL) { 278 276 ddf_msg(LVL_DEBUG, "Failed to create event callback"); 279 pcm_iface->release_buffer(fun , id);277 pcm_iface->release_buffer(fun); 280 278 async_answer_0(callid, EAGAIN); 281 279 return; 282 280 } 283 ret = pcm_iface->set_event_session(fun, id,sess);281 ret = pcm_iface->set_event_session(fun, sess); 284 282 if (ret != EOK) { 285 283 ddf_msg(LVL_DEBUG, "Failed to set event callback."); 286 pcm_iface->release_buffer(fun , id);284 pcm_iface->release_buffer(fun); 287 285 async_answer_0(callid, ret); 288 286 return; … … 298 296 const audio_pcm_iface_t *pcm_iface = iface; 299 297 300 const unsigned id = DEV_IPC_GET_ARG1(*call);301 298 const int ret = pcm_iface->release_buffer ? 302 pcm_iface->release_buffer(fun , id) : ENOTSUP;299 pcm_iface->release_buffer(fun) : ENOTSUP; 303 300 async_answer_0(callid, ret); 304 301 } … … 309 306 const audio_pcm_iface_t *pcm_iface = iface; 310 307 311 const unsigned id = DEV_IPC_GET_ARG1(*call); 312 const unsigned rate = DEV_IPC_GET_ARG2(*call); 313 const unsigned parts = (DEV_IPC_GET_ARG3(*call) >> 24) & UINT8_MAX; 314 const unsigned channels = (DEV_IPC_GET_ARG3(*call) >> 16) & UINT8_MAX; 315 const pcm_sample_format_t format =DEV_IPC_GET_ARG3(*call) & UINT16_MAX; 308 const unsigned rate = DEV_IPC_GET_ARG1(*call); 309 const unsigned parts = (DEV_IPC_GET_ARG2(*call) >> 24) & UINT8_MAX; 310 const unsigned channels = (DEV_IPC_GET_ARG2(*call) >> 16) & UINT8_MAX; 311 const pcm_sample_format_t format = DEV_IPC_GET_ARG2(*call) & UINT16_MAX; 316 312 317 313 const int ret = pcm_iface->start_playback 318 ? pcm_iface->start_playback(fun, id,parts, channels, rate, format)314 ? pcm_iface->start_playback(fun, parts, channels, rate, format) 319 315 : ENOTSUP; 320 316 async_answer_0(callid, ret); … … 326 322 const audio_pcm_iface_t *pcm_iface = iface; 327 323 328 const unsigned id = DEV_IPC_GET_ARG1(*call);329 324 const int ret = pcm_iface->stop_playback ? 330 pcm_iface->stop_playback(fun , id) : ENOTSUP;325 pcm_iface->stop_playback(fun) : ENOTSUP; 331 326 async_answer_0(callid, ret); 332 327 } … … 337 332 const audio_pcm_iface_t *pcm_iface = iface; 338 333 339 const unsigned id = DEV_IPC_GET_ARG1(*call); 340 const unsigned rate = DEV_IPC_GET_ARG2(*call); 341 const unsigned parts = (DEV_IPC_GET_ARG3(*call) >> 24) & UINT8_MAX; 342 const unsigned channels = (DEV_IPC_GET_ARG3(*call) >> 16) & UINT8_MAX; 343 const pcm_sample_format_t format =DEV_IPC_GET_ARG3(*call) & UINT16_MAX; 334 const unsigned rate = DEV_IPC_GET_ARG1(*call); 335 const unsigned parts = (DEV_IPC_GET_ARG2(*call) >> 24) & UINT8_MAX; 336 const unsigned channels = (DEV_IPC_GET_ARG2(*call) >> 16) & UINT8_MAX; 337 const pcm_sample_format_t format = DEV_IPC_GET_ARG2(*call) & UINT16_MAX; 344 338 345 339 const int ret = pcm_iface->start_record 346 ? pcm_iface->start_record(fun, id,parts, channels, rate, format)340 ? pcm_iface->start_record(fun, parts, channels, rate, format) 347 341 : ENOTSUP; 348 342 async_answer_0(callid, ret); … … 354 348 const audio_pcm_iface_t *pcm_iface = iface; 355 349 356 const unsigned id = DEV_IPC_GET_ARG1(*call);357 350 const int ret = pcm_iface->stop_record ? 358 pcm_iface->stop_record(fun , id) : ENOTSUP;351 pcm_iface->stop_record(fun) : ENOTSUP; 359 352 async_answer_0(callid, ret); 360 353 }
Note:
See TracChangeset
for help on using the changeset viewer.