1 /* 2 * Copyright (c) 2017, 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 acknowledgement generator for the 802.15.4 radio driver. 37 * 38 */ 39 40 #ifndef NRF_802154_ACK_GENERATOR_H 41 #define NRF_802154_ACK_GENERATOR_H 42 43 #include <stdint.h> 44 45 #include "mac_features/nrf_802154_frame_parser.h" 46 47 /** Initializes the ACK generator module. */ 48 void nrf_802154_ack_generator_init(void); 49 50 /** @brief Resets the ACK generator module. 51 * 52 * @note This function should be called for every received frame to be acknowledged before 53 * @ref nrf_802154_ack_generator_create is called for that frame. 54 */ 55 void nrf_802154_ack_generator_reset(void); 56 57 /** @brief Creates an ACK in response to the provided frame and inserts it into a radio buffer. 58 * 59 * @note Only those contents of the frame being acknowledged marked by @p p_frame_data as valid 60 * are used for ACK generation. If any data necessary to generate an ACK is missing or marked as 61 * invalid by @p p_frame_data, this function returns NULL. Once more data becomes available and valid, 62 * this function can be called again and the generation will be continued. That allows for 63 * generating ACK iteratively as data to be acknowledged is being received. 64 * 65 * @param [in] p_frame_data Pointer to the parser data of the frame for which an Ack 66 * will be generated. 67 * 68 * @returns Either pointer to a constant buffer that contains PHR and PSDU 69 * of the created ACK frame, or NULL when the response cannot be created. 70 */ 71 uint8_t * nrf_802154_ack_generator_create( 72 const nrf_802154_frame_parser_data_t * p_frame_data); 73 74 #endif // NRF_802154_ACK_GENERATOR_H 75