Merge pull request #14197 from benpicco/driver/at86rf215_cleanup

driver/at86rf215: cleanup
This commit is contained in:
Leandro Lanzieri 2020-06-09 18:38:57 +02:00 committed by GitHub
commit ab996823ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 168 additions and 25 deletions

View File

@ -38,4 +38,98 @@ config AT86RF215_TRIM_VAL
26 MHz the best.
For more information Refer Table 6-25 TRIM in Datasheet
choice
prompt "Default Modulation"
config AT86RF215_DEFAULT_LEGACY_OQPSK
bool "legacy O-QPSK"
help
O-QPSK compatible with IEEE 802.15.4-2003 devices
config AT86RF215_DEFAULT_MR_OQPSK
bool "MR-O-QPSK"
help
MR-O-QPSK according to IEEE 802.15.4g
config AT86RF215_DEFAULT_MR_OFDM
bool "MR-OFDM"
help
MR-O-OFDM according to IEEE 802.15.4g
endchoice
menu "O-QPSK (802.15.4) configuration"
depends on AT86RF215_DEFAULT_LEGACY_OQPSK
config AT86RF215_DEFAULT_OQPSK_RATE
int "Default (legacy) O-QPSK rate mode"
range 0 1
default 0
help
The at86rf215 supports proprietary high data rates that are compatible
with the at86rf2xx parts.
Set this to 1 to configure the proprietary high-data rate option as default.
If unsure, leave this at 0.
endmenu # legacy O-QPSK
menu "MR-O-QPSK (802.15.4g) configuration"
depends on AT86RF215_DEFAULT_MR_OQPSK
config AT86RF215_DEFAULT_MR_OQPSK_RATE
int "Default MR-O-QPSK rate mode"
range 0 3
default 2
help
Default Rate Mode of the MR-O-QPSK PHY
Each increment doubles the PSDU data rate.
choice
prompt "Default MR-O-QPSK Chip Rate"
config AT86RF215_DEFAULT_MR_OQPSK_CHIPS_100
bool "100 kchip/s"
config AT86RF215_DEFAULT_MR_OQPSK_CHIPS_200
bool "200 kchip/s"
config AT86RF215_DEFAULT_MR_OQPSK_CHIPS_1000
bool "1000 kchip/s"
config AT86RF215_DEFAULT_MR_OQPSK_CHIPS_2000
bool "2000 kchip/s"
endchoice
endmenu # MR-O-QPSK
menu "MR-OFDM (802.15.4g) configuration"
depends on AT86RF215_DEFAULT_MR_OFDM
config AT86RF215_DEFAULT_MR_OFDM_OPT
int "Default MR-OFDM option"
range 1 4
default 2
help
Default Option of the MR-OFDM PHY
Each increment halves the PSDU data rate.
config AT86RF215_DEFAULT_MR_OFDM_MCS
int "Default MR-OFDM Modulation & Coding Scheme"
range 0 6
default 2
help
Default Modulation & Coding Scheme of the MR-OFDM PHY.
Higher schemes correspond to higher data rates and lower range.
0: BPSK, rate 12, 4 x frequency repetition
1: BPSK, rate 12, 2 x frequency repetition
2: QPSK, rate 12, 2 x frequency repetition
3: QPSK, rate 12
4: QPSK, rate 34
5: 16-QAM, rate 12
6: 16-QAM, rate 34
endmenu
endif # KCONFIG_MODULE_AT86RF215

View File

