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