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 23namespace OHOS { 24namespace Telephony { 25static const int64_t NORMAL_INCOMING_TIME = 500; // incoming time (ms) 26static const int16_t maxNumberLen = 100; 27 28enum 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 35enum class DialCallType { 36 IMS_VOICE_DIAL = 0, 37 IMS_VIDEO_DIAL, 38 CS_VOICE_DIAL, 39}; 40 41enum class HangUpCallType { 42 IMS_VOICE_CALL = 0, 43 IMS_VIDEO_CALL, 44 CS_VOICE_CALL, 45}; 46 47enum class CallResponseResult { 48 COMMAND_FAILURE = 0, 49 COMMAND_SUCCESS, 50}; 51 52struct 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 60enum class CallModeBehaviorType { 61 SEND_REQUEST_EVENT = 0, 62 SEND_RESPONSE_EVENT, 63 RECEIVE_REQUEST_EVENT, 64 RECEIVE_RESPONSE_EVENT, 65}; 66 67struct CallForwardingInfo { 68 int32_t slotId = 0; 69 bool enable = false; 70 char number[maxNumberLen + 1] = { 0 }; 71}; 72 73class CellularCallHiSysEvent : public TelephonyHiSysEvent { 74public: 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 99private: 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 107private: 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