1/* 2 * Copyright (c) 2023 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#include "location.h" 17 18#include "PreviewerEngineLog.h" 19#include "SharedData.h" 20#include "VirtualLocation.h" 21 22static const int32_t RES_OK = 0; 23static const int32_t RES_ERROR = -1; 24 25#ifdef __cplusplus 26#if __cplusplus 27extern "C" { 28#endif 29#endif /* __cplusplus */ 30 31const char* GetGeoLocationType(void) 32{ 33 return "gps"; 34} 35 36const char* GetSupportedGeoCoordTypes() 37{ 38 return "wgs84"; 39} 40 41int32_t GetGeoLocation(LocDataUpdateCallback callback, LocTimeoutCallback timeoutCallback, void *arg, uint32_t timeout) 42{ 43 (void)timeoutCallback; 44 (void)arg; 45 (void)timeout; 46 if (callback == nullptr) { 47 ELOG("callback is nullptr"); 48 return RES_ERROR; 49 } 50 callback(VirtualLocation::GetInstance().GetMockPointer(), VirtualLocation::GetInstance().GetMockLen()); 51 return RES_OK; 52} 53 54int32_t SubGeoLocation(LocDataUpdateCallback callback) 55{ 56 callback(VirtualLocation::GetInstance().GetMockPointer(), VirtualLocation::GetInstance().GetMockLen()); 57 VirtualLocation::GetInstance().SetCallBack(callback); 58 VirtualLocation::GetInstance().SetSubscribe(true); 59 return RES_OK; 60} 61 62void UnSubGeoLocation(LocDataUpdateCallback callback) 63{ 64 if (callback == VirtualLocation::GetInstance().GetCallBack()) { 65 VirtualLocation::GetInstance().SetSubscribe(false); 66 } 67} 68 69void DestroyGeoLocation(LocDataUpdateCallback callback) 70{ 71 VirtualLocation::GetInstance().SetCallBack(callback); 72 VirtualLocation::GetInstance().SetSubscribe(false); 73} 74 75int32_t SerializeLocData(const int8_t *rawData, uint32_t len, LocationData *result) 76{ 77 if (rawData != VirtualLocation::GetInstance().GetMockPointer()) { 78 ELOG("Serialize rawData invalid."); 79 return RES_ERROR; 80 } 81 82 if (len != VirtualLocation::GetInstance().GetMockLen()) { 83 ELOG("Serialize len invalid."); 84 return RES_ERROR; 85 } 86 87 if (result == nullptr) { 88 ELOG("result is nullptr."); 89 return RES_ERROR; 90 } 91 92 result->accuracy = VirtualLocation::GetInstance().GetAccuracy(); 93 result->latitude = SharedData<double>::GetData(SharedDataType::LATITUDE); 94 result->longitude = SharedData<double>::GetData(SharedDataType::LONGITUDE); 95 result->time = VirtualLocation::GetInstance().GetTime(); 96 return RES_OK; 97} 98 99#ifdef __cplusplus 100#if __cplusplus 101} 102#endif 103#endif /* __cplusplus */ 104