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 static const int32_t RES_OK = 0;
23 static const int32_t RES_ERROR = -1;
24
25 #ifdef __cplusplus
26 #if __cplusplus
27 extern "C" {
28 #endif
29 #endif /* __cplusplus */
30
GetGeoLocationType(void)31 const char* GetGeoLocationType(void)
32 {
33 return "gps";
34 }
35
GetSupportedGeoCoordTypes()36 const char* GetSupportedGeoCoordTypes()
37 {
38 return "wgs84";
39 }
40
GetGeoLocation(LocDataUpdateCallback callback,LocTimeoutCallback timeoutCallback,void * arg,uint32_t timeout)41 int32_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
SubGeoLocation(LocDataUpdateCallback callback)54 int32_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
UnSubGeoLocation(LocDataUpdateCallback callback)62 void UnSubGeoLocation(LocDataUpdateCallback callback)
63 {
64 if (callback == VirtualLocation::GetInstance().GetCallBack()) {
65 VirtualLocation::GetInstance().SetSubscribe(false);
66 }
67 }
68
DestroyGeoLocation(LocDataUpdateCallback callback)69 void DestroyGeoLocation(LocDataUpdateCallback callback)
70 {
71 VirtualLocation::GetInstance().SetCallBack(callback);
72 VirtualLocation::GetInstance().SetSubscribe(false);
73 }
74
SerializeLocData(const int8_t * rawData,uint32_t len,LocationData * result)75 int32_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