1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-25 22:43:50 +01:00

cc2538_rf: pass address via pointer

This commit is contained in:
Benjamin Valentin 2020-09-10 00:26:18 +02:00 committed by Benjamin Valentin
parent be3667bfdd
commit 6675c5f5c0
3 changed files with 34 additions and 47 deletions

View File

@ -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

View File

@ -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)

View File

@ -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);