1 /* 2 * Copyright (c) 2024 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 OHOS_AVSESSION_RADAR_H 17 #define OHOS_AVSESSION_RADAR_H 18 19 #include "radar_constants.h" 20 #include "element_name.h" 21 #include <nlohmann/json.hpp> 22 #include <string> 23 #include <algorithm> 24 #include "avsession_descriptor.h" 25 #include "bundle_mgr_proxy.h" 26 #include "bundle_status_callback_host.h" 27 #include "iservice_registry.h" 28 29 namespace OHOS::AVSession { 30 struct AVSessionRadarInfo { 31 int32_t bizScene_ { 0 }; 32 int32_t bizStage_ { 0 }; 33 int32_t stageRes_ { 0 }; 34 int32_t bizState_ { 0 }; 35 int32_t triggerMode_ { 0 }; 36 int32_t errorCode_ { 0 }; 37 int32_t isTrust_ { static_cast<int32_t>(TrustStatus::UNKOWN) }; 38 std::string hostPkg_; 39 std::string toCallPkg_ { CAST_ENGINE_PKG }; 40 std::string func_; 41 std::string discoveryDeviceList_; 42 std::string peerUdid_; 43 std::string peerBtMac_; 44 std::string peerNetId_; 45 std::string peerDevType_; 46 std::string localSessName_; 47 std::string peerSessName_; 48 std::string bundleName_; AVSessionRadarInfoAVSessionRadarInfo49 explicit AVSessionRadarInfo(std::string funcName) : func_(funcName) {} CheckTriggerModeAVSessionRadarInfo50 void CheckTriggerMode() 51 { 52 if (bundleName_.empty()) { 53 triggerMode_ = static_cast<int32_t>(TriggerMode::UNKNOWN); 54 return; 55 } 56 triggerMode_ = (bundleName_.find(MEDIA_CONTROL_PKG) == std::string::npos) ? 57 static_cast<int32_t>(TriggerMode::APPLICATION) : 58 static_cast<int32_t>(TriggerMode::MEDIA_CONTROL); 59 } 60 }; 61 62 class AVSessionRadar { 63 public: 64 static AVSessionRadar &GetInstance(); 65 static std::string GetAnonymousDeviceId(std::string deviceId); 66 static int32_t GetRadarErrorCode(int32_t err); 67 void InitBMS(); 68 void GetJsonCastDeviceList(const OutputDeviceInfo &deviceInfo, std::string& deviceList); 69 void GetPeerInfo(const OutputDeviceInfo &outputDeviceInfo, AVSessionRadarInfo &info); 70 void GetPeerInfoFromDeviceInfo(const DeviceInfo &deviceInfo, AVSessionRadarInfo &info); 71 72 void StartCastDiscoveryBegin(AVSessionRadarInfo &info); 73 void StartCastDiscoveryEnd(AVSessionRadarInfo &info); 74 void FailToStartCastDiscovery(AVSessionRadarInfo &info); 75 76 void CastDeviceAvailable(const OutputDeviceInfo &castOutputDeviceInfo, AVSessionRadarInfo &info); 77 78 void StopCastDiscoveryBegin(AVSessionRadarInfo &info); 79 void StopCastDiscoveryEnd(AVSessionRadarInfo &info); 80 void FailToStopCastDiscovery(AVSessionRadarInfo &info); 81 82 void StartCastBegin(const OutputDeviceInfo& outputDeviceInfo, AVSessionRadarInfo &info); 83 void StartCastEnd(const OutputDeviceInfo& outputDeviceInfo, AVSessionRadarInfo &info); 84 void FailToStartCast(AVSessionRadarInfo &info); 85 void FailToStartCast(const OutputDeviceInfo& outputDeviceInfo, AVSessionRadarInfo &info); 86 void StartConnect(AVSessionRadarInfo &info); 87 void ConnectFinish(const DeviceInfo &deviceInfo, AVSessionRadarInfo &info); 88 89 void StartPlayBegin(AVSessionRadarInfo &info); 90 void StartPlayEnd(AVSessionRadarInfo &info); 91 void StartPlayFailed(AVSessionRadarInfo &info); 92 void PlayerStarted(AVSessionRadarInfo &info); 93 94 void SendControlCommandBegin(AVSessionRadarInfo &info); 95 void SendControlCommandEnd(AVSessionRadarInfo &info); 96 void FailToSendControlCommand(AVSessionRadarInfo &info); 97 void ControlCommandRespond(AVSessionRadarInfo &info); 98 void ControlCommandError(AVSessionRadarInfo &info); 99 100 void StopCastBegin(const OutputDeviceInfo& outputDeviceInfo, AVSessionRadarInfo &info); 101 void StopCastEnd(const OutputDeviceInfo& outputDeviceInfo, AVSessionRadarInfo &info); 102 void StopCastFinish(const DeviceInfo &deviceInfo, AVSessionRadarInfo &info); 103 void FailToStopCast(AVSessionRadarInfo &info); 104 void FailToStopCast(const OutputDeviceInfo &outputDeviceInfo, AVSessionRadarInfo &info); 105 106 void reset(); 107 108 private: 109 AVSessionRadar() = default; 110 ~AVSessionRadar() = default; 111 std::string GetLocalDeviceNetworkId(); 112 std::string GetUdidByNetworkId(const std::string &networkId); 113 void ReportWithTrustInfo(AVSessionRadarInfo &info); 114 void ReportWithoutTrustInfo(AVSessionRadarInfo &info); 115 void ReportHiSysEventBehavior(AVSessionRadarInfo &info); 116 std::string ConvertHexToString(int32_t hex); 117 std::string GetLocalDevType(); 118 std::string GetBundleNameFromUid(int32_t uid); 119 120 private: 121 std::string orgPkg_ { AVSESSION_PKG_NAME }; 122 std::string localUdid_; 123 std::string localNetId_; 124 std::string localDevType_; 125 sptr<AppExecFwk::BundleMgrProxy> bundleMgrProxy_; 126 }; 127 } // namespace OHOS::AVSession 128 #endif // OHOS_AVSESSION_RADAR_H