An extension of original API for working with GPS devices.

Revision:
8:47fa213225c3
Child:
9:708266cd594b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GPSGeofence.h	Tue Jun 13 15:19:49 2017 +0000
@@ -0,0 +1,85 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2014 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __GPS_GEOFENCE_H__
+#define __GPS_GEOFENCE_H__
+
+class GPSProvider;
+
+class GPSGeofence {
+public:
+    enum {
+        GEOFENCE_TRANSITION_DWELL   = 1,
+        GEOFENCE_TRANSITION_ENTER   = 2,
+        GEOFENCE_TRANSITION_EXIT    = 4,
+    };
+    
+    static const int NEVER_EXPIRE = -1;
+    
+    static const int GEOFENCE_ID_MAX_SIZE = 32;
+    
+    /** 
+     * Construct a GPSGeofence instance. 
+     */ 
+    GPSGeofence() :
+        _expirationDuration(-1),
+        _notificationResponsiveness(0),
+        _transitionTypes(0) {
+        
+        memset(_geofenceId, 0, GEOFENCE_ID_MAX_SIZE);
+    }
+    
+    virtual void setGeofenceRegion(GPSProvider::LocationType_t lat,
+                                   GPSProvider::LocationType_t lon,
+                                   GPSProvider::LocationType_t radius) {
+        _lat = lat;
+        _lon = lon;
+        _radius = radius;
+    }
+    
+    virtual void setExpirationDuration (long durationMillis) = 0;
+    
+    virtual void setNotificationResponsiveness (int notificationResponsivenessMs) {
+        _notificationResponsiveness = notificationResponsivenessMs;
+    }
+    
+    virtual void setGeofenceId(const char *geofenceId) {
+        if(strlen(geofenceId) > GEOFENCE_ID_MAX_SIZE) {
+            return;
+        }
+        memcpy(_geofenceId, geofenceId, strlen(geofenceId));
+    }
+    
+    virtual void setTransitionTypes(int transitionTypes) {
+        _transitionTypes = transitionTypes;
+    }
+
+protected:
+    char                        _geofenceId[GEOFENCE_ID_MAX_SIZE];
+    GPSProvider::LocationType_t _lat;
+    GPSProvider::LocationType_t _lon;
+    GPSProvider::LocationType_t _radius;
+    long                        _expirationDuration;
+    int                         _notificationResponsiveness;
+    int                         _transitionTypes;
+
+private:
+    /* disallow copy constructor and assignment operators */
+    GPSGeofence(const GPSGeofence&);
+    GPSGeofence & operator= (const GPSGeofence&);
+};
+
+#endif /* __GPS_GEOFENCE_H__ */