Changeset 1240bb9 in mainline for uspace/drv/audio/sb16/dsp.c
- Timestamp:
- 2012-07-12T18:20:45Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d01e635
- Parents:
- 992ef56
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/audio/sb16/dsp.c
r992ef56 r1240bb9 33 33 */ 34 34 35 #include <bool.h> 35 36 #include <devman.h> 36 37 #include <device/hw_res.h> … … 38 39 #include <libarch/barrier.h> 39 40 #include <str_error.h> 40 #include < bool.h>41 #include <audio_pcm_iface.h> 41 42 42 43 #include "dma.h" … … 162 163 dsp->event_exchange = NULL; 163 164 dsp->sb_dev = dev; 165 dsp->status = DSP_STOPPED; 164 166 sb_dsp_reset(dsp); 165 167 /* "DSP takes about 100 microseconds to initialize itself" */ … … 188 190 assert(dsp); 189 191 if (dsp->event_exchange) { 190 async_msg_0(dsp->event_exchange, IPC_FIRST_USER_METHOD); 192 switch (dsp->status) { 193 case DSP_PLAYBACK: 194 async_msg_0(dsp->event_exchange, 195 PCM_EVENT_PLAYBACK_DONE); 196 break; 197 case DSP_RECORDING: 198 async_msg_0(dsp->event_exchange, 199 PCM_EVENT_RECORDING_DONE); 200 break; 201 default: 202 case DSP_STOPPED: 203 ddf_log_warning("Interrupt while DSP stopped and " 204 "event exchange present. Terminating exchange"); 205 async_exchange_end(dsp->event_exchange); 206 dsp->event_exchange = NULL; 207 } 191 208 } else { 192 209 ddf_log_warning("Interrupt with no event consumer."); … … 316 333 sampling_rate / (dsp->active.samples * channels)); 317 334 318 dsp-> active.playing = true;335 dsp->status = DSP_PLAYBACK; 319 336 320 337 return EOK; … … 326 343 if (id != BUFFER_ID) 327 344 return ENOENT; 345 sb_dsp_write(dsp, DMA_16B_EXIT); 346 ddf_log_debug("Stopping playback on buffer %u.", id); 347 async_msg_0(dsp->event_exchange, PCM_EVENT_PLAYBACK_TERMINATED); 328 348 async_exchange_end(dsp->event_exchange); 329 sb_dsp_write(dsp, DMA_16B_EXIT);349 dsp->event_exchange = NULL; 330 350 return EOK; 331 351 } … … 389 409 "(~1/%u sec)", dsp->active.samples, 390 410 sampling_rate / (dsp->active.samples * channels)); 391 dsp-> active.playing = false;411 dsp->status = DSP_RECORDING; 392 412 393 413 return EOK; … … 399 419 if (id != BUFFER_ID) 400 420 return ENOENT; 421 sb_dsp_write(dsp, DMA_16B_EXIT); 422 ddf_log_debug("Stopping playback on buffer %u.", id); 423 async_msg_0(dsp->event_exchange, PCM_EVENT_RECORDING_TERMINATED); 401 424 async_exchange_end(dsp->event_exchange); 402 sb_dsp_write(dsp, DMA_16B_EXIT);425 dsp->event_exchange = NULL; 403 426 return EOK; 404 427 }
Note:
See TracChangeset
for help on using the changeset viewer.