示例#1
0
static void mic_stream_select_cb(uwd_audio_app_h app_ctx,
    uwd_audio_stream_h stream, uwd_audio_stream_alt_h stream_alt,
    juint32_t samp_freq)
{
    app_ctx_h app = (app_ctx_h)app_ctx;
    uwd_audio_format_I_t *fmt;
    jresult_t rc;
    void *buf1, *buf2;

    if (!stream_alt)
    {
        DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: Microphone stream disabled, "
            "xfered=%d\n", app->mic.xfered));
        return;
    }

    fmt = (uwd_audio_format_I_t *)stream_alt->format;

    DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: Microphone stream enabled, "
        "freq %d Hz %dbits %s\n", samp_freq, fmt->bit_resolution,
        fmt->nr_channels == MONO ? "MONO":"STEREO"));

    /* TODO audio data for all settings */
    if (fmt->bit_resolution != 16 || fmt->nr_channels != STEREO ||
        samp_freq != 22050)
    {
        DBG_E(DSLAVE_AUDIO_APP, ("AUDIO_APP: Audio settings not supported\n"));
        return;
    }

    /* TODO configure hardware for selected audio settings */

    app->mic.buf_len = audio_data_size/2;
    app->mic.xfered = 0;

    /* Use double buffering for stable streaming */
    buf1 = &audio_data[0];
    buf2 = &audio_data[app->mic.buf_len];

    rc = uwd_audio_stream_write(app->fd_ctx, stream, buf1, 
        app->mic.buf_len, mic_complete, buf1);
    if (rc)
        goto Error;

    rc = uwd_audio_stream_write(app->fd_ctx, stream, buf2, 
        app->mic.buf_len, mic_complete, buf2);
    if (rc)
        goto Error;

    return;

