drivers: nrf: Added config option for OUI.

Support for defining vendor specific OUI (Organizationally
Unique Identifier) was added.

Signed-off-by: Kamil Kasperczyk <kamil.kasperczyk@nordicsemi.no>
This commit is contained in:
Kamil Kasperczyk 2020-07-28 12:36:26 +02:00 committed by Jukka Rissanen
commit e4d20caee9
2 changed files with 36 additions and 1 deletions

View file

@ -39,6 +39,24 @@ config IEEE802154_RDEV
help help
PHY is a ranging-capable device (RDEV) PHY is a ranging-capable device (RDEV)
config IEEE802154_VENDOR_OUI_ENABLE
bool "Enables setting Vendor Organizationally Unique Identifier"
help
This option enables setting custom vendor
OUI using IEEE802154_VENDOR_OUI. After enabling,
user is obliged to set IEEE802154_VENDOR_OUI value,
as this option has no default value.
if IEEE802154_VENDOR_OUI_ENABLE
config IEEE802154_VENDOR_OUI
int "Vendor Organizationally Unique Identifier"
help
Custom vendor OUI, which makes 24 most-significant
bits of MAC address
endif # IEEE802154_VENDOR_OUI_ENABLE
source "drivers/ieee802154/Kconfig.cc2520" source "drivers/ieee802154/Kconfig.cc2520"
source "drivers/ieee802154/Kconfig.kw41z" source "drivers/ieee802154/Kconfig.kw41z"

View file

@ -60,9 +60,26 @@ static struct nrf5_802154_data nrf5_data;
#define NRF5_802154_CFG(dev) \ #define NRF5_802154_CFG(dev) \
((const struct nrf5_802154_config * const)(dev)->config_info) ((const struct nrf5_802154_config * const)(dev)->config_info)
#if CONFIG_IEEE802154_VENDOR_OUI_ENABLE
#define IEEE802154_NRF5_VENDOR_OUI CONFIG_IEEE802154_VENDOR_OUI
#else
#define IEEE802154_NRF5_VENDOR_OUI (uint32_t)0xF4CE36
#endif
static void nrf5_get_eui64(uint8_t *mac) static void nrf5_get_eui64(uint8_t *mac)
{ {
memcpy(mac, (const uint32_t *)&NRF_FICR->DEVICEID, 8); uint64_t factoryAddress;
uint32_t index = 0;
/* Set the MAC Address Block Larger (MA-L) formerly called OUI. */
mac[index++] = (IEEE802154_NRF5_VENDOR_OUI >> 16) & 0xff;
mac[index++] = (IEEE802154_NRF5_VENDOR_OUI >> 8) & 0xff;
mac[index++] = IEEE802154_NRF5_VENDOR_OUI & 0xff;
/* Use device identifier assigned during the production. */
factoryAddress = (uint64_t)NRF_FICR->DEVICEID[0] << 32;
factoryAddress |= NRF_FICR->DEVICEID[1];
memcpy(mac + index, &factoryAddress, sizeof(factoryAddress) - index);
} }
static void nrf5_rx_thread(void *arg1, void *arg2, void *arg3) static void nrf5_rx_thread(void *arg1, void *arg2, void *arg3)