17c804472Sopenharmony_ci/* 27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47c804472Sopenharmony_ci * you may not use this file except in compliance with the License. 57c804472Sopenharmony_ci * You may obtain a copy of the License at 67c804472Sopenharmony_ci * 77c804472Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87c804472Sopenharmony_ci * 97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c804472Sopenharmony_ci * See the License for the specific language governing permissions and 137c804472Sopenharmony_ci * limitations under the License. 147c804472Sopenharmony_ci */ 157c804472Sopenharmony_ci 167c804472Sopenharmony_ci#include "location.h" 177c804472Sopenharmony_ci 187c804472Sopenharmony_ci#include "PreviewerEngineLog.h" 197c804472Sopenharmony_ci#include "SharedData.h" 207c804472Sopenharmony_ci#include "VirtualLocation.h" 217c804472Sopenharmony_ci 227c804472Sopenharmony_cistatic const int32_t RES_OK = 0; 237c804472Sopenharmony_cistatic const int32_t RES_ERROR = -1; 247c804472Sopenharmony_ci 257c804472Sopenharmony_ci#ifdef __cplusplus 267c804472Sopenharmony_ci#if __cplusplus 277c804472Sopenharmony_ciextern "C" { 287c804472Sopenharmony_ci#endif 297c804472Sopenharmony_ci#endif /* __cplusplus */ 307c804472Sopenharmony_ci 317c804472Sopenharmony_ciconst char* GetGeoLocationType(void) 327c804472Sopenharmony_ci{ 337c804472Sopenharmony_ci return "gps"; 347c804472Sopenharmony_ci} 357c804472Sopenharmony_ci 367c804472Sopenharmony_ciconst char* GetSupportedGeoCoordTypes() 377c804472Sopenharmony_ci{ 387c804472Sopenharmony_ci return "wgs84"; 397c804472Sopenharmony_ci} 407c804472Sopenharmony_ci 417c804472Sopenharmony_ciint32_t GetGeoLocation(LocDataUpdateCallback callback, LocTimeoutCallback timeoutCallback, void *arg, uint32_t timeout) 427c804472Sopenharmony_ci{ 437c804472Sopenharmony_ci (void)timeoutCallback; 447c804472Sopenharmony_ci (void)arg; 457c804472Sopenharmony_ci (void)timeout; 467c804472Sopenharmony_ci if (callback == nullptr) { 477c804472Sopenharmony_ci ELOG("callback is nullptr"); 487c804472Sopenharmony_ci return RES_ERROR; 497c804472Sopenharmony_ci } 507c804472Sopenharmony_ci callback(VirtualLocation::GetInstance().GetMockPointer(), VirtualLocation::GetInstance().GetMockLen()); 517c804472Sopenharmony_ci return RES_OK; 527c804472Sopenharmony_ci} 537c804472Sopenharmony_ci 547c804472Sopenharmony_ciint32_t SubGeoLocation(LocDataUpdateCallback callback) 557c804472Sopenharmony_ci{ 567c804472Sopenharmony_ci callback(VirtualLocation::GetInstance().GetMockPointer(), VirtualLocation::GetInstance().GetMockLen()); 577c804472Sopenharmony_ci VirtualLocation::GetInstance().SetCallBack(callback); 587c804472Sopenharmony_ci VirtualLocation::GetInstance().SetSubscribe(true); 597c804472Sopenharmony_ci return RES_OK; 607c804472Sopenharmony_ci} 617c804472Sopenharmony_ci 627c804472Sopenharmony_civoid UnSubGeoLocation(LocDataUpdateCallback callback) 637c804472Sopenharmony_ci{ 647c804472Sopenharmony_ci if (callback == VirtualLocation::GetInstance().GetCallBack()) { 657c804472Sopenharmony_ci VirtualLocation::GetInstance().SetSubscribe(false); 667c804472Sopenharmony_ci } 677c804472Sopenharmony_ci} 687c804472Sopenharmony_ci 697c804472Sopenharmony_civoid DestroyGeoLocation(LocDataUpdateCallback callback) 707c804472Sopenharmony_ci{ 717c804472Sopenharmony_ci VirtualLocation::GetInstance().SetCallBack(callback); 727c804472Sopenharmony_ci VirtualLocation::GetInstance().SetSubscribe(false); 737c804472Sopenharmony_ci} 747c804472Sopenharmony_ci 757c804472Sopenharmony_ciint32_t SerializeLocData(const int8_t *rawData, uint32_t len, LocationData *result) 767c804472Sopenharmony_ci{ 777c804472Sopenharmony_ci if (rawData != VirtualLocation::GetInstance().GetMockPointer()) { 787c804472Sopenharmony_ci ELOG("Serialize rawData invalid."); 797c804472Sopenharmony_ci return RES_ERROR; 807c804472Sopenharmony_ci } 817c804472Sopenharmony_ci 827c804472Sopenharmony_ci if (len != VirtualLocation::GetInstance().GetMockLen()) { 837c804472Sopenharmony_ci ELOG("Serialize len invalid."); 847c804472Sopenharmony_ci return RES_ERROR; 857c804472Sopenharmony_ci } 867c804472Sopenharmony_ci 877c804472Sopenharmony_ci if (result == nullptr) { 887c804472Sopenharmony_ci ELOG("result is nullptr."); 897c804472Sopenharmony_ci return RES_ERROR; 907c804472Sopenharmony_ci } 917c804472Sopenharmony_ci 927c804472Sopenharmony_ci result->accuracy = VirtualLocation::GetInstance().GetAccuracy(); 937c804472Sopenharmony_ci result->latitude = SharedData<double>::GetData(SharedDataType::LATITUDE); 947c804472Sopenharmony_ci result->longitude = SharedData<double>::GetData(SharedDataType::LONGITUDE); 957c804472Sopenharmony_ci result->time = VirtualLocation::GetInstance().GetTime(); 967c804472Sopenharmony_ci return RES_OK; 977c804472Sopenharmony_ci} 987c804472Sopenharmony_ci 997c804472Sopenharmony_ci#ifdef __cplusplus 1007c804472Sopenharmony_ci#if __cplusplus 1017c804472Sopenharmony_ci} 1027c804472Sopenharmony_ci#endif 1037c804472Sopenharmony_ci#endif /* __cplusplus */ 104