1b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/*
2b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Copyright (c) 2017, The Linux Foundation. All rights reserved.
3b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Not a Contribution
4b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */
5b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/*
6b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Copyright (C) 2016 The Android Open Source Project
7b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel *
8b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Licensed under the Apache License, Version 2.0 (the "License");
9b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * you may not use this file except in compliance with the License.
10b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * You may obtain a copy of the License at
11b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel *
12b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel *      http://www.apache.org/licenses/LICENSE-2.0
13b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel *
14b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Unless required by applicable law or agreed to in writing, software
15b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * distributed under the License is distributed on an "AS IS" BASIS,
16b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * See the License for the specific language governing permissions and
18b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * limitations under the License.
19b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */
20b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
21b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define LOG_TAG "LocSvc_GnssNiInterface"
22b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
23b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <log_util.h>
24b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include "Gnss.h"
25b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include "GnssNi.h"
26b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
27b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace android {
28b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace hardware {
29b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace gnss {
30b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace V1_0 {
31b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace implementation {
32b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
33b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelvoid GnssNi::GnssNiDeathRecipient::serviceDied(uint64_t cookie, const wp<IBase>& who) {
34b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    LOC_LOGE("%s] service died. cookie: %llu, who: %p",
35b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel            __FUNCTION__, static_cast<unsigned long long>(cookie), &who);
36b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    // we do nothing here
37b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    // Gnss::GnssDeathRecipient will stop the session
38b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}
39b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
40b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry StrudelGnssNi::GnssNi(Gnss* gnss) : mGnss(gnss) {
41b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    mGnssNiDeathRecipient = new GnssNiDeathRecipient(this);
42b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}
43b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
44b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel// Methods from ::android::hardware::gnss::V1_0::IGnssNi follow.
45b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry StrudelReturn<void> GnssNi::setCallback(const sp<IGnssNiCallback>& callback)  {
46b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    if (mGnss == nullptr) {
47b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
48b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        return Void();
49b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    }
50b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
51b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    mGnss->setGnssNiCb(callback);
52b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
53b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    if (mGnssNiCbIface != nullptr) {
54b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        mGnssNiCbIface->unlinkToDeath(mGnssNiDeathRecipient);
55b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    }
56b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    mGnssNiCbIface = callback;
57b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    if (mGnssNiCbIface != nullptr) {
58b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        mGnssNiCbIface->linkToDeath(mGnssNiDeathRecipient, 0 /*cookie*/);
59b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    }
60b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
61b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    return Void();
62b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}
63b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
64b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry StrudelReturn<void> GnssNi::respond(int32_t notifId, IGnssNiCallback::GnssUserResponseType userResponse)  {
65b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    if (mGnss == nullptr) {
66b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
67b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        return Void();
68b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    }
69b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
70b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    GnssAPIClient* api = mGnss->getApi();
71b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    if (api == nullptr) {
72b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        LOC_LOGE("%s]: api is nullptr", __FUNCTION__);
73b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel        return Void();
74b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    }
75b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
76b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    api->gnssNiRespond(notifId, userResponse);
77b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
78b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    return Void();
79b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}
80b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel
81b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}  // namespace implementation
82b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}  // namespace V1_0
83b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}  // namespace gnss
84b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}  // namespace hardware
85b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}  // namespace android
86