[LoRaWAN] rework bands, add ADR, partial MAC support
Known problem: terribly bad at receiving downlinks Mask-list bands (e.g. US915) untested, likely a few bugs
This commit is contained in:
parent
690a050ebb
commit
dd79213461
6 changed files with 1250 additions and 1141 deletions
|
@ -443,7 +443,7 @@
|
|||
|
||||
// the amount of space allocated to the persistent storage
|
||||
#if !defined(RADIOLIB_HAL_PERSISTENT_STORAGE_SIZE)
|
||||
#define RADIOLIB_HAL_PERSISTENT_STORAGE_SIZE (0x60)
|
||||
#define RADIOLIB_HAL_PERSISTENT_STORAGE_SIZE (0x0180)
|
||||
#endif
|
||||
|
||||
// This only compiles on STM32 boards with SUBGHZ module, but also
|
||||
|
|
60
src/Hal.h
60
src/Hal.h
|
@ -7,25 +7,59 @@
|
|||
#include "BuildOpt.h"
|
||||
|
||||
// list of persistent parameters
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_NONCE_ID (0)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_ADDR_ID (1)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_FCNT_UP_ID (2)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_MAGIC_ID (3)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_APP_S_KEY_ID (4)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_FNWK_SINT_KEY_ID (5)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_SNWK_SINT_KEY_ID (6)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_NWK_SENC_KEY_ID (7)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_TABLE_VERSION_ID (0) // this is NOT the LoRaWAN version, but version of this table
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_MAGIC_ID (1)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_VERSION (2)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_TXDR_RX2DR_ID (3)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_TXPWR_CUR_MAX_ID (4)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_RX1_DROFF_DEL_ID (5)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_RX2FREQ_ID (6)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_ADR_LIM_DEL_ID (7)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_NBTRANS_ID (8)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_ADDR_ID (9)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_APP_S_KEY_ID (10)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_FNWK_SINT_KEY_ID (11)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_SNWK_SINT_KEY_ID (12)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_NWK_SENC_KEY_ID (13)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_HOME_NET_ID (14)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_NONCE_ID (15)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_JOIN_NONCE_ID (16)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_A_FCNT_DOWN_ID (17)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_N_FCNT_DOWN_ID (18)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_CONF_FCNT_UP_ID (19)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_CONF_FCNT_DOWN_ID (20)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_ADR_FCNT_ID (21)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_FCNT_UP_ID (22)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_FOPTS_ID (23)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_FREQS_ID (24)
|
||||
|
||||
static const uint32_t RadioLibPersistentParamTable[] = {
|
||||
0x00, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_NONCE_ID
|
||||
0x04, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_ADDR_ID
|
||||
0x08, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_FCNT_UP_ID
|
||||
0x0C, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_MAGIC_ID
|
||||
0x00, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_TABLE_VERSION_ID
|
||||
0x01, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_MAGIC_ID
|
||||
0x03, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_VERSION
|
||||
0x04, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_TXDR_RX2DR_ID
|
||||
0x05, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_TXPWR_CUR_MAX_ID
|
||||
0x06, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_RX1_DROFF_DEL_ID
|
||||
0x07, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_RX2FREQ_ID
|
||||
0x0A, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_ADR_LIM_DEL_ID
|
||||
0x0B, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_NBTRANS_ID
|
||||
0x0C, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_ADDR_ID
|
||||
0x10, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_APP_S_KEY_ID
|
||||
0x20, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_FNWK_SINT_KEY_ID
|
||||
0x30, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_SNWK_SINT_KEY_ID
|
||||
0x40, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_NWK_SENC_KEY_ID
|
||||
0x50, // end
|
||||
0x50, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_HOME_NET_ID
|
||||
0x54, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_DEV_NONCE_ID
|
||||
0x58, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_JOIN_NONCE_ID
|
||||
0x5C, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_A_FCNT_DOWN_ID
|
||||
0x60, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_N_FCNT_DOWN_ID
|
||||
0x64, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_CONF_FCNT_UP_ID
|
||||
0x68, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_CONF_FCNT_DOWN_ID
|
||||
0x6C, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_ADR_FCNT_ID
|
||||
0x70, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_FCNT_UP_ID
|
||||
0x8E, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_FOPTS_ID
|
||||
0xD0, // RADIOLIB_PERSISTENT_PARAM_LORAWAN_FREQS_ID
|
||||
0x0180, // end
|
||||
};
|
||||
|
||||
/*!
|
||||
|
|
|
@ -533,6 +533,26 @@
|
|||
*/
|
||||
#define RADIOLIB_ERR_COMMAND_QUEUE_EMPTY (-1110)
|
||||
|
||||
/*!
|
||||
\brief Unable to delete MAC command because it was not found in the queue.
|
||||
*/
|
||||
#define RADIOLIB_ERR_COMMAND_QUEUE_ITEM_NOT_FOUND (-1111)
|
||||
|
||||
/*!
|
||||
\brief Unable to join network because JoinNonce is not higher than saved value.
|
||||
*/
|
||||
#define RADIOLIB_ERR_JOIN_NONCE_INVALID (-1112)
|
||||
|
||||
/*!
|
||||
\brief Received downlink Network frame counter is invalid (lower than last heard value).
|
||||
*/
|
||||
#define RADIOLIB_ERR_N_FCNT_DOWN_INVALID (-1113)
|
||||
|
||||
/*!
|
||||
\brief Received downlink Application frame counter is invalid (lower than last heard value).
|
||||
*/
|
||||
#define RADIOLIB_ERR_A_FCNT_DOWN_INVALID (-1114)
|
||||
|
||||
/*!
|
||||
\}
|
||||
*/
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -5,6 +5,9 @@
|
|||
#include "../PhysicalLayer/PhysicalLayer.h"
|
||||
#include "../../utils/Cryptography.h"
|
||||
|
||||
// version of NVM table layout (NOT the LoRaWAN version)
|
||||
#define RADIOLIB_PERSISTENT_PARAM_LORAWAN_TABLE_VERSION (0x01)
|
||||
|
||||
// preamble format
|
||||
#define RADIOLIB_LORAWAN_LORA_SYNC_WORD (0x34)
|
||||
#define RADIOLIB_LORAWAN_LORA_PREAMBLE_LEN (8)
|
||||
|
@ -68,7 +71,8 @@
|
|||
#define RADIOLIB_LORAWAN_CHANNEL_DIR_NONE (0x03 << 0)
|
||||
#define RADIOLIB_LORAWAN_CFLIST_TYPE_FREQUENCIES (0)
|
||||
#define RADIOLIB_LORAWAN_CFLIST_TYPE_MASK (1)
|
||||
#define RADIOLIB_LORAWAN_CHANNEL_NUM_DATARATES (16)
|
||||
#define RADIOLIB_LORAWAN_CHANNEL_NUM_DATARATES (15)
|
||||
#define RADIOLIB_LORAWAN_CHANNEL_INDEX_NONE (0xFF < 0)
|
||||
|
||||
// recommended default settings
|
||||
#define RADIOLIB_LORAWAN_RECEIVE_DELAY_1_MS (1000)
|
||||
|
@ -78,8 +82,8 @@
|
|||
#define RADIOLIB_LORAWAN_JOIN_ACCEPT_DELAY_1_MS (5000)
|
||||
#define RADIOLIB_LORAWAN_JOIN_ACCEPT_DELAY_2_MS (6000)
|
||||
#define RADIOLIB_LORAWAN_MAX_FCNT_GAP (16384)
|
||||
#define RADIOLIB_LORAWAN_ADR_ACK_LIMIT (64)
|
||||
#define RADIOLIB_LORAWAN_ADR_ACK_DELAY (32)
|
||||
#define RADIOLIB_LORAWAN_ADR_ACK_LIMIT_EXP (0x06)
|
||||
#define RADIOLIB_LORAWAN_ADR_ACK_DELAY_EXP (0x05)
|
||||
#define RADIOLIB_LORAWAN_RETRANSMIT_TIMEOUT_MIN_MS (1000)
|
||||
#define RADIOLIB_LORAWAN_RETRANSMIT_TIMEOUT_MAX_MS (3000)
|
||||
#define RADIOLIB_LORAWAN_POWER_STEP_SIZE_DBM (-2)
|
||||
|
@ -147,7 +151,7 @@
|
|||
#define RADIOLIB_LORAWAN_MIC_CH_INDEX_POS (4)
|
||||
|
||||
// magic word saved in persistent memory upon activation
|
||||
#define RADIOLIB_LORAWAN_MAGIC (0x12AD101B)
|
||||
#define RADIOLIB_LORAWAN_MAGIC (0x39EA)
|
||||
|
||||
// MAC commands
|
||||
#define RADIOLIB_LORAWAN_MAC_CMD_RESET (0x01)
|
||||
|
@ -171,7 +175,32 @@
|
|||
#define RADIOLIB_LORAWAN_MAC_COMMAND_QUEUE_SIZE (8)
|
||||
|
||||
// the maximum number of simultaneously available channels
|
||||
#define RADIOLIB_LORAWAN_NUM_AVAILABLE_CHANNELS (8)
|
||||
#define RADIOLIB_LORAWAN_NUM_AVAILABLE_CHANNELS (16)
|
||||
|
||||
/*!
|
||||
\struct LoRaWANChannelSpan_t
|
||||
\brief Structure to save information about LoRaWAN channels.
|
||||
To save space, adjacent channels are saved in "spans".
|
||||
*/
|
||||
struct LoRaWANChannel_t {
|
||||
/*! \brief Whether this channel is enabled (can be used) or is disabled */
|
||||
bool enabled;
|
||||
|
||||
/*! \brief The channel number, as specified by defaults or the network */
|
||||
uint8_t idx;
|
||||
|
||||
/*! \brief The channel frequency */
|
||||
float freq;
|
||||
|
||||
/*! \brief Minimum allowed datarate for this channel */
|
||||
uint8_t drMin;
|
||||
|
||||
/*! \brief Maximum allowed datarate for this channel (inclusive) */
|
||||
uint8_t drMax;
|
||||
};
|
||||
|
||||
// alias for unused channel
|
||||
#define RADIOLIB_LORAWAN_CHANNEL_NONE { .enabled = false, .idx = RADIOLIB_LORAWAN_CHANNEL_INDEX_NONE, .freq = 0, .drMin = 0, .drMax = 0 }
|
||||
|
||||
/*!
|
||||
\struct LoRaWANChannelSpan_t
|
||||
|
@ -179,12 +208,6 @@
|
|||
To save space, adjacent channels are saved in "spans".
|
||||
*/
|
||||
struct LoRaWANChannelSpan_t {
|
||||
/*! \brief Whether this channel span is for uplink, downlink, or both directions*/
|
||||
uint8_t direction;
|
||||
|
||||
/*! \brief Allowed data rates for a join request message */
|
||||
uint8_t joinRequestDataRate;
|
||||
|
||||
/*! \brief Total number of channels in the span */
|
||||
uint8_t numChannels;
|
||||
|
||||
|
@ -194,24 +217,24 @@ struct LoRaWANChannelSpan_t {
|
|||
/*! \brief Frequency step between adjacent channels */
|
||||
float freqStep;
|
||||
|
||||
/*! \brief Array of datarates supported by all channels in the span */
|
||||
uint8_t dataRates[RADIOLIB_LORAWAN_CHANNEL_NUM_DATARATES];
|
||||
/*! \brief Minimum allowed datarate for all channels in this span */
|
||||
uint8_t drMin;
|
||||
|
||||
/*! \brief Maximum allowed datarate for all channels in this span (inclusive) */
|
||||
uint8_t drMax;
|
||||
|
||||
/*! \brief Allowed data rates for a join request message */
|
||||
uint8_t joinRequestDataRate;
|
||||
};
|
||||
|
||||
// alias for unused channel span
|
||||
#define RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE { .direction = RADIOLIB_LORAWAN_CHANNEL_DIR_NONE, .joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED, .numChannels = 0, .freqStart = 0, .freqStep = 0, .dataRates = { 0 } }
|
||||
#define RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE { .numChannels = 0, .freqStart = 0, .freqStep = 0, .drMin = 0, .drMax = 0, .joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED }
|
||||
|
||||
/*!
|
||||
\struct LoRaWANBand_t
|
||||
\brief Structure to save information about LoRaWAN band
|
||||
*/
|
||||
struct LoRaWANBand_t {
|
||||
/*! \brief The base downlink data rate. Used to calculate data rate changes for adaptive data rate */
|
||||
uint8_t downlinkDataRateBase;
|
||||
|
||||
/*! \brief The minimum allowed downlink data rate. Used to calculate data rate changes for adaptive data rate */
|
||||
uint8_t downlinkDataRateMin;
|
||||
|
||||
/*! \brief Array of allowed maximum payload lengths for each data rate */
|
||||
uint8_t payloadLenMax[RADIOLIB_LORAWAN_CHANNEL_NUM_DATARATES];
|
||||
|
||||
|
@ -224,17 +247,29 @@ struct LoRaWANBand_t {
|
|||
/*! \brief Whether the optional channels are defined as list of frequencies or bit mask */
|
||||
uint8_t cfListType;
|
||||
|
||||
/*! \brief FSK channel frequency */
|
||||
float fskFreq;
|
||||
/*! \brief A set of default uplink (TX) channels for frequency-type bands */
|
||||
LoRaWANChannel_t txFreqs[3];
|
||||
|
||||
/*! \brief Number of channel spans in the band */
|
||||
uint8_t numChannelSpans;
|
||||
/*! \brief A set of possible extra channels for the Join-Request message for frequency-type bands */
|
||||
LoRaWANChannel_t txJoinReq[3];
|
||||
|
||||
/*! \brief Default uplink (TX/RX1) channels defined by LoRaWAN Regional Parameters */
|
||||
LoRaWANChannelSpan_t defaultChannels[3];
|
||||
/*! \brief The number of TX channel spans for mask-type bands */
|
||||
uint8_t numTxSpans;
|
||||
|
||||
/*! \brief Backup downlink (RX2) channel - just a single channel, but using the same structure for convenience */
|
||||
LoRaWANChannelSpan_t backupChannel;
|
||||
/*! \brief Default uplink (TX) channel spans for mask-type bands, including Join-Request parameters */
|
||||
LoRaWANChannelSpan_t txSpans[2];
|
||||
|
||||
/*! \brief Default downlink (RX1) channel span for mask-type bands */
|
||||
LoRaWANChannelSpan_t rx1Span;
|
||||
|
||||
/*! \brief The base downlink data rate. Used to calculate data rate changes for adaptive data rate */
|
||||
uint8_t rx1DataRateBase;
|
||||
|
||||
/*! \brief Backup channel for downlink (RX2) window */
|
||||
LoRaWANChannel_t rx2;
|
||||
|
||||
/*! \brief The corresponding datarates, bandwidths and coding rates for DR index */
|
||||
uint8_t dataRates[RADIOLIB_LORAWAN_CHANNEL_NUM_DATARATES];
|
||||
};
|
||||
|
||||
// supported bands
|
||||
|
@ -257,7 +292,7 @@ struct LoRaWANMacCommand_t {
|
|||
uint8_t cid;
|
||||
|
||||
/*! \brief Length of the payload */
|
||||
size_t len;
|
||||
uint8_t len;
|
||||
|
||||
/*! \brief Payload buffer (5 bytes is the longest possible) */
|
||||
uint8_t payload[5];
|
||||
|
@ -267,8 +302,9 @@ struct LoRaWANMacCommand_t {
|
|||
};
|
||||
|
||||
struct LoRaWANMacCommandQueue_t {
|
||||
uint8_t numCommands;
|
||||
uint8_t len;
|
||||
LoRaWANMacCommand_t commands[RADIOLIB_LORAWAN_MAC_COMMAND_QUEUE_SIZE];
|
||||
size_t numCommands;
|
||||
};
|
||||
|
||||
/*!
|
||||
|
@ -292,6 +328,15 @@ class LoRaWANNode {
|
|||
(e.g. 8 for US915 FSB2 used by TTN). By default -1 (no channel offset). */
|
||||
int8_t numChannels;
|
||||
|
||||
// Offset between TX and RX1 (such that RX1 has equal or lower DR)
|
||||
uint8_t rx1DrOffset;
|
||||
|
||||
// RX2 channel properties - may be changed by MAC command
|
||||
LoRaWANChannel_t rx2;
|
||||
|
||||
// Number of allowed frame retransmissions
|
||||
uint8_t nbTrans;
|
||||
|
||||
/*!
|
||||
\brief Default constructor.
|
||||
\param phy Pointer to the PhysicalLayer radio module.
|
||||
|
@ -306,10 +351,10 @@ class LoRaWANNode {
|
|||
void wipe();
|
||||
|
||||
/*!
|
||||
\brief Join network by loading information from persistent storage.
|
||||
\brief Restore session by loading information from persistent storage.
|
||||
\returns \ref status_codes
|
||||
*/
|
||||
int16_t begin();
|
||||
int16_t restore();
|
||||
|
||||
/*!
|
||||
\brief Join network by performing over-the-air activation. By this procedure,
|
||||
|
@ -331,9 +376,10 @@ class LoRaWANNode {
|
|||
\param appSKey Pointer to the application session AES-128 key.
|
||||
\param fNwkSIntKey Pointer to the network session F key (LoRaWAN 1.1), unused for LoRaWAN 1.0.
|
||||
\param sNwkSIntKey Pointer to the network session S key (LoRaWAN 1.1), unused for LoRaWAN 1.0.
|
||||
\param force Set to true to force a new session, even if one exists.
|
||||
\returns \ref status_codes
|
||||
*/
|
||||
int16_t beginAPB(uint32_t addr, uint8_t* nwkSKey, uint8_t* appSKey, uint8_t* fNwkSIntKey = NULL, uint8_t* sNwkSIntKey = NULL);
|
||||
int16_t beginABP(uint32_t addr, uint8_t* nwkSKey, uint8_t* appSKey, uint8_t* fNwkSIntKey = NULL, uint8_t* sNwkSIntKey = NULL, bool force = false);
|
||||
|
||||
#if defined(RADIOLIB_BUILD_ARDUINO)
|
||||
/*!
|
||||
|
@ -393,12 +439,14 @@ class LoRaWANNode {
|
|||
const LoRaWANBand_t* band = NULL;
|
||||
|
||||
LoRaWANMacCommandQueue_t commandsUp = {
|
||||
.commands = { { .cid = 0, .len = 0, .payload = { 0 }, .repeat = 0, } },
|
||||
.numCommands = 0,
|
||||
.len = 0,
|
||||
.commands = { { .cid = 0, .len = 0, .payload = { 0 }, .repeat = 0, } },
|
||||
};
|
||||
LoRaWANMacCommandQueue_t commandsDown = {
|
||||
.commands = { { .cid = 0, .len = 0, .payload = { 0 }, .repeat = 0, } },
|
||||
.numCommands = 0,
|
||||
.len = 0,
|
||||
.commands = { { .cid = 0, .len = 0, .payload = { 0 }, .repeat = 0, } },
|
||||
};
|
||||
|
||||
// the following is either provided by the network server (OTAA)
|
||||
|
@ -411,24 +459,17 @@ class LoRaWANNode {
|
|||
uint8_t jSIntKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
|
||||
|
||||
// available channel frequencies from list passed during OTA activation
|
||||
float availableChannelsFreq[2][RADIOLIB_LORAWAN_NUM_AVAILABLE_CHANNELS] = { { 0 }, { 0 } };
|
||||
LoRaWANChannel_t availableChannels[2][RADIOLIB_LORAWAN_NUM_AVAILABLE_CHANNELS] = { { 0 }, { 0 } };
|
||||
|
||||
// currently configured channel frequency
|
||||
float channelFreq[2] = { 0 };
|
||||
// currently configured channels for TX and RX1
|
||||
LoRaWANChannel_t currentChannels[2] = { RADIOLIB_LORAWAN_CHANNEL_NONE, RADIOLIB_LORAWAN_CHANNEL_NONE };
|
||||
|
||||
// currently configured datarates for TX and RX1
|
||||
uint8_t dataRates[2] = { RADIOLIB_LORAWAN_DATA_RATE_UNUSED, RADIOLIB_LORAWAN_DATA_RATE_UNUSED };
|
||||
|
||||
// LoRaWAN revision (1.0 vs 1.1)
|
||||
uint8_t rev = 0;
|
||||
|
||||
// currently configured data rate for uplink and downlink: DR0 - DR15 (band-dependent!)
|
||||
uint8_t dataRate[2] = { 0 };
|
||||
|
||||
// currently configured channel for uplink and downlink (band-dependent!)
|
||||
uint8_t chIndex[2] = { 0 };
|
||||
|
||||
// backup channel properties - may be changed by MAC command
|
||||
float backupFreq = 0;
|
||||
uint8_t backupDataRate = 0;
|
||||
|
||||
// timestamp to measure the RX1/2 delay (from uplink end)
|
||||
uint32_t rxDelayStart = 0;
|
||||
|
||||
|
@ -438,6 +479,9 @@ class LoRaWANNode {
|
|||
// device status - battery level
|
||||
uint8_t battLevel = 0xFF;
|
||||
|
||||
// indicates whether an uplink has MAC commands as payload
|
||||
bool isMACPayload = false;
|
||||
|
||||
// method to generate message integrity code
|
||||
uint32_t generateMIC(uint8_t* msg, size_t len, uint8_t* key);
|
||||
|
||||
|
@ -451,31 +495,34 @@ class LoRaWANNode {
|
|||
|
||||
// setup uplink/downlink channel data rates and frequencies
|
||||
// will attempt to randomly select based on currently used band plan
|
||||
int16_t setupChannels();
|
||||
int16_t setupChannels(uint8_t* cfList);
|
||||
|
||||
// find the first usable data rate in a given channel span
|
||||
uint8_t findDataRate(uint8_t dr, DataRate_t* dataRate, const LoRaWANChannelSpan_t* span);
|
||||
// select a set of semi-random TX/RX channels for the join-request and -accept message
|
||||
int16_t selectChannelsJR(uint16_t devNonce);
|
||||
|
||||
// find a channel ID that conforms to the requested direction and ID range
|
||||
int16_t findChannelId(uint8_t dir, uint8_t* ch, uint8_t* dr, int8_t min, int8_t max);
|
||||
// select a set of random TX/RX channels for up- and downlink
|
||||
int16_t selectChannels();
|
||||
|
||||
// find a channel span that any given channel id belongs to
|
||||
LoRaWANChannelSpan_t* findChannelSpan(uint8_t dir, uint8_t ch, uint8_t* spanChannelId);
|
||||
|
||||
// calculate channel frequency in MHz based on channel ID and direction
|
||||
int16_t findChannelFreq(uint8_t dir, uint8_t ch, float* freq);
|
||||
// find the first usable data rate for the given band
|
||||
int16_t findDataRate(uint8_t dr, DataRate_t* dataRate);
|
||||
|
||||
// configure channel based on cached data rate ID and frequency
|
||||
int16_t configureChannel(uint8_t dir);
|
||||
|
||||
// send a MAC command to the network server
|
||||
int16_t sendMacCommand(uint8_t cid, uint8_t* payload, size_t payloadLen, uint8_t* reply, size_t replyLen);
|
||||
// save all available channels to persistent storage
|
||||
int16_t saveChannels();
|
||||
|
||||
// restore all available channels from persistent storage
|
||||
int16_t restoreChannels();
|
||||
|
||||
// push MAC command to queue, done by copy
|
||||
int16_t pushMacCommand(LoRaWANMacCommand_t* cmd, LoRaWANMacCommandQueue_t* queue);
|
||||
|
||||
// pop MAC command from queue, done by copy unless CMD is NULL
|
||||
int16_t popMacCommand(LoRaWANMacCommand_t* cmd, LoRaWANMacCommandQueue_t* queue, bool force = false);
|
||||
int16_t popMacCommand(LoRaWANMacCommand_t* cmd, LoRaWANMacCommandQueue_t* queue, size_t index);
|
||||
|
||||
// delete a specific MAC command from queue, indicated by the command ID
|
||||
int16_t deleteMacCommand(uint8_t cid, LoRaWANMacCommandQueue_t* queue);
|
||||
|
||||
// execute mac command, return the number of processed bytes for sequential processing
|
||||
size_t execMacCommand(LoRaWANMacCommand_t* cmd);
|
||||
|
|
|
@ -2,32 +2,39 @@
|
|||
|
||||
#if !defined(RADIOLIB_EXCLUDE_LORAWAN)
|
||||
|
||||
uint8_t getDownlinkDataRate(uint8_t uplink, uint8_t offset, uint8_t base, uint8_t lim) {
|
||||
uint8_t getDownlinkDataRate(uint8_t uplink, uint8_t offset, uint8_t base, uint8_t min, uint8_t max) {
|
||||
int8_t dr = uplink - offset + base;
|
||||
if(dr < lim) {
|
||||
dr = lim;
|
||||
if(dr < min) {
|
||||
dr = min;
|
||||
} else if (dr > max) {
|
||||
dr = max;
|
||||
}
|
||||
return(dr);
|
||||
}
|
||||
|
||||
const LoRaWANBand_t EU868 = {
|
||||
.downlinkDataRateBase = 0,
|
||||
.downlinkDataRateMin = 0,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 230, 230,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.powerMax = 16,
|
||||
.powerNumSteps = 7,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_FREQUENCIES,
|
||||
.fskFreq = 868.8,
|
||||
.numChannelSpans = 1,
|
||||
.defaultChannels = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_BOTH,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 3,
|
||||
.freqStart = 868.1,
|
||||
.freqStep = 0.2,
|
||||
.txFreqs = {
|
||||
{ .enabled = true, .idx = 0, .freq = 868.100, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 1, .freq = 868.300, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 2, .freq = 868.500, .drMin = 0, .drMax = 5},
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 0,
|
||||
.txSpans = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE
|
||||
},
|
||||
.rx1Span = RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
.rx1DataRateBase = 0,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 869.525, .drMin = 0, .drMax = 0 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
|
@ -43,171 +50,96 @@ const LoRaWANBand_t EU868 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 869.858,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t US915 = {
|
||||
.downlinkDataRateBase = 10,
|
||||
.downlinkDataRateMin = 8,
|
||||
.payloadLenMax = {
|
||||
19, 61, 133, 250, 250, 0, 0, 0,
|
||||
41, 117, 230, 230, 230, 230, 0, 0 },
|
||||
.payloadLenMax = { 19, 61, 133, 250, 250, 0, 0, 0, 41, 117, 230, 230, 230, 230, 0 },
|
||||
.powerMax = 30,
|
||||
.powerNumSteps = 10,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_MASK,
|
||||
.fskFreq = 0,
|
||||
.numChannelSpans = 3,
|
||||
.defaultChannels = {
|
||||
.txFreqs = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 2,
|
||||
.txSpans = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK,
|
||||
.joinRequestDataRate = 0,
|
||||
.numChannels = 64,
|
||||
.freqStart = 902.3,
|
||||
.freqStep = 0.2,
|
||||
.freqStart = 902.300,
|
||||
.freqStep = 0.200,
|
||||
.drMin = 0,
|
||||
.drMax = 3,
|
||||
.joinRequestDataRate = 0
|
||||
},
|
||||
{
|
||||
.numChannels = 8,
|
||||
.freqStart = 903.000,
|
||||
.freqStep = 1.600,
|
||||
.drMin = 4,
|
||||
.drMax = 4,
|
||||
.joinRequestDataRate = 4
|
||||
}
|
||||
},
|
||||
.rx1Span = {
|
||||
.numChannels = 8,
|
||||
.freqStart = 923.300,
|
||||
.freqStep = 0.600,
|
||||
.drMin = 8,
|
||||
.drMax = 13,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
},
|
||||
.rx1DataRateBase = 10,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 923.300, .drMin = 8, .drMax = 8 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_10 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_9 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_7 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}, {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK,
|
||||
.joinRequestDataRate = 4,
|
||||
.numChannels = 8,
|
||||
.freqStart = 903,
|
||||
.freqStep = 1.6,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}, {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = 10,
|
||||
.numChannels = 8,
|
||||
.freqStart = 923.3,
|
||||
.freqStep = 0.6,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_10 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_9 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_7 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
},
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 923.3,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t CN780 = {
|
||||
.downlinkDataRateBase = 0,
|
||||
.downlinkDataRateMin = 0,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 250, 230,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 250, 230, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.powerMax = 12,
|
||||
.powerNumSteps = 5,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_FREQUENCIES,
|
||||
.fskFreq = 0,
|
||||
.numChannelSpans = 1,
|
||||
.defaultChannels = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_BOTH,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 6,
|
||||
.freqStart = 779.5,
|
||||
.freqStep = 0.2,
|
||||
.txFreqs = {
|
||||
{ .enabled = true, .idx = 0, .freq = 779.500, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 1, .freq = 779.700, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 2, .freq = 779.900, .drMin = 0, .drMax = 5},
|
||||
},
|
||||
.txJoinReq = {
|
||||
{ .enabled = true, .idx = 3, .freq = 780.500, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 4, .freq = 780.700, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 5, .freq = 780.900, .drMin = 0, .drMax = 5}
|
||||
},
|
||||
.numTxSpans = 0,
|
||||
.txSpans = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE
|
||||
},
|
||||
.rx1Span = RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
.rx1DataRateBase = 0,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 786.000, .drMin = 0, .drMax = 0 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
|
@ -223,58 +155,33 @@ const LoRaWANBand_t CN780 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 786,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t EU433 = {
|
||||
.downlinkDataRateBase = 0,
|
||||
.downlinkDataRateMin = 0,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 230, 230,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.powerMax = 12,
|
||||
.powerNumSteps = 5,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_FREQUENCIES,
|
||||
.fskFreq = 0,
|
||||
.numChannelSpans = 1,
|
||||
.defaultChannels = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_BOTH,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 3,
|
||||
.freqStart = 433.175,
|
||||
.freqStep = 0.2,
|
||||
.txFreqs = {
|
||||
{ .enabled = true, .idx = 0, .freq = 433.175, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 1, .freq = 433.375, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 2, .freq = 433.575, .drMin = 0, .drMax = 5},
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 0,
|
||||
.txSpans = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE
|
||||
},
|
||||
.rx1Span = RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
.rx1DataRateBase = 0,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 434.665, .drMin = 0, .drMax = 0 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
|
@ -290,58 +197,54 @@ const LoRaWANBand_t EU433 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 434.665,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t AU915 = {
|
||||
.downlinkDataRateBase = 8,
|
||||
.downlinkDataRateMin = 8,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 230, 0,
|
||||
41, 117, 230, 230, 230, 230, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 230, 0, 41, 117, 230, 230, 230, 230, 0 },
|
||||
.powerMax = 30,
|
||||
.powerNumSteps = 10,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_MASK,
|
||||
.fskFreq = 0,
|
||||
.numChannelSpans = 3,
|
||||
.defaultChannels = {
|
||||
.txFreqs = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 2,
|
||||
.txSpans = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK,
|
||||
.joinRequestDataRate = 0,
|
||||
.numChannels = 64,
|
||||
.freqStart = 915.2,
|
||||
.freqStep = 0.2,
|
||||
.freqStart = 915.200,
|
||||
.freqStep = 0.200,
|
||||
.drMin = 0,
|
||||
.drMax = 5,
|
||||
.joinRequestDataRate = 0
|
||||
},
|
||||
{
|
||||
.numChannels = 8,
|
||||
.freqStart = 915.900,
|
||||
.freqStep = 1.600,
|
||||
.drMin = 6,
|
||||
.drMax = 6,
|
||||
.joinRequestDataRate = 6
|
||||
}
|
||||
},
|
||||
.rx1Span = {
|
||||
.numChannels = 8,
|
||||
.freqStart = 923.300,
|
||||
.freqStep = 0.600,
|
||||
.drMin = 8,
|
||||
.drMax = 13,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
},
|
||||
.rx1DataRateBase = 8,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 923.300, .drMin = 8, .drMax = 8 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
|
@ -349,136 +252,55 @@ const LoRaWANBand_t AU915 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_SF_9 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_7 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}, {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK,
|
||||
.joinRequestDataRate = 6,
|
||||
.numChannels = 8,
|
||||
.freqStart = 915.9,
|
||||
.freqStep = 1.6,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}, {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 8,
|
||||
.freqStart = 923.3,
|
||||
.freqStep = 0.6,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_10 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_9 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_7 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
},
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 923.3,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_500_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t CN500 = {
|
||||
.downlinkDataRateBase = 0,
|
||||
.downlinkDataRateMin = 0,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.powerMax = 19,
|
||||
.powerNumSteps = 7,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_MASK,
|
||||
.fskFreq = 0,
|
||||
.numChannelSpans = 2,
|
||||
.defaultChannels = {
|
||||
.txFreqs = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 1,
|
||||
.txSpans = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_UPLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 96,
|
||||
.freqStart = 470.3,
|
||||
.freqStep = 0.2,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_10 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_9 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_7 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}, {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.freqStart = 470.300,
|
||||
.freqStep = 0.200,
|
||||
.drMin = 0,
|
||||
.drMax = 5,
|
||||
.joinRequestDataRate = 0
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE
|
||||
},
|
||||
.rx1Span = {
|
||||
.numChannels = 48,
|
||||
.freqStart = 500.3,
|
||||
.freqStep = 0.2,
|
||||
.freqStart = 500.300,
|
||||
.freqStep = 0.200,
|
||||
.drMin = 0,
|
||||
.drMax = 5,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
},
|
||||
.rx1DataRateBase = 0,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 505.300, .drMin = 0, .drMax = 0 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
|
@ -494,57 +316,33 @@ const LoRaWANBand_t CN500 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 505.3,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_5,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t AS923 = {
|
||||
.downlinkDataRateBase = 0,
|
||||
.downlinkDataRateMin = 0,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 230, 230,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.powerMax = 16,
|
||||
.powerNumSteps = 7,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_FREQUENCIES,
|
||||
.fskFreq = 921.8,
|
||||
.numChannelSpans = 1,
|
||||
.defaultChannels = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_BOTH,
|
||||
.joinRequestDataRate = 2,
|
||||
.numChannels = 2,
|
||||
.freqStart = 923.2,
|
||||
.freqStep = 0.2,
|
||||
.txFreqs = {
|
||||
{ .enabled = true, .idx = 0, .freq = 923.200, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 1, .freq = 923.400, .drMin = 0, .drMax = 5},
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 0,
|
||||
.txSpans = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE
|
||||
},
|
||||
.rx1Span = RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
.rx1DataRateBase = 0,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 923.200, .drMin = 2, .drMax = 2 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
|
@ -560,58 +358,33 @@ const LoRaWANBand_t AS923 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 923.2,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_10 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t KR920 = {
|
||||
.downlinkDataRateBase = 0,
|
||||
.downlinkDataRateMin = 0,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.powerMax = 14,
|
||||
.powerNumSteps = 7,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_FREQUENCIES,
|
||||
.fskFreq = 0,
|
||||
.numChannelSpans = 1,
|
||||
.defaultChannels = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_BOTH,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 3,
|
||||
.freqStart = 922.1,
|
||||
.freqStep = 0.2,
|
||||
.txFreqs = {
|
||||
{ .enabled = true, .idx = 0, .freq = 922.100, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 1, .freq = 922.300, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 2, .freq = 922.500, .drMin = 0, .drMax = 5}
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 0,
|
||||
.txSpans = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE
|
||||
},
|
||||
.rx1Span = RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
.rx1DataRateBase = 0,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 921.900, .drMin = 0, .drMax = 0 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
|
@ -619,8 +392,7 @@ const LoRaWANBand_t KR920 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_SF_9 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_8 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_7 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_7 | RADIOLIB_LORAWAN_DATA_RATE_BW_250_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_FSK_50_K,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
|
@ -630,55 +402,31 @@ const LoRaWANBand_t KR920 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 921.9,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const LoRaWANBand_t IN865 = {
|
||||
.downlinkDataRateBase = 0,
|
||||
.downlinkDataRateMin = 0,
|
||||
.payloadLenMax = {
|
||||
59, 59, 59, 123, 230, 230, 230, 230,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.payloadLenMax = { 59, 59, 59, 123, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0 },
|
||||
.powerMax = 30,
|
||||
.powerNumSteps = 10,
|
||||
.cfListType = RADIOLIB_LORAWAN_CFLIST_TYPE_FREQUENCIES,
|
||||
.fskFreq = 0,
|
||||
.numChannelSpans = 1,
|
||||
.defaultChannels = {
|
||||
{
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_BOTH,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 3,
|
||||
.freqStart = 865.0625,
|
||||
.freqStep = 0.36,
|
||||
.txFreqs = {
|
||||
{ .enabled = true, .idx = 0, .freq = 865.0625, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 1, .freq = 865.4025, .drMin = 0, .drMax = 5},
|
||||
{ .enabled = true, .idx = 2, .freq = 865.9850, .drMin = 0, .drMax = 5}
|
||||
},
|
||||
.txJoinReq = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_NONE
|
||||
},
|
||||
.numTxSpans = 0,
|
||||
.txSpans = {
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE
|
||||
},
|
||||
.rx1Span = RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
.rx1DataRateBase = 0,
|
||||
.rx2 = { .enabled = true, .idx = 0, .freq = 866.550, .drMin = 2, .drMax = 2 },
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_12 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_11 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
|
@ -694,38 +442,8 @@ const LoRaWANBand_t IN865 = {
|
|||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED
|
||||
}
|
||||
},
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
RADIOLIB_LORAWAN_CHANNEL_SPAN_NONE,
|
||||
},
|
||||
.backupChannel = {
|
||||
.direction = RADIOLIB_LORAWAN_CHANNEL_DIR_DOWNLINK,
|
||||
.joinRequestDataRate = RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
.numChannels = 1,
|
||||
.freqStart = 866.55,
|
||||
.freqStep = 0,
|
||||
.dataRates = {
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_SF_10 | RADIOLIB_LORAWAN_DATA_RATE_BW_125_KHZ | RADIOLIB_LORAWAN_DATA_RATE_CR_4_7,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
RADIOLIB_LORAWAN_DATA_RATE_UNUSED,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue