//------------------------------------------------------------------------------ tOplkError sdoasnd_sendData(tSdoConHdl sdoConHandle_p, tPlkFrame* pSrcData_p, size_t dataSize_p) { tOplkError ret; UINT array; tFrameInfo frameInfo; array = ((UINT)sdoConHandle_p & ~SDO_ASY_HANDLE_MASK); if (array > CONFIG_SDO_MAX_CONNECTION_ASND) return kErrorSdoAsndInvalidHandle; // fill Asnd header // own node id not needed -> filled by DLL ami_setUint8Le(&pSrcData_p->messageType, (UINT8)kMsgTypeAsnd); // ASnd == 0x06 ami_setUint8Le(&pSrcData_p->dstNodeId, (UINT8)sdoAsndInstance_l.aSdoAsndConnection[array]); ami_setUint8Le(&pSrcData_p->srcNodeId, 0x00); // set source-nodeid (filled by DLL 0) // calc size (add Ethernet and ASnd header size) dataSize_p += (size_t)((UINT8*)&pSrcData_p->data.asnd.payload.sdoSequenceFrame - (UINT8*)pSrcData_p); // send function of DLL frameInfo.frameSize = (UINT)dataSize_p; frameInfo.frame.pBuffer = pSrcData_p; ret = dllucal_sendAsyncFrame(&frameInfo, kDllAsyncReqPrioGeneric); return ret; }
//------------------------------------------------------------------------------ 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; }