Пример #1
0
static tEplKernel EplApiProcessImagePostCopyJob(
    tEplApiProcessImageCopyJobInt* pCopyJob_p)
{
tEplKernel      Ret = kEplSuccessful;
tShbError       ShbError;
tShbInstance    ShbInstance;

    if (pCopyJob_p == NULL)
    {
        Ret = kEplApiInvalidParam;
        goto Exit;
    }

    if (pCopyJob_p->m_CopyJob.m_uiPriority == 0)
    {
        ShbInstance = EplApiProcessImageInstance_g.m_ShbInstanceJobQueueHi;
    }
    else
    {
        ShbInstance = EplApiProcessImageInstance_g.m_ShbInstanceJobQueueLo;
    }

    ShbError = ShbCirWriteDataBlock(ShbInstance, pCopyJob_p, sizeof (*pCopyJob_p));
    if (ShbError != kShbOk)
    {
        Ret = kEplApiPIJobQueueFull;
        goto Exit;
    }

Exit:
    return Ret;
}
static tEplKernel EplApiProcessImagePostCopyJob(
    tEplApiProcessImageCopyJobInt* pCopyJob_p)
{
    tEplKernel      Ret = kEplSuccessful;
    tShbError       ShbError;
    tShbInstance    ShbInstance;

    if (pCopyJob_p == NULL)
    {
        Ret = kEplApiInvalidParam;
        goto Exit;
    }

    if (pCopyJob_p->m_CopyJob.m_uiPriority == 0)
    {
        ShbInstance = EplApiProcessImageInstance_g.m_ShbInstanceJobQueueHi;
    }
    else
    {
        ShbInstance = EplApiProcessImageInstance_g.m_ShbInstanceJobQueueLo;
    }

    ShbError = ShbCirWriteDataBlock(ShbInstance, pCopyJob_p, sizeof (*pCopyJob_p));
    if (ShbError != kShbOk)
    {
#if (TARGET_SYSTEM == _LINUX_) && defined(__KERNEL__)
        if (pCopyJob_p->m_CopyJob.m_fNonBlocking == FALSE)
        {   // there won't be any queue reader, so decrement ref counter
            kref_put(&pCopyJob_p->m_Event.m_pCompletion->m_Kref, EplApiProcessImageReleaseCompletion);
        }
#endif
        Ret = kEplApiPIJobQueueFull;
        goto Exit;
    }

Exit:
    return Ret;
}
Пример #3
0
tEplKernel EplDllkCalAsyncSend(tEplFrameInfo * pFrameInfo_p, tEplDllAsyncReqPriority Priority_p)
{
tEplKernel  Ret = kEplSuccessful;
tEplEvent       Event;
#if EPL_USE_SHAREDBUFF != FALSE
tShbError   ShbError;

    switch (Priority_p)
    {
        case kEplDllAsyncReqPrioNmt:    // NMT request priority
            ShbError = ShbCirWriteDataBlock (EplDllkCalInstance_g.m_ShbInstanceTxNmt, pFrameInfo_p->m_pFrame, pFrameInfo_p->m_uiFrameSize);
            // returns kShbOk, kShbExceedDataSizeLimit, kShbBufferFull, kShbInvalidArg
            break;

        default:    // generic priority
            ShbError = ShbCirWriteDataBlock (EplDllkCalInstance_g.m_ShbInstanceTxGen, pFrameInfo_p->m_pFrame, pFrameInfo_p->m_uiFrameSize);
            // returns kShbOk, kShbExceedDataSizeLimit, kShbBufferFull, kShbInvalidArg
            break;

    }

    // error handling
    switch (ShbError)
    {
        case kShbOk:
            break;

        case kShbExceedDataSizeLimit:
            Ret = kEplDllAsyncTxBufferFull;
            break;

        case kShbBufferFull:
            Ret = kEplDllAsyncTxBufferFull;
            break;

        case kShbInvalidArg:
        default:
            Ret = kEplNoResource;
            break;
    }

#else

    switch (Priority_p)
    {
        case kEplDllAsyncReqPrioNmt:    // NMT request priority
            if (EplDllkCalInstance_g.m_uiFrameSizeNmt == 0)
            {
                EPL_MEMCPY(EplDllkCalInstance_g.m_abFrameNmt, pFrameInfo_p->m_pFrame, pFrameInfo_p->m_uiFrameSize);
                EplDllkCalInstance_g.m_uiFrameSizeNmt = pFrameInfo_p->m_uiFrameSize;
            }
            else
            {
                Ret = kEplDllAsyncTxBufferFull;
                goto Exit;
            }
            break;

        default:    // generic priority
            if (EplDllkCalInstance_g.m_uiFrameSizeGen == 0)
            {
                EPL_MEMCPY(EplDllkCalInstance_g.m_abFrameGen, pFrameInfo_p->m_pFrame, pFrameInfo_p->m_uiFrameSize);
                EplDllkCalInstance_g.m_uiFrameSizeGen = pFrameInfo_p->m_uiFrameSize;
            }
            else
            {
                Ret = kEplDllAsyncTxBufferFull;
                goto Exit;
            }
            break;
    }

#endif

    // post event to DLL
    Event.m_EventSink = kEplEventSinkDllk;
    Event.m_EventType = kEplEventTypeDllkFillTx;
    EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
    Event.m_pArg = &Priority_p;
    Event.m_uiSize = sizeof(Priority_p);
    Ret = EplEventkPost(&Event);

#if EPL_USE_SHAREDBUFF == FALSE
Exit:
#endif

    return Ret;
}