LCOV - code coverage report
Current view: top level - zephyr/modem - pipelink.h Hit Total Coverage
Test: new.info Lines: 9 13 69.2 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2024 Trackunit Corporation
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #include <zephyr/modem/pipe.h>
       8             : #include <zephyr/devicetree.h>
       9             : #include <zephyr/sys/util.h>
      10             : 
      11             : #ifndef ZEPHYR_MODEM_PIPELINK_
      12             : #define ZEPHYR_MODEM_PIPELINK_
      13             : 
      14             : #ifdef __cplusplus
      15             : extern "C" {
      16             : #endif
      17             : 
      18             : /**
      19             :  * @brief Modem pipelink
      20             :  * @defgroup modem_pipelink Modem pipelink
      21             :  * @ingroup modem
      22             :  * @{
      23             :  */
      24             : 
      25             : /** Pipelink event */
      26           1 : enum modem_pipelink_event {
      27             :         /** Modem pipe has been connected and can be opened */
      28             :         MODEM_PIPELINK_EVENT_CONNECTED = 0,
      29             :         /** Modem pipe has been disconnected and can't be opened */
      30             :         MODEM_PIPELINK_EVENT_DISCONNECTED,
      31             : };
      32             : 
      33             : /** @cond INTERNAL_HIDDEN */
      34             : 
      35             : /** Forward declaration */
      36             : struct modem_pipelink;
      37             : 
      38             : /** @endcond */
      39             : 
      40             : /**
      41             :  * @brief Pipelink callback definition
      42             :  * @param link Modem pipelink instance
      43             :  * @param event Modem pipelink event
      44             :  * @param user_data User data passed to modem_pipelink_attach()
      45             :  */
      46           1 : typedef void (*modem_pipelink_callback)(struct modem_pipelink *link,
      47             :                                         enum modem_pipelink_event event,
      48             :                                         void *user_data);
      49             : 
      50             : /** @cond INTERNAL_HIDDEN */
      51             : 
      52             : /** Pipelink structure */
      53             : struct modem_pipelink {
      54             :         struct modem_pipe *pipe;
      55             :         modem_pipelink_callback callback;
      56             :         void *user_data;
      57             :         bool connected;
      58             :         struct k_spinlock spinlock;
      59             : };
      60             : 
      61             : /** @endcond */
      62             : 
      63             : /**
      64             :  * @brief Attach callback to pipelink
      65             :  * @param link Pipelink instance
      66             :  * @param callback Pipelink callback
      67             :  * @param user_data User data passed to pipelink callback
      68             :  */
      69           1 : void modem_pipelink_attach(struct modem_pipelink *link,
      70             :                            modem_pipelink_callback callback,
      71             :                            void *user_data);
      72             : 
      73             : /**
      74             :  * @brief Check whether pipelink pipe is connected
      75             :  * @param link Pipelink instance
      76             :  * @retval true if pipe is connected
      77             :  * @retval false if pipe is not connected
      78             :  */
      79           1 : bool modem_pipelink_is_connected(struct modem_pipelink *link);
      80             : 
      81             : /**
      82             :  * @brief Get pipe from pipelink
      83             :  * @param link Pipelink instance
      84             :  * @retval Pointer to pipe if pipelink has been initialized
      85             :  * @retval NULL if pipelink has not been initialized
      86             :  */
      87           1 : struct modem_pipe *modem_pipelink_get_pipe(struct modem_pipelink *link);
      88             : 
      89             : /**
      90             :  * @brief Clear callback
      91             :  * @param link Pipelink instance
      92             :  */
      93           1 : void modem_pipelink_release(struct modem_pipelink *link);
      94             : 
      95             : /** @cond INTERNAL_HIDDEN */
      96             : 
      97             : /** Initialize modem pipelink */
      98             : void modem_pipelink_init(struct modem_pipelink *link, struct modem_pipe *pipe);
      99             : 
     100             : /** Notify user of pipelink that pipe has been connected */
     101             : void modem_pipelink_notify_connected(struct modem_pipelink *link);
     102             : 
     103             : /** Notify user of pipelink that pipe has been disconnected */
     104             : void modem_pipelink_notify_disconnected(struct modem_pipelink *link);
     105             : 
     106             : /** @endcond */
     107             : 
     108             : /** @cond INTERNAL_HIDDEN */
     109             : 
     110             : /**
     111             :  * @brief Synthesize pipelink symbol from devicetree node identifier and name
     112             :  * @param node_id Devicetree node identifier
     113             :  * @param name Pipelink name
     114             :  */
     115             : #define MODEM_PIPELINK_DT_SYM(node_id, name) \
     116             :         _CONCAT_4(__modem_pipelink_, DT_DEP_ORD(node_id), _, name)
     117             : 
     118             : /** @endcond */
     119             : 
     120             : /**
     121             :  * @brief Declare pipelink from devicetree node identifier and name
     122             :  * @param node_id Devicetree node identifier
     123             :  * @param name Pipelink name
     124             :  */
     125           1 : #define MODEM_PIPELINK_DT_DECLARE(node_id, name) \
     126             :         extern struct modem_pipelink MODEM_PIPELINK_DT_SYM(node_id, name)
     127             : 
     128             : /**
     129             :  * @brief Define pipelink from devicetree node identifier and name
     130             :  * @param node_id Devicetree node identifier
     131             :  * @param name Pipelink name
     132             :  */
     133           1 : #define MODEM_PIPELINK_DT_DEFINE(node_id, name) \
     134             :         struct modem_pipelink MODEM_PIPELINK_DT_SYM(node_id, name)
     135             : 
     136             : /**
     137             :  * @brief Get pointer to pipelink from devicetree node identifier and name
     138             :  * @param node_id Devicetree node identifier
     139             :  * @param name Pipelink name
     140             :  */
     141           1 : #define MODEM_PIPELINK_DT_GET(node_id, name) \
     142             :         (&MODEM_PIPELINK_DT_SYM(node_id, name))
     143             : 
     144             : /**
     145             :  * @brief Device driver instance variants of MODEM_PIPELINK_DT macros
     146             :  * @name MODEM_PIPELINK_DT_INST macros
     147             :  * @anchor MODEM_PIPELINK_DT_INST
     148             :  * @{
     149             :  */
     150             : 
     151           0 : #define MODEM_PIPELINK_DT_INST_DECLARE(inst, name) \
     152             :         MODEM_PIPELINK_DT_DECLARE(DT_DRV_INST(inst), name)
     153             : 
     154           0 : #define MODEM_PIPELINK_DT_INST_DEFINE(inst, name) \
     155             :         MODEM_PIPELINK_DT_DEFINE(DT_DRV_INST(inst), name)
     156             : 
     157           0 : #define MODEM_PIPELINK_DT_INST_GET(inst, name) \
     158             :         MODEM_PIPELINK_DT_GET(DT_DRV_INST(inst), name)
     159             : 
     160             : /** @} */
     161             : 
     162             : /** @} */
     163             : 
     164             : #ifdef __cplusplus
     165             : }
     166             : #endif
     167             : 
     168             : #endif /* ZEPHYR_MODEM_PIPELINK_ */

Generated by: LCOV version 1.14