drivers: ieee802154: reverse ack data ext addr string
When ack data for extended address is set with the nrf_802154_ack_data_set function, the extended address must be reversed to the IEEE 802.15.4 address transmit order in order to be properly matched. Signed-off-by: Rafał Kuźnia <rafal.kuznia@nordicsemi.no>
This commit is contained in:
parent
ebfb23979c
commit
3053a931a3
2 changed files with 16 additions and 4 deletions
|
@ -842,11 +842,16 @@ static int nrf5_configure(const struct device *dev,
|
||||||
uint8_t ext_addr_le[EXTENDED_ADDRESS_SIZE];
|
uint8_t ext_addr_le[EXTENDED_ADDRESS_SIZE];
|
||||||
|
|
||||||
sys_put_le16(config->ack_ie.short_addr, short_addr_le);
|
sys_put_le16(config->ack_ie.short_addr, short_addr_le);
|
||||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
/**
|
||||||
memcpy(ext_addr_le, config->ack_ie.ext_addr, EXTENDED_ADDRESS_SIZE);
|
* The extended address field passed to this function starts
|
||||||
#else
|
* with the leftmost octet and ends with the rightmost octet.
|
||||||
|
* The IEEE 802.15.4 transmission order mandates this order to be
|
||||||
|
* reversed in a transmitted frame.
|
||||||
|
*
|
||||||
|
* The nrf_802154_ack_data_set expects extended address in transmission
|
||||||
|
* order.
|
||||||
|
*/
|
||||||
sys_memcpy_swap(ext_addr_le, config->ack_ie.ext_addr, EXTENDED_ADDRESS_SIZE);
|
sys_memcpy_swap(ext_addr_le, config->ack_ie.ext_addr, EXTENDED_ADDRESS_SIZE);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (config->ack_ie.data_len > 0) {
|
if (config->ack_ie.data_len > 0) {
|
||||||
nrf_802154_ack_data_set(short_addr_le, false, config->ack_ie.data,
|
nrf_802154_ack_data_set(short_addr_le, false, config->ack_ie.data,
|
||||||
|
|
|
@ -281,6 +281,13 @@ struct ieee802154_config {
|
||||||
const uint8_t *data;
|
const uint8_t *data;
|
||||||
uint16_t data_len;
|
uint16_t data_len;
|
||||||
uint16_t short_addr;
|
uint16_t short_addr;
|
||||||
|
/**
|
||||||
|
* The extended address is expected to be passed starting
|
||||||
|
* with the leftmost octet and ending with the rightmost octet.
|
||||||
|
* A device with an extended address 01:23:45:67:89:ab:cd:ef
|
||||||
|
* should provide a pointer to array containing values in the
|
||||||
|
* same exact order.
|
||||||
|
*/
|
||||||
const uint8_t *ext_addr;
|
const uint8_t *ext_addr;
|
||||||
} ack_ie;
|
} ack_ie;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue