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 indicator Callback
68 	 *
69 	 *  This callback provides service indicator value to the application
70 	 *
71 	 *  @param conn Connection object.
72 	 *  @param value service indicator value received from the AG.
73 	 */
74 	void (*service)(struct bt_conn *conn, uint32_t value);
75 	/** HF indicator Callback
76 	 *
77 	 *  This callback provides call indicator value to the application
78 	 *
79 	 *  @param conn Connection object.
80 	 *  @param value call indicator value received from the AG.
81 	 */
82 	void (*call)(struct bt_conn *conn, uint32_t value);
83 	/** HF indicator Callback
84 	 *
85 	 *  This callback provides call setup indicator value to the application
86 	 *
87 	 *  @param conn Connection object.
88 	 *  @param value call setup indicator value received from the AG.
89 	 */
90 	void (*call_setup)(struct bt_conn *conn, uint32_t value);
91 	/** HF indicator Callback
92 	 *
93 	 *  This callback provides call held indicator value to the application
94 	 *
95 	 *  @param conn Connection object.
96 	 *  @param value call held indicator value received from the AG.
97 	 */
98 	void (*call_held)(struct bt_conn *conn, uint32_t value);
99 	/** HF indicator Callback
100 	 *
101 	 *  This callback provides signal indicator value to the application
102 	 *
103 	 *  @param conn Connection object.
104 	 *  @param value signal indicator value received from the AG.
105 	 */
106 	void (*signal)(struct bt_conn *conn, uint32_t value);
107 	/** HF indicator Callback
108 	 *
109 	 *  This callback provides roaming indicator value to the application
110 	 *
111 	 *  @param conn Connection object.
112 	 *  @param value roaming indicator value received from the AG.
113 	 */
114 	void (*roam)(struct bt_conn *conn, uint32_t value);
115 	/** HF indicator Callback
116 	 *
117 	 *  This callback battery service indicator value to the application
118 	 *
119 	 *  @param conn Connection object.
120 	 *  @param value battery indicator value received from the AG.
121 	 */
122 	void (*battery)(struct bt_conn *conn, uint32_t value);
123 	/** HF incoming call Ring indication callback to application
124 	 *
125 	 *  If this callback is provided it will be called whenever there
126 	 *  is an incoming call.
127 	 *
128 	 *  @param conn Connection object.
129 	 */
130 	void (*ring_indication)(struct bt_conn *conn);
131 	/** HF notify command completed callback to application
132 	 *
133 	 *  The command sent from the application is notified about its status
134 	 *
135 	 *  @param conn Connection object.
136 	 *  @param cmd structure contains status of the command including cme.
137 	 */
138 	void (*cmd_complete_cb)(struct bt_conn *conn,
139 			      struct bt_hfp_hf_cmd_complete *cmd);
140 };
141 
142 /** @brief Register HFP HF profile
143  *
144  *  Register Handsfree profile callbacks to monitor the state and get the
145  *  required HFP details to display.
146  *
147  *  @param cb callback structure.
148  *
149  *  @return 0 in case of success or negative value in case of error.
150  */
151 int bt_hfp_hf_register(struct bt_hfp_hf_cb *cb);
152 
153 /** @brief Handsfree client Send AT
154  *
155  *  Send specific AT commands to handsfree client profile.
156  *
157  *  @param conn Connection object.
158  *  @param cmd AT command to be sent.
159  *
160  *  @return 0 in case of success or negative value in case of error.
161  */
162 int bt_hfp_hf_send_cmd(struct bt_conn *conn, enum bt_hfp_hf_at_cmd cmd);
163 
164 #ifdef __cplusplus
165 }
166 #endif
167 
168 /**
169  * @}
170  */
171 
172 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_HFP_HF_H_ */
173