@ -18,6 +18,7 @@
*/
#include "luid.h"
#include "board.h"
#include "byteorder.h"
#include "net/ieee802154.h"
#include "net/gnrc.h"
@ -66,9 +67,9 @@ void at86rf215_reset_and_cfg(at86rf215_t *dev)
luid_get_eui64((eui64_t *)&dev->netdev.long_addr);
if (is_subGHz(dev)) {
dev->netdev.chan = AT86RF215_DEFAULT_SUBGHZ_CHANNEL;
dev->netdev.chan = CONFIG_AT86RF215_DEFAULT_SUBGHZ_CHANNEL;
} else {
dev->netdev.chan = AT86RF215_DEFAULT_CHANNEL;
dev->netdev.chan = CONFIG_AT86RF215_DEFAULT_CHANNEL;
}
dev->netdev.pan = CONFIG_IEEE802154_DEFAULT_PANID;
@ -144,14 +145,14 @@ if (!IS_ACTIVE(CONFIG_AT86RF215_USE_CLOCK_OUTPUT)){
at86rf215_reg_write(dev, dev->BBC->RG_AMCS, reg);
if (AT86RF215_DEFAULT_PHY_MODE == IEEE802154_PHY_OQPSK) {
at86rf215_configure_legacy_OQPSK(dev, 0);
if (CONFIG_AT86RF215_DEFAULT_PHY_MODE == IEEE802154_PHY_OQPSK) {
at86rf215_configure_legacy_OQPSK(dev, CONFIG_AT86RF215_DEFAULT_OQPSK_RATE);
}
if (AT86RF215_DEFAULT_PHY_MODE == IEEE802154_PHY_MR_OQPSK) {
at86rf215_configure_OQPSK(dev, AT86RF215_DEFAULT_MR_OQPSK_CHIPS,
AT86RF215_DEFAULT_MR_OQPSK_RATE);
if (CONFIG_AT86RF215_DEFAULT_PHY_MODE == IEEE802154_PHY_MR_OQPSK) {
at86rf215_configure_OQPSK(dev, CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS,
CONFIG_AT86RF215_DEFAULT_MR_OQPSK_RATE);
}
if (AT86RF215_DEFAULT_PHY_MODE == IEEE802154_PHY_MR_OFDM) {
if (CONFIG_AT86RF215_DEFAULT_PHY_MODE == IEEE802154_PHY_MR_OFDM) {
at86rf215_configure_OFDM(dev, CONFIG_AT86RF215_DEFAULT_MR_OFDM_OPT,
CONFIG_AT86RF215_DEFAULT_MR_OFDM_MCS);
}
@ -169,7 +170,7 @@ if (!IS_ACTIVE(CONFIG_AT86RF215_USE_CLOCK_OUTPUT)){
at86rf215_set_pan(dev, 0, dev->netdev.pan);
/* set default TX power */
at86rf215_set_txpower(dev, AT86RF215_DEFAULT_TXPOWER);
at86rf215_set_txpower(dev, CONFIG_AT86RF215_DEFAULT_TXPOWER);
/* start listening for incoming packets */
at86rf215_rf_cmd(dev, CMD_RF_RX);

View File

@ -394,6 +394,7 @@ static int _get(netdev_t *netdev, netopt_t opt, void *val, size_t max_len)
res = max_len;
break;
#ifdef MODULE_NETDEV_IEEE802154_MR_OFDM
case NETOPT_MR_OFDM_OPTION:
assert(max_len >= sizeof(int8_t));
*((int8_t *)val) = at86rf215_OFDM_get_option(dev);
@ -405,7 +406,8 @@ static int _get(netdev_t *netdev, netopt_t opt, void *val, size_t max_len)
*((int8_t *)val) = at86rf215_OFDM_get_scheme(dev);
res = max_len;
break;
#endif /* MODULE_NETDEV_IEEE802154_MR_OFDM */
#ifdef MODULE_NETDEV_IEEE802154_MR_OQPSK
case NETOPT_MR_OQPSK_CHIPS:
assert(max_len >= sizeof(int16_t));
switch (at86rf215_OQPSK_get_chips(dev)) {
@ -422,13 +424,14 @@ static int _get(netdev_t *netdev, netopt_t opt, void *val, size_t max_len)
*((int8_t *)val) = at86rf215_OQPSK_get_mode(dev);
res = max_len;
break;
#endif /* MODULE_NETDEV_IEEE802154_MR_OQPSK */
#ifdef MODULE_NETDEV_IEEE802154_OQPSK
case NETOPT_OQPSK_RATE:
assert(max_len >= sizeof(int8_t));
*((int8_t *)val) = at86rf215_OQPSK_get_mode_legacy(dev);
res = max_len;
break;
#endif /* MODULE_NETDEV_IEEE802154_OQPSK */
default:
res = -ENOTSUP;
break;
@ -576,27 +579,34 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
case NETOPT_IEEE802154_PHY:
assert(len <= sizeof(uint8_t));
switch (*(uint8_t *)val) {
#ifdef MODULE_NETDEV_IEEE802154_OQPSK
case IEEE802154_PHY_OQPSK:
at86rf215_configure_legacy_OQPSK(dev, at86rf215_OQPSK_get_mode_legacy(dev));
res = sizeof(uint8_t);
break;
#endif /* MODULE_NETDEV_IEEE802154_OQPSK */
#ifdef MODULE_NETDEV_IEEE802154_MR_OQPSK
case IEEE802154_PHY_MR_OQPSK:
at86rf215_configure_OQPSK(dev,
at86rf215_OQPSK_get_chips(dev),
at86rf215_OQPSK_get_mode(dev));
res = sizeof(uint8_t);
break;
#endif /* MODULE_NETDEV_IEEE802154_MR_OQPSK */
#ifdef MODULE_NETDEV_IEEE802154_MR_OFDM
case IEEE802154_PHY_MR_OFDM:
at86rf215_configure_OFDM(dev,
at86rf215_OFDM_get_option(dev),
at86rf215_OFDM_get_scheme(dev));
res = sizeof(uint8_t);
break;
#endif /* MODULE_NETDEV_IEEE802154_MR_OFDM */
default:
return -ENOTSUP;
}
break;
#ifdef MODULE_NETDEV_IEEE802154_MR_OFDM
case NETOPT_MR_OFDM_OPTION:
if (at86rf215_get_phy_mode(dev) != IEEE802154_PHY_MR_OFDM) {
return -ENOTSUP;
@ -622,7 +632,8 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
res = -ERANGE;
}
break;
#endif /* MODULE_NETDEV_IEEE802154_MR_OFDM */
#ifdef MODULE_NETDEV_IEEE802154_MR_OQPSK
case NETOPT_MR_OQPSK_CHIPS:
if (at86rf215_get_phy_mode(dev) != IEEE802154_PHY_MR_OQPSK) {
return -ENOTSUP;
@ -662,7 +673,8 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
res = -ERANGE;
}
break;
#endif /* MODULE_NETDEV_IEEE802154_MR_OQPSK */
#ifdef MODULE_NETDEV_IEEE802154_OQPSK
case NETOPT_OQPSK_RATE:
if (at86rf215_get_phy_mode(dev) != IEEE802154_PHY_OQPSK) {
return -ENOTSUP;
@ -675,7 +687,7 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
res = -ERANGE;
}
break;
#endif /* MODULE_NETDEV_IEEE802154_OQPSK */
default:
break;
}

View File

@ -100,22 +100,44 @@ enum {
*/
#define CONFIG_AT86RF215_TRIM_VAL (0)
#endif
/** @} */
/**
* @name Channel configuration
* @{
*/
#define AT86RF215_DEFAULT_CHANNEL (CONFIG_IEEE802154_DEFAULT_CHANNEL)
#define AT86RF215_DEFAULT_SUBGHZ_CHANNEL (CONFIG_IEEE802154_DEFAULT_SUBGHZ_CHANNEL)
#ifndef CONFIG_AT86RF215_DEFAULT_CHANNEL
#define CONFIG_AT86RF215_DEFAULT_CHANNEL (CONFIG_IEEE802154_DEFAULT_CHANNEL)
#endif
#ifndef CONFIG_AT86RF215_DEFAULT_SUBGHZ_CHANNEL
#define CONFIG_AT86RF215_DEFAULT_SUBGHZ_CHANNEL (CONFIG_IEEE802154_DEFAULT_SUBGHZ_CHANNEL)
#endif
/** @} */
/**
* @name Default PHY Mode
* @{
*/
#ifndef AT86RF215_DEFAULT_PHY_MODE
#define AT86RF215_DEFAULT_PHY_MODE (IEEE802154_PHY_OQPSK)
#if IS_ACTIVE(CONFIG_AT86RF215_DEFAULT_LEGACY_OQPSK)
#define CONFIG_AT86RF215_DEFAULT_PHY_MODE (IEEE802154_PHY_OQPSK)
#elif IS_ACTIVE(CONFIG_AT86RF215_DEFAULT_MR_OQPSK)
#define CONFIG_AT86RF215_DEFAULT_PHY_MODE (IEEE802154_PHY_MR_OQPSK)
#elif IS_ACTIVE(CONFIG_AT86RF215_DEFAULT_MR_OFDM)
#define CONFIG_AT86RF215_DEFAULT_PHY_MODE (IEEE802154_PHY_MR_OFDM)
#endif
#ifndef CONFIG_AT86RF215_DEFAULT_PHY_MODE
#define CONFIG_AT86RF215_DEFAULT_PHY_MODE (IEEE802154_PHY_OQPSK)
#endif
/** @} */
/**
* @name Default O-QPSK Rate Mode
* Non-zero value enables proprietary high data rate by default
* @{
*/
#ifndef CONFIG_AT86RF215_DEFAULT_OQPSK_RATE
#define CONFIG_AT86RF215_DEFAULT_OQPSK_RATE (0)
#endif
/** @} */
@ -123,8 +145,18 @@ enum {
* @name Default MR-O-QPSK Chip Rate
* @{
*/
#ifndef AT86RF215_DEFAULT_MR_OQPSK_CHIPS
#define AT86RF215_DEFAULT_MR_OQPSK_CHIPS (AT86RF215_FCHIP_1000)
#if IS_ACTIVE(CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS_100)
#define CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS (AT86RF215_FCHIP_100)
#elif IS_ACTIVE(CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS_200)
#define CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS (AT86RF215_FCHIP_200)
#elif IS_ACTIVE(CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS_1000)
#define CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS (AT86RF215_FCHIP_1000)
#elif IS_ACTIVE(CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS_2000)
#define CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS (AT86RF215_FCHIP_2000)
#endif
#ifndef CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS
#define CONFIG_AT86RF215_DEFAULT_MR_OQPSK_CHIPS (AT86RF215_FCHIP_1000)
#endif
/** @} */
@ -132,8 +164,8 @@ enum {
* @name Default MR-O-QPSK Rate Mode
* @{
*/
#ifndef AT86RF215_DEFAULT_MR_OQPSK_RATE
#define AT86RF215_DEFAULT_MR_OQPSK_RATE (2)
#ifndef CONFIG_AT86RF215_DEFAULT_MR_OQPSK_RATE
#define CONFIG_AT86RF215_DEFAULT_MR_OQPSK_RATE (2)
#endif
/** @} */
@ -158,7 +190,11 @@ enum {
/**
* @brief Default TX power (0dBm)
*/
#define AT86RF215_DEFAULT_TXPOWER (CONFIG_IEEE802154_DEFAULT_TXPOWER)
#ifndef CONFIG_AT86RF215_DEFAULT_TXPOWER
#define CONFIG_AT86RF215_DEFAULT_TXPOWER (CONFIG_IEEE802154_DEFAULT_TXPOWER)
#endif
/** @} */
/**
* @name Flags for device internal states (see datasheet)