Error:
    DBG_E(DSLAVE_AUDIO_APP, ("AUDIO_APP: Microphone stream start failed, rc=%d"
        "\n", rc));
}
示例#2
0
文件: ilcore.c 项目: Andrewftv/lbmc
OMX_ERRORTYPE omx_core_comp_wait_command(ilcore_comp_h h, OMX_U32 command, OMX_U32 nData2, long timeout)
{
    omx_event_t *event, cmp_event;
    OMX_ERRORTYPE rc = OMX_ErrorNone;
    ilcore_comp_ctx_t *ctx = (ilcore_comp_ctx_t *)h;

    cmp_event.eEvent = OMX_EventCmdComplete;
    cmp_event.nData1 = command;
    cmp_event.nData2 = nData2;

    while(1)
    {
        event = (omx_event_t *)slist_find_remove(ctx->event_list, find_func_cb, &cmp_event);
        if (event)
        {
            if(event->eEvent == OMX_EventError && event->nData1 == (OMX_U32)OMX_ErrorSameState && event->nData2 == 1)
            {
                DBG_I("Component received event: same state\n");
                rc = OMX_ErrorNone;
            }
            else if(event->eEvent == OMX_EventError)
            {
                rc = (OMX_ERRORTYPE)event->nData1;
                DBG_E("Component received error: %d\n", rc);
            }
            else if(event->eEvent == OMX_EventCmdComplete && event->nData1 == command && event->nData2 == nData2)
            {
                DBG_I("Command  %s completed\n", omx_cmd2str(command));
                rc = OMX_ErrorNone;
            }
            else
            {
                DBG_E("Unknown event: %s\n", omx_event2str(event->eEvent));
                rc = OMX_ErrorMax;
            }
            free(event);

            return rc;
        }

        if (!timeout)
            return OMX_ErrorMax;

        if (msleep_wait(ctx->event_sleep, timeout) == MSLEEP_TIMEOUT)
        {
            DBG_E("Wait event timeout\n");
            return OMX_ErrorMax;
        }
    }

    return OMX_ErrorNone;
}
示例#3
0
static void config_complete(dps_appctx_t appctx,
    dps_param_t result, dps_res_conf_t *printer_cfg)
{
    int i;
    dps_req_conf_t *cfg;
    DECLARE_FNAME("config_complete");
    DBG_X(DSLAVE_DPS_API, ("%s: entered\n", fname));

    if (!result || !printer_cfg)
    {
        DBG_E(DSLAVE_DPS_API, ("%s: failed to parse printer configuration (%d)"
            "\n", fname, result));
        return;
    }

    DBG_I(DSLAVE_DPS_API, ("%s: result=%X\n", fname, result));
    DBG_I(DSLAVE_DPS_API, ("%s: service_available=%X\n", fname,
        printer_cfg->service_available));

    cfg = &printer_cfg->conf;

    DBG_I(DSLAVE_DPS_API, ("%s: version_count=%u\n", fname, cfg->versions_count));
    for(i=0; i<cfg->versions_count; i++)
    {
        DBG_I(DSLAVE_DPS_API, ("%s: version=%d.%d\n", fname,
            cfg->dps_version[i].major,
            cfg->dps_version[i].minor));
    }
    DBG_I(DSLAVE_DPS_API, ("%s: vendor_name=%s\n", fname, cfg->vendor_name));
    DBG_I(DSLAVE_DPS_API, ("%s: ven_spec_ver=%d.%d\n", fname,
        cfg->vendor_specific_version.major,
        cfg->vendor_specific_version.minor));
    DBG_I(DSLAVE_DPS_API, ("%s: product_name=%s\n", fname, cfg->product_name));
    DBG_I(DSLAVE_DPS_API, ("%s: serial_no=%s\n", fname, cfg->serial_no));
}
示例#4
0
文件: ilcore.c 项目: Andrewftv/lbmc
OMX_ERRORTYPE omx_core_comp_wait_event(ilcore_comp_h h, OMX_EVENTTYPE eventType, long timeout)
{
    omx_event_t *event;
    OMX_ERRORTYPE rc = OMX_ErrorNone;
    ilcore_comp_ctx_t *ctx = (ilcore_comp_ctx_t *)h;

    while (1)
    {
        event = (omx_event_t *)slist_find_remove(ctx->event_list, search_event_cb, &eventType);
        if (event)
        {
            if(event->eEvent == OMX_EventError && event->nData1 == (OMX_U32)OMX_ErrorSameState && event->nData2 == 1)
            {
                DBG_I("Component received event: same state\n");
                rc = OMX_ErrorNone;
            }
            else if(event->eEvent == OMX_EventError) 
			{
				rc = (OMX_ERRORTYPE)event->nData1;
                DBG_E("Component received error: %d\n", rc);
			}
            else if(event->eEvent == eventType)
            {
                DBG_I("Got event: '%s', %d events remain in the queue\n", omx_event2str(event->eEvent),
                    slist_get_count(ctx->event_list));
                rc = OMX_ErrorNone;
            }
            else
            {
                DBG_E("Unknown event\n");
                rc = OMX_ErrorMax;
            }
            free(event);

            return rc;
        }

        if (!timeout)
            return OMX_ErrorMax;

        if (msleep_wait(ctx->event_sleep, timeout) == MSLEEP_TIMEOUT)
        {
            DBG_E("Wait event timeout\n");
            return OMX_ErrorMax;
        }
    }

    return OMX_ErrorNone;
}
示例#5
0
static ret_code_t av_codecid2max_type(enum AVCodecID codec_id, OMX_VIDEO_CODINGTYPE *coding_type)
{
    switch (codec_id)
    {
    case AV_CODEC_ID_H264:
        DBG_I("Use codec: H264\n");
        *coding_type = OMX_VIDEO_CodingAVC;
        break;
    case AV_CODEC_ID_MPEG4:
        DBG_I("Use codec: MPEG4\n");
        *coding_type = OMX_VIDEO_CodingMPEG4;
        break;
    case AV_CODEC_ID_MPEG1VIDEO:
    case AV_CODEC_ID_MPEG2VIDEO:
        DBG_I("Use codec: MPEG2\n");
        *coding_type = OMX_VIDEO_CodingMPEG2;
        break;
    case AV_CODEC_ID_H263:
        DBG_I("Use codec: H263\n");
        *coding_type = OMX_VIDEO_CodingMPEG4;
        break;
    case AV_CODEC_ID_VP6:
    case AV_CODEC_ID_VP6F:
    case AV_CODEC_ID_VP6A:
        DBG_I("Use codec: VP6\n");
        *coding_type = OMX_VIDEO_CodingVP6;
        break;
    case AV_CODEC_ID_VP8:
        DBG_I("Use codec: VP8\n");
        *coding_type = OMX_VIDEO_CodingVP8;
        break;
    case AV_CODEC_ID_THEORA:
        DBG_I("Use codec: THEORA\n");
        *coding_type = OMX_VIDEO_CodingTheora;
        break;
    case AV_CODEC_ID_MJPEG:
    case AV_CODEC_ID_MJPEGB:
        DBG_I("Use codec: MJPEG\n");
        *coding_type = OMX_VIDEO_CodingMJPEG;
        break;
    case AV_CODEC_ID_VC1:
    case AV_CODEC_ID_WMV3:
        DBG_I("Use codec: WMV\n");
        *coding_type = OMX_VIDEO_CodingWMV;
        break;
    default:
        DBG_E("Unknown codec ID: %d\n", codec_id);
        *coding_type = OMX_VIDEO_CodingAutoDetect;
        break;
    }

    return L_OK;
}
示例#6
0
static void speaker_stream_select_cb(uwd_audio_app_h app_ctx,
    uwd_audio_stream_h stream, uwd_audio_stream_alt_h stream_alt,
    juint32_t samp_freq)
{
    app_ctx_h app = (app_ctx_h)app_ctx;
    uwd_audio_format_I_t *fmt;
    jresult_t rc;
    void *buf1, *buf2;

    if (!stream_alt)
    {
        DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: Speaker stream disabled, "
            "xfered=%d\n", app->speaker.xfered));
        return;
    }

    fmt = (uwd_audio_format_I_t *)stream_alt->format;

    DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: Speaker stream enabled, freq %d Hz "
        "%dbits %s\n", samp_freq, fmt->bit_resolution,
        fmt->nr_channels == MONO ? "MONO":"STEREO"));

    /* TODO configure hardware for selected audio settings */

    app->speaker.buf_len = SPEAKER_BUFFER_SIZE;
    app->speaker.xfered = 0;

    /* Use double buffering for stable streaming */

    buf1 = &speaker_bufs[0][0];
    buf2 = &speaker_bufs[1][0];

    rc = uwd_audio_stream_read(app->fd_ctx, stream, buf1,
        app->speaker.buf_len, speaker_complete, buf1);
    if (rc)
        goto Error;

    rc = uwd_audio_stream_read(app->fd_ctx, stream, buf2,
        app->speaker.buf_len, speaker_complete, buf2);
    if (rc)
        goto Error;

    return;

