diff --git a/cpu/cc2538/include/cc2538_rf.h b/cpu/cc2538/include/cc2538_rf.h index e94f4fe0a2..546be80fa2 100644 --- a/cpu/cc2538/include/cc2538_rf.h +++ b/cpu/cc2538/include/cc2538_rf.h @@ -236,16 +236,16 @@ bool cc2538_channel_clear(void); /** * @brief Get the configured long address of the device * - * @return The currently set (8-byte) long address + * @param[out] addr The currently set (8-byte) long address */ -uint64_t cc2538_get_addr_long(void); +void cc2538_get_addr_long(uint8_t *addr); /** * @brief Get the configured short address of the device * - * @return The currently set (2-byte) short address + * @param[out] addr The currently set (2-byte) short address */ -uint16_t cc2538_get_addr_short(void); +void cc2538_get_addr_short(uint8_t *addr); /** * @brief Get the primary (burned-in) EUI-64 of the device @@ -321,14 +321,14 @@ void cc2538_setup(cc2538_rf_t *dev); * * @param[in] addr (2-byte) short address to set */ -void cc2538_set_addr_short(uint16_t addr); +void cc2538_set_addr_short(const uint8_t *addr); /** * @brief Set the long address of the device * * @param[in] addr (8-byte) short address to set */ -void cc2538_set_addr_long(uint64_t addr); +void cc2538_set_addr_long(const uint8_t *addr); /** * @brief Set the channel number of the device diff --git a/cpu/cc2538/radio/cc2538_rf_getset.c b/cpu/cc2538/radio/cc2538_rf_getset.c index 658e02a092..2b0230614f 100644 --- a/cpu/cc2538/radio/cc2538_rf_getset.c +++ b/cpu/cc2538/radio/cc2538_rf_getset.c @@ -62,29 +62,22 @@ static const uint8_t power_lut[NUM_POWER_LEVELS] = { 255, /**< 7 dBm */ }; -uint64_t cc2538_get_addr_long(void) +void cc2538_get_addr_long(uint8_t *addr) { - uint64_t addr = RFCORE_FFSM_EXT_ADDR0; - addr <<= 8; - addr |= RFCORE_FFSM_EXT_ADDR1; - addr <<= 8; - addr |= RFCORE_FFSM_EXT_ADDR2; - addr <<= 8; - addr |= RFCORE_FFSM_EXT_ADDR3; - addr <<= 8; - addr |= RFCORE_FFSM_EXT_ADDR4; - addr <<= 8; - addr |= RFCORE_FFSM_EXT_ADDR5; - addr <<= 8; - addr |= RFCORE_FFSM_EXT_ADDR6; - addr <<= 8; - addr |= RFCORE_FFSM_EXT_ADDR7; - return addr; + addr[7] = RFCORE_FFSM_EXT_ADDR0; + addr[6] = RFCORE_FFSM_EXT_ADDR1; + addr[5] = RFCORE_FFSM_EXT_ADDR2; + addr[4] = RFCORE_FFSM_EXT_ADDR3; + addr[3] = RFCORE_FFSM_EXT_ADDR4; + addr[2] = RFCORE_FFSM_EXT_ADDR5; + addr[1] = RFCORE_FFSM_EXT_ADDR6; + addr[0] = RFCORE_FFSM_EXT_ADDR7; } -uint16_t cc2538_get_addr_short(void) +void cc2538_get_addr_short(uint8_t *addr) { - return (RFCORE_FFSM_SHORT_ADDR0 << 8) | RFCORE_FFSM_SHORT_ADDR1; + addr[1] = RFCORE_FFSM_SHORT_ADDR0; + addr[0] = RFCORE_FFSM_SHORT_ADDR1; } unsigned int cc2538_get_chan(void) @@ -147,22 +140,22 @@ int cc2538_get_tx_power(void) return OUTPUT_POWER_MIN + best_index; } -void cc2538_set_addr_long(uint64_t addr) +void cc2538_set_addr_long(const uint8_t *addr) { - RFCORE_FFSM_EXT_ADDR0 = addr >> (7 * 8); - RFCORE_FFSM_EXT_ADDR1 = addr >> (6 * 8); - RFCORE_FFSM_EXT_ADDR2 = addr >> (5 * 8); - RFCORE_FFSM_EXT_ADDR3 = addr >> (4 * 8); - RFCORE_FFSM_EXT_ADDR4 = addr >> (3 * 8); - RFCORE_FFSM_EXT_ADDR5 = addr >> (2 * 8); - RFCORE_FFSM_EXT_ADDR6 = addr >> (1 * 8); - RFCORE_FFSM_EXT_ADDR7 = addr >> (0 * 8); + RFCORE_FFSM_EXT_ADDR0 = addr[7]; + RFCORE_FFSM_EXT_ADDR1 = addr[6]; + RFCORE_FFSM_EXT_ADDR2 = addr[5]; + RFCORE_FFSM_EXT_ADDR3 = addr[4]; + RFCORE_FFSM_EXT_ADDR4 = addr[3]; + RFCORE_FFSM_EXT_ADDR5 = addr[2]; + RFCORE_FFSM_EXT_ADDR6 = addr[1]; + RFCORE_FFSM_EXT_ADDR7 = addr[0]; } -void cc2538_set_addr_short(uint16_t addr) +void cc2538_set_addr_short(const uint8_t *addr) { - RFCORE_FFSM_SHORT_ADDR1 = addr; - RFCORE_FFSM_SHORT_ADDR0 = addr >> 8; + RFCORE_FFSM_SHORT_ADDR0 = addr[1]; + RFCORE_FFSM_SHORT_ADDR1 = addr[0]; } void cc2538_set_chan(unsigned int chan) diff --git a/cpu/cc2538/radio/cc2538_rf_netdev.c b/cpu/cc2538/radio/cc2538_rf_netdev.c index ed5827e614..e3ac980587 100644 --- a/cpu/cc2538/radio/cc2538_rf_netdev.c +++ b/cpu/cc2538/radio/cc2538_rf_netdev.c @@ -56,7 +56,7 @@ static int _get(netdev_t *netdev, netopt_t opt, void *value, size_t max_len) return -EOVERFLOW; } else { - *(uint16_t*)value = cc2538_get_addr_short(); + cc2538_get_addr_short(value); } return sizeof(uint16_t); @@ -65,7 +65,7 @@ static int _get(netdev_t *netdev, netopt_t opt, void *value, size_t max_len) return -EOVERFLOW; } else { - *(uint64_t*)value = cc2538_get_addr_long(); + cc2538_get_addr_long(value); } return sizeof(uint64_t); @@ -164,7 +164,7 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *value, size_t value_ res = -EOVERFLOW; } else { - cc2538_set_addr_short(*((const uint16_t*)value)); + cc2538_set_addr_short(value); res = sizeof(uint16_t); } break; @@ -174,7 +174,7 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *value, size_t value_ res = -EOVERFLOW; } else { - cc2538_set_addr_long(*((const uint64_t*)value)); + cc2538_set_addr_long(value); res = sizeof(uint64_t); } break; @@ -394,18 +394,12 @@ static int _init(netdev_t *netdev) _dev = netdev; uint16_t chan = cc2538_get_chan(); - uint16_t addr_short = cc2538_get_addr_short(); - uint64_t addr_long = cc2538_get_addr_long(); netdev_ieee802154_reset(&dev->netdev); /* Initialise netdev_ieee802154_t struct */ netdev_ieee802154_set(&dev->netdev, NETOPT_CHANNEL, &chan, sizeof(chan)); - netdev_ieee802154_set(&dev->netdev, NETOPT_ADDRESS, - &addr_short, sizeof(addr_short)); - netdev_ieee802154_set(&dev->netdev, NETOPT_ADDRESS_LONG, - &addr_long, sizeof(addr_long)); cc2538_set_state(dev, NETOPT_STATE_IDLE);