//------------------------------------------------------------------------------ void dllkfilter_setupFilters(void) { OPLK_MEMSET(dllkInstance_g.aFilter, 0, sizeof(dllkInstance_g.aFilter)); setupAsndFilter(&dllkInstance_g.aFilter[DLLK_FILTER_ASND]); setupSocFilter(&dllkInstance_g.aFilter[DLLK_FILTER_SOC]); setupSoaFilter(&dllkInstance_g.aFilter[DLLK_FILTER_SOA]); setupSoaIdentReqFilter(&dllkInstance_g.aFilter[DLLK_FILTER_SOA_IDREQ], dllkInstance_g.dllConfigParam.nodeId, &dllkInstance_g.pTxBuffer[DLLK_TXFRAME_IDENTRES]); setupSoaStatusReqFilter(&dllkInstance_g.aFilter[DLLK_FILTER_SOA_STATREQ], dllkInstance_g.dllConfigParam.nodeId, &dllkInstance_g.pTxBuffer[DLLK_TXFRAME_STATUSRES]); setupSoaNmtReqFilter(&dllkInstance_g.aFilter[DLLK_FILTER_SOA_NMTREQ], dllkInstance_g.dllConfigParam.nodeId, &dllkInstance_g.pTxBuffer[DLLK_TXFRAME_NMTREQ]); #if (CONFIG_DLL_PRES_CHAINING_CN != FALSE) setupSoaSyncReqFilter(&dllkInstance_g.aFilter[DLLK_FILTER_SOA_SYNCREQ], dllkInstance_g.dllConfigParam.nodeId, &dllkInstance_g.pTxBuffer[DLLK_TXFRAME_SYNCRES]); #endif setupSoaUnspecReqFilter(&dllkInstance_g.aFilter[DLLK_FILTER_SOA_NONPLK], dllkInstance_g.dllConfigParam.nodeId, &dllkInstance_g.pTxBuffer[DLLK_TXFRAME_NONPLK]); #if defined(CONFIG_INCLUDE_VETH) setupVethUnicast(&dllkInstance_g.aFilter[DLLK_FILTER_VETH_UNICAST], edrv_getMacAddr(), TRUE); setupVethBroadcast(&dllkInstance_g.aFilter[DLLK_FILTER_VETH_BROADCAST], TRUE); #endif }
//------------------------------------------------------------------------------ static tOplkError initStack(void) { tOplkError ret; tEdrvInitParam edrvInitParam; ctrlkcal_readInitParam(&instance_l.initParam); if ((ret = eventk_init()) != kErrorOk) return ret; if ((ret = nmtk_init()) != kErrorOk) return ret; //jba able to work without hresk? #if CONFIG_TIMER_USE_HIGHRES != FALSE if ((ret = hrestimer_init()) != kErrorOk) return ret; #endif #if (CONFIG_DLL_PROCESS_SYNC == DLL_PROCESS_SYNC_ON_TIMER) if ((ret = synctimer_init()) != kErrorOk) return ret; #endif ret = dllk_init(); if (ret != kErrorOk) return ret; // initialize Edrv OPLK_MEMCPY(edrvInitParam.aMacAddr, instance_l.initParam.aMacAddress, 6); edrvInitParam.hwParam.devNum = instance_l.initParam.ethDevNumber; edrvInitParam.hwParam.pDevName = instance_l.initParam.szEthDevName; edrvInitParam.pfnRxHandler = dllkframe_processFrameReceived; if ((ret = edrv_init(&edrvInitParam)) != kErrorOk) return ret; // copy local MAC address from Ethernet driver back to init parameters // because Ethernet driver may have read it from controller EEPROM OPLK_MEMCPY(instance_l.initParam.aMacAddress, edrv_getMacAddr(), 6); ctrlkcal_storeInitParam(&instance_l.initParam); // initialize Edrvcyclic #if defined(CONFIG_INCLUDE_NMT_MN) if ((ret = edrvcyclic_init()) != kErrorOk) return ret; if ((ret = edrvcyclic_regErrorHandler(dllk_cbCyclicError)) != kErrorOk) return ret; #endif if ((ret = timesynck_init()) != kErrorOk) return ret; dllk_regSyncHandler(timesynck_sendSyncEvent); // initialize dllkcal module if ((ret = dllkcal_init()) != kErrorOk) return ret; #if defined(CONFIG_INCLUDE_PDO) if ((ret = pdok_init()) != kErrorOk) return ret; #endif #if defined(CONFIG_INCLUDE_LEDK) ret = ledk_init(); #endif // initialize Virtual Ethernet Driver #if defined(CONFIG_INCLUDE_VETH) if ((ret = veth_init(instance_l.initParam.aMacAddress)) != kErrorOk) return ret; #endif ret = errhndk_init(); return ret; }
//------------------------------------------------------------------------------ static tOplkError setupLocalNodeCn(void) { tOplkError ret = kErrorOk; #if (CONFIG_DLL_PRES_FILTER_COUNT >= 0) UINT handle; #if (NMT_MAX_NODE_ID > 0) UINT index; tDllkNodeInfo* pIntNodeInfo; #endif #endif dllkfilter_setupPreqFilter(&dllkInstance_g.aFilter[DLLK_FILTER_PREQ], dllkInstance_g.dllConfigParam.nodeId, &dllkInstance_g.pTxBuffer[DLLK_TXFRAME_PRES], edrv_getMacAddr()); // setup PRes filter #if CONFIG_DLL_PRES_FILTER_COUNT < 0 if (dllkInstance_g.usedPresFilterCount > 0) dllkfilter_setupPresFilter(&dllkInstance_g.aFilter[DLLK_FILTER_PRES], TRUE); else dllkfilter_setupPresFilter(&dllkInstance_g.aFilter[DLLK_FILTER_PRES], FALSE); #else for (handle = DLLK_FILTER_PRES; handle < DLLK_FILTER_COUNT; handle++) { dllkfilter_setupPresFilter(&dllkInstance_g.aFilter[handle], FALSE); ami_setUint8Be(&dllkInstance_g.aFilter[handle].aFilterMask[16], 0xFF); } handle = DLLK_FILTER_PRES; #if NMT_MAX_NODE_ID > 0 for (index = 0, pIntNodeInfo = &dllkInstance_g.aNodeInfo[0]; index < tabentries (dllkInstance_g.aNodeInfo); index++, pIntNodeInfo++) { if ((pIntNodeInfo->presFilterFlags & (DLLK_FILTER_FLAG_PDO | DLLK_FILTER_FLAG_HB)) != 0) { ami_setUint8Be(&dllkInstance_g.aFilter[handle].aFilterValue[16], pIntNodeInfo->nodeId); dllkInstance_g.aFilter[handle].fEnable = TRUE; handle++; if (handle >= DLLK_FILTER_COUNT) break; } } #endif #endif #if (CONFIG_DLL_PROCESS_SYNC == DLL_PROCESS_SYNC_ON_TIMER) ret = synctimer_setCycleLen(dllkInstance_g.dllConfigParam.cycleLen); if (ret != kErrorOk) return ret; ret = synctimer_setLossOfSyncTolerance(dllkInstance_g.dllConfigParam.lossOfFrameTolerance); if (ret != kErrorOk) return ret; #endif #if CONFIG_DLL_PRES_CHAINING_CN != FALSE dllkInstance_g.fPrcEnabled = FALSE; dllkInstance_g.syncReqPrevNodeId = 0; #endif return ret; }