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 CALL_MANAGER_INNER_TYPE_H 17 #define CALL_MANAGER_INNER_TYPE_H 18 19 #include <cstdio> 20 #include <string> 21 #include <vector> 22 #include <ctime> 23 24 namespace OHOS { 25 namespace Telephony { 26 constexpr int16_t kMaxNumberLen = 100; 27 constexpr int16_t kMaxBundleNameLen = 100; 28 constexpr uint16_t REJECT_CALL_MSG_MAX_LEN = 300; 29 constexpr uint16_t ACCOUNT_NUMBER_MAX_LENGTH = 100; 30 constexpr uint16_t CONNECT_SERVICE_WAIT_TIME = 1000; // ms 31 constexpr int16_t ERR_ID = -1; 32 33 // call type 34 enum class CallType { 35 TYPE_CS = 0, // CS 36 TYPE_IMS = 1, // IMS 37 TYPE_OTT = 2, // OTT 38 TYPE_ERR_CALL = 3, // OTHER 39 }; 40 41 // call state 42 enum class TelCallState { 43 CALL_STATUS_ACTIVE = 0, 44 CALL_STATUS_HOLDING, 45 CALL_STATUS_DIALING, 46 CALL_STATUS_ALERTING, 47 CALL_STATUS_INCOMING, 48 CALL_STATUS_WAITING, 49 CALL_STATUS_DISCONNECTED, 50 CALL_STATUS_DISCONNECTING, 51 CALL_STATUS_IDLE, 52 }; 53 54 enum class TelConferenceState { 55 TEL_CONFERENCE_IDLE = 0, 56 TEL_CONFERENCE_ACTIVE, 57 TEL_CONFERENCE_HOLDING, 58 TEL_CONFERENCE_DISCONNECTING, 59 TEL_CONFERENCE_DISCONNECTED, 60 }; 61 62 // phone type 63 enum class PhoneNetType { 64 PHONE_TYPE_GSM = 1, // gsm 65 PHONE_TYPE_CDMA = 2, // cdma 66 }; 67 68 // call mode 69 enum class VideoStateType { 70 TYPE_VOICE = 0, // Voice 71 TYPE_VIDEO, // Video 72 }; 73 74 enum class DialScene { 75 CALL_NORMAL = 0, 76 CALL_PRIVILEGED, 77 CALL_EMERGENCY, 78 }; 79 80 enum class CallDirection { 81 CALL_DIRECTION_IN = 0, 82 CALL_DIRECTION_OUT, 83 CALL_DIRECTION_UNKNOW, 84 }; 85 86 enum class CallRunningState { 87 CALL_RUNNING_STATE_CREATE = 0, // A new session 88 CALL_RUNNING_STATE_CONNECTING, 89 CALL_RUNNING_STATE_DIALING, 90 CALL_RUNNING_STATE_RINGING, 91 CALL_RUNNING_STATE_ACTIVE, 92 CALL_RUNNING_STATE_HOLD, 93 CALL_RUNNING_STATE_ENDED, 94 CALL_RUNNING_STATE_ENDING, 95 }; 96 97 enum class CallEndedType { 98 UNKNOWN = 0, 99 PHONE_IS_BUSY, 100 INVALID_NUMBER, 101 CALL_ENDED_NORMALLY, 102 }; 103 104 struct SIMCardInfo { 105 int32_t simId; // IccId 106 int32_t country; 107 int32_t state; // SIM card active status 108 PhoneNetType phoneNetType; 109 }; 110 111 enum class DialType { 112 DIAL_CARRIER_TYPE = 0, 113 DIAL_VOICE_MAIL_TYPE, 114 DIAL_OTT_TYPE, 115 }; 116 117 enum class CallStateToApp { 118 /** 119 * Indicates an invalid state, which is used when the call state fails to be obtained. 120 */ 121 CALL_STATE_UNKNOWN = -1, 122 123 /** 124 * Indicates that there is no ongoing call. 125 */ 126 CALL_STATE_IDLE = 0, 127 128 /** 129 * Indicates that an incoming call is ringing or waiting. 130 */ 131 CALL_STATE_RINGING = 1, 132 133 /** 134 * Indicates that a least one call is in the dialing, active, or hold state, and there is no new incoming call 135 * ringing or waiting. 136 */ 137 CALL_STATE_OFFHOOK = 2 138 }; 139 140 enum class CallAnswerType { 141 CALL_ANSWER_MISSED = 0, 142 CALL_ANSWER_ACTIVED, 143 CALL_ANSWER_REJECT, 144 }; 145 146 struct CallAttributeInfo { 147 char accountNumber[kMaxNumberLen + 1]; 148 char bundleName[kMaxBundleNameLen + 1]; 149 bool speakerphoneOn; 150 int32_t accountId; 151 VideoStateType videoState; 152 int64_t startTime; // Call start time 153 bool isEcc; 154 CallType callType; 155 int32_t callId; 156 TelCallState callState; 157 TelConferenceState conferenceState; 158 time_t callBeginTime; 159 time_t callEndTime; 160 time_t ringBeginTime; 161 time_t ringEndTime; 162 CallDirection callDirection; 163 CallAnswerType answerType; 164 }; 165 166 struct CallRecordInfo { 167 int32_t callId; 168 char phoneNumber[kMaxNumberLen + 1]; 169 char formattedPhoneNumber[kMaxNumberLen + 1]; 170 CallType callType; 171 time_t callBeginTime; 172 time_t callEndTime; 173 uint32_t ringDuration; 174 uint32_t callDuration; 175 CallDirection directionType; 176 CallAnswerType answerType; 177 int32_t countryCode; 178 }; 179 180 enum class CallAbilityEventId { 181 EVENT_DIAL_NO_CARRIER = 1, 182 EVENT_INVALID_FDN_NUMBER, 183 EVENT_OTT_FUNCTION_UNSUPPORTED, 184 }; 185 186 struct CallEventInfo { 187 CallAbilityEventId eventId; 188 char phoneNum[kMaxNumberLen + 1]; 189 char bundleName[kMaxBundleNameLen + 1]; 190 }; 191 192 struct AccountInfo { 193 int32_t accountId; 194 int32_t power; 195 char bundleName[kMaxNumberLen + 1]; 196 bool isEnabled; 197 }; 198 199 struct CallReportInfo { 200 int32_t index; 201 char accountNum[kMaxNumberLen + 1]; // call phone number 202 int32_t accountId; 203 CallType callType; // call type: CS、IMS 204 VideoStateType callMode; // call mode: video or audio 205 TelCallState state; // call state 206 int32_t voiceDomain; // 0:CS、1:IMS 207 }; 208 209 struct CallsReportInfo { 210 std::vector<CallReportInfo> callVec; 211 int32_t slotId; 212 }; 213 214 /* 215 * 3GPP TS 24.008 216 * V17.4.0 10.5.4.11 Cause 217 * The purpose of the cause information element is to describe the reason for generating 218 * certain messages, to provide diagnostic information in the event of procedural 219 * errors and to indicate the location of the cause originator. 220 */ 221 enum class DisconnectedDetails : int32_t { 222 UNASSIGNED_NUMBER = 1, 223 NO_ROUTE_TO_DESTINATION = 3, 224 CHANNEL_UNACCEPTABLE = 6, 225 OPERATOR_DETERMINED_BARRING = 8, 226 NORMAL_CALL_CLEARING = 16, 227 USER_BUSY = 17, 228 NO_USER_RESPONDING = 18, 229 USER_ALERTING_NO_ANSWER = 19, 230 CALL_REJECTED = 21, 231 NUMBER_CHANGED = 22, 232 DESTINATION_OUT_OF_ORDER = 27, 233 INVALID_NUMBER_FORMAT = 28, 234 NETWORK_OUT_OF_ORDER = 38, 235 TEMPORARY_FAILURE = 41, 236 INVALID_PARAMETER = 1025, 237 SIM_NOT_EXIT = 1026, 238 SIM_PIN_NEED = 1027, 239 CALL_NOT_ALLOW = 1029, 240 SIM_INVALID = 1045, 241 UNKNOWN = 1279, 242 }; 243 244 enum class AudioDevice { 245 DEVICE_EARPIECE = 0, 246 DEVICE_SPEAKER, 247 DEVICE_WIRED_HEADSET, 248 DEVICE_BLUETOOTH_SCO, 249 DEVICE_DISABLE, 250 DEVICE_UNKNOWN, 251 }; 252 253 enum class CellularCallEventType { 254 EVENT_REQUEST_RESULT_TYPE = 0, 255 }; 256 257 enum class RequestResultEventId { 258 RESULT_DIAL_SEND_FAILED = 0, 259 RESULT_DIAL_NO_CARRIER, 260 RESULT_END_SEND_FAILED, 261 RESULT_REJECT_SEND_FAILED, 262 RESULT_ACCEPT_SEND_FAILED, 263 RESULT_HOLD_SEND_FAILED, 264 RESULT_ACTIVE_SEND_FAILED, 265 RESULT_SWAP_SEND_FAILED, 266 RESULT_JOIN_SEND_FAILED, 267 RESULT_SPLIT_SEND_FAILED, 268 RESULT_SUPPLEMENT_SEND_FAILED, 269 RESULT_INVITE_TO_CONFERENCE_SUCCESS, 270 RESULT_INVITE_TO_CONFERENCE_FAILED, 271 RESULT_KICK_OUT_FROM_CONFERENCE_SUCCESS, 272 RESULT_KICK_OUT_FROM_CONFERENCE_FAILED, 273 274 RESULT_SEND_DTMF_SUCCESS, 275 RESULT_SEND_DTMF_FAILED, 276 277 RESULT_GET_CURRENT_CALLS_FAILED, 278 279 RESULT_SET_CALL_PREFERENCE_MODE_SUCCESS, 280 RESULT_SET_CALL_PREFERENCE_MODE_FAILED, 281 RESULT_GET_IMS_CALLS_DATA_FAILED, 282 283 RESULT_GET_CALL_WAITING_SUCCESS, 284 RESULT_GET_CALL_WAITING_FAILED, 285 RESULT_SET_CALL_WAITING_SUCCESS, 286 RESULT_SET_CALL_WAITING_FAILED, 287 RESULT_GET_CALL_RESTRICTION_SUCCESS, 288 RESULT_GET_CALL_RESTRICTION_FAILED, 289 RESULT_SET_CALL_RESTRICTION_SUCCESS, 290 RESULT_SET_CALL_RESTRICTION_FAILED, 291 RESULT_GET_CALL_TRANSFER_SUCCESS, 292 RESULT_GET_CALL_TRANSFER_FAILED, 293 RESULT_SET_CALL_TRANSFER_SUCCESS, 294 RESULT_SET_CALL_TRANSFER_FAILED, 295 RESULT_SEND_USSD_SUCCESS, 296 RESULT_SEND_USSD_FAILED, 297 298 RESULT_SET_MUTE_SUCCESS, 299 RESULT_SET_MUTE_FAILED, 300 301 RESULT_CTRL_CAMERA_SUCCESS, 302 RESULT_CTRL_CAMERA_FAILED, 303 RESULT_SET_PREVIEW_WINDOW_SUCCESS, 304 RESULT_SET_PREVIEW_WINDOW_FAILED, 305 RESULT_SET_DISPLAY_WINDOW_SUCCESS, 306 RESULT_SET_DISPLAY_WINDOW_FAILED, 307 RESULT_SET_CAMERA_ZOOM_SUCCESS, 308 RESULT_SET_CAMERA_ZOOM_FAILED, 309 RESULT_SET_PAUSE_IMAGE_SUCCESS, 310 RESULT_SET_PAUSE_IMAGE_FAILED, 311 RESULT_SET_DEVICE_DIRECTION_SUCCESS, 312 RESULT_SET_DEVICE_DIRECTION_FAILED, 313 }; 314 315 enum class CallResultReportId { 316 START_DTMF_REPORT_ID = 0, 317 STOP_DTMF_REPORT_ID, 318 SEND_USSD_REPORT_ID, 319 GET_IMS_CALL_DATA_REPORT_ID, 320 GET_CALL_WAITING_REPORT_ID, 321 SET_CALL_WAITING_REPORT_ID, 322 GET_CALL_RESTRICTION_REPORT_ID, 323 SET_CALL_RESTRICTION_REPORT_ID, 324 GET_CALL_TRANSFER_REPORT_ID, 325 SET_CALL_TRANSFER_REPORT_ID, 326 GET_CALL_CLIP_ID, 327 GET_CALL_CLIR_ID, 328 SET_CALL_CLIR_ID, 329 GET_CALL_VOTLE_REPORT_ID, 330 SET_CALL_VOTLE_REPORT_ID, 331 START_RTT_REPORT_ID, 332 STOP_RTT_REPORT_ID, 333 GET_IMS_CONFIG_REPORT_ID, 334 SET_IMS_CONFIG_REPORT_ID, 335 GET_IMS_FEATURE_VALUE_REPORT_ID, 336 SET_IMS_FEATURE_VALUE_REPORT_ID, 337 GET_LTE_ENHANCE_MODE_REPORT_ID, 338 SET_LTE_ENHANCE_MODE_REPORT_ID, 339 INVITE_TO_CONFERENCE_REPORT_ID, 340 UPDATE_MEDIA_MODE_REPORT_ID, 341 }; 342 343 struct CellularCallEventInfo { 344 CellularCallEventType eventType; 345 RequestResultEventId eventId; 346 }; 347 348 enum class RBTPlayInfo { 349 NETWORK_ALERTING, 350 LOCAL_ALERTING, 351 }; 352 353 struct CallWaitResponse { 354 int32_t result; // 0: ok other: error 355 int32_t status; 356 int32_t classCw; 357 }; 358 359 struct ClipResponse { 360 int32_t result; // 0: ok other: error 361 int32_t action; 362 int32_t clipStat; 363 }; 364 365 struct ClirResponse { 366 int32_t result; // 0: ok other: error 367 int32_t action; 368 int32_t clirStat; 369 }; 370 371 struct CallTransferResponse { 372 int32_t result; // 0: ok other: error 373 int32_t status; 374 int32_t classx; 375 int32_t type; 376 char number[kMaxNumberLen + 1]; 377 }; 378 379 struct CallRestrictionResponse { 380 int32_t result; // 0: ok other: error 381 int32_t status; // parameter sets/shows the result code presentation status in the TA 382 int32_t classCw; // parameter shows the subscriber CLIP service status in the network, <0-4> 383 }; 384 385 struct CallPreferenceResponse { 386 int32_t result; // 0: ok other: error 387 /* 388 * 1:CS Voice only 389 * 2:CS Voice preferred, IMS PS Voice as secondary 390 * 3:IMS PS Voice preferred, CS Voice as secondary 391 * 4:IMS PS Voice only 392 */ 393 int32_t mode; 394 }; 395 396 struct LteImsSwitchResponse { 397 int32_t result; // 0: ok other: error 398 int32_t active; // 0: off 1: on 399 }; 400 401 struct GetImsConfigResponse { 402 int32_t result; 403 int32_t value; 404 }; 405 406 struct GetImsFeatureValueResponse { 407 int32_t result; 408 int32_t value; 409 }; 410 411 struct GetLteEnhanceModeResponse { 412 int32_t result; 413 int32_t value; 414 }; 415 416 struct MuteControlResponse { 417 int32_t result; 418 int32_t value; // 0: Un mute 1: Set mute 419 }; 420 421 struct CellularCallInfo { 422 int32_t callId; // uuid 423 char phoneNum[kMaxNumberLen]; // call phone number 424 int32_t slotId; // del 425 int32_t accountId; 426 CallType callType; // call type: CS、IMS 427 int32_t videoState; // 0: audio 1:video 428 int32_t index; // CallInfo index 429 }; 430 431 /** 432 * 27007-430_2001 7.11 Call forwarding number and conditions +CCFC 433 * 3GPP TS 22.082 [4] 434 * <mode>: 435 * 0 disable 436 * 1 enable 437 * 3 registration 438 * 4 erasure 439 */ 440 enum class CallTransferSettingType { 441 CALL_TRANSFER_DISABLE = 0, 442 CALL_TRANSFER_ENABLE = 1, 443 CALL_TRANSFER_REGISTRATION = 3, 444 CALL_TRANSFER_ERASURE = 4, 445 }; 446 447 /** 448 * 27007-430_2001 7.11 Call forwarding number and conditions +CCFC 449 * 3GPP TS 22.082 [4] 450 * <reason>: 451 * 0 unconditional 452 * 1 mobile busy 453 * 2 no reply 454 * 3 not reachable 455 */ 456 enum class CallTransferType { 457 TRANSFER_TYPE_UNCONDITIONAL = 0, 458 TRANSFER_TYPE_BUSY = 1, 459 TRANSFER_TYPE_NO_REPLY = 2, 460 TRANSFER_TYPE_NOT_REACHABLE = 3, 461 }; 462 463 struct CallTransferInfo { 464 char transferNum[kMaxNumberLen + 1]; 465 CallTransferSettingType settingType; 466 CallTransferType type; 467 }; 468 469 struct VideoWindow { 470 int32_t x; 471 int32_t y; 472 int32_t z; 473 int32_t width; 474 int32_t height; 475 }; 476 477 // 3GPP TS 22.030 V4.0.0 (2001-03) 478 // 3GPP TS 22.088 V4.0.0 (2001-03) 479 enum class CallRestrictionType { 480 RESTRICTION_TYPE_ALL_INCOMING = 0, 481 RESTRICTION_TYPE_ALL_OUTGOING, 482 RESTRICTION_TYPE_INTERNATIONAL, 483 RESTRICTION_TYPE_INTERNATIONAL_EXCLUDING_HOME, 484 RESTRICTION_TYPE_ROAMING_INCOMING, 485 RESTRICTION_TYPE_ALL_CALLS, 486 RESTRICTION_TYPE_OUTGOING_SERVICES, 487 RESTRICTION_TYPE_INCOMING_SERVICES, 488 }; 489 490 // 3GPP TS 22.088 V4.0.0 (2001-03) 491 enum class CallRestrictionMode { 492 RESTRICTION_MODE_DEACTIVATION = 0, 493 RESTRICTION_MODE_ACTIVATION = 1, 494 }; 495 496 struct CallRestrictionInfo { 497 char password[kMaxNumberLen + 1]; 498 CallRestrictionType fac; 499 CallRestrictionMode mode; 500 }; 501 502 // 3GPP TS 27.007 V3.9.0 (2001-06) Call related supplementary services +CHLD 503 // 3GPP TS 27.007 V3.9.0 (2001-06) 7.22 Informative examples 504 enum CallSupplementType { 505 TYPE_DEFAULT = 0, // default type 506 TYPE_HANG_UP_HOLD_WAIT = 1, // release the held call and the wait call 507 TYPE_HANG_UP_ACTIVE = 2, // release the active call and recover the held call 508 TYPE_HANG_UP_ALL = 3, // release all calls 509 }; 510 511 enum CellularCallReturnType { 512 // 3GPP TS 27.007 V3.9.0 (2001-06) 6.27 Informative examples 513 RETURN_TYPE_MMI = 0, 514 }; 515 516 // 3GPP TS 27.007 V17.3.0 (2021-09) 10.1.35 UE's voice domain preference E-UTRAN +CEVDP 517 enum DomainPreferenceMode { 518 CS_VOICE_ONLY = 1, 519 CS_VOICE_PREFERRED = 2, 520 IMS_PS_VOICE_PREFERRED = 3, 521 IMS_PS_VOICE_ONLY = 4, 522 }; 523 524 enum ImsCallMode { 525 CALL_MODE_AUDIO_ONLY = 0, 526 CALL_MODE_SEND_ONLY, 527 CALL_MODE_RECEIVE_ONLY, 528 CALL_MODE_SEND_RECEIVE, 529 CALL_MODE_VIDEO_PAUSED, 530 }; 531 532 struct CallMediaModeRequest { 533 char phoneNum[kMaxNumberLen + 1]; 534 ImsCallMode mode; 535 }; 536 537 struct CallMediaModeResponse { 538 char phoneNum[kMaxNumberLen + 1]; 539 int32_t result; 540 }; 541 542 enum ImsConfigItem { 543 /** 544 * video quality 545 * 546 * format: bool 547 */ 548 ITEM_VIDEO_QUALITY = 0, 549 550 /** 551 * 3GPP TS 24.167 V17.1.0 (2020-12) 5.31 /<X>/Mobility_Management_IMS_Voice_Termination 552 * Ims Switch Status 553 * 554 * format: bool 555 * Access Types: Get, Replace 556 * Values: 0, 1 557 * 0 – Mobility Management for IMS Voice Termination disabled. 558 * 1 – Mobility Management for IMS Voice Termination enabled. 559 */ 560 ITEM_IMS_SWITCH_STATUS, 561 }; 562 563 enum VideoQualityValue { 564 LOW = 0, 565 HIGH = 1, 566 }; 567 568 enum ImsConfigValue { 569 CONFIG_SUCCESS = 0, 570 CONFIG_FAILED = 1, 571 }; 572 573 enum FeatureType { 574 /** 575 * Official Document IR.92 - IMS Profile for Voice and SMS 576 * Annex C MNO provisioning and Late Customization 577 * 578 * format: bool 579 * 3GPP TS 24.167 V17.1.0 (2020-12) 5.43 /<X>/Media_type_restriction_policy 580 */ 581 TYPE_VOICE_OVER_LTE = 0, 582 583 /** 584 * Official Document IR.92 - IMS Profile for Voice and SMS 585 * Annex C MNO provisioning and Late Customization 586 * 587 * format: bool 588 * 3GPP TS 24.167 V17.1.0 (2020-12) 5.43 /<X>/Media_type_restriction_policy 589 */ 590 TYPE_VIDEO_OVER_LTE, 591 }; 592 593 enum class OttCallRequestId { 594 OTT_REQUEST_DIAL = 0, 595 OTT_REQUEST_HANG_UP, 596 OTT_REQUEST_REJECT, 597 OTT_REQUEST_ANSWER, 598 OTT_REQUEST_HOLD, 599 OTT_REQUEST_UN_HOLD, 600 OTT_REQUEST_SWITCH, 601 OTT_REQUEST_COMBINE_CONFERENCE, 602 OTT_REQUEST_SEPARATE_CONFERENCE, 603 OTT_REQUEST_INVITE_TO_CONFERENCE, 604 OTT_REQUEST_UPDATE_CALL_MEDIA_MODE, 605 }; 606 607 struct OttCallRequestInfo { 608 char phoneNum[kMaxNumberLen + 1]; // call phone number 609 char bundleName[kMaxBundleNameLen + 1]; 610 VideoStateType videoState; // 0: audio 1:video 611 }; 612 613 struct OttCallDetailsInfo { 614 char phoneNum[kMaxNumberLen + 1]; // call phone number 615 char bundleName[kMaxBundleNameLen + 1]; 616 VideoStateType videoState; // 0: audio 1:video 617 TelCallState callState; 618 }; 619 620 enum class OttCallEventId { 621 OTT_CALL_EVENT_FUNCTION_UNSUPPORTED = 0, 622 }; 623 624 struct OttCallEventInfo { 625 OttCallEventId ottCallEventId; 626 char bundleName[kMaxBundleNameLen + 1]; 627 }; 628 629 struct CallDetailInfo { 630 int32_t index; 631 char phoneNum[kMaxNumberLen + 1]; // call phone number 632 char bundleName[kMaxBundleNameLen + 1]; 633 int32_t accountId; 634 CallType callType; // call type: CS、IMS 635 VideoStateType callMode; // call mode: video or audio 636 TelCallState state; // call state 637 int32_t voiceDomain; // 0:CS、1:IMS 638 }; 639 640 struct CallDetailsInfo { 641 std::vector<CallDetailInfo> callVec; 642 int32_t slotId; 643 char bundleName[kMaxBundleNameLen + 1]; 644 }; 645 } // namespace Telephony 646 } // namespace OHOS 647 #endif // CALL_MANAGER_INNER_TYPE_H 648