Error:
    DBG_E(DSLAVE_AUDIO_APP, ("AUDIO_APP: Speaker stream start failed, rc=%d\n",
        rc));
}
示例#7
0
static void wait_complition(player_ctx_t *ctx)
{
    media_buffer_t *buf;
    OMX_BUFFERHEADERTYPE *hdr;
    OMX_ERRORTYPE err;

    if (ctx->common.stop)
        return; /* Force stop player by user */

    buf = decode_get_free_video_buffer(ctx->common.demux_ctx);
    if (!buf)
    {
        DBG_E("Unable to get free video buffer\n");
        return;
    }
    hdr = (OMX_BUFFERHEADERTYPE *)buf->app_data;
    hdr->pAppPrivate = buf;
    hdr->nOffset = 0;
    hdr->nFilledLen = 0;
    hdr->nTimeStamp = to_omx_time(0);
    hdr->nFlags = OMX_BUFFERFLAG_ENDOFFRAME | OMX_BUFFERFLAG_EOS | OMX_BUFFERFLAG_TIME_UNKNOWN;

    err = OMX_EmptyThisBuffer(ilcore_get_handle(ctx->decoder), hdr);
    if (err != OMX_ErrorNone)
    {
        DBG_E("OMX_EmptyThisBuffer failed. err=0x%08x\n", err);
        return;
    }
    DBG_I("Waiting for end of stream\n");
    while (!ctx->eos)
    {
        usleep(100000);
    }
}
示例#8
0
jresult_t devmon_force_detach(mdev_t dev)
{
    DBG_I(DUTIL_DEVMON, ("DEVMON: Forcing detach for %p [%s]\n",
        dev, j_device_get_nameunit(dev)));
    
    return j_device_detach((jdevice_t)dev);
}
示例#9
0
文件: ilcore.c 项目: Andrewftv/lbmc
ret_code_t ilcore_add_comp_event(ilcore_comp_h h, OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2)
{
    omx_event_t *event;
    ilcore_comp_ctx_t *ctx = (ilcore_comp_ctx_t *)h;

    DBG_I("Add event: '%s' '%s' command: '%s' data: %d\n", ctx->name, omx_event2str(eEvent), omx_cmd2str(nData1),
        nData2);

    event = (omx_event_t *)malloc(sizeof(omx_event_t));
    if (!event)
        return OMX_ErrorInsufficientResources;

    event->eEvent = eEvent;
    event->nData1 = nData1;
    event->nData2 = nData2;

    omx_core_comp_remove(ctx, eEvent, nData1, nData2);
    if (slist_add_tail(ctx->event_list, (list_node_t *)event))
    {
        free(event);
        DBG_E("Function slist_add_tail failed\n");
        return L_FAILED;
}
    msleep_wakeup_broadcast(ctx->event_sleep);

    return L_OK;
}
示例#10
0
/**
 * Function name:  cbw_read_complete
 * Description:    Completion callback, which is called at the completion of a
 *                 command block wrapper (CBW) request (send_csw).
 * Description:    Command block wrapper (CBW) read completion callback.
 *                 Sets the command to status ''in progress''.
 * Parameters: 
 *     @fd: (IN) FD context
 *
 * Return value: Last command status
 * Scope:        Local
 **/
