diff options
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/MAC/mac_mlme_associate.h')
-rw-r--r-- | thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/MAC/mac_mlme_associate.h | 336 |
1 files changed, 336 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/MAC/mac_mlme_associate.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/MAC/mac_mlme_associate.h new file mode 100644 index 0000000..794935c --- /dev/null +++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/MAC/mac_mlme_associate.h @@ -0,0 +1,336 @@ +/** + * Copyright (c) 2016 - 2018 Nordic Semiconductor ASA and Luxoft Global Operations Gmbh. + * + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef MAC_MLME_ASSOCIATE_H_INCLUDED +#define MAC_MLME_ASSOCIATE_H_INCLUDED + +#include <stdint.h> +#include "mac_common.h" +#include "mac_task_scheduler.h" + +/** @file + * The MAC Association module declares the MAC Association routines and necessary types/macros + * according to the MAC specification. + * + * @defgroup mac_assoc MAC MLME Association API + * @ingroup mac_15_4 + * @{ + * @brief Module to declare MAC MLME Association API. + * @details The MLME Association module declares Association MAC routines and necessary macros/types according + * to the MAC specification. More specifically, MLME Association request aka mlme_associate_req(), + * MLME Association confirm callback typedef aka mlme_associate_conf_cb_t, MLME Association indication + * as mlme_associate_ind(), and MLME Response aka mlme_associate_resp() primitives are declared. + */ + +/** + * @brief Capability information field. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.3.1.2. + */ +#define ALTERNATE_PAN_COORDINATOR_BIT (0) +#define DEVICE_TYPE_BIT (1) +#define POWER_SOURCE_BIT (2) +#define RECEIVER_ON_WHEN_IDLE_BIT (3) +#define SECURITY_CAPABILITY_BIT (6) +#define ALLOCATE_ADDRESS_BIT (7) + + +/** + * @brief Valid values of the Association Status field + * + * In accordance with IEEE Std 802.15.4-2006, section 7.3.2.3 + */ +typedef enum +{ + MAC_ASSOCIATION_SUCCESSFUL = 0, + MAC_PAN_AT_CAPACITY, + MAC_PAN_ACCESS_DENIED +} mac_association_status_t; + +/** + * @brief Capability information field + * + * In accordance with IEEE Std 802.15.4-2006, section 7.3.1.2. + */ +typedef struct +{ + uint8_t alternate_pan_coordinator : 1; + uint8_t device_type : 1; + uint8_t power_source : 1; + uint8_t rx_on_when_idle : 1; + uint8_t reserved : 2; + uint8_t security_capability : 1; + uint8_t allocate_address : 1; +} mac_capability_t; + +/**@brief The Alternate PAN Coordinator subfield of the Capability Information field. */ +typedef enum +{ + MAC_CAP_CANNOT_BE_PAN_COORD = 0, /**< Device is not capable of becoming + the PAN coordinator.*/ + MAC_CAP_CAN_BE_PAN_COORD /**< Device is capable of becoming + the PAN coordinator.*/ +} mac_cap_alt_pan_coord_t; + +/**@brief The Device Type subfield of the Capability Information field. */ +typedef enum +{ + MAC_CAP_RFD_DEVICE = 0, /**< Device is an RFD.*/ + MAC_CAP_FFD_DEVICE /**< Device is an FFD.*/ +} mac_cap_device_type_t; + +/**@brief The Power Source subfield of the Capability Information field. */ +typedef enum +{ + MAC_CAP_BATTERY_POWERED = 0, /**< Device is not AC-powered.*/ + MAC_CAP_MAINS_POWERED /**< Device is receiving power from the + alternating current mains.*/ +} mac_cap_power_source_t; + +/**@brief The Receiver On When Idle subfield of the Capability Information field. */ +typedef enum +{ + MAC_CAP_RX_OFF_WHEN_IDLE = 0, /**< Device conserves power during idle.*/ + MAC_CAP_RX_ON_WHEN_IDLE /**< Device does not disable its receiver + to conserve power during idle periods.*/ +} mac_cap_rx_when_idle_t; + +/**@brief The Security Capability subfield of the Capability Information field. */ +typedef enum +{ + MAC_CAP_CANNOT_SECURE = 0, /**< Device does not support securing.*/ + MAC_CAP_CAN_SECURE /**< Device is capable of sending and receiving + cryptographically protected MAC frames.*/ +} mac_cap_secure_t; + +/**@brief The Allocate Address subfield of the Capability Information field. */ +typedef enum +{ + MAC_CAP_SHORT_ADDR_NOT_REQ = 0, /**< The coordinator will not allocate a + 16-bit short address as a result of + the association procedure.*/ + MAC_CAP_SHORT_ADDR_REQ /**< The coordinator will allocate a + 16-bit short address as a result of + the association procedure.*/ +} mac_cap_allocate_addr_t; + +#if (CONFIG_ASSOCIATE_REQ_ENABLED == 1) + +/** + * @brief MLME-ASSOCIATE.confirm + * + * The MLME-ASSOCIATE.confirm primitive is generated by the initiating MLME and + * issued to its next higher layer in response to an MLME-ASSOCIATE.request primitive. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.1.3.4. + */ +typedef struct +{ + uint16_t assoc_short_address; /**< Association short 16-bit address. */ + mac_status_t status; /**< Status of operation. */ +#if (CONFIG_SECURE == 1) + uint8_t security_level; /**< Security level. */ + uint8_t key_id_mode; /**< Key ID mode. */ + uint64_t key_source; /**< Key source. */ + uint8_t key_index; /**< Key index. */ +#endif +} mlme_associate_conf_t; + + +/** + * @brief MLME-ASSOCIATE.request. + * + * @details Allows a device to request an association with a coordinator. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.1.3.1. + */ +typedef struct +{ + /** Do not edit this field. */ + mac_abstract_req_t service; + + /** Confirmation to this request. */ + mlme_associate_conf_t confirm; + + /** + * A total of 27 channels numbered 0 to 26. + * are available per channel page (section 6.1.2.1). + */ + uint8_t logical_channel; + + /** + * A total of 32 channel pages are available + * with channel pages 3 to 31 being reserved + * for future use (section 6.1.2.2). + */ +#ifdef CONFIG_SUB_GHZ + uint8_t channel_page; /**< Channel page. */ +#endif + mac_addr_mode_t coord_addr_mode; /**< Coordinator address mode. */ + uint16_t coord_pan_id; /**< Coordinator PAN ID. */ + mac_addr_t coord_address; /**< Coordinator address. */ + mac_capability_t capability_information; /**< Capability information. */ +#if (CONFIG_SECURE == 1) + uint8_t security_level; /**< Security level. */ + uint8_t key_id_mode; /**< Key ID mode. */ + uint64_t key_source; /**< Key source. */ + uint8_t key_index; /**< Key index. */ +#endif +} mlme_associate_req_t; + + +#if (CONFIG_ASSOCIATE_IND_ENABLED == 1) +/** + * @brief MLME-ASSOCIATE.indication. + * + * @details The MLME-ASSOCIATE.indication primitive is generated by the MLME of + * the coordinator and issued to its next higher layer to indicate the reception + * of an association request command. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.1.3.2. + */ +typedef struct +{ + uint64_t device_address; /**< 64-bit IEEE address. */ + uint8_t capability_information; /**< Capability information. */ +#if (CONFIG_SECURE == 1) + uint8_t security_level; /**< Security level. */ + uint8_t key_id_mode; /**< Key ID mode. */ + uint64_t key_source; /**< Key source. */ + uint8_t key_index; /**< Key index. */ +#endif +} mlme_associate_ind_t; + + +/** + * @brief MLME-ASSOCIATE.response. + * + * @details Generated by the next higher layer of a coordinator and issued + * to its MLME in order to respond to the MLME-ASSOCIATE.indication primitive. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.1.3.3. + */ +typedef struct +{ + uint64_t device_address; /**< 64-bit IEEE address. */ + uint16_t assoc_short_address; /**< Association short 16-bit address. */ + mac_association_status_t status; /**< Status of operation. */ +#if (CONFIG_SECURE == 1) + uint8_t security_level; /**< Security level. */ + uint8_t key_id_mode; /**< Key ID mode. */ + uint64_t key_source; /**< Key source. */ + uint8_t key_index; /**< Key index. */ +#endif +} mlme_associate_resp_t; + +#endif // (CONFIG_ASSOCIATE_IND_ENABLED == 1) + +/** + * @brief Confirmation function. + * + * @details The MLME-ASSOCIATE.confirm primitive is generated by the + * initiating MLME and issued to its next higher layer in response to + * an MLME-ASSOCIATE.request primitive. If the request was successful, + * the status parameter will indicate a successful association, as + * contained in the Status field of the association response command. + * Otherwise, the status parameter indicates either an error code from + * the received association response command or the appropriate error + * code from Table 50. + * The status values are fully described in 7.1.3.1.3 and subclauses referenced by 7.1.3.1.3. + * + * @param Pointer to confirmation primitive. + */ +typedef void (* mlme_associate_conf_cb_t)(mlme_associate_conf_t *); + + +/** + * @brief MLME-ASSOCIATE request. + * + * @details Requests an association with a PAN through a coordinator + * After request completion, user callback will be issued with + * valid data stored in structure mlme_set_conf_t. + * + * @param req MLME_ASSOCIATE request structure. + * @param conf_cb Pointer to user callback. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.1.3.5 + */ +void mlme_associate_req(mlme_associate_req_t * req, mlme_associate_conf_cb_t conf_cb); + + +#if (CONFIG_ASSOCIATE_IND_ENABLED == 1) + +/** + * @brief MLME-ASSOCIATE indication handler. + * + * @details Indicates an association with a PAN through a coordinator + * next higher layer of a coordinator receives the MLME-ASSOCIATE.indication + * primitive to determine whether to accept or reject the unassociated device + * using an algorithm outside the scope of standard. + * + * @param ind MLME ASSOCIATE indication structure. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.1.3.5. + */ +extern void mlme_associate_ind(mlme_associate_ind_t * ind); + + +/** + * @brief MLME-ASSOCIATE response. + * + * @details Respond to an association with a PAN and issue to its MLME in order to + * respond to the MLME-ASSOCIATE.indication. + * Response structure passed as a parameter to this function must be retained + * in memory until the related MLME-COMM-STATUS.indication is received. + * + * @param resp MLME_ASSOCIATE response structure. + * + * In accordance with IEEE Std 802.15.4-2006, section 7.1.3.5. + */ +void mlme_associate_resp(mlme_associate_resp_t * resp); + +#endif // (CONFIG_ASSOCIATE_IND_ENABLED == 1) + +#endif // (CONFIG_ASSOCIATE_REQ_ENABLED == 1) + +/** @} */ + +#endif // MAC_MLME_ASSOCIATE_H_INCLUDED |