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