Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
LoRaPHYCN779.cpp
00001 /** 00002 * @file LoRaPHYCN779.cpp 00003 * 00004 * @brief Implements LoRaPHY for Chinese 779 MHz band 00005 * 00006 * \code 00007 * ______ _ 00008 * / _____) _ | | 00009 * ( (____ _____ ____ _| |_ _____ ____| |__ 00010 * \____ \| ___ | (_ _) ___ |/ ___) _ \ 00011 * _____) ) ____| | | || |_| ____( (___| | | | 00012 * (______/|_____)_|_|_| \__)_____)\____)_| |_| 00013 * (C)2013 Semtech 00014 * ___ _____ _ ___ _ _____ ___ ___ ___ ___ 00015 * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __| 00016 * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _| 00017 * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___| 00018 * embedded.connectivity.solutions=============== 00019 * 00020 * \endcode 00021 * 00022 * 00023 * License: Revised BSD License, see LICENSE.TXT file include in the project 00024 * 00025 * Maintainer: Miguel Luis ( Semtech ), Gregory Cristian ( Semtech ) and Daniel Jaeckle ( STACKFORCE ) 00026 * 00027 * Copyright (c) 2017, Arm Limited and affiliates. 00028 * SPDX-License-Identifier: BSD-3-Clause 00029 * 00030 */ 00031 00032 #include "LoRaPHYCN779.h" 00033 #include "lora_phy_ds.h" 00034 00035 /*! 00036 * Number of default channels 00037 */ 00038 #define CN779_NUMB_DEFAULT_CHANNELS 3 00039 00040 /*! 00041 * Number of channels to apply for the CF list 00042 */ 00043 #define CN779_NUMB_CHANNELS_CF_LIST 5 00044 00045 /*! 00046 * Minimal datarate that can be used by the node 00047 */ 00048 #define CN779_TX_MIN_DATARATE DR_0 00049 00050 /*! 00051 * Maximal datarate that can be used by the node 00052 */ 00053 #define CN779_TX_MAX_DATARATE DR_7 00054 00055 /*! 00056 * Minimal datarate that can be used by the node 00057 */ 00058 #define CN779_RX_MIN_DATARATE DR_0 00059 00060 /*! 00061 * Maximal datarate that can be used by the node 00062 */ 00063 #define CN779_RX_MAX_DATARATE DR_7 00064 00065 #define CN779_DEFAULT_MAX_DATARATE DR_5 00066 00067 /*! 00068 * Default datarate used by the node 00069 */ 00070 #define CN779_DEFAULT_DATARATE DR_0 00071 00072 /*! 00073 * Minimal Rx1 receive datarate offset 00074 */ 00075 #define CN779_MIN_RX1_DR_OFFSET 0 00076 00077 /*! 00078 * Maximal Rx1 receive datarate offset 00079 */ 00080 #define CN779_MAX_RX1_DR_OFFSET 5 00081 00082 /*! 00083 * Default Rx1 receive datarate offset 00084 */ 00085 #define CN779_DEFAULT_RX1_DR_OFFSET 0 00086 00087 /*! 00088 * Minimal Tx output power that can be used by the node 00089 */ 00090 #define CN779_MIN_TX_POWER TX_POWER_5 00091 00092 /*! 00093 * Maximal Tx output power that can be used by the node 00094 */ 00095 #define CN779_MAX_TX_POWER TX_POWER_0 00096 00097 /*! 00098 * Default Tx output power used by the node 00099 */ 00100 #define CN779_DEFAULT_TX_POWER TX_POWER_0 00101 00102 /*! 00103 * Default Max EIRP 00104 */ 00105 #define CN779_DEFAULT_MAX_EIRP 12.15f 00106 00107 /*! 00108 * Default antenna gain 00109 */ 00110 #define CN779_DEFAULT_ANTENNA_GAIN 2.15f 00111 00112 /*! 00113 * ADR Ack limit 00114 */ 00115 #define CN779_ADR_ACK_LIMIT 64 00116 00117 /*! 00118 * ADR Ack delay 00119 */ 00120 #define CN779_ADR_ACK_DELAY 32 00121 00122 /*! 00123 * Enabled or disabled the duty cycle 00124 */ 00125 #define CN779_DUTY_CYCLE_ENABLED 1 00126 00127 /*! 00128 * Maximum RX window duration 00129 */ 00130 #define CN779_MAX_RX_WINDOW 3000 00131 00132 /*! 00133 * Receive delay 1 00134 */ 00135 #define CN779_RECEIVE_DELAY1 1000 00136 00137 /*! 00138 * Receive delay 2 00139 */ 00140 #define CN779_RECEIVE_DELAY2 2000 00141 00142 /*! 00143 * Join accept delay 1 00144 */ 00145 #define CN779_JOIN_ACCEPT_DELAY1 5000 00146 00147 /*! 00148 * Join accept delay 2 00149 */ 00150 #define CN779_JOIN_ACCEPT_DELAY2 6000 00151 00152 /*! 00153 * Maximum frame counter gap 00154 */ 00155 #define CN779_MAX_FCNT_GAP 16384 00156 00157 /*! 00158 * Ack timeout 00159 */ 00160 #define CN779_ACKTIMEOUT 2000 00161 00162 /*! 00163 * Random ack timeout limits 00164 */ 00165 #define CN779_ACK_TIMEOUT_RND 1000 00166 00167 /*! 00168 * Verification of default datarate 00169 */ 00170 #if ( CN779_DEFAULT_DATARATE > DR_5 ) 00171 #error "A default DR higher than DR_5 may lead to connectivity loss." 00172 #endif 00173 00174 /*! 00175 * Second reception window channel frequency definition. 00176 */ 00177 #define CN779_RX_WND_2_FREQ 786000000 00178 00179 /*! 00180 * Second reception window channel datarate definition. 00181 */ 00182 #define CN779_RX_WND_2_DR DR_0 00183 00184 /*! 00185 * Band 0 definition 00186 * { DutyCycle, TxMaxPower, LastJoinTxDoneTime, LastTxDoneTime, TimeOff } 00187 */ 00188 static const band_t CN779_BAND0 = {100, CN779_MAX_TX_POWER, 0, 0, 0, 779500000, 786500000}; // 1.0 % 00189 00190 /*! 00191 * LoRaMac default channel 1 00192 * Channel = { Frequency [Hz], RX1 Frequency [Hz], { ( ( DrMax << 4 ) | DrMin ) }, Band } 00193 */ 00194 static const channel_params_t CN779_LC1 = {779500000, 0, { ( ( DR_5 << 4 ) | DR_0 ) }, 0}; 00195 /*! 00196 * LoRaMac default channel 2 00197 * Channel = { Frequency [Hz], RX1 Frequency [Hz], { ( ( DrMax << 4 ) | DrMin ) }, Band } 00198 */ 00199 static const channel_params_t CN779_LC2 = {779700000, 0, { ( ( DR_5 << 4 ) | DR_0 ) }, 0}; 00200 00201 /*! 00202 * LoRaMac default channel 3 00203 * Channel = { Frequency [Hz], RX1 Frequency [Hz], { ( ( DrMax << 4 ) | DrMin ) }, Band } 00204 */ 00205 static const channel_params_t CN779_LC3 = {779900000, 0, { ( ( DR_5 << 4 ) | DR_0 ) }, 0}; 00206 00207 /*! 00208 * LoRaMac channels which are allowed for the join procedure 00209 */ 00210 #define CN779_JOIN_CHANNELS (uint16_t) (LC(1) | LC(2) | LC(3)) 00211 00212 /*! 00213 * Data rates table definition 00214 */ 00215 static const uint8_t datarates_CN779 [] = {12, 11, 10, 9, 8, 7, 7, 50}; 00216 00217 /*! 00218 * Bandwidths table definition in Hz 00219 */ 00220 static const uint32_t bandwidths_CN779 [] = {125000, 125000, 125000, 125000, 125000, 125000, 250000, 0}; 00221 00222 /*! 00223 * Maximum payload with respect to the datarate index. Cannot operate with repeater. 00224 */ 00225 static const uint8_t max_payloads_CN779 [] = {51, 51, 51, 115, 242, 242, 242, 242}; 00226 00227 /*! 00228 * Maximum payload with respect to the datarate index. Can operate with repeater. 00229 */ 00230 static const uint8_t max_payloads_with_repeater_CN779 [] = {51, 51, 51, 115, 222, 222, 222, 222}; 00231 00232 00233 LoRaPHYCN779::LoRaPHYCN779(LoRaWANTimeHandler &lora_time) 00234 : LoRaPHY(lora_time) 00235 { 00236 bands[0] = CN779_BAND0 ; 00237 00238 // Channels 00239 channels[0] = CN779_LC1 ; 00240 channels[1] = CN779_LC2 ; 00241 channels[2] = CN779_LC3 ; 00242 00243 // Initialize the channels default mask 00244 default_channel_mask[0] = LC(1) + LC(2) + LC(3); 00245 // Update the channels mask 00246 copy_channel_mask(channel_mask, default_channel_mask, CN779_CHANNEL_MASK_SIZE); 00247 00248 // set default channels 00249 phy_params.channels.channel_list = channels; 00250 phy_params.channels.channel_list_size = CN779_MAX_NB_CHANNELS; 00251 phy_params.channels.mask = channel_mask; 00252 phy_params.channels.default_mask = default_channel_mask; 00253 phy_params.channels.mask_size = CN779_CHANNEL_MASK_SIZE; 00254 00255 // set bands for CN779 spectrum 00256 phy_params.bands.table = bands; 00257 phy_params.bands.size = CN779_MAX_NB_BANDS; 00258 00259 // set bandwidths available in CN779 spectrum 00260 phy_params.bandwidths.table = (void *) bandwidths_CN779 ; 00261 phy_params.bandwidths.size = 8; 00262 00263 // set data rates available in CN779 spectrum 00264 phy_params.datarates.table = (void *) datarates_CN779 ; 00265 phy_params.datarates.size = 8; 00266 00267 // set payload sizes with respect to data rates 00268 phy_params.payloads.table = (void *) max_payloads_CN779 ; 00269 phy_params.payloads.size = 8; 00270 phy_params.payloads_with_repeater.table = (void *) max_payloads_with_repeater_CN779 ; 00271 phy_params.payloads_with_repeater.size = 8; 00272 00273 // dwell time setting 00274 phy_params.ul_dwell_time_setting = 0; 00275 phy_params.dl_dwell_time_setting = 0; 00276 00277 // set initial and default parameters 00278 phy_params.duty_cycle_enabled = CN779_DUTY_CYCLE_ENABLED; 00279 phy_params.accept_tx_param_setup_req = false; 00280 phy_params.fsk_supported = true; 00281 phy_params.cflist_supported = true; 00282 phy_params.dl_channel_req_supported = true; 00283 phy_params.custom_channelplans_supported = true; 00284 phy_params.default_channel_cnt = CN779_NUMB_DEFAULT_CHANNELS; 00285 phy_params.max_channel_cnt = CN779_MAX_NB_CHANNELS; 00286 phy_params.cflist_channel_cnt = CN779_NUMB_CHANNELS_CF_LIST; 00287 phy_params.min_tx_datarate = CN779_TX_MIN_DATARATE; 00288 phy_params.max_tx_datarate = CN779_TX_MAX_DATARATE; 00289 phy_params.min_rx_datarate = CN779_RX_MIN_DATARATE; 00290 phy_params.max_rx_datarate = CN779_RX_MAX_DATARATE; 00291 phy_params.default_datarate = CN779_DEFAULT_DATARATE; 00292 phy_params.default_max_datarate = CN779_DEFAULT_MAX_DATARATE; 00293 phy_params.min_rx1_dr_offset = CN779_MIN_RX1_DR_OFFSET; 00294 phy_params.max_rx1_dr_offset = CN779_MAX_RX1_DR_OFFSET; 00295 phy_params.default_rx1_dr_offset = CN779_DEFAULT_RX1_DR_OFFSET; 00296 phy_params.min_tx_power = CN779_MIN_TX_POWER; 00297 phy_params.max_tx_power = CN779_MAX_TX_POWER; 00298 phy_params.default_tx_power = CN779_DEFAULT_TX_POWER; 00299 phy_params.default_max_eirp = CN779_DEFAULT_MAX_EIRP; 00300 phy_params.default_antenna_gain = CN779_DEFAULT_ANTENNA_GAIN; 00301 phy_params.adr_ack_limit = CN779_ADR_ACK_LIMIT; 00302 phy_params.adr_ack_delay = CN779_ADR_ACK_DELAY; 00303 phy_params.max_rx_window = CN779_MAX_RX_WINDOW; 00304 phy_params.recv_delay1 = CN779_RECEIVE_DELAY1; 00305 phy_params.recv_delay2 = CN779_RECEIVE_DELAY2; 00306 phy_params.join_channel_mask = CN779_JOIN_CHANNELS; 00307 phy_params.join_accept_delay1 = CN779_JOIN_ACCEPT_DELAY1; 00308 phy_params.join_accept_delay2 = CN779_JOIN_ACCEPT_DELAY2; 00309 phy_params.max_fcnt_gap = CN779_MAX_FCNT_GAP; 00310 phy_params.ack_timeout = CN779_ACKTIMEOUT; 00311 phy_params.ack_timeout_rnd = CN779_ACK_TIMEOUT_RND; 00312 phy_params.rx_window2_datarate = CN779_RX_WND_2_DR; 00313 phy_params.rx_window2_frequency = CN779_RX_WND_2_FREQ; 00314 } 00315 00316 LoRaPHYCN779::~LoRaPHYCN779() 00317 { 00318 } 00319
Generated on Tue Jul 12 2022 14:23:51 by