void cbw_read_complete(request_t *request)
{
    fd_storage_t *fd = (fd_storage_t *)request->context;
    request_status_t status = request->status;

    DBG_V(DSLAVE_MS_USB, ("CBW Complete ep %d size %d status %d\n",
        fd->out_pipe->address, request->transfer_size, status));

    /* Request is ready for next transfer */
    request->status = REQUEST_READY;
   
    if (status != REQUEST_COMPLETED)
    {
        /* HSU addition: Error handling */
        if (status != REQUEST_CANCELLED)
        {
            DBG_W(DSLAVE_MS_USB, ("MASS: Error %d on reading data from out pipe.\n", status));
        }
        else
            DBG_I(DSLAVE_MS_USB, ("MASS: %s - failed reading data from out pipe.\n",
                status == REQUEST_CANCELLED ? "Cancelled" : "Error", status));
        /******* End HSU addition **************************/
    }
    else
    {
        DBG_V(DSLAVE_MS_USB, ("MASS: Got packet (%d)\n", 
            request->bytes_transferred));       

        handle_cbw(fd, request->buffer.vaddr, request->bytes_transferred);
    }
}
示例#11
0
/* Disable an endpoint */
static jresult_t dcd_disable_ep(jdevice_t dev, pipe_desc_t *pipe)
{
    td243fc_rev2_softc_t *sc = (td243fc_rev2_softc_t *)j_device_get_softc(dev);
    jint_t ep_n = (jint_t)(pipe->dcd_handle);
    td243fc_rev2_ep_t *ep = NULL;
    jbool_t is_in = FALSE;

    KASSERT(pipe, ("Pipe is NULL\n"));
    KASSERT(pipe->dcd_handle, ("Pipe was not allocated\n"));

    /* HSU Addition */
    ep = &sc->ep[ep_n];
    /* First set value in ep, only then try to ASSERT on ep->pipe */
    KASSERT(ep->pipe, ("Pipe was not enabled\n"));
    /* End of HSU Addition */

    is_in = EP_IS_IN(ep_n);

    DBG_I(DSLAVE_DCD, ("DCD: dcd_disable_ep pipe=%p, buf_size=%d\n", pipe, 
        ep->buf_size));

    WRITE4(TD243FC_EPN_CONFIG_CONTROL_REG(ep_n/2, is_in), 0);

    pipe->status = PIPE_DISABLED;

    td243fc_mem_free(sc, ep->buf_size * 2);

    ep->pipe = NULL;

    return 0;
}
示例#12
0
static jresult_t td243fc_rev2_detach(jdevice_t dev)
{ 
    td243fc_rev2_softc_t *sc = (td243fc_rev2_softc_t *)j_device_get_softc(dev);
    jbus_h bus = j_device_get_bus(dev);

    DBG_I(DSLAVE_DCD, ("DCD: Detaching controller: %s\n", 
        j_device_get_nameunit(dev)));

    /* Cleanup DCD context and unregister DCD */
    if (sc->core_ctx)
        core_unregister_dcd(sc->core_ctx);

    if (sc->irq_res)
        jbus_release_resource(bus, sc->irq_res);

    if (sc->mem_res)
        jbus_release_resource(bus, sc->mem_res);

    if (sc->dma_buf.cookie)
        jdma_free(sc->dma_buf.cookie);

    if (sc->sc_lock)
        jspinlock_uninit(sc->sc_lock);

    DBG_V(DSLAVE_DCD, ("DCD: Controller detached\n"));
    return 0;
}
示例#13
0
void devmon_get_info(mdev_t dev, devmon_info_t *info)
{
    usb_device_descriptor_t *desc;
    void *usbd_device;
 
    DBG_I(DUTIL_DEVMON, ("DEVMON: Info for %p\n", dev));

    j_memset(info, 0, sizeof(devmon_info_t));

    if (!dev)
        return;
    /* HSU addition - CR fix 255791 - 
    j_get_usbd_device() shouldn't be used for devices of type "ehci_local", 
    because it returns a core number rather than a device handle */
    if ((j_device_get_parent((jdevice_t)dev)) == 0)
    {
        return;
    }
    /* End of HSU addition */
    usbd_device = j_get_usbd_device(dev);
    if (!usbd_device)
        return;
    
    desc = &((usbd_device_handle)usbd_device)->ddesc;

    info->dev_class     = desc->bDeviceClass;
    info->subclass      = desc->bDeviceSubClass;
    info->protocol      = desc->bDeviceProtocol;
    info->vendor        = UGETW(desc->idVendor);
    info->product       = UGETW(desc->idProduct);
    info->version       = UGETW(desc->bcdDevice);
    info->name          = j_device_get_nameunit(dev);
    info->desc          = j_device_get_desc(dev);
    info->depth         = ((usbd_device_handle)usbd_device)->depth;
}
示例#14
0
文件: ilcore.c 项目: Andrewftv/lbmc
/* Tunneling */
ret_code_t ilcore_create_tunnel(ilcore_tunnel_h *h, ilcore_comp_h src_comp, uint32_t src_port, ilcore_comp_h dst_comp,
    uint32_t dst_port)
{
    omx_tunnel_t *tunnel;

    DBG_I("%s: src comp %s srs port %d dst comp %s dst port %d\n", __FUNCTION__, ilcore_get_comp_name(src_comp),
        src_port, ilcore_get_comp_name(dst_comp), dst_port);

    tunnel = (omx_tunnel_t *)malloc(sizeof(omx_tunnel_t));
    if (!tunnel)
    {
        DBG_E("Memory allocation failed\n");
        return L_FAILED;
    }

    memset(tunnel, 0, sizeof(omx_tunnel_t));

    tunnel->src_comp = src_comp;
    tunnel->src_port = src_port;
    tunnel->dst_comp = dst_comp;
    tunnel->dst_port = dst_port;

    *h = tunnel;

    return L_OK;
}
示例#15
0
static jresult_t td243fc_rev2_attach(jdevice_t dev)
{                                               
    td243fc_rev2_softc_t *sc = (td243fc_rev2_softc_t *)j_device_get_softc(dev);
    jbus_h bus = j_device_get_bus(dev);
    jresult_t rc;

    DBG_I(DSLAVE_DCD, ("DCD: Attaching controller: %s\n", 
        j_device_get_nameunit(dev)));

    /* initializing device controller data */
    sc->dev = dev;

    /* Due to DMA limitation - it's operating not with transfer size but with 
     * "mega buffers" size we have to define all out requests as 64 bytes
     * alligned for ep0*/
    rc = jdma_alloc(TD243FC_EP0_MAX_PACKET_SIZE, 0, &sc->dma_buf.vaddr, 
        &sc->dma_buf.dma_addr, 0, &sc->dma_buf.cookie);
    KASSERT(!rc, ("Can't alloc dma buffer for EP0 OUT\n"));

    sc->dma_buf.buffer_size = TD243FC_EP0_MAX_PACKET_SIZE;

    sc->mem_res = j_bus_alloc_resource(bus, SYS_RES_MEMORY, 0);
    if (!sc->mem_res)
    {
        DBG_E(DSLAVE_DCD, ("DCD: Error allocating memory resource\n"));
        rc = JEINVAL;
        goto Error;
    }

    sc->irq_res = j_bus_alloc_resource(bus, SYS_RES_IRQ, 0);
    if (!sc->irq_res)
    {
        DBG_E(DSLAVE_DCD, ("DCD: Error allocating interrupt resource\n"));
        rc = JEINVAL;
        goto Error;
    }

    sc->sc_lock = NULL;
    jspinlock_init(&sc->sc_lock);

    dcd_hw_init(sc);

    rc = core_register_dcd(dev, &dcd_ops, &sc->core_ctx);
    if (rc)
    {
        DBG_E(DSLAVE_DCD, ("DCD: register_dcd failed, rc=%d\n", rc));
        goto Error;
    }

    DBG_V(DSLAVE_DCD, ("DCD: TD243 attached, controller revision=%.2x\n",
        BFGET4(TD243FC_FCREV, READ4(TD243FC_HARDWARE_MODE_REG))));

    return 0;

Error:
    td243fc_rev2_detach(dev);

    return rc;
}
示例#16
0
void devmon_handle_attached(mdev_t dev, mdev_t parent)
{
    if (!dev_monitor || !dev || !dev_monitor->attached)
        return;

    DBG_I(DUTIL_DEVMON, ("DEVMON: Handling attach of %p [%s] parent [%p]\n",
        dev, j_device_get_nameunit(dev), parent));

    dev_monitor->attached(dev, parent);
}
示例#17
0
jresult_t devmon_register(devmon_methods_t *methods)
{
    DBG_I(DUTIL_DEVMON, ("DEVMON: Registered monitor %p\n", methods));
    
    if (dev_monitor)
        return JEINVAL;
    
    dev_monitor = methods;
    return 0;
}
示例#18
0
jresult_t devmon_allow_attach(mdev_t dev)
{
    if (!dev_monitor || !dev || !dev_monitor->allow_attach)
        return 0;

    DBG_I(DUTIL_DEVMON, ("DEVMON: Checking if attach allowed for %p [%s]\n",
        dev, j_device_get_nameunit(dev)));

    return dev_monitor->allow_attach(dev);
}
示例#19
0
static int init_sdl(video_player_h h)
{
    player_ctx_t *ctx = (player_ctx_t *)h;

    if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        DBG_E("Unable SDL initialization\n");
        return -1;
    }

    ctx->vp_rect.x = 0;
    ctx->vp_rect.y = 0;
    ctx->vp_rect.w = ctx->width;
    ctx->vp_rect.h = ctx->height;

    control_register_callback(ctx->common.ctrl_ctx, get_event_callback, ctx);

    DBG_I("Create window. size %dx%d\n", ctx->width, ctx->height);
    ctx->window = SDL_CreateWindow("SDL player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ctx->width,
        ctx->height, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL);
    if (!ctx->window)
    {
        DBG_E("Unable create SDL window\n");
        return -1;
    }
    /* Set "best" scale quality */
    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2");

    ctx->renderer = SDL_CreateRenderer(ctx->window, -1, SDL_RENDERER_ACCELERATED);
    if (!ctx->renderer)
    {
        DBG_E("Unable to create renderer\n");
        return -1;
    }
    SDL_SetRenderDrawColor(ctx->renderer, 0, 0, 0, 0xff);

    ctx->texture = SDL_CreateTexture(ctx->renderer, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STREAMING,  ctx->width,
        ctx->height);
    if (!ctx->texture)
    {
        DBG_E("Unable to create texture\n");
        return -1;
    }

    if (decode_setup_video_buffers(ctx->common.demux_ctx, VIDEO_BUFFERS, 1, 80 * 1024) != L_OK)
        return L_FAILED;

    ctx->common.first_pkt = 1;
    msleep_init(&ctx->common.sched);

    decode_start_read(ctx->common.demux_ctx);

    return 0;
}
示例#20
0
/**
 * Function name:  enable
 * Description:    Enables the mass storage function driver.
 * Parameters: 
 *     @context: (IN) FD context
 *
 * Return value: 0 on success, otherwise an error code
 * Scope:        Local
 **/
