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 GEOLOCATIONMANAGER_UTILS_H 17 #define GEOLOCATIONMANAGER_UTILS_H 18 19 #include <cstdint> 20 #include <functional> 21 #include <string> 22 #include <vector> 23 #include "location.h" 24 #include "location_napi_event.h" 25 #include "napi_util.h" 26 27 const int32_t ERRCODE_MEMORY_ERROR = -1; 28 29 namespace OHOS { 30 namespace GeoLocationManager { 31 struct CMapStringString { 32 char** keys; 33 char** values; 34 }; 35 36 struct CJLocation { 37 double latitude; 38 double longitude; 39 double altitude; 40 double accuracy; 41 double speed; 42 double direction; 43 int64_t timeStamp; 44 int64_t timeSinceBoot; 45 char** additions; 46 int64_t additionSize; 47 CMapStringString additionsMap; 48 double altitudeAccuracy; 49 double speedAccuracy; 50 double directionAccuracy; 51 int64_t uncertaintyOfTimeSinceBoot; 52 int32_t sourceType; 53 }; 54 55 struct CJCurrentLocationRequest { 56 int32_t priority; 57 int32_t scenario; 58 float maxAccuracy; 59 int32_t timeoutMs; 60 }; 61 62 struct CJSingleLocationRequest { 63 int32_t locatingPriority; 64 int32_t locatingTimeoutMs; 65 }; 66 67 struct CJReverseGeocodeRequest { 68 char* locale; 69 char* country; 70 double latitude; 71 double longitude; 72 int32_t maxItems; 73 }; 74 75 struct CJLocationCommand { 76 int32_t scenario; 77 char* command; 78 }; 79 80 struct CJCountryCode { 81 char* country; 82 int32_t type; 83 }; 84 85 struct CJReverseGeoCodeRequest { 86 char* locale; 87 char* country; 88 double latitude; 89 double longitude; 90 int32_t maxItems; 91 }; 92 93 struct CJGeoCodeRequest { 94 char* locale; 95 char* country; 96 char* description; 97 int32_t maxItems; 98 double minLatitude; 99 double minLongitude; 100 double maxLatitude; 101 double maxLongitude; 102 }; 103 104 105 struct CJGeoAddress { 106 double latitude; 107 double longitude; 108 char* locale; 109 char* placeName; 110 char* countryCode; 111 char* countryName; 112 char* administrativeArea; 113 char* subAdministrativeArea; 114 char* locality; 115 char* subLocality; 116 char* roadName; 117 char* subRoadName; 118 char* premises; 119 char* postalCode; 120 char* phoneNumber; 121 char* addressUrl; 122 char** descriptions; 123 int descriptionsSize; 124 }; 125 126 struct CJGeoAddressArr { 127 CJGeoAddress* head; 128 int64_t size; 129 }; 130 131 enum CallbackType { 132 locationChange = 0 133 }; 134 135 struct CJLocationRequest { 136 int32_t priority; 137 int32_t scenario; 138 int32_t timeInterval; 139 double distanceInterval; 140 float maxAccuracy; 141 }; 142 143 struct CJContinuousLocationRequest { 144 int32_t interval; 145 int32_t locationScenario; 146 }; 147 148 struct CJCachedGnssLocationsRequest { 149 int32_t reportingPeriodSec; 150 bool wakeUpCacheQueueFull; 151 }; 152 153 struct CJLocationArr { 154 CJLocation* head; 155 int64_t size; 156 }; 157 158 struct CArrI32 { 159 int32_t* head; 160 int64_t size; 161 }; 162 163 struct CArrF64 { 164 double* head; 165 int64_t size; 166 }; 167 168 struct CJSatelliteStatusInfo { 169 int32_t satellitesNumber; 170 CArrI32 satelliteIds; 171 CArrF64 carrierToNoiseDensitys; 172 CArrF64 altitudes; 173 CArrF64 azimuths; 174 CArrF64 carrierFrequencies; 175 CArrI32 constellationTypes; 176 CArrI32 additionalInfoList; 177 }; 178 179 char* MallocCString(const std::string& origin); 180 181 char** StringVectorToCPointer(const std::vector<std::string>& arr); 182 183 CMapStringString MapToCMapStringString(const std::map<std::string, std::string>& map); 184 185 CJLocation NativeLocationToCJLocation(const Location::Location& loc); 186 187 void CJCurrentLocationRequestToRequestConfig(const CJCurrentLocationRequest& request, 188 std::unique_ptr<Location::RequestConfig>& requestConfig); 189 190 void CJSingleLocationRequestRequestToRequestConfig(const CJSingleLocationRequest& request, 191 std::unique_ptr<Location::RequestConfig>& requestConfig); 192 193 bool CJReverseGeoCodeRequestToMessageParcel(CJReverseGeoCodeRequest& request, MessageParcel& dataParcel); 194 195 CJGeoAddressArr ListGeoAddressToCJGeoAddressArr(std::list<std::shared_ptr<Location::GeoAddress>>& replyList); 196 197 bool CJGeoCodeRequestToMessageParcel(CJGeoCodeRequest& request, MessageParcel& dataParcel); 198 199 void CJLocationRequestToRequestConfig(CJLocationRequest& request, 200 std::unique_ptr<Location::RequestConfig>& requestConfig); 201 202 void CJContinuousLocationRequestToRequestConfig(CJContinuousLocationRequest request, 203 std::unique_ptr<Location::RequestConfig>& requestConfig); 204 205 CJLocationArr LocationVectorToCJLocationArr(const std::vector<std::unique_ptr<Location::Location>>& locations); 206 207 void CJCachedGnssLocationsRequestToCachedLocationRequest(CJCachedGnssLocationsRequest& request, 208 std::unique_ptr<Location::CachedGnssLocationsRequest>& requestConfig); 209 210 CArrI32 IntVectorToCArrI32(std::vector<int> arr); 211 212 CArrF64 DoubleVectorToCArrF64(std::vector<double> arr); 213 214 CJSatelliteStatusInfo SatelliteStatusInfoToCJSatelliteStatus(const std::unique_ptr<Location::SatelliteStatus>& 215 statusInfo); 216 217 CJCountryCode CountryCodeToCJCountryCode(const std::shared_ptr<Location::CountryCode>& country); 218 } 219 } 220 221 #endif // GEOLOCATIONMANAGER_UTILS_H