1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-24 14:03:55 +01:00

Merge pull request #15007 from akshaim/Kconfig_lora

net/lora : Expose configurations to Kconfig
This commit is contained in:
José Alamos 2020-10-02 11:01:52 +02:00 committed by GitHub
commit f30da14341
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 306 additions and 47 deletions

View File

@ -27,6 +27,7 @@
#include "timex.h"
#include "ztimer.h"
#include "thread.h"
#include "kernel_defines.h"
#include "periph/gpio.h"
#include "periph/spi.h"
@ -171,17 +172,18 @@ void sx127x_init_radio_settings(sx127x_t *dev)
sx127x_set_channel(dev, SX127X_CHANNEL_DEFAULT);
sx127x_set_modem(dev, SX127X_MODEM_DEFAULT);
sx127x_set_tx_power(dev, SX127X_RADIO_TX_POWER);
sx127x_set_bandwidth(dev, LORA_BW_DEFAULT);
sx127x_set_spreading_factor(dev, LORA_SF_DEFAULT);
sx127x_set_coding_rate(dev, LORA_CR_DEFAULT);
sx127x_set_bandwidth(dev, CONFIG_LORA_BW_DEFAULT);
sx127x_set_spreading_factor(dev, CONFIG_LORA_SF_DEFAULT);
sx127x_set_coding_rate(dev, CONFIG_LORA_CR_DEFAULT);
sx127x_set_crc(dev, LORA_PAYLOAD_CRC_ON_DEFAULT);
sx127x_set_freq_hop(dev, LORA_FREQUENCY_HOPPING_DEFAULT);
sx127x_set_hop_period(dev, LORA_FREQUENCY_HOPPING_PERIOD_DEFAULT);
sx127x_set_fixed_header_len_mode(dev, LORA_FIXED_HEADER_LEN_MODE_DEFAULT);
sx127x_set_iq_invert(dev, LORA_IQ_INVERTED_DEFAULT);
sx127x_set_payload_length(dev, LORA_PAYLOAD_LENGTH_DEFAULT);
sx127x_set_preamble_length(dev, LORA_PREAMBLE_LENGTH_DEFAULT);
sx127x_set_symbol_timeout(dev, LORA_SYMBOL_TIMEOUT_DEFAULT);
sx127x_set_freq_hop(dev, IS_ACTIVE(CONFIG_LORA_FREQUENCY_HOPPING_DEFAULT) ? true : false);
sx127x_set_hop_period(dev, CONFIG_LORA_FREQUENCY_HOPPING_PERIOD_DEFAULT);
sx127x_set_fixed_header_len_mode(dev, IS_ACTIVE(CONFIG_LORA_FIXED_HEADER_LEN_MODE_DEFAULT) ?
true : false);
sx127x_set_iq_invert(dev, IS_ACTIVE(CONFIG_LORA_IQ_INVERTED_DEFAULT) ? true : false);
sx127x_set_payload_length(dev, CONFIG_LORA_PAYLOAD_LENGTH_DEFAULT);
sx127x_set_preamble_length(dev, CONFIG_LORA_PREAMBLE_LENGTH_DEFAULT);
sx127x_set_symbol_timeout(dev, CONFIG_LORA_SYMBOL_TIMEOUT_DEFAULT);
sx127x_set_rx_single(dev, SX127X_RX_SINGLE);
sx127x_set_tx_timeout(dev, SX127X_TX_TIMEOUT_DEFAULT);
}
@ -292,7 +294,7 @@ static int _init_gpios(sx127x_t *dev)
}
else {
/* if frequency hopping is enabled, DIO2 pin must be defined */
assert(LORA_FREQUENCY_HOPPING_DEFAULT == false);
assert(!IS_ACTIVE(CONFIG_LORA_FREQUENCY_HOPPING_DEFAULT));
}
/* check if DIO3 pin is defined */

View File

