1 /** @file
2  *  @brief Audio Video Remote Control Profile header.
3  */
4 
5 /*
6  * Copyright (c) 2015-2016 Intel Corporation
7  * Copyright (C) 2024 Xiaomi Corporation
8  *
9  * SPDX-License-Identifier: Apache-2.0
10  */
11 
12 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AVRCP_H_
13 #define ZEPHYR_INCLUDE_BLUETOOTH_AVRCP_H_
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 /** @brief AVRCP structure */
20 struct bt_avrcp;
21 
22 struct bt_avrcp_unit_info_rsp {
23 	uint8_t unit_type;
24 	uint32_t company_id;
25 };
26 
27 struct bt_avrcp_subunit_info_rsp {
28 	uint8_t subunit_type;
29 	uint8_t max_subunit_id;
30 	const uint8_t *extended_subunit_type; /**< contains max_subunit_id items */
31 	const uint8_t *extended_subunit_id; /**< contains max_subunit_id items */
32 };
33 
34 struct bt_avrcp_cb {
35 	/** @brief An AVRCP connection has been established.
36 	 *
37 	 *  This callback notifies the application of an avrcp connection,
38 	 *  i.e., an AVCTP L2CAP connection.
39 	 *
40 	 *  @param avrcp AVRCP connection object.
41 	 */
42 	void (*connected)(struct bt_avrcp *avrcp);
43 	/** @brief An AVRCP connection has been disconnected.
44 	 *
45 	 *  This callback notifies the application that an avrcp connection
46 	 *  has been disconnected.
47 	 *
48 	 *  @param avrcp AVRCP connection object.
49 	 */
50 	void (*disconnected)(struct bt_avrcp *avrcp);
51 	/** @brief Callback function for bt_avrcp_get_unit_info().
52 	 *
53 	 *  Called when the get unit info process is completed.
54 	 *
55 	 *  @param avrcp AVRCP connection object.
56 	 *  @param rsp The response for UNIT INFO command.
57 	 */
58 	void (*unit_info_rsp)(struct bt_avrcp *avrcp, struct bt_avrcp_unit_info_rsp *rsp);
59 	/** @brief Callback function for bt_avrcp_get_subunit_info().
60 	 *
61 	 *  Called when the get subunit info process is completed.
62 	 *
63 	 *  @param avrcp AVRCP connection object.
64 	 *  @param rsp The response for SUBUNIT INFO command.
65 	 */
66 	void (*subunit_info_rsp)(struct bt_avrcp *avrcp, struct bt_avrcp_subunit_info_rsp *rsp);
67 };
68 
69 /** @brief Connect AVRCP.
70  *
71  *  This function is to be called after the conn parameter is obtained by
72  *  performing a GAP procedure. The API is to be used to establish AVRCP
73  *  connection between devices.
74  *
75  *  @param conn Pointer to bt_conn structure.
76  *
77  *  @return pointer to struct bt_avrcp in case of success or NULL in case
78  *  of error.
79  */
80 struct bt_avrcp *bt_avrcp_connect(struct bt_conn *conn);
81 
82 /** @brief Disconnect AVRCP.
83  *
84  *  This function close AVCTP L2CAP connection.
85  *
86  *  @param avrcp The AVRCP instance.
87  *
88  *  @return 0 in case of success or error code in case of error.
89  */
90 int bt_avrcp_disconnect(struct bt_avrcp *avrcp);
91 
92 /** @brief Register callback.
93  *
94  *  Register AVRCP callbacks to monitor the state and interact with the remote device.
95  *
96  *  @param cb The callback function.
97  *
98  *  @return 0 in case of success or error code in case of error.
99  */
100 int bt_avrcp_register_cb(const struct bt_avrcp_cb *cb);
101 
102 /** @brief Get AVRCP Unit Info.
103  *
104  *  This function obtains information that pertains to the AV/C unit as a whole.
105  *
106  *  @param avrcp The AVRCP instance.
107  *
108  *  @return 0 in case of success or error code in case of error.
109  */
110 int bt_avrcp_get_unit_info(struct bt_avrcp *avrcp);
111 
112 /** @brief Get AVRCP Subunit Info.
113  *
114  *  This function obtains information about the subunit(s) of an AV/C unit. A device with AVRCP
115  *  may support other subunits than the panel subunit if other profiles co-exist in the device.
116  *
117  *  @param avrcp The AVRCP instance.
118  *
119  *  @return 0 in case of success or error code in case of error.
120  */
121 int bt_avrcp_get_subunit_info(struct bt_avrcp *avrcp);
122 
123 #ifdef __cplusplus
124 }
125 #endif
126 
127 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AVRCP_H_ */
128