示例#1
0
/*************************************************************************//**
*****************************************************************************/
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
	}
}
示例#2
0
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
}
示例#3
0
/*************************************************************************//**
*****************************************************************************/
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);
	}
}