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#ifndef LOCATION_COMMON_UTILS_H 16#define LOCATION_COMMON_UTILS_H 17 18#include <atomic> 19#include <condition_variable> 20#include <mutex> 21#include <unistd.h> 22#include <string> 23 24#include "constant_definition.h" 25#include "iremote_object.h" 26#include "securec.h" 27#include "string_ex.h" 28#include "location_log.h" 29#include "location.h" 30#include "app_identity.h" 31 32namespace OHOS { 33namespace Location { 34const std::string GNSS_ABILITY = "gps"; 35const std::string NETWORK_ABILITY = "network"; 36const std::string PASSIVE_ABILITY = "passive"; 37const std::string FUSED_ABILITY = "fused"; 38const std::string GEO_ABILITY = "geo"; 39const std::string DEFAULT_ABILITY = "default"; 40 41const std::string LOCATION_DIR = "/data/service/el1/public/location/"; 42const std::string SWITCH_CONFIG_NAME = "location_switch"; 43const std::string PRIVACY_CONFIG_NAME = "location_privacy"; 44constexpr const char* NLP_SERVICE_NAME = "const.location.nlp_service_name"; 45constexpr const char* NLP_ABILITY_NAME = "const.location.nlp_ability_name"; 46constexpr const char* GEOCODE_SERVICE_NAME = "const.location.geocode_service_name"; 47constexpr const char* GEOCODE_ABILITY_NAME = "const.location.geocode_ability_name"; 48constexpr const char* SUPL_MODE_NAME = "const.location.supl_mode"; 49constexpr const char* EDM_POLICY_NAME = "persist.edm.location_policy"; 50constexpr const char* AGNSS_SERVER_ADDR = "const.location.agnss_server_addr"; 51constexpr const char* AGNSS_SERVER_PORT = "const.location.agnss_server_port"; 52constexpr const char* SETTINGS_BUNDLE_NAME = "const.location.settings_bundle_name"; 53 54constexpr const char* BUILD_INFO = "ro.build.characteristics"; 55const int SA_NUM = 3; 56const int DEFAULT_UID = 10001; 57const int SYSTEM_UID = 1000; 58static constexpr int MIN_INT_RANDOM = 10000; 59static constexpr int MAX_INT_RANDOM = 99999; 60 61const int EX_HAS_REPLY_HEADER = -128; 62const int REPLY_CODE_NO_EXCEPTION = 0; 63const int REPLY_CODE_EXCEPTION = -1; 64const int REPLY_CODE_MSG_UNPROCESSED = -2; 65const int REPLY_CODE_SWITCH_OFF_EXCEPTION = -3; 66const int REPLY_CODE_SECURITY_EXCEPTION = -4; 67const int REPLY_CODE_UNSUPPORT = -5; 68 69const int INPUT_ARRAY_LEN_MAX = 100; 70const int MAX_BUFF_SIZE = 100; 71 72const int EVENT_REGITERED_MAX_TRY_TIME = 30; 73const int EVENT_REGITERED_MAX_TRY_INTERVAL = 5000; 74 75const std::string DFT_EXCEPTION_EVENT = "GnssException"; 76const int DFT_IPC_CALLING_ERROR = 201; 77const int DFT_DAILY_LOCATION_REQUEST_COUNT = 220; 78const int DFT_DAILY_DISTRIBUTE_SESSION_COUNT = 221; 79const int MILLI_PER_SEC = 1000; 80const int MICRO_PER_MILLI = 1000; 81const int CONNECT_TIME_OUT = 10; 82const int DISCONNECT_TIME_OUT = 10; 83 84const char DEFAULT_STRING[] = "error"; 85const std::wstring DEFAULT_WSTRING = L"error"; 86const std::u16string DEFAULT_USTRING = u"error"; 87 88const double PI = 3.1415926; 89const double DEGREE_PI = 180.0; 90const double DIS_FROMLL_PARAMETER = 2; 91const double EARTH_RADIUS = 6378137.0; // earth semimajor axis (WGS84) (m) 92 93static constexpr double MIN_LATITUDE = -90.0; 94static constexpr double MAX_LATITUDE = 90.0; 95static constexpr double MIN_LONGITUDE = -180.0; 96static constexpr double MAX_LONGITUDE = 180.0; 97static constexpr double DEGREE_DOUBLE_PI = 360.0; 98static constexpr long LONG_TIME_INTERVAL = 24 * 60 * 60; 99static constexpr int32_t LOCATION_LOADSA_TIMEOUT_MS = 5000; 100 101static constexpr int LOCATOR_UID = 1021; 102static constexpr int MAXIMUM_INTERATION = 100; 103static constexpr int MAXIMUM_CACHE_LOCATIONS = 1000; 104static constexpr int MAXIMUM_LOCATING_REQUIRED_DATAS = 200; 105static constexpr int MAC_LEN = 6; 106static constexpr int DEFAULT_CODE = 0; 107static constexpr int MAX_TRANSITION_SIZE = 3; 108static constexpr int MAX_NOTIFICATION_REQUEST_LIST_SIZE = 3; 109 110#define CHK_PARCEL_RETURN_VALUE(ret) \ 111{ \ 112 if ((ret) != true) { \ 113 return false; \ 114 } \ 115} 116 117#define CHK_ERRORCODE_RETURN_VALUE(ret) \ 118{ \ 119 if ((ret) != ERRCODE_SUCCESS) { \ 120 return (ret); \ 121 } \ 122} 123 124enum class ServiceRunningState { 125 STATE_NOT_START, 126 STATE_RUNNING 127}; 128 129enum { 130 DISABLED = 0, 131 ENABLED = 1, 132 DEFAULT_SWITCH_STATE = 2 133}; 134 135enum { 136 SUCCESS = 0, 137 COMMON_ERROR = 98, 138 PARAM_IS_EMPTY = 99, 139 NOT_SUPPORTED = 100, 140 INPUT_PARAMS_ERROR = 101, 141 REVERSE_GEOCODE_ERROR, 142 GEOCODE_ERROR, 143 LOCATOR_ERROR, 144 LOCATION_SWITCH_ERROR, 145 LAST_KNOWN_LOCATION_ERROR, 146 LOCATION_REQUEST_TIMEOUT_ERROR, 147 QUERY_COUNTRY_CODE_ERROR, 148}; 149 150enum { 151 PERMISSION_REVOKED_OPER = 0, 152 PERMISSION_GRANTED_OPER = 1 153}; 154 155class CommonUtils { 156public: 157 static void WriteInterfaceToken(const std::u16string &descriptor, MessageParcel &data); 158 static int AbilityConvertToId(const std::string ability); 159 static std::u16string GetCapabilityToString(std::string ability, uint32_t capability); 160 static std::u16string GetCapability(std::string ability); 161 static OHOS::HiviewDFX::HiLogLabel GetLabel(std::string name); 162 static sptr<IRemoteObject> GetRemoteObject(int abilityId); 163 static sptr<IRemoteObject> GetRemoteObject(int abilityId, std::string deviceId); 164 static std::string InitDeviceId(); 165 static bool GetCurrentUserId(int &userId); 166 static std::string Str16ToStr8(std::u16string str); 167 static bool DoubleEqual(double a, double b); 168 static double CalDistance(const double lat1, const double lon1, const double lat2, const double lon2); 169 static double DoubleRandom(double min, double max); 170 static int IntRandom(int min, int max); 171 static bool GetBundleNameByUid(int32_t uid, std::string& bundleName); 172 static bool CheckAppInstalled(const std::string& bundleName); 173 static int64_t GetCurrentTime(); 174 static int64_t GetCurrentTimeStamp(); 175 static int64_t GetCurrentTimeStampMs(); 176 static std::vector<std::string> Split(std::string str, std::string pattern); 177 static errno_t GetMacArray(const std::string& strMac, uint8_t mac[MAC_LEN]); 178 static unsigned char ConvertStringToDigit(std::string str); 179 static bool GetStringParameter(const std::string& type, std::string& value); 180 static bool GetEdmPolicy(std::string& name); 181 static std::string GenerateUuid(); 182 static bool CheckAppForUser(int32_t uid); 183 static int64_t GetSinceBootTime(); 184 static bool GetAllUserId(std::vector<int>& activeIds); 185 static bool IsAppBelongCurrentAccount(AppIdentity &identity); 186}; 187 188class CountDownLatch { 189public: 190 CountDownLatch() 191 { 192 count_ = 0; 193 } 194 ~CountDownLatch() = default; 195 void Wait(int time); 196 void CountDown(); 197 int GetCount(); 198 void SetCount(int count); 199private: 200 std::mutex mutex_; 201 std::condition_variable condition_; 202 std::atomic<int> count_; 203}; 204} // namespace Location 205} // namespace OHOS 206#endif // COMMON_UTILS_H 207