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