[-]
[+]
|
Changed |
_service:tar_git:sensorfw.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:sensorfw-qt5-binder.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://git.sailfishos.org/mer-core/sensorfw.git</param>
<param name="branch">master</param>
- <param name="revision">0.12.4</param>
+ <param name="revision">0.12.6</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/accelerometeradaptor/accelerometeradaptor.cpp
^
|
@@ -102,7 +102,7 @@
{
AccelerationData* d = accelerometerBuffer_->nextSlot();
- d->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ d->timestamp_ = Utils::getTimeStamp(ev);
d->x_ = orientationValue_.x_;
d->y_ = orientationValue_.y_;
d->z_ = orientationValue_.z_;
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/alsadaptor-evdev/alsevdevadaptor.cpp
^
|
@@ -79,7 +79,7 @@
TimedUnsigned* lux = alsBuffer_->nextSlot();
lux->value_ = alsValue_;
- lux->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ lux->timestamp_ = Utils::getTimeStamp(ev);
alsBuffer_->commit();
alsBuffer_->wakeUpReaders();
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/gyroscopeadaptor-evdev/gyroevdevadaptor.cpp
^
|
@@ -88,7 +88,7 @@
gyroData->y_ = gyroValue_.y_;
gyroData->z_ = gyroValue_.z_;
- gyroData->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ gyroData->timestamp_ = Utils::getTimeStamp(ev);
gyroscopeBuffer_->commit();
gyroscopeBuffer_->wakeUpReaders();
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/humidityadaptor/humidityadaptor.cpp
^
|
@@ -76,7 +76,7 @@
TimedUnsigned* rh = humidityBuffer_->nextSlot();
rh->value_ = humidityValue_;
- rh->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ rh->timestamp_ = Utils::getTimeStamp(ev);
humidityBuffer_->commit();
humidityBuffer_->wakeUpReaders();
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/lidsensoradaptor-evdev/lidsensoradaptor-evdev.cpp
^
|
@@ -125,7 +125,7 @@
LidData *lidData = lidBuffer_->nextSlot();
- lidData->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ lidData->timestamp_ = Utils::getTimeStamp(ev);
lidData->value_ = currentValue_;
lidData->type_ = currentType_;
sensordLogD() << "Lid state change detected: "
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/magnetometeradaptor-evdev/magnetometerevdevadaptor.cpp
^
|
@@ -87,7 +87,7 @@
magData->y_ = magValue_.y_;
magData->z_ = magValue_.z_;
- magData->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ magData->timestamp_ = Utils::getTimeStamp(ev);
magnetometerBuffer_->commit();
magnetometerBuffer_->wakeUpReaders();
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/pressureadaptor/pressureadaptor.cpp
^
|
@@ -76,7 +76,7 @@
TimedUnsigned* lux = pressureBuffer_->nextSlot();
lux->value_ = pressureValue_;
- lux->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ lux->timestamp_ = Utils::getTimeStamp(ev);
pressureBuffer_->commit();
pressureBuffer_->wakeUpReaders();
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/proximityadaptor-evdev/proximityadaptor-evdev.cpp
^
|
@@ -84,7 +84,7 @@
ProximityData *proximityData = proximityBuffer_->nextSlot();
- proximityData->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ proximityData->timestamp_ = Utils::getTimeStamp(ev);
proximityData->withinProximity_ = currentState_;
oldState = currentState_;
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/tapadaptor/tapadaptor.cpp
^
|
@@ -69,7 +69,7 @@
}
TapData tapValue;
tapValue.direction_ = dir;
- tapValue.timestamp_ = Utils::getTimeStamp(&(ev->time));
+ tapValue.timestamp_ = Utils::getTimeStamp(ev);
tapValue.type_ = TapData::SingleTap;
commitOutput(tapValue);
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/temperatureadaptor/temperatureadaptor.cpp
^
|
@@ -76,7 +76,7 @@
TimedUnsigned* temp = temperatureBuffer_->nextSlot();
temp->value_ = temperatureValue_;
- temp->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ temp->timestamp_ = Utils::getTimeStamp(ev);
temperatureBuffer_->commit();
temperatureBuffer_->wakeUpReaders();
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/adaptors/touchadaptor/touchadaptor.cpp
^
|
@@ -156,7 +156,7 @@
{
TouchData* d = outputBuffer_->nextSlot();
- d->timestamp_ = Utils::getTimeStamp(&(ev->time));
+ d->timestamp_ = Utils::getTimeStamp(ev);
d->x_ = touchValues_[src].x;
d->y_ = touchValues_[src].y;
d->z_ = touchValues_[src].z;
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/core/hybrisadaptor.cpp
^
|
@@ -36,8 +36,30 @@
#ifdef USE_BINDER
#define SENSOR_BINDER_SERVICE_DEVICE "/dev/hwbinder"
-#define SENSOR_BINDER_SERVICE_IFACE "android.hardware.sensors@1.0::ISensors"
-#define SENSOR_BINDER_SERVICE_NAME SENSOR_BINDER_SERVICE_IFACE "/default"
+#define SENSOR_BINDER_SERVICE_IFACE_1_0 "android.hardware.sensors@1.0::ISensors"
+#define SENSOR_BINDER_SERVICE_NAME_1_0 SENSOR_BINDER_SERVICE_IFACE_1_0 "/default"
+#define SENSOR_BINDER_SERVICE_IFACE_2_0 "android.hardware.sensors@2.0::ISensors"
+#define SENSOR_BINDER_SERVICE_NAME_2_0 SENSOR_BINDER_SERVICE_IFACE_2_0 "/default"
+#define SENSOR_BINDER_SERVICE_CALLBACK_IFACE_2_0 "android.hardware.sensors@2.0::ISensorsCallback"
+#define SENSOR_BINDER_SERVICE_IFACE_2_1 "android.hardware.sensors@2.1::ISensors"
+#define SENSOR_BINDER_SERVICE_NAME_2_1 SENSOR_BINDER_SERVICE_IFACE_2_1 "/default"
+#define SENSOR_BINDER_SERVICE_CALLBACK_IFACE_2_1 "android.hardware.sensors@2.1::ISensorsCallback"
+#define MAX_RECEIVE_BUFFER_EVENT_COUNT 128
+
+static const GBinderClientIfaceInfo sensors_2_client_ifaces[] = {
+ {SENSOR_BINDER_SERVICE_IFACE_2_1, INJECT_SENSOR_DATA_2_1 },
+ {SENSOR_BINDER_SERVICE_IFACE_2_0, CONFIG_DIRECT_REPORT },
+};
+
+G_STATIC_ASSERT
+ (G_N_ELEMENTS(sensors_2_client_ifaces) == SENSOR_INTERFACE_2_1);
+
+const char* const sensors_2_callback_ifaces[] = {
+ SENSOR_BINDER_SERVICE_CALLBACK_IFACE_2_1,
+ SENSOR_BINDER_SERVICE_CALLBACK_IFACE_2_0,
+ NULL
+};
+
#endif
/* ========================================================================= *
@@ -138,12 +160,14 @@
, m_pollTransactId(0)
, m_remote(NULL)
, m_serviceManager(NULL)
+ , m_sensorInterfaceEnum(SENSOR_INTERFACE_COUNT)
+ , m_sensorCallback(NULL)
#else
, m_halModule(NULL)
, m_halDevice(NULL)
- , m_halEventReaderTid(0)
#endif
, m_sensorArray(NULL)
+ , m_eventReaderTid(0)
, m_sensorCount(0)
, m_sensorState(NULL)
, m_indexOfType()
@@ -178,6 +202,26 @@
#endif
}
+#ifdef USE_BINDER
+bool HybrisManager::typeRequiresWakeup(int type)
+{
+ // Sensors which are wake-up sensors by default
+ switch (type) {
+ case SENSOR_TYPE_PROXIMITY:
+ case SENSOR_TYPE_SIGNIFICANT_MOTION:
+ case SENSOR_TYPE_TILT_DETECTOR:
+ case SENSOR_TYPE_WAKE_GESTURE:
+ case SENSOR_TYPE_GLANCE_GESTURE:
+ case SENSOR_TYPE_PICK_UP_GESTURE:
+ case SENSOR_TYPE_WRIST_TILT_GESTURE:
+ case SENSOR_TYPE_LOW_LATENCY_OFFBODY_DETECT:
+ return true;
+ default:
+ return false;
+ }
+}
+#endif
+
void HybrisManager::initManager()
{
/* Reserve space for sensor state data */
@@ -203,6 +247,22 @@
use = false;
}
+#ifdef USE_BINDER
+ // Pick wake-up variant for the types which are wake-up sensors by default
+ if (typeRequiresWakeup(m_sensorArray[i].type)) {
+ if ((m_sensorArray[i].flags & SENSOR_FLAG_WAKE_UP) == 0) {
+ sensordLogD() << "Ignoring non-wake-up sensor of type " << m_sensorArray[i].type;
+ use = false;
+ }
+ } else {
+ // All other sensors shall use non-wake-up sensor variant
+ if ((m_sensorArray[i].flags & SENSOR_FLAG_WAKE_UP) != 0) {
+ sensordLogD() << "Ignoring wake-up sensor of type " << m_sensorArray[i].type;
+ use = false;
+ }
+ }
+#endif
+
sensordLogD() << Q_FUNC_INFO
<< (use ? "SELECT" : "IGNORE")
<< "type:" << m_sensorArray[i].type
@@ -308,18 +368,23 @@
}
#ifdef USE_BINDER
- pollEvents();
-#else
+ if (m_sensorInterfaceEnum == SENSOR_INTERFACE_1_0) {
+ pollEvents();
+ } else {
+#endif
int err;
/* Start android sensor event reader */
- err = pthread_create(&m_halEventReaderTid, 0, halEventReaderThread, this);
+ err = pthread_create(&m_eventReaderTid, 0, eventReaderThread, this);
if (err) {
- m_halEventReaderTid = 0;
- sensordLogC() << "Failed to start hal reader thread";
+ m_eventReaderTid = 0;
+ sensordLogC() << "Failed to start event reader thread";
return;
}
- sensordLogD() << "Hal reader thread started";
+ sensordLogD() << "Event reader thread started";
+#ifdef USE_BINDER
+ }
+#else
m_initialized = true;
#endif
}
@@ -342,12 +407,56 @@
foreach (HybrisAdaptor *adaptor, m_registeredAdaptors.values()) {
adaptor->stopSensor();
}
+
+ if (m_eventReaderTid) {
+ sensordLogD() << "Canceling event reader thread";
+ int err = pthread_cancel(m_eventReaderTid);
+ if (err) {
+ sensordLogC() << "Failed to cancel event reader thread";
+ } else {
+ sensordLogD() << "Waiting for event 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_eventReaderTid, &ret, &tmo);
+ if (err) {
+ sensordLogC() << "Event reader thread did not exit";
+ } else {
+ sensordLogD() << "Event reader thread terminated";
+ m_eventReaderTid = 0;
+ }
+ }
+ if (m_eventReaderTid) {
+ /* The reader thread is stuck.
+ * 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);
+ }
+ }
+
#ifdef USE_BINDER
if (m_pollTransactId) {
gbinder_client_cancel(m_client, m_pollTransactId);
m_pollTransactId = 0;
}
+ if (m_sensorCallback) {
+ gbinder_local_object_unref(m_sensorCallback);
+ m_sensorCallback = NULL;
+ }
+
+ if (m_wakeLockQueue) {
+ gbinder_fmq_unref(m_wakeLockQueue);
+ m_wakeLockQueue = NULL;
+ }
+
+ if (m_eventQueue) {
+ gbinder_fmq_unref(m_eventQueue);
+ m_eventQueue = NULL;
+ }
+
if (m_client) {
gbinder_client_unref(m_client);
m_client = NULL;
@@ -379,35 +488,8 @@
}
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};
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/core/hybrisadaptor.h
^
|
@@ -195,20 +195,31 @@
gulong m_pollTransactId;
GBinderRemoteObject *m_remote;
GBinderServiceManager *m_serviceManager;
+ SENSOR_INTERFACE m_sensorInterfaceEnum;
+ GBinderLocalObject *m_sensorCallback;
+ GBinderFmq *m_eventQueue;
+ GBinderFmq *m_wakeLockQueue;
struct sensor_t *m_sensorArray; // [m_sensorCount]
#else
// HAL backend
struct sensors_module_t *m_halModule;
struct sensors_poll_device_t *m_halDevice;
- pthread_t m_halEventReaderTid;
const struct sensor_t *m_sensorArray; // [m_sensorCount]
#endif
+ pthread_t m_eventReaderTid;
int m_sensorCount;
HybrisSensorState *m_sensorState; // [m_sensorCount]
QMap <int, int> m_indexOfType; // type -> index
QMap <int, int> m_indexOfHandle; // handle -> index
#ifdef USE_BINDER
+ static GBinderLocalReply *sensorCallbackHandler(
+ GBinderLocalObject* obj,
+ GBinderRemoteRequest* req,
+ guint code,
+ guint flags,
+ int* status,
+ void* user_data);
void getSensorList();
void startConnect();
void finishConnect();
@@ -217,17 +228,16 @@
static void pollEventsCallback(
GBinderClient* /*client*/, GBinderRemoteReply* reply,
int status, void* userData);
+ bool typeRequiresWakeup(int type);
#endif
friend class HybrisAdaptorReader;
-#ifndef USE_BINDER
private:
- static void *halEventReaderThread(void *aptr);
-#endif
+ static void *eventReaderThread(void *aptr);
float scaleSensorValue(const float value, const int type) const;
void processEvents(const sensors_event_t *buffer,
- int numberOfEvents, bool &blockSuspend, bool &errorInInput);
+ int numberOfEvents, int &blockSuspend, bool &errorInInput);
};
class HybrisAdaptor : public DeviceAdaptor
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/core/hybrisbindertypes.h
^
|
@@ -26,6 +26,22 @@
#define STATUS_OK 0
+typedef enum sensor_interface {
+ SENSOR_INTERFACE_1_0,
+ SENSOR_INTERFACE_2_0,
+ SENSOR_INTERFACE_2_1,
+ SENSOR_INTERFACE_COUNT
+} SENSOR_INTERFACE;
+
+enum {
+ EVENT_QUEUE_FLAG_READ_AND_PROCESS = 1,
+ EVENT_QUEUE_FLAG_EVENTS_READ = 2,
+};
+
+enum {
+ WAKE_LOCK_QUEUE_DATA_WRITTEN = 1,
+};
+
#define ALIGNED(x) __attribute__ ((aligned(x)))
enum binder_calls {
@@ -42,6 +58,22 @@
CONFIG_DIRECT_REPORT,
};
+enum binder_calls_2 {
+ // Intiialize replaces poll in 2.0
+ INITIALIZE_2_0 = POLL,
+ // MUST be in the same order as the interfaces in ISensors.hidl
+ GET_SENSORS_LIST_2_1 = CONFIG_DIRECT_REPORT + 1,
+ INITIALIZE_2_1,
+ INJECT_SENSOR_DATA_2_1,
+};
+
+enum binder_callbacks_2 {
+ // Intiialize replaces poll in 2.0
+ DYNAMIC_SENSORS_CONNECTED_2_0 = GBINDER_FIRST_CALL_TRANSACTION,
+ DYNAMIC_SENSORS_DISCONNECTED_2_0,
+ DYNAMIC_SENSORS_CONNECTED_2_1
+};
+
enum {
RESULT_OK = 0,
RESULT_PERMISSION_DENIED = -1,
@@ -92,6 +124,7 @@
SENSOR_TYPE_ADDITIONAL_INFO = 33,
SENSOR_TYPE_LOW_LATENCY_OFFBODY_DETECT = 34,
SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED = 35,
+ SENSOR_TYPE_HINGE_ANGLE = 36,
SENSOR_TYPE_DEVICE_PRIVATE_BASE = 65536, // 0x10000
};
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/datatypes/utils.cpp
^
|
@@ -71,10 +71,16 @@
return data;
}
-quint64 Utils::getTimeStamp(const struct timeval *tp)
+quint64 Utils::getTimeStamp(const struct input_event *ie)
{
- quint64 data = tp->tv_sec;
+#ifdef input_event_sec
+ quint64 data = ie->input_event_sec;
data = data * 1000000;
- data = tp->tv_usec + data;
+ data = ie->input_event_usec + data;
+#else
+ quint64 data = ie->time.tv_sec;
+ data = data * 1000000;
+ data = ie->time.tv_usec + data;
+#endif
return data;
}
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/datatypes/utils.h
^
|
@@ -27,7 +27,7 @@
#ifndef UTILS_H
#define UTILS_H
-#include <sys/time.h>
+#include <linux/input.h>
/**
* Collection of static utility functions.
@@ -47,7 +47,7 @@
*
* @return timestamp.
*/
- static quint64 getTimeStamp(const struct timeval*);
+ static quint64 getTimeStamp(const struct input_event*);
};
#endif // UTILS_H
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/debian/changelog
^
|
@@ -1,3 +1,15 @@
+sensorfw-qt5 (0.12.6) unstable; urgency=medium
+
+ * [sensorfw] Add support for sensor binder API 2
+
+ -- Matti Lehtimäki <matti.lehtimaki@jolla.com> Wed, 24 Nov 2021 18:37:00 +0300
+
+sensorfw-qt5 (0.12.5) unstable; urgency=medium
+
+ * [sensorfw] Fix build on 32-bit kernels with 64-bit time_t
+
+ -- Matti Lehtimäki <matti.lehtimaki@jolla.com> Wed, 13 Oct 2021 19:51:00 +0300
+
sensorfw-qt5 (0.12.4) unstable; urgency=medium
* [sensorfw] Remove /usr/include/filters from pkgconfig file as it is not installed
|
[-]
[+]
|
Changed |
_service:tar_git:hybris-libsensorfw-qt5-binder-0.12.6.tar.bz2/sensord-qt5.pc.in
^
|
@@ -4,7 +4,7 @@
Name: Sensorfw-qt5
Description: Sensord for Qt 5
-Version: 0.12.4
+Version: 0.12.6
Requires:
Libs: -L${libdir} -lsensorclient-qt5 -lsensordatatypes-qt5
Cflags: -I${includedir} -I${includedir}/datatypes
|