@ -24,6 +24,8 @@
#include <stdint.h>
#include <stdlib.h>
#include "kernel_defines.h"
#ifdef __cplusplus
extern "C" {
#endif
@ -38,66 +40,165 @@ extern "C" {
#define LORA_FREQUENCY_RESOLUTION_DEFAULT (61.03515625)
#endif
/** @brief Preamble length, same for Tx and Rx */
#ifndef LORA_PREAMBLE_LENGTH_DEFAULT
#define LORA_PREAMBLE_LENGTH_DEFAULT (8U)
/** @brief Preamble length, same for Tx and Rx
*
* Configure preamble used in LoRa frame. Each LoRa frame begins with a
* preamble. It starts with a series of upchirps to cover the whole frequency
* band of the particular channel assigned. The last two upchirps encode the
* sync word. Sync word is used to differentiate between LoRa transmissions that
* use the same frequency bands. The sync word is followed by two and a quarter
* downchirps, for a duration of 2.25 symbols. The total duration of this
* preamble can be configured between 10.25 and 65,539.25 symbol hence the value
* can range from 8 to 65537.
*/
#ifndef CONFIG_LORA_PREAMBLE_LENGTH_DEFAULT
#define CONFIG_LORA_PREAMBLE_LENGTH_DEFAULT (8U)
#endif
/** @brief Symbols timeout (s) */
#ifndef LORA_SYMBOL_TIMEOUT_DEFAULT
#define LORA_SYMBOL_TIMEOUT_DEFAULT (10U)
/** @brief Symbol timeout period in symbols
*
* Configure symbol time out in terms of number of symbols. One symbol has a
* length in time of (2^SF)/BW seconds.
*/
#ifndef CONFIG_LORA_SYMBOL_TIMEOUT_DEFAULT
#define CONFIG_LORA_SYMBOL_TIMEOUT_DEFAULT (10U)
#endif
/** @brief Set default bandwidth to 125kHz */
#ifndef LORA_BW_DEFAULT
#define LORA_BW_DEFAULT (LORA_BW_125_KHZ)
/** @brief Set channel bandwidth
*
* Configure the channel bandwidth. Refer to country specific regulation on
* channel usage to identify the correct bandwidth.
*/
#if IS_ACTIVE(CONFIG_LORA_BW_DEFAULT_125)
#define CONFIG_LORA_BW_DEFAULT (LORA_BW_125_KHZ)
#elif IS_ACTIVE(CONFIG_LORA_BW_DEFAULT_250)
#define CONFIG_LORA_BW_DEFAULT (LORA_BW_250_KHZ)
#elif IS_ACTIVE(CONFIG_LORA_BW_DEFAULT_500)
#define CONFIG_LORA_BW_DEFAULT (LORA_BW_500_KHZ)
#endif
/** @brief Set default spreading factor to 12 */
#ifndef LORA_SF_DEFAULT
#define LORA_SF_DEFAULT (LORA_SF12)
#ifndef CONFIG_LORA_BW_DEFAULT
#define CONFIG_LORA_BW_DEFAULT (LORA_BW_125_KHZ)
#endif
/** @brief Set default coding rate to 8 */
#ifndef LORA_CR_DEFAULT
#define LORA_CR_DEFAULT (LORA_CR_4_8)
/** @brief Set Spreading Factor (SF)
*
* Configure Spreading Factor (SF). SF denotes the amount of spreading code
* applied to the original data signal. A larger SF increases the time on air,
* which increases energy consumption, reduces the data rate, and improves
* communication range. Each step up in spreading factor effectively doubles the
* time on air to transmit the same amount of data. Refer to country specific
* air time usage regulations before varying the SF. To calculate air time refer
* https://www.loratools.nl/#/airtime .
*/
#if IS_ACTIVE(CONFIG_LORA_SF_DEFAULT_SF6)
#define CONFIG_LORA_SF_DEFAULT (LORA_SF6)
#elif IS_ACTIVE(CONFIG_LORA_SF_DEFAULT_SF7)
#define CONFIG_LORA_SF_DEFAULT (LORA_SF7)
#elif IS_ACTIVE(CONFIG_LORA_SF_DEFAULT_SF8)
#define CONFIG_LORA_SF_DEFAULT (LORA_SF8)
#elif IS_ACTIVE(CONFIG_LORA_SF_DEFAULT_SF9)
#define CONFIG_LORA_SF_DEFAULT (LORA_SF9)
#elif IS_ACTIVE(CONFIG_LORA_SF_DEFAULT_SF10)
#define CONFIG_LORA_SF_DEFAULT (LORA_SF10)
#elif IS_ACTIVE(CONFIG_LORA_SF_DEFAULT_SF11)
#define CONFIG_LORA_SF_DEFAULT (LORA_SF11)
#elif IS_ACTIVE(CONFIG_LORA_SF_DEFAULT_SF12)
#define CONFIG_LORA_SF_DEFAULT (LORA_SF12)
#endif
/** @brief Set fixed payload length on */
#ifndef LORA_FIX_LENGTH_PAYLOAD_ON_DEFAULT
#define LORA_FIX_LENGTH_PAYLOAD_ON_DEFAULT (false)
#ifndef CONFIG_LORA_SF_DEFAULT
#define CONFIG_LORA_SF_DEFAULT (LORA_SF7)
#endif
/** @brief Set inverted IQ on */
#ifndef LORA_IQ_INVERTED_DEFAULT
#define LORA_IQ_INVERTED_DEFAULT (false)
/** @brief Set Coding Rate (CR)
*
* Configure Coding Rate (CR). CR denotes the implementation of forward error
* correction (FEC). This may be done by encoding 4-bit data with redundancies
* into 5-bit, 6-bit, 7-bit, or 8-bit. Coding Rate (CR) value need to be
* adjusted according to conditions of the channel used for data transmission.
* If there are too many interferences in the channel, then its recommended to
* increase the value of CR. However, the rise in CR value will also increase
* the duration for the transmission. Refer to country specific air time usage
* regulations before varying the CR. To calculate air time refer
* https://www.loratools.nl/#/airtime .
*/
#if IS_ACTIVE(CONFIG_LORA_CR_DEFAULT_CR_4_5)
#define CONFIG_LORA_CR_DEFAULT (LORA_CR_4_5)
#elif IS_ACTIVE(CONFIG_LORA_CR_DEFAULT_CR_4_6)
#define CONFIG_LORA_CR_DEFAULT (LORA_CR_4_6)
#elif IS_ACTIVE(CONFIG_LORA_CR_DEFAULT_CR_4_7)
#define CONFIG_LORA_CR_DEFAULT (LORA_CR_4_7)
#elif IS_ACTIVE(CONFIG_LORA_CR_DEFAULT_CR_4_8)
#define CONFIG_LORA_CR_DEFAULT (LORA_CR_4_8)
#endif
/** @brief Frequency hopping on */
#ifndef LORA_FREQUENCY_HOPPING_DEFAULT
#define LORA_FREQUENCY_HOPPING_DEFAULT (false)
#ifndef CONFIG_LORA_CR_DEFAULT
#define CONFIG_LORA_CR_DEFAULT (LORA_CR_4_5)
#endif
/** @brief Frequency hopping period */
#ifndef LORA_FREQUENCY_HOPPING_PERIOD_DEFAULT
#define LORA_FREQUENCY_HOPPING_PERIOD_DEFAULT (0U)
/** @brief Set this to 1 to enable inverted I/Q mode
*
* Enable this to invert the IQ signals used in RF modulation circuit. For more
* information on I/Q modulation technique visit http://www.ni.com/tutorial/4805/en/
*/
#ifdef DOXYGEN
#define CONFIG_LORA_IQ_INVERTED_DEFAULT
#endif
/** @brief Set fixed header length mode (implicit header) */
#ifndef LORA_FIXED_HEADER_LEN_MODE_DEFAULT
#define LORA_FIXED_HEADER_LEN_MODE_DEFAULT (false)
/** @brief Set this to 1 to enable frequency hopping
*
* If Frequency hopping spread spectrum (FHSS) is enabled a portion of each LoRa
* packet is transmitted on each hopping channel from a look up table of
* frequencies managed by the host microcontroller.
*/
#ifdef DOXYGEN
#define CONFIG_LORA_FREQUENCY_HOPPING_DEFAULT
#endif
/** @brief Enable payload CRC, optional */
/** @brief Frequency hopping period in symbols
*
* Configure the hopping period, in symbols, time which each transmission will
* dwell in any given channel. One symbol has a length in time of (2^SF)/BW
* seconds.
*/
#ifndef CONFIG_LORA_FREQUENCY_HOPPING_PERIOD_DEFAULT
#define CONFIG_LORA_FREQUENCY_HOPPING_PERIOD_DEFAULT (0U)
#endif
/** @brief Set this to 1 to enable fixed header length mode (implicit header)
*
* If fixed header length mode ( implicit header mode) is enabled, PHY header
* (`PHDR`) in LoRa frame is discarded. For more information, refer to the
* section "LoRa frame structure" in this
* <a href="https://link.springer.com/article/10.1186/s13638-019-1542-x">publication</a>
*/
#ifdef DOXYGEN
#define CONFIG_LORA_FIXED_HEADER_LEN_MODE_DEFAULT
#endif
/** @brief Enable/disable payload CRC, optional
*
* @deprecated Use inverse `CONFIG_LORA_PAYLOAD_CRC_OFF_DEFAULT` instead.
* Will be removed after 2021.04 release.
*/
#ifndef LORA_PAYLOAD_CRC_ON_DEFAULT
#define LORA_PAYLOAD_CRC_ON_DEFAULT (true)
#if IS_ACTIVE(CONFIG_LORA_PAYLOAD_CRC_OFF_DEFAULT)
#define LORA_PAYLOAD_CRC_ON_DEFAULT (false)
#else
#define LORA_PAYLOAD_CRC_ON_DEFAULT (true)
#endif
#endif
/** @brief Set payload length, unused with implicit header */
#ifndef LORA_PAYLOAD_LENGTH_DEFAULT
#define LORA_PAYLOAD_LENGTH_DEFAULT (0U)
/** @brief Configure payload length
*
* Configure the length of payload. The configuration is unused when using
* explicit header mode ( @ref CONFIG_LORA_FIXED_HEADER_LEN_MODE_DEFAULT ) as
* `PHDR` carries the length information.
*/
#ifndef CONFIG_LORA_PAYLOAD_LENGTH_DEFAULT
#define CONFIG_LORA_PAYLOAD_LENGTH_DEFAULT (0U)
#endif
/** @} */
/**

View File

@ -12,6 +12,7 @@ rsource "credman/Kconfig"
rsource "gnrc/Kconfig"
rsource "sock/Kconfig"
rsource "link_layer/Kconfig"
rsource "lora/Kconfig"
rsource "netif/Kconfig"
endmenu # Networking

155
sys/net/lora/Kconfig Normal file
View File

@ -0,0 +1,155 @@
# Copyright (c) 2020 Freie Universitaet Berlin
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
#
menuconfig KCONFIG_USEMODULE_LORA
bool "Configure LoRa PHY"
depends on USEMODULE_LORA
help
Configure LoRa PHY using Kconfig.
if KCONFIG_USEMODULE_LORA
config LORA_PREAMBLE_LENGTH_DEFAULT
int "Preamble length"
range 8 65537
default 8
help
Configure preamble used in LoRa frame. Each LoRa frame begins with a
preamble. It starts with a series of upchirps to cover the whole
frequency band of the particular channel assigned. The last two upchirps
encode the sync word. Sync word is used to differntiate between LoRa
transmissions that use the same frequency bands. The sync word is
followed by two and a quarter downchirps, for a duration of 2.25
symbols. The total duration of this preamble can be configured between
10.25 and 65,539.25 symbol hence the range 8 to 65537.
config LORA_SYMBOL_TIMEOUT_DEFAULT
int "Symbol timeout period in symbols"
default 10
help
Configure symbol time out in terms of number of symbols. One symbol has
a length in time of (2^SF)/BW seconds.
choice
bool "Channel bandwidth"
default LORA_BW_DEFAULT_125
help
Configure the channel bandwidth. Refer to country specific regulations
on channel usage to identify the correct bandwidth.
config LORA_BW_DEFAULT_125
bool "125kHz"
config LORA_BW_DEFAULT_250
bool "250kHz"
config LORA_BW_DEFAULT_500
bool "500kHz"
endchoice
choice
bool "Spreading factor"
default LORA_SF_DEFAULT_SF7
help
Configure Spreading Factor (SF). SF denotes the amount of spreading code
applied to the original data signal. A larger SF increases the time on
air, which increases energy consumption, reduces the data rate, and
improves communication range. Each step up in spreading factor
effectively doubles the time on air to transmit the same amount of data.
Refer to country specific air time usage regulations before varying the
SF. To calculate air time refer https://www.loratools.nl/#/airtime .
config LORA_SF_DEFAULT_SF6
bool "SF6"
config LORA_SF_DEFAULT_SF7
bool "SF7"
config LORA_SF_DEFAULT_SF8
bool "SF8"
config LORA_SF_DEFAULT_SF9
bool "SF9"
config LORA_SF_DEFAULT_SF10
bool "SF10"
config LORA_SF_DEFAULT_SF11
bool "SF11"
config LORA_SF_DEFAULT_SF12
bool "SF12"
endchoice
choice
bool "Coding rate"
default LORA_CR_DEFAULT_CR_4_5
help
Configure Coding rate (CR). CR denotes the implementation of forward
error correction (FEC). This may be done by encoding 4-bit data with
redundancies into 5-bit, 6-bit, 7-bit, or 8-bit. Coding Rate (CR) value
need to be adjusted according to conditions of the channel used for data
transmission. If there are too many interferences in the channel, then
its recommended to increase the value of CR. However, the rise in CR
value will also increase the duration for the transmission. Refer to
country specific air time usage regulations before varying the CR. To
calculate air time refer https://www.loratools.nl/#/airtime .
config LORA_CR_DEFAULT_CR_4_5
bool "CR 4/5"
config LORA_CR_DEFAULT_CR_4_6
bool "CR 4/6"
config LORA_CR_DEFAULT_CR_4_7
bool "CR 4/7"
config LORA_CR_DEFAULT_CR_4_8
bool "CR 4/8"
endchoice
config LORA_IQ_INVERTED_DEFAULT
bool "Enable inverted I/Q mode"
help
Enable this to invert the IQ signals used in RF modulation circuit. For
more information on I/Q modulation technique visit
http://www.ni.com/tutorial/4805/en/
config LORA_FREQUENCY_HOPPING_DEFAULT
bool "Enable Frequency hopping spread spectrum (FHSS)"
help
Enabling Frequency hopping spread spectrum (FHSS) would imply that a
portion of each LoRa packet is transmitted on each hopping channel from
a look up table of frequencies managed by the host microcontroller.
config LORA_FREQUENCY_HOPPING_PERIOD_DEFAULT
int "Frequency hopping period in symbols"
default 0
help
Configure the hopping period, in symbols, time which each transmission
will dwell in any given channel. One symbol has a length in time of
(2^SF)/BW seconds.
config LORA_FIXED_HEADER_LEN_MODE_DEFAULT
bool "Enable fixed header length mode (implicit header)"
help
Enable fixed header length mode ( implicit header) to discard PHY header
(PHDR).
config LORA_PAYLOAD_CRC_OFF_DEFAULT
bool "Disable payload CRC"
config LORA_PAYLOAD_LENGTH_DEFAULT
int "Payload Length"
default 0
help
Configure the length of payload. The option is unused while using
explicit header mode as PHDR carries the length information.
endif # KCONFIG_USEMODULE_LORA