/*************************************************************************//** *****************************************************************************/ static void nwkRouteSendRouteError(uint16_t src, uint16_t dst, uint8_t multicast) { NwkFrame_t *frame; NwkCommandRouteError_t *command; if (NULL == (frame = nwkFrameAlloc())) { return; } nwkFrameCommandInit(frame); frame->size += sizeof(NwkCommandRouteError_t); frame->tx.confirm = NULL; frame->header.nwkDstAddr = src; command = (NwkCommandRouteError_t *)frame->payload; command->id = NWK_COMMAND_ROUTE_ERROR; command->srcAddr = src; command->dstAddr = dst; command->multicast = multicast; nwkTxFrame(frame); }
/*************************************************************************//** *****************************************************************************/ static bool nwkRouteDiscoverySendRequest(NwkRouteDiscoveryTableEntry_t *entry, uint8_t lq) { NwkFrame_t *req; NwkCommandRouteRequest_t *command; if (NULL == (req = nwkFrameAlloc())) return false; nwkFrameCommandInit(req); req->size += sizeof(NwkCommandRouteRequest_t); req->tx.confirm = NULL; req->header.nwkFcf.linkLocal = 1; req->header.nwkDstAddr = NWK_BROADCAST_ADDR; command = (NwkCommandRouteRequest_t *)req->payload; command->id = NWK_COMMAND_ROUTE_REQUEST; command->srcAddr = entry->srcAddr; command->dstAddr = entry->dstAddr; command->multicast = entry->multicast; command->linkQuality = lq; nwkTxFrame(req); return true; }
/*************************************************************************//** *****************************************************************************/ static void nwkRouteDiscoverySendReply(NwkRouteDiscoveryTableEntry_t *entry, uint8_t flq, uint8_t rlq) { NwkFrame_t *req; NwkCommandRouteReply_t *command; if (NULL == (req = nwkFrameAlloc())) return; nwkFrameCommandInit(req); req->size += sizeof(NwkCommandRouteReply_t); req->tx.confirm = NULL; req->tx.control = NWK_TX_CONTROL_DIRECT_LINK; req->header.nwkDstAddr = entry->senderAddr; command = (NwkCommandRouteReply_t *)req->payload; command->id = NWK_COMMAND_ROUTE_REPLY; command->srcAddr = entry->srcAddr; command->dstAddr = entry->dstAddr; command->multicast = entry->multicast; command->forwardLinkQuality = flq; command->reverseLinkQuality = rlq; nwkTxFrame(req); }
/*************************************************************************//** *****************************************************************************/ static void nwkRxSendAck(NwkFrame_t *frame) { NwkFrame_t *ack; NwkCommandAck_t *command; if (NULL == (ack = nwkFrameAlloc())) return; nwkFrameCommandInit(ack); ack->size += sizeof(NwkCommandAck_t); ack->tx.confirm = NULL; ack->header.nwkFcf.security = frame->header.nwkFcf.security; ack->header.nwkDstAddr = frame->header.nwkSrcAddr; command = (NwkCommandAck_t *)ack->payload; command->id = NWK_COMMAND_ACK; command->control = nwkRxAckControl; command->seq = frame->header.nwkSeq; nwkTxFrame(ack); }