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