1 /** @file
2  *  @brief Handsfree Profile 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_HFP_HF_H_
11 #define ZEPHYR_INCLUDE_BLUETOOTH_HFP_HF_H_
12 
13 /**
14  * @brief Hands Free Profile (HFP)
15  * @defgroup bt_hfp Hands Free Profile (HFP)
16  * @ingroup bluetooth
17  * @{
18  */
19 
20 #include <zephyr/bluetooth/bluetooth.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /* AT Commands */
27 enum bt_hfp_hf_at_cmd {
28 	BT_HFP_HF_ATA,
29 	BT_HFP_HF_AT_CHUP,
30 };
31 
32 /*
33  * Command complete types for the application
34  */
35 #define HFP_HF_CMD_OK             0
36 #define HFP_HF_CMD_ERROR          1
37 #define HFP_HF_CMD_CME_ERROR      2
38 #define HFP_HF_CMD_UNKNOWN_ERROR  4
39 
40 /** @brief HFP HF Command completion field */
41 struct bt_hfp_hf_cmd_complete {
42 	/* Command complete status */
43 	uint8_t type;
44 	/* CME error number to be added */
45 	uint8_t cme;
46 };
47 
48 /** @brief HFP profile application callback */
49 struct bt_hfp_hf_cb {
50 	/** HF connected callback to application
51 	 *
52 	 *  If this callback is provided it will be called whenever the
53 	 *  connection completes.
54 	 *
55 	 *  @param conn Connection object.
56 	 */
57 	void (*connected)(struct bt_conn *conn);
58 	/** HF disconnected callback to application
59 	 *
60 	 *  If this callback is provided it will be called whenever the
61 	 *  connection gets disconnected, including when a connection gets
62 	 *  rejected or cancelled or any error in SLC establishment.
63 	 *
64 	 *  @param conn Connection object.
65 	 */
66 	void (*disconnected)(struct bt_conn *conn);
67 	/** HF SCO/eSCO connected Callback
68 	 *
69 	 *  If this callback is provided it will be called whenever the
70 	 *  SCO/eSCO connection completes.
71 	 *
72 	 *  @param conn Connection object.
73 	 *  @param sco_conn SCO/eSCO Connection object.
74 	 */
75 	void (*sco_connected)(struct bt_conn *conn, struct bt_conn *sco_conn);
76 	/** HF SCO/eSCO disconnected Callback
77 	 *
78 	 *  If this callback is provided it will be called whenever the
79 	 *  SCO/eSCO connection gets disconnected.
80 	 *
81 	 *  @param conn Connection object.
82 	 *  @param reason BT_HCI_ERR_* reason for the disconnection.
83 	 */
84 	void (*sco_disconnected)(struct bt_conn *sco_conn, uint8_t reason);
85 	/** HF indicator Callback
86 	 *
87 	 *  This callback provides service indicator value to the application
88 	 *
89 	 *  @param conn Connection object.
90 	 *  @param value service indicator value received from the AG.
91 	 */
92 	void (*service)(struct bt_conn *conn, uint32_t value);
93 	/** HF indicator Callback
94 	 *
95 	 *  This callback provides call indicator value to the application
96 	 *
97 	 *  @param conn Connection object.
98 	 *  @param value call indicator value received from the AG.
99 	 */
100 	void (*call)(struct bt_conn *conn, uint32_t value);
101 	/** HF indicator Callback
102 	 *
103 	 *  This callback provides call setup indicator value to the application
104 	 *
105 	 *  @param conn Connection object.
106 	 *  @param value call setup indicator value received from the AG.
107 	 */
108 	void (*call_setup)(struct bt_conn *conn, uint32_t value);
109 	/** HF indicator Callback
110 	 *
111 	 *  This callback provides call held indicator value to the application
112 	 *
113 	 *  @param conn Connection object.
114 	 *  @param value call held indicator value received from the AG.
115 	 */
116 	void (*call_held)(struct bt_conn *conn, uint32_t value);
117 	/** HF indicator Callback
118 	 *
119 	 *  This callback provides signal indicator value to the application
120 	 *
121 	 *  @param conn Connection object.
122 	 *  @param value signal indicator value received from the AG.
123 	 */
124 	void (*signal)(struct bt_conn *conn, uint32_t value);
125 	/** HF indicator Callback
126 	 *
127 	 *  This callback provides roaming indicator value to the application
128 	 *
129 	 *  @param conn Connection object.
130 	 *  @param value roaming indicator value received from the AG.
131 	 */
132 	void (*roam)(struct bt_conn *conn, uint32_t value);
133 	/** HF indicator Callback
134 	 *
135 	 *  This callback battery service indicator value to the application
136 	 *
137 	 *  @param conn Connection object.
138 	 *  @param value battery indicator value received from the AG.
139 	 */
140 	void (*battery)(struct bt_conn *conn, uint32_t value);
141 	/** HF incoming call Ring indication callback to application
142 	 *
143 	 *  If this callback is provided it will be called whenever there
144 	 *  is an incoming call.
145 	 *
146 	 *  @param conn Connection object.
147 	 */
148 	void (*ring_indication)(struct bt_conn *conn);
149 	/** HF notify command completed callback to application
150 	 *
151 	 *  The command sent from the application is notified about its status
152 	 *
153 	 *  @param conn Connection object.
154 	 *  @param cmd structure contains status of the command including cme.
155 	 */
156 	void (*cmd_complete_cb)(struct bt_conn *conn,
157 			      struct bt_hfp_hf_cmd_complete *cmd);
158 };
159 
160 /** @brief Register HFP HF profile
161  *
162  *  Register Handsfree profile callbacks to monitor the state and get the
163  *  required HFP details to display.
164  *
165  *  @param cb callback structure.
166  *
167  *  @return 0 in case of success or negative value in case of error.
168  */
169 int bt_hfp_hf_register(struct bt_hfp_hf_cb *cb);
170 
171 /** @brief Handsfree client Send AT
172  *
173  *  Send specific AT commands to handsfree client profile.
174  *
175  *  @param conn Connection object.
176  *  @param cmd AT command to be sent.
177  *
178  *  @return 0 in case of success or negative value in case of error.
179  */
180 int bt_hfp_hf_send_cmd(struct bt_conn *conn, enum bt_hfp_hf_at_cmd cmd);
181 
182 #ifdef __cplusplus
183 }
184 #endif
185 
186 /**
187  * @}
188  */
189 
190 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_HFP_HF_H_ */
191