• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "VirtualLocation.h"
17 
18 #include <chrono>
19 #include <cmath>
20 #include <cstdlib>
21 
22 #include "PreviewerEngineLog.h"
23 #include "SharedData.h"
24 #include "SharedDataManager.h"
25 
GetInstance()26 VirtualLocation& VirtualLocation::GetInstance()
27 {
28     static VirtualLocation stance;
29     return stance;
30 }
31 
GetMockPointer() const32 const int8_t* VirtualLocation::GetMockPointer() const
33 {
34     return mockPointer;
35 }
36 
GetMockLen() const37 uint32_t VirtualLocation::GetMockLen() const
38 {
39     return mockLen;
40 }
41 
SetCallBack(LocDataUpdateCallback func)42 void VirtualLocation::SetCallBack(LocDataUpdateCallback func)
43 {
44     callBack = func;
45 }
46 
SetSubscribe(bool value)47 void VirtualLocation::SetSubscribe(bool value)
48 {
49     isSubsribe = value;
50 }
51 
IsSubscribe() const52 bool VirtualLocation::IsSubscribe() const
53 {
54     return isSubsribe;
55 }
56 
GetCallBack() const57 LocDataUpdateCallback VirtualLocation::GetCallBack() const
58 {
59     return callBack;
60 }
61 
ExecCallBack() const62 void VirtualLocation::ExecCallBack() const
63 {
64     if (callBack != nullptr && isSubsribe) {
65         callBack(mockPointer, mockLen);
66     }
67 }
68 
VirtualLocation()69 VirtualLocation::VirtualLocation()
70     : isSubsribe(false),
71       longitudeChecked(0),
72       latitudeChecked(0),
73       accuracy(0),
74       mockPointer(nullptr),
75       mockLen(1),
76       callBack(nullptr)
77 {
78     accuracy = LOCATION_ACCURACY;
79     InitMockPointer();
80 }
81 
~VirtualLocation()82 VirtualLocation::~VirtualLocation()
83 {
84     if (mockPointer != nullptr) {
85         delete mockPointer;
86         mockPointer = nullptr;
87     }
88 }
89 
InitMockPointer()90 void VirtualLocation::InitMockPointer()
91 {
92     mockPointer = new int8_t;
93     if (mockPointer == nullptr) {
94         FLOG("VirtualLocation::InitMockPointer mockPointer memory allocation failed");
95     }
96 }
97 
GetTime() const98 uint64_t VirtualLocation::GetTime() const
99 {
100     time_t curTime = time(nullptr);
101     if (curTime < 0) {
102         return 0;
103     }
104     return static_cast<uint64_t>(curTime);
105 }
106 
GetAccuracy() const107 float VirtualLocation::GetAccuracy() const
108 {
109     return accuracy;
110 }
111 
IsPostionChanged()112 bool VirtualLocation::IsPostionChanged()
113 {
114     double longitude = SharedData<double>::GetData(SharedDataType::LONGITUDE);
115     double latitude = SharedData<double>::GetData(SharedDataType::LATITUDE);
116     if (std::abs(longitude - longitudeChecked) < pow(PRECISION_BASE_NUMBER, -SharedDataManager::POSITIONPRECISION) &&
117         std::abs(latitude - latitudeChecked) < pow(PRECISION_BASE_NUMBER, -SharedDataManager::POSITIONPRECISION)) {
118         return false;
119     }
120     longitudeChecked = longitude;
121     latitudeChecked = latitude;
122     return true;
123 }
124