//------------------------------------------------------------------------------ void dllkfilter_setupPreqFilter(tEdrvFilter* pFilter_p, UINT nodeId_p, tEdrvTxBuffer* pBuffer_p, const UINT8* pMacAdrs_p) { // Check parameter validity ASSERT(pFilter_p != NULL); ASSERT(pBuffer_p != NULL); ASSERT(pMacAdrs_p != NULL); OPLK_MEMCPY(&pFilter_p->aFilterValue[0], pMacAdrs_p, 6); ami_setUint48Be(&pFilter_p->aFilterMask[0], C_DLL_MACADDR_MASK); ami_setUint16Be(&pFilter_p->aFilterValue[12], C_DLL_ETHERTYPE_EPL); ami_setUint16Be(&pFilter_p->aFilterMask[12], 0xFFFF); ami_setUint8Be(&pFilter_p->aFilterValue[14], kMsgTypePreq); ami_setUint8Be(&pFilter_p->aFilterMask[14], 0xFF); ami_setUint8Be(&pFilter_p->aFilterValue[15], (UINT8)nodeId_p); ami_setUint8Be(&pFilter_p->aFilterMask[15], 0xFF); ami_setUint8Be(&pFilter_p->aFilterValue[16], C_ADR_MN_DEF_NODE_ID); ami_setUint8Be(&pFilter_p->aFilterMask[16], 0xFF); pFilter_p->pTxBuffer = pBuffer_p; pFilter_p->fEnable = FALSE; }
//------------------------------------------------------------------------------ tOplkError nmtcnu_sendNmtRequestEx(UINT nodeId_p, tNmtCommand nmtCommand_p, void* pNmtCommandData_p, UINT dataSize_p) { tOplkError ret; tFrameInfo nmtRequestFrameInfo; tPlkFrame nmtRequestFrame; ret = kErrorOk; // build frame OPLK_MEMSET(&nmtRequestFrame.aDstMac[0], 0x00, sizeof(nmtRequestFrame.aDstMac)); // set by DLL OPLK_MEMSET(&nmtRequestFrame.aSrcMac[0], 0x00, sizeof(nmtRequestFrame.aSrcMac)); // set by DLL ami_setUint16Be(&nmtRequestFrame.etherType, C_DLL_ETHERTYPE_EPL); ami_setUint8Le(&nmtRequestFrame.dstNodeId, (BYTE)C_ADR_MN_DEF_NODE_ID); // node id of the MN ami_setUint8Le(&nmtRequestFrame.messageType, (BYTE)kMsgTypeAsnd); ami_setUint8Le(&nmtRequestFrame.data.asnd.serviceId, (BYTE)kDllAsndNmtRequest); ami_setUint8Le(&nmtRequestFrame.data.asnd.payload.nmtRequestService.nmtCommandId, (BYTE)nmtCommand_p); ami_setUint8Le(&nmtRequestFrame.data.asnd.payload.nmtRequestService.targetNodeId, (BYTE)nodeId_p); // target for the nmt command OPLK_MEMSET(&nmtRequestFrame.data.asnd.payload.nmtRequestService.aNmtCommandData[0], 0x00, sizeof(nmtRequestFrame.data.asnd.payload.nmtRequestService.aNmtCommandData)); if (pNmtCommandData_p && (dataSize_p != 0)) { OPLK_MEMCPY(&nmtRequestFrame.data.asnd.payload.nmtRequestService.aNmtCommandData[0], pNmtCommandData_p, min(dataSize_p, sizeof(nmtRequestFrame.data.asnd.payload.nmtRequestService.aNmtCommandData))); } // build info-structure nmtRequestFrameInfo.pFrame = &nmtRequestFrame; nmtRequestFrameInfo.frameSize = C_DLL_MINSIZE_NMTREQ; // sizeof(nmtRequestFrame); // send NMT request ret = dllucal_sendAsyncFrame(&nmtRequestFrameInfo, kDllAsyncReqPrioNmt); return ret; }