/*************************************************************************//** *****************************************************************************/ void nwkRoutePrepareTx(NwkFrame_t *frame) { NwkFrameHeader_t *header = &frame->header; if (NWK_BROADCAST_ADDR == header->nwkDstAddr) { header->macDstAddr = NWK_BROADCAST_ADDR; } else if (header->nwkFcf.linkLocal) { header->macDstAddr = header->nwkDstAddr; } #ifdef NWK_ENABLE_MULTICAST else if (header->nwkFcf.multicast && NWK_GroupIsMember(header->nwkDstAddr)) { header->macDstAddr = NWK_BROADCAST_ADDR; header->nwkFcf.linkLocal = 1; } #endif else { header->macDstAddr = NWK_RouteNextHop(header->nwkDstAddr, header->nwkFcf.multicast); #ifdef NWK_ENABLE_ROUTE_DISCOVERY if (NWK_ROUTE_UNKNOWN == header->macDstAddr) { nwkRouteDiscoveryRequest(frame); } #endif } }
static void appSendData(void) { #ifdef NWK_ENABLE_ROUTING appMsg.parentShortAddr = NWK_RouteNextHop(0, 0); #else appMsg.parentShortAddr = 0; #endif appMsg.sensors.battery = rand() & 0xffff; appMsg.sensors.temperature = rand() & 0x7f; appMsg.sensors.light = rand() & 0xff; #if APP_COORDINATOR appSendMessage((uint8_t *)&appMsg, sizeof(appMsg)); SYS_TimerStart(&appDataSendingTimer); appState = APP_STATE_WAIT_SEND_TIMER; #else nwkDataReq.dstAddr = 0; nwkDataReq.dstEndpoint = APP_ENDPOINT; nwkDataReq.srcEndpoint = APP_ENDPOINT; nwkDataReq.options = NWK_OPT_ACK_REQUEST | NWK_OPT_ENABLE_SECURITY; nwkDataReq.data = (uint8_t *)&appMsg; nwkDataReq.size = sizeof(appMsg); nwkDataReq.confirm = appDataConf; LED_On(LED_DATA); NWK_DataReq(&nwkDataReq); appState = APP_STATE_WAIT_CONF; #endif }
/*************************************************************************//** *****************************************************************************/ void nwkRouteFrame(NwkFrame_t *frame) { NwkFrameHeader_t *header = &frame->header; if (NWK_ROUTE_UNKNOWN != NWK_RouteNextHop(header->nwkDstAddr, header->nwkFcf.multicast)) { frame->tx.confirm = NULL; frame->tx.control = NWK_TX_CONTROL_ROUTING; nwkTxFrame(frame); } else { nwkRouteSendRouteError(header->nwkSrcAddr, header->nwkDstAddr, header->nwkFcf.multicast); nwkFrameFree(frame); } }