1 /*
2 * Copyright (c) 2022 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 "gnss_event_callback.h"
17 #include <singleton.h>
18 #include "ipc_skeleton.h"
19 #include "common_utils.h"
20 #include "gnss_ability.h"
21 #include "location_log.h"
22 #include "locator_ability.h"
23
24 namespace OHOS {
25 namespace Location {
26 using namespace OHOS::HiviewDFX;
27
ReportLocation(const LocationInfo & location)28 int32_t GnssEventCallback::ReportLocation(const LocationInfo& location)
29 {
30 auto gnssAbility = DelayedSingleton<GnssAbility>::GetInstance();
31 auto locatorAbility = DelayedSingleton<LocatorAbility>::GetInstance();
32 if (gnssAbility == nullptr ||locatorAbility == nullptr) {
33 LBSLOGE(GNSS, "ReportLocation: gnss ability or locator ability is nullptr.");
34 return ERR_OK;
35 }
36 std::string identity = IPCSkeleton::ResetCallingIdentity();
37 std::unique_ptr<Location> locationNew = std::make_unique<Location>();
38 locationNew->SetLatitude(location.latitude);
39 locationNew->SetLongitude(location.longitude);
40 locationNew->SetAltitude(location.altitude);
41 locationNew->SetAccuracy(location.accuracy);
42 locationNew->SetSpeed(location.speed);
43 locationNew->SetDirection(location.direction);
44 locationNew->SetTimeStamp(location.timeStamp);
45 locationNew->SetTimeSinceBoot(location.timeSinceBoot);
46 locationNew->SetIsFromMock(false);
47 if (gnssAbility->IsMockEnabled()) {
48 LBSLOGE(GNSS, "location mock is enabled, do not report gnss location!");
49 IPCSkeleton::SetCallingIdentity(identity);
50 return ERR_OK;
51 }
52 locatorAbility.get()->ReportLocation(locationNew, GNSS_ABILITY);
53 locatorAbility.get()->ReportLocation(locationNew, PASSIVE_ABILITY);
54 IPCSkeleton::SetCallingIdentity(identity);
55 return ERR_OK;
56 }
57
ReportGnssWorkingStatus(GnssWorkingStatus status)58 int32_t GnssEventCallback::ReportGnssWorkingStatus(GnssWorkingStatus status)
59 {
60 auto gnssAbility = DelayedSingleton<GnssAbility>::GetInstance();
61 if (gnssAbility == nullptr) {
62 LBSLOGE(GNSS, "ReportGnssWorkingStatus: gnss ability is nullptr.");
63 return ERR_OK;
64 }
65 gnssAbility.get()->ReportGnssSessionStatus(static_cast<int>(status));
66 return ERR_OK;
67 }
68
ReportNmea(int64_t timestamp,const std::string & nmea,int32_t length)69 int32_t GnssEventCallback::ReportNmea(int64_t timestamp, const std::string& nmea, int32_t length)
70 {
71 auto gnssAbility = DelayedSingleton<GnssAbility>::GetInstance();
72 if (gnssAbility == nullptr) {
73 LBSLOGE(GNSS, "ReportNmea: gnss ability is nullptr.");
74 return ERR_OK;
75 }
76 std::string nmeaStr = nmea;
77 gnssAbility.get()->ReportNmea(timestamp, nmeaStr);
78 return ERR_OK;
79 }
80
ReportGnssCapabilities(GnssCapabilities capabilities)81 int32_t GnssEventCallback::ReportGnssCapabilities(GnssCapabilities capabilities)
82 {
83 return ERR_OK;
84 }
85
ReportSatelliteStatusInfo(const SatelliteStatusInfo & info)86 int32_t GnssEventCallback::ReportSatelliteStatusInfo(const SatelliteStatusInfo& info)
87 {
88 auto gnssAbility = DelayedSingleton<GnssAbility>::GetInstance();
89 if (gnssAbility == nullptr) {
90 LBSLOGE(GNSS, "ReportSatelliteStatusInfo: gnss ability is nullptr.");
91 return ERR_OK;
92 }
93 std::unique_ptr<SatelliteStatus> svStatus = std::make_unique<SatelliteStatus>();
94 if (info.satellitesNumber <= 0) {
95 LBSLOGD(GNSS, "SvStatusCallback, satellites_num <= 0!");
96 return ERR_INVALID_VALUE;
97 }
98
99 svStatus->SetSatellitesNumber(info.satellitesNumber);
100 for (unsigned int i = 0; i < info.satellitesNumber; i++) {
101 svStatus->SetAltitude(info.elevation[i]);
102 svStatus->SetAzimuth(info.azimuths[i]);
103 svStatus->SetCarrierFrequencie(info.carrierFrequencies[i]);
104 svStatus->SetCarrierToNoiseDensity(info.carrierToNoiseDensitys[i]);
105 svStatus->SetSatelliteId(info.satelliteIds[i]);
106 }
107 gnssAbility.get()->ReportSv(svStatus);
108 return ERR_OK;
109 }
110
RequestGnssReferenceInfo(GnssRefInfoType type)111 int32_t GnssEventCallback::RequestGnssReferenceInfo(GnssRefInfoType type)
112 {
113 return ERR_OK;
114 }
115
RequestPredictGnssData()116 int32_t GnssEventCallback::RequestPredictGnssData()
117 {
118 return ERR_OK;
119 }
120
ReportCachedLocation(const std::vector<LocationInfo> & gnssLocations)121 int32_t GnssEventCallback::ReportCachedLocation(const std::vector<LocationInfo>& gnssLocations)
122 {
123 return ERR_OK;
124 }
125 } // namespace Location
126 } // namespace OHOS