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)(const 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
|