author | Doug Turner <dougt@dougt.org> |
Tue, 20 Mar 2012 14:46:14 -0700 | |
changeset 89881 | 7fa8c16f77bc52d104792b9cb7fcade2b80e51de |
parent 89880 | 4ceeaf9d5c2eee6f27f5208806905cc7348b5d48 |
child 89882 | b1d7ca11a86d098b469c83ca57f855bc351d5bd6 |
push id | 22293 |
push user | mlamouri@mozilla.com |
push date | Wed, 21 Mar 2012 10:30:54 +0000 |
treeherder | mozilla-central@f10862ac3217 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jdm |
bugs | 735330 |
milestone | 14.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -91,18 +91,16 @@ #include "nsIGeolocationProvider.h" #include "mozilla/dom/PMemoryReportRequestChild.h" #ifdef MOZ_PERMISSIONS #include "nsPermission.h" #include "nsPermissionManager.h" #endif -#include "nsDeviceMotion.h" - #if defined(MOZ_WIDGET_ANDROID) #include "APKOpen.h" #endif #ifdef XP_WIN #include <process.h> #define getpid _getpid #endif @@ -737,38 +735,16 @@ ContentChild::RecvAddPermission(const IP nsPermissionManager::eNotify, nsPermissionManager::eNoDBOperation); #endif return true; } bool -ContentChild::RecvDeviceMotionChanged(const long int& type, - const double& x, const double& y, - const double& z) -{ - nsCOMPtr<nsIDeviceMotionUpdate> dmu = - do_GetService(NS_DEVICE_MOTION_CONTRACTID); - if (dmu) - dmu->DeviceMotionChanged(type, x, y, z); - return true; -} - -bool -ContentChild::RecvNeedsCalibration() -{ - nsCOMPtr<nsIDeviceMotionUpdate> dmu = - do_GetService(NS_DEVICE_MOTION_CONTRACTID); - if (dmu) - dmu->NeedsCalibration(); - return true; -} - -bool ContentChild::RecvScreenSizeChanged(const gfxIntSize& size) { #ifdef ANDROID mScreenSize = size; #else NS_RUNTIMEABORT("Message currently only expected on android"); #endif return true;
--- a/dom/ipc/ContentChild.h +++ b/dom/ipc/ContentChild.h @@ -153,22 +153,16 @@ public: virtual bool RecvNotifyAlertsObserver(const nsCString& aType, const nsString& aData); virtual bool RecvAsyncMessage(const nsString& aMsg, const nsString& aJSON); virtual bool RecvGeolocationUpdate(const GeoPosition& somewhere); virtual bool RecvAddPermission(const IPC::Permission& permission); - virtual bool RecvDeviceMotionChanged(const long int& type, - const double& x, const double& y, - const double& z); - - virtual bool RecvNeedsCalibration(); - virtual bool RecvScreenSizeChanged(const gfxIntSize &size); virtual bool RecvFlushMemory(const nsString& reason); virtual bool RecvActivateA11y(); virtual bool RecvGarbageCollect(); virtual bool RecvCycleCollect();
--- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -91,17 +91,16 @@ #include "nsExceptionHandler.h" #endif #include "mozilla/dom/ExternalHelperAppParent.h" #include "mozilla/dom/StorageParent.h" #include "mozilla/hal_sandbox/PHalParent.h" #include "mozilla/Services.h" #include "mozilla/unused.h" -#include "nsDeviceMotion.h" #include "mozilla/Util.h" #include "nsIMemoryReporter.h" #include "nsMemoryReporterManager.h" #include "mozilla/dom/PMemoryReportRequestParent.h" #ifdef ANDROID #include "gfxAndroidPlatform.h" @@ -332,17 +331,16 @@ ContentParent::ActorDestroy(ActorDestroy // remove the global remote preferences observers nsCOMPtr<nsIPrefBranch> prefs (do_GetService(NS_PREFSERVICE_CONTRACTID)); if (prefs) { prefs->RemoveObserver("", this); } RecvRemoveGeolocationListener(); - RecvRemoveDeviceMotionListener(); nsCOMPtr<nsIThreadInternal> threadInt(do_QueryInterface(NS_GetCurrentThread())); if (threadInt) threadInt->RemoveObserver(this); if (mRunToCompletionDepth) mRunToCompletionDepth = 0; @@ -680,21 +678,20 @@ ContentParent::RecvGetShowPasswordSettin #ifdef MOZ_WIDGET_ANDROID NS_ASSERTION(AndroidBridge::Bridge() != nsnull, "AndroidBridge is not available"); if (AndroidBridge::Bridge() != nsnull) *showPassword = AndroidBridge::Bridge()->GetShowPasswordSetting(); #endif return true; } -NS_IMPL_THREADSAFE_ISUPPORTS4(ContentParent, +NS_IMPL_THREADSAFE_ISUPPORTS3(ContentParent, nsIObserver, nsIThreadObserver, - nsIDOMGeoPositionCallback, - nsIDeviceMotionListener) + nsIDOMGeoPositionCallback) NS_IMETHODIMP ContentParent::Observe(nsISupports* aSubject, const char* aTopic, const PRUnichar* aData) { if (!strcmp(aTopic, "xpcom-shutdown") && mSubprocess) { Close(); @@ -1211,36 +1208,16 @@ ContentParent::RecvRemoveGeolocationList return true; } geo->ClearWatch(mGeolocationWatchID); mGeolocationWatchID = -1; } return true; } -bool -ContentParent::RecvAddDeviceMotionListener() -{ - nsCOMPtr<nsIDeviceMotion> dm = - do_GetService(NS_DEVICE_MOTION_CONTRACTID); - if (dm) - dm->AddListener(this); - return true; -} - -bool -ContentParent::RecvRemoveDeviceMotionListener() -{ - nsCOMPtr<nsIDeviceMotion> dm = - do_GetService(NS_DEVICE_MOTION_CONTRACTID); - if (dm) - dm->RemoveListener(this); - return true; -} - NS_IMETHODIMP ContentParent::HandleEvent(nsIDOMGeoPosition* postion) { unused << SendGeolocationUpdate(GeoPosition(postion)); return NS_OK; } bool @@ -1273,30 +1250,10 @@ ContentParent::RecvScriptError(const nsS aLineNumber, aColNumber, aFlags, aCategory.get()); if (NS_FAILED(rv)) return true; svc->LogMessage(msg); return true; } -NS_IMETHODIMP -ContentParent::OnMotionChange(nsIDeviceMotionData *aDeviceData) { - PRUint32 type; - double x, y, z; - aDeviceData->GetType(&type); - aDeviceData->GetX(&x); - aDeviceData->GetY(&y); - aDeviceData->GetZ(&z); - - unused << SendDeviceMotionChanged(type, x, y, z); - return NS_OK; -} - -NS_IMETHODIMP -ContentParent::NeedsCalibration() { - unused << SendNeedsCalibration(); - return NS_OK; -} - - } // namespace dom } // namespace mozilla
--- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -46,17 +46,16 @@ #include "mozilla/ipc/GeckoChildProcessHost.h" #include "nsIObserver.h" #include "nsIThreadInternal.h" #include "nsNetUtil.h" #include "nsIPrefService.h" #include "nsIPermissionManager.h" #include "nsIDOMGeoPositionCallback.h" -#include "nsIDeviceMotion.h" #include "nsIMemoryReporter.h" #include "nsCOMArray.h" class nsFrameMessageManager; namespace mozilla { namespace ipc { class TestShellParent; @@ -66,31 +65,29 @@ namespace dom { class TabParent; class PStorageParent; class ContentParent : public PContentParent , public nsIObserver , public nsIThreadObserver , public nsIDOMGeoPositionCallback - , public nsIDeviceMotionListener { private: typedef mozilla::ipc::GeckoChildProcessHost GeckoChildProcessHost; typedef mozilla::ipc::TestShellParent TestShellParent; public: static ContentParent* GetNewOrUsed(); static void GetAll(nsTArray<ContentParent*>& aArray); NS_DECL_ISUPPORTS NS_DECL_NSIOBSERVER NS_DECL_NSITHREADOBSERVER NS_DECL_NSIDOMGEOPOSITIONCALLBACK - NS_DECL_NSIDEVICEMOTIONLISTENER TabParent* CreateTab(PRUint32 aChromeFlags); TestShellParent* CreateTestShell(); bool DestroyTestShell(TestShellParent* aTestShell); TestShellParent* GetTestShellSingleton(); void ReportChildAlreadyBlocked(); @@ -213,18 +210,16 @@ private: virtual bool RecvLoadURIExternal(const IPC::URI& uri); virtual bool RecvSyncMessage(const nsString& aMsg, const nsString& aJSON, InfallibleTArray<nsString>* aRetvals); virtual bool RecvAsyncMessage(const nsString& aMsg, const nsString& aJSON); virtual bool RecvAddGeolocationListener(); virtual bool RecvRemoveGeolocationListener(); - virtual bool RecvAddDeviceMotionListener(); - virtual bool RecvRemoveDeviceMotionListener(); virtual bool RecvConsoleMessage(const nsString& aMessage); virtual bool RecvScriptError(const nsString& aMessage, const nsString& aSourceName, const nsString& aSourceLine, const PRUint32& aLineNumber, const PRUint32& aColNumber, const PRUint32& aFlags,
--- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -128,19 +128,16 @@ child: NotifyAlertsObserver(nsCString topic, nsString data); GeolocationUpdate(GeoPosition somewhere); // nsIPermissionManager messages AddPermission(Permission permission); - DeviceMotionChanged(long type, double x, double y, double z); - NeedsCalibration(); - ScreenSizeChanged(gfxIntSize size); FlushMemory(nsString reason); GarbageCollect(); CycleCollect(); /** @@ -195,18 +192,16 @@ parent: nsString name); PExternalHelperApp(URI uri, nsCString aMimeContentType, nsCString aContentDisposition, bool aForceSave, PRInt64 aContentLength, URI aReferrer); AddGeolocationListener(); RemoveGeolocationListener(); - AddDeviceMotionListener(); - RemoveDeviceMotionListener(); ConsoleMessage(nsString message); ScriptError(nsString message, nsString sourceName, nsString sourceLine, PRUint32 lineNumber, PRUint32 colNumber, PRUint32 flags, nsCString category); // nsIPermissionManager messages sync ReadPermissions() returns (Permission[] permissions);
--- a/dom/system/Makefile.in +++ b/dom/system/Makefile.in @@ -48,20 +48,16 @@ LIBXUL_LIBRARY = 1 ifneq (,$(filter qt gtk2,$(MOZ_WIDGET_TOOLKIT))) DIRS = unix endif ifneq (,$(filter windows,$(MOZ_WIDGET_TOOLKIT))) DIRS = windows endif -ifneq (,$(filter cocoa,$(MOZ_WIDGET_TOOLKIT))) -DIRS = cocoa -endif - ifneq (,$(filter android,$(MOZ_WIDGET_TOOLKIT))) DIRS = android endif ifdef MOZ_B2G_RIL DIRS += gonk endif @@ -91,11 +87,11 @@ EXPORTS = \ LOCAL_INCLUDES += -I$(topsrcdir)/content/events/src include $(topsrcdir)/config/config.mk # we don't want the shared lib, but we want to force the creation of a static lib. LIBXUL_LIBRARY = 1 FORCE_STATIC_LIB = 1 EXPORT_LIBRARY = 1 - +include $(topsrcdir)/ipc/chromium/chromium-config.mk include $(topsrcdir)/config/rules.mk
--- a/dom/system/android/Makefile.in +++ b/dom/system/android/Makefile.in @@ -48,17 +48,16 @@ LIBRARY_NAME = domsystemandroid_s LIBXUL_LIBRARY = 1 FORCE_STATIC_LIB = 1 EXPORT_LIBRARY = 1 include $(topsrcdir)/config/config.mk include $(topsrcdir)/ipc/chromium/chromium-config.mk CPPSRCS = \ - nsDeviceMotionSystem.cpp \ AndroidLocationProvider.cpp \ nsHapticFeedback.cpp \ $(NULL) LOCAL_INCLUDES += -I$(topsrcdir)/dom/src/geolocation \ -I$(topsrcdir)/content/events/src $(NULL)
deleted file mode 100644 --- a/dom/system/android/nsDeviceMotionSystem.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- - * ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2010 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Michael Wu <mwu@mozilla.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "mozilla/dom/ContentChild.h" -#include "nsDeviceMotionSystem.h" - -#include "AndroidBridge.h" -#include "nsXULAppAPI.h" - -using namespace mozilla; - -extern nsDeviceMotionSystem *gDeviceMotionSystem; - -nsDeviceMotionSystem::nsDeviceMotionSystem() -{ - gDeviceMotionSystem = this; -} - -nsDeviceMotionSystem::~nsDeviceMotionSystem() -{ -} - -void nsDeviceMotionSystem::Startup() -{ - if (XRE_GetProcessType() == GeckoProcessType_Default) - AndroidBridge::Bridge()->EnableDeviceMotion(true); - else - mozilla::dom::ContentChild::GetSingleton()-> - SendAddDeviceMotionListener(); -} - -void nsDeviceMotionSystem::Shutdown() -{ - if (XRE_GetProcessType() == GeckoProcessType_Default) - AndroidBridge::Bridge()->EnableDeviceMotion(false); - else - mozilla::dom::ContentChild::GetSingleton()-> - SendRemoveDeviceMotionListener(); -}
deleted file mode 100644 --- a/dom/system/android/nsDeviceMotionSystem.h +++ /dev/null @@ -1,54 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2010 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Michael Wu <mwu@mozilla.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsDeviceMotionSystem_h -#define nsDeviceMotionSystem_h - -#include "nsDeviceMotion.h" - -class nsDeviceMotionSystem : public nsDeviceMotion -{ -public: - nsDeviceMotionSystem(); - virtual ~nsDeviceMotionSystem(); - -private: - virtual void Startup(); - virtual void Shutdown(); -}; - -#endif /* nsDeviceMotionSystem_h */ -
deleted file mode 100644 --- a/dom/system/cocoa/Makefile.in +++ /dev/null @@ -1,62 +0,0 @@ -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (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.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is mozilla.org build system. -# -# The Initial Developer of the Original Code is Mozilla Foundation -# Portions created by the Initial Developer are Copyright (C) 2010 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mike Kristoffersen <mikek@mikek.dk> -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -DEPTH = ../../.. -topsrcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -include $(DEPTH)/config/autoconf.mk - -MODULE = dom -LIBRARY_NAME = domsystemcocoa_s - -# we don't want the shared lib, but we want to force the creation of a static lib. -LIBXUL_LIBRARY = 1 -FORCE_STATIC_LIB = 1 -EXPORT_LIBRARY = 1 - -# We fire the nsDOMDeviceAcceleration -LOCAL_INCLUDES += -I$(topsrcdir)/content/events/src - -include $(topsrcdir)/config/config.mk - -CMMSRCS = \ - smslib.mm \ - nsDeviceMotionSystem.mm \ - $(NULL) - -include $(topsrcdir)/config/rules.mk
deleted file mode 100644 --- a/dom/system/cocoa/nsDeviceMotionSystem.h +++ /dev/null @@ -1,59 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Doug Turner <dougt@dougt.org> - * Portions created by the Initial Developer are Copyright (C) 2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsDeviceMotionSystem_h -#define nsDeviceMotionSystem_h - -#include <IOKit/IOKitLib.h> -#include <mach/mach_port.h> - -#include "nsDeviceMotion.h" - -class nsDeviceMotionSystem : public nsDeviceMotion -{ - public: - nsDeviceMotionSystem(); - ~nsDeviceMotionSystem(); - - void Startup(); - void Shutdown(); - - io_connect_t mSmsConnection; - nsCOMPtr<nsITimer> mUpdateTimer; - static void UpdateHandler(nsITimer *aTimer, void *aClosure); -}; - -#endif
deleted file mode 100644 --- a/dom/system/cocoa/nsDeviceMotionSystem.mm +++ /dev/null @@ -1,96 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Doug Turner <dougt@dougt.org> - * Portions created by the Initial Developer are Copyright (C) 2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsDeviceMotionSystem.h" -#include "nsIServiceManager.h" -#include "stdlib.h" - -#include <sys/sysctl.h> -#include <sys/resource.h> -#include <sys/vm.h> - -#import "smslib.h" -#define MEAN_GRAVITY 9.80665 -#define DEFAULT_SENSOR_POLL 100 - -nsDeviceMotionSystem::nsDeviceMotionSystem() -{ -} - -nsDeviceMotionSystem::~nsDeviceMotionSystem() -{ -} - -void -nsDeviceMotionSystem::UpdateHandler(nsITimer *aTimer, void *aClosure) -{ - nsDeviceMotionSystem *self = reinterpret_cast<nsDeviceMotionSystem *>(aClosure); - if (!self) { - NS_ERROR("no self"); - return; - } - sms_acceleration accel; - smsGetData(&accel); - - self->DeviceMotionChanged(nsIDeviceMotionData::TYPE_ACCELERATION, - accel.x * MEAN_GRAVITY, - accel.y * MEAN_GRAVITY, - accel.z * MEAN_GRAVITY); -} - -void nsDeviceMotionSystem::Startup() -{ - smsStartup(nil, nil); - smsLoadCalibration(); - - mUpdateTimer = do_CreateInstance("@mozilla.org/timer;1"); - if (mUpdateTimer) - mUpdateTimer->InitWithFuncCallback(UpdateHandler, - this, - DEFAULT_SENSOR_POLL, - nsITimer::TYPE_REPEATING_SLACK); -} - -void nsDeviceMotionSystem::Shutdown() -{ - if (mUpdateTimer) { - mUpdateTimer->Cancel(); - mUpdateTimer = nsnull; - } - - smsShutdown(); -} -
deleted file mode 100644 --- a/dom/system/cocoa/nsHapticFeedback.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- - * ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Brad Lassey <blassey@mozilla.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsHapticFeedback.h" - -NS_IMPL_ISUPPORTS1(nsHapticFeedback, nsIHapticFeedback) - -NS_IMETHODIMP -nsHapticFeedback::PerformSimpleAction(PRInt32 aType) -{ - // Todo - return NS_OK; -}
deleted file mode 100644 --- a/dom/system/cocoa/nsHapticFeedback.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- - * ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Brad Lassey <blassey@mozilla.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsIHapticFeedback.h" - -class nsHapticFeedback : public nsIHapticFeedback -{ -public: - NS_DECL_ISUPPORTS - NS_DECL_NSIHAPTICFEEDBACK -};
--- a/dom/system/nsDeviceMotion.cpp +++ b/dom/system/nsDeviceMotion.cpp @@ -29,31 +29,34 @@ * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ +#include "mozilla/Hal.h" +#include "mozilla/HalSensor.h" + #include "nsDeviceMotion.h" #include "nsAutoPtr.h" #include "nsIDOMEvent.h" #include "nsIDOMWindow.h" #include "nsPIDOMWindow.h" #include "nsIDOMDocument.h" #include "nsIDOMEventTarget.h" #include "nsIServiceManager.h" #include "nsIPrivateDOMEvent.h" #include "nsIServiceManager.h" #include "nsIPrefService.h" -using mozilla::TimeStamp; -using mozilla::TimeDuration; +using namespace mozilla; +using namespace hal; // also see sDefaultSensorHint in mobile/android/base/GeckoAppShell.java #define DEFAULT_SENSOR_POLL 100 static const nsTArray<nsIDOMWindow*>::index_type NoIndex = nsTArray<nsIDOMWindow*>::NoIndex; class nsDeviceMotionData : public nsIDeviceMotionData @@ -111,22 +114,25 @@ NS_IMETHODIMP nsDeviceMotionData::GetY(d NS_IMETHODIMP nsDeviceMotionData::GetZ(double *aZ) { NS_ENSURE_ARG_POINTER(aZ); *aZ = mZ; return NS_OK; } -NS_IMPL_ISUPPORTS2(nsDeviceMotion, nsIDeviceMotion, nsIDeviceMotionUpdate) +NS_IMPL_ISUPPORTS1(nsDeviceMotion, nsIDeviceMotion) nsDeviceMotion::nsDeviceMotion() : mStarted(false), mEnabled(true) { + mLastDOMMotionEventTime = TimeStamp::Now(); + mLastAccuracy = SENSOR_ACCURACY_UNKNOWN; + nsCOMPtr<nsIPrefBranch> prefSrv = do_GetService(NS_PREFSERVICE_CONTRACTID); if (prefSrv) { bool bvalue; nsresult rv = prefSrv->GetBoolPref("device.motion.enabled", &bvalue); if (NS_SUCCEEDED(rv) && bvalue == false) mEnabled = false; } mLastDOMMotionEventTime = TimeStamp::Now(); @@ -214,21 +220,34 @@ NS_IMETHODIMP nsDeviceMotion::RemoveWind if (mWindowListeners.IndexOf(aWindow) == NoIndex) return NS_OK; mWindowListeners.RemoveElement(aWindow); StartDisconnectTimer(); return NS_OK; } -NS_IMETHODIMP -nsDeviceMotion::DeviceMotionChanged(PRUint32 type, double x, double y, double z) +void +nsDeviceMotion::Notify(const mozilla::hal::SensorData& aSensorData) { if (!mEnabled) - return NS_ERROR_NOT_INITIALIZED; + return; + + PRUint32 type = aSensorData.sensor(); + + double x = aSensorData.values()[0]; + double y = aSensorData.values()[1]; + double z = aSensorData.values()[2]; + + SensorAccuracyType accuracy = aSensorData.accuracy(); + + if (accuracy <= SENSOR_ACCURACY_LOW && mLastAccuracy >= SENSOR_ACCURACY_MED) { + FireNeedsCalibration(); + } + mLastAccuracy = accuracy; nsCOMArray<nsIDeviceMotionListener> listeners = mListeners; for (PRUint32 i = listeners.Count(); i > 0 ; ) { --i; nsRefPtr<nsDeviceMotionData> a = new nsDeviceMotionData(type, x, y, z); listeners[i]->OnMotionChange(a); } @@ -250,30 +269,29 @@ nsDeviceMotion::DeviceMotionChanged(PRUi nsCOMPtr<nsIDOMDocument> domdoc; windowListeners[i]->GetDocument(getter_AddRefs(domdoc)); if (domdoc) { nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(windowListeners[i]); if (type == nsIDeviceMotionData::TYPE_ACCELERATION || type == nsIDeviceMotionData::TYPE_LINEAR_ACCELERATION || - type == nsIDeviceMotionData::TYPE_GYROSCOPE ) + type == nsIDeviceMotionData::TYPE_GYROSCOPE) FireDOMMotionEvent(domdoc, target, type, x, y, z); else if (type == nsIDeviceMotionData::TYPE_ORIENTATION) FireDOMOrientationEvent(domdoc, target, x, y, z); } } - return NS_OK; } -NS_IMETHODIMP -nsDeviceMotion::NeedsCalibration() +void +nsDeviceMotion::FireNeedsCalibration() { if (!mEnabled) - return NS_ERROR_NOT_INITIALIZED; + return; nsCOMArray<nsIDeviceMotionListener> listeners = mListeners; for (PRUint32 i = listeners.Count(); i > 0 ; ) { --i; listeners[i]->NeedsCalibration(); } nsCOMArray<nsIDOMWindow> windowListeners; @@ -295,18 +313,16 @@ nsDeviceMotion::NeedsCalibration() nsCOMPtr<nsIDOMDocument> domdoc; windowListeners[i]->GetDocument(getter_AddRefs(domdoc)); if (domdoc) { nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(windowListeners[i]); FireNeedsCalibration(domdoc, target); } } - - return NS_OK; } void nsDeviceMotion::FireNeedsCalibration(nsIDOMDocument *domdoc, nsIDOMEventTarget *target) { nsCOMPtr<nsIDOMEvent> event; domdoc->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event)); @@ -404,11 +420,28 @@ nsDeviceMotion::FireDOMMotionEvent(nsIDO bool defaultActionEnabled = true; target->DispatchEvent(event, &defaultActionEnabled); mLastRotationRate = nsnull; mLastAccelerationIncluduingGravity = nsnull; mLastAcceleration = nsnull; mLastDOMMotionEventTime = TimeStamp::Now(); - } +void nsDeviceMotion::Startup() +{ + // Bug 734855 - we probably can make this finer grain + // based on the DOM APIs that are being invoked. + RegisterSensorObserver(SENSOR_ACCELERATION, this); + RegisterSensorObserver(SENSOR_ORIENTATION, this); + RegisterSensorObserver(SENSOR_LINEAR_ACCELERATION, this); + RegisterSensorObserver(SENSOR_GYROSCOPE, this); +} + +void nsDeviceMotion::Shutdown() +{ + UnregisterSensorObserver(SENSOR_ACCELERATION, this); + UnregisterSensorObserver(SENSOR_ORIENTATION, this); + UnregisterSensorObserver(SENSOR_LINEAR_ACCELERATION, this); + UnregisterSensorObserver(SENSOR_GYROSCOPE, this); +} +
--- a/dom/system/nsDeviceMotion.h +++ b/dom/system/nsDeviceMotion.h @@ -42,48 +42,52 @@ #include "nsCOMArray.h" #include "nsTArray.h" #include "nsCOMPtr.h" #include "nsITimer.h" #include "nsIDOMDeviceOrientationEvent.h" #include "nsIDOMDeviceMotionEvent.h" #include "nsDOMDeviceMotionEvent.h" #include "mozilla/TimeStamp.h" +#include "mozilla/HalSensor.h" + #define NS_DEVICE_MOTION_CID \ { 0xecba5203, 0x77da, 0x465a, \ { 0x86, 0x5e, 0x78, 0xb7, 0xaf, 0x10, 0xd8, 0xf7 } } #define NS_DEVICE_MOTION_CONTRACTID "@mozilla.org/devicemotion;1" class nsIDOMWindow; -class nsDeviceMotion : public nsIDeviceMotionUpdate +class nsDeviceMotion : public nsIDeviceMotion, public mozilla::hal::ISensorObserver { public: NS_DECL_ISUPPORTS NS_DECL_NSIDEVICEMOTION - NS_DECL_NSIDEVICEMOTIONUPDATE nsDeviceMotion(); virtual ~nsDeviceMotion(); + void Notify(const mozilla::hal::SensorData& aSensorData); + private: nsCOMArray<nsIDeviceMotionListener> mListeners; nsTArray<nsIDOMWindow*> mWindowListeners; void StartDisconnectTimer(); bool mStarted; nsCOMPtr<nsITimer> mTimeoutTimer; static void TimeoutHandler(nsITimer *aTimer, void *aClosure); protected: + void FireNeedsCalibration(); void FireNeedsCalibration(nsIDOMDocument *domdoc, nsIDOMEventTarget *target); void FireDOMOrientationEvent(class nsIDOMDocument *domDoc, class nsIDOMEventTarget *target, double alpha, double beta, @@ -91,20 +95,20 @@ private: void FireDOMMotionEvent(class nsIDOMDocument *domDoc, class nsIDOMEventTarget *target, PRUint32 type, double x, double y, double z); - virtual void Startup() = 0; - virtual void Shutdown() = 0; + void Startup(); + void Shutdown(); bool mEnabled; mozilla::TimeStamp mLastDOMMotionEventTime; + mozilla::hal::SensorAccuracyType mLastAccuracy; nsRefPtr<nsDOMDeviceAcceleration> mLastAcceleration; nsRefPtr<nsDOMDeviceAcceleration> mLastAccelerationIncluduingGravity; nsRefPtr<nsDOMDeviceRotationRate> mLastRotationRate; - }; #endif
--- a/dom/system/unix/Makefile.in +++ b/dom/system/unix/Makefile.in @@ -48,41 +48,31 @@ LIBRARY_NAME = domsystemunix_s LIBXUL_LIBRARY = 1 FORCE_STATIC_LIB = 1 EXPORT_LIBRARY = 1 include $(topsrcdir)/config/config.mk include $(topsrcdir)/ipc/chromium/chromium-config.mk -ifndef MOZ_ENABLE_QTMOBILITY -CPPSRCS = \ - nsDeviceMotionSystem.cpp \ - $(NULL) -endif - ifdef MOZ_MAEMO_LIBLOCATION CPPSRCS += MaemoLocationProvider.cpp LOCAL_INCLUDES += $(MOZ_PLATFORM_MAEMO_CFLAGS) \ -I$(topsrcdir)/dom/src/geolocation \ $(NULL) endif ifdef MOZ_PLATFORM_MAEMO CPPSRCS += nsHapticFeedback.cpp LOCAL_INCLUDES += $(MOZ_DBUS_CFLAGS) \ $(NULL) ifdef MOZ_ENABLE_QTMOBILITY -MOCSRCS += moc_QTMLocationProvider.cpp moc_nsQTMDeviceMotionSystem.cpp +MOCSRCS += moc_QTMLocationProvider.cpp CPPSRCS += $(MOCSRCS) \ QTMLocationProvider.cpp \ - nsQTMDeviceMotionSystem.cpp \ $(NULL) LOCAL_INCLUDES += $(MOZ_QT_CFLAGS) \ -I$(topsrcdir)/dom/src/geolocation \ $(NULL) endif endif -# We fire the nsDOMDeviceAcceleration -LOCAL_INCLUDES += -I$(topsrcdir)/content/events/src - include $(topsrcdir)/config/rules.mk
deleted file mode 100644 --- a/dom/system/unix/nsDeviceMotionSystem.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Mozilla Corporation. - * Portions created by the Initial Developer are Copyright (C) 2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Michael Ventnor <m.ventnor@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include <unistd.h> - -#include "mozilla/Util.h" - -#include "nsDeviceMotionSystem.h" -#include "nsIServiceManager.h" - -#define DEFAULT_SENSOR_POLL 100 - -using namespace mozilla; - -typedef struct { - const char* mPosition; - const char* mCalibrate; - nsAccelerometerSystemDriver mToken; -} AccelerometerData; - -static const AccelerometerData gAccelerometers[] = { - // MacBook - {"/sys/devices/platform/applesmc.768/position", - "/sys/devices/platform/applesmc.768/calibrate", - eAppleSensor}, - // Thinkpad - {"/sys/devices/platform/hdaps/position", - "/sys/devices/platform/hdaps/calibrate", - eIBMSensor}, - // Maemo Fremantle - {"/sys/class/i2c-adapter/i2c-3/3-001d/coord", - NULL, - eMaemoSensor}, - // HP Pavilion dv7 - {"/sys/devices/platform/lis3lv02d/position", - "/sys/devices/platform/lis3lv02d/calibrate", - eHPdv7Sensor}, -}; - -nsDeviceMotionSystem::nsDeviceMotionSystem() : - mPositionFile(NULL), - mCalibrateFile(NULL), - mType(eNoSensor) -{ -} - -nsDeviceMotionSystem::~nsDeviceMotionSystem() -{ -} - -void -nsDeviceMotionSystem::UpdateHandler(nsITimer *aTimer, void *aClosure) -{ - nsDeviceMotionSystem *self = reinterpret_cast<nsDeviceMotionSystem *>(aClosure); - if (!self) { - NS_ERROR("no self"); - return; - } - - float xf, yf, zf; - - switch (self->mType) { - case eAppleSensor: - { - int x, y, z, calibrate_x, calibrate_y; - fflush(self->mCalibrateFile); - rewind(self->mCalibrateFile); - - fflush(self->mPositionFile); - rewind(self->mPositionFile); - - if (fscanf(self->mCalibrateFile, "(%d, %d)", &calibrate_x, &calibrate_y) <= 0) - return; - - if (fscanf(self->mPositionFile, "(%d, %d, %d)", &x, &y, &z) <= 0) - return; - - // In applesmc: - // - the x calibration value is negated - // - a negative z actually means a correct-way-up computer - // - dividing by 255 gives us the intended value of -1 to 1 - xf = ((float)(x + calibrate_x)) / 255.0; - yf = ((float)(y - calibrate_y)) / 255.0; - zf = ((float)z) / -255.0; - break; - } - case eIBMSensor: - { - int x, y, calibrate_x, calibrate_y; - fflush(self->mCalibrateFile); - rewind(self->mCalibrateFile); - - fflush(self->mPositionFile); - rewind(self->mPositionFile); - - if (fscanf(self->mCalibrateFile, "(%d, %d)", &calibrate_x, &calibrate_y) <= 0) - return; - - if (fscanf(self->mPositionFile, "(%d, %d)", &x, &y) <= 0) - return; - - xf = ((float)(x - calibrate_x)) / 180.0; - yf = ((float)(y - calibrate_y)) / 180.0; - zf = 1.0f; - break; - } - case eMaemoSensor: - { - int x, y, z; - fflush(self->mPositionFile); - rewind(self->mPositionFile); - - if (fscanf(self->mPositionFile, "%d %d %d", &x, &y, &z) <= 0) - return; - - xf = ((float)x) / -1000.0; - yf = ((float)y) / -1000.0; - zf = ((float)z) / -1000.0; - break; - } - case eHPdv7Sensor: - { - int x, y, z, calibrate_x, calibrate_y, calibrate_z; - fflush(self->mCalibrateFile); - rewind(self->mCalibrateFile); - - fflush(self->mPositionFile); - rewind(self->mPositionFile); - - if (fscanf(self->mCalibrateFile, "(%d,%d,%d)", &calibrate_x, &calibrate_y, &calibrate_z) <= 0) - return; - - if (fscanf(self->mPositionFile, "(%d,%d,%d)", &x, &y, &z) <= 0) - return; - - // Example data: - // - // Calibration (-4,0,51) - // flat on the table (-5,-2,50) - // Tilted on its left side (-60,0,-4) - // Tilted on its right side (51,1,-1) - // upside down (-2,3,-60) - // - // So assuming the calibration data shows the acceleration - // (1G) measured with the notebook laying flat on the table - // it would mean that our best bet, is to ignore the z-axis - // calibration... We are still way off, but it's hard to - // see how to get better data without doing calibration with - // user intervention (like: Turn your notbook slowly around - // so every edge and the top and bottom points up in turn) - - xf = ((float)(x - calibrate_x)) / 60.0; - yf = ((float)(y - calibrate_y)) / 60.0; - zf = ((float)(z)) / 60.0; - break; - } - - case eNoSensor: - default: - return; - } - - self->DeviceMotionChanged(nsIDeviceMotionData::TYPE_ACCELERATION, xf, yf, zf ); -} - -void nsDeviceMotionSystem::Startup() -{ - // Accelerometers in Linux are used by reading a file (yay UNIX!), which is - // in a slightly different location depending on the driver. - for (unsigned int i = 0; i < ArrayLength(gAccelerometers); i++) { - if (!(mPositionFile = fopen(gAccelerometers[i].mPosition, "r"))) - continue; - - mType = gAccelerometers[i].mToken; - if (gAccelerometers[i].mCalibrate) { - mCalibrateFile = fopen(gAccelerometers[i].mCalibrate, "r"); - if (!mCalibrateFile) { - fclose(mPositionFile); - mPositionFile = nsnull; - return; - } - } - - break; - } - - if (mType == eNoSensor) - return; - - mUpdateTimer = do_CreateInstance("@mozilla.org/timer;1"); - if (mUpdateTimer) - mUpdateTimer->InitWithFuncCallback(UpdateHandler, - this, - DEFAULT_SENSOR_POLL, - nsITimer::TYPE_REPEATING_SLACK); -} - -void nsDeviceMotionSystem::Shutdown() -{ - if (mPositionFile) { - fclose(mPositionFile); - mPositionFile = nsnull; - } - - // Fun fact: writing to the calibrate file causes the - // driver to re-calibrate the accelerometer - if (mCalibrateFile) { - fclose(mCalibrateFile); - mCalibrateFile = nsnull; - } - - mType = eNoSensor; - - if (mUpdateTimer) { - mUpdateTimer->Cancel(); - mUpdateTimer = nsnull; - } -} -
deleted file mode 100644 --- a/dom/system/unix/nsDeviceMotionSystem.h +++ /dev/null @@ -1,71 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Mozilla Corporation. - * Portions created by the Initial Developer are Copyright (C) 2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Michael Ventnor <m.ventnor@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsDeviceMotionSystem_h -#define nsDeviceMotionSystem_h - -#include <unistd.h> -#include <stdio.h> -#include "nsDeviceMotion.h" - -enum nsAccelerometerSystemDriver -{ - eNoSensor, - eAppleSensor, - eIBMSensor, - eMaemoSensor, - eHPdv7Sensor -}; - -class nsDeviceMotionSystem : public nsDeviceMotion -{ - public: - nsDeviceMotionSystem(); - ~nsDeviceMotionSystem(); - - void Startup(); - void Shutdown(); - - FILE* mPositionFile; - FILE* mCalibrateFile; - nsAccelerometerSystemDriver mType; - - nsCOMPtr<nsITimer> mUpdateTimer; - static void UpdateHandler(nsITimer *aTimer, void *aClosure); -}; - -#endif
deleted file mode 100644 --- a/dom/system/unix/nsQTMDeviceMotionSystem.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- - * ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Oleg Romashin <romaxa@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "mozilla/dom/ContentChild.h" -#include "nsQTMDeviceMotionSystem.h" -#include <QObject> -#include <QtSensors/QAccelerometer> -#include <QtSensors/QRotationSensor> - -#include "nsXULAppAPI.h" - -using namespace mozilla; -using namespace QtMobility; - -bool -MozQAccelerometerSensorFilter::filter(QAccelerometerReading* reading) -{ - mSystem.DeviceMotionChanged(nsIDeviceMotionData::TYPE_ACCELERATION, - -reading->x(), - -reading->y(), - -reading->z()); - return true; -} - -bool -MozQRotationSensorFilter::filter(QRotationReading* reading) -{ - // QRotationReading class: - // - the rotation around z axis (alpha) is given as z in QRotationReading; - // - the rotation around x axis (beta) is given as x in QRotationReading; - // - the rotation around y axis (gamma) is given as y in QRotationReading; - // See: http://doc.qt.nokia.com/qtmobility-1.0/qrotationreading.html - mSystem.DeviceMotionChanged(nsIDeviceMotionData::TYPE_ORIENTATION, - reading->z(), - reading->x(), - reading->y()); - return true; -} - -nsDeviceMotionSystem::nsDeviceMotionSystem() -{ - if (XRE_GetProcessType() == GeckoProcessType_Default) { - mAccelerometer = new QAccelerometer(); - mAccelerometerFilter = new MozQAccelerometerSensorFilter(*this); - mAccelerometer->addFilter(mAccelerometerFilter); - mRotation = new QRotationSensor(); - mRotationFilter = new MozQRotationSensorFilter(*this); - mRotation->addFilter(mRotationFilter); - } -} - -nsDeviceMotionSystem::~nsDeviceMotionSystem() -{ - if (XRE_GetProcessType() == GeckoProcessType_Default) { - mAccelerometer->removeFilter(mAccelerometerFilter); - mAccelerometer->stop(); - mRotation->removeFilter(mRotationFilter); - mRotation->stop(); - delete mAccelerometer; - delete mAccelerometerFilter; - delete mRotation; - delete mRotationFilter; - } -} - -void nsDeviceMotionSystem::Startup() -{ - if (XRE_GetProcessType() == GeckoProcessType_Default) { - mAccelerometer->start(); - if (!mAccelerometer->isActive()) { - NS_WARNING("AccelerometerSensor didn't start!"); - } - mRotation->start(); - if (!mRotation->isActive()) { - NS_WARNING("RotationSensor didn't start!"); - } - } - else - mozilla::dom::ContentChild::GetSingleton()-> - SendAddDeviceMotionListener(); -} - -void nsDeviceMotionSystem::Shutdown() -{ - if (XRE_GetProcessType() == GeckoProcessType_Default) { - mAccelerometer->stop(); - mRotation->stop(); - } - else - mozilla::dom::ContentChild::GetSingleton()-> - SendRemoveDeviceMotionListener(); -}
deleted file mode 100644 --- a/dom/system/unix/nsQTMDeviceMotionSystem.h +++ /dev/null @@ -1,100 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Oleg Romashin <romaxa@gmail.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsDeviceMotionSystem_h -#define nsDeviceMotionSystem_h - -#include <QObject> -#include <QtSensors/QAccelerometer> -#include <QtSensors/QRotationSensor> -#include "nsDeviceMotion.h" - -using namespace QtMobility; - - -class MozQAccelerometerSensorFilter; -class MozQRotationSensorFilter; - -class nsDeviceMotionSystem : public nsDeviceMotion -{ -public: - nsDeviceMotionSystem(); - virtual ~nsDeviceMotionSystem(); - -private: - virtual void Startup(); - virtual void Shutdown(); - - QtMobility::QAccelerometer* mAccelerometer; - MozQAccelerometerSensorFilter* mAccelerometerFilter; - QtMobility::QRotationSensor* mRotation; - MozQRotationSensorFilter* mRotationFilter; -}; - -class MozQAccelerometerSensorFilter : public QObject, public QAccelerometerFilter -{ - Q_OBJECT - -public: - MozQAccelerometerSensorFilter(nsDeviceMotionSystem& aSystem) : mSystem(aSystem) {} - - virtual ~MozQAccelerometerSensorFilter(){} - - virtual bool filter(QAccelerometerReading* reading); - -private: - bool filter(QSensorReading *reading) { return filter(static_cast<QAccelerometerReading*>(reading)); } - nsDeviceMotionSystem& mSystem; -}; - -class MozQRotationSensorFilter : public QObject, public QRotationFilter -{ - Q_OBJECT - -public: - MozQRotationSensorFilter(nsDeviceMotionSystem& aSystem) : mSystem(aSystem) {} - - virtual ~MozQRotationSensorFilter(){} - - virtual bool filter(QRotationReading* reading); - -private: - bool filter(QSensorReading *reading) { return filter(static_cast<QRotationReading*>(reading)); } - nsDeviceMotionSystem& mSystem; -}; - -#endif /* nsDeviceMotionSystem_h */ -
--- a/dom/system/windows/Makefile.in +++ b/dom/system/windows/Makefile.in @@ -50,13 +50,12 @@ FORCE_STATIC_LIB = 1 EXPORT_LIBRARY = 1 # We fire the nsDOMDeviceAcceleration LOCAL_INCLUDES += -I$(topsrcdir)/content/events/src include $(topsrcdir)/config/config.mk CPPSRCS = \ - nsDeviceMotionSystem.cpp \ nsHapticFeedback.cpp \ $(NULL) include $(topsrcdir)/config/rules.mk
deleted file mode 100644 --- a/dom/system/windows/nsDeviceMotionSystem.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Doug Turner <dougt@dougt.org> - * Portions created by the Initial Developer are Copyright (C) 2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Jesper Kristensen <mail@jesperkristensen.dk> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsDeviceMotionSystem.h" -#include "nsIServiceManager.h" -#include "windows.h" - -#define DEFAULT_SENSOR_POLL 100 - -//////////////////////////// -// ThinkPad -//////////////////////////// - -typedef struct { - int status; // Current internal state - unsigned short x; // raw value - unsigned short y; // raw value - unsigned short xx; // avg. of 40ms - unsigned short yy; // avg. of 40ms - char temp; // raw value (could be deg celsius?) - unsigned short x0; // Used for "auto-center" - unsigned short y0; // Used for "auto-center" -} ThinkPadAccelerometerData; - -typedef void (__stdcall *ShockproofGetAccelerometerData)(ThinkPadAccelerometerData*); - -ShockproofGetAccelerometerData gShockproofGetAccelerometerData = nsnull; - -class ThinkPadSensor : public Sensor -{ -public: - ThinkPadSensor(); - ~ThinkPadSensor(); - bool Startup(); - void Shutdown(); - void GetValues(double *x, double *y, double *z); -private: - HMODULE mLibrary; -}; - -ThinkPadSensor::ThinkPadSensor() -{ -} - -ThinkPadSensor::~ThinkPadSensor() -{ -} - -bool -ThinkPadSensor::Startup() -{ - mLibrary = LoadLibraryW(L"sensor.dll"); - if (!mLibrary) - return false; - - gShockproofGetAccelerometerData = (ShockproofGetAccelerometerData) - GetProcAddress(mLibrary, "ShockproofGetAccelerometerData"); - if (!gShockproofGetAccelerometerData) { - FreeLibrary(mLibrary); - mLibrary = nsnull; - return false; - } - return true; -} - -void -ThinkPadSensor::Shutdown() -{ - if (mLibrary == nsnull) - return; - - FreeLibrary(mLibrary); - mLibrary = nsnull; - gShockproofGetAccelerometerData = nsnull; -} - -void -ThinkPadSensor::GetValues(double *x, double *y, double *z) -{ - ThinkPadAccelerometerData accelData; - - gShockproofGetAccelerometerData(&accelData); - - // accelData.x and accelData.y is the acceleration measured from the accelerometer. - // x and y is switched from what we use, and the accelerometer does not support z axis. - // Balance point (526, 528) and 90 degree tilt (144) determined experimentally. - *x = ((double)(accelData.y - 526)) / 144; - *y = ((double)(accelData.x - 528)) / 144; - *z = 1.0; -} - -nsDeviceMotionSystem::nsDeviceMotionSystem(){} -nsDeviceMotionSystem::~nsDeviceMotionSystem(){} - -void -nsDeviceMotionSystem::UpdateHandler(nsITimer *aTimer, void *aClosure) -{ - nsDeviceMotionSystem *self = reinterpret_cast<nsDeviceMotionSystem *>(aClosure); - if (!self || !self->mSensor) { - NS_ERROR("no self or sensor"); - return; - } - double x, y, z; - self->mSensor->GetValues(&x, &y, &z); - self->DeviceMotionChanged(nsIDeviceMotionData::TYPE_ACCELERATION, x, y, z); -} - -void nsDeviceMotionSystem::Startup() -{ - NS_ASSERTION(!mSensor, "mSensor should be null. Startup called twice?"); - - bool started = false; - - mSensor = new ThinkPadSensor(); - if (mSensor) - started = mSensor->Startup(); - - if (!started) { - mSensor = nsnull; - return; - } - - mUpdateTimer = do_CreateInstance("@mozilla.org/timer;1"); - if (mUpdateTimer) - mUpdateTimer->InitWithFuncCallback(UpdateHandler, - this, - DEFAULT_SENSOR_POLL, - nsITimer::TYPE_REPEATING_SLACK); -} - -void nsDeviceMotionSystem::Shutdown() -{ - if (mUpdateTimer) { - mUpdateTimer->Cancel(); - mUpdateTimer = nsnull; - } - - if (mSensor) - mSensor->Shutdown(); -} -
deleted file mode 100644 --- a/dom/system/windows/nsDeviceMotionSystem.h +++ /dev/null @@ -1,66 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Doug Turner <dougt@dougt.org> - * Portions created by the Initial Developer are Copyright (C) 2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef nsDeviceMotionSystem_h -#define nsDeviceMotionSystem_h - -#include "nsDeviceMotion.h" -#include "nsAutoPtr.h" - -class Sensor -{ - public: - virtual bool Startup() = 0; - virtual void Shutdown() = 0; - virtual void GetValues(double *x, double *y, double *z) = 0; -}; - -class nsDeviceMotionSystem : public nsDeviceMotion -{ - public: - nsDeviceMotionSystem(); - ~nsDeviceMotionSystem(); - - void Startup(); - void Shutdown(); - - nsCOMPtr<nsITimer> mUpdateTimer; - static void UpdateHandler(nsITimer *aTimer, void *aClosure); - - nsAutoPtr<Sensor> mSensor; -}; - -#endif
--- a/hal/HalSensor.h +++ b/hal/HalSensor.h @@ -58,28 +58,50 @@ enum SensorType { SENSOR_GYROSCOPE, NUM_SENSOR_TYPE }; class SensorData; typedef Observer<SensorData> ISensorObserver; +/** + * Enumeration of sensor accuracy types. + */ +enum SensorAccuracyType { + SENSOR_ACCURACY_UNKNOWN = -1, + SENSOR_ACCURACY_UNRELIABLE, + SENSOR_ACCURACY_LOW, + SENSOR_ACCURACY_MED, + SENSOR_ACCURACY_HIGH, + NUM_SENSOR_ACCURACY_TYPE +}; + +class SensorAccuracy; + +typedef Observer<SensorAccuracy> ISensorAccuracyObserver; + } } - #include "IPC/IPCMessageUtils.h" namespace IPC { /** * Serializer for SensorType */ template <> struct ParamTraits<mozilla::hal::SensorType>: public EnumSerializer<mozilla::hal::SensorType, mozilla::hal::SENSOR_UNKNOWN, mozilla::hal::NUM_SENSOR_TYPE> { }; + template <> + struct ParamTraits<mozilla::hal::SensorAccuracyType>: + public EnumSerializer<mozilla::hal::SensorAccuracyType, + mozilla::hal::SENSOR_ACCURACY_UNKNOWN, + mozilla::hal::NUM_SENSOR_ACCURACY_TYPE> { + + }; } // namespace IPC #endif /* __HAL_SENSOR_H_ */
--- a/hal/Makefile.in +++ b/hal/Makefile.in @@ -41,16 +41,17 @@ srcdir = @srcdir@ VPATH = \ $(srcdir) \ $(srcdir)/android \ $(srcdir)/gonk \ $(srcdir)/fallback \ $(srcdir)/sandbox \ $(srcdir)/linux \ $(srcdir)/windows \ + $(srcdir)/cocoa \ $(NULL) include $(DEPTH)/config/autoconf.mk MODULE = hal LIBRARY_NAME = hal_s FORCE_STATIC_LIB = 1 LIBXUL_LIBRARY = 1 @@ -94,16 +95,24 @@ ifdef MOZ_ENABLE_DBUS CPPSRCS += UPowerClient.cpp endif else ifeq (WINNT,$(OS_TARGET)) CPPSRCS += \ WindowsHal.cpp \ WindowsBattery.cpp \ FallbackSensor.cpp \ $(NULL) +else ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) +CPPSRCS += \ + FallbackHal.cpp \ + $(NULL) +CMMSRCS += \ + CocoaSensor.mm \ + smslib.mm \ + $(NULL) else CPPSRCS += \ FallbackHal.cpp \ FallbackSensor.cpp \ $(NULL) endif ifneq (gonk,$(MOZ_WIDGET_TOOLKIT)) #{
--- a/hal/android/AndroidSensor.cpp +++ b/hal/android/AndroidSensor.cpp @@ -38,38 +38,20 @@ #include "Hal.h" #include "AndroidBridge.h" using namespace mozilla::hal; namespace mozilla { namespace hal_impl { -/** - * Translate ID of sensor type from Sensor service to Android. - * - * Must be consistent with the definition of sensor types in - * embedding/android/GeckoAppShell.java - */ -static int -MapSensorType(SensorType aSensorType) { - return (SENSOR_UNKNOWN <= aSensorType && aSensorType < NUM_SENSOR_TYPE) ? - aSensorType + 1 : -1; -} - void EnableSensorNotifications(SensorType aSensor) { - int androidSensor = MapSensorType(aSensor); - - MOZ_ASSERT(androidSensor != -1); - AndroidBridge::Bridge()->EnableSensor(androidSensor); + AndroidBridge::Bridge()->EnableSensor(aSensor); } void DisableSensorNotifications(SensorType aSensor) { - int androidSensor = MapSensorType(aSensor); - - MOZ_ASSERT(androidSensor != -1); - AndroidBridge::Bridge()->DisableSensor(androidSensor); + AndroidBridge::Bridge()->DisableSensor(aSensor); } } // hal_impl } // mozilla
new file mode 100644 --- /dev/null +++ b/hal/cocoa/CocoaSensor.mm @@ -0,0 +1,61 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "Hal.h" +#include "nsITimer.h" + +#include "smslib.h" +#define MEAN_GRAVITY 9.80665 +#define DEFAULT_SENSOR_POLL 100 + +using namespace mozilla::hal; + +namespace mozilla { +namespace hal_impl { + +static nsITimer* sUpdateTimer = nsnull; + +void UpdateHandler(nsITimer *aTimer, void *aClosure) +{ + sms_acceleration accel; + smsGetData(&accel); + + InfallibleTArray<float> values; + values.AppendElement(accel.x * MEAN_GRAVITY); + values.AppendElement(accel.y * MEAN_GRAVITY); + values.AppendElement(accel.z * MEAN_GRAVITY); + hal::SensorData sdata(hal::SENSOR_ACCELERATION, + PR_Now(), + values, + hal::SENSOR_ACCURACY_UNKNOWN); + hal::NotifySensorChange(sdata); +} + +void +EnableSensorNotifications(SensorType aSensor) { + if (sUpdateTimer) + return; + + smsStartup(nil, nil); + smsLoadCalibration(); + + CallCreateInstance("@mozilla.org/timer;1", &sUpdateTimer); + if (sUpdateTimer) + sUpdateTimer->InitWithFuncCallback(UpdateHandler, + NULL, + DEFAULT_SENSOR_POLL, + nsITimer::TYPE_REPEATING_SLACK); +} + +void +DisableSensorNotifications(SensorType aSensor) { + if (sUpdateTimer) { + sUpdateTimer->Cancel(); + NS_RELEASE(sUpdateTimer); + } + smsShutdown(); +} + +} // hal_impl +} // mozilla
--- a/hal/gonk/GonkSensor.cpp +++ b/hal/gonk/GonkSensor.cpp @@ -55,16 +55,17 @@ SensorseventToSensorData(const sensors_e if (aSensorData->sensor() == SENSOR_UNKNOWN) return false; aSensorData->timestamp() = data.timestamp; aSensorData->values()[0] = data.data[0]; aSensorData->values()[1] = data.data[1]; aSensorData->values()[2] = data.data[2]; + aSensorData->accuracy() = SENSOR_ACCURACY_UNKNOWN; return true; } static void onSensorChanged(const sensors_event_t& data, SensorData* aSensorData) { DebugOnly<bool> convertedData = SensorseventToSensorData(data, aSensorData); MOZ_ASSERT(convertedData);
--- a/hal/sandbox/PHal.ipdl +++ b/hal/sandbox/PHal.ipdl @@ -44,16 +44,17 @@ include "mozilla/HalSensor.h"; include "mozilla/HalTypes.h"; include "mozilla/dom/ScreenOrientation.h"; using PRTime; using mozilla::hal::FlashMode; using mozilla::hal::LightType; using mozilla::hal::LightMode; using mozilla::hal::SensorType; +using mozilla::hal::SensorAccuracyType; using mozilla::hal::WakeLockControl; using mozilla::dom::ScreenOrientation; namespace mozilla { namespace hal { struct BatteryInformation { double level; @@ -69,16 +70,17 @@ namespace hal { uint32_t flashOffMS; uint32_t color; }; struct SensorData { SensorType sensor; PRTime timestamp; float[] values; + SensorAccuracyType accuracy; }; struct NetworkInformation { double bandwidth; bool canBeMetered; }; }
--- a/layout/build/nsLayoutModule.cpp +++ b/layout/build/nsLayoutModule.cpp @@ -241,17 +241,17 @@ static void Shutdown(); #endif #include "nsGeolocation.h" #ifndef MOZ_WIDGET_GONK #if defined(XP_UNIX) || \ defined(_WINDOWS) || \ defined(machintosh) || \ defined(android) -#include "nsDeviceMotionSystem.h" +#include "nsDeviceMotion.h" #endif #endif #include "nsCSPService.h" #include "nsISmsService.h" #include "nsISmsDatabaseService.h" #include "mozilla/dom/sms/SmsRequestManager.h" #include "mozilla/dom/sms/SmsServicesFactory.h" #include "nsIPowerManagerService.h" @@ -296,17 +296,17 @@ NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR #ifdef MOZ_WIDGET_GONK NS_GENERIC_FACTORY_CONSTRUCTOR(AudioManager) #else #if defined(XP_UNIX) || \ defined(_WINDOWS) || \ defined(machintosh) || \ defined(android) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceMotionSystem) +NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceMotion) #endif #if defined(ANDROID) || defined(MOZ_PLATFORM_MAEMO) NS_GENERIC_FACTORY_CONSTRUCTOR(nsHapticFeedback) #endif #endif NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(ThirdPartyUtil, Init) NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsISmsService, SmsServicesFactory::CreateSmsService) NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsISmsDatabaseService, SmsServicesFactory::CreateSmsDatabaseService) @@ -1067,17 +1067,17 @@ static const mozilla::Module::CIDEntry k { &kNS_SYSTEMPRINCIPAL_CID, false, NULL, nsSystemPrincipalConstructor }, { &kNS_NULLPRINCIPAL_CID, false, NULL, nsNullPrincipalConstructor }, { &kNS_SECURITYNAMESET_CID, false, NULL, nsSecurityNameSetConstructor }, #ifndef MOZ_WIDGET_GONK #if defined(XP_UNIX) || \ defined(_WINDOWS) || \ defined(machintosh) || \ defined(android) - { &kNS_DEVICE_MOTION_CID, false, NULL, nsDeviceMotionSystemConstructor }, + { &kNS_DEVICE_MOTION_CID, false, NULL, nsDeviceMotionConstructor }, #endif #if defined(ANDROID) || defined(MOZ_PLATFORM_MAEMO) { &kNS_HAPTICFEEDBACK_CID, false, NULL, nsHapticFeedbackConstructor }, #endif #endif { &kTHIRDPARTYUTIL_CID, false, NULL, ThirdPartyUtilConstructor }, { &kNS_STRUCTUREDCLONECONTAINER_CID, false, NULL, nsStructuredCloneContainerConstructor }, { &kSMS_SERVICE_CID, false, NULL, nsISmsServiceConstructor },
--- a/mobile/android/base/GeckoApp.java +++ b/mobile/android/base/GeckoApp.java @@ -2785,33 +2785,27 @@ abstract public class GeckoApp Log.i(LOGTAG, "Sending message to Gecko: " + SystemClock.uptimeMillis() + " - Tab:Add"); GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Tab:Add", args.toString())); } public GeckoLayerClient getLayerClient() { return mLayerClient; } public LayerController getLayerController() { return mLayerController; } // accelerometer - public void onAccuracyChanged(Sensor sensor, int accuracy) - { - Log.w(LOGTAG, "onAccuracyChanged "+accuracy); - GeckoAppShell.sendEventToGecko(GeckoEvent.createSensorAccuracyEvent(accuracy)); - } + public void onAccuracyChanged(Sensor sensor, int accuracy) {} public void onSensorChanged(SensorEvent event) { - Log.w(LOGTAG, "onSensorChanged "+event); GeckoAppShell.sendEventToGecko(GeckoEvent.createSensorEvent(event)); } // geolocation public void onLocationChanged(Location location) { Log.w(LOGTAG, "onLocationChanged "+location); - GeckoAppShell.sendEventToGecko(GeckoEvent.createLocationEvent(location)); } public void onProviderDisabled(String provider) { } public void onProviderEnabled(String provider)
--- a/mobile/android/base/GeckoAppShell.java +++ b/mobile/android/base/GeckoAppShell.java @@ -580,82 +580,95 @@ public class GeckoAppShell } public static void enableSensor(int aSensortype) { SensorManager sm = (SensorManager) GeckoApp.mAppContext.getSystemService(Context.SENSOR_SERVICE); switch(aSensortype) { case GeckoHalDefines.SENSOR_ORIENTATION: + Log.i(LOGTAG, "Enabling SENSOR_ORIENTATION"); if(gOrientationSensor == null) gOrientationSensor = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION); if (gOrientationSensor != null) sm.registerListener(GeckoApp.mAppContext, gOrientationSensor, sDefaultSensorHint); break; case GeckoHalDefines.SENSOR_ACCELERATION: + Log.i(LOGTAG, "Enabling SENSOR_ACCELERATION"); if(gAccelerometerSensor == null) gAccelerometerSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); if (gAccelerometerSensor != null) sm.registerListener(GeckoApp.mAppContext, gAccelerometerSensor, sDefaultSensorHint); break; case GeckoHalDefines.SENSOR_PROXIMITY: + Log.i(LOGTAG, "Enabling SENSOR_PROXIMITY"); if(gProximitySensor == null) gProximitySensor = sm.getDefaultSensor(Sensor.TYPE_PROXIMITY); if (gProximitySensor != null) sm.registerListener(GeckoApp.mAppContext, gProximitySensor, sDefaultSensorHint); break; case GeckoHalDefines.SENSOR_LINEAR_ACCELERATION: + Log.i(LOGTAG, "Enabling SENSOR_LINEAR_ACCELERATION"); if(gLinearAccelerometerSensor == null) - gLinearAccelerometerSensor = sm.getDefaultSensor(10); + gLinearAccelerometerSensor = sm.getDefaultSensor(10 /* API Level 9 - TYPE_LINEAR_ACCELERATION */); if (gLinearAccelerometerSensor != null) sm.registerListener(GeckoApp.mAppContext, gLinearAccelerometerSensor, sDefaultSensorHint); break; case GeckoHalDefines.SENSOR_GYROSCOPE: + Log.i(LOGTAG, "Enabling SENSOR_GYROSCOPE"); if(gGyroscopeSensor == null) gGyroscopeSensor = sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE); if (gGyroscopeSensor != null) sm.registerListener(GeckoApp.mAppContext, gGyroscopeSensor, sDefaultSensorHint); break; - + default: + Log.e(LOGTAG, "Error! SENSOR type used " + aSensortype); } } public static void disableSensor(int aSensortype) { SensorManager sm = (SensorManager) GeckoApp.mAppContext.getSystemService(Context.SENSOR_SERVICE); switch (aSensortype) { case GeckoHalDefines.SENSOR_ORIENTATION: + Log.i(LOGTAG, "Disabling SENSOR_ORIENTATION"); if (gOrientationSensor != null) sm.unregisterListener(GeckoApp.mAppContext, gOrientationSensor); break; case GeckoHalDefines.SENSOR_ACCELERATION: + Log.i(LOGTAG, "Disabling SENSOR_ACCELERATION"); if (gAccelerometerSensor != null) sm.unregisterListener(GeckoApp.mAppContext, gAccelerometerSensor); break; case GeckoHalDefines.SENSOR_PROXIMITY: + Log.i(LOGTAG, "Disabling SENSOR_PROXIMITY"); if (gProximitySensor != null) sm.unregisterListener(GeckoApp.mAppContext, gProximitySensor); break; case GeckoHalDefines.SENSOR_LINEAR_ACCELERATION: + Log.i(LOGTAG, "Disabling SENSOR_LINEAR_ACCELERATION"); if (gLinearAccelerometerSensor != null) sm.unregisterListener(GeckoApp.mAppContext, gLinearAccelerometerSensor); break; case GeckoHalDefines.SENSOR_GYROSCOPE: + Log.i(LOGTAG, "Disabling SENSOR_GYROSCOPE"); if (gGyroscopeSensor != null) sm.unregisterListener(GeckoApp.mAppContext, gGyroscopeSensor); break; + default: + Log.e(LOGTAG, "Error! SENSOR type used " + aSensortype); } } public static void moveTaskToBack() { GeckoApp.mAppContext.moveTaskToBack(true); } public static void returnIMEQueryResult(String result, int selectionStart, int selectionLength) {
--- a/mobile/android/base/GeckoEvent.java +++ b/mobile/android/base/GeckoEvent.java @@ -86,17 +86,17 @@ public class GeckoEvent { private static final int ACTIVITY_START = 17; private static final int BROADCAST = 19; private static final int VIEWPORT = 20; private static final int VISITED = 21; private static final int NETWORK_CHANGED = 22; private static final int PROXIMITY_EVENT = 23; private static final int ACTIVITY_RESUMING = 24; private static final int SCREENSHOT = 25; - private static final int SENSOR_ACCURACY = 26; + private static final int UNUSED2_EVENT = 26; private static final int SCREENORIENTATION_CHANGED = 27; public static final int IME_COMPOSITION_END = 0; public static final int IME_COMPOSITION_BEGIN = 1; public static final int IME_SET_TEXT = 2; public static final int IME_GET_TEXT = 3; public static final int IME_DELETE_TEXT = 4; public static final int IME_SET_SELECTION = 5; @@ -278,49 +278,67 @@ public class GeckoEvent { mPressures[index] = event.getPressure(eventIndex); } catch(Exception ex) { Log.e(LOGTAG, "Error creating motion point " + index, ex); mPointRadii[index] = new Point(0, 0); mPoints[index] = new Point(0, 0); } } + private static int HalSensorAccuracyFor(int androidAccuracy) { + switch (androidAccuracy) { + case SensorManager.SENSOR_STATUS_UNRELIABLE: + return GeckoHalDefines.SENSOR_ACCURACY_UNRELIABLE; + case SensorManager.SENSOR_STATUS_ACCURACY_LOW: + return GeckoHalDefines.SENSOR_ACCURACY_LOW; + case SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM: + return GeckoHalDefines.SENSOR_ACCURACY_MED; + case SensorManager.SENSOR_STATUS_ACCURACY_HIGH: + return GeckoHalDefines.SENSOR_ACCURACY_HIGH; + } + return GeckoHalDefines.SENSOR_ACCURACY_UNKNOWN; + } + public static GeckoEvent createSensorEvent(SensorEvent s) { int sensor_type = s.sensor.getType(); GeckoEvent event = null; switch(sensor_type) { case Sensor.TYPE_ACCELEROMETER: event = new GeckoEvent(SENSOR_EVENT); event.mFlags = GeckoHalDefines.SENSOR_ACCELERATION; + event.mMetaState = HalSensorAccuracyFor(s.accuracy); event.mX = s.values[0]; event.mY = s.values[1]; event.mZ = s.values[2]; break; case 10 /* Requires API Level 9, so just use the raw value - Sensor.TYPE_LINEAR_ACCELEROMETER*/ : event = new GeckoEvent(SENSOR_EVENT); event.mFlags = GeckoHalDefines.SENSOR_LINEAR_ACCELERATION; + event.mMetaState = HalSensorAccuracyFor(s.accuracy); event.mX = s.values[0]; event.mY = s.values[1]; event.mZ = s.values[2]; break; case Sensor.TYPE_ORIENTATION: event = new GeckoEvent(SENSOR_EVENT); event.mFlags = GeckoHalDefines.SENSOR_ORIENTATION; + event.mMetaState = HalSensorAccuracyFor(s.accuracy); event.mX = s.values[0]; event.mY = s.values[1]; event.mZ = s.values[2]; break; case Sensor.TYPE_GYROSCOPE: event = new GeckoEvent(SENSOR_EVENT); event.mFlags = GeckoHalDefines.SENSOR_GYROSCOPE; + event.mMetaState = HalSensorAccuracyFor(s.accuracy); event.mX = Math.toDegrees(s.values[0]); event.mY = Math.toDegrees(s.values[1]); event.mZ = Math.toDegrees(s.values[2]); break; case Sensor.TYPE_PROXIMITY: // bug 734854 - maybe we can get rid of this event. is // values[1] and values[2] valid? @@ -436,20 +454,14 @@ public class GeckoEvent { GeckoEvent event = new GeckoEvent(SCREENSHOT); event.mPoints = new Point[2]; event.mPoints[0] = new Point(sw, sh); event.mPoints[1] = new Point(dw, dh); event.mMetaState = tabId; return event; } - public static GeckoEvent createSensorAccuracyEvent(int accuracy) { - GeckoEvent event = new GeckoEvent(SENSOR_ACCURACY); - event.mFlags = accuracy; - return event; - } - public static GeckoEvent createScreenOrientationEvent(short aScreenOrientation) { GeckoEvent event = new GeckoEvent(SCREENORIENTATION_CHANGED); event.mScreenOrientation = aScreenOrientation; return event; } }
--- a/mobile/android/base/GeckoHalDefines.java +++ b/mobile/android/base/GeckoHalDefines.java @@ -41,9 +41,15 @@ public class GeckoHalDefines /* * Keep these values consistent with |SensorType| in Hal.h */ public static final int SENSOR_ORIENTATION = 0; public static final int SENSOR_ACCELERATION = 1; public static final int SENSOR_PROXIMITY = 2; public static final int SENSOR_LINEAR_ACCELERATION = 3; public static final int SENSOR_GYROSCOPE = 4; + + public static final int SENSOR_ACCURACY_UNKNOWN = -1; + public static final int SENSOR_ACCURACY_UNRELIABLE = 0; + public static final int SENSOR_ACCURACY_LOW = 1; + public static final int SENSOR_ACCURACY_MED = 2; + public static final int SENSOR_ACCURACY_HIGH = 3; };
--- a/widget/android/AndroidBridge.cpp +++ b/widget/android/AndroidBridge.cpp @@ -314,38 +314,16 @@ AndroidBridge::AcknowledgeEventSync() JNIEnv *env = GetJNIEnv(); if (!env) return; env->CallStaticVoidMethod(mGeckoAppShellClass, jAcknowledgeEventSync); } void -AndroidBridge::EnableDeviceMotion(bool aEnable) -{ - ALOG_BRIDGE("AndroidBridge::EnableDeviceMotion"); - - // bug 734855 - we probably can make this finer grain based on - // the DOM APIs that are being invoked. - if (aEnable) { - EnableSensor(hal::SENSOR_ORIENTATION); - EnableSensor(hal::SENSOR_ACCELERATION); - EnableSensor(hal::SENSOR_LINEAR_ACCELERATION); - EnableSensor(hal::SENSOR_GYROSCOPE); - } - else { - DisableSensor(hal::SENSOR_ORIENTATION); - DisableSensor(hal::SENSOR_ACCELERATION); - DisableSensor(hal::SENSOR_LINEAR_ACCELERATION); - DisableSensor(hal::SENSOR_GYROSCOPE); - } -} - - -void AndroidBridge::EnableLocation(bool aEnable) { ALOG_BRIDGE("AndroidBridge::EnableLocation"); JNIEnv *env = GetJNIEnv(); if (!env) return;
--- a/widget/android/AndroidBridge.h +++ b/widget/android/AndroidBridge.h @@ -171,18 +171,16 @@ public: const nsAString& aActionHint); static void NotifyIMEChange(const PRUnichar *aText, PRUint32 aTextLen, int aStart, int aEnd, int aNewEnd); nsresult TakeScreenshot(nsIDOMWindow *window, PRInt32 srcX, PRInt32 srcY, PRInt32 srcW, PRInt32 srcH, PRInt32 dstW, PRInt32 dstH, PRInt32 tabId, float scale); void AcknowledgeEventSync(); - void EnableDeviceMotion(bool aEnable); - void EnableLocation(bool aEnable); void EnableSensor(int aSensorType); void DisableSensor(int aSensorType); void ReturnIMEQueryResult(const PRUnichar *aResult, PRUint32 aLen, int aSelStart, int aSelLen);
--- a/widget/android/AndroidJavaWrappers.cpp +++ b/widget/android/AndroidJavaWrappers.cpp @@ -470,16 +470,17 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jo ReadRectField(jenv); break; case SENSOR_EVENT: mX = jenv->GetDoubleField(jobj, jXField); mY = jenv->GetDoubleField(jobj, jYField); mZ = jenv->GetDoubleField(jobj, jZField); mFlags = jenv->GetIntField(jobj, jFlagsField); + mMetaState = jenv->GetIntField(jobj, jMetaStateField); break; case LOCATION_EVENT: { jobject location = jenv->GetObjectField(jobj, jLocationField); mGeoPosition = AndroidLocation::CreateGeoPosition(jenv, location); break; } @@ -506,17 +507,16 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jo break; } case PROXIMITY_EVENT: { mDistance = jenv->GetDoubleField(jobj, jDistanceField); break; } - case SENSOR_ACCURACY: case ACTIVITY_STOPPING: case ACTIVITY_START: case ACTIVITY_PAUSING: case ACTIVITY_RESUMING: { mFlags = jenv->GetIntField(jobj, jFlagsField); break; } @@ -529,17 +529,17 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jo mScreenOrientation = jenv->GetShortField(jobj, jScreenOrientationField); break; } default: break; } -#ifndef DEBUG_ANDROID_EVENTS +#ifdef DEBUG_ANDROID_EVENTS ALOG("AndroidGeckoEvent: %p : %d", (void*)jobj, mType); #endif } void AndroidGeckoEvent::Init(int aType) { mType = aType;
--- a/widget/android/AndroidJavaWrappers.h +++ b/widget/android/AndroidJavaWrappers.h @@ -584,17 +584,17 @@ public: ACTIVITY_START = 17, BROADCAST = 19, VIEWPORT = 20, VISITED = 21, NETWORK_CHANGED = 22, PROXIMITY_EVENT = 23, ACTIVITY_RESUMING = 24, SCREENSHOT = 25, - SENSOR_ACCURACY = 26, + UNUSED2_EVENT = 26, SCREENORIENTATION_CHANGED = 27, dummy_java_enum_list_end }; enum { IME_COMPOSITION_END = 0, IME_COMPOSITION_BEGIN = 1, IME_SET_TEXT = 2,
--- a/widget/android/nsAppShell.cpp +++ b/widget/android/nsAppShell.cpp @@ -51,17 +51,16 @@ #include "mozilla/Services.h" #include "mozilla/unused.h" #include "mozilla/Preferences.h" #include "mozilla/Hal.h" #include "prenv.h" #include "AndroidBridge.h" -#include "nsDeviceMotionSystem.h" #include <android/log.h> #include <pthread.h> #include <wchar.h> #include "mozilla/dom/ScreenOrientation.h" #ifdef MOZ_ANDROID_HISTORY #include "nsAndroidHistory.h" @@ -79,17 +78,16 @@ #endif using namespace mozilla; #ifdef PR_LOGGING PRLogModuleInfo *gWidgetLog = nsnull; #endif -nsDeviceMotionSystem *gDeviceMotionSystem = nsnull; nsIGeolocationUpdate *gLocationCallback = nsnull; nsAutoPtr<mozilla::AndroidGeckoEvent> gLastSizeChange; nsAppShell *nsAppShell::gAppShell = nsnull; NS_IMPL_ISUPPORTS_INHERITED1(nsAppShell, nsBaseAppShell, nsIObserver) nsAppShell::nsAppShell() @@ -328,56 +326,48 @@ nsAppShell::ProcessNextNativeEvent(bool EVLOG("nsAppShell: event %p %d [ndraws %d]", (void*)curEvent.get(), curEvent->Type(), mNumDraws); switch (curEvent->Type()) { case AndroidGeckoEvent::NATIVE_POKE: NativeEventCallback(); break; - case AndroidGeckoEvent::SENSOR_ACCURACY: - if (curEvent->Flags() == 0) - gDeviceMotionSystem->NeedsCalibration(); - break; - case AndroidGeckoEvent::SENSOR_EVENT: + { mPendingSensorEvents = false; - switch (curEvent->Flags()) { - case hal::SENSOR_ORIENTATION: - gDeviceMotionSystem->DeviceMotionChanged(nsIDeviceMotionData::TYPE_ORIENTATION, - curEvent->X(), - -curEvent->Y(), - -curEvent->Z()); + InfallibleTArray<float> values; + mozilla::hal::SensorType type = (mozilla::hal::SensorType) curEvent->Flags(); + + switch (type) { + case hal::SENSOR_ORIENTATION: + values.AppendElement(curEvent->X()); + values.AppendElement(-curEvent->Y()); + values.AppendElement(-curEvent->Z()); break; - case hal::SENSOR_ACCELERATION: - gDeviceMotionSystem->DeviceMotionChanged(nsIDeviceMotionData::TYPE_ACCELERATION, - -curEvent->X(), - curEvent->Y(), - curEvent->Z()); - break; - - case hal::SENSOR_LINEAR_ACCELERATION: - gDeviceMotionSystem->DeviceMotionChanged(nsIDeviceMotionData::TYPE_LINEAR_ACCELERATION, - -curEvent->X(), - curEvent->Y(), - curEvent->Z()); - break; - - case hal::SENSOR_GYROSCOPE: - gDeviceMotionSystem->DeviceMotionChanged(nsIDeviceMotionData::TYPE_GYROSCOPE, - -curEvent->X(), - curEvent->Y(), - curEvent->Z()); + case hal::SENSOR_ACCELERATION: + case hal::SENSOR_LINEAR_ACCELERATION: + case hal::SENSOR_GYROSCOPE: + values.AppendElement(-curEvent->X()); + values.AppendElement(curEvent->Y()); + values.AppendElement(curEvent->Z()); break; default: - __android_log_print(ANDROID_LOG_ERROR, "Gecko", "### SENSOR_EVENT fired, but type wasn't known %d", curEvent->Flags()); + __android_log_print(ANDROID_LOG_ERROR, + "Gecko", "### SENSOR_EVENT fired, but type wasn't known %d", + type); } - break; + + const hal::SensorAccuracyType &accuracy = (hal::SensorAccuracyType) curEvent->MetaState(); + hal::SensorData sdata(type, PR_Now(), values, accuracy); + hal::NotifySensorChange(sdata); + } + break; case AndroidGeckoEvent::LOCATION_EVENT: { if (!gLocationCallback) break; nsGeoPosition* p = curEvent->GeoPosition(); if (p) gLocationCallback->Update(curEvent->GeoPosition()); @@ -385,17 +375,17 @@ nsAppShell::ProcessNextNativeEvent(bool NS_WARNING("Received location event without geoposition!"); break; } case AndroidGeckoEvent::PROXIMITY_EVENT: { InfallibleTArray<float> values; values.AppendElement(curEvent->Distance()); - hal::SensorData sdata(hal::SENSOR_PROXIMITY, PR_Now(), values); + hal::SensorData sdata(hal::SENSOR_PROXIMITY, PR_Now(), values, hal::SENSOR_ACCURACY_UNKNOWN); hal::NotifySensorChange(sdata); break; } case AndroidGeckoEvent::ACTIVITY_STOPPING: { if (curEvent->Flags() > 0) break;
--- a/xpcom/system/nsIDeviceMotion.idl +++ b/xpcom/system/nsIDeviceMotion.idl @@ -36,20 +36,22 @@ #include "nsISupports.idl" interface nsIDOMWindow; [scriptable, uuid(1B406E32-CF42-471E-A470-6FD600BF4C7B)] interface nsIDeviceMotionData : nsISupports { - const unsigned long TYPE_ACCELERATION = 0; - const unsigned long TYPE_ORIENTATION = 1; - const unsigned long TYPE_LINEAR_ACCELERATION = 2; - const unsigned long TYPE_GYROSCOPE = 3; + // Keep in sync with hal/HalSensor.h + const unsigned long TYPE_ORIENTATION = 0; + const unsigned long TYPE_ACCELERATION = 1; + const unsigned long TYPE_PROXIMITY = 2; + const unsigned long TYPE_LINEAR_ACCELERATION = 3; + const unsigned long TYPE_GYROSCOPE = 4; readonly attribute unsigned long type; readonly attribute double x; readonly attribute double y; readonly attribute double z; }; @@ -67,19 +69,8 @@ interface nsIDeviceMotion : nsISupports void removeListener(in nsIDeviceMotionListener aListener); // Holds pointers, not AddRef objects -- it is up to the caller // to call RemoveWindowListener before the window is deleted. [noscript] void addWindowListener(in nsIDOMWindow aWindow); [noscript] void removeWindowListener(in nsIDOMWindow aWindow); }; - -/* for use by IPC system to notify non-chrome processes of - * device motion events - */ -[uuid(C12C0157-DCFF-41B5-83F3-89179BF6CA4E)] -interface nsIDeviceMotionUpdate : nsIDeviceMotion -{ - /* must be called on the main thread or else */ - void deviceMotionChanged(in unsigned long type, in double x, in double y, in double z); - void needsCalibration(); -};