Mistake on this page?
Report an issue in GitHub or email us
LoRaPHYUS915.h
Go to the documentation of this file.
1 /**
2  * @file LoRaPHYUS915.h
3  *
4  * @brief Implements LoRaPHY for US 915 MHz band
5  *
6  * \code
7  * ______ _
8  * / _____) _ | |
9  * ( (____ _____ ____ _| |_ _____ ____| |__
10  * \____ \| ___ | (_ _) ___ |/ ___) _ \
11  * _____) ) ____| | | || |_| ____( (___| | | |
12  * (______/|_____)_|_|_| \__)_____)\____)_| |_|
13  * (C)2013 Semtech
14  * ___ _____ _ ___ _ _____ ___ ___ ___ ___
15  * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
16  * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
17  * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
18  * embedded.connectivity.solutions===============
19  *
20  * \endcode
21  *
22  *
23  * License: Revised BSD License, see LICENSE.TXT file include in the project
24  *
25  * Maintainer: Miguel Luis ( Semtech ), Gregory Cristian ( Semtech ) and Daniel Jaeckle ( STACKFORCE )
26  *
27  * Copyright (c) 2017, Arm Limited and affiliates.
28  * SPDX-License-Identifier: BSD-3-Clause
29  *
30  */
31 
32 #ifndef MBED_OS_LORAPHYUS_915_H_
33 #define MBED_OS_LORAPHYUS_915_H_
34 
35 #if !(DOXYGEN_ONLY)
36 
37 #include "LoRaPHY.h"
38 
39 /*!
40  * LoRaMac maximum number of channels
41  */
42 #define US915_MAX_NB_CHANNELS 72
43 
44 /*!
45  * LoRaMac maximum number of bands
46  */
47 #define US915_MAX_NB_BANDS 1
48 
49 #define US915_CHANNEL_MASK_SIZE 5
50 
51 
52 class LoRaPHYUS915 : public LoRaPHY {
53 
54 public:
55 
56  LoRaPHYUS915();
57  virtual ~LoRaPHYUS915();
58 
59  virtual void restore_default_channels();
60 
61  virtual bool rx_config(rx_config_params_t *config);
62 
63  virtual bool tx_config(tx_config_params_t *config, int8_t *tx_power,
64  lorawan_time_t *tx_toa);
65 
66  virtual uint8_t link_ADR_request(adr_req_params_t *params,
67  int8_t *dr_out, int8_t *tx_power_out,
68  uint8_t *nb_rep_out,
69  uint8_t *nb_bytes_parsed);
70 
71  virtual uint8_t accept_rx_param_setup_req(rx_param_setup_req_t *params);
72 
73  virtual int8_t get_alternate_DR(uint8_t nb_trials);
74 
75  virtual lorawan_status_t set_next_channel(channel_selection_params_t *params, uint8_t *channel,
76  lorawan_time_t *time, lorawan_time_t *aggregate_timeOff);
77 
78  virtual void set_tx_cont_mode(cw_mode_params_t *continuousWave,
79  uint32_t frequency = 0);
80 
81  virtual uint8_t apply_DR_offset(int8_t dr, int8_t dr_offset);
82 
83 private:
84 
85  /**
86  * Sets the intersection of source and destination channel masks
87  * into the destination.
88  */
89  void intersect_channel_mask(const uint16_t *source, uint16_t *destination,
90  uint8_t size);
91 
92  /**
93  * Fills channel mask array based upon the provided FSB mask
94  */
95  void fill_channel_mask_with_fsb(const uint16_t *expectation,
96  const uint16_t *fsb_mask,
97  uint16_t *channel_mask, uint8_t size);
98 
99  /**
100  * Fills channel mask array with a given value
101  */
102  void fill_channel_mask_with_value(uint16_t *channel_mask,
103  uint16_t value, uint8_t size);
104 
105  int8_t limit_tx_power(int8_t tx_power, int8_t max_band_tx_power,
106  int8_t datarate);
107 
108  /*!
109  * LoRaMAC channels
110  */
111  channel_params_t channels[US915_MAX_NB_CHANNELS];
112 
113  /*!
114  * LoRaMac bands
115  */
116  band_t bands[US915_MAX_NB_BANDS];
117 
118  /*!
119  * LoRaMac channel mask
120  */
121  uint16_t channel_mask[US915_CHANNEL_MASK_SIZE];
122 
123  /*!
124  * Previously used channel mask
125  */
126  uint16_t current_channel_mask[US915_CHANNEL_MASK_SIZE];
127 
128  /*!
129  * LoRaMac default channel mask
130  */
131  uint16_t default_channel_mask[US915_CHANNEL_MASK_SIZE];
132 };
133 
134 #endif /* DOXYGEN_ONLY */
135 #endif /* MBED_OS_LORAPHY_US915_H_ */
TX configuration parameters.
Definition: lora_phy_ds.h:275
An abstract class providing radio object to children and provide base for implementing LoRa PHY layer...
virtual void set_tx_cont_mode(cw_mode_params_t *continuous_wave, uint32_t frequency=0)
Puts the radio into continuous wave mode.
virtual int8_t get_alternate_DR(uint8_t nb_trials)
Alternates the datarate of the channel for the join request.
virtual bool tx_config(tx_config_params_t *tx_config, int8_t *tx_power, lorawan_time_t *tx_toa)
Configure radio transmission.
virtual uint8_t link_ADR_request(adr_req_params_t *params, int8_t *dr_out, int8_t *tx_power_out, uint8_t *nb_rep_out, uint8_t *nb_bytes_parsed)
Processes a Link ADR Request.
uint32_t lorawan_time_t
Timer time variable definition.
virtual lorawan_status_t set_next_channel(channel_selection_params_t *nextChanParams, uint8_t *channel, lorawan_time_t *time, lorawan_time_t *aggregatedTimeOff)
Searches and sets the next available channel.
LoRaPHY Class Parent class for LoRa regional PHY implementations.
Definition: LoRaPHY.h:46
enum lorawan_status lorawan_status_t
lorawan_status_t contains status codes in response to stack operations
virtual void restore_default_channels()
Enables default channels only.
The parameter structure for the function RegionNextChannel.
Definition: lora_phy_ds.h:430
Contains rx parameter setup request coming from network server.
Definition: lora_phy_ds.h:412
virtual bool rx_config(rx_config_params_t *config)
Configure radio reception.
virtual uint8_t apply_DR_offset(int8_t dr, int8_t dr_offset)
Computes new data rate according to the given offset.
virtual uint8_t accept_rx_param_setup_req(rx_param_setup_req_t *params)
Accept or rejects RxParamSetupReq MAC command.
This structure contains parameters for ADR request coming from network server.
Definition: lora_phy_ds.h:306
DO NOT MODIFY, WILL BREAK THE API!
Default user application maximum data size for transmission.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.