drivers 802154: always memset cpuid before setting

This commit is contained in:
Oleg Hahm 2016-04-04 16:57:06 +02:00
parent 416b9759e2
commit 32606382a1
2 changed files with 10 additions and 12 deletions

View File

@ -70,16 +70,17 @@ void at86rf2xx_reset(at86rf2xx_t *dev)
dev->netdev.flags = 0; dev->netdev.flags = 0;
/* set short and long address */ /* set short and long address */
#if CPUID_LEN #if CPUID_LEN
/* in case CPUID_LEN < 8, fill missing bytes with zeros */
memset(cpuid, 0, CPUID_LEN);
cpuid_get(cpuid); cpuid_get(cpuid);
#if CPUID_LEN < IEEE802154_LONG_ADDRESS_LEN #if CPUID_LEN > IEEE802154_LONG_ADDRESS_LEN
/* in case CPUID_LEN < 8, fill missing bytes with zeros */ for (int i = IEEE802154_LONG_ADDRESS_LEN; i < CPUID_LEN; i++) {
memset(&(cpuid[CPUID_LEN]), 0, (IEEE802154_LONG_ADDRESS_LEN - CPUID_LEN));
#else
for (int i = 8; i < CPUID_LEN; i++) {
cpuid[i & 0x07] ^= cpuid[i]; cpuid[i & 0x07] ^= cpuid[i];
} }
#endif #endif
/* make sure we mark the address as non-multicast and not globally unique */ /* make sure we mark the address as non-multicast and not globally unique */
cpuid[0] &= ~(0x01); cpuid[0] &= ~(0x01);
cpuid[0] |= 0x02; cpuid[0] |= 0x02;

View File

@ -430,15 +430,12 @@ int kw2xrf_init(kw2xrf_t *dev, spi_t spi, spi_speed_t spi_speed,
dev->option = 0; dev->option = 0;
#if CPUID_LEN #if CPUID_LEN
/* in case CPUID_LEN < 8, fill missing bytes with zeros */
memset(cpuid, 0, CPUID_LEN);
cpuid_get(cpuid); cpuid_get(cpuid);
#if CPUID_LEN < IEEE802154_LONG_ADDRESS_LEN #if CPUID_LEN > IEEE802154_LONG_ADDRESS_LEN
/* in case CPUID_LEN < 8, fill missing bytes with zeros */
memset(&(cpuid[CPUID_LEN]), 0, (IEEE802154_LONG_ADDRESS_LEN - CPUID_LEN));
#else
for (int i = IEEE802154_LONG_ADDRESS_LEN; i < CPUID_LEN; i++) { for (int i = IEEE802154_LONG_ADDRESS_LEN; i < CPUID_LEN; i++) {
cpuid[i & 0x07] ^= cpuid[i]; cpuid[i & 0x07] ^= cpuid[i];
} }