1b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/* 2b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Copyright (C) 2013 The Android Open Source Project 3b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 4b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Licensed under the Apache License, Version 2.0 (the "License"); 5b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * you may not use this file except in compliance with the License. 6b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * You may obtain a copy of the License at 7b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 8b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * http://www.apache.org/licenses/LICENSE-2.0 9b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 10b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Unless required by applicable law or agreed to in writing, software 11b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * distributed under the License is distributed on an "AS IS" BASIS, 12b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * See the License for the specific language governing permissions and 14b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * limitations under the License. 15b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 16b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 17b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#ifndef ANDROID_INCLUDE_HARDWARE_FUSED_LOCATION_H 18b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define ANDROID_INCLUDE_HARDWARE_FUSED_LOCATION_H 19b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 20b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#include <hardware/hardware.h> 21b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 22bd0aa2585990d7c17b28489e4662938608411f7aHridya Valsaraju#include "gnss-base.h" 23b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 24b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 25b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * This header file defines the interface of the Fused Location Provider. 26b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Fused Location Provider is designed to fuse data from various sources 27b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * like GPS, Wifi, Cell, Sensors, Bluetooth etc to provide a fused location to the 28b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * upper layers. The advantage of doing fusion in hardware is power savings. 29b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The goal is to do this without waking up the AP to get additional data. 30b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The software implementation of FLP will decide when to use 31b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * the hardware fused location. Other location features like geofencing will 32b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * also be implemented using fusion in hardware. 33b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 34b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh__BEGIN_DECLS 35b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 36b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_HEADER_VERSION 1 37b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1) 38b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_DEVICE_API_VERSION_0_1 HARDWARE_DEVICE_API_VERSION_2(0, 1, FLP_HEADER_VERSION) 39b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 40b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 41b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The id of this module 42b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 43b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FUSED_LOCATION_HARDWARE_MODULE_ID "flp" 44b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 45b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 46b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Name for the FLP location interface 47b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 48b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_LOCATION_INTERFACE "flp_location" 49b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 50b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 51b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Name for the FLP location interface 52b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 53d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DIAGNOSTIC_INTERFACE "flp_diagnostic" 54b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 55b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 56b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Name for the FLP_Geofencing interface. 57b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 58b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_GEOFENCING_INTERFACE "flp_geofencing" 59b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 60b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 61d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Name for the FLP_device context interface. 62d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang */ 63d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_INTERFACE "flp_device_context" 64d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 65d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang/** 66b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Constants to indicate the various subsystems 67b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * that will be used. 68b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 69b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_TECH_MASK_GNSS (1U<<0) 70b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_TECH_MASK_WIFI (1U<<1) 71b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_TECH_MASK_SENSORS (1U<<2) 72b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_TECH_MASK_CELL (1U<<3) 73b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_TECH_MASK_BLUETOOTH (1U<<4) 74b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 75b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 766e4b504920f2852763a6003fb7371fca111373b9David Christie * Set when your implementation can produce GNNS-derived locations, 776e4b504920f2852763a6003fb7371fca111373b9David Christie * for use with flp_capabilities_callback. 786e4b504920f2852763a6003fb7371fca111373b9David Christie * 796e4b504920f2852763a6003fb7371fca111373b9David Christie * GNNS is a required capability for a particular feature to be used 806e4b504920f2852763a6003fb7371fca111373b9David Christie * (batching or geofencing). If not supported that particular feature 816e4b504920f2852763a6003fb7371fca111373b9David Christie * won't be used by the upper layer. 826e4b504920f2852763a6003fb7371fca111373b9David Christie */ 836e4b504920f2852763a6003fb7371fca111373b9David Christie#define CAPABILITY_GNSS (1U<<0) 846e4b504920f2852763a6003fb7371fca111373b9David Christie/** 856e4b504920f2852763a6003fb7371fca111373b9David Christie * Set when your implementation can produce WiFi-derived locations, for 866e4b504920f2852763a6003fb7371fca111373b9David Christie * use with flp_capabilities_callback. 876e4b504920f2852763a6003fb7371fca111373b9David Christie */ 886e4b504920f2852763a6003fb7371fca111373b9David Christie#define CAPABILITY_WIFI (1U<<1) 896e4b504920f2852763a6003fb7371fca111373b9David Christie/** 906e4b504920f2852763a6003fb7371fca111373b9David Christie * Set when your implementation can produce cell-derived locations, for 916e4b504920f2852763a6003fb7371fca111373b9David Christie * use with flp_capabilities_callback. 926e4b504920f2852763a6003fb7371fca111373b9David Christie */ 936e4b504920f2852763a6003fb7371fca111373b9David Christie#define CAPABILITY_CELL (1U<<3) 946e4b504920f2852763a6003fb7371fca111373b9David Christie 956e4b504920f2852763a6003fb7371fca111373b9David Christie/** 965cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * Status to return in flp_status_callback when your implementation transitions 975cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * from being unsuccessful in determining location to being successful. 985cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie */ 995cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie#define FLP_STATUS_LOCATION_AVAILABLE 0 1005cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie/** 1015cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * Status to return in flp_status_callback when your implementation transitions 1025cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * from being successful in determining location to being unsuccessful. 1035cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie */ 1045cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie#define FLP_STATUS_LOCATION_UNAVAILABLE 1 1055cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie 1065cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie/** 107b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * While batching, the implementation should not call the 108b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * flp_location_callback on every location fix. However, 109b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * sometimes in high power mode, the system might need 110b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * a location callback every single time the location 111b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * fix has been obtained. This flag controls that option. 112b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Its the responsibility of the upper layers (caller) to switch 113b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * it off, if it knows that the AP might go to sleep. 114d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * When this bit is on amidst a batching session, batching should 115d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * continue while location fixes are reported in real time. 116b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 117b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_BATCH_CALLBACK_ON_LOCATION_FIX 0x0000002 118b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 119b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Flags to indicate which values are valid in a FlpLocation. */ 120b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef uint16_t FlpLocationFlags; 121b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 122b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh// IMPORTANT: Note that the following values must match 123b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh// constants in the corresponding java file. 124b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 125b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** FlpLocation has valid latitude and longitude. */ 126b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_LOCATION_HAS_LAT_LONG (1U<<0) 127b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** FlpLocation has valid altitude. */ 128b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_LOCATION_HAS_ALTITUDE (1U<<1) 129b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** FlpLocation has valid speed. */ 130b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_LOCATION_HAS_SPEED (1U<<2) 131b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** FlpLocation has valid bearing. */ 132b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_LOCATION_HAS_BEARING (1U<<4) 133b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** FlpLocation has valid accuracy. */ 134b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_LOCATION_HAS_ACCURACY (1U<<8) 135b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 136b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 137b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef int64_t FlpUtcTime; 138b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 139b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Represents a location. */ 140b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 141b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** set to sizeof(FlpLocation) */ 142b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh size_t size; 143b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 144b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Flags associated with the location object. */ 145b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh FlpLocationFlags flags; 146b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 147b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Represents latitude in degrees. */ 148b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh double latitude; 149b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 150b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Represents longitude in degrees. */ 151b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh double longitude; 152b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 153b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 154b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Represents altitude in meters above the WGS 84 reference 155b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * ellipsoid. */ 156b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh double altitude; 157b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 158b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Represents speed in meters per second. */ 159b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh float speed; 160b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 161b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Represents heading in degrees. */ 162b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh float bearing; 163b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 164b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Represents expected accuracy in meters. */ 165b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh float accuracy; 166b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 167b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Timestamp for the location fix. */ 168b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh FlpUtcTime timestamp; 169b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 170b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Sources used, will be Bitwise OR of the FLP_TECH_MASK bits. */ 171b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh uint32_t sources_used; 172b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} FlpLocation; 173b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 174b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef enum { 175b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh ASSOCIATE_JVM, 176b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh DISASSOCIATE_JVM, 177b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} ThreadEvent; 178b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 179b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 180b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Callback with location information. 181b89487944dfe0934f9d29265037c515e539ff31cdestradaa * Can only be called from a thread associated to JVM using set_thread_event_cb. 182b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 183b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * num_locations is the number of batched locations available. 184b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * location is the pointer to an array of pointers to location objects. 185b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 186b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_location_callback)(int32_t num_locations, FlpLocation** location); 187b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 188b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 189b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Callback utility for acquiring a wakelock. 190b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * This can be used to prevent the CPU from suspending while handling FLP events. 191b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 192b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_acquire_wakelock)(); 193b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 194b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 195b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Callback utility for releasing the FLP wakelock. 196b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 197b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_release_wakelock)(); 198b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 199b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 200b89487944dfe0934f9d29265037c515e539ff31cdestradaa * Callback for associating a thread that can call into the Java framework code. 201b89487944dfe0934f9d29265037c515e539ff31cdestradaa * This must be used to initialize any threads that report events up to the framework. 202b89487944dfe0934f9d29265037c515e539ff31cdestradaa * Return value: 203b89487944dfe0934f9d29265037c515e539ff31cdestradaa * FLP_RESULT_SUCCESS on success. 204b89487944dfe0934f9d29265037c515e539ff31cdestradaa * FLP_RESULT_ERROR if the association failed in the current thread. 205b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 206b89487944dfe0934f9d29265037c515e539ff31cdestradaatypedef int (*flp_set_thread_event)(ThreadEvent event); 207b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 2086e4b504920f2852763a6003fb7371fca111373b9David Christie/** 2096e4b504920f2852763a6003fb7371fca111373b9David Christie * Callback for technologies supported by this implementation. 2106e4b504920f2852763a6003fb7371fca111373b9David Christie * 2116e4b504920f2852763a6003fb7371fca111373b9David Christie * Parameters: capabilities is a bitmask of FLP_CAPABILITY_* values describing 2126e4b504920f2852763a6003fb7371fca111373b9David Christie * which features your implementation supports. You should support 2136e4b504920f2852763a6003fb7371fca111373b9David Christie * CAPABILITY_GNSS at a minimum for your implementation to be utilized. You can 2146e4b504920f2852763a6003fb7371fca111373b9David Christie * return 0 in FlpGeofenceCallbacks to indicate you don't support geofencing, 2156e4b504920f2852763a6003fb7371fca111373b9David Christie * or 0 in FlpCallbacks to indicate you don't support location batching. 2166e4b504920f2852763a6003fb7371fca111373b9David Christie */ 2176e4b504920f2852763a6003fb7371fca111373b9David Christietypedef void (*flp_capabilities_callback)(int capabilities); 2186e4b504920f2852763a6003fb7371fca111373b9David Christie 2195cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie/** 2205cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * Callback with status information on the ability to compute location. 2215cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * To avoid waking up the application processor you should only send 2225cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * changes in status (you shouldn't call this method twice in a row 2235cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * with the same status value). As a guideline you should not call this 2245cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * more frequently then the requested batch period set with period_ns 2255cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * in FlpBatchOptions. For example if period_ns is set to 5 minutes and 2265cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * the status changes many times in that interval, you should only report 2275cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * one status change every 5 minutes. 2285cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * 2295cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * Parameters: 2305cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * status is one of FLP_STATUS_LOCATION_AVAILABLE 2315cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie * or FLP_STATUS_LOCATION_UNAVAILABLE. 2325cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie */ 2335cf80e50033cbb2be14dbee1b97ae5ded648b252David Christietypedef void (*flp_status_callback)(int32_t status); 2345cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie 235b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** FLP callback structure. */ 236b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 237b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** set to sizeof(FlpCallbacks) */ 238b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh size_t size; 239b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_location_callback location_cb; 240b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_acquire_wakelock acquire_wakelock_cb; 241b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_release_wakelock release_wakelock_cb; 242b89487944dfe0934f9d29265037c515e539ff31cdestradaa flp_set_thread_event set_thread_event_cb; 2436e4b504920f2852763a6003fb7371fca111373b9David Christie flp_capabilities_callback flp_capabilities_cb; 2445cf80e50033cbb2be14dbee1b97ae5ded648b252David Christie flp_status_callback flp_status_cb; 245b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} FlpCallbacks; 246b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 247b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 248b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Options with the batching FLP APIs */ 249b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 250b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 251b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Maximum power in mW that the underlying implementation 252b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * can use for this batching call. 253d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * If max_power_allocation_mW is 0, only fixes that are generated 254d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * at no additional cost of power shall be reported. 255b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 256b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh double max_power_allocation_mW; 257b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 258b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** Bitwise OR of the FLP_TECH_MASKS to use */ 259b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh uint32_t sources_to_use; 260b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 261b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 262b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_BATCH_WAKEUP_ON_FIFO_FULL - If set the hardware 263b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * will wake up the AP when the buffer is full. If not set, the 264b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * hardware will drop the oldest location object. 265b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 266b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_BATCH_CALLBACK_ON_LOCATION_FIX - If set the location 267b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * callback will be called every time there is a location fix. 268b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Its the responsibility of the upper layers (caller) to switch 269d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * it off, if it knows that the AP might go to sleep. When this 270d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * bit is on amidst a batching session, batching should continue 271d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * while location fixes are reported in real time. 272b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 273b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Other flags to be bitwised ORed in the future. 274b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 275b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh uint32_t flags; 276b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 277b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 278b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Frequency with which location needs to be batched in nano 279b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * seconds. 280b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 281b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int64_t period_ns; 282b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie 283b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie /** 284b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * The smallest displacement between reported locations in meters. 285b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * 286b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * If set to 0, then you should report locations at the requested 287b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * interval even if the device is stationary. If positive, you 288b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * can use this parameter as a hint to save power (e.g. throttling 289b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * location period if the user hasn't traveled close to the displacement 290b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * threshold). Even small positive values can be interpreted to mean 291b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * that you don't have to compute location when the device is stationary. 292b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * 293b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * There is no need to filter location delivery based on this parameter. 294b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * Locations can be delivered even if they have a displacement smaller than 295b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * requested. This parameter can safely be ignored at the cost of potential 296b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie * power savings. 297b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie */ 298b3a7d37fa20457e62fd4c30c02dcd14400f0839eDavid Christie float smallest_displacement_meters; 299b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} FlpBatchOptions; 300b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 301b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_RESULT_SUCCESS 0 302b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_RESULT_ERROR -1 303b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_RESULT_INSUFFICIENT_MEMORY -2 304b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_RESULT_TOO_MANY_GEOFENCES -3 305b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_RESULT_ID_EXISTS -4 306b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_RESULT_ID_UNKNOWN -5 307b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_RESULT_INVALID_GEOFENCE_TRANSITION -6 308b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 309b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 310b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Represents the standard FLP interface. 311b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 312b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 313b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 314b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * set to sizeof(FlpLocationInterface) 315b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 316b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh size_t size; 317b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 318b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 319b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Opens the interface and provides the callback routines 3206e4b504920f2852763a6003fb7371fca111373b9David Christie * to the implementation of this interface. Once called you should respond 3216e4b504920f2852763a6003fb7371fca111373b9David Christie * by calling the flp_capabilities_callback in FlpCallbacks to 3226e4b504920f2852763a6003fb7371fca111373b9David Christie * specify the capabilities that your implementation supports. 323b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 324b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int (*init)(FlpCallbacks* callbacks ); 325b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 326b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 327d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Return the batch size (in number of FlpLocation objects) 328d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * available in the hardware. Note, different HW implementations 329d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * may have different sample sizes. This shall return number 330d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * of samples defined in the format of FlpLocation. 331b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * This will be used by the upper layer, to decide on the batching 332b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * interval and whether the AP should be woken up or not. 333b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 334b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int (*get_batch_size)(); 335b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 336b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 337b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Start batching locations. This API is primarily used when the AP is 338b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * asleep and the device can batch locations in the hardware. 339b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * flp_location_callback is used to return the locations. When the buffer 340b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * is full and FLP_BATCH_WAKEUP_ON_FIFO_FULL is used, the AP is woken up. 341b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * When the buffer is full and FLP_BATCH_WAKEUP_ON_FIFO_FULL is not set, 342b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * the oldest location object is dropped. In this case the AP will not be 343b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * woken up. The upper layer will use get_batched_location 344b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * API to explicitly ask for the location. 345b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * If FLP_BATCH_CALLBACK_ON_LOCATION_FIX is set, the implementation 346b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * will call the flp_location_callback every single time there is a location 347b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * fix. This overrides FLP_BATCH_WAKEUP_ON_FIFO_FULL flag setting. 348b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * It's the responsibility of the upper layers (caller) to switch 349b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * it off, if it knows that the AP might go to sleep. This is useful 350b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * for nagivational applications when the system is in high power mode. 351b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 352b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * id - Id for the request. 353b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * options - See FlpBatchOptions struct definition. 354b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Return value: 355b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_SUCCESS on success, FLP_RESULT_INSUFFICIENT_MEMORY, 356b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ID_EXISTS, FLP_RESULT_ERROR on failure. 357b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 358b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int (*start_batching)(int id, FlpBatchOptions* options); 359b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 360b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 361b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Update FlpBatchOptions associated with a batching request. 362b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * When a batching operation is in progress and a batching option 363b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * such as FLP_BATCH_WAKEUP_ON_FIFO_FULL needs to be updated, this API 364b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * will be used. For instance, this can happen when the AP is awake and 365b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * the maps application is being used. 366b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 367b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * id - Id of an existing batch request. 368b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * new_options - Updated FlpBatchOptions 369b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Return value: 370b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_SUCCESS on success, FLP_RESULT_ID_UNKNOWN, 371b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ERROR on error. 372b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 373b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int (*update_batching_options)(int id, FlpBatchOptions* new_options); 374b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 375b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 376b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Stop batching. 377b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 378b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * id - Id for the request. 379b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Return Value: 380b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_SUCCESS on success, FLP_RESULT_ID_UNKNOWN or 381b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ERROR on failure. 382b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 383b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int (*stop_batching)(int id); 384b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 385b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 386b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Closes the interface. If any batch operations are in progress, 387b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * they should be stopped. 388b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 389b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh void (*cleanup)(); 390b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 391b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 392b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Get the fused location that was batched. 393b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * flp_location_callback is used to return the location. The location object 394b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * is dropped from the buffer only when the buffer is full. Do not remove it 395b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * from the buffer just because it has been returned using the callback. 396b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * In other words, when there is no new location object, two calls to 397b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * get_batched_location(1) should return the same location object. 398b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 399b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * last_n_locations - Number of locations to get. This can be one or many. 400b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * If the last_n_locations is 1, you get the latest location known to the 401b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * hardware. 402b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 403b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh void (*get_batched_location)(int last_n_locations); 404b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 405b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 406b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Injects current location from another location provider 407b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * latitude and longitude are measured in degrees 408b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * expected accuracy is measured in meters 409b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 410b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * location - The location object being injected. 411b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Return value: FLP_RESULT_SUCCESS or FLP_RESULT_ERROR. 412b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 413b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int (*inject_location)(FlpLocation* location); 414b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 415b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 416b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Get a pointer to extension information. 417b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 418b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh const void* (*get_extension)(const char* name); 4194b49035055487058cb0f82db6eb8b3ec740934d8David Christie 4204b49035055487058cb0f82db6eb8b3ec740934d8David Christie /** 4214b49035055487058cb0f82db6eb8b3ec740934d8David Christie * Retrieve all batched locations currently stored and clear the buffer. 4224b49035055487058cb0f82db6eb8b3ec740934d8David Christie * flp_location_callback MUST be called in response, even if there are 4234b49035055487058cb0f82db6eb8b3ec740934d8David Christie * no locations to flush (in which case num_locations should be 0). 4244b49035055487058cb0f82db6eb8b3ec740934d8David Christie * Subsequent calls to get_batched_location or flush_batched_locations 4254b49035055487058cb0f82db6eb8b3ec740934d8David Christie * should not return any of the locations returned in this call. 4264b49035055487058cb0f82db6eb8b3ec740934d8David Christie */ 4274b49035055487058cb0f82db6eb8b3ec740934d8David Christie void (*flush_batched_locations)(); 428b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} FlpLocationInterface; 429b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 430b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshstruct flp_device_t { 431b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh struct hw_device_t common; 432b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 433b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 434b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Get a handle to the FLP Interface. 435b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 436b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh const FlpLocationInterface* (*get_flp_interface)(struct flp_device_t* dev); 437b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh}; 438b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 439b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 440d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Callback for reports diagnostic data into the Java framework code. 441d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang*/ 442d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tangtypedef void (*report_data)(char* data, int length); 443d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 444d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang/** 445d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * FLP diagnostic callback structure. 446b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Currently, not used - but this for future extension. 447b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 448b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 449d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang /** set to sizeof(FlpDiagnosticCallbacks) */ 450b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh size_t size; 451d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 452b89487944dfe0934f9d29265037c515e539ff31cdestradaa flp_set_thread_event set_thread_event_cb; 453b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 454d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang /** reports diagnostic data into the Java framework code */ 455d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang report_data data_cb; 456d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang} FlpDiagnosticCallbacks; 457d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 458d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang/** Extended interface for diagnostic support. */ 459b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 460d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang /** set to sizeof(FlpDiagnosticInterface) */ 461b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh size_t size; 462b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 463b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 464d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Opens the diagnostic interface and provides the callback routines 465b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * to the implemenation of this interface. 466b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 467d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang void (*init)(FlpDiagnosticCallbacks* callbacks); 468d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 469d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang /** 470d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Injects diagnostic data into the FLP subsystem. 471d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Return 0 on success, -1 on error. 472d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang **/ 473d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang int (*inject_data)(char* data, int length ); 474d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang} FlpDiagnosticInterface; 475d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 476d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang/** 477d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Context setting information. 478d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * All these settings shall be injected to FLP HAL at FLP init time. 479d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Following that, only the changed setting need to be re-injected 480d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * upon changes. 481d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang */ 482d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 483d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_GPS_ENABLED (1U<<0) 484d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_AGPS_ENABLED (1U<<1) 485d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_NETWORK_POSITIONING_ENABLED (1U<<2) 486d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_WIFI_CONNECTIVITY_ENABLED (1U<<3) 487d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_WIFI_POSITIONING_ENABLED (1U<<4) 48806b77aa4e1abafdba19bbf30b5409bc1ec6db68edestradaa#define FLP_DEVICE_CONTEXT_HW_NETWORK_POSITIONING_ENABLED (1U<<5) 489d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_AIRPLANE_MODE_ON (1U<<6) 490d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_DATA_ENABLED (1U<<7) 491d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_ROAMING_ENABLED (1U<<8) 492d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_CURRENTLY_ROAMING (1U<<9) 493d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_SENSOR_ENABLED (1U<<10) 494d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_BLUETOOTH_ENABLED (1U<<11) 495d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang#define FLP_DEVICE_CONTEXT_CHARGER_ON (1U<<12) 496d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 497d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang/** Extended interface for device context support. */ 498d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tangtypedef struct { 499d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang /** set to sizeof(FlpDeviceContextInterface) */ 500d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang size_t size; 501b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 502b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 503b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Injects debug data into the FLP subsystem. 504b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Return 0 on success, -1 on error. 505b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh **/ 506d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang int (*inject_device_context)(uint32_t enabledMask); 507d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang} FlpDeviceContextInterface; 508b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 509b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 510b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 511b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * There are 3 states associated with a Geofence: Inside, Outside, Unknown. 512b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * There are 3 transitions: ENTERED, EXITED, UNCERTAIN. 513b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 514b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * An example state diagram with confidence level: 95% and Unknown time limit 515b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * set as 30 secs is shown below. (confidence level and Unknown time limit are 516b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * explained latter) 517b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * ____________________________ 518b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | Unknown (30 secs) | 519b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * """""""""""""""""""""""""""" 520b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * ^ | | ^ 521b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * UNCERTAIN| |ENTERED EXITED| |UNCERTAIN 522b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | v v | 523b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * ________ EXITED _________ 524b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | Inside | -----------> | Outside | 525b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | | <----------- | | 526b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * """""""" ENTERED """"""""" 527b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 528b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Inside state: We are 95% confident that the user is inside the geofence. 529b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Outside state: We are 95% confident that the user is outside the geofence 530b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Unknown state: Rest of the time. 531b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 532b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The Unknown state is better explained with an example: 533b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 534b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * __________ 535b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | c| 536b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | ___ | _______ 537b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | |a| | | b | 538b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | """ | """"""" 539b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * | | 540b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * """""""""" 541b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * In the diagram above, "a" and "b" are 2 geofences and "c" is the accuracy 542b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * circle reported by the FLP subsystem. Now with regard to "b", the system is 543b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * confident that the user is outside. But with regard to "a" is not confident 544b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * whether it is inside or outside the geofence. If the accuracy remains the 545b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * same for a sufficient period of time, the UNCERTAIN transition would be 546b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * triggered with the state set to Unknown. If the accuracy improves later, an 547b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * appropriate transition should be triggered. This "sufficient period of time" 548b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * is defined by the parameter in the add_geofence_area API. 549b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * In other words, Unknown state can be interpreted as a state in which the 550b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP subsystem isn't confident enough that the user is either inside or 551b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * outside the Geofence. It moves to Unknown state only after the expiry of the 552b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * timeout. 553b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 554b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The geofence callback needs to be triggered for the ENTERED and EXITED 555b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * transitions, when the FLP system is confident that the user has entered 556b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * (Inside state) or exited (Outside state) the Geofence. An implementation 557b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * which uses a value of 95% as the confidence is recommended. The callback 558b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * should be triggered only for the transitions requested by the 559b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * add_geofence_area call. 560b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 561b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Even though the diagram and explanation talks about states and transitions, 562b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * the callee is only interested in the transistions. The states are mentioned 563b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * here for illustrative purposes. 564b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 565b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Startup Scenario: When the device boots up, if an application adds geofences, 566b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * and then we get an accurate FLP location fix, it needs to trigger the 567b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * appropriate (ENTERED or EXITED) transition for every Geofence it knows about. 568b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * By default, all the Geofences will be in the Unknown state. 569b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 570b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * When the FLP system is unavailable, flp_geofence_status_callback should be 571b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * called to inform the upper layers of the same. Similarly, when it becomes 572b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * available the callback should be called. This is a global state while the 573b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * UNKNOWN transition described above is per geofence. 574b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 575b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 576b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_GEOFENCE_TRANSITION_ENTERED (1L<<0) 577b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_GEOFENCE_TRANSITION_EXITED (1L<<1) 578b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_GEOFENCE_TRANSITION_UNCERTAIN (1L<<2) 579b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 580b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_GEOFENCE_MONITOR_STATUS_UNAVAILABLE (1L<<0) 581b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#define FLP_GEOFENCE_MONITOR_STATUS_AVAILABLE (1L<<1) 582b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 583b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 584b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The callback associated with the geofence. 585b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 586b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - The id associated with the add_geofence_area. 587b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * location - The current location as determined by the FLP subsystem. 588b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * transition - Can be one of FLP_GEOFENCE_TRANSITION_ENTERED, FLP_GEOFENCE_TRANSITION_EXITED, 589b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_GEOFENCE_TRANSITION_UNCERTAIN. 590d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * timestamp - Timestamp when the transition was detected; -1 if not available. 591b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * sources_used - Bitwise OR of FLP_TECH_MASK flags indicating which 592b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * subsystems were used. 593b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 594b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The callback should only be called when the caller is interested in that 595b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * particular transition. For instance, if the caller is interested only in 596b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * ENTERED transition, then the callback should NOT be called with the EXITED 597b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * transition. 598b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 599b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * IMPORTANT: If a transition is triggered resulting in this callback, the 600b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * subsystem will wake up the application processor, if its in suspend state. 601b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 602b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_geofence_transition_callback) (int32_t geofence_id, FlpLocation* location, 603b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int32_t transition, FlpUtcTime timestamp, uint32_t sources_used); 604b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 605b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 606b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The callback associated with the availablity of one the sources used for geofence 607b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * monitoring by the FLP sub-system For example, if the GPS system determines that it cannot 608b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * monitor geofences because of lack of reliability or unavailability of the GPS signals, 609b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * it will call this callback with FLP_GEOFENCE_MONITOR_STATUS_UNAVAILABLE parameter and the 610b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * source set to FLP_TECH_MASK_GNSS. 611b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 612b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 613b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * status - FLP_GEOFENCE_MONITOR_STATUS_UNAVAILABLE or FLP_GEOFENCE_MONITOR_STATUS_AVAILABLE. 614b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * source - One of the FLP_TECH_MASKS 615b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * last_location - Last known location. 616b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 617b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_geofence_monitor_status_callback) (int32_t status, uint32_t source, 618b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh FlpLocation* last_location); 619b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 620b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 621b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The callback associated with the add_geofence call. 622b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 623b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameter: 624b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - Id of the geofence. 625b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * result - FLP_RESULT_SUCCESS 626b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ERROR_TOO_MANY_GEOFENCES - geofence limit has been reached. 627b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ID_EXISTS - geofence with id already exists 628b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_INVALID_GEOFENCE_TRANSITION - the monitorTransition contains an 629b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * invalid transition 630b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ERROR - for other errors. 631b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 632b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_geofence_add_callback) (int32_t geofence_id, int32_t result); 633b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 634b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 635b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The callback associated with the remove_geofence call. 636b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 637b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameter: 638b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - Id of the geofence. 639b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * result - FLP_RESULT_SUCCESS 640b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ID_UNKNOWN - for invalid id 641b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ERROR for others. 642b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 643b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_geofence_remove_callback) (int32_t geofence_id, int32_t result); 644b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 645b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 646b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 647b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The callback associated with the pause_geofence call. 648b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 649b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameter: 650b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - Id of the geofence. 651b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * result - FLP_RESULT_SUCCESS 652b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT__ID_UNKNOWN - for invalid id 653b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_INVALID_TRANSITION - 654b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * when monitor_transitions is invalid 655b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ERROR for others. 656b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 657b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_geofence_pause_callback) (int32_t geofence_id, int32_t result); 658b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 659b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** 660b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The callback associated with the resume_geofence call. 661b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * 662b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameter: 663b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - Id of the geofence. 664b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * result - FLP_RESULT_SUCCESS 665b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ID_UNKNOWN - for invalid id 666b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_RESULT_ERROR for others. 667b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 668b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef void (*flp_geofence_resume_callback) (int32_t geofence_id, int32_t result); 669b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 670b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 671b89487944dfe0934f9d29265037c515e539ff31cdestradaa /** set to sizeof(FlpGeofenceCallbacks) */ 672b89487944dfe0934f9d29265037c515e539ff31cdestradaa size_t size; 673b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_geofence_transition_callback geofence_transition_callback; 674b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_geofence_monitor_status_callback geofence_status_callback; 675b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_geofence_add_callback geofence_add_callback; 676b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_geofence_remove_callback geofence_remove_callback; 677b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_geofence_pause_callback geofence_pause_callback; 678b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh flp_geofence_resume_callback geofence_resume_callback; 679b89487944dfe0934f9d29265037c515e539ff31cdestradaa flp_set_thread_event set_thread_event_cb; 6806e4b504920f2852763a6003fb7371fca111373b9David Christie flp_capabilities_callback flp_capabilities_cb; 681b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} FlpGeofenceCallbacks; 682b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 683b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 684b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Type of geofence */ 685b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef enum { 686b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh TYPE_CIRCLE = 0, 687b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} GeofenceType; 688b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 689b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Circular geofence is represented by lat / long / radius */ 690b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 691b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh double latitude; 692b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh double longitude; 693b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh double radius_m; 694b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} GeofenceCircle; 695b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 696b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Represents the type of geofence and data */ 697b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 698b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh GeofenceType type; 699b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh union { 700b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh GeofenceCircle circle; 701b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh } geofence; 702b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} GeofenceData; 703b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 704b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Geofence Options */ 705b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 706b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 707b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The current state of the geofence. For example, if 708b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * the system already knows that the user is inside the geofence, 709b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * this will be set to FLP_GEOFENCE_TRANSITION_ENTERED. In most cases, it 710b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * will be FLP_GEOFENCE_TRANSITION_UNCERTAIN. */ 711b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int last_transition; 712b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 713b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 714b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Transitions to monitor. Bitwise OR of 715b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_GEOFENCE_TRANSITION_ENTERED, FLP_GEOFENCE_TRANSITION_EXITED and 716b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_GEOFENCE_TRANSITION_UNCERTAIN. 717b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 718b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int monitor_transitions; 719b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 720b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 721b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Defines the best-effort description 722b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * of how soon should the callback be called when the transition 723b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * associated with the Geofence is triggered. For instance, if set 724b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * to 1000 millseconds with FLP_GEOFENCE_TRANSITION_ENTERED, the callback 725b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * should be called 1000 milliseconds within entering the geofence. 726b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * This parameter is defined in milliseconds. 727b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * NOTE: This is not to be confused with the rate that the GPS is 728b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * polled at. It is acceptable to dynamically vary the rate of 729b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * sampling the GPS for power-saving reasons; thus the rate of 730b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * sampling may be faster or slower than this. 731b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 732b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int notification_responsivenes_ms; 733b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 734b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 735b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The time limit after which the UNCERTAIN transition 736b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * should be triggered. This paramter is defined in milliseconds. 737b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 738b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int unknown_timer_ms; 739b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 740b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 741b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * The sources to use for monitoring geofences. Its a BITWISE-OR 742b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * of FLP_TECH_MASK flags. 743b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 744b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh uint32_t sources_to_use; 745b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} GeofenceOptions; 746b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 747b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Geofence struct */ 748b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 749b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh int32_t geofence_id; 750b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh GeofenceData* data; 751b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh GeofenceOptions* options; 752b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} Geofence; 753b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 754b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh/** Extended interface for FLP_Geofencing support */ 755b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganeshtypedef struct { 756b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** set to sizeof(FlpGeofencingInterface) */ 757b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh size_t size; 758b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 759b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 760b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Opens the geofence interface and provides the callback routines 7616e4b504920f2852763a6003fb7371fca111373b9David Christie * to the implemenation of this interface. Once called you should respond 7626e4b504920f2852763a6003fb7371fca111373b9David Christie * by calling the flp_capabilities_callback in FlpGeofenceCallbacks to 7636e4b504920f2852763a6003fb7371fca111373b9David Christie * specify the capabilities that your implementation supports. 764b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 765b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh void (*init)( FlpGeofenceCallbacks* callbacks ); 766b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 767b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 768b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Add a list of geofences. 769b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 770b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * number_of_geofences - The number of geofences that needed to be added. 771b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofences - Pointer to array of pointers to Geofence structure. 772b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 773b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh void (*add_geofences) (int32_t number_of_geofences, Geofence** geofences); 774b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 775b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 776b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Pause monitoring a particular geofence. 777b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 778b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - The id for the geofence. 779b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 780b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh void (*pause_geofence) (int32_t geofence_id); 781b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 782b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 783b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Resume monitoring a particular geofence. 784b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameters: 785b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - The id for the geofence. 786b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * monitor_transitions - Which transitions to monitor. Bitwise OR of 787b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_GEOFENCE_TRANSITION_ENTERED, FLP_GEOFENCE_TRANSITION_EXITED and 788b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * FLP_GEOFENCE_TRANSITION_UNCERTAIN. 789b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * This supersedes the value associated provided in the 790b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * add_geofence_area call. 791b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 792b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh void (*resume_geofence) (int32_t geofence_id, int monitor_transitions); 793b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 794b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh /** 795d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Modify a particular geofence option. 796d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * Parameters: 797d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * geofence_id - The id for the geofence. 798d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * options - Various options associated with the geofence. See 799d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang * GeofenceOptions structure for details. 800d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang */ 801d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang void (*modify_geofence_option) (int32_t geofence_id, GeofenceOptions* options); 802d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang 803d2c966fa2b7b12a6162371ac3a99b7fa1daf365aKevin Tang /** 804b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Remove a list of geofences. After the function returns, no notifications 805b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * should be sent. 806b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * Parameter: 807b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * number_of_geofences - The number of geofences that needed to be added. 808b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh * geofence_id - Pointer to array of geofence_ids to be removed. 809b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh */ 810b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh void (*remove_geofences) (int32_t number_of_geofences, int32_t* geofence_id); 811b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh} FlpGeofencingInterface; 812b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 813b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh__END_DECLS 814b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 815b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh#endif /* ANDROID_INCLUDE_HARDWARE_FLP_H */ 816b951dee9e65cf8dbb52407bf0f562ff41122bc33Jaikumar Ganesh 817