Line data Source code
1 1 : /* 2 : * Copyright (c) 2024, NXP 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** 8 : * @file 9 : * @brief Public APIs of HDLC RCP communication Interface 10 : * 11 : * This file provide the HDLC APIs to be used by an RCP host 12 : */ 13 : 14 : #include <zephyr/sys/util.h> 15 : #include <zephyr/net/net_if.h> 16 : 17 : #ifdef __cplusplus 18 : extern "C" { 19 : #endif 20 : 21 : /** 22 : * @brief OT RCP HDLC RX callback function. 23 : * 24 : * @note This function is called in the radio spinel HDLC level 25 : */ 26 1 : typedef void (*hdlc_rx_callback_t)(uint8_t *data, uint16_t len, void *param); 27 : 28 : /** HDLC interface configuration data. */ 29 1 : struct hdlc_api { 30 : /** 31 : * @brief HDLC interface API 32 : */ 33 1 : struct net_if_api iface_api; 34 : 35 : /** 36 : * @brief Register the Spinel HDLC RX callback. 37 : * 38 : * @param hdlc_rx_callback pointer to the spinel HDLC RX callback 39 : * @param param pointer to the spinel HDLC interface 40 : * 41 : * @retval 0 The callback was successfully registered. 42 : * @retval -EIO The callback could not be registered. 43 : */ 44 1 : int (*register_rx_cb)(hdlc_rx_callback_t hdlc_rx_callback, void *param); 45 : 46 : /** 47 : * @brief Transmit a HDLC frame 48 : * 49 : * 50 : * @param frame pointer to the HDLC frame to be transmitted. 51 : * @param length length of the HDLC frame to be transmitted. 52 : 53 : * @retval 0 The frame was successfully sent. 54 : * @retval -EIO The frame could not be sent due to some unspecified 55 : * interface error (e.g. the interface being busy). 56 : */ 57 1 : int (*send)(const uint8_t *frame, uint16_t length); 58 : 59 : /** 60 : * @brief Deinitialize the device. 61 : * 62 : * @param none 63 : * 64 : * @retval 0 The interface was successfully stopped. 65 : * @retval -EIO The interface could not be stopped. 66 : */ 67 1 : int (*deinit)(void); 68 : }; 69 : 70 : /* Make sure that the interface API is properly setup inside 71 : * HDLC interface API struct (it is the first one). 72 : */ 73 : BUILD_ASSERT(offsetof(struct hdlc_api, iface_api) == 0); 74 : 75 : #ifdef __cplusplus 76 : } 77 : #endif