Changeset 1240bb9 in mainline for uspace/drv/audio/sb16/dsp.c


Ignore:
Timestamp:
2012-07-12T18:20:45Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d01e635
Parents:
992ef56
Message:

Use named audio events.

audio/sb16: dsp uses more detailed status (not just playing/not-playing).
app/drec: Fix parameter order in.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/audio/sb16/dsp.c

    r992ef56 r1240bb9  
    3333 */
    3434
     35#include <bool.h>
    3536#include <devman.h>
    3637#include <device/hw_res.h>
     
    3839#include <libarch/barrier.h>
    3940#include <str_error.h>
    40 #include <bool.h>
     41#include <audio_pcm_iface.h>
    4142
    4243#include "dma.h"
     
    162163        dsp->event_exchange = NULL;
    163164        dsp->sb_dev = dev;
     165        dsp->status = DSP_STOPPED;
    164166        sb_dsp_reset(dsp);
    165167        /* "DSP takes about 100 microseconds to initialize itself" */
     
    188190        assert(dsp);
    189191        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                }
    191208        } else {
    192209                ddf_log_warning("Interrupt with no event consumer.");
     
    316333            sampling_rate / (dsp->active.samples * channels));
    317334
    318         dsp->active.playing = true;
     335        dsp->status = DSP_PLAYBACK;
    319336
    320337        return EOK;
     
    326343        if (id != BUFFER_ID)
    327344                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);
    328348        async_exchange_end(dsp->event_exchange);
    329         sb_dsp_write(dsp, DMA_16B_EXIT);
     349        dsp->event_exchange = NULL;
    330350        return EOK;
    331351}
     
    389409            "(~1/%u sec)", dsp->active.samples,
    390410            sampling_rate / (dsp->active.samples * channels));
    391         dsp->active.playing = false;
     411        dsp->status = DSP_RECORDING;
    392412
    393413        return EOK;
     
    399419        if (id != BUFFER_ID)
    400420                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);
    401424        async_exchange_end(dsp->event_exchange);
    402         sb_dsp_write(dsp, DMA_16B_EXIT);
     425        dsp->event_exchange = NULL;
    403426        return EOK;
    404427}
Note: See TracChangeset for help on using the changeset viewer.