1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef HFP_HF_DEFINES_H
17 #define HFP_HF_DEFINES_H
18 
19 #include <cstdint>
20 #include <string>
21 
22 #include "log.h"
23 
24 namespace OHOS {
25 namespace bluetooth {
26 #define HFP_HF_RETURN_IF_FAIL(ret)                                \
27     do {                                                          \
28         if ((ret) == BT_ALREADY) {                                  \
29             LOG_WARN("[HFP HF]%{public}s():ret[%{public}d]", __FUNCTION__, ret);  \
30         }                                                         \
31         if (((ret) != BT_SUCCESS) && ((ret) != BT_ALREADY)) {        \
32             LOG_ERROR("[HFP HF]%{public}s():ret[%{public}d]", __FUNCTION__, ret); \
33             return ret;                                           \
34         }                                                         \
35     } while (0)
36 
37 static constexpr int HFP_HF_COMMAND_MTU = 512;
38 static constexpr int HFP_HF_OUTGOING_CALL_ID = -1;
39 
40 // SDP attribute defines
41 static constexpr uint16_t HFP_HF_SDP_ATTRIBUTE_DATA_STORES_OR_NETWORK = 0x0301;
42 static constexpr uint16_t HFP_HF_SDP_ATTRIBUTE_SUPPORTED_FEATURES = 0x0311;
43 
44 // HF service name string
45 static const std::string HFP_HF_SERVER_SERVICE_NAME = "Handsfree Unit";
46 
47 static const std::string HSP_HS_SERVER_SERVICE_NAME = "Headset";
48 
49 static const std::string HSP_HS_STATE_SECTION_NAME = "HfpHfService";
50 static const std::string HSP_HS_STATE_PROPERY_NAME = "HspHsState";
51 
52 // Service class UUID
53 static constexpr uint16_t HFP_HF_UUID_SERVCLASS_HFP_HF = 0X111E;
54 static constexpr uint16_t HFP_HF_UUID_SERVCLASS_HFP_AG = 0X111F;
55 static constexpr uint16_t HFP_HF_UUID_SERVCLASS_GENERIC_AUDIO = 0X1203;
56 static constexpr uint16_t HSP_UUID_SERVCLASS = 0x1108;
57 static constexpr uint16_t HFP_HF_UUID_SERVCLASS_HSP_HS = 0x1131;
58 static constexpr uint16_t HFP_HF_UUID_SERVCLASS_HSP_AG = 0x1112;
59 
60 // HFP version
61 static constexpr uint16_t HFP_HF_HFP_VERSION_1_1 = 0x0101;
62 static constexpr uint16_t HFP_HF_HFP_VERSION_1_5 = 0x0105;
63 static constexpr uint16_t HFP_HF_HFP_VERSION_1_6 = 0x0106;
64 static constexpr uint16_t HFP_HF_HFP_VERSION_1_7 = 0x0107;
65 
66 // HSP version
67 static constexpr uint16_t HFP_HF_HSP_VERSION_1_2 = 0x0102;
68 
69 // HF features masks: using 16 ~ 0 bits
70 static constexpr uint16_t HFP_HF_AG_FEATURES_NONE = 0x0000;
71 static constexpr uint16_t HFP_HF_AG_FEATURES_SUPPORT_WBS = 0x0020;
72 static constexpr uint16_t HFP_HF_AG_FEATURES_BRSF_MASK = 0x001F;
73 
74 // Hf feature masks
75 static constexpr uint32_t HFP_HF_FEATURES_ECNR = 0x00000001;                   // Echo cancellation/noise reduction
76 static constexpr uint32_t HFP_HF_FEATURES_THREE_WAY = 0x00000002;              // Three-way calling
77 static constexpr uint32_t HFP_HF_FEATURES_CALLING_ID = 0x00000004;             // CLI presentation capability
78 static constexpr uint32_t HFP_HF_FEATURES_VOICE_RECOGNITION = 0x00000008;      // Voice recognition
79 static constexpr uint32_t HFP_HF_FEATURES_REMOTE_VOLUME_CONTROL = 0x00000010;  // Remote volume control
80 static constexpr uint32_t HFP_HF_FEATURES_ENHANCED_CALL_STATUS = 0x00000020;   // Enhanced Call Status
81 static constexpr uint32_t HFP_HF_FEATURES_ENHANCED_CALL_CONTROL = 0x00000040;  // Enhanced Call Control
82 static constexpr uint32_t HFP_HF_FEATURES_CODEC_NEGOTIATION = 0x00000080;      // Codec Negotiation
83 static constexpr uint32_t HFP_HF_FEATURES_HF_INDICATORS = 0x00000100;          // HF indicators
84 static constexpr uint32_t HFP_HF_FEATURES_ESCO = 0x00000200;                   // eSCO S4 Settings Supported
85 
86 // AG feature masks
87 static constexpr uint32_t HFP_HF_AG_FEATURES_THREE_WAY = 0x00000001;             // Three-way calling
88 static constexpr uint32_t HFP_HF_AG_FEATURES_ECNR = 0x00000002;                  // Echo cancellation/noise reduction
89 static constexpr uint32_t HFP_HF_AG_FEATURES_VOICE_RECOGNITION = 0x00000004;     // Voice recognition
90 static constexpr uint32_t HFP_HF_AG_FEATURES_IN_BAND_RING = 0x00000008;          // In-band ring tone
91 static constexpr uint32_t HFP_HF_AG_FEATURES_VOICE_TAG = 0x00000010;             // Attach a phone number to a voice tag
92 static constexpr uint32_t HFP_HF_AG_FEATURES_REJECT_CALL = 0x00000020;           // Ability to reject incoming call
93 static constexpr uint32_t HFP_HF_AG_FEATURES_ENHANCED_CALL_STATUS = 0x00000040;  // Enhanced Call Status
94 static constexpr uint32_t HFP_HF_AG_FEATURES_ENHANCED_CALL_CONTROL = 0x00000080;  // Enhanced Call Control
95 static constexpr uint32_t HFP_HF_AG_FEATURES_EXTEND_ERROR_CODE = 0x00000100;      // Extended error codes
96 static constexpr uint32_t HFP_HF_AG_FEATURES_CODEC_NEGOTIATION = 0x00000200;      // Codec Negotiation
97 static constexpr uint32_t HFP_HF_AG_FEATURES_HF_INDICATORS = 0x00000400;          // HF Indicators
98 static constexpr uint32_t HFP_HF_AG_FEATURES_SUPPORT_ESCO = 0x00000800;           // eSCO S4 (and T2) setting supported
99 
100 // Default HF features
101 static constexpr uint32_t HFP_HF_FEATURES_DEFAULT = HFP_HF_FEATURES_ECNR |
102                                                     HFP_HF_FEATURES_THREE_WAY |
103                                                     HFP_HF_FEATURES_CALLING_ID |
104                                                     HFP_HF_FEATURES_VOICE_RECOGNITION |
105                                                     HFP_HF_FEATURES_REMOTE_VOLUME_CONTROL |
106                                                     HFP_HF_FEATURES_ENHANCED_CALL_STATUS |
107                                                     HFP_HF_FEATURES_HF_INDICATORS |
108                                                     HFP_HF_FEATURES_ENHANCED_CALL_CONTROL;
109 
110 // Specific SDP HF features
111 static constexpr uint32_t HFP_HF_FEATURES_SDP_SPEC = HFP_HF_FEATURES_ECNR |
112                                                      HFP_HF_FEATURES_THREE_WAY |
113                                                      HFP_HF_FEATURES_CALLING_ID |
114                                                      HFP_HF_FEATURES_VOICE_RECOGNITION |
115                                                      HFP_HF_FEATURES_REMOTE_VOLUME_CONTROL;
116 
117 typedef struct {
118     uint8_t remoteServerChannelNumber {0};
119     uint8_t remoteNetwork {0};
120     uint16_t remoteVersion {0};
121     uint16_t remoteFeatures {0};
122     int remoteCodec {0};
123 } HfpHfRemoteSdpInfo;
124 
125 typedef struct {
126     uint16_t index {0};
127     uint16_t dir {0};
128     uint16_t status {0};
129     uint16_t mode {0};
130     uint16_t mprty {0};
131     std::string number {""};
132     uint16_t type {0};
133 } HfpHfCurrentCallData;
134 
135 // Hf
136 enum HfpHfCodecsType { HFP_HF_CODEC_NONE, HFP_HF_CODEC_CVSD, HFP_HF_CODEC_MSBC };
137 
138 enum HfpHfVolumeType { HFP_HF_VOLUME_TYPE_SPK, HFP_HF_VOLUME_TYPE_MIC };
139 
140 enum HfpHfNetworkValue { HFP_HF_NETWORK_VALUE_NONE, HFP_HF_NETWORK_VALUE_HAVE };
141 
142 enum HfpHfRoleType { HFP_HF_INITIATOR, HFP_HF_ACCEPTOR };
143 
144 enum HfpHfIndicatorType { HFP_HF_INDICATOR_DRIVER_SAFETY = 1, HFP_HF_INDICATOR_BATTERY_LEVEL = 2 };
145 
146 enum HfpHfAgIndicatorType {
147     HFP_HF_AG_INDICATOR_CALL = 1,
148     HFP_HF_AG_INDICATOR_CALLSETUP,
149     HFP_HF_AG_INDICATOR_REGISTRATION_STATUS,
150     HFP_HF_AG_INDICATOR_SIGNAL_STRENGTH,
151     HFP_HF_AG_INDICATOR_ROAMING_STATE,
152     HFP_HF_AG_INDICATOR_BATTERY_LEVEL,
153     HFP_HF_AG_INDICATOR_CALLHELD
154 };
155 
156 enum HfpHfConnectState {
157     HFP_HF_STATE_DISCONNECTED = 0,
158     HFP_HF_STATE_CONNECTING,
159     HFP_HF_STATE_DISCONNECTING,
160     HFP_HF_STATE_CONNECTED
161 };
162 
163 enum HfpHfAudioState {
164     HFP_HF_AUDIO_STATE_DISCONNECTED = HFP_HF_STATE_CONNECTED,
165     HFP_HF_AUDIO_STATE_CONNECTING,
166     HFP_HF_AUDIO_STATE_DISCONNECTING,
167     HFP_HF_AUDIO_STATE_CONNECTED
168 };
169 
170 enum {
171     HFP_HF_INVALID_EVT = 0,
172 
173     // service start/stop
174     HFP_HF_SERVICE_STARTUP_EVT = 1,
175     HFP_HF_SERVICE_SHUTDOWN_EVT = 2,
176 
177     // service connect events
178     HFP_HF_CONNECT_EVT = 10,
179     HFP_HF_DISCONNECT_EVT = 11,
180     HFP_HF_CONNECT_AUDIO_EVT = 20,
181     HFP_HF_DISCONNECT_AUDIO_EVT = 21,
182     HFP_HF_RETRY_CONNECT_AUDIO_EVT = 22,
183     HFP_HF_REMOVE_STATE_MACHINE_EVT = 30,
184     HFP_HF_INTERACTIVE_EVT,
185 
186     // service timeout events
187     HFP_HF_CONNECTION_TIMEOUT_EVT,
188     HFP_HF_DISCONNECT_TIMEOUT_EVT,
189     HFP_HF_CONNECT_AUDIO_TIMEOUT_EVT,
190     HFP_HF_DISCONNECT_AUDIO_TIMEOUT_EVT,
191 
192     HFP_HF_SEND_DTMF_EVT,
193     HFP_HF_ACCEPT_CALL_EVT,
194     HFP_HF_HOLD_CALL_EVT,
195     HFP_HF_REJECT_CALL_EVT,
196     HFP_HF_SEND_KEY_PRESSED,
197     HFP_HF_HANDLE_INCOMING_CALL_EVT,
198     HFP_HF_HANDLE_MULTI_CALL_EVT,
199     HFP_HF_DIAL_LAST_NUMBER,
200     HFP_HF_DIAL_MEMORY,
201     HFP_HF_SEND_VOICE_TAG,
202     HFP_HF_FINISH_CALL_EVT,
203     HFP_HF_DIAL_CALL_EVT,
204     HFP_HF_OPEN_VOICE_RECOGNITION_EVT,
205     HFP_HF_CLOSE_VOICE_RECOGNITION_EVT,
206     HFP_HF_SET_VOLUME_EVT,
207     HFP_HF_BATTERY_LEVEL_CHANGED_EVT,
208     HFP_HF_ENHANCED_DRIVER_SAFETY_CHANGED_EVT,
209 
210     // stack sdp events
211     HFP_HF_SDP_DISCOVERY_RESULT_SUCCESS = 98,
212     HFP_HF_SDP_DISCOVERY_RESULT_FAIL = 99,
213 
214     // stack rfcomm events
215     HFP_HF_CONNECT_REQUEST_EVT = 100,
216     HFP_HF_CONNECTED_EVT = 110,
217     HFP_HF_DISCONNECTED_EVT = 111,
218     HFP_HF_CONNECT_FAILED_EVT = 112,
219     HFP_HF_DISCONNECT_FAILED_EVT = 113,
220     HFP_HF_DATA_AVAILABLE_EVT = 114,
221 
222     // service level connection established event
223     HFP_HF_SETUP_CODEC_CVSD = 198,
224     HFP_HF_SLC_ESTABLISHED_EVT = 199,
225 
226     // stack audio events
227     HFP_HF_AUDIO_CONNECT_REQUEST_EVT = 201,
228     HFP_HF_AUDIO_CONNECTING_EVT = 202,
229     HFP_HF_AUDIO_DISCONNECTING_EVT = 203,
230     HFP_HF_AUDIO_CONNECTED_EVT = 220,
231     HFP_HF_AUDIO_CONNECT_FAILED_EVT = 221,
232     HFP_HF_AUDIO_DISCONNECTED_EVT,
233     HFP_HF_AUDIO_DISCONNECT_FAILED_EVT,
234 
235     HFP_HF_SEND_AT_COMMAND_EVT
236 };
237 
238 enum {
239     HFP_HF_TYPE_NONE,
240     HFP_HF_TYPE_NETWORK_STATE,
241     HFP_HF_TYPE_NETWORK_ROAM,
242     HFP_HF_TYPE_NETWORK_SIGNAL,
243     HFP_HF_TYPE_BATTERY_LEVEL,
244     HFP_HF_TYPE_CURRENT_OPERATOR,
245     HFP_HF_TYPE_CALL_STATE,
246     HFP_HF_TYPE_CALL_SETUP_STATE,
247     HFP_HF_TYPE_CALL_HELD_STATE,
248     HFP_HF_TYPE_HOLD_RESULT,
249     HFP_HF_TYPE_CALLING_LINE_IDENTIFICATION,
250     HFP_HF_TYPE_CALL_WAITING,
251     HFP_HF_TYPE_CURRENT_CALLS,
252     HFP_HF_TYPE_SET_VOLUME,
253     HFP_HF_TYPE_AT_CMD_RESULT,
254     HFP_HF_TYPE_SUBSCRIBER_NUMBER,
255     HFP_HF_TYPE_INBAND_RING,
256     HFP_HF_TYPE_LAST_NUMBER,
257     HFP_HF_TYPE_RING_ALERT,
258     HFP_HF_TYPE_UNKNOWN,
259     HFP_HF_TYPE_QUERY_CURRENT_CALLS_DONE,
260     HFP_HF_TYPE_VOICE_RECOGNITION_CHANGED,
261     HFP_HF_TYPE_OPEN_VR_RESULT,
262     HFP_HF_TYPE_CLOSE_VR_RESULT
263 };
264 
265 enum {
266     HFP_HF_AT_RESULT_OK = 0,
267     HFP_HF_AT_RESULT_ERROR,
268     HFP_HF_AT_RESULT_NO_CARRIER,
269     HFP_HF_AT_RESULT_BUSY,
270     HFP_HF_AT_RESULT_NO_ANSWER,
271     HFP_HF_AT_RESULT_DELAYED,
272     HFP_HF_AT_RESULT_BLOCKLISTED,
273     HFP_HF_AT_RESULT_CME,
274 };
275 
276 enum { HFP_HF_NETWORK_STATE_NOT_AVAILABLE, HFP_HF_NETWORK_STATE_AVAILABLE };
277 
278 enum { HFP_HF_SUCCESS, HFP_HF_FAILURE };
279 
280 enum HfpHfAcceptCallAction {
281     HFP_HF_ACCEPT_CALL_ACTION_NONE = 0,
282     HFP_HF_ACCEPT_CALL_ACTION_HOLD = 1,
283     HFP_HF_ACCEPT_CALL_ACTION_FINISH = 2
284 };
285 
286 enum class HfpHfHandleIncomingCalAction {
287     HFP_HF_HOLD_INCOMING_ACTION = 0,
288     HFP_HF_ACCEPT_HOLD_ACTION = 1,
289     HFP_HF_REJECT_HOLD_ACTION = 2
290 };
291 
292 enum HfpHfChldAction {
293     HFP_HF_CHLD_ACTION_0 = 0, /* Releases all held calls. */
294     HFP_HF_CHLD_ACTION_1 = 1, /* Releases all active calls and accepts the other call.
295                                  Releases specified active call only (<idx>). */
296     HFP_HF_CHLD_ACTION_2 = 2, /* Places all active calls on hold and accepts the other call.
297                                  Request private consultation mode with specified call (<idx>). */
298     HFP_HF_CHLD_ACTION_3 = 3, /* Adds a held call to the conversation. */
299     HFP_HF_CHLD_ACTION_4 = 4  /* Explicit Call Transfer. */
300 };
301 
302 enum HfpHfCallState {
303     HFP_HF_CALL_STATE_ACTIVE = 0,
304     HFP_HF_CALL_STATE_HELD,
305     HFP_HF_CALL_STATE_DIALING,
306     HFP_HF_CALL_STATE_ALERTING,
307     HFP_HF_CALL_STATE_INCOMING,
308     HFP_HF_CALL_STATE_WAITING,
309     HFP_HF_CALL_STATE_RESPONSE_HELD,
310     HFP_HF_CALL_STATE_FINISHED
311 };
312 
313 enum HfpHfMptyType { HFP_HF_MPTY_TYPE_SINGLE = 0, HFP_HF_MPTY_TYPE_MULTI };
314 
315 enum HfpHfDirectionType { HFP_HF_DIRECTION_TYPE_OUTGOING = 0, HFP_HF_DIRECTION_TYPE_INCOMING };
316 
317 enum { HFP_HF_VR_STATE_CLOSED, HFP_HF_VR_STATE_OPENED };
318 
319 constexpr int HFP_HF_HFAG_FOUND = 1;
320 constexpr int HFP_HF_HSAG_FOUND = 2;
321 constexpr int HFP_HF_HFAG_HSAG_FOUND = 3;
322 
323 constexpr int HSP_HS_STATE_BOTH = 0X01;
324 constexpr int HSP_HS_STATE_HSP = 0X02;
325 constexpr int HSP_HS_STATE_NONE = 0X03;
326 }  // namespace bluetooth
327 }  // namespace OHOS
328 #endif // HFP_HF_DEFINES_H