mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 714413 - Sensor support for gonk [r=cjones]
This commit is contained in:
parent
0a958739f2
commit
558004c794
@ -313,7 +313,7 @@ if test -n "$gonkdir" ; then
|
|||||||
STLPORT_CPPFLAGS="-I$gonkdir/ndk/sources/cxx-stl/stlport/stlport/"
|
STLPORT_CPPFLAGS="-I$gonkdir/ndk/sources/cxx-stl/stlport/stlport/"
|
||||||
STLPORT_LIBS="-lstlport"
|
STLPORT_LIBS="-lstlport"
|
||||||
|
|
||||||
CPPFLAGS="-DANDROID -I$gonkdir/bionic/libc/include/ -I$gonkdir/bionic/libc/kernel/common -I$gonkdir/bionic/libc/arch-arm/include -I$gonkdir/bionic/libc/kernel/arch-arm -I$gonkdir/bionic/libm/include -I$gonkdir/frameworks/base/opengl/include -I$gonkdir/frameworks/base/native/include -I$gonkdir/hardware/libhardware/include -I$gonkdir/hardware/libhardware_legacy/include -I$gonkdir/system/core/include -I$gonkdir/bionic -I$gonkdir/frameworks/base/include $STLPORT_CPPFLAGS $CPPFLAGS"
|
CPPFLAGS="-DANDROID -I$gonkdir/bionic/libc/include/ -I$gonkdir/bionic/libc/kernel/common -I$gonkdir/bionic/libc/arch-arm/include -I$gonkdir/bionic/libc/kernel/arch-arm -I$gonkdir/bionic/libm/include -I$gonkdir/frameworks/base/opengl/include -I$gonkdir/frameworks/base/native/include -I$gonkdir/hardware/libhardware/include -I$gonkdir/hardware/libhardware_legacy/include -I$gonkdir/system/core/include -I$gonkdir/bionic -I$gonkdir/frameworks/base/include $STLPORT_CPPFLAGS $CPPFLAGS -I$gonkdir/frameworks/base/services/sensorservice"
|
||||||
CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS"
|
CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS"
|
||||||
CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions $CXXFLAGS"
|
CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions $CXXFLAGS"
|
||||||
LIBS="$LIBS $STLPORT_LIBS"
|
LIBS="$LIBS $STLPORT_LIBS"
|
||||||
|
@ -79,7 +79,7 @@ else ifeq (gonk,$(MOZ_WIDGET_TOOLKIT))
|
|||||||
CPPSRCS += \
|
CPPSRCS += \
|
||||||
GonkHal.cpp \
|
GonkHal.cpp \
|
||||||
Power.cpp \
|
Power.cpp \
|
||||||
FallbackSensor.cpp \
|
GonkSensor.cpp \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
else ifeq (Linux,$(OS_TARGET))
|
else ifeq (Linux,$(OS_TARGET))
|
||||||
CPPSRCS += \
|
CPPSRCS += \
|
||||||
@ -108,4 +108,4 @@ include $(topsrcdir)/ipc/chromium/chromium-config.mk
|
|||||||
include $(topsrcdir)/config/rules.mk
|
include $(topsrcdir)/config/rules.mk
|
||||||
|
|
||||||
CFLAGS += $(MOZ_DBUS_GLIB_CFLAGS)
|
CFLAGS += $(MOZ_DBUS_GLIB_CFLAGS)
|
||||||
CXXFLAGS += $(MOZ_DBUS_GLIB_CFLAGS)
|
CXXFLAGS += $(MOZ_DBUS_GLIB_CFLAGS) -DHAVE_PTHREADS
|
||||||
|
167
hal/gonk/GonkSensor.cpp
Normal file
167
hal/gonk/GonkSensor.cpp
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* 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 <pthread.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "Hal.h"
|
||||||
|
#include "HalSensor.h"
|
||||||
|
#include "hardware/sensors.h"
|
||||||
|
#include "mozilla/Util.h"
|
||||||
|
#include "SensorDevice.h"
|
||||||
|
|
||||||
|
using namespace mozilla::hal;
|
||||||
|
using namespace android;
|
||||||
|
|
||||||
|
static SensorType
|
||||||
|
HardwareSensorToHalSensor(int type)
|
||||||
|
{
|
||||||
|
switch(type) {
|
||||||
|
case SENSOR_TYPE_ORIENTATION:
|
||||||
|
return SENSOR_ORIENTATION;
|
||||||
|
case SENSOR_TYPE_ACCELEROMETER:
|
||||||
|
return SENSOR_ACCELERATION;
|
||||||
|
case SENSOR_TYPE_PROXIMITY:
|
||||||
|
return SENSOR_PROXIMITY;
|
||||||
|
default:
|
||||||
|
return SENSOR_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
HalSensorToHardwareSensor(SensorType type)
|
||||||
|
{
|
||||||
|
switch(type) {
|
||||||
|
case SENSOR_ORIENTATION:
|
||||||
|
return SENSOR_TYPE_ORIENTATION;
|
||||||
|
case SENSOR_ACCELERATION:
|
||||||
|
return SENSOR_TYPE_ACCELEROMETER;
|
||||||
|
case SENSOR_PROXIMITY:
|
||||||
|
return SENSOR_TYPE_PROXIMITY;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
SensorseventToSensorData(const sensors_event_t& data, SensorData* aSensorData)
|
||||||
|
{
|
||||||
|
aSensorData->sensor() = HardwareSensorToHalSensor(data.type);
|
||||||
|
|
||||||
|
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];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
onSensorChanged(const sensors_event_t& data, SensorData* aSensorData)
|
||||||
|
{
|
||||||
|
mozilla::DebugOnly<bool> convertedData = SensorseventToSensorData(data, aSensorData);
|
||||||
|
MOZ_ASSERT(convertedData);
|
||||||
|
NotifySensorChange(*aSensorData);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace hal_impl {
|
||||||
|
|
||||||
|
static pthread_t sThread;
|
||||||
|
static bool sInitialized = false;
|
||||||
|
static bool sContinue = false;
|
||||||
|
static int sActivatedSensors = 0;
|
||||||
|
static SensorData sSensordata[NUM_SENSOR_TYPE];
|
||||||
|
|
||||||
|
static void*
|
||||||
|
UpdateSensorData(void* /*unused*/)
|
||||||
|
{
|
||||||
|
SensorDevice &device = SensorDevice::getInstance();
|
||||||
|
const size_t numEventMax = 16;
|
||||||
|
sensors_event_t buffer[numEventMax];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (sContinue) {
|
||||||
|
count = device.poll(buffer, numEventMax);
|
||||||
|
if (count < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<count; i++) {
|
||||||
|
onSensorChanged(buffer[i], &sSensordata[HardwareSensorToHalSensor(buffer[i].type)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
InitialResources()
|
||||||
|
{
|
||||||
|
pthread_create(&sThread, NULL, &UpdateSensorData, NULL);
|
||||||
|
sInitialized = true;
|
||||||
|
sContinue = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ReleaseResources()
|
||||||
|
{
|
||||||
|
sContinue = false;
|
||||||
|
pthread_join(sThread, NULL);
|
||||||
|
sInitialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SensorSwitch(SensorType aSensor, bool activate)
|
||||||
|
{
|
||||||
|
int type = HalSensorToHardwareSensor(aSensor);
|
||||||
|
const sensor_t* sensors = NULL;
|
||||||
|
SensorDevice& device = SensorDevice::getInstance();
|
||||||
|
size_t size = device.getSensorList(&sensors);
|
||||||
|
|
||||||
|
for (size_t i=0; i<size; i++) {
|
||||||
|
if (sensors[i].type == type) {
|
||||||
|
device.activate((void*)pthread_self(), sensors[i].handle, activate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EnableSensorNotifications(SensorType aSensor)
|
||||||
|
{
|
||||||
|
if (!sInitialized) {
|
||||||
|
InitialResources();
|
||||||
|
}
|
||||||
|
|
||||||
|
SensorSwitch(aSensor, true);
|
||||||
|
sActivatedSensors++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DisableSensorNotifications(SensorType aSensor)
|
||||||
|
{
|
||||||
|
if (!sInitialized) {
|
||||||
|
NS_WARNING("Disable sensors without initializing first");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SensorSwitch(aSensor, false);
|
||||||
|
sActivatedSensors--;
|
||||||
|
|
||||||
|
if (!sActivatedSensors) {
|
||||||
|
ReleaseResources();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GetCurrentSensorDataInformation(SensorType aSensor, SensorData* aSensorData) {
|
||||||
|
*aSensorData = sSensordata[aSensor];
|
||||||
|
}
|
||||||
|
|
||||||
|
} // hal_impl
|
||||||
|
} // mozilla
|
@ -429,6 +429,7 @@ OS_LIBS += \
|
|||||||
-lcutils \
|
-lcutils \
|
||||||
-lcamera_client \
|
-lcamera_client \
|
||||||
-lbinder \
|
-lbinder \
|
||||||
|
-lsensorservice \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user