static jresult_t enable(context_t context)
{
    jresult_t rc = 0;
    jint_t i;
    fd_storage_t *fd = (fd_storage_t *)context;

    if (fd->state == STATE_ENABLED)
    {
        DBG_W(DSLAVE_MS_USB, ("enable: Trying to enable already enabled FD\n"));
        goto Exit;
    }

    for (i = 0; i < SCSI_TRANSFER_BUFFERS; i++)
        ALLOC_MSFD_REQUEST(i);

    /* Get the pipe numbers that the Core assigned to our descriptors */
    DBG_I(DSLAVE_MS_USB, ("FD: Pipe %p is %d.\n",
        &fd->fd_desc->interfaces[0].alt_ifs[0].pipes[0],
        fd->fd_desc->interfaces[0].alt_ifs[0].pipes[0].address));

    fd->out_pipe = &fd->fd_desc->interfaces[0].alt_ifs[0].pipes[0];
    fd->in_pipe  = &fd->fd_desc->interfaces[0].alt_ifs[0].pipes[1];

    rc = scsi_enable(fd->scsi_device);
    if (rc)
        goto Exit;

    rc = post_read(fd, fd->cmd_request, USB_BULK_CB_WRAP_LEN,
        cbw_read_complete, fd);
    if (rc)
    /* HSU addition: CR 159898 */
    {
        DBG_E(DSLAVE_MS_USB, ("Failed to post CBW on enable (%d)\n", rc));
        goto Exit;
    }
    /******* End HSU addition **************************/

    fd->state = STATE_ENABLED;

Exit:
    if (rc)
    {
        for (i = 0; i < SCSI_TRANSFER_BUFFERS; i++)
            FREE_MSFD_REQUEST(i);
    }

    return rc;
}
示例#21
0
文件: ilcore.c 项目: Andrewftv/lbmc
OMX_ERRORTYPE il_event_handler(OMX_HANDLETYPE hComponent, OMX_PTR pAppData, OMX_EVENTTYPE eEvent, 
    OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData)
{
    ilcore_comp_ctx_t *ctx = (ilcore_comp_ctx_t *)pAppData;

    ilcore_add_comp_event(ctx, eEvent, nData1, nData2);

    if (eEvent == OMX_EventBufferFlag && (nData2 & OMX_BUFFERFLAG_EOS))
    {
        DBG_I("EOS event recieved\n");
        if (ctx->eos_cb)
            ctx->eos_cb(ctx->ctx_cb);
    }

    return OMX_ErrorNone;
}
示例#22
0
/* Stop and Disconnect controller */
static void dcd_disable(jdevice_t dev)
{
    td243fc_rev2_softc_t *sc = (td243fc_rev2_softc_t *)j_device_get_softc(dev);
    
    DBG_I(DSLAVE_DCD, ("DCD: dcd_disable\n"));

    CLEAR4(TD243FC_CHIP_INT_ENABLE_REG, TD243FC_INTF);

    td243fc_mem_free(sc, sc->ep[0].buf_size * 2);
    td243fc_mem_free(sc, sc->ep[1].buf_size * 2);

    if (sc->interrupt_h)
    {
        jinterrupt_teardown(sc->irq_res, sc->interrupt_h);
        sc->interrupt_h = NULL;
    }
}
示例#23
0
static void dev_stat_complete(dps_appctx_t appctx, dps_param_t result,
    dps_device_status_t *status)
{
    DECLARE_FNAME("dev_stat_complete");
    DBG_X(DSLAVE_DPS_API, ("%s: entered\n", fname));

    if (!status)
    {
        DBG_E(DSLAVE_DPS_API, ("%s: failed to parse device status (%d)\n",
            fname, result));
        return;
    }

    if (result)
    {
        DBG_I(DSLAVE_DPS_API, ("%s: result: %X\n", fname, result));
    }

    if (app_ctx.dpof_file_id &&
        status->job_end_reason != DPS_DEV_STAT_JOB_NOT_ENDED)
    {
        sicd_store_remove_object(app_ctx.store_id, app_ctx.dpof_file_id);
        app_ctx.dpof_file_id = 0;
        j_memset(&app_ctx.dpof_restart_info, 0, sizeof(dpof_params_t));
        app_ctx.can_restart = 0;
    }

    DBG_I(DSLAVE_DPS_API, ("%s: print service status: %X\n", fname,
        status->print_service_status));
    DBG_I(DSLAVE_DPS_API, ("%s: job end reason: %X\n", fname,
        status->job_end_reason));
    DBG_I(DSLAVE_DPS_API, ("%s: error status: %X\n", fname,
        status->error_status));
    DBG_I(DSLAVE_DPS_API, ("%s: error reason: %X\n", fname,
        status->error_reason));
    DBG_I(DSLAVE_DPS_API, ("%s: disconnect enabled: %X\n", fname,
        status->disconnect_enable));
    DBG_I(DSLAVE_DPS_API, ("%s: capability changed: %X\n", fname,
        status->capability_changed));
    DBG_I(DSLAVE_DPS_API, ("%s: new job OK: %X\n", fname,
        status->new_job_ok));
}
示例#24
0
/* Selector Unit Requests Handling */
static jresult_t selector_unit_cb(uwd_audio_app_h app, uwd_audio_entity_h entity,
    uwd_audio_req_code_t code, juint16_t value, juint16_t len, void *data)
{
    uwd_audio_selector_unit_t *su = (uwd_audio_selector_unit_t *)entity->data;
    juint8_t *selector_cur = (juint8_t *)entity->app_priv;
    juint8_t *selector_req = (juint8_t *)data;

    DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: Selector Unit (%d) request, "
        "code=0x%02x\n", entity->id, code));

    if (len < sizeof(juint8_t))
        return JEINVAL;

    switch (code)
    {
    case UWD_AUDIO_RC_SET_CUR:

        if (*selector_req == 0)
            *selector_req = 1;
        else if (*selector_req > su->nr_in_pins)
            *selector_req = su->nr_in_pins;

        *selector_cur = *selector_req;

        /* TODO change selector */
        return 0;

    case UWD_AUDIO_RC_GET_CUR:
        *selector_req = *selector_cur;
        return 0;
    case UWD_AUDIO_RC_GET_MIN:
    case UWD_AUDIO_RC_GET_RES:
        *selector_req = 1;
        return 0;
    case UWD_AUDIO_RC_GET_MAX:
        *selector_req = su->nr_in_pins;
        return 0;

    default:
        return JENOTSUP;
    }
}
示例#25
0
static void job_stat_complete(dps_appctx_t appctx, dps_param_t result,
    dps_job_status_t *status)
{
    DECLARE_FNAME("job_stat_complete");
    DBG_X(DSLAVE_DPS_API, ("%s: entered\n", fname));

    if (!status)
    {
        DBG_E(DSLAVE_DPS_API, ("%s: failed to parse job status (%d)\n",
            fname, result));
        return;
    }

    if (result)
    {
        DBG_I(DSLAVE_DPS_API, ("%s: result: %X\n", fname, result));
    }

    DBG_I(DSLAVE_DPS_API, ("%s: DPOF: %s\n", fname,
        status->job_is_dpof?"yes":"no"));

    DBG_I(DSLAVE_DPS_API, ("%s: Progress: %u/%u\n", fname,
        status->pages_done, status->total_pages));

    if (status->job_is_dpof)
    {
        j_memcpy(&app_ctx.dpof_restart_info, &status->dpof_params,
            sizeof(dpof_params_t));
        app_ctx.can_restart = 1;
        DBG_I(DSLAVE_DPS_API, ("%s: print PID: %u\n", fname,
            status->dpof_params.prt_pid));
        DBG_I(DSLAVE_DPS_API, ("%s: file: %s\n", fname,
            status->dpof_params.file_path));
        DBG_I(DSLAVE_DPS_API, ("%s: page number: %u\n", fname,
            status->dpof_params.copy_id));
    }
    else
    {        
#ifdef JDEBUG
        DBG_I(DSLAVE_DPS_API, ("%s: Images printed: %u\n", fname,
            status->images_printed));
#endif
    }
}
示例#26
0
jresult_t uwd_audio_app_init(uwd_audio_drv_h fd_ctx, uwd_audio_app_h *app_ctx,
    uwd_audio_config_t **config)
{
    app_ctx_h app;

    DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: uwd_audio_app_init\n"));

    app = (app_ctx_h)jmalloc(sizeof(app_ctx_t), M_ZERO);
    if(!app)
    {
        DBG_E(DSLAVE_AUDIO_APP, ("AUDIO_APP: No memory\n"));
        return JENOMEM;
    }

    app->fd_ctx = fd_ctx;

    *config = &app_config;
    *app_ctx = app;

    return 0;
}
示例#27
0
文件: ilcore.c 项目: Andrewftv/lbmc
ret_code_t ilcore_disable_all_ports(ilcore_comp_h h)
{
    OMX_PORT_PARAM_TYPE ports;
    OMX_ERRORTYPE err;
    int i, j;
    OMX_INDEXTYPE types[] = {OMX_IndexParamAudioInit, OMX_IndexParamVideoInit, OMX_IndexParamImageInit,
        OMX_IndexParamOtherInit};
    ilcore_comp_ctx_t  *ctx = (ilcore_comp_ctx_t *)h;

    ports.nSize = sizeof(OMX_PORT_PARAM_TYPE);
    ports.nVersion.nVersion = OMX_VERSION;

    for (j = 0; j < 4; j++)
    {
        err = OMX_GetParameter(ctx->handle, types[j], &ports);
        if (err != OMX_ErrorNone)
        {
            DBG_E("Get port paraneters failed. err=%d\n");
            return L_FAILED;
        }
        for(i = 0; i < ports.nPorts; i++)
        {
            DBG_I("Disabling port #%d\n", ports.nStartPortNumber + i);
            err = OMX_SendCommand(ctx->handle, OMX_CommandPortDisable, ports.nStartPortNumber + i, NULL);
            if (err != OMX_ErrorNone)
            {
                DBG_E("Port disable failed. err=%d\n");
                return L_FAILED;
            }
            err = omx_core_comp_wait_command(ctx, OMX_CommandPortDisable, ports.nStartPortNumber + i, IL_WAIT_TIMEOUT);
            if (err != OMX_ErrorNone)
            {
                DBG_E("Wait event failed. err=%d\n");
                return L_FAILED;
            }
        }
    }

    return L_OK;
}
示例#28
0
文件: ilcore.c 项目: Andrewftv/lbmc
ret_code_t ilcore_enable_port(ilcore_comp_h h, uint32_t port, int wait)
{
    ilcore_comp_ctx_t  *ctx = (ilcore_comp_ctx_t *)h;
    OMX_PARAM_PORTDEFINITIONTYPE param;
    OMX_ERRORTYPE omx_err;

    DBG_I("%s: enable port %d on comp %s\n", __FUNCTION__, port, ilcore_get_comp_name(h));

    OMX_INIT_STRUCT(param);
    param.nPortIndex = port;

    omx_err = OMX_GetParameter(ctx->handle, OMX_IndexParamPortDefinition, &param);
    if(omx_err != OMX_ErrorNone)
    {
        DBG_E("%s: Error get port %d status on component %s err = 0x%08x\n", __FUNCTION__, port,
            ilcore_get_comp_name(h), omx_err);
        return L_FAILED;
    }

    if(param.bEnabled == OMX_TRUE)
        return L_OK; /* Port already enable */

    omx_err = OMX_SendCommand(ctx->handle, OMX_CommandPortEnable, port, NULL);
    if(omx_err != OMX_ErrorNone)
    {
        DBG_E("%s: Error disable port %d on component %s err = 0x%08x\n", __FUNCTION__, port, ilcore_get_comp_name(h),
            omx_err);
        return L_FAILED;
    }

    if (wait)
    {
        omx_err = omx_core_comp_wait_command(h, OMX_CommandPortEnable, port, 2000);
        if(omx_err != OMX_ErrorNone)
            return L_FAILED;
    }
    return L_OK;
}
示例#29
0
/* Feature Unit Requests Handling */
static jresult_t feature_unit_cb(uwd_audio_app_h app_ctx,
    uwd_audio_entity_h entity, uwd_audio_req_code_t code, juint16_t value,
    juint16_t len, void *data)
{
    juint8_t ch = (juint8_t)value;
    uwd_audio_feature_unit_cs_t cs = (uwd_audio_feature_unit_cs_t)(value >> 8);
    app_feature_unit_t *fu = (app_feature_unit_t *)entity->app_priv;

    DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: Feature Unit (%d) request, code=0x%02x"
        " channel=%d control selector=0x%02x\n", entity->id, code, ch, cs));

    if (ch == UWD_AUDIO_CTRL_ALL_CH)
        return JENOTSUP;

    switch (cs)
    {
    case UWD_AUDIO_FU_MUTE_CONTROL:
        {
            juint8_t *mute = (juint8_t *)data;
            if (len < sizeof(fu[ch].mute.cur))
                return JEINVAL;

            switch (code)
            {
            case UWD_AUDIO_RC_SET_CUR:
                fu[ch].mute.cur = *mute ? 1 : 0;
                /* TODO change HW mute */
                return 0;
            case UWD_AUDIO_RC_GET_CUR:
                *mute = fu[ch].mute.cur;
                return 0;
            case UWD_AUDIO_RC_GET_RES:
                *mute = 0;
                return 0;
            default:
                return JENOTSUP;
            }
        }

    case UWD_AUDIO_FU_VOLUME_CONTROL:
        {
            juint16_t volume;
            if (len < sizeof(volume))
                return JEINVAL;

            switch (code)
            {
            case UWD_AUDIO_RC_SET_CUR:

                volume = ua_le16toh(data);
                if (volume > fu[ch].volume.max || volume < fu[ch].volume.min)
                    return JEINVAL;

                fu[ch].volume.cur = ua_le16toh(data);
                /* TODO change HW volume */
                return 0;

            case UWD_AUDIO_RC_GET_CUR:
                ua_htole16(data, fu[ch].volume.cur);
                return 0;
            case UWD_AUDIO_RC_GET_MIN:
                ua_htole16(data, fu[ch].volume.min);
                return 0;
            case UWD_AUDIO_RC_GET_MAX:
                ua_htole16(data, fu[ch].volume.max);
                return 0;
            case UWD_AUDIO_RC_GET_RES:
                ua_htole16(data, fu[ch].volume.res);
                return 0;

            default:
                return JENOTSUP;
            }
        }

    default:
        return JENOTSUP;
    }
}
示例#30
0
static void uninit(uwd_audio_app_h app_ctx)
{
    DBG_I(DSLAVE_AUDIO_APP, ("AUDIO_APP: uninit\n"));
    jfree(app_ctx);
}