• 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 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