init
Embed:
(wiki syntax)
Show/hide line numbers
LoRaMacCommand.h
Go to the documentation of this file.
00001 /** 00002 * \file LoRaMacCommand.h 00003 * 00004 * \brief LoRa MAC layer implementation 00005 * 00006 * \copyright Revised BSD License, see LICENSE.TXT file include in the project 00007 * 00008 * \code 00009 * ______ _ 00010 * / _____) _ | | 00011 * ( (____ _____ ____ _| |_ _____ ____| |__ 00012 * \____ \| ___ | (_ _) ___ |/ ___) _ \ 00013 * _____) ) ____| | | || |_| ____( (___| | | | 00014 * (______/|_____)_|_|_| \__)_____)\____)_| |_| 00015 * (C)2013 Semtech 00016 * 00017 * ___ _____ _ ___ _ _____ ___ ___ ___ ___ 00018 * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __| 00019 * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _| 00020 * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___| 00021 * embedded.connectivity.solutions=============== 00022 * 00023 * \endcode 00024 * 00025 * \author Miguel Luis ( Semtech ) 00026 * 00027 * \author Gregory Cristian ( Semtech ) 00028 * 00029 * \author Daniel Jaeckle ( STACKFORCE ) 00030 * 00031 * \defgroup LORAMAC LoRa MAC layer implementation 00032 * This module specifies the API implementation of the LoRaMAC layer. 00033 * This is a placeholder for a detailed description of the LoRaMac 00034 * layer and the supported features. 00035 * 00036 * Copyright (c) 2017, Arm Limited and affiliates. 00037 * SPDX-License-Identifier: BSD-3-Clause 00038 * 00039 */ 00040 #ifndef __LORAMACCOMMAND_H__ 00041 #define __LORAMACCOMMAND_H__ 00042 00043 #include <stdint.h> 00044 #include "lorawan/system/lorawan_data_structures.h" 00045 #include "lorawan/lorastack/phy/LoRaPHY.h" 00046 00047 /*! 00048 * Maximum MAC commands buffer size 00049 */ 00050 #define LORA_MAC_COMMAND_MAX_LENGTH 128 00051 00052 class LoRaMac; 00053 00054 class LoRaMacCommand { 00055 00056 public: 00057 LoRaMacCommand(LoRaMac &lora_mac); 00058 ~LoRaMacCommand(); 00059 00060 /** 00061 * @brief Adds a new MAC command to be sent. 00062 * 00063 * @remark MAC layer internal function 00064 * 00065 * @param [in] cmd MAC command to be added 00066 * [MOTE_MAC_LINK_CHECK_REQ, 00067 * MOTE_MAC_LINK_ADR_ANS, 00068 * MOTE_MAC_DUTY_CYCLE_ANS, 00069 * MOTE_MAC_RX2_PARAM_SET_ANS, 00070 * MOTE_MAC_DEV_STATUS_ANS 00071 * MOTE_MAC_NEW_CHANNEL_ANS] 00072 * @param [in] p1 1st parameter (optional depends on the command) 00073 * @param [in] p2 2nd parameter (optional depends on the command) 00074 * 00075 * @return status Function status [0: OK, 1: Unknown command, 2: Buffer full] 00076 */ 00077 lorawan_status_t add_mac_command(uint8_t cmd, uint8_t p1, uint8_t p2); 00078 00079 /** 00080 * @brief Clear MAC command buffer. 00081 */ 00082 void clear_command_buffer(void); 00083 00084 /** 00085 * @brief Get the length of MAC commands 00086 * 00087 * @return status Length of used MAC buffer (bytes) 00088 */ 00089 uint8_t get_mac_cmd_length() const; 00090 00091 /** 00092 * @brief Get MAC command buffer 00093 * 00094 * @return Pointer to MAC command buffer 00095 */ 00096 uint8_t *get_mac_commands_buffer(); 00097 00098 /** 00099 * @brief Parses the MAC commands which must be resent. 00100 */ 00101 void parse_mac_commands_to_repeat(); 00102 00103 /** 00104 * @brief Clear MAC command repeat buffer. 00105 */ 00106 void clear_repeat_buffer(); 00107 00108 /** 00109 * @brief Copy MAC commands from repeat buffer to actual MAC command buffer. 00110 */ 00111 void copy_repeat_commands_to_buffer(); 00112 00113 /** 00114 * @brief Get the length of MAC commands in repeat buffer 00115 * 00116 * @return status Length of used MAC Repeat buffer (bytes) 00117 */ 00118 uint8_t get_repeat_commands_length() const; 00119 00120 /** 00121 * @brief Clear MAC commands in next TX. 00122 */ 00123 void clear_mac_commands_in_next_tx(); 00124 00125 /** 00126 * @brief Check if MAC command buffer has commands to be sent in next TX 00127 * 00128 * @return status True: buffer has MAC commands to be sent, false: no commands in buffer] 00129 */ 00130 bool is_mac_command_in_next_tx() const; 00131 00132 /** 00133 * @brief Decodes MAC commands in the fOpts field and in the payload 00134 * 00135 * @return status Function status. LORAWAN_STATUS_OK if command successful. 00136 */ 00137 lorawan_status_t process_mac_commands(uint8_t *payload, uint8_t mac_index, 00138 uint8_t commands_size, uint8_t snr, 00139 loramac_mlme_confirm_t & mlme_conf, 00140 lora_mac_system_params_t & mac_params, 00141 LoRaPHY& lora_phy); 00142 00143 /** 00144 * @brief Verifies if sticky MAC commands are pending. 00145 * 00146 * @return [true: sticky MAC commands pending, false: No MAC commands pending] 00147 */ 00148 bool is_sticky_mac_command_pending(); 00149 00150 private: 00151 LoRaMac& _lora_mac; 00152 00153 /** 00154 * Indicates if the MAC layer wants to send MAC commands 00155 */ 00156 bool mac_cmd_in_next_tx; 00157 00158 /** 00159 * Contains the current Mac command buffer index in 'mac_cmd_buffer' 00160 */ 00161 uint8_t mac_cmd_buf_idx; 00162 00163 /** 00164 * Contains the current Mac command buffer index for MAC commands to repeat in 00165 * 'mac_cmd_buffer_to_repeat' 00166 */ 00167 uint8_t mac_cmd_buf_idx_to_repeat; 00168 00169 /** 00170 * Buffer containing the MAC layer commands 00171 */ 00172 uint8_t mac_cmd_buffer[LORA_MAC_COMMAND_MAX_LENGTH]; 00173 00174 /** 00175 * Buffer containing the MAC layer commands which must be repeated 00176 */ 00177 uint8_t mac_cmd_buffer_to_repeat[LORA_MAC_COMMAND_MAX_LENGTH]; 00178 }; 00179 00180 #endif //__LORAMACCOMMAND_H__
Generated on Tue Jul 12 2022 13:24:47 by
1.7.2