Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /**
kenjiArai 0:5b88d5760320 2 * @file LoRaPHYUS915.h
kenjiArai 0:5b88d5760320 3 *
kenjiArai 0:5b88d5760320 4 * @brief Implements LoRaPHY for US 915 MHz band
kenjiArai 0:5b88d5760320 5 *
kenjiArai 0:5b88d5760320 6 * \code
kenjiArai 0:5b88d5760320 7 * ______ _
kenjiArai 0:5b88d5760320 8 * / _____) _ | |
kenjiArai 0:5b88d5760320 9 * ( (____ _____ ____ _| |_ _____ ____| |__
kenjiArai 0:5b88d5760320 10 * \____ \| ___ | (_ _) ___ |/ ___) _ \
kenjiArai 0:5b88d5760320 11 * _____) ) ____| | | || |_| ____( (___| | | |
kenjiArai 0:5b88d5760320 12 * (______/|_____)_|_|_| \__)_____)\____)_| |_|
kenjiArai 0:5b88d5760320 13 * (C)2013 Semtech
kenjiArai 0:5b88d5760320 14 * ___ _____ _ ___ _ _____ ___ ___ ___ ___
kenjiArai 0:5b88d5760320 15 * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
kenjiArai 0:5b88d5760320 16 * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
kenjiArai 0:5b88d5760320 17 * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
kenjiArai 0:5b88d5760320 18 * embedded.connectivity.solutions===============
kenjiArai 0:5b88d5760320 19 *
kenjiArai 0:5b88d5760320 20 * \endcode
kenjiArai 0:5b88d5760320 21 *
kenjiArai 0:5b88d5760320 22 *
kenjiArai 0:5b88d5760320 23 * License: Revised BSD License, see LICENSE.TXT file include in the project
kenjiArai 0:5b88d5760320 24 *
kenjiArai 0:5b88d5760320 25 * Maintainer: Miguel Luis ( Semtech ), Gregory Cristian ( Semtech ) and Daniel Jaeckle ( STACKFORCE )
kenjiArai 0:5b88d5760320 26 *
kenjiArai 0:5b88d5760320 27 * Copyright (c) 2017, Arm Limited and affiliates.
kenjiArai 0:5b88d5760320 28 * SPDX-License-Identifier: BSD-3-Clause
kenjiArai 0:5b88d5760320 29 *
kenjiArai 0:5b88d5760320 30 */
kenjiArai 0:5b88d5760320 31
kenjiArai 0:5b88d5760320 32 #ifndef MBED_OS_LORAPHYUS_915_H_
kenjiArai 0:5b88d5760320 33 #define MBED_OS_LORAPHYUS_915_H_
kenjiArai 0:5b88d5760320 34
kenjiArai 0:5b88d5760320 35 #if !(DOXYGEN_ONLY)
kenjiArai 0:5b88d5760320 36
kenjiArai 0:5b88d5760320 37 #include "LoRaPHY.h"
kenjiArai 0:5b88d5760320 38
kenjiArai 0:5b88d5760320 39 /*!
kenjiArai 0:5b88d5760320 40 * LoRaMac maximum number of channels
kenjiArai 0:5b88d5760320 41 */
kenjiArai 0:5b88d5760320 42 #define US915_MAX_NB_CHANNELS 72
kenjiArai 0:5b88d5760320 43
kenjiArai 0:5b88d5760320 44 /*!
kenjiArai 0:5b88d5760320 45 * LoRaMac maximum number of bands
kenjiArai 0:5b88d5760320 46 */
kenjiArai 0:5b88d5760320 47 #define US915_MAX_NB_BANDS 1
kenjiArai 0:5b88d5760320 48
kenjiArai 0:5b88d5760320 49 #define US915_CHANNEL_MASK_SIZE 5
kenjiArai 0:5b88d5760320 50
kenjiArai 0:5b88d5760320 51
kenjiArai 0:5b88d5760320 52 class LoRaPHYUS915 : public LoRaPHY {
kenjiArai 0:5b88d5760320 53
kenjiArai 0:5b88d5760320 54 public:
kenjiArai 0:5b88d5760320 55
kenjiArai 0:5b88d5760320 56 LoRaPHYUS915();
kenjiArai 0:5b88d5760320 57 virtual ~LoRaPHYUS915();
kenjiArai 0:5b88d5760320 58
kenjiArai 0:5b88d5760320 59 virtual void restore_default_channels();
kenjiArai 0:5b88d5760320 60
kenjiArai 0:5b88d5760320 61 virtual bool rx_config(rx_config_params_t *config);
kenjiArai 0:5b88d5760320 62
kenjiArai 0:5b88d5760320 63 virtual bool tx_config(tx_config_params_t *config, int8_t *tx_power,
kenjiArai 0:5b88d5760320 64 lorawan_time_t *tx_toa);
kenjiArai 0:5b88d5760320 65
kenjiArai 0:5b88d5760320 66 virtual uint8_t link_ADR_request(adr_req_params_t *params,
kenjiArai 0:5b88d5760320 67 int8_t *dr_out, int8_t *tx_power_out,
kenjiArai 0:5b88d5760320 68 uint8_t *nb_rep_out,
kenjiArai 0:5b88d5760320 69 uint8_t *nb_bytes_parsed);
kenjiArai 0:5b88d5760320 70
kenjiArai 0:5b88d5760320 71 virtual uint8_t accept_rx_param_setup_req(rx_param_setup_req_t *params);
kenjiArai 0:5b88d5760320 72
kenjiArai 0:5b88d5760320 73 virtual int8_t get_alternate_DR(uint8_t nb_trials);
kenjiArai 0:5b88d5760320 74
kenjiArai 0:5b88d5760320 75 virtual lorawan_status_t set_next_channel(channel_selection_params_t *params, uint8_t *channel,
kenjiArai 0:5b88d5760320 76 lorawan_time_t *time, lorawan_time_t *aggregate_timeOff);
kenjiArai 0:5b88d5760320 77
kenjiArai 0:5b88d5760320 78 virtual void set_tx_cont_mode(cw_mode_params_t *continuousWave,
kenjiArai 0:5b88d5760320 79 uint32_t frequency = 0);
kenjiArai 0:5b88d5760320 80
kenjiArai 0:5b88d5760320 81 virtual uint8_t apply_DR_offset(int8_t dr, int8_t dr_offset);
kenjiArai 0:5b88d5760320 82
kenjiArai 0:5b88d5760320 83 private:
kenjiArai 0:5b88d5760320 84
kenjiArai 0:5b88d5760320 85 /**
kenjiArai 0:5b88d5760320 86 * Sets the intersection of source and destination channel masks
kenjiArai 0:5b88d5760320 87 * into the destination.
kenjiArai 0:5b88d5760320 88 */
kenjiArai 0:5b88d5760320 89 void intersect_channel_mask(const uint16_t *source, uint16_t *destination,
kenjiArai 0:5b88d5760320 90 uint8_t size);
kenjiArai 0:5b88d5760320 91
kenjiArai 0:5b88d5760320 92 /**
kenjiArai 0:5b88d5760320 93 * Fills channel mask array based upon the provided FSB mask
kenjiArai 0:5b88d5760320 94 */
kenjiArai 0:5b88d5760320 95 void fill_channel_mask_with_fsb(const uint16_t *expectation,
kenjiArai 0:5b88d5760320 96 const uint16_t *fsb_mask,
kenjiArai 0:5b88d5760320 97 uint16_t *channel_mask, uint8_t size);
kenjiArai 0:5b88d5760320 98
kenjiArai 0:5b88d5760320 99 /**
kenjiArai 0:5b88d5760320 100 * Fills channel mask array with a given value
kenjiArai 0:5b88d5760320 101 */
kenjiArai 0:5b88d5760320 102 void fill_channel_mask_with_value(uint16_t *channel_mask,
kenjiArai 0:5b88d5760320 103 uint16_t value, uint8_t size);
kenjiArai 0:5b88d5760320 104
kenjiArai 0:5b88d5760320 105 int8_t limit_tx_power(int8_t tx_power, int8_t max_band_tx_power,
kenjiArai 0:5b88d5760320 106 int8_t datarate);
kenjiArai 0:5b88d5760320 107
kenjiArai 0:5b88d5760320 108 /*!
kenjiArai 0:5b88d5760320 109 * LoRaMAC channels
kenjiArai 0:5b88d5760320 110 */
kenjiArai 0:5b88d5760320 111 channel_params_t channels[US915_MAX_NB_CHANNELS];
kenjiArai 0:5b88d5760320 112
kenjiArai 0:5b88d5760320 113 /*!
kenjiArai 0:5b88d5760320 114 * LoRaMac bands
kenjiArai 0:5b88d5760320 115 */
kenjiArai 0:5b88d5760320 116 band_t bands[US915_MAX_NB_BANDS];
kenjiArai 0:5b88d5760320 117
kenjiArai 0:5b88d5760320 118 /*!
kenjiArai 0:5b88d5760320 119 * LoRaMac channel mask
kenjiArai 0:5b88d5760320 120 */
kenjiArai 0:5b88d5760320 121 uint16_t channel_mask[US915_CHANNEL_MASK_SIZE];
kenjiArai 0:5b88d5760320 122
kenjiArai 0:5b88d5760320 123 /*!
kenjiArai 0:5b88d5760320 124 * Previously used channel mask
kenjiArai 0:5b88d5760320 125 */
kenjiArai 0:5b88d5760320 126 uint16_t current_channel_mask[US915_CHANNEL_MASK_SIZE];
kenjiArai 0:5b88d5760320 127
kenjiArai 0:5b88d5760320 128 /*!
kenjiArai 0:5b88d5760320 129 * LoRaMac default channel mask
kenjiArai 0:5b88d5760320 130 */
kenjiArai 0:5b88d5760320 131 uint16_t default_channel_mask[US915_CHANNEL_MASK_SIZE];
kenjiArai 0:5b88d5760320 132 };
kenjiArai 0:5b88d5760320 133
kenjiArai 0:5b88d5760320 134 #endif /* DOXYGEN_ONLY */
kenjiArai 0:5b88d5760320 135 #endif /* MBED_OS_LORAPHY_US915_H_ */