LCOV - code coverage report
Current view: top level - zephyr/bluetooth/classic - rfcomm.h Hit Total Coverage
Test: new.info Lines: 15 30 50.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /** @file
       2             :  *  @brief Bluetooth RFCOMM handling
       3             :  */
       4             : 
       5             : /*
       6             :  * Copyright (c) 2015-2016 Intel Corporation
       7             :  *
       8             :  * SPDX-License-Identifier: Apache-2.0
       9             :  */
      10             : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_RFCOMM_H_
      11             : #define ZEPHYR_INCLUDE_BLUETOOTH_RFCOMM_H_
      12             : 
      13             : /**
      14             :  * @brief RFCOMM
      15             :  * @defgroup bt_rfcomm RFCOMM
      16             :  * @ingroup bluetooth
      17             :  * @{
      18             :  */
      19             : 
      20             : #include <zephyr/bluetooth/buf.h>
      21             : #include <zephyr/bluetooth/conn.h>
      22             : 
      23             : #ifdef __cplusplus
      24             : extern "C" {
      25             : #endif
      26             : 
      27             : /* RFCOMM channels (1-30): pre-allocated for profiles to avoid conflicts */
      28           0 : enum {
      29             :         BT_RFCOMM_CHAN_HFP_HF = 1,
      30             :         BT_RFCOMM_CHAN_HFP_AG,
      31             :         BT_RFCOMM_CHAN_HSP_AG,
      32             :         BT_RFCOMM_CHAN_HSP_HS,
      33             :         BT_RFCOMM_CHAN_SPP,
      34             : };
      35             : 
      36             : struct bt_rfcomm_dlc;
      37             : 
      38             : /** @brief RFCOMM DLC operations structure. */
      39           1 : struct bt_rfcomm_dlc_ops {
      40             :         /** DLC connected callback
      41             :          *
      42             :          *  If this callback is provided it will be called whenever the
      43             :          *  connection completes.
      44             :          *
      45             :          *  @param dlc The dlc that has been connected
      46             :          */
      47           1 :         void (*connected)(struct bt_rfcomm_dlc *dlc);
      48             : 
      49             :         /** DLC disconnected callback
      50             :          *
      51             :          *  If this callback is provided it will be called whenever the
      52             :          *  dlc is disconnected, including when a connection gets
      53             :          *  rejected or cancelled (both incoming and outgoing)
      54             :          *
      55             :          *  @param dlc The dlc that has been Disconnected
      56             :          */
      57           1 :         void (*disconnected)(struct bt_rfcomm_dlc *dlc);
      58             : 
      59             :         /** DLC recv callback
      60             :          *
      61             :          *  @param dlc The dlc receiving data.
      62             :          *  @param buf Buffer containing incoming data.
      63             :          */
      64           1 :         void (*recv)(struct bt_rfcomm_dlc *dlc, struct net_buf *buf);
      65             : 
      66             :         /** DLC sent callback
      67             :          *
      68             :          *  @param dlc The dlc which has sent data.
      69             :          *  @param err Sent result.
      70             :          */
      71           1 :         void (*sent)(struct bt_rfcomm_dlc *dlc, int err);
      72             : };
      73             : 
      74             : /** @brief Role of RFCOMM session and dlc. Used only by internal APIs
      75             :  */
      76           0 : typedef enum bt_rfcomm_role {
      77             :         BT_RFCOMM_ROLE_ACCEPTOR,
      78             :         BT_RFCOMM_ROLE_INITIATOR
      79           1 : } __packed bt_rfcomm_role_t;
      80             : 
      81             : /** @brief RFCOMM DLC structure. */
      82           1 : struct bt_rfcomm_dlc {
      83             :         /* Response Timeout eXpired (RTX) timer */
      84           0 :         struct k_work_delayable    rtx_work;
      85             : 
      86             :         /* Queue for outgoing data */
      87           0 :         struct k_fifo              tx_queue;
      88             : 
      89             :         /* TX credits, Reuse as a binary sem for MSC FC if CFC is not enabled */
      90           0 :         struct k_sem               tx_credits;
      91             : 
      92           0 :         struct bt_rfcomm_session  *session;
      93           0 :         struct bt_rfcomm_dlc_ops  *ops;
      94             :         struct bt_rfcomm_dlc      *_next;
      95             : 
      96           0 :         bt_security_t              required_sec_level;
      97           0 :         bt_rfcomm_role_t           role;
      98             : 
      99           0 :         uint16_t                      mtu;
     100           0 :         uint8_t                       dlci;
     101           0 :         uint8_t                       state;
     102           0 :         uint8_t                       rx_credit;
     103             : 
     104             :         /* Stack & kernel data for TX thread */
     105           0 :         struct k_thread            tx_thread;
     106             : #if defined(CONFIG_BT_RFCOMM_DLC_STACK_SIZE)
     107             :         K_KERNEL_STACK_MEMBER(stack, CONFIG_BT_RFCOMM_DLC_STACK_SIZE);
     108             : #endif /* CONFIG_BT_RFCOMM_DLC_STACK_SIZE */
     109             : };
     110             : 
     111           0 : struct bt_rfcomm_server {
     112             :         /** Server Channel */
     113           1 :         uint8_t channel;
     114             : 
     115             :         /** Server accept callback
     116             :          *
     117             :          *  This callback is called whenever a new incoming connection requires
     118             :          *  authorization.
     119             :          *
     120             :          *  @param conn The connection that is requesting authorization
     121             :          *  @param dlc Pointer to received the allocated dlc
     122             :          *
     123             :          *  @return 0 in case of success or negative value in case of error.
     124             :          */
     125           1 :         int (*accept)(struct bt_conn *conn, struct bt_rfcomm_dlc **dlc);
     126             : 
     127             :         struct bt_rfcomm_server *_next;
     128             : };
     129             : 
     130             : /** @brief Register RFCOMM server
     131             :  *
     132             :  *  Register RFCOMM server for a channel, each new connection is authorized
     133             :  *  using the accept() callback which in case of success shall allocate the dlc
     134             :  *  structure to be used by the new connection.
     135             :  *
     136             :  *  @param server Server structure.
     137             :  *
     138             :  *  @return 0 in case of success or negative value in case of error.
     139             :  */
     140           1 : int bt_rfcomm_server_register(struct bt_rfcomm_server *server);
     141             : 
     142             : /** @brief Connect RFCOMM channel
     143             :  *
     144             :  *  Connect RFCOMM dlc by channel, once the connection is completed dlc
     145             :  *  connected() callback will be called. If the connection is rejected
     146             :  *  disconnected() callback is called instead.
     147             :  *
     148             :  *  @param conn Connection object.
     149             :  *  @param dlc Dlc object.
     150             :  *  @param channel Server channel to connect to.
     151             :  *
     152             :  *  @return 0 in case of success or negative value in case of error.
     153             :  */
     154           1 : int bt_rfcomm_dlc_connect(struct bt_conn *conn, struct bt_rfcomm_dlc *dlc,
     155             :                           uint8_t channel);
     156             : 
     157             : /** @brief Send data to RFCOMM
     158             :  *
     159             :  *  Send data from buffer to the dlc. Length should be less than or equal to
     160             :  *  mtu.
     161             :  *
     162             :  *  @param dlc Dlc object.
     163             :  *  @param buf Data buffer.
     164             :  *
     165             :  *  @return Bytes sent in case of success or negative value in case of error.
     166             :  */
     167           1 : int bt_rfcomm_dlc_send(struct bt_rfcomm_dlc *dlc, struct net_buf *buf);
     168             : 
     169             : /** @brief Disconnect RFCOMM dlc
     170             :  *
     171             :  *  Disconnect RFCOMM dlc, if the connection is pending it will be
     172             :  *  canceled and as a result the dlc disconnected() callback is called.
     173             :  *
     174             :  *  @param dlc Dlc object.
     175             :  *
     176             :  *  @return 0 in case of success or negative value in case of error.
     177             :  */
     178           1 : int bt_rfcomm_dlc_disconnect(struct bt_rfcomm_dlc *dlc);
     179             : 
     180             : /** @brief Allocate the buffer from pool after reserving head room for RFCOMM,
     181             :  *  L2CAP and ACL headers.
     182             :  *
     183             :  *  @param pool Which pool to take the buffer from.
     184             :  *
     185             :  *  @return New buffer.
     186             :  */
     187           1 : struct net_buf *bt_rfcomm_create_pdu(struct net_buf_pool *pool);
     188             : 
     189             : #ifdef __cplusplus
     190             : }
     191             : #endif
     192             : 
     193             : /**
     194             :  * @}
     195             :  */
     196             : 
     197             : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_RFCOMM_H_ */

Generated by: LCOV version 1.14