xref: /ide/tools/previewer/mock/lite/GeoLocation.cpp (revision 7c804472)
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
22static const int32_t RES_OK = 0;
23static const int32_t RES_ERROR = -1;
24
25#ifdef __cplusplus
26#if __cplusplus
27extern "C" {
28#endif
29#endif /* __cplusplus */
30
31const char* GetGeoLocationType(void)
32{
33    return "gps";
34}
35
36const char* GetSupportedGeoCoordTypes()
37{
38    return "wgs84";
39}
40
41int32_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
54int32_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
62void UnSubGeoLocation(LocDataUpdateCallback callback)
63{
64    if (callback == VirtualLocation::GetInstance().GetCallBack()) {
65        VirtualLocation::GetInstance().SetSubscribe(false);
66    }
67}
68
69void DestroyGeoLocation(LocDataUpdateCallback callback)
70{
71    VirtualLocation::GetInstance().SetCallBack(callback);
72    VirtualLocation::GetInstance().SetSubscribe(false);
73}
74
75int32_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