1 /*
2  * Copyright (c) 2020, The Linux Foundation. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *     * Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *     * Redistributions in binary form must reproduce the above
10  *       copyright notice, this list of conditions and the following
11  *       disclaimer in the documentation and/or other materials provided
12  *       with the distribution.
13  *     * Neither the name of The Linux Foundation nor the names of its
14  *       contributors may be used to endorse or promote products derived
15  *       from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #ifndef ANDROID_HARDWARE_GNSS_V1_1_MeasurementCorrections_H
31 #define ANDROID_HARDWARE_GNSS_V1_1_MeasurementCorrections_H
32 
33 #include <android/hardware/gnss/measurement_corrections/1.1/IMeasurementCorrections.h>
34 #include <android/hardware/gnss/measurement_corrections/1.0/IMeasurementCorrectionsCallback.h>
35 #include <hidl/MQDescriptor.h>
36 #include <hidl/Status.h>
37 
38 #include <gps_extended_c.h>
39 #include <location_interface.h>
40 #include "Gnss.h"
41 #include <LocationUtil.h>
42 
43 namespace android {
44 namespace hardware {
45 namespace gnss {
46 namespace measurement_corrections {
47 namespace V1_1 {
48 namespace implementation {
49 
50 using ::android::hardware::hidl_array;
51 using ::android::hardware::hidl_memory;
52 using ::android::hardware::hidl_string;
53 using ::android::hardware::hidl_vec;
54 using ::android::hardware::Return;
55 using ::android::hardware::Void;
56 using ::android::sp;
57 using ::android::hardware::gnss::V1_0::GnssLocation;
58 using ::android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrectionsCallback;
59 using ::android::hardware::gnss::V2_1::implementation::Gnss;
60 using MeasurementCorrectionsV1_0 =
61         ::android::hardware::gnss::measurement_corrections::V1_0::MeasurementCorrections;
62 using MeasurementCorrectionsV1_1 =
63         ::android::hardware::gnss::measurement_corrections::V1_1::MeasurementCorrections;
64 
65 struct MeasurementCorrections : public V1_1::IMeasurementCorrections {
66     MeasurementCorrections(Gnss* gnss);
67     ~MeasurementCorrections();
68 
69     Return<bool> setCorrections(const MeasurementCorrectionsV1_0& corrections) override;
70 
71     // Methods from
72     // ::android::hardware::gnss::measurement_corrections::V1_1::IMeasurementCorrections follow.
73     Return<bool> setCorrections_1_1(const MeasurementCorrectionsV1_1& corrections);
74 
75     Return<bool> setCallback(const sp<IMeasurementCorrectionsCallback>& callback) override;
76 
77     void setCapabilitiesCb(GnssMeasurementCorrectionsCapabilitiesMask capabilities);
78 
79     /* Data call setup callback passed down to GNSS HAL implementation */
80     static void measCorrSetCapabilitiesCb(GnssMeasurementCorrectionsCapabilitiesMask capabilities);
81 
82 private:
83     struct GnssMeasurementCorrectionsDeathRecipient : hidl_death_recipient {
GnssMeasurementCorrectionsDeathRecipientMeasurementCorrections::GnssMeasurementCorrectionsDeathRecipient84         GnssMeasurementCorrectionsDeathRecipient(
85             sp<MeasurementCorrections> gnssMeasurementCorrections) :
86                     mGnssMeasurementCorrections(gnssMeasurementCorrections) {
87         }
88         ~GnssMeasurementCorrectionsDeathRecipient() = default;
89         virtual void serviceDied(uint64_t cookie, const wp<IBase>& who) override;
90         sp<MeasurementCorrections> mGnssMeasurementCorrections;
91     };
92     Gnss* mGnss = nullptr;
93     sp<GnssMeasurementCorrectionsDeathRecipient> mGnssMeasurementCorrectionsDeathRecipient =
94             nullptr;
95     sp<IMeasurementCorrectionsCallback> mMeasurementCorrectionsCbIface = nullptr;
96 };
97 
98 
99 }  // namespace implementation
100 }  // namespace V1_1
101 }  // namespace measurement_corrections
102 }  // namespace gnss
103 }  // namespace hardware
104 }  // namespace android
105 
106 #endif  // ANDROID_HARDWARE_GNSS_V1_1_MeasurementCorrections_H
107