Manh Pham / Mbed OS Nucleo_rtos_basic_ir_controller
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LoRaPHYUS915Hybrid.h Source File

LoRaPHYUS915Hybrid.h

Go to the documentation of this file.
00001 /**
00002  *  @file LoRaPHYUS915Hybrid.h
00003  *
00004  *  @brief Implements LoRaPHY for US 915 MHz Hybrid 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 #ifndef MBED_OS_LORAPHY_US915_HYBRID_H_
00033 #define MBED_OS_LORAPHY_US915_HYBRID_H_
00034 
00035 #include "LoRaPHY.h"
00036 
00037 
00038 /*!
00039  * LoRaMac maximum number of channels
00040  */
00041 #define US915_HYBRID_MAX_NB_CHANNELS                72
00042 
00043 /*!
00044  * LoRaMac maximum number of bands
00045  */
00046 #define US915_HYBRID_MAX_NB_BANDS                   1
00047 
00048 #define US915_HYBRID_CHANNEL_MASK_SIZE             5
00049 
00050 
00051 class LoRaPHYUS915Hybrid : public LoRaPHY {
00052 
00053 public:
00054 
00055     LoRaPHYUS915Hybrid(LoRaWANTimeHandler &lora_time);
00056     virtual ~LoRaPHYUS915Hybrid();
00057 
00058     virtual void restore_default_channels();
00059 
00060     virtual bool get_next_ADR(bool restore_channel_mask, int8_t& dr_out,
00061                               int8_t& tx_power_out, uint32_t& adr_ack_cnt);
00062 
00063     virtual bool rx_config(rx_config_params_t * rxConfig, int8_t* datarate);
00064 
00065     virtual bool tx_config(tx_config_params_t* tx_config, int8_t* tx_power,
00066                                 lorawan_time_t* tx_toa);
00067 
00068     virtual uint8_t link_ADR_request(adr_req_params_t* params,
00069                                      int8_t* dr_out, int8_t* tx_power_out,
00070                                      uint8_t* nb_rep_out,
00071                                      uint8_t* nb_bytes_parsed);
00072 
00073     virtual uint8_t accept_rx_param_setup_req(rx_param_setup_req_t* params);
00074 
00075     virtual int8_t get_alternate_DR(uint8_t nb_trials);
00076 
00077     virtual lorawan_status_t set_next_channel(channel_selection_params_t* params,
00078                                               uint8_t* channel, lorawan_time_t* time,
00079                                               lorawan_time_t* aggregate_timeoff);
00080 
00081     virtual void set_tx_cont_mode(cw_mode_params_t * continuousWave,
00082                                   uint32_t frequency = 0);
00083 
00084     virtual uint8_t apply_DR_offset(int8_t dr, int8_t dr_offset);
00085 
00086 private:
00087     int8_t limit_tx_power(int8_t tx_power, int8_t max_band_tx_power, int8_t datarate);
00088     bool validate_channel_mask(uint16_t* channel_mask);
00089     void reenable_500khz_channels(uint16_t mask, uint16_t* channel_mask);
00090 
00091     /*!
00092      * LoRaMAC channels
00093      */
00094     channel_params_t  channels[US915_HYBRID_MAX_NB_CHANNELS];
00095 
00096     /*!
00097      * LoRaMac bands
00098      */
00099     band_t  bands[US915_HYBRID_MAX_NB_BANDS];
00100 
00101     /*!
00102      * LoRaMac channels mask
00103      */
00104     uint16_t channel_mask[US915_HYBRID_CHANNEL_MASK_SIZE];
00105 
00106     /*!
00107      * Previously used channel mask
00108      */
00109     uint16_t current_channel_mask[US915_HYBRID_CHANNEL_MASK_SIZE];
00110 
00111     /*!
00112      * LoRaMac default channel mask
00113      */
00114     uint16_t default_channel_mask[US915_HYBRID_CHANNEL_MASK_SIZE];
00115 };
00116 
00117 #endif /* MBED_OS_LORAPHY_US915HYBRID_H_ */