1 /* 2 * Copyright (C) 2022 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 CELLULAR_CALL_HISYSEVENT_H 17 #define CELLULAR_CALL_HISYSEVENT_H 18 19 #include <string> 20 21 #include "telephony_hisysevent.h" 22 23 namespace OHOS { 24 namespace Telephony { 25 static const int64_t NORMAL_INCOMING_TIME = 500; // incoming time (ms) 26 static const int16_t maxNumberLen = 100; 27 28 enum class AnswerCallType { 29 IMS_VOICE_ANSWER = 0, 30 IMS_VIDEO_TO_VOICE_ANSWER, 31 IMS_VIDEO_TO_VIDEO_ANSWER, 32 CS_VOICE_ANSWER, 33 }; 34 35 enum class DialCallType { 36 IMS_VOICE_DIAL = 0, 37 IMS_VIDEO_DIAL, 38 CS_VOICE_DIAL, 39 }; 40 41 enum class HangUpCallType { 42 IMS_VOICE_CALL = 0, 43 IMS_VIDEO_CALL, 44 CS_VOICE_CALL, 45 }; 46 47 enum class CallResponseResult { 48 COMMAND_FAILURE = 0, 49 COMMAND_SUCCESS, 50 }; 51 52 struct CallBehaviorParameterInfo { 53 int32_t slotId = 0; 54 int32_t callType = 0; 55 int32_t videoState = 0; 56 int32_t incomingCallType = 0; 57 int32_t incomingVideoState = 0; 58 }; 59 60 enum class CallModeBehaviorType { 61 SEND_REQUEST_EVENT = 0, 62 SEND_RESPONSE_EVENT, 63 RECEIVE_REQUEST_EVENT, 64 RECEIVE_RESPONSE_EVENT, 65 }; 66 67 struct CallForwardingInfo { 68 int32_t slotId = 0; 69 bool enable = false; 70 char number[maxNumberLen + 1] = { 0 }; 71 }; 72 73 class CellularCallHiSysEvent : public TelephonyHiSysEvent { 74 public: 75 static void WriteFoundationRestartFaultEvent(const int32_t count); 76 static void WriteCallEndBehaviorEvent(const int32_t slotId, const int32_t cause); 77 static void WriteDialCallBehaviorEvent(const CallBehaviorParameterInfo &info, const CallResponseResult &result); 78 static void WriteHangUpCallBehaviorEvent(const CallBehaviorParameterInfo &info, const CallResponseResult &result); 79 static void WriteAnswerCallBehaviorEvent(const CallBehaviorParameterInfo &info, const CallResponseResult &result); 80 static void WriteDialCallFaultEvent(const int32_t slotId, const int32_t callType, const int32_t videoState, 81 const int32_t errorCode, const std::string &desc); 82 static void WriteAnswerCallFaultEvent(const int32_t slotId, const int32_t callId, const int32_t videoState, 83 const int32_t errorCode, const std::string &desc); 84 static void WriteHangUpFaultEvent( 85 const int32_t slotId, const int32_t callId, const int32_t errorCode, const std::string &desc); 86 static void WriteIncomingCallFaultEvent(const int32_t slotId, const int32_t callType, const int32_t videoState, 87 const int32_t errCode, const std::string &desc); 88 static void WriteVoNRSwitchChangeEvent(const int32_t enable); 89 static void WriteImsCallModeBehaviorEvent( 90 const CallModeBehaviorType type, const CallBehaviorParameterInfo &info, const int32_t requestResult); 91 void SetCallParameterInfo(const int32_t slotId, const int32_t callType, const int32_t videoState); 92 void SetIncomingCallParameterInfo(const int32_t incomingCallType, const int32_t incomingVideoState); 93 void GetCallParameterInfo(CallBehaviorParameterInfo &info); 94 void SetIncomingStartTime(); 95 void JudgingIncomingTimeOut(const int32_t slotId, const int32_t callType, const int32_t videoState); 96 void SetCallForwardingInfo(const int32_t slotId, const bool enable, const std::string &number); 97 void GetCallForwardingInfo(CallForwardingInfo &info); 98 99 private: 100 template<typename... Types> 101 static void CallWriteEvent(const std::string &eventName, Types... args); 102 static int32_t ErrorCodeConversion(const int32_t errCode, CallErrorCode &eventValue); 103 static int32_t CallDataErrorCodeConversion(const int32_t errCode, CallErrorCode &eventValue); 104 static int32_t CallInterfaceErrorCodeConversion(const int32_t errCode, CallErrorCode &eventValue); 105 static int32_t TelephonyErrorCodeConversion(const int32_t errCode, CallErrorCode &eventValue); 106 107 private: 108 bool callForwardingEnable_ = false; 109 int32_t callForwardingSlotId_; 110 int32_t dfxSlotId_; 111 int32_t dfxCallId_; 112 int32_t dfxCallType_; 113 int32_t dfxVideoState_; 114 int32_t dfxIncomingCallType_; 115 int32_t dfxIncomingVideoState_; 116 int64_t incomingStartTime_ = 0L; 117 std::string callForwardingNumber_ = ""; 118 }; 119 } // namespace Telephony 120 } // namespace OHOS 121 122 #endif // CELLULAR_CALL_HISYSEVENT_H 123