1 /* 2 * Copyright (c) 2017 - 2023, Nordic Semiconductor ASA 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, this 11 * list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its 18 * contributors may be used to endorse or promote products derived from this 19 * software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 * 33 */ 34 35 /** 36 * @brief Module that contains an enhanced acknowledgement (Enh-Ack) generator 37 * for the 802.15.4 radio driver. 38 * 39 */ 40 41 #ifndef NRF_802154_ENH_ACK_GENERATOR_H 42 #define NRF_802154_ENH_ACK_GENERATOR_H 43 44 #include "mac_features/nrf_802154_frame_parser.h" 45 #include <stdbool.h> 46 #include <stdint.h> 47 48 /** Initializes the Enhanced ACK generator module. */ 49 void nrf_802154_enh_ack_generator_init(void); 50 51 /** @brief Resets the Enhanced ACK generator module. 52 * 53 * @note This function should be called for every received frame to be acknowledged before 54 * @ref nrf_802154_enh_ack_generator_create is called for that frame. 55 */ 56 void nrf_802154_enh_ack_generator_reset(void); 57 58 /** @brief Creates an Enhanced ACK in response to the provided frame. 59 * 60 * @note Only those contents of the frame being acknowledged marked by @p p_frame_data as valid 61 * are used for ACK generation. If any data necessary to generate an ACK is missing or marked as 62 * invalid by @p p_frame_data, this function returns NULL. Once more data becomes available and valid, 63 * this function can be called again and the generation will be continued. That allows for 64 * generating ACK iteratively as data to be acknowledged is being received. 65 * 66 * @param [in] p_frame_data Pointer to the parser data of the frame for which an Ack 67 * will be generated. 68 * 69 * @returns Either pointer to a constant buffer that contains PHR and PSDU 70 * of the created Enhanced ACK frame, or NULL when the response cannot be 71 * created. 72 */ 73 uint8_t * nrf_802154_enh_ack_generator_create( 74 const nrf_802154_frame_parser_data_t * p_frame_data); 75 76 #endif // NRF_802154_ENH_ACK_GENERATOR_H 77