drivers/at86rf2xx: use luid_get_eui64() / luid_get_short()

Use dedicated helper functions to generate long and short address.

Maybe fixes #13358
This commit is contained in:
Benjamin Valentin 2020-02-13 11:17:11 +01:00
parent aa9388b238
commit 63f6d6aa13

View File

@ -90,6 +90,7 @@ static void at86rf2xx_enable_smart_idle(at86rf2xx_t *dev)
void at86rf2xx_reset(at86rf2xx_t *dev) void at86rf2xx_reset(at86rf2xx_t *dev)
{ {
eui64_t addr_long; eui64_t addr_long;
network_uint16_t addr_short;
at86rf2xx_hardware_reset(dev); at86rf2xx_hardware_reset(dev);
@ -100,14 +101,13 @@ void at86rf2xx_reset(at86rf2xx_t *dev)
at86rf2xx_set_state(dev, AT86RF2XX_STATE_FORCE_TRX_OFF); at86rf2xx_set_state(dev, AT86RF2XX_STATE_FORCE_TRX_OFF);
} }
/* get an 8-byte unique ID to use as hardware address */ /* generate EUI-64 and short address */
luid_get(addr_long.uint8, IEEE802154_LONG_ADDRESS_LEN); luid_get_eui64(&addr_long);
/* make sure we mark the address as non-multicast and not globally unique */ luid_get_short(&addr_short);
addr_long.uint8[0] &= ~(0x01);
addr_long.uint8[0] |= (0x02);
/* set short and long address */ /* set short and long address */
at86rf2xx_set_addr_long(dev, &addr_long); at86rf2xx_set_addr_long(dev, &addr_long);
at86rf2xx_set_addr_short(dev, &addr_long.uint16[ARRAY_SIZE(addr_long.uint16) - 1]); at86rf2xx_set_addr_short(dev, &addr_short);
/* set default channel */ /* set default channel */
at86rf2xx_set_chan(dev, AT86RF2XX_DEFAULT_CHANNEL); at86rf2xx_set_chan(dev, AT86RF2XX_DEFAULT_CHANNEL);