129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju/* 229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * Copyright (C) 2016 The Android Open Source Project 329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * 429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * Licensed under the Apache License, Version 2.0 (the "License"); 529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * you may not use this file except in compliance with the License. 629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * You may obtain a copy of the License at 729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * 829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * http://www.apache.org/licenses/LICENSE-2.0 929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * 1029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * Unless required by applicable law or agreed to in writing, software 1129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * distributed under the License is distributed on an "AS IS" BASIS, 1229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * See the License for the specific language governing permissions and 1429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * limitations under the License. 1529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju */ 1629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 1729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju#define LOG_TAG "GnssHal_GnssGeofencing" 1829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 1929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju#include "GnssGeofencing.h" 2029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju#include <GnssUtils.h> 2129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 2229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajunamespace android { 2329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajunamespace hardware { 2429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajunamespace gnss { 2529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajunamespace V1_0 { 2629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajunamespace implementation { 2729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 2829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajustd::vector<std::unique_ptr<ThreadFuncArgs>> GnssGeofencing::sThreadFuncArgsList; 2929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajusp<IGnssGeofenceCallback> GnssGeofencing::mGnssGeofencingCbIface = nullptr; 3029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajubool GnssGeofencing::sInterfaceExists = false; 3129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 3229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuGpsGeofenceCallbacks GnssGeofencing::sGnssGfCb = { 3329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju .geofence_transition_callback = gnssGfTransitionCb, 3429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju .geofence_status_callback = gnssGfStatusCb, 3529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju .geofence_add_callback = gnssGfAddCb, 3629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju .geofence_remove_callback = gnssGfRemoveCb, 3729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju .geofence_pause_callback = gnssGfPauseCb, 3829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju .geofence_resume_callback = gnssGfResumeCb, 3929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju .create_thread_cb = createThreadCb 4029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju}; 4129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 4229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuGnssGeofencing::GnssGeofencing(const GpsGeofencingInterface* gpsGeofencingIface) 4329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju : mGnssGeofencingIface(gpsGeofencingIface) { 4429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju /* Error out if an instance of the interface already exists. */ 4529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju LOG_ALWAYS_FATAL_IF(sInterfaceExists); 4629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju sInterfaceExists = true; 4729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 4829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 4929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuGnssGeofencing::~GnssGeofencing() { 5029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju sThreadFuncArgsList.clear(); 51e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju sInterfaceExists = false; 5229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 5329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajuvoid GnssGeofencing::gnssGfTransitionCb(int32_t geofenceId, 5429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju GpsLocation* location, 5529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju int32_t transition, 5629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju GpsUtcTime timestamp) { 5729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingCbIface == nullptr) { 5829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GNSS Geofence Callback Interface configured incorrectly", __func__); 5929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return; 6029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 6129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 6229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (location == nullptr) { 6329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s : Invalid location from GNSS HAL", __func__); 6429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return; 6529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 6629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 6729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju GnssLocation gnssLocation = convertToGnssLocation(location); 68e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju auto ret = mGnssGeofencingCbIface->gnssGeofenceTransitionCb( 6929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju geofenceId, 7029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju gnssLocation, 7129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju static_cast<IGnssGeofenceCallback::GeofenceTransition>(transition), 7229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju timestamp); 73e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju if (!ret.isOk()) { 74e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju ALOGE("%s: Unable to invoke callback", __func__); 75e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju } 7629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 7729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 7829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajuvoid GnssGeofencing::gnssGfStatusCb(int32_t status, GpsLocation* location) { 7929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingCbIface == nullptr) { 8029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GNSS Geofence Callback Interface configured incorrectly", __func__); 8129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return; 8229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 8329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 8429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju GnssLocation gnssLocation; 8529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 8629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (location != nullptr) { 8729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju gnssLocation = convertToGnssLocation(location); 8829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } else { 8929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju gnssLocation = {}; 9029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 9129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 92e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju auto ret = mGnssGeofencingCbIface->gnssGeofenceStatusCb( 9329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju static_cast<IGnssGeofenceCallback::GeofenceAvailability>(status), gnssLocation); 94e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju if (!ret.isOk()) { 95e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju ALOGE("%s: Unable to invoke callback", __func__); 96e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju } 9729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 9829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 9929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajuvoid GnssGeofencing::gnssGfAddCb(int32_t geofenceId, int32_t status) { 10029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingCbIface == nullptr) { 10129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GNSS Geofence Callback Interface configured incorrectly", __func__); 10229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return; 10329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 10429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 105e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju auto ret = mGnssGeofencingCbIface->gnssGeofenceAddCb( 10629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status)); 107e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju if (!ret.isOk()) { 108e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju ALOGE("%s: Unable to invoke callback", __func__); 109e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju } 11029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 11129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 11229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajuvoid GnssGeofencing::gnssGfRemoveCb(int32_t geofenceId, int32_t status) { 11329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingCbIface == nullptr) { 11429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GNSS Geofence Callback Interface configured incorrectly", __func__); 11529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return; 11629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 11729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 118e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju auto ret = mGnssGeofencingCbIface->gnssGeofenceRemoveCb( 119e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status)); 120e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju if (!ret.isOk()) { 121e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju ALOGE("%s: Unable to invoke callback", __func__); 122e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju } 12329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 12429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 12529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajuvoid GnssGeofencing::gnssGfPauseCb(int32_t geofenceId, int32_t status) { 12629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingCbIface == nullptr) { 12729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GNSS Geofence Callback Interface configured incorrectly", __func__); 12829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return; 12929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 13029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 131e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju auto ret = mGnssGeofencingCbIface->gnssGeofencePauseCb( 13229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status)); 133e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju if (!ret.isOk()) { 134e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju ALOGE("%s: Unable to invoke callback", __func__); 135e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju } 13629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 13729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 13829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajuvoid GnssGeofencing::gnssGfResumeCb(int32_t geofenceId, int32_t status) { 13929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingCbIface == nullptr) { 14029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GNSS Geofence Callback Interface configured incorrectly", __func__); 14129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return; 14229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 14329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 144e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju auto ret = mGnssGeofencingCbIface->gnssGeofenceResumeCb( 14529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju geofenceId, static_cast<IGnssGeofenceCallback::GeofenceStatus>(status)); 146e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju if (!ret.isOk()) { 147e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju ALOGE("%s: Unable to invoke callback", __func__); 148e020ce28f2deb46db8081a40174ba95d500504d5Hridya Valsaraju } 14929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 15029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 15129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajupthread_t GnssGeofencing::createThreadCb(const char* name, void (*start)(void*), void* arg) { 15229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return createPthread(name, start, arg, &sThreadFuncArgsList); 15329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 15429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 15529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju// Methods from ::android::hardware::gnss::V1_0::IGnssGeofencing follow. 15629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuReturn<void> GnssGeofencing::setCallback(const sp<IGnssGeofenceCallback>& callback) { 15729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju mGnssGeofencingCbIface = callback; 15829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 15929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingIface == nullptr) { 16029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GnssGeofencing interface is not available", __func__); 16129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } else { 16229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju mGnssGeofencingIface->init(&sGnssGfCb); 16329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 16429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 16529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return Void(); 16629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 16729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 16829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuReturn<void> GnssGeofencing::addGeofence( 16929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju int32_t geofenceId, 17029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju double latitudeDegrees, 17129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju double longitudeDegrees, 17229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju double radiusMeters, 17329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju IGnssGeofenceCallback::GeofenceTransition lastTransition, 17429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju int32_t monitorTransitions, 17529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju uint32_t notificationResponsivenessMs, 17629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju uint32_t unknownTimerMs) { 17729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingIface == nullptr) { 17829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GnssGeofencing interface is not available", __func__); 17929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return Void(); 18029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } else { 18129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju mGnssGeofencingIface->add_geofence_area( 18229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju geofenceId, 18329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju latitudeDegrees, 18429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju longitudeDegrees, 18529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju radiusMeters, 18629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju static_cast<int32_t>(lastTransition), 18729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju monitorTransitions, 18829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju notificationResponsivenessMs, 18929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju unknownTimerMs); 19029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 19129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return Void(); 19229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 19329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 19429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuReturn<void> GnssGeofencing::pauseGeofence(int32_t geofenceId) { 19529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingIface == nullptr) { 19629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GnssGeofencing interface is not available", __func__); 19729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } else { 19829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju mGnssGeofencingIface->pause_geofence(geofenceId); 19929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 20029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return Void(); 20129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 20229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 20329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuReturn<void> GnssGeofencing::resumeGeofence(int32_t geofenceId, int32_t monitorTransitions) { 20429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingIface == nullptr) { 20529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GnssGeofencing interface is not available", __func__); 20629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } else { 20729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju mGnssGeofencingIface->resume_geofence(geofenceId, monitorTransitions); 20829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 20929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return Void(); 21029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 21129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 21229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya ValsarajuReturn<void> GnssGeofencing::removeGeofence(int32_t geofenceId) { 21329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (mGnssGeofencingIface == nullptr) { 21429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("%s: GnssGeofencing interface is not available", __func__); 21529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } else { 21629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju mGnssGeofencingIface->remove_geofence_area(geofenceId); 21729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 21829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return Void(); 21929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 22029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 22129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} // namespace implementation 22229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} // namespace V1_0 22329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} // namespace gnss 22429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} // namespace hardware 22529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} // namespace android 226