Home | History | Annotate | Download | only in android
      1 /*
      2  * Copyright (c) 2017, The Linux Foundation. All rights reserved.
      3  * Not a Contribution
      4  */
      5 /*
      6  * Copyright (C) 2016 The Android Open Source Project
      7  *
      8  * Licensed under the Apache License, Version 2.0 (the "License");
      9  * you may not use this file except in compliance with the License.
     10  * You may obtain a copy of the License at
     11  *
     12  *      http://www.apache.org/licenses/LICENSE-2.0
     13  *
     14  * Unless required by applicable law or agreed to in writing, software
     15  * distributed under the License is distributed on an "AS IS" BASIS,
     16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     17  * See the License for the specific language governing permissions and
     18  * limitations under the License.
     19  */
     20 
     21 #define LOG_TAG "LocSvc_GnssMeasurementInterface"
     22 
     23 #include <log_util.h>
     24 #include <GnssMeasurementAPIClient.h>
     25 #include "GnssMeasurement.h"
     26 
     27 namespace android {
     28 namespace hardware {
     29 namespace gnss {
     30 namespace V1_0 {
     31 namespace implementation {
     32 
     33 void GnssMeasurement::GnssMeasurementDeathRecipient::serviceDied(
     34         uint64_t cookie, const wp<IBase>& who) {
     35     LOC_LOGE("%s] service died. cookie: %llu, who: %p",
     36             __FUNCTION__, static_cast<unsigned long long>(cookie), &who);
     37     if (mGnssMeasurement != nullptr) {
     38         mGnssMeasurement->close();
     39     }
     40 }
     41 
     42 GnssMeasurement::GnssMeasurement() {
     43     mGnssMeasurementDeathRecipient = new GnssMeasurementDeathRecipient(this);
     44     mApi = new GnssMeasurementAPIClient();
     45 }
     46 
     47 GnssMeasurement::~GnssMeasurement() {
     48     if (mApi) {
     49         delete mApi;
     50         mApi = nullptr;
     51     }
     52 }
     53 
     54 // Methods from ::android::hardware::gnss::V1_0::IGnssMeasurement follow.
     55 Return<IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback(
     56         const sp<IGnssMeasurementCallback>& callback)  {
     57 
     58     Return<IGnssMeasurement::GnssMeasurementStatus> ret =
     59         IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
     60     if (mGnssMeasurementCbIface != nullptr) {
     61         LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
     62         return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
     63     }
     64 
     65     if (callback == nullptr) {
     66         LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
     67         return ret;
     68     }
     69     if (mApi == nullptr) {
     70         LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
     71         return ret;
     72     }
     73 
     74     mGnssMeasurementCbIface = callback;
     75     mGnssMeasurementCbIface->linkToDeath(mGnssMeasurementDeathRecipient, 0 /*cookie*/);
     76 
     77     return mApi->gnssMeasurementSetCallback(callback);
     78 }
     79 
     80 Return<void> GnssMeasurement::close()  {
     81     if (mApi == nullptr) {
     82         LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
     83         return Void();
     84     }
     85 
     86     if (mGnssMeasurementCbIface != nullptr) {
     87         mGnssMeasurementCbIface->unlinkToDeath(mGnssMeasurementDeathRecipient);
     88         mGnssMeasurementCbIface = nullptr;
     89     }
     90     mApi->gnssMeasurementClose();
     91 
     92     return Void();
     93 }
     94 
     95 }  // namespace implementation
     96 }  // namespace V1_0
     97 }  // namespace gnss
     98 }  // namespace hardware
     99 }  // namespace android
    100