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