2012-01-19 18:53:51 +04:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2012-07-20 13:10:44 +04:00
|
|
|
/* 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.
|
|
|
|
*/
|
|
|
|
|
2012-01-19 18:53:51 +04:00
|
|
|
#ifndef GonkGPSGeolocationProvider_h
|
|
|
|
#define GonkGPSGeolocationProvider_h
|
|
|
|
|
|
|
|
#include <hardware/gps.h> // for GpsInterface
|
2012-07-17 04:38:46 +04:00
|
|
|
#include "nsCOMPtr.h"
|
2012-01-19 18:53:51 +04:00
|
|
|
#include "nsIGeolocationProvider.h"
|
2014-03-29 11:18:11 +04:00
|
|
|
#include "nsIObserver.h"
|
2014-08-22 15:37:00 +04:00
|
|
|
#include "nsIDOMGeoPosition.h"
|
2014-04-11 18:28:01 +04:00
|
|
|
#include "nsISettingsService.h"
|
2012-01-19 18:53:51 +04:00
|
|
|
|
2012-07-17 04:38:46 +04:00
|
|
|
class nsIThread;
|
|
|
|
|
2012-10-15 10:40:51 +04:00
|
|
|
#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"
|
|
|
|
|
2012-01-19 18:53:51 +04:00
|
|
|
class GonkGPSGeolocationProvider : public nsIGeolocationProvider
|
2014-03-29 11:18:11 +04:00
|
|
|
, public nsIObserver
|
2012-10-23 11:18:11 +04:00
|
|
|
, public nsISettingsServiceCallback
|
2012-01-19 18:53:51 +04:00
|
|
|
{
|
|
|
|
public:
|
2013-07-19 06:21:20 +04:00
|
|
|
NS_DECL_THREADSAFE_ISUPPORTS
|
2012-01-19 18:53:51 +04:00
|
|
|
NS_DECL_NSIGEOLOCATIONPROVIDER
|
2014-03-29 11:18:11 +04:00
|
|
|
NS_DECL_NSIOBSERVER
|
2012-10-23 11:18:11 +04:00
|
|
|
NS_DECL_NSISETTINGSSERVICECALLBACK
|
2012-01-19 18:53:51 +04:00
|
|
|
|
|
|
|
static already_AddRefed<GonkGPSGeolocationProvider> GetSingleton();
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
/* Client should use GetSingleton() to get the provider instance. */
|
|
|
|
GonkGPSGeolocationProvider();
|
|
|
|
GonkGPSGeolocationProvider(const GonkGPSGeolocationProvider &);
|
|
|
|
GonkGPSGeolocationProvider & operator = (const GonkGPSGeolocationProvider &);
|
2014-03-22 11:42:55 +04:00
|
|
|
virtual ~GonkGPSGeolocationProvider();
|
2012-01-19 18:53:51 +04:00
|
|
|
|
2012-07-17 04:38:46 +04:00
|
|
|
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();
|
2012-10-04 06:00:59 +04:00
|
|
|
void ShutdownGPS();
|
2014-03-22 11:42:55 +04:00
|
|
|
void InjectLocation(double latitude, double longitude, float accuracy);
|
2014-08-06 10:41:56 +04:00
|
|
|
void RequestSettingValue(const char* aKey);
|
2012-07-17 04:38:46 +04:00
|
|
|
|
2012-01-19 18:53:51 +04:00
|
|
|
const GpsInterface* GetGPSInterface();
|
|
|
|
|
|
|
|
static GonkGPSGeolocationProvider* sSingleton;
|
|
|
|
|
|
|
|
bool mStarted;
|
2012-07-17 04:38:46 +04:00
|
|
|
|
|
|
|
bool mSupportsScheduling;
|
2015-02-02 04:56:56 +03:00
|
|
|
bool mObservingSettingsChange;
|
2012-07-17 04:38:46 +04:00
|
|
|
bool mSupportsSingleShot;
|
|
|
|
bool mSupportsTimeInjection;
|
|
|
|
|
2012-01-19 18:53:51 +04:00
|
|
|
const GpsInterface* mGpsInterface;
|
|
|
|
nsCOMPtr<nsIGeolocationUpdate> mLocationCallback;
|
2012-07-17 04:38:46 +04:00
|
|
|
nsCOMPtr<nsIThread> mInitThread;
|
2014-03-22 11:42:55 +04:00
|
|
|
nsCOMPtr<nsIGeolocationProvider> mNetworkLocationProvider;
|
2014-08-22 15:37:00 +04:00
|
|
|
nsCOMPtr<nsIDOMGeoPosition> mLastGPSPosition;
|
2014-03-22 11:42:55 +04:00
|
|
|
|
|
|
|
class NetworkLocationUpdate : public nsIGeolocationUpdate
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_NSIGEOLOCATIONUPDATE
|
|
|
|
|
|
|
|
NetworkLocationUpdate() {}
|
|
|
|
|
|
|
|
private:
|
|
|
|
virtual ~NetworkLocationUpdate() {}
|
|
|
|
};
|
2012-01-19 18:53:51 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* GonkGPSGeolocationProvider_h */
|