/* * Copyright (c) 2017, The Linux Foundation. All rights reserved. * Not a Contribution */ /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "LocSvc_GnssBatchingInterface" #include #include #include "GnssBatching.h" namespace android { namespace hardware { namespace gnss { namespace V1_0 { namespace implementation { void GnssBatching::GnssBatchingDeathRecipient::serviceDied( uint64_t cookie, const wp& who) { LOC_LOGE("%s] service died. cookie: %llu, who: %p", __FUNCTION__, static_cast(cookie), &who); if (mGnssBatching != nullptr) { mGnssBatching->stop(); mGnssBatching->cleanup(); } } GnssBatching::GnssBatching() : mApi(nullptr) { mGnssBatchingDeathRecipient = new GnssBatchingDeathRecipient(this); } GnssBatching::~GnssBatching() { if (mApi != nullptr) { delete mApi; mApi = nullptr; } } // Methods from ::android::hardware::gnss::V1_0::IGnssBatching follow. Return GnssBatching::init(const sp& callback) { if (mApi != nullptr) { LOC_LOGD("%s]: mApi is NOT nullptr, delete it first", __FUNCTION__); delete mApi; mApi = nullptr; } mApi = new FlpAPIClient(callback); if (mApi == nullptr) { LOC_LOGE("%s]: failed to create mApi", __FUNCTION__); return false; } if (mGnssBatchingCbIface != nullptr) { mGnssBatchingCbIface->unlinkToDeath(mGnssBatchingDeathRecipient); } mGnssBatchingCbIface = callback; if (mGnssBatchingCbIface != nullptr) { mGnssBatchingCbIface->linkToDeath(mGnssBatchingDeathRecipient, 0 /*cookie*/); } return true; } Return GnssBatching::getBatchSize() { uint16_t ret = 0; if (mApi == nullptr) { LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__); } else { ret = mApi->flpGetBatchSize(); } return ret; } Return GnssBatching::start(const IGnssBatching::Options& options) { bool ret = false; if (mApi == nullptr) { LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__); } else { ret = mApi->flpStartSession(options); } return ret; } Return GnssBatching::flush() { if (mApi == nullptr) { LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__); } else { mApi->flpFlushBatchedLocations(); } return Void(); } Return GnssBatching::stop() { bool ret = false; if (mApi == nullptr) { LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__); } else { ret = mApi->flpStopSession(); } return ret; } Return GnssBatching::cleanup() { if (mGnssBatchingCbIface != nullptr) { mGnssBatchingCbIface->unlinkToDeath(mGnssBatchingDeathRecipient); } return Void(); } } // namespace implementation } // namespace V1_0 } // namespace gnss } // namespace hardware } // namespace android