//------------------------------------------------------------------------------ static tOplkError processStartReducedCycle(void) { tOplkError ret = kErrorOk; // start the reduced cycle by programming the cycle timer // it is issued by NMT MN module, when PreOp1 is entered // clear the asynchronous queues ret = dllkcal_clearAsyncQueues(); // reset cycle counter (every time a SoA is triggered in PreOp1 the counter is incremented // and when it reaches C_DLL_PREOP1_START_CYCLES the SoA may contain invitations) dllkInstance_g.cycleCount = 0; // remove any CN from isochronous phase while (dllkInstance_g.pFirstNodeInfo != NULL) { ret = dllknode_deleteNodeIsochronous(dllkInstance_g.pFirstNodeInfo); if (ret != kErrorOk) goto Exit; } while (dllkInstance_g.pFirstPrcNodeInfo != NULL) { ret = dllknode_deleteNodeIsochronous(dllkInstance_g.pFirstPrcNodeInfo); if (ret != kErrorOk) goto Exit; } // change state to NonCyclic, // hence changeState() will not ignore the next call dllkInstance_g.dllState = kDllMsNonCyclic; #if CONFIG_TIMER_USE_HIGHRES != FALSE if (dllkInstance_g.dllConfigParam.asyncSlotTimeout != 0) { ret = hrestimer_modifyTimer(&dllkInstance_g.timerHdlCycle, dllkInstance_g.dllConfigParam.asyncSlotTimeout, dllkframe_cbMnTimerCycle, 0L, FALSE); } #endif dllkInstance_g.curLastSoaReq = 0; dllkInstance_g.curTxBufferOffsetCycle = 0; Exit: return ret; }
//------------------------------------------------------------------------------ tOplkError dllk_deleteNode(tDllNodeOpParam* pNodeOpParam_p) { tOplkError ret = kErrorOk; tDllkNodeInfo* pIntNodeInfo; tNmtState nmtState; BOOL fUpdateEdrv = FALSE; UINT index; nmtState = dllkInstance_g.nmtState; if (pNodeOpParam_p->nodeId == C_ADR_BROADCAST) { switch (pNodeOpParam_p->opNodeType) { case kDllNodeOpTypeFilterPdo: case kDllNodeOpTypeFilterHeartbeat: if (NMT_IF_CN_OR_RMN(nmtState)) fUpdateEdrv = TRUE; for (index = 0, pIntNodeInfo = &dllkInstance_g.aNodeInfo[0]; index < tabentries(dllkInstance_g.aNodeInfo); index++, pIntNodeInfo++) { ret = dllknode_deleteNodeFilter(pIntNodeInfo, pNodeOpParam_p->opNodeType, fUpdateEdrv); } break; default: ret = kErrorDllInvalidParam; break; } return ret; } pIntNodeInfo = dllknode_getNodeInfo(pNodeOpParam_p->nodeId); if (pIntNodeInfo == NULL) { // no node info structure available return kErrorDllNoNodeInfo; } DLLK_DBG_POST_TRACE_VALUE(kEventTypeDllkDelNode, pNodeOpParam_p->nodeId, 0); switch (pNodeOpParam_p->opNodeType) { #if defined(CONFIG_INCLUDE_NMT_MN) case kDllNodeOpTypeIsochronous: ret = dllknode_deleteNodeIsochronous(pIntNodeInfo); break; case kDllNodeOpTypeSoftDelete: pIntNodeInfo->fSoftDelete = TRUE; break; #endif case kDllNodeOpTypeFilterPdo: case kDllNodeOpTypeFilterHeartbeat: if (NMT_IF_CN_OR_RMN(nmtState)) fUpdateEdrv = TRUE; ret = dllknode_deleteNodeFilter(pIntNodeInfo, pNodeOpParam_p->opNodeType, fUpdateEdrv); break; default: ret = kErrorDllInvalidParam; break; } return ret; }