Merge pull request #14047 from benpicco/drivers/mrf24j40-turbo
drivers/mrf24j40: add Turbo Mode
This commit is contained in:
commit
391f49fade
@ -486,6 +486,7 @@ endif
|
|||||||
|
|
||||||
ifneq (,$(filter mrf24j40m%,$(USEMODULE)))
|
ifneq (,$(filter mrf24j40m%,$(USEMODULE)))
|
||||||
USEMODULE += mrf24j40
|
USEMODULE += mrf24j40
|
||||||
|
DEFAULT_MODULE += netdev_ieee802154_oqpsk
|
||||||
|
|
||||||
ifndef CONFIG_KCONFIG_MODULE_MRF24J40
|
ifndef CONFIG_KCONFIG_MODULE_MRF24J40
|
||||||
# all modules but mrf24j40ma have an external PA
|
# all modules but mrf24j40ma have an external PA
|
||||||
|
|||||||
@ -360,6 +360,27 @@ void mrf24j40_set_option(mrf24j40_t *dev, uint16_t option, bool state);
|
|||||||
*/
|
*/
|
||||||
void mrf24j40_set_state(mrf24j40_t *dev, uint8_t state);
|
void mrf24j40_set_state(mrf24j40_t *dev, uint8_t state);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable or disable proprietary Turbo Mode.
|
||||||
|
*
|
||||||
|
* Turbo mode is only compatible with other mrf24j40 chips.
|
||||||
|
*
|
||||||
|
* turbo off: 250 kbit/s (IEEE mode)
|
||||||
|
* turbo on: 625 kbit/s
|
||||||
|
*
|
||||||
|
* @param[in] dev device to change state of
|
||||||
|
* @param[in] enable turbo mode control
|
||||||
|
*/
|
||||||
|
void mrf24j40_set_turbo(mrf24j40_t *dev, bool enable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Query the state of the turbo mode
|
||||||
|
*
|
||||||
|
* @param[in] dev device to query
|
||||||
|
* @return true if Turbo Mode is enabled
|
||||||
|
*/
|
||||||
|
bool mrf24j40_get_turbo(mrf24j40_t *dev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Put in sleep mode
|
* @brief Put in sleep mode
|
||||||
*
|
*
|
||||||
|
|||||||
@ -121,6 +121,16 @@ static const uint8_t RSSI_value[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
|
|
||||||
|
static void mrf24j40_baseband_reset(mrf24j40_t *dev)
|
||||||
|
{
|
||||||
|
uint8_t softrst;
|
||||||
|
|
||||||
|
mrf24j40_reg_write_short(dev, MRF24J40_REG_SOFTRST, MRF24J40_SOFTRST_RSTBB);
|
||||||
|
do {
|
||||||
|
softrst = mrf24j40_reg_read_short(dev, MRF24J40_REG_SOFTRST);
|
||||||
|
} while (softrst != 0); /* wait until soft-reset has finished */
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t mrf24j40_get_addr_short(mrf24j40_t *dev)
|
uint16_t mrf24j40_get_addr_short(mrf24j40_t *dev)
|
||||||
{
|
{
|
||||||
network_uint16_t naddr;
|
network_uint16_t naddr;
|
||||||
@ -329,6 +339,32 @@ void mrf24j40_set_cca_threshold(mrf24j40_t *dev, int8_t value)
|
|||||||
mrf24j40_reg_write_short(dev, MRF24J40_REG_CCAEDTH, RSSI_value[value]);
|
mrf24j40_reg_write_short(dev, MRF24J40_REG_CCAEDTH, RSSI_value[value]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mrf24j40_set_turbo(mrf24j40_t *dev, bool on)
|
||||||
|
{
|
||||||
|
uint8_t tmp;
|
||||||
|
static const uint8_t cfg[2][2] = {
|
||||||
|
{0xD0, 0x80}, /* IEEE mode */
|
||||||
|
{0x30, 0x40} /* Turbo mode */
|
||||||
|
};
|
||||||
|
|
||||||
|
mrf24j40_reg_write_short(dev, MRF24J40_REG_BBREG0, on);
|
||||||
|
|
||||||
|
/* Set Preamble Search Energy Valid Threshold */
|
||||||
|
tmp = mrf24j40_reg_read_short(dev, MRF24J40_REG_BBREG3) & 0xF;
|
||||||
|
mrf24j40_reg_write_short(dev, MRF24J40_REG_BBREG3, tmp | cfg[on][0]);
|
||||||
|
|
||||||
|
/* Set Carrier Sense Threshold */
|
||||||
|
tmp = mrf24j40_reg_read_short(dev, MRF24J40_REG_BBREG4) & 0x1F;
|
||||||
|
mrf24j40_reg_write_short(dev, MRF24J40_REG_BBREG4, tmp | cfg[on][1]);
|
||||||
|
|
||||||
|
mrf24j40_baseband_reset(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mrf24j40_get_turbo(mrf24j40_t *dev)
|
||||||
|
{
|
||||||
|
return mrf24j40_reg_read_short(dev, MRF24J40_REG_BBREG0);
|
||||||
|
}
|
||||||
|
|
||||||
void mrf24j40_set_option(mrf24j40_t *dev, uint16_t option, bool state)
|
void mrf24j40_set_option(mrf24j40_t *dev, uint16_t option, bool state)
|
||||||
{
|
{
|
||||||
uint8_t tmp;
|
uint8_t tmp;
|
||||||
|
|||||||
@ -330,6 +330,20 @@ static int _get(netdev_t *netdev, netopt_t opt, void *val, size_t max_len)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef MODULE_NETDEV_IEEE802154_OQPSK
|
||||||
|
|
||||||
|
case NETOPT_IEEE802154_PHY:
|
||||||
|
assert(max_len >= sizeof(int8_t));
|
||||||
|
*(uint8_t *)val = IEEE802154_PHY_OQPSK;
|
||||||
|
return sizeof(uint8_t);
|
||||||
|
|
||||||
|
case NETOPT_OQPSK_RATE:
|
||||||
|
assert(max_len >= sizeof(int8_t));
|
||||||
|
*(uint8_t *)val = mrf24j40_get_turbo(dev);
|
||||||
|
return sizeof(uint8_t);
|
||||||
|
|
||||||
|
#endif /* MODULE_NETDEV_IEEE802154_OQPSK */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* try netdev settings */
|
/* try netdev settings */
|
||||||
res = netdev_ieee802154_get((netdev_ieee802154_t *)netdev, opt,
|
res = netdev_ieee802154_get((netdev_ieee802154_t *)netdev, opt,
|
||||||
@ -524,6 +538,16 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef MODULE_NETDEV_IEEE802154_OQPSK
|
||||||
|
|
||||||
|
case NETOPT_OQPSK_RATE:
|
||||||
|
res = !!*(uint8_t *)val;
|
||||||
|
mrf24j40_set_turbo(dev, res);
|
||||||
|
res = sizeof(uint8_t);
|
||||||
|
break;
|
||||||
|
|
||||||
|
#endif /* MODULE_NETDEV_IEEE802154_OQPSK */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user