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.
Dependencies: nRF51_Vdd TextLCD BME280
TYBLE16_os5_BASE/features/nanostack/sal-stack-nanostack/nanostack/fhss_config.h@4:e9dfb4ca4277, 2018-12-08 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Dec 08 02:13:04 2018 +0000
- Revision:
- 4:e9dfb4ca4277
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 4:e9dfb4ca4277 | 1 | /* |
kenjiArai | 4:e9dfb4ca4277 | 2 | * Copyright (c) 2015-2018, Arm Limited and affiliates. |
kenjiArai | 4:e9dfb4ca4277 | 3 | * SPDX-License-Identifier: Apache-2.0 |
kenjiArai | 4:e9dfb4ca4277 | 4 | * |
kenjiArai | 4:e9dfb4ca4277 | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
kenjiArai | 4:e9dfb4ca4277 | 6 | * you may not use this file except in compliance with the License. |
kenjiArai | 4:e9dfb4ca4277 | 7 | * You may obtain a copy of the License at |
kenjiArai | 4:e9dfb4ca4277 | 8 | * |
kenjiArai | 4:e9dfb4ca4277 | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
kenjiArai | 4:e9dfb4ca4277 | 10 | * |
kenjiArai | 4:e9dfb4ca4277 | 11 | * Unless required by applicable law or agreed to in writing, software |
kenjiArai | 4:e9dfb4ca4277 | 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
kenjiArai | 4:e9dfb4ca4277 | 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
kenjiArai | 4:e9dfb4ca4277 | 14 | * See the License for the specific language governing permissions and |
kenjiArai | 4:e9dfb4ca4277 | 15 | * limitations under the License. |
kenjiArai | 4:e9dfb4ca4277 | 16 | */ |
kenjiArai | 4:e9dfb4ca4277 | 17 | |
kenjiArai | 4:e9dfb4ca4277 | 18 | /** |
kenjiArai | 4:e9dfb4ca4277 | 19 | * \file fhss_config.h |
kenjiArai | 4:e9dfb4ca4277 | 20 | * \brief |
kenjiArai | 4:e9dfb4ca4277 | 21 | */ |
kenjiArai | 4:e9dfb4ca4277 | 22 | |
kenjiArai | 4:e9dfb4ca4277 | 23 | #ifndef FHSS_CONFIG_H |
kenjiArai | 4:e9dfb4ca4277 | 24 | #define FHSS_CONFIG_H |
kenjiArai | 4:e9dfb4ca4277 | 25 | |
kenjiArai | 4:e9dfb4ca4277 | 26 | |
kenjiArai | 4:e9dfb4ca4277 | 27 | #ifdef __cplusplus |
kenjiArai | 4:e9dfb4ca4277 | 28 | extern "C" { |
kenjiArai | 4:e9dfb4ca4277 | 29 | #endif |
kenjiArai | 4:e9dfb4ca4277 | 30 | |
kenjiArai | 4:e9dfb4ca4277 | 31 | #include "fhss_ws_extension.h" |
kenjiArai | 4:e9dfb4ca4277 | 32 | |
kenjiArai | 4:e9dfb4ca4277 | 33 | /** |
kenjiArai | 4:e9dfb4ca4277 | 34 | * @brief WS channel functions. |
kenjiArai | 4:e9dfb4ca4277 | 35 | */ |
kenjiArai | 4:e9dfb4ca4277 | 36 | typedef enum |
kenjiArai | 4:e9dfb4ca4277 | 37 | { |
kenjiArai | 4:e9dfb4ca4277 | 38 | /** Fixed channel. */ |
kenjiArai | 4:e9dfb4ca4277 | 39 | WS_FIXED_CHANNEL, |
kenjiArai | 4:e9dfb4ca4277 | 40 | /** TR51 channel function. */ |
kenjiArai | 4:e9dfb4ca4277 | 41 | WS_TR51CF, |
kenjiArai | 4:e9dfb4ca4277 | 42 | /** Direct Hash channel function. */ |
kenjiArai | 4:e9dfb4ca4277 | 43 | WS_DH1CF, |
kenjiArai | 4:e9dfb4ca4277 | 44 | /** Vendor Defined channel function. */ |
kenjiArai | 4:e9dfb4ca4277 | 45 | WS_VENDOR_DEF_CF |
kenjiArai | 4:e9dfb4ca4277 | 46 | } fhss_ws_channel_functions; |
kenjiArai | 4:e9dfb4ca4277 | 47 | |
kenjiArai | 4:e9dfb4ca4277 | 48 | /** |
kenjiArai | 4:e9dfb4ca4277 | 49 | * \brief Struct fhss_tuning_parameter defines FHSS tuning parameters. |
kenjiArai | 4:e9dfb4ca4277 | 50 | * All delays are given in microseconds. |
kenjiArai | 4:e9dfb4ca4277 | 51 | */ |
kenjiArai | 4:e9dfb4ca4277 | 52 | typedef struct fhss_tuning_parameter |
kenjiArai | 4:e9dfb4ca4277 | 53 | { |
kenjiArai | 4:e9dfb4ca4277 | 54 | /** Delay between data pushed to PHY TX function and TX started (Contains CSMA-CA maximum random period). */ |
kenjiArai | 4:e9dfb4ca4277 | 55 | uint32_t tx_processing_delay; |
kenjiArai | 4:e9dfb4ca4277 | 56 | |
kenjiArai | 4:e9dfb4ca4277 | 57 | /** Delay between TX done (by transmitter) and received data pushed to MAC (by receiver). */ |
kenjiArai | 4:e9dfb4ca4277 | 58 | uint32_t rx_processing_delay; |
kenjiArai | 4:e9dfb4ca4277 | 59 | |
kenjiArai | 4:e9dfb4ca4277 | 60 | /** Delay between TX done (by transmitter) and Ack transmission started (by receiver) */ |
kenjiArai | 4:e9dfb4ca4277 | 61 | uint32_t ack_processing_delay; |
kenjiArai | 4:e9dfb4ca4277 | 62 | } fhss_tuning_parameter_t; |
kenjiArai | 4:e9dfb4ca4277 | 63 | |
kenjiArai | 4:e9dfb4ca4277 | 64 | /** |
kenjiArai | 4:e9dfb4ca4277 | 65 | * \brief Struct fhss_configuration defines basic configuration of FHSS. |
kenjiArai | 4:e9dfb4ca4277 | 66 | */ |
kenjiArai | 4:e9dfb4ca4277 | 67 | typedef struct fhss_configuration |
kenjiArai | 4:e9dfb4ca4277 | 68 | { |
kenjiArai | 4:e9dfb4ca4277 | 69 | /** Tuning parameters can be used to enhance synchronization accuracy*/ |
kenjiArai | 4:e9dfb4ca4277 | 70 | fhss_tuning_parameter_t fhss_tuning_parameters; |
kenjiArai | 4:e9dfb4ca4277 | 71 | |
kenjiArai | 4:e9dfb4ca4277 | 72 | /** Maximum used interval for requesting synchronization info from FHSS parent device (seconds). */ |
kenjiArai | 4:e9dfb4ca4277 | 73 | uint16_t fhss_max_synch_interval; |
kenjiArai | 4:e9dfb4ca4277 | 74 | |
kenjiArai | 4:e9dfb4ca4277 | 75 | /** Number of channel retries. */ |
kenjiArai | 4:e9dfb4ca4277 | 76 | uint8_t fhss_number_of_channel_retries; |
kenjiArai | 4:e9dfb4ca4277 | 77 | |
kenjiArai | 4:e9dfb4ca4277 | 78 | /** Channel mask */ |
kenjiArai | 4:e9dfb4ca4277 | 79 | uint32_t channel_mask[8]; |
kenjiArai | 4:e9dfb4ca4277 | 80 | |
kenjiArai | 4:e9dfb4ca4277 | 81 | } fhss_configuration_t; |
kenjiArai | 4:e9dfb4ca4277 | 82 | |
kenjiArai | 4:e9dfb4ca4277 | 83 | /** |
kenjiArai | 4:e9dfb4ca4277 | 84 | * @brief Get channel using vendor defined channel function. |
kenjiArai | 4:e9dfb4ca4277 | 85 | * @param api FHSS instance. |
kenjiArai | 4:e9dfb4ca4277 | 86 | * @param slot Slot number in channel schedule. |
kenjiArai | 4:e9dfb4ca4277 | 87 | * @param eui64 EUI-64 address of node for which the (unicast) schedule is calculated. NULL for broadcast schedule. |
kenjiArai | 4:e9dfb4ca4277 | 88 | * @param bsi Broadcast schedule identifier used in (broadcast) schedule calculation. |
kenjiArai | 4:e9dfb4ca4277 | 89 | * @param number_of_channels Number of channels in schedule. |
kenjiArai | 4:e9dfb4ca4277 | 90 | * @return Channel. |
kenjiArai | 4:e9dfb4ca4277 | 91 | */ |
kenjiArai | 4:e9dfb4ca4277 | 92 | typedef int32_t fhss_vendor_defined_cf(const fhss_api_t *api, uint16_t slot, uint8_t eui64[8], uint16_t bsi, uint16_t number_of_channels); |
kenjiArai | 4:e9dfb4ca4277 | 93 | |
kenjiArai | 4:e9dfb4ca4277 | 94 | /** |
kenjiArai | 4:e9dfb4ca4277 | 95 | * \brief Struct fhss_ws_configuration defines configuration of WS FHSS. |
kenjiArai | 4:e9dfb4ca4277 | 96 | */ |
kenjiArai | 4:e9dfb4ca4277 | 97 | typedef struct fhss_ws_configuration |
kenjiArai | 4:e9dfb4ca4277 | 98 | { |
kenjiArai | 4:e9dfb4ca4277 | 99 | /** WS channel function. */ |
kenjiArai | 4:e9dfb4ca4277 | 100 | fhss_ws_channel_functions ws_channel_function; |
kenjiArai | 4:e9dfb4ca4277 | 101 | |
kenjiArai | 4:e9dfb4ca4277 | 102 | /** Broadcast schedule identifier. */ |
kenjiArai | 4:e9dfb4ca4277 | 103 | uint16_t bsi; |
kenjiArai | 4:e9dfb4ca4277 | 104 | |
kenjiArai | 4:e9dfb4ca4277 | 105 | /** Unicast dwell interval. Range: 15-250 milliseconds. */ |
kenjiArai | 4:e9dfb4ca4277 | 106 | uint8_t fhss_uc_dwell_interval; |
kenjiArai | 4:e9dfb4ca4277 | 107 | |
kenjiArai | 4:e9dfb4ca4277 | 108 | /** Broadcast interval. Duration between broadcast dwell intervals. Range: 0-16777216 milliseconds. */ |
kenjiArai | 4:e9dfb4ca4277 | 109 | uint32_t fhss_broadcast_interval; |
kenjiArai | 4:e9dfb4ca4277 | 110 | |
kenjiArai | 4:e9dfb4ca4277 | 111 | /** Broadcast dwell interval. Range: 15-250 milliseconds. */ |
kenjiArai | 4:e9dfb4ca4277 | 112 | uint8_t fhss_bc_dwell_interval; |
kenjiArai | 4:e9dfb4ca4277 | 113 | |
kenjiArai | 4:e9dfb4ca4277 | 114 | /** Channel mask. */ |
kenjiArai | 4:e9dfb4ca4277 | 115 | uint32_t channel_mask[8]; |
kenjiArai | 4:e9dfb4ca4277 | 116 | |
kenjiArai | 4:e9dfb4ca4277 | 117 | /** Vendor defined channel function. */ |
kenjiArai | 4:e9dfb4ca4277 | 118 | fhss_vendor_defined_cf *vendor_defined_cf; |
kenjiArai | 4:e9dfb4ca4277 | 119 | |
kenjiArai | 4:e9dfb4ca4277 | 120 | } fhss_ws_configuration_t; |
kenjiArai | 4:e9dfb4ca4277 | 121 | |
kenjiArai | 4:e9dfb4ca4277 | 122 | /** |
kenjiArai | 4:e9dfb4ca4277 | 123 | * \brief Struct fhss_timer defines interface between FHSS and FHSS platform timer. |
kenjiArai | 4:e9dfb4ca4277 | 124 | * Application must implement FHSS timer driver which is then used by FHSS with this interface. |
kenjiArai | 4:e9dfb4ca4277 | 125 | */ |
kenjiArai | 4:e9dfb4ca4277 | 126 | typedef struct fhss_timer |
kenjiArai | 4:e9dfb4ca4277 | 127 | { |
kenjiArai | 4:e9dfb4ca4277 | 128 | /** Start timeout (1us). Timer must support multiple simultaneous timeouts */ |
kenjiArai | 4:e9dfb4ca4277 | 129 | int (*fhss_timer_start)(uint32_t, void (*fhss_timer_callback)(const fhss_api_t *fhss_api, uint16_t), const fhss_api_t *fhss_api); |
kenjiArai | 4:e9dfb4ca4277 | 130 | |
kenjiArai | 4:e9dfb4ca4277 | 131 | /** Stop timeout */ |
kenjiArai | 4:e9dfb4ca4277 | 132 | int (*fhss_timer_stop)(void (*fhss_timer_callback)(const fhss_api_t *fhss_api, uint16_t), const fhss_api_t *fhss_api); |
kenjiArai | 4:e9dfb4ca4277 | 133 | |
kenjiArai | 4:e9dfb4ca4277 | 134 | /** Get remaining time of started timeout*/ |
kenjiArai | 4:e9dfb4ca4277 | 135 | uint32_t (*fhss_get_remaining_slots)(void (*fhss_timer_callback)(const fhss_api_t *fhss_api, uint16_t), const fhss_api_t *fhss_api); |
kenjiArai | 4:e9dfb4ca4277 | 136 | |
kenjiArai | 4:e9dfb4ca4277 | 137 | /** Get timestamp since initialization of driver. Overflow of 32-bit counter is allowed (1us) */ |
kenjiArai | 4:e9dfb4ca4277 | 138 | uint32_t (*fhss_get_timestamp)(const fhss_api_t *fhss_api); |
kenjiArai | 4:e9dfb4ca4277 | 139 | |
kenjiArai | 4:e9dfb4ca4277 | 140 | /** Divide 1 microsecond resolution. E.g. to use 64us resolution, use fhss_resolution_divider = 64*/ |
kenjiArai | 4:e9dfb4ca4277 | 141 | uint8_t fhss_resolution_divider; |
kenjiArai | 4:e9dfb4ca4277 | 142 | } fhss_timer_t; |
kenjiArai | 4:e9dfb4ca4277 | 143 | |
kenjiArai | 4:e9dfb4ca4277 | 144 | /** |
kenjiArai | 4:e9dfb4ca4277 | 145 | * \brief Struct fhss_synch_configuration defines the synchronization time configurations. |
kenjiArai | 4:e9dfb4ca4277 | 146 | * Border router application must define and set these configuration for FHSS network. |
kenjiArai | 4:e9dfb4ca4277 | 147 | */ |
kenjiArai | 4:e9dfb4ca4277 | 148 | typedef struct fhss_synch_configuration |
kenjiArai | 4:e9dfb4ca4277 | 149 | { |
kenjiArai | 4:e9dfb4ca4277 | 150 | /** Number of broadcast channels. */ |
kenjiArai | 4:e9dfb4ca4277 | 151 | uint8_t fhss_number_of_bc_channels; |
kenjiArai | 4:e9dfb4ca4277 | 152 | |
kenjiArai | 4:e9dfb4ca4277 | 153 | /** TX slots per channel. */ |
kenjiArai | 4:e9dfb4ca4277 | 154 | uint8_t fhss_number_of_tx_slots; |
kenjiArai | 4:e9dfb4ca4277 | 155 | |
kenjiArai | 4:e9dfb4ca4277 | 156 | /** Length of superframe(microseconds) * Number of superframes defines the |
kenjiArai | 4:e9dfb4ca4277 | 157 | channel dwell time. E.g. 50000us * 8 -> Channel dwell time 400ms */ |
kenjiArai | 4:e9dfb4ca4277 | 158 | uint16_t fhss_superframe_length; |
kenjiArai | 4:e9dfb4ca4277 | 159 | |
kenjiArai | 4:e9dfb4ca4277 | 160 | /** Number of superframes. */ |
kenjiArai | 4:e9dfb4ca4277 | 161 | uint8_t fhss_number_of_superframes; |
kenjiArai | 4:e9dfb4ca4277 | 162 | } fhss_synch_configuration_t; |
kenjiArai | 4:e9dfb4ca4277 | 163 | |
kenjiArai | 4:e9dfb4ca4277 | 164 | |
kenjiArai | 4:e9dfb4ca4277 | 165 | /** |
kenjiArai | 4:e9dfb4ca4277 | 166 | * \brief Struct fhss_statistics defines the available FHSS statistics. |
kenjiArai | 4:e9dfb4ca4277 | 167 | */ |
kenjiArai | 4:e9dfb4ca4277 | 168 | typedef struct fhss_statistics |
kenjiArai | 4:e9dfb4ca4277 | 169 | { |
kenjiArai | 4:e9dfb4ca4277 | 170 | /** FHSS synchronization drift compensation (us/channel). */ |
kenjiArai | 4:e9dfb4ca4277 | 171 | int16_t fhss_drift_compensation; |
kenjiArai | 4:e9dfb4ca4277 | 172 | |
kenjiArai | 4:e9dfb4ca4277 | 173 | /** FHSS hop count. */ |
kenjiArai | 4:e9dfb4ca4277 | 174 | uint8_t fhss_hop_count; |
kenjiArai | 4:e9dfb4ca4277 | 175 | |
kenjiArai | 4:e9dfb4ca4277 | 176 | /** FHSS synchronization interval (s). */ |
kenjiArai | 4:e9dfb4ca4277 | 177 | uint16_t fhss_synch_interval; |
kenjiArai | 4:e9dfb4ca4277 | 178 | |
kenjiArai | 4:e9dfb4ca4277 | 179 | /** Average of 5 preceding synchronization fixes (us). Updated after every fifth synch fix. */ |
kenjiArai | 4:e9dfb4ca4277 | 180 | int16_t fhss_prev_avg_synch_fix; |
kenjiArai | 4:e9dfb4ca4277 | 181 | |
kenjiArai | 4:e9dfb4ca4277 | 182 | /** FHSS synchronization lost counter. */ |
kenjiArai | 4:e9dfb4ca4277 | 183 | uint32_t fhss_synch_lost; |
kenjiArai | 4:e9dfb4ca4277 | 184 | } fhss_statistics_t; |
kenjiArai | 4:e9dfb4ca4277 | 185 | |
kenjiArai | 4:e9dfb4ca4277 | 186 | /** |
kenjiArai | 4:e9dfb4ca4277 | 187 | * \brief Enumeration fhss_channel_mode_e defines the channel modes. |
kenjiArai | 4:e9dfb4ca4277 | 188 | */ |
kenjiArai | 4:e9dfb4ca4277 | 189 | typedef enum fhss_channel_mode_e { |
kenjiArai | 4:e9dfb4ca4277 | 190 | SINGLE_CHANNEL, //< Single channel |
kenjiArai | 4:e9dfb4ca4277 | 191 | FHSS, //< Frequency hopping mode |
kenjiArai | 4:e9dfb4ca4277 | 192 | } fhss_channel_mode_e; |
kenjiArai | 4:e9dfb4ca4277 | 193 | |
kenjiArai | 4:e9dfb4ca4277 | 194 | #ifdef __cplusplus |
kenjiArai | 4:e9dfb4ca4277 | 195 | } |
kenjiArai | 4:e9dfb4ca4277 | 196 | #endif |
kenjiArai | 4:e9dfb4ca4277 | 197 | |
kenjiArai | 4:e9dfb4ca4277 | 198 | #endif // FHSS_CONFIG_H |