Merged in merlin17/nuttx/develop (pull request #426)
drivers/wireless/ieee802154: Moved radios to individual sub-directories Approved-by: Gregory Nutt <gnutt@nuttx.org>
This commit is contained in:
commit
74ca74a910
@ -11,10 +11,14 @@ config IEEE802154_MRF24J40
|
||||
---help---
|
||||
This selection enables support for the Microchip MRF24J40 device.
|
||||
|
||||
source drivers/wireless/ieee802154/mrf24j40/Kconfig
|
||||
|
||||
config IEEE802154_AT86RF233
|
||||
bool "ATMEL RF233 IEEE 802.15.4 transceiver"
|
||||
default n
|
||||
---help---
|
||||
This selection enables support for the Atmel RF233 device.
|
||||
|
||||
source drivers/wireless/ieee802154/at86rf23x/Kconfig
|
||||
|
||||
endif # DRIVERS_IEEE802154
|
||||
|
@ -1,7 +1,7 @@
|
||||
############################################################################
|
||||
# drivers/ieee802154/Make.defs
|
||||
#
|
||||
# Copyright (C) 2016 Gregory Nutt. All rights reserved.
|
||||
# Copyright (C) 2016-2017 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -41,15 +41,10 @@ ifeq ($(CONFIG_DRIVERS_IEEE802154),y)
|
||||
|
||||
# Include IEEE 802.15.4 drivers into the build
|
||||
|
||||
ifeq ($(CONFIG_IEEE802154_MRF24J40),y)
|
||||
CSRCS += mrf24j40.c
|
||||
endif
|
||||
include wireless$(DELIM)ieee802154$(DELIM)mrf24j40$(DELIM)Make.defs
|
||||
include wireless$(DELIM)ieee802154$(DELIM)at86rf23x$(DELIM)Make.defs
|
||||
|
||||
ifeq ($(CONFIG_IEEE802154_AT86RF233),y)
|
||||
CSRCS += at86rf23x.c
|
||||
endif
|
||||
|
||||
# Include IEEE 802.15.4 build support
|
||||
# Include common IEEE 802.15.4 build support
|
||||
|
||||
DEPPATH += --dep-path wireless$(DELIM)ieee802154
|
||||
VPATH += :wireless$(DELIM)ieee802154
|
||||
|
8
drivers/wireless/ieee802154/at86rf23x/Kconfig
Normal file
8
drivers/wireless/ieee802154/at86rf23x/Kconfig
Normal file
@ -0,0 +1,8 @@
|
||||
#
|
||||
# For a description of the syntax of this configuration file,
|
||||
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||
#
|
||||
|
||||
if IEEE802154_AT86RF233
|
||||
|
||||
endif # IEEE802154_AT86RF233
|
48
drivers/wireless/ieee802154/at86rf23x/Make.defs
Normal file
48
drivers/wireless/ieee802154/at86rf23x/Make.defs
Normal file
@ -0,0 +1,48 @@
|
||||
############################################################################
|
||||
# drivers/ieee802154/at86rf23x/Make.defs
|
||||
#
|
||||
# Copyright (C) 2016-2017 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name NuttX nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
# Include AT86RF23x drivers into the build
|
||||
|
||||
ifeq ($(CONFIG_IEEE802154_AT86RF233),y)
|
||||
|
||||
CSRCS += at86rf23x.c
|
||||
|
||||
# Include AT86RF23x build support
|
||||
|
||||
DEPPATH += --dep-path wireless$(DELIM)ieee802154$(DELIM)at86rf23x
|
||||
VPATH += :wireless$(DELIM)ieee802154$(DELIM)at86rf23x
|
||||
CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)drivers$(DELIM)wireless$(DELIM)ieee802154$(DELIM)at86rf23x}
|
||||
|
||||
endif # CONFIG_IEEE802154_AT86RF233
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* drivers/wireless/ieee802154/at86rf23x.c
|
||||
* drivers/wireless/ieee802154/at86rf23x/at86rf23x.c
|
||||
*
|
||||
* Copyright (C) 2016 Matt Poppe. All rights reserved.
|
||||
* Author: Matt Poppe <matt@poppe.me>
|
||||
@ -993,115 +993,226 @@ static int at86rf23x_gettxpower(FAR struct ieee802154_radio_s *ieee,
|
||||
|
||||
/* Right now we only get negative values */
|
||||
|
||||
|
||||
|
||||
|
||||
reg = at86rf23x_getreg(dev->spi, RF23X_REG_TXPWR);
|
||||
switch (reg)
|
||||
|
||||
{
|
||||
|
||||
|
||||
case RF23X_TXPWR_POS_4:
|
||||
|
||||
*txpwr = 0;
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_POS_3_7:
|
||||
*txpwr = 0;
|
||||
*txpwr =
|
||||
0;
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_POS_3_4:
|
||||
*txpwr = 0;
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_POS_3:
|
||||
*txpwr = 0;
|
||||
*txpwr =
|
||||
0;
|
||||
|
||||
break;
|
||||
|
||||
case RF23X_TXPWR_POS_2_5:
|
||||
|
||||
case RF23X_
|
||||
TXPWR_POS_2_5:
|
||||
*txpwr = 0;
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case RF23X_TXPWR_POS_2:
|
||||
|
||||
*txpwr = 0;
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_POS_1:
|
||||
|
||||
*txpwr = 0;
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_0:
|
||||
*txpwr = 0;
|
||||
*txpwr =
|
||||
0;
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_NEG_1:
|
||||
*txpwr = 1000;
|
||||
|
||||
break;
|
||||
|
||||
case RF23X_TXPWR_NEG_2:
|
||||
|
||||
|
||||
case RF23X_TXPWR_NE
|
||||
G_2:
|
||||
*txpwr = 2000;
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case RF23X_TXPWR_NEG_3:
|
||||
*txpwr = 3000;
|
||||
|
||||
|
||||
*txpwr = 3000;
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case RF23X_TXPWR_NEG_4:
|
||||
*txpwr = 4000;
|
||||
break;
|
||||
|
||||
|
||||
*txpwr = 4000;
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_NEG_6:
|
||||
*txpwr = 6000;
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_NEG_8:
|
||||
*txpwr = 8000;
|
||||
|
||||
break;
|
||||
|
||||
case RF23X_TXPWR_NEG_12:
|
||||
|
||||
|
||||
ca
|
||||
se RF23X_TXPWR_NEG_12:
|
||||
|
||||
*txpwr = 12000;
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case RF23X_TXPWR_NEG_17:
|
||||
*txpwr = 17000;
|
||||
break;
|
||||
|
||||
*txpwr = 17
|
||||
000;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return OK;
|
||||
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
|
||||
/****
|
||||
************************************************************************
|
||||
|
||||
* Name: at86rf23x_setcca
|
||||
*
|
||||
|
||||
* Description:
|
||||
|
||||
* Configures if energy detection is used or carrier sense. The base
|
||||
|
||||
|
||||
* measurement is configured here as well
|
||||
*
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int at86rf23x_setcca(FAR struct ieee802154_radio_s *ieee,
|
||||
*
|
||||
|
||||
*************************************************************************
|
||||
***/
|
||||
|
||||
|
||||
static
|
||||
int at86rf23x_setcca(FAR struct ieee802154_radio_s *ieee,
|
||||
|
||||
FAR struct ieee802154_cca_s *cca)
|
||||
|
||||
{
|
||||
FAR struct at86rf23x_dev_s *dev = (struct at86rf23x_dev_s *)ieee;
|
||||
|
||||
|
||||
|
||||
|
||||
/* TODO: This doesn't fit the RF233 completely come back to this */
|
||||
|
||||
|
||||
|
||||
if (!cca->use_ed && !cca->use_cs)
|
||||
{
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (cca->use_cs && cca->csth > 0x0f)
|
||||
{
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (cca->use_ed)
|
||||
|
||||
|
||||
{
|
||||
|
||||
at86rf23x_setregbits(dev->spi, RF23X_CCA_BITS_MODE, RF23X_CCA_MODE_ED);
|
||||
}
|
||||
|
||||
if (cca->use_cs)
|
||||
|
||||
|
||||
|
||||
if (cca->use_cs)
|
||||
{
|
||||
at86rf23x_setregbits(dev->spi, RF23X_CCA_BITS_MODE, RF23X_CCA_MODE_CS);
|
||||
|
||||
at86rf23x_setregbits(dev->spi, RF23X_CCA_BITS_MODE, RF23X_CCA
|
||||
_MODE_CS);
|
||||
}
|
||||
|
||||
memcpy(&dev->cca, cca, sizeof(struct ieee802154_cca_s));
|
||||
|
||||
|
||||
memcpy(&dev->cca, cca, sizeof(struct ieee802154
|
||||
_cca_s));
|
||||
return OK;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* drivers/wireless/ieee802154/at86rf23x.c
|
||||
* drivers/wireless/ieee802154/at86rf23x/at86rf23x.h
|
||||
*
|
||||
* Copyright (C) 2016 Matt Poppe. All rights reserved.
|
||||
* Author: Matt Poppe <matt@poppe.me>
|
||||
@ -33,8 +33,8 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __DRIVERS_WIRELESS_IEEE802154_AT86RF23X_H
|
||||
#define __DRIVERS_WIRELESS_IEEE802154_AT86RF23X_H
|
||||
#ifndef __DRIVERS_WIRELESS_IEEE802154_AT86RF23X_AT86RF23X_H
|
||||
#define __DRIVERS_WIRELESS_IEEE802154_AT86RF23X_AT86RF23X_H
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
@ -218,4 +218,4 @@
|
||||
|
||||
#define RF23X_IRQ_MASK_DEFAULT (RF23X_IRQ_MASK_TRX_END)
|
||||
|
||||
#endif /* __DRIVERS_WIRELESS_IEEE802154_AT86RF23X_H */
|
||||
#endif /* __DRIVERS_WIRELESS_IEEE802154_AT86RF23X_AT86RF23X_H */
|
8
drivers/wireless/ieee802154/mrf24j40/Kconfig
Normal file
8
drivers/wireless/ieee802154/mrf24j40/Kconfig
Normal file
@ -0,0 +1,8 @@
|
||||
#
|
||||
# For a description of the syntax of this configuration file,
|
||||
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||
#
|
||||
|
||||
if IEEE802154_MRF24J40
|
||||
|
||||
endif # IEEE802154_MRF24J40
|
48
drivers/wireless/ieee802154/mrf24j40/Make.defs
Normal file
48
drivers/wireless/ieee802154/mrf24j40/Make.defs
Normal file
@ -0,0 +1,48 @@
|
||||
############################################################################
|
||||
# drivers/ieee802154/mrf24j40/Make.defs
|
||||
#
|
||||
# Copyright (C) 2016-2017 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name NuttX nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
ifeq ($(CONFIG_IEEE802154_MRF24J40),y)
|
||||
|
||||
# Include MRF24J40 files into the build
|
||||
|
||||
CSRCS += mrf24j40.c
|
||||
|
||||
# Include MRF24J40 build support
|
||||
|
||||
DEPPATH += --dep-path wireless$(DELIM)ieee802154$(DELIM)mrf24j40
|
||||
VPATH += :wireless$(DELIM)ieee802154$(DELIM)mrf24j40
|
||||
CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)drivers$(DELIM)wireless$(DELIM)ieee802154$(DELIM)mrf24j40}
|
||||
|
||||
endif # CONFIG_IEEE802154_MRF24J40
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* drivers/wireless/ieee802154/mrf24j40.c
|
||||
* drivers/wireless/ieee802154/mrf24j40/mrf24j40.c
|
||||
*
|
||||
* Copyright (C) 2015-2016 Sebastien Lorquet. All rights reserved.
|
||||
* Copyright (C) 2017 Verge Inc. All rights reserved.
|
||||
@ -1452,245 +1452,485 @@ static int mrf24j40_settxpower(FAR struct mrf24j40_radio_s *dev,
|
||||
|
||||
case -1:
|
||||
reg |= 0x02;
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case 0:
|
||||
|
||||
reg |= 0x00; /* value 0x01 is 0.5 db, not used */
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
default:
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_RFCON3, reg);
|
||||
|
||||
dev->txpower = save_txpwr;
|
||||
|
||||
return OK;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
* Name: mrf24j40_setcca
|
||||
|
||||
*
|
||||
|
||||
* Description:
|
||||
|
||||
* Define the Clear Channel Assessement method.
|
||||
|
||||
*
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
|
||||
static int mrf24j40_setcca(FAR struct mrf24j40_radio_s *dev,
|
||||
|
||||
FAR struct ieee802154_cca_s *cca)
|
||||
|
||||
{
|
||||
|
||||
uint8_t mode;
|
||||
|
||||
|
||||
|
||||
if (!cca->use_ed && !cca->use_cs)
|
||||
|
||||
{
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (cca->use_cs && cca->csth > 0x0f)
|
||||
|
||||
{
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
mode = mrf24j40_getreg(dev->spi, MRF24J40_BBREG2);
|
||||
|
||||
mode &= 0x03;
|
||||
|
||||
|
||||
|
||||
if (cca->use_ed)
|
||||
|
||||
{
|
||||
|
||||
mode |= MRF24J40_BBREG2_CCAMODE_ED;
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_CCAEDTH, cca->edth);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (cca->use_cs)
|
||||
|
||||
{
|
||||
|
||||
mode |= MRF24J40_BBREG2_CCAMODE_CS;
|
||||
|
||||
mode |= cca->csth << 2;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_BBREG2, mode);
|
||||
|
||||
|
||||
|
||||
memcpy(&dev->cca, cca, sizeof(struct ieee802154_cca_s));
|
||||
|
||||
return OK;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
* Name: mrf24j40_regdump
|
||||
|
||||
*
|
||||
|
||||
* Description:
|
||||
|
||||
* Display the value of all registers.
|
||||
|
||||
*
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
|
||||
static int mrf24j40_regdump(FAR struct mrf24j40_radio_s *dev)
|
||||
|
||||
{
|
||||
|
||||
uint32_t i;
|
||||
|
||||
char buf[4+16*3+2+1];
|
||||
|
||||
int len = 0;
|
||||
|
||||
|
||||
|
||||
wlinfo("Short regs:\n");
|
||||
|
||||
|
||||
|
||||
for (i = 0; i < 0x40; i++)
|
||||
|
||||
{
|
||||
|
||||
if ((i & 15) == 0)
|
||||
|
||||
{
|
||||
|
||||
len=sprintf(buf, "%02x: ",i&0xFF);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
len += sprintf(buf+len, "%02x ", mrf24j40_getreg(dev->spi, i));
|
||||
|
||||
if ((i & 15) == 15)
|
||||
|
||||
{
|
||||
|
||||
sprintf(buf+len, "\n");
|
||||
|
||||
wlinfo("%s", buf);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
wlinfo("Long regs:\n");
|
||||
|
||||
for (i = 0x80000200; i < 0x80000250; i++)
|
||||
|
||||
{
|
||||
|
||||
if ((i & 15) == 0)
|
||||
|
||||
{
|
||||
|
||||
len=sprintf(buf, "%02x: ",i&0xFF);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
len += sprintf(buf+len, "%02x ", mrf24j40_getreg(dev->spi, i));
|
||||
|
||||
if ((i & 15) == 15)
|
||||
|
||||
{
|
||||
|
||||
sprintf(buf+len, "\n");
|
||||
|
||||
wlinfo("%s", buf);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
* Name: mrf24j40_energydetect
|
||||
|
||||
*
|
||||
|
||||
* Description:
|
||||
|
||||
* Measure the RSSI level for the current channel.
|
||||
|
||||
*
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
|
||||
static int mrf24j40_energydetect(FAR struct mrf24j40_radio_s *dev,
|
||||
|
||||
FAR uint8_t *energy)
|
||||
|
||||
{
|
||||
|
||||
uint8_t reg;
|
||||
|
||||
|
||||
|
||||
/* Manually enable the LNA*/
|
||||
|
||||
|
||||
|
||||
mrf24j40_pacontrol(dev, MRF24J40_PA_ED);
|
||||
|
||||
|
||||
|
||||
/* Set RSSI average duration to 8 symbols */
|
||||
|
||||
|
||||
|
||||
reg = mrf24j40_getreg(dev->spi, MRF24J40_TXBCON1);
|
||||
|
||||
reg |= 0x30;
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_TXBCON1, reg);
|
||||
|
||||
|
||||
|
||||
/* 1. Set RSSIMODE1 0x3E<7> – Initiate RSSI calculation. */
|
||||
|
||||
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_BBREG6, 0x80);
|
||||
|
||||
|
||||
|
||||
/* 2. Wait until RSSIRDY 0x3E<0> is set to ‘1’ – RSSI calculation is
|
||||
|
||||
* complete.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
while(!(mrf24j40_getreg(dev->spi, MRF24J40_BBREG6) & 0x01));
|
||||
|
||||
|
||||
|
||||
/* 3. Read RSSI 0x210<7:0> – The RSSI register contains the averaged RSSI
|
||||
|
||||
* received power level for 8 symbol periods.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
*energy = mrf24j40_getreg(dev->spi, MRF24J40_RSSI);
|
||||
|
||||
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_BBREG6, 0x40);
|
||||
|
||||
|
||||
|
||||
/* Back to automatic control */
|
||||
|
||||
|
||||
|
||||
mrf24j40_pacontrol(dev, MRF24J40_PA_AUTO);
|
||||
|
||||
return OK;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
* Name: mrf24j40_norm_setup
|
||||
|
||||
*
|
||||
|
||||
* Description:
|
||||
|
||||
* Setup a transaction in the normal TX FIFO
|
||||
|
||||
*
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
|
||||
static void mrf24j40_norm_setup(FAR struct mrf24j40_radio_s *dev,
|
||||
|
||||
FAR struct iob_s *frame, bool csma)
|
||||
|
||||
{
|
||||
|
||||
uint8_t reg;
|
||||
|
||||
|
||||
|
||||
/* Enable tx int */
|
||||
|
||||
|
||||
|
||||
reg = mrf24j40_getreg(dev->spi, MRF24J40_INTCON);
|
||||
|
||||
reg &= ~MRF24J40_INTCON_TXNIE;
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_INTCON, reg);
|
||||
|
||||
|
||||
|
||||
/* Enable/Disable CSMA mode */
|
||||
|
||||
|
||||
|
||||
reg = mrf24j40_getreg(dev->spi, MRF24J40_TXMCR);
|
||||
|
||||
|
||||
|
||||
if (csma)
|
||||
|
||||
{
|
||||
|
||||
reg &= ~MRF24J40_TXMCR_NOCSMA;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
|
||||
{
|
||||
|
||||
reg |= MRF24J40_TXMCR_NOCSMA;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_TXMCR, reg);
|
||||
|
||||
|
||||
|
||||
/* Setup the FIFO */
|
||||
|
||||
|
||||
|
||||
mrf24j40_setup_fifo(dev, frame->io_data, frame->io_len, MRF24J40_TXNORM_FIFO);
|
||||
|
||||
|
||||
|
||||
/* If the frame control field contains an acknowledgment request, set the
|
||||
|
||||
* TXNACKREQ bit. See IEEE 802.15.4/2003 7.2.1.1 page 112 for info.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
reg = mrf24j40_getreg(dev->spi, MRF24J40_TXNCON);
|
||||
|
||||
|
||||
|
||||
if (frame->io_data[0] & IEEE802154_FRAMECTRL_ACKREQ)
|
||||
|
||||
{
|
||||
|
||||
reg |= MRF24J40_TXNCON_TXNACKREQ;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
|
||||
{
|
||||
|
||||
reg &= ~MRF24J40_TXNCON_TXNACKREQ;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_TXNCON, reg);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
* Name: mrf24j40_norm_trigger
|
||||
|
||||
*
|
||||
|
||||
* Description:
|
||||
|
||||
* Trigger the normal TX FIFO
|
||||
|
||||
*
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
|
||||
static inline void mrf24j40_norm_trigger(FAR struct mrf24j40_radio_s *dev)
|
||||
|
||||
{
|
||||
|
||||
uint8_t reg;
|
||||
|
||||
|
||||
|
||||
reg = mrf24j40_getreg(dev->spi, MRF24J40_TXNCON);
|
||||
|
||||
|
||||
|
||||
reg |= MRF24J40_TXNCON_TXNTRIG;
|
||||
|
||||
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_TXNCON, reg);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
* Name: mrf24j40_beacon_trigger
|
||||
|
||||
*
|
||||
|
||||
* Description:
|
||||
|
||||
* Trigger the beacon TX FIFO
|
||||
|
||||
*
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
|
||||
static inline void mrf24j40_beacon_trigger(FAR struct mrf24j40_radio_s *dev)
|
||||
{
|
||||
uint8_t reg;
|
||||
@ -1727,6 +1967,7 @@ static void mrf24j40_setup_fifo(FAR struct mrf24j40_radio_s *dev,
|
||||
FAR const uint8_t *buf, uint8_t length,
|
||||
uint32_t fifo_addr)
|
||||
{
|
||||
|
||||
int hlen = 3; /* Include frame control and seq number */
|
||||
int i;
|
||||
uint16_t frame_ctrl;
|
||||
@ -1763,6 +2004,7 @@ static void mrf24j40_setup_fifo(FAR struct mrf24j40_radio_s *dev,
|
||||
|
||||
mrf24j40_setreg(dev->spi, fifo_addr++, hlen);
|
||||
|
||||
|
||||
/* Frame length */
|
||||
|
||||
mrf24j40_setreg(dev->spi, fifo_addr++, length);
|
||||
@ -1832,6 +2074,7 @@ static void mrf24j40_irqwork_txnorm(FAR struct mrf24j40_radio_s *dev)
|
||||
MRF24J40_TXNCON_FPSTAT);
|
||||
|
||||
if (dev->txdelayed_busy)
|
||||
|
||||
{
|
||||
/* Inform the next layer of the transmission success/failure */
|
||||
|
||||
@ -1973,6 +2216,7 @@ static int mrf24j40_rxenable(FAR struct ieee802154_radio_s *radio, bool enable)
|
||||
****************************************************************************/
|
||||
|
||||
static void mrf24j40_irqwork_rx(FAR struct mrf24j40_radio_s *dev)
|
||||
|
||||
{
|
||||
FAR struct ieee802154_data_ind_s *ind;
|
||||
uint32_t addr;
|
||||
@ -2255,3 +2499,4 @@ FAR struct ieee802154_radio_s *mrf24j40_init(FAR struct spi_dev_s *spi,
|
||||
dev->lower->enable(dev->lower, true);
|
||||
return &dev->radio;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
* drivers/wireless/ieee802154/mrf24j40.h
|
||||
* drivers/wireless/ieee802154/mrf24j40/mrf24j40.h
|
||||
*
|
||||
* Copyright (C) 2015-2016 Sebastien Lorquet. All rights reserved.
|
||||
* Author: Sebastien Lorquet <sebastien@lorquet.fr>
|
||||
@ -33,8 +33,8 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __DRIVERS_WIRELESS_IEEE802154_MRF24J40_H
|
||||
#define __DRIVERS_WIRELESS_IEEE802154_MRF24J40_H
|
||||
#ifndef __DRIVERS_WIRELESS_IEEE802154_MRF24J40_MRF24J40_H
|
||||
#define __DRIVERS_WIRELESS_IEEE802154_MRF24J40_MRF24J40_H
|
||||
|
||||
/* MRF24J40 Registers *******************************************************/
|
||||
|
||||
@ -286,4 +286,353 @@
|
||||
#define MRF24J40_RXFLUSH_SHIFT_WAKEPAD 5
|
||||
#define MRF24J40_RXFLUSH_SHIFT_WAKEPOL 6
|
||||
|
||||
#endif /* __DRIVERS_WIRELESS_IEEE802154_MRF24J40_H */
|
||||
#endif /* __DRIVERS_WIRELESS_IEEE802154_MRF24J40_MRF24J40_H */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user