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; }
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; }