[-]
[+]
|
Changed |
_service:tar_git:sensorfw.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:sensorfw-qt5-hybris.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -4,4 +4,4 @@
<param name="branch">master</param>
<param name="revision">HEAD</param>
</service>
-</services>
+</services>
\ No newline at end of file
|
[-]
[+]
|
Added |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/LuneOS/sysbus/com.nokia.SensorService.json.prv
^
|
@@ -0,0 +1,14 @@
+{
+ "role": {
+ "exeName":"/usr/sbin/sensorfwd",
+ "type": "privileged",
+ "allowedNames": ["com.nokia.SensorService"]
+ },
+ "permissions": [
+ {
+ "service":"com.nokia.SensorService",
+ "inbound":["*"],
+ "outbound":["*"]
+ }
+ ]
+}
|
[-]
[+]
|
Added |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/LuneOS/sysbus/com.nokia.SensorService.service.prv
^
|
@@ -0,0 +1,4 @@
+[D-BUS Service]
+Name=com.nokia.SensorService
+Exec=/usr/sbin/sensrofwd
+Type=static
|
[-]
[+]
|
Added |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/LuneOS/systemd/sensorfwd.service
^
|
@@ -0,0 +1,17 @@
+[Unit]
+Description=Sensor daemon for sensor framework
+After=dbus.socket ls-hubd_private.service
+Requires=dbus.service ls-hubd_private.service
+Conflicts=actdead.target
+
+[Service]
+Type=forking
+BusName=com.nokia.SensorService
+ExecStartPre=/bin/sh /usr/bin/sensord-daemon-conf-setup
+ExecStart=/usr/sbin/sensorfwd -c=/etc/sensorfw/primaryuse.conf -d --log-level=warning --no-magnetometer-bg-calibration
+ExecReload=/bin/kill -HUP $MAINPID
+Restart=always
+RestartSec=1
+
+[Install]
+WantedBy=multi-user.target
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/adaptor-config.pri
^
|
@@ -17,3 +17,6 @@
INSTALLS += target
+config_hybris {
+ CONFIG += link_pkgconfig
+}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/alsadaptor-evdev/alsadaptor-evdevplugin.cpp
^
|
@@ -1,6 +1,6 @@
/**
- @file alsadaptorplugin-sysfs.cpp
- @brief Plugin for ALSAdaptorSysfs
+ @file alsadaptor-evdevplugin.cpp
+ @brief Plugin for ALSAdaptorEvdev
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/alsadaptor-evdev/alsevdevadaptor.h
^
|
@@ -1,5 +1,5 @@
/**
- @file inputdevadaptor.cpp
+ @file alsevdevadaptor.h
@brief Contains ALSAdaptorEvdev.
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/alsadaptor-sysfs/alsadaptor-sysfsplugin.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file alsadaptorplugin-sysfs.cpp
+ @file alsadaptor-sysfsplugin.cpp
@brief Plugin for ALSAdaptorSysfs
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/gyroscopeadaptor-evdev/gyroadaptor-evdevplugin.h
^
|
@@ -1,6 +1,6 @@
/**
- @file alsadaptor-evdevplugin.h
- @brief Plugin for ALSAdaptorEvdevPlugin
+ @file gyroadaptor-evdevplugin.h
+ @brief Plugin for GyroAdaptorEvdevPlugin
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisaccelerometer/hybrisaccelerometer.pro
^
|
@@ -9,5 +9,5 @@
include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisaccelerometer/hybrisaccelerometeradaptor.cpp
^
|
@@ -44,20 +44,19 @@
bool HybrisAccelerometerAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
-
+ if (isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "Hybris AccelAdaptor start\n";
return true;
}
void HybrisAccelerometerAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "Hybris AccelAdaptor stop\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisalsadaptor/hybrisalsadaptor.cpp
^
|
@@ -52,11 +52,10 @@
bool HybrisAlsAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
-
+ if (isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "Hybris HybrisAlsAdaptor start\n";
return true;
}
@@ -120,9 +119,9 @@
void HybrisAlsAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "Hybris HybrisAlsAdaptor stop\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisalsadaptor/hybrisalsadaptor.pro
^
|
@@ -7,7 +7,7 @@
hybrisalsadaptorplugin.cpp
LIBS+= -L../../core -lhybrissensorfw-qt5
-include(../adaptor-config.pri )
+include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisgyroscopeadaptor/hybrisgyroscopeadaptor.cpp
^
|
@@ -51,20 +51,19 @@
bool HybrisGyroscopeAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
-
+ if (isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "HybrisGyroscopeAdaptor start\n";
return true;
}
void HybrisGyroscopeAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() &&!powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "HybrisGyroscopeAdaptor stop\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisgyroscopeadaptor/hybrisgyroscopeadaptor.pro
^
|
@@ -10,5 +10,5 @@
include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrismagnetometeradaptor/hybrismagnetometeradaptor.cpp
^
|
@@ -48,20 +48,19 @@
bool HybrisMagnetometerAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
-
+ if (isRunning() &&!powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "HybrisMagnetometerAdaptor start\n";
return true;
}
void HybrisMagnetometerAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "HybrisMagnetometerAdaptor stop\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrismagnetometeradaptor/hybrismagnetometeradaptor.pro
^
|
@@ -10,5 +10,5 @@
include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisorientationadaptor/hybrisorientationadaptor.cpp
^
|
@@ -64,20 +64,19 @@
bool HybrisOrientationAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
-
+ if (isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "Hybris OrientationAdaptor start\n";
return true;
}
void HybrisOrientationAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "Hybris OrientationAdaptor stop\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisorientationadaptor/hybrisorientationadaptor.pro
^
|
@@ -10,5 +10,5 @@
include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrispressureadaptor/hybrispressureadaptor.cpp
^
|
@@ -50,20 +50,19 @@
bool HybrisPressureAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
-
+ if (isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "Hybris HybrisPressureAdaptor start\n";
return true;
}
void HybrisPressureAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "Hybris HybrisPressureAdaptor stop\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrispressureadaptor/hybrispressureadaptor.pro
^
|
@@ -7,7 +7,7 @@
hybrispressureadaptorplugin.cpp
LIBS+= -L../../core -lhybrissensorfw-qt5
-include(../adaptor-config.pri )
+include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisproximityadaptor/hybrisproximityadaptor.cpp
^
|
@@ -57,10 +57,10 @@
bool HybrisProximityAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
+ if (isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "HybrisProximityAdaptor start\n";
return true;
}
@@ -127,9 +127,9 @@
void HybrisProximityAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "HybrisProximityAdaptor stop\n";
}
@@ -138,7 +138,7 @@
ProximityData *d = buffer->nextSlot();
d->timestamp_ = quint64(data.timestamp * .001);
bool near = false;
- if (data.distance < maxRange) {
+ if (data.distance < maxRange()) {
near = true;
}
d->withinProximity_ = near;
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisproximityadaptor/hybrisproximityadaptor.pro
^
|
@@ -10,5 +10,5 @@
include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisstepcounteradaptor/hybrisstepcounteradaptor.cpp
^
|
@@ -56,11 +56,10 @@
bool HybrisStepCounterAdaptor::startSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "1");
if (!(HybrisAdaptor::startSensor()))
return false;
-
+ if (isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "1");
sensordLogD() << "Hybris HybrisStepCounterAdaptor start\n";
return true;
}
@@ -72,9 +71,9 @@
void HybrisStepCounterAdaptor::stopSensor()
{
- if(!powerStatePath.isEmpty())
- writeToFile(powerStatePath, "0");
HybrisAdaptor::stopSensor();
+ if (!isRunning() && !powerStatePath.isEmpty())
+ writeToFile(powerStatePath, "0");
sensordLogD() << "Hybris HybrisStepCounterAdaptor stop\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/hybrisstepcounteradaptor/hybrisstepcounteradaptor.pro
^
|
@@ -7,7 +7,7 @@
hybrisstepcounteradaptorplugin.cpp
LIBS+= -L../../core -lhybrissensorfw-qt5
-include(../adaptor-config.pri )
+include( ../adaptor-config.pri )
config_hybris {
- INCLUDEPATH+=/usr/include/android
+ PKGCONFIG += android-headers
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/adaptors/magnetometeradaptor-evdev/magnetometeradaptor-evdevplugin.h
^
|
@@ -1,6 +1,6 @@
/**
- @file alsadaptor-sysfsplugin.h
- @brief Plugin for ALSAdaptorSysfs
+ @file magnetometeradaptor-evdevplugin.h
+ @brief Plugin for MagnetometerAdaptorEvdev
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/chains/compasschain/compasschain.cpp
^
|
@@ -178,6 +178,9 @@
addStandbyOverrideSource(accelerometerChain);
setIntervalSource(accelerometerChain);
+ } else {
+ addStandbyOverrideSource(orientAdaptor);
+ setIntervalSource(orientAdaptor);
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/chains/orientationchain/orientationchainplugin.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file accelerometerchainplugin.cpp
+ @file orientationchainplugin.cpp
@brief Plugin for AccelerometerChain
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/chains/orientationchain/orientationchainplugin.h
^
|
@@ -1,6 +1,6 @@
/**
- @file accelerometerchainplugin.h
- @brief Plugin for AccelerometerChain
+ @file orientationchainplugin.h
+ @brief Plugin for OrientationChain
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/config.tests/hybris/hybris.pro
^
|
@@ -1,6 +1,8 @@
TEMPLATE = app
-INCLUDEPATH=/usr/include/android
+CONFIG += link_pkgconfig
+PKGCONFIG += android-headers
+
TARGET = hybris
SOURCES += main.cpp
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/config/10-sensord-default.conf
^
|
(renamed from config/90-sensord-default.conf)
|
[-]
[+]
|
Added |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/config/20-sensors-default.conf
^
|
@@ -0,0 +1,48 @@
+[available]
+; Availability of some sensors can be defined in hw-settings configuration
+; files. By enabling ssu-sysinfo usage, sensorfwd configuration can be
+; written so that it just refers to hw-settings config. If ssu-sysinfo
+; is not used, these will default to "True".
+;
+; In case of virtual sensors can be implemented on top of multiple real
+; sensors, multiple '|' separated features can be given and the sensor
+; is enabled if at least one of those is set in hw-settings.
+
+accelerometersensor=Feature_AccelerationSensor
+alssensor=Feature_LightSensor
+compasssensor=Feature_CompassSensor
+gyroscopesensor=Feature_GyroSensor
+orientationsensor=Feature_GyroSensor|Feature_AccelerationSensor
+proximitysensor=Feature_ProximitySensor
+
+; In theory having Feature_CoverSensor == have lidsensor. However
+; in practice only mce is expected to track lidsensor and atm it
+; does it via suspend proofed evdev inputs rather than sensorfwd.
+; So, even if the lidsensor adaptors provided by sensorfwd would
+; work, they might interfere with the only user of the sensor.
+; lidsensor=Feature_CoverSensor
+lidsensor=False
+
+; Some sensors that are in theory supported by sensorfwd do not have
+; a suitable hybris adaptors, and thus it makes no sense to list them
+; as being available regardless of the hw / android hal status.
+tapsensor=False
+temperaturesensor=False
+
+; Sensors that have not been available in any officially supported
+; devices -> hide by default.
+humiditysensor=False
+stepcountersensor=False
+
+; To minimize chances of regression, sensors that have been available at
+; least in one officially supported device -> do not hide by default.
+; (sensor loading should fail, so false positive should cause only
+; cosmetic issues on 1st use after bootup)
+
+magnetometersensor=True
+pressuresensor=True
+rotationsensor=True
+
+; To avoid revisiting config files for all old ports in the future, the
+; defaults for added sensors should be set "False" by default here, and
+; to "True" in device specific override config as appropriate.
|
[-]
[+]
|
Added |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/config/60-sensors-DEVICE.conf
^
|
@@ -0,0 +1,29 @@
+[available]
+
+; Sensors that are enabled by default.
+; -> Disable as appropriate
+
+;magnetometersensor=False
+;pressuresensor=False
+;rotationsensor=False
+
+; Sensors that are disabled by default.
+; -> Enable as appropriate
+
+;humiditysensor=True
+;stepcountersensor=True
+;tapsensor=True
+;temperaturesensor=True
+
+; Sensors that should/can be enabled/disabled based on
+; hw settings config - or are enabled if sensorfwd is
+; built without ssu-sysinfo support.
+; -> Override as appropriate.
+
+;accelerometersensor=False
+;alssensor=False
+;compasssensor=False
+;gyroscopesensor=False
+;lidsensor=False
+;orientationsensor=False
+;proximitysensor=False
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/config/sensord-daemon-conf-setup
^
|
@@ -6,7 +6,7 @@
cd /etc/sensorfw/
if [ -x /usr/sbin/sensorfwd ]; then
- if [ -f /usr/lib/libhybrissensorfw*.so ]; then
+ if ldconfig -p | grep libhybrissensorfw ; then
# Always prefer hybris sensor backend to anything else (also overwrite
# old setting, as sometimes the boardname matches, e.g. on grouper)
if [ "$(readlink primaryuse.conf)" != sensord-hybris.conf ]; then
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/config.cpp
^
|
@@ -39,94 +39,68 @@
}
Config::~Config() {
- clearConfig();
}
void Config::clearConfig() {
- foreach(QSettings* setting, settings)
- delete setting;
- settings.clear();
+ m_settings.clear();
}
bool Config::loadConfig(const QString &defConfigPath, const QString &configDPath) {
- Config *config = NULL;
+ /* Not having config files is ok, failing to load one that exists is not */
bool ret = true;
-
- /* Check/create new static config */
- if (static_configuration) {
- config = static_configuration;
- } else {
- config = new Config();
+ if (!static_configuration) {
+ static_configuration = new Config();
}
-
- if (!config->loadConfigFile(defConfigPath))
- ret = false;
-
- /* Scan config.d dir */
- QStringList fileList;
- if(!configDPath.isEmpty())
- {
+ /* Process config.d dir in alnum order */
+ if (!configDPath.isEmpty()) {
QDir dir(configDPath, "*.conf", QDir::Name, QDir::Files);
- fileList = dir.entryList();
- foreach(const QString& file, fileList)
- {
- if (!config->loadConfigFile(dir.absoluteFilePath(file)))
+ foreach(const QString &file, dir.entryList()) {
+ if (!static_configuration->loadConfigFile(dir.absoluteFilePath(file))) {
ret = false;
+ }
}
}
-
- static_configuration = config;
-
+ /* Primary config file overrides config.d */
+ if (!defConfigPath.isEmpty() && QFile::exists(defConfigPath) ) {
+ if (!static_configuration->loadConfigFile(defConfigPath))
+ ret = false;
+ }
return ret;
}
bool Config::loadConfigFile(const QString &configFileName) {
- if(!QFile::exists(configFileName))
- {
+ /* Success means the file was loaded and processed without hiccups */
+ bool loaded = false;
+ if (!QFile::exists(configFileName)) {
sensordLogW() << "File does not exists \"" << configFileName << "\"";
- return false;
- }
- QSettings* setting = new QSettings(configFileName, QSettings::IniFormat);
- if(setting->status() == QSettings::NoError) {
- settings.append(setting);
- sensordLogD() << "Config file \"" << configFileName << "\" successfully loaded";
- return true;
+ } else {
+ QSettings merge(configFileName, QSettings::IniFormat);
+ QSettings::Status status(merge.status());
+ if (status == QSettings::FormatError ) {
+ sensordLogW() << "Configuration file \"" << configFileName << "\" is in wrong format";
+ } else if (status != QSettings::NoError) {
+ sensordLogW() << "Unable to open \"" << configFileName << "\" configuration file";
+ } else {
+ foreach (const QString &key, merge.allKeys()) {
+ m_settings.setValue(key, merge.value(key));
+ }
+ loaded = true;
+ }
}
- else if(setting->status() == QSettings::AccessError)
- sensordLogW() << "Unable to open \"" << configFileName << "\" configuration file";
- else if(setting->status() == QSettings::FormatError)
- sensordLogW() << "Configuration file \"" << configFileName << "\" is in wrong format";
- else
- sensordLogW() << "Configuration file \"" << configFileName << "\" parsing failed to unknown error: " << setting->status();
- delete setting;
- return false;
+ return loaded;
}
QVariant Config::value(const QString &key) const {
- /* Iterate through configs so that keys in the first files
- * have preference over the last.
- */
- foreach(QSettings* setting, settings) {
- if(setting->contains(key))
- {
- QVariant var = setting->value(key, QVariant());
- if(var.isValid())
- sensordLogD() << "Value for key '" << key << "': " << var.toString();
- return var;
- }
+ QVariant var = m_settings.value(key, QVariant());
+ if(var.isValid()) {
+ sensordLogT() << "Value for key" << key << ":" << var.toString();
}
- return QVariant();
+ return var;
}
QStringList Config::groups() const
{
- QStringList groups;
- foreach(QSettings* setting, settings) {
- foreach(const QString& group, setting->childGroups()) {
- if(!groups.contains(group))
- groups << group;
- }
- }
+ QStringList groups = m_settings.childGroups();
return groups;
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/config.h
^
|
@@ -136,7 +136,7 @@
*/
void clearConfig();
- QList<QSettings*> settings; /**< parsed QSettings */
+ QSettings m_settings; /**< parsed QSettings */
};
template<typename T>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/core.pro
^
|
@@ -80,6 +80,19 @@
DEFINES += SENSORFW_MCE_WATCHER
}
+contains(CONFIG,ssusysinfo) {
+ PKGCONFIG += ssu-sysinfo
+ QMAKE_CXXFLAGS += -DUSE_SSUSYSINFO
+}
+
+lunaservice {
+ SOURCES += lsclient.cpp
+ HEADERS += lsclient.h
+ DEFINES += SENSORFW_LUNA_SERVICE_CLIENT
+ PKGCONFIG += Qt5Gui json-c
+ PKGCONFIG += luna-service2 LunaSysMgrCommon LunaSysMgrIpcMessages
+}
+
contains(CONFIG,hybris) {
} else {
publicheaders.path = $${publicheaders.path}/core
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/deviceadaptor.cpp
^
|
@@ -83,7 +83,11 @@
#ifdef SENSORFW_MCE_WATCHER
screenBlanked_(!SensorManager::instance().MCEWatcher()->displayEnabled())
#else
- screenBlanked_(false)
+ #ifdef SENSORFW_LUNA_SERVICE_CLIENT
+ screenBlanked_(!SensorManager::instance().LSClient_instance()->displayEnabled())
+ #else
+ screenBlanked_(false)
+ #endif
#endif
{
setValid(true);
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/hybris.pro
^
|
@@ -6,7 +6,7 @@
include( ../common-config.pri )
CONFIG += link_pkgconfig
-INCLUDEPATH+=/usr/include/android
+PKGCONFIG += android-headers
SENSORFW_INCLUDEPATHS = .. \
../include \
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/hybrisadaptor.cpp
^
|
@@ -31,519 +31,792 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
+#include <time.h>
+#include <signal.h>
+/* Older devices probably have old android hal and thus do
+ * not define sensor all sensor types that have been added
+ * later on -> In order to both use symbolic names and
+ * compile for all devices we need to fill in holes that
+ * android hal for some particular device might have.
+ */
+#ifndef SENSOR_TYPE_META_DATA
+#define SENSOR_TYPE_META_DATA (0)
+#endif
#ifndef SENSOR_TYPE_ACCELEROMETER
-#define SENSOR_TYPE_ACCELEROMETER (1)
+#define SENSOR_TYPE_ACCELEROMETER (1)
+#endif
+#ifndef SENSOR_TYPE_GEOMAGNETIC_FIELD
+#define SENSOR_TYPE_GEOMAGNETIC_FIELD (2)
#endif
#ifndef SENSOR_TYPE_MAGNETIC_FIELD
-#define SENSOR_TYPE_MAGNETIC_FIELD (2)
+#define SENSOR_TYPE_MAGNETIC_FIELD SENSOR_TYPE_GEOMAGNETIC_FIELD
#endif
#ifndef SENSOR_TYPE_ORIENTATION
-#define SENSOR_TYPE_ORIENTATION (3)
+#define SENSOR_TYPE_ORIENTATION (3)
#endif
#ifndef SENSOR_TYPE_GYROSCOPE
-#define SENSOR_TYPE_GYROSCOPE (4)
+#define SENSOR_TYPE_GYROSCOPE (4)
#endif
#ifndef SENSOR_TYPE_LIGHT
-#define SENSOR_TYPE_LIGHT (5)
+#define SENSOR_TYPE_LIGHT (5)
#endif
#ifndef SENSOR_TYPE_PRESSURE
-#define SENSOR_TYPE_PRESSURE (6)
+#define SENSOR_TYPE_PRESSURE (6)
#endif
#ifndef SENSOR_TYPE_TEMPERATURE
-#define SENSOR_TYPE_TEMPERATURE (7)
+#define SENSOR_TYPE_TEMPERATURE (7)
#endif
#ifndef SENSOR_TYPE_PROXIMITY
-#define SENSOR_TYPE_PROXIMITY (8)
+#define SENSOR_TYPE_PROXIMITY (8)
#endif
#ifndef SENSOR_TYPE_GRAVITY
-#define SENSOR_TYPE_GRAVITY (9)
+#define SENSOR_TYPE_GRAVITY (9)
#endif
#ifndef SENSOR_TYPE_LINEAR_ACCELERATION
-#define SENSOR_TYPE_LINEAR_ACCELERATION (10)
+#define SENSOR_TYPE_LINEAR_ACCELERATION (10)
#endif
#ifndef SENSOR_TYPE_ROTATION_VECTOR
-#define SENSOR_TYPE_ROTATION_VECTOR (11)
+#define SENSOR_TYPE_ROTATION_VECTOR (11)
#endif
#ifndef SENSOR_TYPE_RELATIVE_HUMIDITY
-#define SENSOR_TYPE_RELATIVE_HUMIDITY (12)
+#define SENSOR_TYPE_RELATIVE_HUMIDITY (12)
#endif
#ifndef SENSOR_TYPE_AMBIENT_TEMPERATURE
-#define SENSOR_TYPE_AMBIENT_TEMPERATURE (13)
+#define SENSOR_TYPE_AMBIENT_TEMPERATURE (13)
+#endif
+#ifndef SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED
+#define SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED (14)
+#endif
+#ifndef SENSOR_TYPE_GAME_ROTATION_VECTOR
+#define SENSOR_TYPE_GAME_ROTATION_VECTOR (15)
+#endif
+#ifndef SENSOR_TYPE_GYROSCOPE_UNCALIBRATED
+#define SENSOR_TYPE_GYROSCOPE_UNCALIBRATED (16)
+#endif
+#ifndef SENSOR_TYPE_SIGNIFICANT_MOTION
+#define SENSOR_TYPE_SIGNIFICANT_MOTION (17)
+#endif
+#ifndef SENSOR_TYPE_STEP_DETECTOR
+#define SENSOR_TYPE_STEP_DETECTOR (18)
#endif
-//#define SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED (14)
-//#define SENSOR_TYPE_GAME_ROTATION_VECTOR (15)
-//#define SENSOR_TYPE_GYROSCOPE_UNCALIBRATED (16)
-//#define SENSOR_TYPE_SIGNIFICANT_MOTION (17)
-//#define SENSOR_TYPE_STEP_DETECTOR (18)
#ifndef SENSOR_TYPE_STEP_COUNTER
-#define SENSOR_TYPE_STEP_COUNTER (19)
+#define SENSOR_TYPE_STEP_COUNTER (19)
#endif
-//#define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR (20)
-
-Q_GLOBAL_STATIC(HybrisManager, hybrisManager)
+#ifndef SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR
+#define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR (20)
+#endif
+#ifndef SENSOR_TYPE_HEART_RATE
+#define SENSOR_TYPE_HEART_RATE (21)
+#endif
+#ifndef SENSOR_TYPE_TILT_DETECTOR
+#define SENSOR_TYPE_TILT_DETECTOR (22)
+#endif
+#ifndef SENSOR_TYPE_WAKE_GESTURE
+#define SENSOR_TYPE_WAKE_GESTURE (23)
+#endif
+#ifndef SENSOR_TYPE_GLANCE_GESTURE
+#define SENSOR_TYPE_GLANCE_GESTURE (24)
+#endif
+#ifndef SENSOR_TYPE_PICK_UP_GESTURE
+#define SENSOR_TYPE_PICK_UP_GESTURE (25)
+#endif
+#ifndef SENSOR_TYPE_WRIST_TILT_GESTURE
+#define SENSOR_TYPE_WRIST_TILT_GESTURE (26)
+#endif
+
+/* ========================================================================= *
+ * UTILITIES
+ * ========================================================================= */
+
+static char const *
+sensorTypeName(int type)
+{
+ switch (type) {
+ case SENSOR_TYPE_META_DATA: return "META_DATA";
+ case SENSOR_TYPE_ACCELEROMETER: return "ACCELEROMETER";
+ case SENSOR_TYPE_GEOMAGNETIC_FIELD: return "GEOMAGNETIC_FIELD";
+ case SENSOR_TYPE_ORIENTATION: return "ORIENTATION";
+ case SENSOR_TYPE_GYROSCOPE: return "GYROSCOPE";
+ case SENSOR_TYPE_LIGHT: return "LIGHT";
+ case SENSOR_TYPE_PRESSURE: return "PRESSURE";
+ case SENSOR_TYPE_TEMPERATURE: return "TEMPERATURE";
+ case SENSOR_TYPE_PROXIMITY: return "PROXIMITY";
+ case SENSOR_TYPE_GRAVITY: return "GRAVITY";
+ case SENSOR_TYPE_LINEAR_ACCELERATION: return "LINEAR_ACCELERATION";
+ case SENSOR_TYPE_ROTATION_VECTOR: return "ROTATION_VECTOR";
+ case SENSOR_TYPE_RELATIVE_HUMIDITY: return "RELATIVE_HUMIDITY";
+ case SENSOR_TYPE_AMBIENT_TEMPERATURE: return "AMBIENT_TEMPERATURE";
+ case SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED: return "MAGNETIC_FIELD_UNCALIBRATED";
+ case SENSOR_TYPE_GAME_ROTATION_VECTOR: return "GAME_ROTATION_VECTOR";
+ case SENSOR_TYPE_GYROSCOPE_UNCALIBRATED: return "GYROSCOPE_UNCALIBRATED";
+ case SENSOR_TYPE_SIGNIFICANT_MOTION: return "SIGNIFICANT_MOTION";
+ case SENSOR_TYPE_STEP_DETECTOR: return "STEP_DETECTOR";
+ case SENSOR_TYPE_STEP_COUNTER: return "STEP_COUNTER";
+ case SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR: return "GEOMAGNETIC_ROTATION_VECTOR";
+ case SENSOR_TYPE_HEART_RATE: return "HEART_RATE";
+ case SENSOR_TYPE_TILT_DETECTOR: return "TILT_DETECTOR";
+ case SENSOR_TYPE_WAKE_GESTURE: return "WAKE_GESTURE";
+ case SENSOR_TYPE_GLANCE_GESTURE: return "GLANCE_GESTURE";
+ case SENSOR_TYPE_PICK_UP_GESTURE: return "PICK_UP_GESTURE";
+ case SENSOR_TYPE_WRIST_TILT_GESTURE: return "WRIST_TILT_GESTURE";
+ }
+
+ static char buf[32];
+ snprintf(buf, sizeof buf, "type%d", type);
+ return buf;
+}
-HybrisManager::HybrisManager(QObject *parent)
- : QObject(parent)
- , device(NULL)
- , sensorList(NULL)
- , module(NULL)
- , sensorsCount(0)
- , sensorMap()
- , registeredAdaptors()
- , adaptorReader(parent)
+static void ObtainTemporaryWakeLock()
{
- init();
+ static bool triedToOpen = false;
+ static int wakeLockFd = -1;
+
+ if (!triedToOpen) {
+ triedToOpen = true;
+ wakeLockFd = ::open("/sys/power/wake_lock", O_RDWR);
+ if (wakeLockFd == -1) {
+ sensordLogW() << "wake locks not available:" << ::strerror(errno);
+ }
+ }
+
+ if (wakeLockFd != -1) {
+ sensordLogD() << "wake lock to guard sensor data io";
+ static const char m[] = "sensorfwd_pass_data 1000000000\n";
+ if (::write(wakeLockFd, m, sizeof m - 1) == -1) {
+ sensordLogW() << "wake locking failed:" << ::strerror(errno);
+ ::close(wakeLockFd), wakeLockFd = -1;
+ }
+ }
}
-HybrisManager::~HybrisManager()
+/* ========================================================================= *
+ * HybrisSensorState
+ * ========================================================================= */
+
+HybrisSensorState::HybrisSensorState()
+ : m_minDelay(0)
+ , m_maxDelay(0)
+ , m_delay(-1)
+ , m_active(-1)
{
- closeAllSensors();
+ memset(&m_fallbackEvent, 0, sizeof m_fallbackEvent);
}
-HybrisManager *HybrisManager::instance()
+HybrisSensorState::~HybrisSensorState()
{
- HybrisManager *priv = hybrisManager();
- return priv;
}
-void HybrisManager::init()
-{
- int errorCode = hw_get_module(SENSORS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
- if (errorCode != 0) {
- qDebug() << "hw_get_module() failed" << strerror(-errorCode);
+/* ========================================================================= *
+ * HybrisManager
+ * ========================================================================= */
+
+Q_GLOBAL_STATIC(HybrisManager, hybrisManager)
+
+HybrisManager::HybrisManager(QObject *parent)
+ : QObject(parent)
+ , m_initialized(false)
+ , m_registeredAdaptors()
+ , m_halModule(NULL)
+ , m_halDevice(NULL)
+ , m_halSensorCount(0)
+ , m_halSensorArray(NULL)
+ , m_halSensorState(NULL)
+ , m_halIndexOfType()
+ , m_halIndexOfHandle()
+ , m_halEventReaderTid(0)
+{
+ int err;
+
+ /* Open android sensor plugin */
+ err = hw_get_module(SENSORS_HARDWARE_MODULE_ID,
+ (hw_module_t const**)&m_halModule);
+ if (err != 0) {
+ m_halModule = 0;
+ sensordLogW() << "hw_get_module() failed" << strerror(-err);
return ;
}
- if (!openSensors()) {
- sensordLogW() << "Cannot open sensors";
+ /* Open android sensor device */
+ err = sensors_open(&m_halModule->common, &m_halDevice);
+ if (err != 0) {
+ m_halDevice = 0;
+ sensordLogW() << "sensors_open() failed:" << strerror(-err);
return;
}
- sensorsCount = module->get_sensors_list(module, &sensorList);
+ /* Get static sensor information */
+ m_halSensorCount = m_halModule->get_sensors_list(m_halModule, &m_halSensorArray);
+
+ /* Reserve space for sensor state data */
+ m_halSensorState = new HybrisSensorState[m_halSensorCount];
+
+ /* Select and initialize sensors to be used */
+ for (int i = 0 ; i < m_halSensorCount ; i++) {
+ /* Always do handle -> index mapping */
+ m_halIndexOfHandle.insert(m_halSensorArray[i].handle, i);
- for (int i = 0 ; i < sensorsCount ; i++) {
bool use = true;
// Assumption: The primary sensor variants that we want to
// use are listed before the secondary ones that we want
// to ignore -> Use the 1st entry found for each sensor type.
- if( sensorMap.contains(sensorList[i].type) ) {
+ if (m_halIndexOfType.contains(m_halSensorArray[i].type)) {
use = false;
}
// some devices have compass and compass raw,
// ignore compass raw. compass has range 360
- if (sensorList[i].type == SENSOR_TYPE_ORIENTATION &&
- sensorList[i].maxRange != 360) {
+ if (m_halSensorArray[i].type == SENSOR_TYPE_ORIENTATION &&
+ m_halSensorArray[i].maxRange != 360) {
use = false;
}
- sensordLogW() << Q_FUNC_INFO
+ sensordLogD() << Q_FUNC_INFO
<< (use ? "SELECT" : "IGNORE")
- << "type:" << sensorList[i].type
- << "name:" << (sensorList[i].name ?: "n/a");
+ << "type:" << m_halSensorArray[i].type
+ << "name:" << (m_halSensorArray[i].name ?: "n/a");
if (use) {
- sensorMap.insert(sensorList[i].type, i);
+ // min/max delay is specified in [us] -> convert to [ms]
+ int minDelay = (m_halSensorArray[i].minDelay + 999) / 1000;
+ int maxDelay = (m_halSensorArray[i].maxDelay + 999) / 1000;
+
+ // Positive minDelay means delay /can/ be set - but depending
+ // on sensor hal implementation it can also mean that some
+ // delay /must/ be set or the sensor does not start reporting
+ // despite being enabled -> as an protection agains clients
+ // failing to explicitly set delays / using delays that would
+ // get rejected by upper levels of sensorfwd logic -> setup
+ // 200 ms delay (capped to reported min/max range).
+ if (minDelay >= 0) {
+ if (maxDelay < minDelay)
+ maxDelay = minDelay;
+
+ int delay = minDelay ? 200 : 0;
+ if (delay < minDelay)
+ delay = minDelay;
+ else if (delay > maxDelay )
+ delay = maxDelay;
+
+ m_halSensorState[i].m_minDelay = minDelay;
+ m_halSensorState[i].m_maxDelay = maxDelay;
+
+ halSetActive(m_halSensorArray[i].handle, true);
+ halSetDelay(m_halSensorArray[i].handle, delay);
+ }
+ m_halIndexOfType.insert(m_halSensorArray[i].type, i);
+
+ /* Set sane fallback values for select sensors in case the
+ * hal does not report initial values. */
+ sensors_event_t *eve = &m_halSensorState[i].m_fallbackEvent;
+ eve->version = sizeof *eve;
+ eve->sensor = m_halSensorArray[i].handle;
+ eve->type = m_halSensorArray[i].type;
+
+ switch (m_halSensorArray[i].type) {
+ case SENSOR_TYPE_LIGHT:
+ // Roughly indoor lightning
+ eve->light = 400;
+ break;
+
+ case SENSOR_TYPE_PROXIMITY:
+ // Not-covered
+ eve->distance = m_halSensorArray[i].maxRange;
+ break;
+ default:
+ eve->sensor = 0;
+ eve->type = 0;
+ break;
+ }
}
+
+ /* Make sure all sensors are initially in stopped state */
+ halSetActive(m_halSensorArray[i].handle, false);
+ }
+
+ /* Start android sensor event reader */
+ err = pthread_create(&m_halEventReaderTid, 0, halEventReaderThread, this);
+ if (err) {
+ m_halEventReaderTid = 0;
+ sensordLogC() << "Failed to start hal reader thread";
+ return;
}
+ sensordLogD() << "Hal reader thread started";
+
+ m_initialized = true;
}
-int HybrisManager::handleForType(int sensorType)
+HybrisManager::~HybrisManager()
{
- if (sensorMap.contains(sensorType))
- return sensorList[sensorMap[sensorType]].handle;
+ sensordLogD() << "stop all sensors";
+ foreach (HybrisAdaptor *adaptor, m_registeredAdaptors.values()) {
+ adaptor->stopSensor();
+ }
- sensordLogW() << Q_FUNC_INFO << "No sensor of type:" << sensorType;
- return -1;
+ if (m_halDevice) {
+ sensordLogD() << "close sensor device";
+ int errorCode = sensors_close(m_halDevice);
+ if (errorCode != 0) {
+ sensordLogW() << "sensors_close() failed:" << strerror(-errorCode);
+ }
+ m_halDevice = NULL;
+ }
+
+ if (m_halEventReaderTid) {
+ sensordLogD() << "Canceling hal reader thread";
+ int err = pthread_cancel(m_halEventReaderTid);
+ if (err) {
+ sensordLogC() << "Failed to cancel hal reader thread";
+ } else {
+ sensordLogD() << "Waiting for hal reader thread to exit";
+ void *ret = 0;
+ struct timespec tmo = { 0, 0};
+ clock_gettime(CLOCK_REALTIME, &tmo);
+ tmo.tv_sec += 3;
+ err = pthread_timedjoin_np(m_halEventReaderTid, &ret, &tmo);
+ if (err) {
+ sensordLogC() << "Hal reader thread did not exit";
+ } else {
+ sensordLogD() << "Hal reader thread terminated";
+ m_halEventReaderTid = 0;
+ }
+ }
+ if (m_halEventReaderTid) {
+ /* The reader thread is stuck at android hal blob.
+ * Continuing would be likely to release resourse
+ * still in active use and lead to segfaulting.
+ * Resort to doing a quick and dirty exit. */
+ _exit(EXIT_FAILURE);
+ }
+ }
+ delete[] m_halSensorState;
}
-int HybrisManager::maxRange(int sensorType)
+HybrisManager *HybrisManager::instance()
{
- if (sensorMap.contains(sensorType))
- return sensorList[sensorMap[sensorType]].maxRange;
- return 0;
+ HybrisManager *priv = hybrisManager();
+ return priv;
}
-int HybrisManager::minDelay(int sensorType)
+int HybrisManager::halHandleForType(int sensorType) const
{
- if (sensorMap.contains(sensorType))
- return sensorList[sensorMap[sensorType]].minDelay;
- return 0;
+ int index = halIndexForType(sensorType);
+ return (index < 0) ? -1 : m_halSensorArray[index].handle;
}
-int HybrisManager::resolution(int sensorType)
+sensors_event_t *HybrisManager::halEventForHandle(int handle) const
{
- if (sensorMap.contains(sensorType))
- return sensorList[sensorMap[sensorType]].resolution;
- return 0;
+ sensors_event_t *event = 0;
+ int index = halIndexForHandle(handle);
+ if (index != -1) {
+ event = &m_halSensorState[index].m_fallbackEvent;
+ }
+ return event;
}
-bool HybrisManager::setDelay(int sensorHandle, int interval)
+int HybrisManager::halIndexForHandle(int handle) const
{
- bool ok = true;
- if (interval > 0) {
- int result = device->setDelay(device, sensorHandle, interval);
- if (result < 0) {
- sensordLogW() << "setDelay() failed" << strerror(-result);
- ok = false;
- }
- }
- QList <HybrisAdaptor *> list;
- list = registeredAdaptors.values();
- for (int i = 0; i < list.count(); i++) {
- if (list.at(i)->sensorHandle == sensorHandle) {
- list.at(i)->sendInitialData();
- }
- }
+ int index = m_halIndexOfHandle.value(handle, -1);
+ if (index == -1)
+ sensordLogW("HYBRIS CTL invalid sensor handle: %d", handle);
+ return index;
+}
- return ok;
+int HybrisManager::halIndexForType(int sensorType) const
+{
+ int index = m_halIndexOfType.value(sensorType, -1);
+ if (index == -1)
+ sensordLogW("HYBRIS CTL invalid sensor type: %d", sensorType);
+ return index;
}
void HybrisManager::startReader(HybrisAdaptor *adaptor)
{
- if (registeredAdaptors.values().contains(adaptor)) {
- sensordLogD() << "activating " << adaptor->name() << adaptor->sensorHandle;
- int error = device->activate(device, adaptor->sensorHandle, 1);
- if (error != 0) {
- sensordLogW() <<Q_FUNC_INFO<< "failed for"<< strerror(-error);
+ if (m_registeredAdaptors.values().contains(adaptor)) {
+ sensordLogD() << "activating " << adaptor->name() << adaptor->m_sensorHandle;
+ if (!halSetActive(adaptor->m_sensorHandle, true)) {
+ sensordLogW() <<Q_FUNC_INFO<< "failed";
adaptor->setValid(false);
}
- if (!adaptorReader.isRunning())
- adaptorReader.startReader();
}
}
void HybrisManager::stopReader(HybrisAdaptor *adaptor)
{
- QList <HybrisAdaptor *> list;
- list = registeredAdaptors.values();
- bool okToStop = true;
-
- for (int i = 0; i < list.count(); i++) {
- if (list.at(i) == adaptor && !list.at(i)->isRunning()) {
+ if (m_registeredAdaptors.values().contains(adaptor)) {
sensordLogD() << "deactivating " << adaptor->name();
- int error = device->activate(device, adaptor->sensorHandle, 0);
- if (error != 0) {
- sensordLogW() <<Q_FUNC_INFO<< "failed for"<< strerror(-error);
+ if (!halSetActive(adaptor->m_sensorHandle, false)) {
+ sensordLogW() <<Q_FUNC_INFO<< "failed";
}
- }
- if (list.at(i) != adaptor && list.at(i)->shouldBeRunning_) {
- okToStop = false;
- }
}
- qDebug() << "okToStop" << okToStop;
-
- if (okToStop) {
- adaptorReader.stopReader();
- }
}
-bool HybrisManager::resumeReader(HybrisAdaptor *adaptor)
+void HybrisManager::processSample(const sensors_event_t& data)
{
- sensordLogD() << Q_FUNC_INFO << adaptor->id()
- << adaptor->deviceStandbyOverride()
- << adaptor->isRunning(); //alwaysOn
-
- if (!adaptor->isRunning()) {
- sensordLogD() << "activating for resume" << adaptor->name();
- int error = device->activate(device, adaptor->sensorHandle, 1);
- if (error != 0) {
- sensordLogW() <<Q_FUNC_INFO<< "failed for"<< strerror(-error);
+ foreach (HybrisAdaptor *adaptor, m_registeredAdaptors.values(data.type)) {
+ if (adaptor->isRunning()) {
+ adaptor->processSample(data);
}
}
- return true;
}
-void HybrisManager::standbyReader(HybrisAdaptor *adaptor)
+void HybrisManager::registerAdaptor(HybrisAdaptor *adaptor)
{
- sensordLogD() << Q_FUNC_INFO << adaptor->id()
- << adaptor->deviceStandbyOverride()
- << adaptor->isRunning(); //alwaysOn
-
- if (adaptor->isRunning() && !adaptor->deviceStandbyOverride()) {
- sensordLogD() << "deactivating for standby" << adaptor->name();
- int error = device->activate(device, adaptor->sensorHandle, 0);
- if (error != 0) {
- sensordLogW() <<Q_FUNC_INFO<< "failed for"<< strerror(-error);
- }
+ if (!m_registeredAdaptors.values().contains(adaptor) && adaptor->isValid()) {
+ m_registeredAdaptors.insertMulti(adaptor->m_sensorType, adaptor);
}
}
-bool HybrisManager::openSensors()
+float HybrisManager::halGetMaxRange(int handle) const
{
- if (!device) {
- sensordLogD() << "Calling sensors_open";
- int errorCode = sensors_open(&module->common, &device);
- if (errorCode != 0) {
- sensordLogW() << "sensors_open() failed:" << strerror(-errorCode);
- device = NULL;
- }
+ float range = 0;
+ int index = halIndexForHandle(handle);
+
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+
+ range = sensor->maxRange;
+ sensordLogT("HYBRIS CTL getMaxRange(%d=%s) -> %g",
+ sensor->handle, sensorTypeName(sensor->type), range);
}
- return (device != NULL);
+ return range;
}
-bool HybrisManager::closeSensors()
+float HybrisManager::halGetResolution(int handle) const
{
- if (device) {
- foreach (HybrisAdaptor *adaptor, registeredAdaptors.values()) {
- if (adaptor->isRunning()) {
- sensordLogW() << Q_FUNC_INFO << "still running:" << adaptor;
- return false;
- }
- }
+ float resolution = 0;
+ int index = halIndexForHandle(handle);
- sensordLogD() << "Calling sensors_close";
- int errorCode = sensors_close(device);
- if (errorCode != 0) {
- sensordLogW() << "sensors_close() failed:" << strerror(-errorCode);
- }
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+
+ resolution = sensor->resolution;
+ sensordLogT("HYBRIS CTL getResolution(%d=%s) -> %g",
+ sensor->handle, sensorTypeName(sensor->type), resolution);
}
- device = NULL;
- return true;
+ return resolution;
}
-void HybrisManager::closeAllSensors()
+int HybrisManager::halGetMinDelay(int handle) const
{
- QList <HybrisAdaptor *> list;
- list = registeredAdaptors.values();
+ int delay = 0;
+ int index = halIndexForHandle(handle);
- for (int i = 0; i < list.count(); i++) {
- if (list.at(i)->isRunning())
- list.at(i)->stopSensor();
- }
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+ HybrisSensorState *state = &m_halSensorState[index];
- if (!closeSensors()) {
- sensordLogW() << "Cannot close sensors";
+ delay = state->m_minDelay;
+ sensordLogT("HYBRIS CTL getMinDelay(%d=%s) -> %d",
+ sensor->handle, sensorTypeName(sensor->type), delay);
}
+
+ return delay;
}
-void HybrisManager::processSample(const sensors_event_t& data)
+int HybrisManager::halGetMaxDelay(int handle) const
{
- foreach (HybrisAdaptor *adaptor, registeredAdaptors.values(data.type)) {
- if (adaptor->isRunning()) {
- adaptor->processSample(data);
- }
+ int delay = 0;
+ int index = halIndexForHandle(handle);
+
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+ HybrisSensorState *state = &m_halSensorState[index];
+
+ delay = state->m_maxDelay;
+ sensordLogT("HYBRIS CTL getMaxDelay(%d=%s) -> %d",
+ sensor->handle, sensorTypeName(sensor->type), delay);
}
+
+ return delay;
}
-void HybrisManager::registerAdaptor(HybrisAdaptor *adaptor)
+int HybrisManager::halGetDelay(int handle) const
{
- if (!registeredAdaptors.values().contains(adaptor) && adaptor->isValid()) {
- registeredAdaptors.insertMulti(adaptor->sensorType, adaptor);
- }
-}
+ int delay = 0;
+ int index = halIndexForHandle(handle);
-//////////////////////////////////
-HybrisAdaptor::HybrisAdaptor(const QString& id, int type)
- : DeviceAdaptor(id),
- sensorType(type),
- cachedInterval(50),
- inStandbyMode_(false),
- running_(false)
-{
- sensorHandle = hybrisManager()->handleForType(sensorType);
- if (sensorHandle == -1) {
- qDebug() << Q_FUNC_INFO <<"no such sensor" << id;
- setValid(false);
- return;
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+ HybrisSensorState *state = &m_halSensorState[index];
+
+ delay = state->m_delay;
+ sensordLogT("HYBRIS CTL getDelay(%d=%s) -> %d",
+ sensor->handle, sensorTypeName(sensor->type), delay);
}
- hybrisManager()->registerAdaptor(this);
- init();
- introduceAvailableInterval(DataRange(minDelay, 1000, 0));
- introduceAvailableDataRange(DataRange(-(maxRange*.5), (maxRange*.5), 1));
+ return delay;
}
-HybrisAdaptor::~HybrisAdaptor()
+bool HybrisManager::halSetDelay(int handle, int delay_ms)
{
-}
+ bool success = false;
+ int index = halIndexForHandle(handle);
-void HybrisAdaptor::init()
-{
- maxRange = hybrisManager()->maxRange(sensorType);
- minDelay = hybrisManager()->minDelay(sensorType);
- if (minDelay > 1000)
- minDelay = 0;
- resolution = hybrisManager()->resolution(sensorType);
-}
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+ HybrisSensorState *state = &m_halSensorState[index];
-bool HybrisAdaptor::addSensorType(int type)
-{
- sensorIds.append(type);
- return true;
-}
+ if (state->m_delay == delay_ms) {
+ sensordLogT("HYBRIS CTL setDelay(%d=%s, %d) -> no-change",
+ sensor->handle, sensorTypeName(sensor->type), delay_ms);
+ } else {
+ int64_t delay_ns = delay_ms * 1000LL * 1000LL;
+ int error = m_halDevice->setDelay(m_halDevice, sensor->handle, delay_ns);
+ if (error) {
+ sensordLogW("HYBRIS CTL setDelay(%d=%s, %d) -> %d=%s",
+ sensor->handle, sensorTypeName(sensor->type), delay_ms,
+ error, strerror(error));
+ } else {
+ sensordLogD("HYBRIS CTL setDelay(%d=%s, %d) -> success",
+ sensor->handle, sensorTypeName(sensor->type), delay_ms);
+ state->m_delay = delay_ms;
+ success = true;
+ }
+ }
+ }
-bool HybrisAdaptor::startAdaptor()
-{
- if (!isValid())
- return false;
- return hybrisManager()->openSensors();
+ return success;
}
-bool HybrisAdaptor::isRunning() const
+bool HybrisManager::halGetActive(int handle) const
{
- return running_;
-}
+ bool active = false;
+ int index = halIndexForHandle(handle);
-void HybrisAdaptor::stopAdaptor()
-{
- if (getAdaptedSensor()->isRunning())
- stopSensor();
- hybrisManager()->closeSensors();
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+ HybrisSensorState *state = &m_halSensorState[index];
+
+ active = (state->m_active > 0);
+ sensordLogT("HYBRIS CTL getActive(%d=%s) -> %s",
+ sensor->handle, sensorTypeName(sensor->type),
+ active ? "true" : "false");
+ }
+ return active;
}
-bool HybrisAdaptor::startSensor()
+bool HybrisManager::halSetActive(int handle, bool active)
{
- AdaptedSensorEntry *entry = getAdaptedSensor();
- if (entry == NULL) {
- qDebug() << "Sensor not found: " << name();
- return false;
- }
+ bool success = false;
+ int index = halIndexForHandle(handle);
- // Increase listener count
- entry->addReference();
+ if (index != -1) {
+ const struct sensor_t *sensor = &m_halSensorArray[index];
+ HybrisSensorState *state = &m_halSensorState[index];
- /// Check from entry
- if (isRunning()) {
- qDebug() << Q_FUNC_INFO << "already running";
- shouldBeRunning_ = true;
- return false;
+ if (state->m_active == active) {
+ sensordLogT("HYBRIS CTL setActive%d=%s, %s) -> no-change",
+ sensor->handle, sensorTypeName(sensor->type), active ? "true" : "false");
+ success = true;
+ } else {
+ int error = m_halDevice->activate(m_halDevice, sensor->handle, active);
+ if (error) {
+ sensordLogW("HYBRIS CTL setActive%d=%s, %s) -> %d=%s",
+ sensor->handle, sensorTypeName(sensor->type), active ? "true" : "false",
+ error, strerror(error));
+ } else {
+ sensordLogD("HYBRIS CTL setActive%d=%s, %s) -> success",
+ sensor->handle, sensorTypeName(sensor->type), active ? "true" : "false");
+ state->m_active = active;
+ success = true;
+ }
+ if (state->m_active == true && state->m_delay != -1) {
+ sensordLogD("HYBRIS CTL FORCE DELAY UPDATE");
+ int delay_ms = state->m_delay;
+ state->m_delay = -1;
+ halSetDelay(handle, delay_ms);
+ }
+ }
}
+ return success;
+}
- // Do not open if in standby mode.
- if (inStandbyMode_ && !deviceStandbyOverride()) {
- qDebug() << Q_FUNC_INFO << "inStandbyMode_ true";
- return false;
- }
+void *HybrisManager::halEventReaderThread(void *aptr)
+{
+ HybrisManager *manager = static_cast<HybrisManager *>(aptr);
+ static const size_t numEvents = 16;
+ sensors_event_t buffer[numEvents];
+ /* Async cancellation, but disabled */
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, 0);
+ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0);
+ /* Leave INT/TERM signal processing up to the main thread */
+ sigset_t ss;
+ sigemptyset(&ss);
+ sigaddset(&ss, SIGINT);
+ sigaddset(&ss, SIGTERM);
+ pthread_sigmask(SIG_BLOCK, &ss, 0);
+ /* Loop until explicitly canceled */
+ for (;;) {
+ /* Async cancellation point at android hal poll() */
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0);
+ int numberOfEvents = manager->m_halDevice->poll(manager->m_halDevice, buffer, numEvents);
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, 0);
+ /* Rate limit in poll() error situations */
+ if (numberOfEvents < 0) {
+ sensordLogW() << "android device->poll() failed" << strerror(-numberOfEvents);
+ struct timespec ts = { 1, 0 }; // 1000 ms
+ do { } while (nanosleep(&ts, &ts) == -1 && errno == EINTR);
+ continue;
+ }
+ /* Process received events */
+ bool blockSuspend = false;
+ bool errorInInput = false;
+ for (int i = 0; i < numberOfEvents; i++) {
+ const sensors_event_t& data = buffer[i];
+
+ sensordLogT("HYBRIS EVE %s", sensorTypeName(data.type));
+
+ /* Got data -> Clear the no longer needed fallback event */
+ sensors_event_t *fallback = manager->halEventForHandle(data.sensor);
+ if (fallback && fallback->type == data.type && fallback->sensor == data.sensor) {
+ fallback->type = fallback->sensor = 0;
+ }
- shouldBeRunning_ = true;
- /// We are waking up from standby or starting fresh, no matter
- inStandbyMode_ = false;
-
- if (!startReaderThread()) {
- entry->removeReference();
- entry->setIsRunning(false);
- running_ = false;
- shouldBeRunning_ = false;
- return false;
+ if (data.version != sizeof(sensors_event_t)) {
+ sensordLogW()<< QString("incorrect event version (version=%1, expected=%2").arg(data.version).arg(sizeof(sensors_event_t));
+ errorInInput = true;
+ }
+ if (data.type == SENSOR_TYPE_PROXIMITY) {
+ blockSuspend = true;
+ }
+ // FIXME: is this thread safe?
+ manager->processSample(data);
+ }
+ /* Suspend proof sensor reporting that could occur in display off */
+ if (blockSuspend) {
+ ObtainTemporaryWakeLock();
+ }
+ /* Rate limit after receiving erraneous events */
+ if (errorInInput) {
+ struct timespec ts = { 0, 50 * 1000 * 1000 }; // 50 ms
+ do { } while (nanosleep(&ts, &ts) == -1 && errno == EINTR);
+ }
}
-
- entry->setIsRunning(true);
- running_ = true;
- shouldBeRunning_ = true;
-
- return true;
+ return 0;
}
-void HybrisAdaptor::stopSensor()
-{
- AdaptedSensorEntry *entry = getAdaptedSensor();
+/* ========================================================================= *
+ * HybrisAdaptor
+ * ========================================================================= */
- if (entry == NULL) {
- sensordLogW() << "Sensor not found " << name();
+HybrisAdaptor::HybrisAdaptor(const QString& id, int type)
+ : DeviceAdaptor(id)
+ , m_inStandbyMode(false)
+ , m_isRunning(false)
+ , m_shouldBeRunning(false)
+ , m_sensorHandle(-1)
+ , m_sensorType(type)
+{
+ m_sensorHandle = hybrisManager()->halHandleForType(m_sensorType);
+ if (m_sensorHandle == -1) {
+ sensordLogW() << Q_FUNC_INFO <<"no such sensor" << id;
+ setValid(false);
return;
}
- qDebug() << "shouldBeRunning_" << shouldBeRunning_
- << "inStandbyMode_" << inStandbyMode_
- << "reference count" << entry->referenceCount();
- if (!shouldBeRunning_) {
- return;
- }
+ hybrisManager()->registerAdaptor(this);
+}
- entry->removeReference();
- if (entry->referenceCount() <= 0) {
- entry->setIsRunning(false);
- running_ = false;
- shouldBeRunning_ = false;
- inStandbyMode_ = false;
- if (!inStandbyMode_) {
- stopReaderThread();
- }
- }
+HybrisAdaptor::~HybrisAdaptor()
+{
+}
+
+void HybrisAdaptor::init()
+{
+ introduceAvailableDataRange(DataRange(minRange(), maxRange(), resolution()));
+ introduceAvailableInterval(DataRange(minInterval(), maxInterval(), 0));
}
+void HybrisAdaptor::sendInitialData()
+{
+ // virtual dummy
+ // used for ps/als initial value hacks
+}
-bool HybrisAdaptor::standby()
+bool HybrisAdaptor::writeToFile(const QByteArray& path, const QByteArray& content)
{
- sensordLogD() << "Adaptor '" << id() << "' requested to go to standby" << "deviceStandbyOverride" << deviceStandbyOverride();
- if (inStandbyMode_ && deviceStandbyOverride()) {
- sensordLogD() << "Adaptor '" << id() << "' not going to standby: already in standby";
+ sensordLogT() << "Writing to '" << path << ": " << content;
+ QFile file(path);
+ if (!file.open(QIODevice::WriteOnly))
+ {
+ sensordLogW() << "Failed to open '" << path << "': " << file.errorString();
return false;
}
-
- if (!isRunning()) {
- sensordLogD() << "Adaptor '" << id() << "' not going to standby: not running";
+ if (file.write(content.constData(), content.size()) == -1)
+ {
+ sensordLogW() << "Failed to write to '" << path << "': " << file.errorString();
+ file.close();
return false;
}
- inStandbyMode_ = true;
- hybrisManager()->standbyReader(this);
- running_ = deviceStandbyOverride();
-
+ file.close();
return true;
}
+/* ------------------------------------------------------------------------- *
+ * range
+ * ------------------------------------------------------------------------- */
-bool HybrisAdaptor::resume()
+qreal HybrisAdaptor::minRange() const
{
- sensordLogD() << "Adaptor '" << id() << "' requested to resume from standby";
- sensordLogD() << "deviceStandbyOverride" << deviceStandbyOverride();
+ return 0;
+}
- // Don't resume if not in standby
- if (!inStandbyMode_ && !deviceStandbyOverride()) {
- sensordLogD() << "Adaptor '" << id() << "' not resuming: not in standby";
- return false;
- }
+qreal HybrisAdaptor::maxRange() const
+{
+ return hybrisManager()->halGetMaxRange(m_sensorHandle);
+}
- if (!shouldBeRunning_) {
- sensordLogD() << "Adaptor '" << id() << "' not resuming from standby: not running";
- return false;
- }
+qreal HybrisAdaptor::resolution() const
+{
+ return hybrisManager()->halGetResolution(m_sensorHandle);
+}
- sensordLogD() << "Adaptor '" << id() << "' resuming from standby";
- inStandbyMode_ = false;
+/* ------------------------------------------------------------------------- *
+ * interval
+ * ------------------------------------------------------------------------- */
- if (!hybrisManager()->resumeReader(this)) {
- sensordLogW() << "Adaptor '" << id() << "' failed to resume from standby!";
- return false;
- }
- running_ = true;
+unsigned int HybrisAdaptor::minInterval() const
+{
+ return hybrisManager()->halGetMinDelay(m_sensorHandle);
+}
- return true;
+unsigned int HybrisAdaptor::maxInterval() const
+{
+ return hybrisManager()->halGetMaxDelay(m_sensorHandle);
}
unsigned int HybrisAdaptor::interval() const
{
- return cachedInterval;
+ return hybrisManager()->halGetDelay(m_sensorHandle);
}
-bool HybrisAdaptor::setInterval(const unsigned int value, const int /*sessionId*/)
-{ // 1000000
- cachedInterval = value;
- bool ok;
- qreal ns = value * 1000000; // ms to ns
- ok = hybrisManager()->setDelay(sensorHandle, ns);
+bool HybrisAdaptor::setInterval(const unsigned int value, const int sessionId)
+{
+ Q_UNUSED(sessionId);
+
+ bool ok = hybrisManager()->halSetDelay(m_sensorHandle, value);
+
if (!ok) {
- qDebug() << Q_FUNC_INFO << "setInterval not ok";
- }
- return ok;
-}
+ sensordLogW() << Q_FUNC_INFO << "setInterval not ok";
+ } else {
+ /* If we have not yet received sensor data, apply fallback value */
+ sensors_event_t *fallback = hybrisManager()->halEventForHandle(m_sensorHandle);
+ if (fallback && fallback->sensor == m_sensorHandle && fallback->type == m_sensorType) {
+ sensordLogT("HYBRIS FALLBACK type:%s sensor:%d",
+ sensorTypeName(fallback->type),
+ fallback->sensor);
+ processSample(*fallback);
+ fallback->sensor = fallback->type = 0;
+ }
-void HybrisAdaptor::stopReaderThread()
-{
- hybrisManager()->stopReader(this);
- running_ = false;
-}
+ sendInitialData();
+ }
-bool HybrisAdaptor::startReaderThread()
-{
- running_ = true;
- hybrisManager()->startReader(this);
- return true;
+ return ok;
}
unsigned int HybrisAdaptor::evaluateIntervalRequests(int& sessionId) const
@@ -571,117 +844,109 @@
return highestValue > 0 ? highestValue : defaultInterval();
}
-bool HybrisAdaptor::writeToFile(const QByteArray& path, const QByteArray& content)
-{
- sensordLogT() << "Writing to '" << path << ": " << content;
- QFile file(path);
- if (!file.open(QIODevice::WriteOnly))
- {
- sensordLogW() << "Failed to open '" << path << "': " << file.errorString();
- return false;
- }
- if (file.write(content.constData(), content.size()) == -1)
- {
- sensordLogW() << "Failed to write to '" << path << "': " << file.errorString();
- file.close();
- return false;
- }
-
- file.close();
- return true;
-}
+/* ------------------------------------------------------------------------- *
+ * start/stop adaptor
+ * ------------------------------------------------------------------------- */
-/*/////////////////////////////////////////////////////////////////////
-/// \brief HybrisAdaptorReader::HybrisAdaptorReader
-/// \param parent
-///
-*/
-
-HybrisAdaptorReader::HybrisAdaptorReader(QObject *parent)
- : QThread(parent),
- running_(false)
+bool HybrisAdaptor::startAdaptor()
{
+ return isValid();
}
-HybrisAdaptorReader::~HybrisAdaptorReader()
+void HybrisAdaptor::stopAdaptor()
{
+ if (getAdaptedSensor()->isRunning())
+ stopSensor();
}
-////
-/// \brief HybrisAdaptorReader::stopReader
-///
-void HybrisAdaptorReader::stopReader()
-{
- running_ = false;
-}
+/* ------------------------------------------------------------------------- *
+ * start/stop sensor
+ * ------------------------------------------------------------------------- */
-void HybrisAdaptorReader::startReader()
+bool HybrisAdaptor::isRunning() const
{
- running_ = true;
- start();
+ return m_isRunning;
}
-static void ObtainTemporaryWakeLock()
+void HybrisAdaptor::evaluateSensor()
{
- static bool triedToOpen = false;
- static int wakeLockFd = -1;
-
- if (!triedToOpen) {
- triedToOpen = true;
- wakeLockFd = ::open("/sys/power/wake_lock", O_RDWR);
- if (wakeLockFd == -1) {
- sensordLogW() << "wake locks not available:" << ::strerror(errno);
- }
- }
-
- if (wakeLockFd != -1) {
- sensordLogD() << "wake lock to guard sensor data io";
- static const char m[] = "sensorfwd_pass_data 1000000000\n";
- if( ::write(wakeLockFd, m, sizeof m - 1) == -1 ) {
- sensordLogW() << "wake locking failed:" << ::strerror(errno);
- ::close(wakeLockFd), wakeLockFd = -1;
- }
+ // Get listener object
+ AdaptedSensorEntry *entry = getAdaptedSensor();
+ if (entry == NULL) {
+ sensordLogW() << Q_FUNC_INFO << "Sensor not found: " << name();
+ return;
}
-}
-
-void HybrisAdaptorReader::run()
-{
- int err = 0;
- static const size_t numEvents = 16;
- sensors_event_t buffer[numEvents];
- while (running_) {
- int numberOfEvents = hybrisManager()->device->poll(hybrisManager()->device, buffer, numEvents);
- if (numberOfEvents < 0) {
- sensordLogW() << "poll() failed" << strerror(-err);
- QThread::msleep(1000);
- } else {
- bool blockSuspend = false;
- bool errorInInput = false;
- for (int i = 0; i < numberOfEvents; i++) {
- const sensors_event_t& data = buffer[i];
+ // Check policy
+ bool runningAllowed = (deviceStandbyOverride() || !m_inStandbyMode);
- if (data.version != sizeof(sensors_event_t)) {
- sensordLogW()<< QString("incorrect event version (version=%1, expected=%2").arg(data.version).arg(sizeof(sensors_event_t));
- errorInInput = true;
- }
- if (data.type == SENSOR_TYPE_PROXIMITY) {
- blockSuspend = true;
- }
- hybrisManager()->processSample(data);
+ // Target state
+ bool startRunning = m_shouldBeRunning && runningAllowed;
+ if (m_isRunning != startRunning) {
+ if ((m_isRunning = startRunning)) {
+ hybrisManager()->startReader(this);
+ if (entry->addReference() == 1) {
+ entry->setIsRunning(true);
}
- if (blockSuspend) {
- ObtainTemporaryWakeLock();
+ /* If we have not yet received sensor data, apply fallback value */
+ sensors_event_t *fallback = hybrisManager()->halEventForHandle(m_sensorHandle);
+ if (fallback && fallback->sensor == m_sensorHandle && fallback->type == m_sensorType) {
+ sensordLogT("HYBRIS FALLBACK type:%s sensor:%d",
+ sensorTypeName(fallback->type),
+ fallback->sensor);
+ processSample(*fallback);
+ fallback->sensor = fallback->type = 0;
}
-
- if (errorInInput)
- QThread::msleep(50);
+ } else {
+ if (entry->removeReference() == 0) {
+ entry->setIsRunning(false);
+ }
+ hybrisManager()->stopReader(this);
}
+ sensordLogT() << Q_FUNC_INFO << "entry" << entry->name()
+ << "refs:" << entry->referenceCount() << "running:" << entry->isRunning();
}
- sensordLogT() << Q_FUNC_INFO << "runner thread end";
+}
+bool HybrisAdaptor::startSensor()
+{
+ // Note: This is overloaded and called by each HybrisXxxAdaptor::startSensor()
+ if (!m_shouldBeRunning) {
+ m_shouldBeRunning = true;
+ sensordLogT("%s m_shouldBeRunning = %d", sensorTypeName(m_sensorType), m_shouldBeRunning);
+ evaluateSensor();
+ }
+ return true;
+}
+
+void HybrisAdaptor::stopSensor()
+{
+ // Note: This is overloaded and called by each HybrisXxxAdaptor::stopSensor()
+ if (m_shouldBeRunning) {
+ m_shouldBeRunning = false;
+ sensordLogT("%s m_shouldBeRunning = %d", sensorTypeName(m_sensorType), m_shouldBeRunning);
+ evaluateSensor();
+ }
}
-////////////////////////////////////////////////////////
+bool HybrisAdaptor::standby()
+{
+ if (!m_inStandbyMode) {
+ m_inStandbyMode = true;
+ sensordLogT("%s m_inStandbyMode = %d", sensorTypeName(m_sensorType), m_inStandbyMode);
+ evaluateSensor();
+ }
+ return true;
+}
+
+bool HybrisAdaptor::resume()
+{
+ if (m_inStandbyMode) {
+ m_inStandbyMode = false;
+ sensordLogT("%s m_inStandbyMode = %d", sensorTypeName(m_sensorType), m_inStandbyMode);
+ evaluateSensor();
+ }
+ return true;
+}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/hybrisadaptor.h
^
|
@@ -26,73 +26,78 @@
#include <QTimer>
#include <QFile>
+#include <pthread.h>
+
#include "deviceadaptor.h"
#include <hardware/sensors.h>
#define SENSORFW_MCE_WATCHER
class HybrisAdaptor;
-class HybrisAdaptorReader : public QThread
+struct HybrisSensorState
{
- Q_OBJECT
- Q_DISABLE_COPY(HybrisAdaptorReader)
-
-public:
+ HybrisSensorState();
+ ~HybrisSensorState();
- HybrisAdaptorReader(QObject *parent);
- ~HybrisAdaptorReader();
-
- void run();
- void stopReader();
- void startReader();
-
-private:
- bool running_;
+ int m_minDelay;
+ int m_maxDelay;
+ int m_delay;
+ int m_active;
+ sensors_event_t m_fallbackEvent;
};
-
class HybrisManager : public QObject
{
Q_OBJECT
public:
- explicit HybrisManager(QObject *parent = 0);
static HybrisManager *instance();
- virtual ~HybrisManager();
-
- int handleForType(int sensorType);
- int maxRange(int sensorType);
- int minDelay(int sensorType);
- int resolution(int sensorType);
-
- bool setDelay(int handle, int interval);
- void startReader(HybrisAdaptor *adaptor);
- void stopReader(HybrisAdaptor *adaptor);
-
- bool resumeReader(HybrisAdaptor *adaptor);
- void standbyReader(HybrisAdaptor *adaptor);
-
- bool openSensors();
- bool closeSensors();
- void registerAdaptor(HybrisAdaptor * adaptor);
-
- void processSample(const sensors_event_t& data);
+ explicit HybrisManager(QObject *parent = 0);
+ virtual ~HybrisManager();
-protected:
- // methods
- void init();
- void closeAllSensors();
+ /* - - - - - - - - - - - - - - - - - - - *
+ * android sensor hal functions
+ * - - - - - - - - - - - - - - - - - - - */
+
+ sensors_event_t *halEventForHandle(int handle) const;
+ int halIndexForHandle(int handle) const;
+ int halIndexForType (int sensorType) const;
+ int halHandleForType (int sensorType) const;
+ float halGetMaxRange (int handle) const;
+ float halGetResolution (int handle) const;
+ int halGetMinDelay (int handle) const;
+ int halGetMaxDelay (int handle) const;
+ int halGetDelay (int handle) const;
+ bool halSetDelay (int handle, int delay_ms);
+ bool halGetActive (int handle) const;
+ bool halSetActive (int handle, bool active);
+
+ /* - - - - - - - - - - - - - - - - - - - *
+ * HybrisManager <--> sensorfwd
+ * - - - - - - - - - - - - - - - - - - - */
+
+ void startReader (HybrisAdaptor *adaptor);
+ void stopReader (HybrisAdaptor *adaptor);
+ void registerAdaptor (HybrisAdaptor * adaptor);
+ void processSample (const sensors_event_t& data);
+private:
// fields
- struct sensors_poll_device_t* device;
- struct sensor_t const* sensorList;
- struct sensors_module_t* module;
- int sensorsCount;
- QMap <int, int> sensorMap; //type, index
- QMap <int, HybrisAdaptor *> registeredAdaptors; //type, obj
- HybrisAdaptorReader adaptorReader;
+ bool m_initialized;
+ QMap <int, HybrisAdaptor *> m_registeredAdaptors; // type -> obj
+ struct sensors_module_t *m_halModule;
+ struct sensors_poll_device_t *m_halDevice;
+ int m_halSensorCount;
+ const struct sensor_t *m_halSensorArray; // [m_halSensorCount]
+ HybrisSensorState *m_halSensorState; // [m_halSensorCount]
+ QMap <int, int> m_halIndexOfType; // type -> index
+ QMap <int, int> m_halIndexOfHandle; // handle -> index
+ pthread_t m_halEventReaderTid;
friend class HybrisAdaptorReader;
+
+private:
+ static void *halEventReaderThread(void *aptr);
};
class HybrisAdaptor : public DeviceAdaptor
@@ -102,47 +107,44 @@
virtual ~HybrisAdaptor();
virtual void init();
- bool addSensorType(int type);
+
virtual bool startAdaptor();
- bool isRunning() const;
+ bool isRunning() const;
virtual void stopAdaptor();
+ void evaluateSensor();
virtual bool startSensor();
virtual void stopSensor();
virtual bool standby();
-
virtual bool resume();
- qreal maxRange;
- qint32 minDelay;
- qreal resolution;
+ virtual void sendInitialData();
friend class HybrisManager;
- int sensorHandle;
- int sensorType;
- int cachedInterval;
-
- virtual void sendInitialData() {}
protected:
virtual void processSample(const sensors_event_t& data) = 0;
+ qreal minRange() const;
+ qreal maxRange() const;
+ qreal resolution() const;
+
+ unsigned int minInterval() const;
+ unsigned int maxInterval() const;
+
virtual unsigned int interval() const;
virtual bool setInterval(const unsigned int value, const int sessionId);
virtual unsigned int evaluateIntervalRequests(int& sessionId) const;
static bool writeToFile(const QByteArray& path, const QByteArray& content);
private:
- void stopReaderThread();
- bool startReaderThread();
-
- QList<int> sensorIds;
- unsigned int interval_;
- bool inStandbyMode_;
- bool running_;
- bool shouldBeRunning_;
+ bool m_inStandbyMode;
+ volatile bool m_isRunning;
+ bool m_shouldBeRunning;
+ int m_sensorHandle;
+ int m_sensorType;
};
#endif // HybrisAdaptor_H
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/loader.cpp
^
|
@@ -31,13 +31,19 @@
#include <QPluginLoader>
#include <QStringList>
#include <QList>
+#include <QDir>
#include <QCoreApplication>
#include "logging.h"
#include "config.h"
+#ifdef USE_SSUSYSINFO
+# include <ssusysinfo/ssusysinfo.h>
+#endif
+
Loader::Loader()
{
+ scanAvailablePlugins();
}
Loader& Loader::instance()
@@ -47,99 +53,183 @@
return the_loader;
}
-bool Loader::loadPluginFile(const QString& name, QString *errorString, QStringList& newPluginNames, QList<PluginBase*>& newPlugins) const
-{
- sensordLogT() << "Loading plugin:" << name;
+#define PLUGIN_PREFIX_ENV "SENSORFW_LIBRARY_PATH"
+#define PLUGIN_DIRECTORY "/usr/lib/sensord-qt5"
+#define PLUGIN_PREFIX "lib"
+#define PLUGIN_SUFFIX "-qt5.so"
+#define SENSOR_SUFFIX "sensor"
-#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
- QString pluginPath = QString::fromLatin1("/usr/lib/sensord/lib%1.so").arg(name);
-#else
- QString pluginPath;
- QByteArray env = qgetenv("SENSORFW_LIBRARY_PATH");
- if (env.isEmpty())
- pluginPath = QString::fromLatin1("/usr/lib/sensord-qt5/lib%1-qt5.so").arg(name);
- else
- pluginPath = QString::fromLatin1(env+"/usr/lib/sensord-qt5/lib%1-qt5.so").arg(name);
+static QString getPluginDirectory()
+{
+ QByteArray env = qgetenv(PLUGIN_PREFIX_ENV);
+ return QString::fromUtf8(env + PLUGIN_DIRECTORY);
+}
-#endif
+static QString getPluginPath(const QString &name)
+{
+ return QString("%1/" PLUGIN_PREFIX "%2" PLUGIN_SUFFIX).arg(getPluginDirectory()).arg(name);
+}
- QPluginLoader qpl(pluginPath);
+bool Loader::loadPluginFile(const QString &name, QString &errorString, QStringList &stack)
+{
+ const QString resolvedName(resolveRealPluginName(name));
+ QPluginLoader qpl(getPluginPath(resolvedName));
qpl.setLoadHints(QLibrary::ExportExternalSymbolsHint);
- if (!qpl.load()) {
- *errorString = qpl.errorString();
- sensordLogC() << "plugin loading error: " << *errorString;
- return false;
- }
-
- QObject* object = qpl.instance();
- if (!object) {
- *errorString = "not able to instanciate";
- sensordLogC() << "plugin loading error: " << *errorString;
- return false;
- }
-
- PluginBase* plugin = qobject_cast<PluginBase*>(object);
- if (!plugin) {
- *errorString = "not a Plugin type";
- sensordLogC() << "plugin loading error: " << *errorString;
- return false;
- }
-
- // Add plugins to the front of the list so they are initialized in reverse order. This will guarantee that dependencies are initialized first for each plugin.
- newPluginNames.prepend(name);
- newPlugins.prepend(plugin);
-
- // Get dependencies
- QStringList requiredPlugins(plugin->Dependencies());
- sensordLogT() << name << " requires: " << requiredPlugins;
-
- bool loaded = true;
- for (int i = 0; i < requiredPlugins.size() && loaded; ++i) {
- if (!(loadedPluginNames_.contains(requiredPlugins.at(i)) ||
- newPluginNames.contains(requiredPlugins.at(i))))
- {
- sensordLogT() << requiredPlugins.at(i) << " is not yet loaded, trying to load.";
- QString resolvedName = resolveRealPluginName(requiredPlugins.at(i));
- sensordLogT() << requiredPlugins.at(i) << " resolved as " << resolvedName << ". Loading";
- loaded = loadPluginFile(resolvedName, errorString, newPluginNames, newPlugins);
+ QObject *object = 0;
+ PluginBase *plugin = 0;
+ sensordLogD() << "Loader loading plugin:" << resolvedName << "as:" << name << "from:" << qpl.fileName();
+ bool loaded = false;
+ bool cyclic = stack.contains(resolvedName);
+ stack.prepend(resolvedName);
+ if (cyclic) {
+ errorString = "cyclic plugin dependency";
+ sensordLogC() << "Plugin has cyclic dependency:" << resolvedName;
+ } else if (loadedPluginNames_.contains(resolvedName)) {
+ sensordLogD() << "Plugin is already loaded:" << resolvedName;
+ loaded = true;
+ } else if (!pluginAvailable(resolvedName)) {
+ errorString = "plugin not available";
+ sensordLogW() << "Plugin not available:" << resolvedName;
+ } else if (!qpl.load()) {
+ errorString = qpl.errorString();
+ sensordLogC() << "Plugin loading error:" << resolvedName << "-" << errorString;
+ } else if (!(object = qpl.instance())) {
+ errorString = "not able to instanciate";
+ sensordLogC() << "Plugin loading error: " << resolvedName << "-" << errorString;
+ } else if (!(plugin = qobject_cast<PluginBase*>(object))) {
+ errorString = "not a Plugin type";
+ sensordLogC() << "Plugin loading error: " << resolvedName << "-" << errorString;
+ } else {
+ loaded = true;
+ QStringList dependencies(plugin->Dependencies());
+ sensordLogD() << resolvedName << "requires:" << dependencies;
+ foreach (const QString &dependency, dependencies) {
+ if (!(loaded = loadPluginFile(dependency, errorString, stack))) {
+ break;
+ }
+ }
+ if (loaded) {
+ plugin->Register(*this);
+ loadedPluginNames_.append(resolvedName);
+ plugin->Init(*this);
}
}
+ stack.removeOne(resolvedName);
+ if (!loaded) {
+ invalidatePlugin(resolvedName);
+ }
return loaded;
}
-bool Loader::loadPlugin(const QString& name, QString* errorString)
+bool Loader::loadPlugin(const QString& name, QString *errorString)
{
QString error;
- bool loaded = false;
- QStringList newPluginNames;
- QList<PluginBase*> newPlugins;
-
- if (loadedPluginNames_.contains(name)) {
- sensordLogD() << "Plugin already loaded.";
- return true;
+ QStringList stack;
+ bool loaded = loadPluginFile(name, error, stack);
+ if (!loaded && errorString) {
+ *errorString = error;
}
+ return loaded;
+}
- if (loadPluginFile(name, &error, newPluginNames, newPlugins)) {
+#ifdef USE_SSUSYSINFO
+static ssusysinfo_t *ssusysinfo = 0;
+#endif
- // Register newly loaded plugins
- foreach (PluginBase* base, newPlugins) {
- base->Register(*this);
+static bool evaluateAvailabilityValue(const QString &name, const QString &val)
+{
+ bool available = true;
+ if (val.startsWith("Feature_")) {
+#ifdef USE_SSUSYSINFO
+ const QStringList features(val.split("|"));
+ bool allow = false;
+ bool deny = false;
+ foreach(const QString &feature, features) {
+ hw_feature_t id = ssusysinfo_hw_feature_from_name(feature.toUtf8().constData());
+ if (id == Feature_Invalid ) {
+ sensordLogW() << "unknown hw feature:" << feature;
+ continue;
+ }
+ if( ssusysinfo_has_hw_feature(ssusysinfo, id) ) {
+ allow = true;
+ break;
+ }
+ deny = true;
}
- loadedPluginNames_.append(newPluginNames);
- loaded = true;
+ if( deny && !allow ) {
+ sensordLogD() << "plugin disabled in hw-config: " << name << "value" << val;
+ available = false;
+ }
+#else
+ // When compiled without ssu-support, these are enabled by design
+ sensordLogD() << "sensor plugin enabled implicitly: " << name << "value" << val;
+#endif
+ } else if (val == "False") {
+ sensordLogD() << "plugin disabled sensorfwd config: " << name << "value" << val;
+ available = false;
+ } else if (name.endsWith(SENSOR_SUFFIX) && val != "True") {
+ // Warn about implicitly enabled sensor plugins
+ sensordLogW() << "sensor plugin enabled implicitly: " << name << "value" << val;
+ }
+ return available;
+}
- // Init newly loaded plugins
- foreach (PluginBase* base, newPlugins) {
- base->Init(*this);
+void Loader::scanAvailablePlugins()
+{
+#ifdef USE_SSUSYSINFO
+ if (!ssusysinfo) {
+ ssusysinfo = ssusysinfo_create();
+ }
+#endif
+ QStringList res;
+ QDir dir(getPluginDirectory());
+ dir.setFilter(QDir::Files | QDir::NoSymLinks | QDir::NoDot | QDir::NoDotDot);
+ const QString prefix(PLUGIN_PREFIX);
+ const QString suffix(PLUGIN_SUFFIX);
+ foreach (QString file, dir.entryList()) {
+ if (file.startsWith(prefix) && file.endsWith(suffix)) {
+ int beg = prefix.size();
+ int end = file.size() - suffix.size();
+ const QString name(file.mid(beg, end-beg));
+ QString key = QString("available/%1").arg(name);
+ QString val = Config::configuration()->value(key).toString();
+ if( evaluateAvailabilityValue(name, val) ) {
+ res.append(name);
+ }
}
+ }
+ availablePluginNames_ = res;
+#ifdef USE_SSUSYSINFO
+ ssusysinfo_delete(ssusysinfo), ssusysinfo = 0;
+#endif
+}
- } else {
- if(errorString)
- *errorString = error;
- loaded = false;
+QStringList Loader::availablePlugins() const
+{
+ return availablePluginNames_;
+}
+
+QStringList Loader::availableSensorPlugins() const
+{
+ QStringList res;
+ foreach(const QString &name, availablePluginNames_) {
+ if (name.endsWith(SENSOR_SUFFIX)) {
+ res.append(name);
+ }
}
+ return res;
+}
- return loaded;
+bool Loader::pluginAvailable(const QString &name) const
+{
+ return availablePluginNames_.contains(name);
+}
+
+void Loader::invalidatePlugin(const QString &name)
+{
+ if (availablePluginNames_.removeAll(name) > 0) {
+ sensordLogW() << "plugin marked invalid: " << name;
+ }
}
QString Loader::resolveRealPluginName(const QString& pluginName) const
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/loader.h
^
|
@@ -50,8 +50,31 @@
* @param name plugin name.
* @param errorMessage object to write error message if plugin loading
* fails. If NULL then error message is not written.
+ * @return true on success, false on failure
*/
- bool loadPlugin(const QString& name, QString* errorMessage = 0);
+ bool loadPlugin(const QString &name, QString *errorMessage = 0);
+
+ /**
+ * Test if a plugin is available for loading
+ *
+ * @param name plugin name
+ * @return true if plugin is available, false if not
+ */
+ bool pluginAvailable(const QString &name) const;
+
+ /**
+ * Get a list of plugins available for loading
+ *
+ * @return Array of plugin names
+ */
+ QStringList availablePlugins() const;
+
+ /**
+ * Get a list of sensor plugins available for loading
+ *
+ * @return Array of plugin names
+ */
+ QStringList availableSensorPlugins() const;
private:
Loader();
@@ -63,10 +86,11 @@
*
* @param name plugin to load.
* @param errorString object to write error message if plugin loading fails.
- * @param newPluginNames List of new loaded plugin names.
- * @param newPlugin List of new loaded plugin objects.
+ * @param stack Pending plugin load stack for detecting circular dependencies.
*/
- bool loadPluginFile(const QString& name, QString *errorString, QStringList& newPluginNames, QList<PluginBase*>& newPlugins) const;
+ bool loadPluginFile(const QString &name, QString &errorString, QStringList &stack);
+
+ void invalidatePlugin(const QString &name);
/**
* Resolve plugin name.
@@ -74,9 +98,13 @@
* @param pluginName plugin name.
* @return resolved plugin name.
*/
- QString resolveRealPluginName(const QString& pluginName) const;
+ QString resolveRealPluginName(const QString &pluginName) const;
QStringList loadedPluginNames_; /**< list of loaded plugins */
+
+ QStringList availablePluginNames_; /**< list of loaded plugins */
+
+ void scanAvailablePlugins();
};
#endif
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/logging.h
^
|
@@ -29,10 +29,9 @@
#include <QDebug>
-#define sensordLogT() (qDebug())
-#define sensordLogD() (qDebug())
-#define sensordLogW() (qWarning())
-#define sensordLogC() (qCritical())
-#define sensordLog() (qDebug())
+#define sensordLogT(ARGS_...) (qDebug(ARGS_))
+#define sensordLogD(ARGS_...) (qInfo(ARGS_))
+#define sensordLogW(ARGS_...) (qWarning(ARGS_))
+#define sensordLogC(ARGS_...) (qCritical(ARGS_))
#endif //LOGGING_H
|
[-]
[+]
|
Added |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/lsclient.cpp
^
|
@@ -0,0 +1,191 @@
+/**
+ @file lsclient.cpp
+ @brief LunaService signal utility
+
+ <p>
+ Copyright (C) 2009-2010 Nokia Corporation
+ Copyright (C) 2015-2018 Nikolay Nizov
+
+ @author Timo Rongas <ext-timo.2.rongas@nokia.com>
+ @author Lihan Guo <ext-lihan.4.guo@nokia.com>
+ @author Nikolay Nizov <nizovn@gmail.com>
+
+ This file is part of Sensord.
+
+ Sensord is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License
+ version 2.1 as published by the Free Software Foundation.
+
+ Sensord is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with Sensord. If not, see <http://www.gnu.org/licenses/>.
+ </p>
+ */
+
+#include "lsclient.h"
+#include "JSONUtils.h"
+#include "HostBase.h"
+#include <json.h>
+
+#define URI_SIGNAL_ADDMATCH "palm://com.palm.lunabus/signal/addmatch"
+#define JSON_CHARGER_SIGNAL_ADDMATCH "{\"category\":\"/com/palm/power\",\"method\":\"chargerStatus\"}"
+#define URI_DISPLAY_STATUS "palm://com.palm.display/control/status"
+#define JSON_DISPLAY_SUBSCRIBE "{\"subscribe\":true}"
+
+LSClient::LSClient(QObject* parent) : QObject(parent),
+ displayState(true),
+ powerSave(true)
+{
+ bool retVal;
+ LSError lserror;
+ LSErrorInit(&lserror);
+ LSHandle *serviceHandle;
+
+ retVal = LSRegister("com.nokia.SensorService", &serviceHandle, &lserror);
+ if (!retVal) {
+ goto error;
+ }
+
+ retVal = LSCall(serviceHandle, URI_SIGNAL_ADDMATCH, JSON_CHARGER_SIGNAL_ADDMATCH, LSClient::chargerCallback, this, NULL, &lserror);
+ if (!retVal) {
+ goto error;
+ }
+
+ retVal = LSCall(serviceHandle, URI_DISPLAY_STATUS, JSON_DISPLAY_SUBSCRIBE, LSClient::displayCallback, this, NULL, &lserror);
+ if (!retVal) {
+ goto error;
+ }
+
+ retVal = LSGmainAttach(serviceHandle, HostBase::instance()->mainLoop(), &lserror);
+ if (!retVal) {
+ goto error;
+ }
+
+ return;
+
+error:
+ if (LSErrorIsSet(&lserror)) {
+ LSErrorPrint(&lserror, stderr);
+ LSErrorFree(&lserror);
+ }
+
+ qDebug() << "Unable to start service.";
+}
+
+bool LSClient::displayEnabled() const
+{
+ return displayState;
+}
+
+bool LSClient::PSMEnabled() const
+{
+ return powerSave;
+}
+
+bool LSClient::chargerCallback(LSHandle *sh, LSMessage *message, void *ctx)
+{
+ LSError lserror;
+ LSErrorInit(&lserror);
+
+ // {"type": string, "connected": boolean}
+ VALIDATE_SCHEMA_AND_RETURN(sh,
+ message,
+ SCHEMA_2(REQUIRED(type, string), REQUIRED(connected, boolean)));
+
+ LSClient* lsclient = (LSClient*)ctx;
+
+ json_object* label = 0;
+ json_object* root = 0;
+ bool newState = true;
+ const char* str = LSMessageGetPayload(message);
+ if (!str)
+ goto error;
+
+ root = json_tokener_parse(str);
+ if (!root || is_error(root))
+ goto error;
+
+ label = json_object_object_get(root, "connected");
+ if (!label)
+ goto error;
+
+ newState = !json_object_get_boolean(label);
+
+ if (lsclient->powerSave != newState)
+ {
+ lsclient->powerSave = newState;
+ emit lsclient->devicePSMStateChanged(newState);
+ }
+
+error:
+
+ if (root && !is_error(root))
+ json_object_put(root);
+
+ return true;
+}
+
+bool LSClient::displayCallback(LSHandle *sh, LSMessage *message, void *ctx)
+{
+ LSError lserror;
+ LSErrorInit(&lserror);
+
+ VALIDATE_SCHEMA_AND_RETURN(sh,
+ message,
+ SCHEMA_7(
+ REQUIRED(returnValue, boolean),
+ REQUIRED(event, string),
+ OPTIONAL(state, string),
+ OPTIONAL(timeout, integer),
+ OPTIONAL(blockDisplay, string),
+ OPTIONAL(active, boolean),
+ OPTIONAL(subscribed, boolean)
+ ));
+
+ LSClient* lsclient = (LSClient*)ctx;
+
+ json_object* root = 0;
+ const char* value = 0;
+ bool newState = true;
+ bool ret = false;
+ const char* str = LSMessageGetPayload(message);
+ if (!str)
+ goto error;
+
+ root = json_tokener_parse(str);
+ if (!root || is_error(root))
+ goto error;
+
+ ret = json_object_get_boolean(json_object_object_get(root, "returnValue"));
+ if (!ret)
+ goto error;
+
+ value = json_object_get_string(json_object_object_get(root, "event"));
+ if (!value || is_error(value))
+ goto error;
+
+ if (0 == strcmp (value, "displayOff"))
+ newState = false;
+
+ value = json_object_get_string(json_object_object_get(root, "state"));
+ if (value && !is_error(value))
+ if (0 == strcmp (value, "off"))
+ newState = false;
+
+ if (lsclient->displayState != newState)
+ {
+ lsclient->displayState = newState;
+ emit lsclient->displayStateChanged(newState);
+ }
+
+error:
+
+ if (root && !is_error(root))
+ json_object_put(root);
+
+ return true;
+}
\ No newline at end of file
|
[-]
[+]
|
Added |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/lsclient.h
^
|
@@ -0,0 +1,103 @@
+/**
+ @file lsclient.h
+ @brief LunaService signal utility
+
+ <p>
+ Copyright (C) 2009-2010 Nokia Corporation
+ Copyright (C) 2015-2018 Nikolay Nizov
+
+ @author Timo Rongas <ext-timo.2.rongas@nokia.com>
+ @author Lihan Guo <ext-lihan.4.guo@nokia.com>
+ @author Antti Virtanen <antti.i.virtanen@nokia.com>
+ @author Nikolay Nizov <nizovn@gmail.com>
+
+ This file is part of Sensord.
+
+ Sensord is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License
+ version 2.1 as published by the Free Software Foundation.
+
+ Sensord is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with Sensord. If not, see <http://www.gnu.org/licenses/>.
+ </p>
+ */
+
+#ifndef SENSORD_LUNA_SERVICE_CLIENT_H
+#define SENSORD_LUNA_SERVICE_CLIENT_H
+
+#include <QObject>
+#include <luna-service2/lunaservice.h>
+
+/**
+ * Class for monitoring various LS signals.
+ */
+class LSClient : public QObject
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(LSClient)
+
+public:
+ /**
+ * Constructor.
+ *
+ * @param parent Parent object.
+ */
+ LSClient(QObject* parent = 0);
+
+ /**
+ * Get display state.
+ *
+ * @return display state.
+ */
+ bool displayEnabled() const;
+
+ /**
+ * Get powersave-mode state.
+ *
+ * @return powersave-mode state.
+ */
+ bool PSMEnabled() const;
+
+signals:
+ /**
+ * Emitted when display state has changed.
+ *
+ * @param displayOn \c true if display went to 'on' or 'dimmed',
+ * \c false if 'off'.
+ */
+ void displayStateChanged(bool displayOn);
+
+ /**
+ * Emitted when powersave-mode has changed.
+ *
+ * @param PSM is powersave-mode enabled or not.
+ */
+ void devicePSMStateChanged(bool PSM);
+
+private slots:
+ /**
+ * Slot for LS display state change signals.
+ *
+ * @param state name of the state.
+ */
+ static bool displayCallback(LSHandle *sh, LSMessage *message, void *ctx);
+
+ /**
+ * Slot for LS powersave-mode state change signals.
+ *
+ * @param mode is powersave-mode enabled or not.
+ */
+ static bool chargerCallback(LSHandle *sh, LSMessage *message, void *ctx);
+
+private:
+ bool displayState; /**< current display state */
+ bool powerSave; /**< current powersave-mode state */
+
+};
+
+#endif // SENSORD_LUNA_SERVICE_CLIENT_H
\ No newline at end of file
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/nodebase.cpp
^
|
@@ -80,7 +80,7 @@
{
if (!m_dataRangeList.contains(range))
{
- sensordLogD() << "Introduced new data range: " << range.min << "-" << range.max << ", " << range.resolution;
+ sensordLogD() << "Introduced new data range for '" << id_ << "':" << range.min << "-" << range.max << "," << range.resolution;
m_dataRangeList.append(range);
}
}
@@ -273,7 +273,7 @@
{
if (!m_intervalList.contains(interval))
{
- sensordLogD() << "Introduced new interval: " << interval.min << "-" << interval.max;
+ sensordLogD() << "Introduced new interval for '" << id_ << "':" << interval.min << "-" << interval.max;
m_intervalList.append(interval);
}
}
@@ -375,7 +375,7 @@
bool NodeBase::setStandbyOverrideRequest(const int sessionId, const bool override)
{
- sensordLogD() << sessionId << " requested standbyoverride for '" << id() << "' :" << override;
+ sensordLogD() << sessionId << "requested standbyoverride for '" << id() << "' :" << override;
// Only store true requests, id is enough, no need for value
if (override == false)
{
@@ -459,7 +459,7 @@
{
if (!isValidIntervalRequest(value))
{
- sensordLogW() << "Attempting to define invalid default data rate: " << value;
+ sensordLogW() << "Attempting to define invalid default data rate:" << value;
return false;
}
m_defaultInterval = value;
@@ -711,36 +711,41 @@
{
Q_UNUSED(range);
Q_UNUSED(sessionId);
+ sensordLogD() << __func__ << "not implemented in some node using it.";
return false;
}
bool NodeBase::setStandbyOverride(bool override)
{
Q_UNUSED(override);
+ sensordLogD() << __func__ << "not implemented in some node using it.";
return false;
}
unsigned int NodeBase::interval() const
{
+ sensordLogD() << __func__ << "not implemented in some node using it.";
return 0;
}
bool NodeBase::setInterval(unsigned int value, int sessionId)
{
- sensordLogW() << "setInterval() not implemented in some node using it.";
Q_UNUSED(value);
Q_UNUSED(sessionId);
+ sensordLogD() << __func__ << "not implemented in some node using it.";
return false;
}
bool NodeBase::setBufferSize(unsigned int value)
{
Q_UNUSED(value);
+ sensordLogD() << __func__ << "not implemented in some node using it.";
return false;
}
bool NodeBase::setBufferInterval(unsigned int value)
{
Q_UNUSED(value);
+ sensordLogD() << __func__ << "not implemented in some node using it.";
return false;
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/sensormanager.cpp
^
|
@@ -36,6 +36,9 @@
#ifdef SENSORFW_MCE_WATCHER
#include "mcewatcher.h"
#endif // SENSORFW_MCE_WATCHER
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+#include "lsclient.h"
+#endif // SENSORFW_LUNA_SERVICE_CLIENT
#include <QSocketNotifier>
#include <errno.h>
#include "sockethandler.h"
@@ -144,6 +147,17 @@
this, SLOT(devicePSMStateChanged(const bool)));
#endif //SENSORFW_MCE_WATCHER
+
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+
+ lsClient_ = new LSClient(this);
+ connect(lsClient_, SIGNAL(displayStateChanged(const bool)),
+ this, SLOT(displayStateChanged(const bool)));
+
+ connect(lsClient_, SIGNAL(devicePSMStateChanged(const bool)),
+ this, SLOT(devicePSMStateChanged(const bool)));
+
+#endif //SENSORFW_LUNA_SERVICE_CLIENT
}
SensorManager::~SensorManager()
@@ -203,6 +217,10 @@
#ifdef SENSORFW_MCE_WATCHER
delete mceWatcher_;
#endif //SENSORFW_MCE_WATCHER
+
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+ delete lsClient_;
+#endif //SENSORFW_LUNA_SERVICE_CLIENT
}
void SensorManager::setError(SensorManagerError errorCode, const QString& errorString)
@@ -292,7 +310,7 @@
void SensorManager::removeSensor(const QString& id)
{
- sensordLogD() << "Removing sensor: " << id;
+ sensordLogD() << "SensorManager removing sensor:" << id;
QMap<QString, SensorInstanceEntry>::iterator entryIt = sensorInstanceMap_.find(id);
bus().unregisterObject(OBJECT_PATH + "/" + id);
@@ -303,7 +321,7 @@
bool SensorManager::loadPlugin(const QString& name)
{
- sensordLogD() << "Loading plugin: " << name;
+ sensordLogD() << "SensorManager loading plugin:" << name;
QString errorMessage;
bool result;
@@ -315,9 +333,27 @@
return result;
}
+QStringList SensorManager::availablePlugins() const
+{
+ Loader& l = Loader::instance();
+ return l.availablePlugins();
+}
+
+bool SensorManager::pluginAvailable(const QString &name) const
+{
+ Loader& l = Loader::instance();
+ return l.pluginAvailable(name);
+}
+
+QStringList SensorManager::availableSensorPlugins() const
+{
+ Loader& l = Loader::instance();
+ return l.availableSensorPlugins();
+}
+
int SensorManager::requestSensor(const QString& id)
{
- sensordLogD() << "Requesting sensor: " << id;
+ sensordLogD() << "Requesting sensor:" << id;
clearError();
@@ -422,7 +458,7 @@
{
chain = chainFactoryMap_[type](id);
Q_ASSERT(chain);
- sensordLogD() << "Instantiated chain '" << id << "'. Valid = " << chain->isValid();
+ sensordLogD() << "Instantiated chain '" << id << "'. Valid =" << chain->isValid();
entryIt.value().cnt_++;
entryIt.value().chain_ = chain;
@@ -481,7 +517,7 @@
DeviceAdaptor* SensorManager::requestDeviceAdaptor(const QString& id)
{
- sensordLogD() << "Requesting adaptor: " << id;
+ sensordLogD() << "Requesting adaptor:" << id;
clearError();
if( id.contains(';') ) // no parameter passing in release
@@ -499,7 +535,7 @@
Q_ASSERT( entryIt.value().adaptor_ );
da = entryIt.value().adaptor_;
entryIt.value().cnt_++;
- sensordLogD() << "Found adaptor '" << id << "'. Ref count: " << entryIt.value().cnt_;
+ sensordLogD() << "Found adaptor '" << id << "'. Ref count:" << entryIt.value().cnt_;
}
else
{
@@ -520,7 +556,7 @@
{
entryIt.value().adaptor_ = da;
entryIt.value().cnt_++;
- sensordLogD() << "Instantiated adaptor '" << id << "'. Valid = " << da->isValid();
+ sensordLogD() << "Instantiated adaptor '" << id << "'. Valid =" << da->isValid();
}
else
{
@@ -545,7 +581,7 @@
void SensorManager::releaseDeviceAdaptor(const QString& id)
{
- sensordLogD() << "Releasing adaptor: " << id;
+ sensordLogD() << "Releasing adaptor:" << id;
clearError();
if( id.contains(';') ) // no parameter passing in release
@@ -576,7 +612,7 @@
}
else
{
- sensordLogD() << "Adaptor '" << id << "' has ref count: " << entryIt.value().cnt_;
+ sensordLogD() << "Adaptor '" << id << "' has ref count:" << entryIt.value().cnt_;
}
}
else
@@ -592,7 +628,7 @@
FilterBase* SensorManager::instantiateFilter(const QString& id)
{
- sensordLogD() << "Instantiating filter: " << id;
+ sensordLogD() << "Instantiating filter:" << id;
QMap<QString, FilterFactoryMethod>::iterator it = filterFactoryMap_.find(id);
if(it == filterFactoryMap_.end())
@@ -655,12 +691,16 @@
void SensorManager::displayStateChanged(bool displayState)
{
- sensordLogD() << "Signal detected, display state changed to: " << displayState;
+ sensordLogD() << "Signal detected, display state changed to:" << displayState;
if (displayState) {
/// Emit signal to make background calibration resume from sleep
emit displayOn();
#ifdef SENSORFW_MCE_WATCHER
if (!mceWatcher_->PSMEnabled())
+#else
+ #ifdef SENSORFW_LUNA_SERVICE_CLIENT
+ if (!lsClient_->PSMEnabled())
+ #endif // SENSORFW_LUNA_SERVICE_CLIENT
#endif // SENSORFW_MCE_WATCHER
{
emit resumeCalibration();
@@ -807,6 +847,13 @@
}
#endif // SENSORFW_MCE_WATCHER
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+LSClient* SensorManager::LSClient_instance() const
+{
+ return lsClient_;
+}
+#endif // SENSORFW_LUNA_SERVICE_CLIENT
+
#ifdef SM_PRINT
void SensorManager::print() const
{
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/sensormanager.h
^
|
@@ -45,6 +45,10 @@
class MceWatcher;
#endif
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+#include "lsclient.h"
+#endif
+
class QSocketNotifier;
class SocketHandler;
@@ -273,6 +277,27 @@
bool loadPlugin(const QString& name);
/**
+ * Test if a plugin is available
+ *
+ * @return true if plugin exists, false otherwise
+ */
+ bool pluginAvailable(const QString &name) const;
+
+ /**
+ * List all available plugins.
+ *
+ * @return array of plugin names
+ */
+ QStringList availablePlugins() const;
+
+ /**
+ * List available sensor plugins.
+ *
+ * @return array of plugin names
+ */
+ QStringList availableSensorPlugins() const;
+
+ /**
* Request sensor.
*
* @param id Sensor ID.
@@ -322,6 +347,15 @@
MceWatcher* MCEWatcher() const;
#endif
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+ /**
+ * Get pointer to LSClient instance.
+ *
+ * @return LSClient instance pointer.
+ */
+ LSClient* LSClient_instance() const;
+#endif
+
double magneticDeviation();
void setMagneticDeviation(double level);
@@ -334,14 +368,14 @@
void lostClient(int sessionId);
/**
- * Callback for MCE display state change event.
+ * Callback for MCE or LS display state change event.
*
* @param displayState display state.
*/
void displayStateChanged(bool displayState);
/**
- * Callback for MCE powersave mode change event.
+ * Callback for MCE or LS powersave mode change event.
*
* @param deviceMode device PSM state.
*/
@@ -450,6 +484,9 @@
SocketHandler* socketHandler_; /**< socket handler */
MceWatcher* mceWatcher_; /**< MCE watcher */
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+ LSClient* lsClient_; /**< LS client */
+#endif
SensorManagerError errorCode_; /** global error code */
QString errorString_; /** global error description */
int pipefds_[2]; /** pipe for sensor samples */
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/sensormanager_a.cpp
^
|
@@ -54,16 +54,31 @@
return sensorManager()->loadPlugin(name);
}
+QStringList SensorManagerAdaptor::availablePlugins() const
+{
+ return sensorManager()->availablePlugins();
+}
+
+bool SensorManagerAdaptor::pluginAvailable(const QString &name) const
+{
+ return sensorManager()->pluginAvailable(name);
+}
+
+QStringList SensorManagerAdaptor::availableSensorPlugins() const
+{
+ return sensorManager()->availableSensorPlugins();
+}
+
int SensorManagerAdaptor::requestSensor(const QString &id, qint64 pid)
{
int session = sensorManager()->requestSensor(id);
- sensordLog() << "Sensor '" << id << "' requested. Created session: " << session << ". Client PID: " << pid;
+ sensordLogD() << "Sensor '" << id << "' requested. Created session: " << session << ". Client PID: " << pid;
return session;
}
bool SensorManagerAdaptor::releaseSensor(const QString &id, int sessionId, qint64 pid)
{
- sensordLog() << "Sensor '" << id << "' release requested for session " << sessionId << ". Client PID: " << pid;
+ sensordLogD() << "Sensor '" << id << "' release requested for session " << sessionId << ". Client PID: " << pid;
return sensorManager()->releaseSensor(id, sessionId);
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/core/sensormanager_a.h
^
|
@@ -88,6 +88,27 @@
bool loadPlugin(const QString& name);
/**
+ * Test if a plugin is available
+ *
+ * @return true if plugin exists, false otherwise
+ */
+ bool pluginAvailable(const QString& name) const;
+
+ /**
+ * List all available plugins.
+ *
+ * @return array of plugin names
+ */
+ QStringList availablePlugins() const;
+
+ /**
+ * List available sensor plugins.
+ *
+ * @return array of plugin names
+ */
+ QStringList availableSensorPlugins() const;
+
+ /**
* Request new sensor session to be created.
*
* @param id Sensor ID.
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/debian/rules
^
|
@@ -48,7 +48,7 @@
dh_testdir
# Add here commands to configure the package.
- cd $(BUILD_DIR) && qmake $(QMAKECONFIG) CONFIG+="configs" "QMAKE_CXXFLAGS=$(CFLAGS)" "MAKE_DOCS=$(MAKE_DOCS)" ../$(PROJECT_NAME).pro
+ cd $(BUILD_DIR) && qmake $(QMAKECONFIG) CONFIG+="configs" CONFIG+="autohybris" "QMAKE_CXXFLAGS=$(CFLAGS)" "MAKE_DOCS=$(MAKE_DOCS)" ../$(PROJECT_NAME).pro
export LD_RUN_PATH=/usr/lib/sensord-qt5/
touch configure-stamp
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/doc/PLUGIN-GUIDE
^
|
@@ -221,7 +221,8 @@
(1) /etc/sensorfw/sensord.conf
(2) /etc/sensorfw/sensord.conf.d/
-Any option set in (1) will override options set in any of the files in (2). Files in (2) are given priority based on alphanumeric order. Using double-digits as the beginning of the filename for clarity is encouraged.
+Any option set in (1) will override options set in any of the files in (2). Files in (2) are processed in alpha-numerical order, and later files can override settings from earlier files. Using double-digits as the beginning of the filename for clarity is encouraged.
+
Configuration files contain sections for different HW. These sections should connect plugin metanames (sampleadaptor) with the real plugin that should be used (sampleadaptor-inputdev). The configuration file also contains option 'deviceId', which specifies which section should be used. This will be removed once we have automatic detection of underlying HW in place.
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/doc/mainpage.h
^
|
@@ -694,9 +694,9 @@
(1) /etc/sensorfw/sensord.conf
(2) /etc/sensorfw/sensord.conf.d/
-Any option set in (1) will override options set in any of the files in (2). Files in (2) are given
-priority based on alphanumeric order. Using double-digits as the beginning of the filename for
-clarity is encouraged.
+Any option set in (1) will override options set in any of the files in (2). Files in (2) are
+processed in alpha-numerical order, and later files can override settings from earlier files.
+Using double-digits as the beginning of the filename for clarity is encouraged.
Configuration files contain sections for different HW. These sections should connect plugin
metanames (sampleadaptor) with the real plugin that should be used (sampleadaptor-inputdev).
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/examples/sensorplugin/samplesensor_a.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file accelerometersensor_a.cpp
+ @file samplesensor_a.cpp
@brief Sample D-Bus adaptor for sensors
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/filters/magcoordinatealignfilter/magcoordinatealignfilterplugin.cpp
^
|
@@ -1,6 +1,6 @@
/**
- @file MagCoordinateAlignFilterPlugin.cpp
- @brief Plugin for CoordinateAlignFilter
+ @file magcoordinatealignfilterplugin.cpp
+ @brief Plugin for MagCoordinateAlignFilter
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/filters/magcoordinatealignfilter/magcoordinatealignfilterplugin.h
^
|
@@ -1,6 +1,6 @@
/**
- @file coordinatealignfilterplugin.h
- @brief Plugin for CoordinateAlignFilter
+ @file magcoordinatealignfilterplugin.h
+ @brief Plugin for MagCoordinateAlignFilter
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/filters/rotationfilter/rotationfilterplugin.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file rotationfilterplugin.cppp
+ @file rotationfilterplugin.cpp
@brief Plugin for RotationFilter
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/qt-api/abstractsensor_i.cpp
^
|
@@ -31,6 +31,9 @@
#ifdef SENSORFW_MCE_WATCHER
#include "mcewatcher.h"
#endif
+#ifdef SENSORFW_LUNA_SERVICE_CLIENT
+#include "lsclient.h"
+#endif
struct AbstractSensorChannelInterface::AbstractSensorChannelInterfaceImpl : public QDBusAbstractInterface
{
@@ -80,6 +83,12 @@
QObject::connect(mcewatcher,SIGNAL(displayStateChanged(bool)),
this,SLOT(displayStateChanged(bool)),Qt::UniqueConnection);
#endif
+#ifdef SENSORFW_LUNA_SERVICE
+ LSClient *lsclient;
+ lsclient = new LSClient(this);
+ QObject::connect(lsclient,SIGNAL(displayStateChanged(bool)),
+ this,SLOT(displayStateChanged(bool)),Qt::UniqueConnection);
+#endif
}
AbstractSensorChannelInterface::~AbstractSensorChannelInterface()
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/qt-api/lidsensor_i.h
^
|
@@ -1,6 +1,6 @@
/**
- @file alssensor_i.h
- @brief Interface for ALSSensor
+ @file lidsensor_i.h
+ @brief Interface for LidSensor
<p>
Copyright (C) 2016 Canonical, Ltd.
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensord/main.cpp
^
|
@@ -1,5 +1,3 @@
-
-
/**
@file main.cpp
@brief Sensord initiation point
@@ -32,13 +30,16 @@
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
+#include <QSocketNotifier>
#include <systemd/sd-daemon.h>
+#include <unistd.h>
#include <signal.h>
#include <iostream>
#include <errno.h>
#include <unistd.h>
+#include <fcntl.h>
#include "config.h"
#include "sensormanager.h"
@@ -50,9 +51,27 @@
static QtMsgType logLevel;
static QtMessageHandler previousMessageHandler;
+static int normalizeLevel(QtMsgType type)
+{
+ /* Map QtMsgType enum values to something that hopefully
+ * makes sense in less-than / greater-than sense too. */
+ switch (type) {
+ case QtDebugMsg:
+ return 0;
+ case QtInfoMsg:
+ return 1;
+ case QtWarningMsg:
+ return 3;
+ case QtCriticalMsg:
+ return 4;
+ default:
+ return static_cast<int>(type);
+ }
+}
+
static void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &str)
{
- if (type < logLevel)
+ if (normalizeLevel(type) < normalizeLevel(logLevel))
return;
previousMessageHandler(type, context, str);
@@ -63,11 +82,14 @@
void signalUSR1(int param)
{
Q_UNUSED(param);
-
- logLevel = QtMsgType(logLevel + 1);
- if (logLevel > QtSystemMsg)
+ if (logLevel != QtDebugMsg) {
logLevel = QtDebugMsg;
- qDebug() << "New debugging level: " << logLevel;
+ sensordLogW() << "Debug logging enabled";
+ }
+ else {
+ logLevel = QtWarningMsg;
+ sensordLogW() << "Debug logging disabled";
+ }
}
void signalUSR2(int param)
@@ -87,10 +109,92 @@
void signalINT(int param)
{
- Q_UNUSED(param);
+ signal(param, SIG_DFL);
+ sensordLogD() << "Terminating ...";
QCoreApplication::exit(0);
}
+class SignalNotifier : public QObject
+{
+public:
+ SignalNotifier();
+ ~SignalNotifier();
+private slots:
+ void handleSignalInput(int socket);
+private:
+ static void handleAsyncSignal(int sig);
+ QSocketNotifier *m_socketNotifier;
+ static int s_pipe[2];
+ static const int s_signals[];
+};
+
+SignalNotifier::SignalNotifier()
+ : m_socketNotifier(0)
+{
+ sensordLogD() << "Setup async signal handlers";
+ if (pipe2(s_pipe, O_CLOEXEC) == -1) {
+ qFatal("Failed to create a pipe for signal passunc");
+ }
+ m_socketNotifier = new QSocketNotifier(s_pipe[0], QSocketNotifier::Read, this);
+ connect(m_socketNotifier, &QSocketNotifier::activated,
+ this, &SignalNotifier::handleSignalInput);
+ struct sigaction action;
+ memset(&action, 0, sizeof action);
+ action.sa_handler = handleAsyncSignal;
+ sigemptyset(&action.sa_mask);
+ action.sa_flags = SA_RESTART;
+ for (size_t i = 0; s_signals[i] != -1; ++i )
+ sigaction(s_signals[i], &action, 0);
+}
+
+SignalNotifier::~SignalNotifier()
+{
+ sensordLogD() << "Reset async signal handlers";
+ for (size_t i = 0; s_signals[i] != -1; ++i )
+ signal(s_signals[i], SIG_DFL);
+ delete m_socketNotifier; m_socketNotifier = 0;
+ close(s_pipe[1]), s_pipe[1] = -1;
+ close(s_pipe[0]), s_pipe[0] = -1;
+}
+
+void SignalNotifier::handleAsyncSignal(int sig)
+{
+ /* Can call only async-signal safe functions! */
+ if (write(s_pipe[1], &sig, sizeof sig) == -1) {
+ _exit(EXIT_FAILURE);
+ }
+}
+
+void SignalNotifier::handleSignalInput(int socket)
+{
+ Q_UNUSED(socket);
+ int sig = SIGTERM;
+ uint64_t tmp = 0;
+ if (read(s_pipe[0], &sig, sizeof sig) == -1) {
+ // dontcare
+ }
+ sensordLogD() << "Caught async signal" << strsignal(sig);
+ switch (sig) {
+ case SIGINT:
+ case SIGTERM:
+ signalINT(sig);
+ break;
+ case SIGUSR1:
+ signalUSR1(sig);
+ break;
+ case SIGUSR2:
+ signalUSR2(sig);
+ break;
+ };
+}
+
+int SignalNotifier::s_pipe[2] = { -1, -1 };
+
+const int SignalNotifier::s_signals[] =
+{
+ SIGINT, SIGTERM, SIGUSR1, SIGUSR2, -1
+};
+
int main(int argc, char *argv[])
{
previousMessageHandler = qInstallMessageHandler(messageOutput);
@@ -133,10 +237,6 @@
}
}
- signal(SIGUSR1, signalUSR1);
- signal(SIGUSR2, signalUSR2);
- signal(SIGINT, signalINT);
-
if (parser.createDaemon())
{
fflush(0);
@@ -182,7 +282,10 @@
sd_notify(0, "READY=1");
}
+ SignalNotifier *signalNotifier = new SignalNotifier();
int ret = app.exec();
+ delete signalNotifier; signalNotifier = 0;
+
sensordLogD() << "Exiting...";
Config::close();
return ret;
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensord/parser.cpp
^
|
@@ -56,8 +56,10 @@
{
data = opt.split("=");
QString logLevel = data.at(1);
- if (logLevel == "test" || logLevel == "debug")
+ if (logLevel == "test")
logLevel_ = QtDebugMsg;
+ else if (logLevel == "debug")
+ logLevel_ = QtInfoMsg;
else if (logLevel == "warning")
logLevel_ = QtWarningMsg;
else if (logLevel == "critical")
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensorfw.pro
^
|
@@ -1,5 +1,17 @@
-load(configure)
-qtCompileTest(hybris)
+# RPM build: Hybris plugin has separate spec file that does:
+# qmake CONFIG+=hybris
+# And pro-file behavioral differences are handled via:
+# contains(CONFIG,hybris) { ... }
+#
+# Debian builds: debian/rules triggers build time hybris check:
+# qmake CONFIG+=autohybris
+# And pro-file behavioral differences are handled via:
+# config_hybris { ... }
+
+contains(CONFIG,autohybris) {
+ load(configure)
+ qtCompileTest(hybris)
+}
TEMPLATE = subdirs
CONFIG += ordered
@@ -92,7 +104,8 @@
DBUSCONFIGFILES.path = /etc/dbus-1/system.d
INSTALLS += DBUSCONFIGFILES
- SENSORDCONFIGFILES.files = config/90-sensord-default.conf
+ SENSORDCONFIGFILES.files = config/10-sensord-default.conf
+ SENSORDCONFIGFILES.files += config/20-sensors-default.conf
SENSORDCONFIGFILES.path = /etc/sensorfw/sensord.conf.d
INSTALLS += SENSORDCONFIGFILES
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensors/contextplugin/stabilitybin.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file stabilitybin.h
+ @file stabilitybin.cpp
@brief Stability Bin for ContextFW
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensors/humiditysensor/humidityplugin.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file HumidityPlugin.cpp
+ @file humidityplugin.cpp
@brief Plugin for HumiditySensor
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensors/lidsensor/lidplugin.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file LidPlugin.cpp
+ @file lidplugin.cpp
@brief Plugin for LidSensor
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensors/pressuresensor/pressureplugin.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file PressurePlugin.cpp
+ @file pressureplugin.cpp
@brief Plugin for PressureSensor
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/sensors/proximitysensor/proximityplugin.cpp
^
|
@@ -30,7 +30,7 @@
void ProximityPlugin::Register(class Loader&)
{
- sensordLog() << "registering proximitysensor";
+ sensordLogD() << "registering proximitysensor";
SensorManager& sm = SensorManager::instance();
sm.registerSensor<ProximitySensorChannel>("proximitysensor");
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/tests/deadclient/datareceiver.h
^
|
@@ -1,5 +1,5 @@
/**
- @file deadclient.h
+ @file datareceiver.h
@brief Automatic tests for dead client handling
<p>
Copyright (C) 2009-2010 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/tests/testapp/sensorhandler_qtapi.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file sensorhandler.cpp
+ @file sensorhandler_qtapi.cpp
@brief sensor handler
<p>
Copyright (C) 2010-2011 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/tests/testapp/sensorhandler_qtapi.h
^
|
@@ -1,5 +1,5 @@
/**
- @file sensorhandler.h
+ @file sensorhandler_qtapi.h
@brief test application to create sensor
<p>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/tests/testapp/sensorhandler_qtmob.cpp
^
|
@@ -1,5 +1,5 @@
/**
- @file sensorhandler_qmsystem2.cpp
+ @file sensorhandler_qtmob.cpp
@brief sensor handler
<p>
Copyright (C) 2011 Nokia Corporation
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.4.tar.bz2/tests/testapp/sensorhandler_qtmob.h
^
|
@@ -1,5 +1,5 @@
/**
- @file sensorhandler_qmsystem2.h
+ @file sensorhandler_qtmob.h
@brief test application to create sensor
<p>
|
[-]
[+]
|
Deleted |
_service:tar_git:hybris-libsensorfw-qt5-0.9.4.tar.bz2/.gitignore
^
|
@@ -1,29 +0,0 @@
-Makefile
-*.o
-moc_*
-.qmake.cache
-RPMS/
-*.so
-*.so.*
-*.swp
-config.log
-core/Makefile.hybris
-documentation.list
-installroot/
-doc/html/
-sensord/sensorfwd
-tests/adaptors/sensoradaptors-test
-tests/benchmark/benchmarktest/sensorbenchmark-test
-tests/benchmark/dummyclient/sensordummyclient-qt5
-tests/chains/sensorchains-test
-tests/client/sensorapi-test
-tests/dataflow/sensordataflow-test
-tests/deadclient/sensord-deadclient
-tests/filters/sensorfilters-test
-tests/metadata/sensormetadata-test
-tests/powermanagement/driverpolltest/sensordriverpoll-test
-tests/powermanagement/powermanagementtests/sensorpowermanagement-test
-tests/powermanagement/standbyoverridetests/sensorstandbyoverride-test
-tests/testapp/sensortestapp
-tests/testutils/datafaker/datafaker-qt5
-
|
[-]
[+]
|
Deleted |
_service:tar_git:hybris-libsensorfw-qt5-0.9.4.tar.bz2/adaptors/gyroscopeadaptor-evdev/gyroadaptor-evdevplugin.h.autosave
^
|
@@ -1,45 +0,0 @@
-/**
- @file alsadaptor-evdevplugin.h
- @brief Plugin for GyroAdaptorEvdevPlugin
-
- <p>
- Copyright (C) 2009-2010 Nokia Corporation
- Copyright (C) 2015 Jolla
-
- @author Lorn Potter <lorn.potter@jolla.com>
- @author Timo Rongas <ext-timo.2.rongas@nokia.com>
- @author Markus Lehtonen <markus.lehtonen@nokia.com>
-
- This file is part of Sensord.
-
- Sensord is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- Sensord is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with Sensord. If not, see <http://www.gnu.org/licenses/>.
- </p>
-*/
-
-#ifndef GYROADAPTOR_EVDEVPLUGIN_H
-#define GYROADAPTOR_EVDEVPLUGIN_H
-
-#include "plugin.h"
-
-class GyroAdaptorEvdevPlugin : public Plugin
-{
- Q_OBJECT
-#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
- Q_PLUGIN_METADATA(IID "com.nokia.SensorService.Plugin/1.0")
-#endif
-
-private:
- void Register(class Loader& l);
-};
-
-#endif
|
[-]
[+]
|
Changed |
_service:tar_git:sensorfwd.service
^
|
@@ -1,6 +1,7 @@
[Unit]
Description=Sensor daemon for sensor framework
After=dbus.socket
+After=oneshot-root.service
Requires=dbus.service
Conflicts=actdead.target
|