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