Example #1
0
void
pgw_netstack_init(void)
{
	NETSTACK_ETHERNET.init();
	NETSTACK_MAC_ETH.init();

	NETSTACK_RADIO.init();
	memset(&radio_macLongAddr, 0, sizeof(rimeaddr_t));

//	if(get_eui64_from_eeprom(tmp_addr.u8));
#if 1
	params_get_radio_eui64(radio_macLongAddr.u8);
#else
	radio_macLongAddr.u8[0] = 0x02;
	radio_macLongAddr.u8[1] = 0x11;
	radio_macLongAddr.u8[2] = 0x22;
	radio_macLongAddr.u8[3] = 0xFF;
	radio_macLongAddr.u8[4] = 0xFE;
	radio_macLongAddr.u8[5] = 0x77;
	radio_macLongAddr.u8[6] = 0x88;
	radio_macLongAddr.u8[7] = 0x77;
#endif

	rf231_set_pan_addr(params_get_panid(),			// 0xABCD
					   params_get_panaddr(),		// 0x0
					   (uint8_t*)&radio_macLongAddr.u8
					  );
//	rf231_set_channel(params_get_channel()); 		//25
	rf231_set_txpower(params_get_txpower());		// 0

	NETSTACK_MAC_RADIO.init();
	
	NETSTACK_6LOWPAN.init();

	rf231_listen_channel(params_get_channel());		// 25
	rf231_set_promiscuous_mode(1);

	NETSTACK_NETWORK_IPV4.init();

	NETSTACK_NETWORK_IPV6.init();
	NETSTACK_6LPGW.init();
}
static void
set_rime_addr(void)
{
#if UIP_CONF_EUI64
  rimeaddr_t addr;
  memset(&addr, 0, sizeof(rimeaddr_t));
  if (params_get_eui64(addr.u8)) {
    PRINTA("Random EUI64 address generated\n");
  }

#if UIP_CONF_IPV6
  memcpy(&uip_lladdr.addr, &addr.u8, sizeof(rimeaddr_t));
  rimeaddr_set_node_addr(&addr);
  rf2xx_set_pan_addr(params_get_panid(), params_get_panaddr(), (uint8_t *)&addr.u8);
#elif WITH_NODE_ID
  node_id = get_panaddr_from_eeprom();
  addr.u8[1] = node_id&0xff;
  addr.u8[0] = (node_id&0xff00) >> 8;
  PRINTA("Node ID from eeprom: %X\n", node_id);
  uint16_t inv_node_id=((node_id & 0xff00) >> 8) + ((node_id & 0xff) << 8); // change order of bytes for rf23x
  rimeaddr_set_node_addr(&addr);
  rf2xx_set_pan_addr(params_get_panid(), inv_node_id, NULL);
#else
  rimeaddr_set_node_addr(&addr);
  rf2xx_set_pan_addr(params_get_panid(), params_get_panaddr(), (uint8_t *)&addr.u8);
#endif



#if UIP_CONF_IPV6
  PRINTA("EUI-64 MAC: %x-%x-%x-%x-%x-%x-%x-%x\n", addr.u8[0], addr.u8[1], addr.u8[2], addr.u8[3], addr.u8[4], addr.u8[5], addr.u8[6], addr.u8[7]);
#else
  PRINTA("MAC address ");
  uint8_t i;
  for (i = sizeof(rimeaddr_t); i > 0; i--){
    PRINTA("%x:", addr.u8[i-1]);
  }
  PRINTA("\n");
#endif
#else
  rimeaddr_t addr;
  int i;

  memset(&addr, 0, sizeof(rimeaddr_t));

#if UIP_CONF_IPV6
  memcpy(addr.u8, ds2401_id, sizeof(addr.u8));
#else
  if(node_id == 0) {
    for(i = 0; i < sizeof(rimeaddr_t); ++i) {
      addr.u8[i] = ds2401_id[7 - i];
    }
  } else {
    addr.u8[0] = node_id & 0xff;
    addr.u8[1] = node_id >> 8;
  }
#endif

  rimeaddr_set_node_addr(&addr);
  PRINTA("Rime started with address ");
  for(i = 0; i < sizeof(addr.u8) - 1; i++) {
    PRINTA("%d.", addr.u8[i]);
  }
  PRINTA("%d\n", addr.u8[i]);

  {
    uint8_t longaddr[8];
    uint16_t shortaddr;

    shortaddr = (rimeaddr_node_addr.u8[0] << 8) +
        rimeaddr_node_addr.u8[1];
    memset(longaddr, 0, sizeof(longaddr));
    rimeaddr_copy((rimeaddr_t *)&longaddr, &rimeaddr_node_addr);
    PRINTA("MAC %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
        longaddr[0], longaddr[1], longaddr[2], longaddr[3],
        longaddr[4], longaddr[5], longaddr[6], longaddr[7]);
    rf2xx_set_pan_addr(IEEE802154_PANID, shortaddr, longaddr);
  }

#if UIP_CONF_IPV6
  memcpy(&uip_lladdr.addr, ds2401_id, sizeof(uip_lladdr.addr));
#endif
  //rf2xx_set_channel(params_get_channel());
  //rf2xx_set_txpower(params_get_txpower());

#endif
  rf2xx_set_channel(RF_CHANNEL);
}