summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/GonkGPSGeolocationProvider.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/GonkGPSGeolocationProvider.h')
-rw-r--r--dom/system/gonk/GonkGPSGeolocationProvider.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/dom/system/gonk/GonkGPSGeolocationProvider.h b/dom/system/gonk/GonkGPSGeolocationProvider.h
new file mode 100644
index 000000000..514398edf
--- /dev/null
+++ b/dom/system/gonk/GonkGPSGeolocationProvider.h
@@ -0,0 +1,103 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* Copyright 2012 Mozilla Foundation and Mozilla contributors
+ *
+ * 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 GonkGPSGeolocationProvider_h
+#define GonkGPSGeolocationProvider_h
+
+#include <hardware/gps.h> // for GpsInterface
+#include "nsCOMPtr.h"
+#include "nsIGeolocationProvider.h"
+#include "nsIObserver.h"
+#include "nsIDOMGeoPosition.h"
+#include "nsISettingsService.h"
+
+class nsIThread;
+
+#define GONK_GPS_GEOLOCATION_PROVIDER_CID \
+{ 0x48525ec5, 0x5a7f, 0x490a, { 0x92, 0x77, 0xba, 0x66, 0xe0, 0xd2, 0x2c, 0x8b } }
+
+#define GONK_GPS_GEOLOCATION_PROVIDER_CONTRACTID \
+"@mozilla.org/gonk-gps-geolocation-provider;1"
+
+class GonkGPSGeolocationProvider : public nsIGeolocationProvider
+ , public nsIObserver
+ , public nsISettingsServiceCallback
+{
+public:
+ NS_DECL_THREADSAFE_ISUPPORTS
+ NS_DECL_NSIGEOLOCATIONPROVIDER
+ NS_DECL_NSIOBSERVER
+ NS_DECL_NSISETTINGSSERVICECALLBACK
+
+ static already_AddRefed<GonkGPSGeolocationProvider> GetSingleton();
+
+private:
+
+ /* Client should use GetSingleton() to get the provider instance. */
+ GonkGPSGeolocationProvider();
+ GonkGPSGeolocationProvider(const GonkGPSGeolocationProvider &);
+ GonkGPSGeolocationProvider & operator = (const GonkGPSGeolocationProvider &);
+ virtual ~GonkGPSGeolocationProvider();
+
+ static void LocationCallback(GpsLocation* location);
+ static void StatusCallback(GpsStatus* status);
+ static void SvStatusCallback(GpsSvStatus* sv_info);
+ static void NmeaCallback(GpsUtcTime timestamp, const char* nmea, int length);
+ static void SetCapabilitiesCallback(uint32_t capabilities);
+ static void AcquireWakelockCallback();
+ static void ReleaseWakelockCallback();
+ static pthread_t CreateThreadCallback(const char* name, void (*start)(void*), void* arg);
+ static void RequestUtcTimeCallback();
+
+ static GpsCallbacks mCallbacks;
+
+ void Init();
+ void StartGPS();
+ void ShutdownGPS();
+ void InjectLocation(double latitude, double longitude, float accuracy);
+ void RequestSettingValue(const char* aKey);
+
+ const GpsInterface* GetGPSInterface();
+
+ static GonkGPSGeolocationProvider* sSingleton;
+
+ bool mStarted;
+
+ bool mSupportsScheduling;
+ bool mObservingSettingsChange;
+ bool mSupportsSingleShot;
+ bool mSupportsTimeInjection;
+
+ const GpsInterface* mGpsInterface;
+ nsCOMPtr<nsIGeolocationUpdate> mLocationCallback;
+ nsCOMPtr<nsIThread> mInitThread;
+ nsCOMPtr<nsIGeolocationProvider> mNetworkLocationProvider;
+ nsCOMPtr<nsIDOMGeoPosition> mLastGPSPosition;
+
+ class NetworkLocationUpdate : public nsIGeolocationUpdate
+ {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIGEOLOCATIONUPDATE
+
+ NetworkLocationUpdate() {}
+
+ private:
+ virtual ~NetworkLocationUpdate() {}
+ };
+};
+
+#endif /* GonkGPSGeolocationProvider_h */