[-]
[+]
|
Changed |
_service:tar_git:sensorfw.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:sensorfw-qt5-hybris.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://git.merproject.org/mer-core/sensorfw.git</param>
<param name="branch">master</param>
- <param name="revision">HEAD</param>
+ <param name="revision">53ab885779536c4166ab5443e5041fd06865bfeb</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.tar.bz2/core/hybrisadaptor.cpp
^
|
@@ -83,172 +83,317 @@
#endif
//#define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR (20)
-Q_GLOBAL_STATIC(HybrisManager, hybrisManager)
-
-HybrisManager::HybrisManager(QObject *parent)
- : QObject(parent)
- , device(NULL)
- , sensorList(NULL)
- , module(NULL)
- , sensorsCount(0)
- , sensorMap()
- , registeredAdaptors()
- , adaptorReaderTid(0)
-{
- init();
+/* ========================================================================= *
+ * 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()
+static void ObtainTemporaryWakeLock()
{
- closeAllSensors();
- if (adaptorReaderTid) {
- sensordLogD() << "Canceling hal reader thread";
- int err = pthread_cancel(adaptorReaderTid);
- 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(adaptorReaderTid, &ret, &tmo);
- if( err ) {
- sensordLogC() << "Hal reader thread did not exit";
- } else {
- sensordLogD() << "Hal reader thread terminated";
- adaptorReaderTid = 0;
- }
+ 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 (adaptorReaderTid) {
- /* 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);
+ }
+
+ 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::instance()
+/* ========================================================================= *
+ * HybrisSensorState
+ * ========================================================================= */
+
+HybrisSensorState::HybrisSensorState()
+ : m_minDelay(0)
+ , m_maxDelay(0)
+ , m_delay(-1)
+ , m_active(-1)
{
- HybrisManager *priv = hybrisManager();
- return priv;
+ memset(&m_fallbackEvent, 0, sizeof m_fallbackEvent);
}
-void HybrisManager::init()
+HybrisSensorState::~HybrisSensorState()
{
- 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 &&
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-0.10.3.tar.bz2/core/hybrisadaptor.h
^
|
@@ -34,50 +34,70 @@
class HybrisAdaptor;
+struct HybrisSensorState
+{
+ HybrisSensorState();
+ ~HybrisSensorState();
+
+ 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
- pthread_t adaptorReaderTid;
+ 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 *adaptorReaderThread(void *aptr);
+ static void *halEventReaderThread(void *aptr);
};
class HybrisAdaptor : public DeviceAdaptor
@@ -87,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_;
- volatile 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.3.tar.bz2/core/logging.h
^
|
@@ -29,9 +29,9 @@
#include <QDebug>
-#define sensordLogT() (qDebug())
-#define sensordLogD() (qInfo())
-#define sensordLogW() (qWarning())
-#define sensordLogC() (qCritical())
+#define sensordLogT(ARGS_...) (qDebug(ARGS_))
+#define sensordLogD(ARGS_...) (qInfo(ARGS_))
+#define sensordLogW(ARGS_...) (qWarning(ARGS_))
+#define sensordLogC(ARGS_...) (qCritical(ARGS_))
#endif //LOGGING_H
|