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_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"
|
||||
CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions $CXXFLAGS"
|
||||
LIBS="$LIBS $STLPORT_LIBS"
|
||||
|
@ -79,7 +79,7 @@ else ifeq (gonk,$(MOZ_WIDGET_TOOLKIT))
|
||||
CPPSRCS += \
|
||||
GonkHal.cpp \
|
||||
Power.cpp \
|
||||
FallbackSensor.cpp \
|
||||
GonkSensor.cpp \
|
||||
$(NULL)
|
||||
else ifeq (Linux,$(OS_TARGET))
|
||||
CPPSRCS += \
|
||||
@ -108,4 +108,4 @@ include $(topsrcdir)/ipc/chromium/chromium-config.mk
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
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 \
|
||||
-lcamera_client \
|
||||
-lbinder \
|
||||
-lsensorservice \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user