• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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