parent
86abc8cf18
commit
aa24214a12
1 changed files with 0 additions and 203 deletions
|
@ -103,8 +103,6 @@ typedef uint16_t GpsLocationFlags;
|
|||
#define GPS_CAPABILITY_SINGLE_SHOT 0x0000008
|
||||
/** GPS supports on demand time injection */
|
||||
#define GPS_CAPABILITY_ON_DEMAND_TIME 0x0000010
|
||||
/** GPS supports Geofencing */
|
||||
#define GPS_CAPABILITY_GEOFENCING 0x0000020
|
||||
|
||||
/** Flags used to specify which aiding data to delete
|
||||
when calling delete_aiding_data(). */
|
||||
|
@ -230,12 +228,6 @@ typedef uint16_t AGpsStatusValue;
|
|||
*/
|
||||
#define AGPS_RIL_INTERFACE "agps_ril"
|
||||
|
||||
/**
|
||||
* Name for the GPS_Geofencing interface.
|
||||
*/
|
||||
#define GPS_GEOFENCING_INTERFACE "gps_geofencing"
|
||||
|
||||
|
||||
/** Represents a location. */
|
||||
typedef struct {
|
||||
/** set to sizeof(GpsLocation) */
|
||||
|
@ -681,201 +673,6 @@ typedef struct {
|
|||
void (*update_network_availability) (int avaiable, const char* apn);
|
||||
} AGpsRilInterface;
|
||||
|
||||
/**
|
||||
* GPS Geofence.
|
||||
* There are 3 states associated with a Geofence: Inside, Outside, Unknown.
|
||||
* There are 3 transitions: ENTERED, EXITED, UNCERTAIN.
|
||||
*
|
||||
* An example state diagram with confidence level: 95% and Unknown time limit
|
||||
* set as 30 secs is shown below. (confidence level and Unknown time limit are
|
||||
* explained latter)
|
||||
* ____________________________
|
||||
* | Unknown (30 secs) |
|
||||
* """"""""""""""""""""""""""""
|
||||
* ^ | | ^
|
||||
* UNCERTAIN| |ENTERED EXITED| |UNCERTAIN
|
||||
* | v v |
|
||||
* ________ EXITED _________
|
||||
* | Inside | -----------> | Outside |
|
||||
* | | <----------- | |
|
||||
* """""""" ENTERED """""""""
|
||||
*
|
||||
* Inside state: We are 95% confident that the user is inside the geofence.
|
||||
* Outside state: We are 95% confident that the user is outside the geofence
|
||||
* Unknown state: Rest of the time.
|
||||
*
|
||||
* The Unknown state is better explained with an example:
|
||||
*
|
||||
* __________
|
||||
* | c|
|
||||
* | ___ | _______
|
||||
* | |a| | | b |
|
||||
* | """ | """""""
|
||||
* | |
|
||||
* """"""""""
|
||||
* In the diagram above, "a" and "b" are 2 geofences and "c" is the accuracy
|
||||
* circle reported by the GPS subsystem. Now with regard to "b", the system is
|
||||
* confident that the user is outside. But with regard to "a" is not confident
|
||||
* whether it is inside or outside the geofence. If the accuracy remains the
|
||||
* same for a sufficient period of time, the UNCERTAIN transition would be
|
||||
* triggered with the state set to Unknown. If the accuracy improves later, an
|
||||
* appropriate transition should be triggered. This "sufficient period of time"
|
||||
* is defined by the parameter in the add_geofence_area API.
|
||||
* In other words, Unknown state can be interpreted as a state in which the
|
||||
* GPS subsystem isn't confident enough that the user is either inside or
|
||||
* outside the Geofence. It moves to Unknown state only after the expiry of the
|
||||
* timeout.
|
||||
*
|
||||
* The geofence callback needs to be triggered for the ENTERED and EXITED
|
||||
* transitions, when the GPS system is confident that the user has entered
|
||||
* (Inside state) or exited (Outside state) the Geofence. A implementation
|
||||
* which uses a value of 95% as the confidence is recommended. The callback
|
||||
* should be triggered only for the transitions requested by the
|
||||
* add_geofence_area call.
|
||||
*
|
||||
* Even though the diagram and explanation talks about states and transitions,
|
||||
* the callee is only interested in the transistions. The states are mentioned
|
||||
* here for illustrative purposes.
|
||||
*
|
||||
* Startup Scenario: When the device boots up, if an application adds geofences,
|
||||
* and then we get an accurate GPS location fix, it needs to trigger the
|
||||
* appropriate (ENTERED or EXITED) transition for every Geofence it knows about.
|
||||
* By default, all the Geofences will be in the Unknown state.
|
||||
*
|
||||
* When the GPS system is unavailable, gps_geofence_status_callback should be
|
||||
* called to inform the upper layers of the same. Similarly, when it becomes
|
||||
* available the callback should be called. This is a global state while the
|
||||
* UNKNOWN transition described above is per geofence.
|
||||
*
|
||||
* An important aspect to note is that users of this API (framework), will use
|
||||
* other subsystems like wifi, sensors, cell to handle Unknown case and
|
||||
* hopefully provide a definitive state transition to the third party
|
||||
* application. GPS Geofence will just be a signal indicating what the GPS
|
||||
* subsystem knows about the Geofence.
|
||||
*
|
||||
*/
|
||||
#define GPS_GEOFENCE_ENTERED (1<<0L)
|
||||
#define GPS_GEOFENCE_EXITED (1<<1L)
|
||||
#define GPS_GEOFENCE_UNCERTAIN (1<<2L)
|
||||
|
||||
#define GPS_GEOFENCE_UNAVAILABLE (1<<0L)
|
||||
#define GPS_GEOFENCE_AVAILABLE (1<<1L)
|
||||
|
||||
/**
|
||||
* The callback associated with the geofence.
|
||||
* Parameters:
|
||||
* geofence_id - The id associated with the add_geofence_area.
|
||||
* location - The current GPS location.
|
||||
* transition - Can be one of GPS_GEOFENCE_ENTERED, GPS_GEOFENCE_EXITED,
|
||||
* GPS_GEOFENCE_UNCERTAIN.
|
||||
* timestamp - Timestamp when the transition was detected.
|
||||
*
|
||||
* The callback should only be called when the caller is interested in that
|
||||
* particular transition. For instance, if the caller is interested only in
|
||||
* ENTERED transition, then the callback should NOT be called with the EXITED
|
||||
* transition.
|
||||
*
|
||||
* IMPORTANT: If a transition is triggered resulting in this callback, the GPS
|
||||
* subsystem will wake up the application processor, if its in suspend state.
|
||||
*/
|
||||
typedef void (*gps_geofence_transition_callback) (int32_t geofence_id, GpsLocation* location,
|
||||
int32_t transition, GpsUtcTime timestamp);
|
||||
|
||||
/**
|
||||
* The callback associated with the availablity of the GPS system for geofencing
|
||||
* monitoring. If the GPS system determines that it cannot monitor geofences
|
||||
* because of lack of reliability or unavailability of the GPS signals, it will
|
||||
* call this callback with GPS_GEOFENCE_UNAVAILABLE parameter.
|
||||
*
|
||||
* Parameters:
|
||||
* status - GPS_GEOFENCE_UNAVAILABLE or GPS_GEOFENCE_AVAILABLE.
|
||||
* last_location - Last known location.
|
||||
*/
|
||||
typedef void (*gps_geofence_status_callback) (int32_t status, GpsLocation* last_location);
|
||||
|
||||
typedef struct {
|
||||
gps_geofence_callback geofence_callback;
|
||||
gps_create_thread create_thread_cb;
|
||||
} GpsGeofenceCallbacks;
|
||||
|
||||
/** Extended interface for GPS_Geofencing support */
|
||||
typedef struct {
|
||||
/** set to sizeof(GpsGeofencingInterface) */
|
||||
size_t size;
|
||||
|
||||
/**
|
||||
* Opens the geofence interface and provides the callback routines
|
||||
* to the implemenation of this interface.
|
||||
*/
|
||||
void (*init)( GpsGeoFenceCallbacks* callbacks );
|
||||
|
||||
/**
|
||||
* Add a geofence area. This api currently supports circular geofences.
|
||||
* Parameters:
|
||||
* geofence_id - The id for the geofence. If a geofence with this id
|
||||
already exists, an error value (-1) should be returned.
|
||||
* latitude, longtitude, radius_meters - The lat, long and radius
|
||||
* (in meters) for the geofence
|
||||
* last_transition - The current state of the geofence. For example, if
|
||||
* the system already knows that the user is inside the geofence,
|
||||
* this will be set to GPS_GEOFENCE_ENTERED. In most cases, it
|
||||
* will be GPS_GEOFENCE_UNCERTAIN.
|
||||
* monitor_transition - Which transitions to monitor. Bitwise OR of
|
||||
* GPS_GEOFENCE_ENTERED, GPS_GEOFENCE_EXITED and
|
||||
* GPS_GEOFENCE_UNCERTAIN.
|
||||
* notification_responsiveness_ms - Defines the best-effort description
|
||||
* of how soon should the callback be called when the transition
|
||||
* associated with the Geofence is triggered. For instance, if set
|
||||
* to 1000 millseconds with GPS_GEOFENCE_ENTERED, the callback
|
||||
* should be called 1000 milliseconds within entering the geofence.
|
||||
* This parameter is defined in milliseconds.
|
||||
* NOTE: This is not to be confused with the rate that the GPS is
|
||||
* polled at. It is acceptable to dynamically vary the rate of
|
||||
* sampling the GPS for power-saving reasons; thus the rate of
|
||||
* sampling may be faster or slower than this.
|
||||
* unknown_timer_ms - The time limit after which the UNCERTAIN transition
|
||||
* should be triggered. This paramter is defined in milliseconds.
|
||||
* See above for a detailed explanation.
|
||||
* Return value: 0 on success, -1 on error.
|
||||
*/
|
||||
int (*add_geofence_area) (int32_t geofence_id, double latitude,
|
||||
double longitude, double radius_meters,
|
||||
int last_transition, int monitor_transitions,
|
||||
int notification_responsiveness_ms,
|
||||
int unknown_timer_ms);
|
||||
|
||||
/**
|
||||
* Pause monitoring a particular geofence.
|
||||
* Parameters:
|
||||
* geofence_id - The id for the geofence.
|
||||
*
|
||||
* Return value: 0 on success, -1 on error.
|
||||
*/
|
||||
int (*pause_geofence) (int32_t geofence_id);
|
||||
|
||||
/**
|
||||
* Resume monitoring a particular geofence.
|
||||
* Parameters:
|
||||
* geofence_id - The id for the geofence.
|
||||
* monitor_transitions - Which transitions to monitor. Bitwise OR of
|
||||
* GPS_GEOFENCE_ENTERED, GPS_GEOFENCE_EXITED and
|
||||
* GPS_GEOFENCE_UNCERTAIN.
|
||||
* This supersedes the value associated provided in the
|
||||
* add_geofence_area call.
|
||||
*
|
||||
* Return value: 0 on success, -1 on error.
|
||||
*
|
||||
*/
|
||||
int (*resume_geofence) (int32_t geofence_id, int monitor_transitions);
|
||||
|
||||
/**
|
||||
* Remove a geofence area
|
||||
* Parameter:
|
||||
* geofence_id - The id for the geofence.
|
||||
* Return value: 0 on success, -1 on error.
|
||||
*/
|
||||
int (*remove_geofence_area) (int32_t geofence_id);
|
||||
} GpsGeofencingInterface;
|
||||
__END_DECLS
|
||||
|
||||
#endif /* ANDROID_INCLUDE_HARDWARE_GPS_H */
|
||||
|
|
Loading…
Reference in a new issue