Merge pull request #14949 from benpicco/drivers/mrf24j40-register
drivers/mrf24j40: register with netdev
This commit is contained in:
commit
ab37c9fba1
@ -179,8 +179,10 @@ typedef struct {
|
||||
*
|
||||
* @param[out] dev device descriptor
|
||||
* @param[in] params parameters for device initialization
|
||||
* @param[in] index index of @p params in a global parameter struct array.
|
||||
* If initialized manually, pass a unique identifier instead.
|
||||
*/
|
||||
void mrf24j40_setup(mrf24j40_t *dev, const mrf24j40_params_t *params);
|
||||
void mrf24j40_setup(mrf24j40_t *dev, const mrf24j40_params_t *params, uint8_t index);
|
||||
|
||||
/**
|
||||
* @brief Trigger a hardware reset and configure radio with default values
|
||||
@ -222,11 +224,10 @@ void mrf24j40_set_addr_short(mrf24j40_t *dev, uint16_t addr);
|
||||
/**
|
||||
* @brief Get the configured long address of the given device
|
||||
*
|
||||
* @param[in] dev device to read from
|
||||
*
|
||||
* @return the currently set (8-byte) long address
|
||||
* @param[in] dev device to read from
|
||||
* @param[out] addr the currently set (8-byte) long address
|
||||
*/
|
||||
uint64_t mrf24j40_get_addr_long(mrf24j40_t *dev);
|
||||
void mrf24j40_get_addr_long(mrf24j40_t *dev, uint8_t *addr);
|
||||
|
||||
/**
|
||||
* @brief Set the long address of the given device
|
||||
@ -234,7 +235,7 @@ uint64_t mrf24j40_get_addr_long(mrf24j40_t *dev);
|
||||
* @param[in] dev device to write to
|
||||
* @param[in] addr (8-byte) long address to set
|
||||
*/
|
||||
void mrf24j40_set_addr_long(mrf24j40_t *dev, uint64_t addr);
|
||||
void mrf24j40_set_addr_long(mrf24j40_t *dev, const uint8_t *addr);
|
||||
|
||||
/**
|
||||
* @brief Get the configured channel number of the given device
|
||||
|
||||
@ -282,6 +282,7 @@ typedef enum {
|
||||
NETDEV_AT86RF2XX,
|
||||
NETDEV_CC2538,
|
||||
NETDEV_DOSE,
|
||||
NETDEV_MRF24J40,
|
||||
NETDEV_NRF802154,
|
||||
/* add more if needed */
|
||||
} netdev_type_t;
|
||||
|
||||
@ -20,7 +20,6 @@
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "luid.h"
|
||||
#include "byteorder.h"
|
||||
#include "net/gnrc.h"
|
||||
#include "mrf24j40_registers.h"
|
||||
@ -31,19 +30,19 @@
|
||||
#define ENABLE_DEBUG (0)
|
||||
#include "debug.h"
|
||||
|
||||
void mrf24j40_setup(mrf24j40_t *dev, const mrf24j40_params_t *params)
|
||||
void mrf24j40_setup(mrf24j40_t *dev, const mrf24j40_params_t *params, uint8_t index)
|
||||
{
|
||||
netdev_t *netdev = (netdev_t *)dev;
|
||||
|
||||
netdev->driver = &mrf24j40_driver;
|
||||
/* initialize device descriptor */
|
||||
dev->params = *params;
|
||||
|
||||
netdev_register(netdev, NETDEV_MRF24J40, index);
|
||||
}
|
||||
|
||||
int mrf24j40_reset(mrf24j40_t *dev)
|
||||
{
|
||||
eui64_t addr_long;
|
||||
|
||||
int res = mrf24j40_init(dev);
|
||||
|
||||
if (res < 0) {
|
||||
@ -52,13 +51,12 @@ int mrf24j40_reset(mrf24j40_t *dev)
|
||||
|
||||
netdev_ieee802154_reset(&dev->netdev);
|
||||
|
||||
/* get an 8-byte unique ID to use as hardware address */
|
||||
luid_get(addr_long.uint8, IEEE802154_LONG_ADDRESS_LEN);
|
||||
addr_long.uint8[0] &= ~(0x01);
|
||||
addr_long.uint8[0] |= (0x02);
|
||||
/* set device address */
|
||||
netdev_ieee802154_setup(&dev->netdev);
|
||||
|
||||
/* set short and long address */
|
||||
mrf24j40_set_addr_long(dev, ntohll(addr_long.uint64.u64));
|
||||
mrf24j40_set_addr_short(dev, ntohs(addr_long.uint16[0].u16));
|
||||
mrf24j40_set_addr_long(dev, dev->netdev.long_addr);
|
||||
mrf24j40_set_addr_short(dev, unaligned_get_u16(dev->netdev.short_addr));
|
||||
|
||||
mrf24j40_set_chan(dev, CONFIG_IEEE802154_DEFAULT_CHANNEL);
|
||||
|
||||
|
||||
@ -157,24 +157,17 @@ void mrf24j40_set_addr_short(mrf24j40_t *dev, uint16_t addr)
|
||||
naddr.u8[0]);
|
||||
}
|
||||
|
||||
uint64_t mrf24j40_get_addr_long(mrf24j40_t *dev)
|
||||
void mrf24j40_get_addr_long(mrf24j40_t *dev, uint8_t *addr)
|
||||
{
|
||||
network_uint64_t naddr;
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
naddr.u8[7 - i] = mrf24j40_reg_read_short(dev, (MRF24J40_REG_EADR0 + i));
|
||||
addr[7 - i] = mrf24j40_reg_read_short(dev, MRF24J40_REG_EADR0 + i);
|
||||
}
|
||||
return naddr.u64;
|
||||
}
|
||||
|
||||
void mrf24j40_set_addr_long(mrf24j40_t *dev, uint64_t addr)
|
||||
void mrf24j40_set_addr_long(mrf24j40_t *dev, const uint8_t *addr)
|
||||
{
|
||||
network_uint64_t naddr;
|
||||
naddr.u64 = addr;
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
mrf24j40_reg_write_short(dev, (MRF24J40_REG_EADR0 + i),
|
||||
(naddr.u8[7 - i]));
|
||||
mrf24j40_reg_write_short(dev, MRF24J40_REG_EADR0 + i, addr[7 - i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -184,7 +184,7 @@ static int _get(netdev_t *netdev, netopt_t opt, void *val, size_t max_len)
|
||||
res = -EOVERFLOW;
|
||||
}
|
||||
else {
|
||||
*(uint64_t*)val = mrf24j40_get_addr_long(dev);
|
||||
mrf24j40_get_addr_long(dev, val);
|
||||
res = sizeof(uint64_t);
|
||||
}
|
||||
break;
|
||||
@ -400,7 +400,7 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
|
||||
res = -EOVERFLOW;
|
||||
}
|
||||
else {
|
||||
mrf24j40_set_addr_long(dev, *((const uint64_t *)val));
|
||||
mrf24j40_set_addr_long(dev, val);
|
||||
res = sizeof(uint64_t);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -191,7 +191,7 @@ void lwip_bootstrap(void)
|
||||
}
|
||||
#elif defined(MODULE_MRF24J40)
|
||||
for (unsigned i = 0; i < LWIP_NETIF_NUMOF; i++) {
|
||||
mrf24j40_setup(&mrf24j40_devs[i], &mrf24j40_params[i]);
|
||||
mrf24j40_setup(&mrf24j40_devs[i], &mrf24j40_params[i], i);
|
||||
if (netif_add(&netif[i], &mrf24j40_devs[i], lwip_netdev_init,
|
||||
tcpip_6lowpan_input) == NULL) {
|
||||
DEBUG("Could not add mrf24j40 device\n");
|
||||
|
||||
@ -46,7 +46,7 @@ void auto_init_mrf24j40(void)
|
||||
for (unsigned i = 0; i < MRF24J40_NUM; i++) {
|
||||
LOG_DEBUG("[auto_init_netif] initializing mrf24j40 #%u\n", i);
|
||||
|
||||
mrf24j40_setup(&mrf24j40_devs[i], &mrf24j40_params[i]);
|
||||
mrf24j40_setup(&mrf24j40_devs[i], &mrf24j40_params[i], i);
|
||||
gnrc_netif_ieee802154_create(&_netif[i], _mrf24j40_stacks[i],
|
||||
MRF24J40_MAC_STACKSIZE, MRF24J40_MAC_PRIO,
|
||||
"mrf24j40",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user