• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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