Пример #1
0
//------------------------------------------------------------------------------
static tOplkError processSync(tNmtState nmtState_p)
{
    tOplkError      ret = kErrorReject;
    BOOL            fReadyFlag = FALSE;

    if (dllkInstance_g.pfnCbSync != NULL)
    {
        ret = dllkInstance_g.pfnCbSync();
        if (ret == kErrorReject)
            fReadyFlag = FALSE;
        else if (ret == kErrorOk)
            fReadyFlag = TRUE;
        else
            return ret;
    }

    // do cycle preparation
#if defined(CONFIG_INCLUDE_NMT_MN)
    if (NMT_IF_ACTIVE_MN(nmtState_p))
    {   // local node is MN
        ret = processSyncMn(nmtState_p, fReadyFlag);
    }
    else
    {   // local node is CN
        ret = processSyncCn(nmtState_p, fReadyFlag);
    }
#else
    // local can only be CN as MN part is not compiled in
    ret = processSyncCn(nmtState_p, fReadyFlag);
#endif

    return ret;
}
Пример #2
0
//------------------------------------------------------------------------------
static tOplkError handleInvalidFormat(tEvent* pEvent_p)
{
    tOplkError              ret;
    tEventDllError*         pErrorHandlerEvent = (tEventDllError*)pEvent_p->pEventArg;

    // check if invalid format error occurred (only direct reaction)
    if ((pErrorHandlerEvent->dllErrorEvents & DLL_ERR_INVALID_FORMAT) == 0)
        return kErrorOk;

    ret = generateHistoryEntryNodeId(E_DLL_INVALID_FORMAT,
                                     pEvent_p->netTime,
                                     pErrorHandlerEvent->nodeId);
    if (ret != kErrorOk)
        return ret;

    BENCHMARK_MOD_02_TOGGLE(7);

#ifdef CONFIG_INCLUDE_NMT_MN
    if (NMT_IF_ACTIVE_MN(pErrorHandlerEvent->nmtState))
    {   // MN is active
        if (pErrorHandlerEvent->nodeId != 0)
        {
            tDllNodeOpParam     NodeOpParam;

            NodeOpParam.opNodeType = kDllNodeOpTypeIsochronous;
            NodeOpParam.nodeId = pErrorHandlerEvent->nodeId;
            // remove node from isochronous phase
            dllk_deleteNode(&NodeOpParam);

            // inform NmtMnu module about state change, which shall send
            // NMT command ResetNode to this CN
            postHeartbeatEvent(pErrorHandlerEvent->nodeId,
                               kNmtCsNotActive,
                               E_DLL_INVALID_FORMAT);
        }
        // $$$ and else should lead to InternComError
    }
    else
    {
        postNmtEvent(kNmtEventInternComError);
    }
#else
    // CN is active
    postNmtEvent(kNmtEventInternComError);
#endif

    return kErrorOk;
}
Пример #3
0
//------------------------------------------------------------------------------
static tOplkError processCycleFinish(tNmtState nmtState_p)
{
    tOplkError      ret = kErrorOk;

    ret = dllkframe_updateFrameAsyncRes(nmtState_p);
    if (ret != kErrorOk)
        goto Exit;

    ret = errhndk_decrementCounters(NMT_IF_ACTIVE_MN(nmtState_p));

#if defined(CONFIG_INCLUDE_NMT_MN)
    if (dllkInstance_g.dllState > kDllMsNonCyclic)
    {
        if (dllkInstance_g.dllConfigParam.syncNodeId == C_ADR_SYNC_ON_SOC)
        {   // cyclic state is active, so preprocessing is necessary
            ret = processSync(nmtState_p);
        }
    }
#endif
Exit:
    return ret;
}