Merge lp:~thomas-voss/qtubuntu-sensors/add-accuracy into lp:qtubuntu-sensors

Proposed by Thomas Voß
Status: Merged
Approved by: Ricardo Mendoza
Approved revision: 66
Merged at revision: 68
Proposed branch: lp:~thomas-voss/qtubuntu-sensors/add-accuracy
Merge into: lp:qtubuntu-sensors
Diff against target: 125 lines (+45/-5)
1 file modified
plugins/position/core_geo_position_info_source.cpp (+45/-5)
To merge this branch: bzr merge lp:~thomas-voss/qtubuntu-sensors/add-accuracy
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing
Ubuntu Phablet Team Pending
Review via email: mp+224258@code.launchpad.net

Commit message

Add interpretation of horizontal and vertical accuracy fields.
Add mutex to guard lastKnownPosition during updates.

Description of the change

Add interpretation of horizontal and vertical accuracy fields.
Add mutex to guard lastKnownPosition during updates.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
67. By Thomas Voß

[ Ricardo Mendoza ]
Migrate to Platform API based vibrator

68. By Thomas Voß

Make sure that cbs are nulled on destruction.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'plugins/position/core_geo_position_info_source.cpp'
2--- plugins/position/core_geo_position_info_source.cpp 2014-01-07 17:49:57 +0000
3+++ plugins/position/core_geo_position_info_source.cpp 2014-06-26 19:46:56 +0000
4@@ -83,20 +83,37 @@
5 ua_location_position_update_get_longitude_in_degree(position),
6 ua_location_position_update_has_altitude(position) ? ua_location_position_update_get_altitude_in_meter(position) : 0);
7
8+ QMutexLocker lock(&lastKnownPositionGuard);
9+
10 lastKnownPosition.setCoordinate(coord);
11+
12+ if (ua_location_position_update_has_horizontal_accuracy(position))
13+ lastKnownPosition.setAttribute(
14+ QGeoPositionInfo::HorizontalAccuracy,
15+ ua_location_position_update_get_horizontal_accuracy_in_meter(position));
16+
17+ if (ua_location_position_update_has_vertical_accuracy(position))
18+ lastKnownPosition.setAttribute(
19+ QGeoPositionInfo::HorizontalAccuracy,
20+ ua_location_position_update_get_vertical_accuracy_in_meter(position));
21+
22 lastKnownPosition.setTimestamp(
23 QDateTime::fromMSecsSinceEpoch(
24 ua_location_position_update_get_timestamp(position)/1000));
25
26+ QGeoPositionInfo info{lastKnownPosition};
27+
28 QMetaObject::invokeMethod(
29 parent,
30 "positionUpdated",
31 Qt::QueuedConnection,
32- Q_ARG(QGeoPositionInfo, lastKnownPosition));
33+ Q_ARG(QGeoPositionInfo, info));
34 }
35
36 void handleHeadingUpdate(UALocationHeadingUpdate* heading)
37 {
38+ QMutexLocker lock(&lastKnownPositionGuard);
39+
40 lastKnownPosition.setAttribute(
41 QGeoPositionInfo::Direction,
42 ua_location_heading_update_get_heading_in_degree(heading));
43@@ -105,15 +122,19 @@
44 QDateTime::fromMSecsSinceEpoch(
45 ua_location_heading_update_get_timestamp(heading)/1000));
46
47+ QGeoPositionInfo info{lastKnownPosition};
48+
49 QMetaObject::invokeMethod(
50 parent,
51 "positionUpdated",
52 Qt::QueuedConnection,
53- Q_ARG(QGeoPositionInfo, lastKnownPosition));
54+ Q_ARG(QGeoPositionInfo, info));
55 };
56
57 void handleVelocityUpdate(UALocationVelocityUpdate* velocity)
58 {
59+ QMutexLocker lock(&lastKnownPositionGuard);
60+
61 lastKnownPosition.setAttribute(
62 QGeoPositionInfo::GroundSpeed,
63 ua_location_velocity_update_get_velocity_in_meters_per_second(velocity));
64@@ -122,11 +143,13 @@
65 QDateTime::fromMSecsSinceEpoch(
66 ua_location_velocity_update_get_timestamp(velocity)/1000));
67
68+ QGeoPositionInfo info{lastKnownPosition};
69+
70 QMetaObject::invokeMethod(
71 parent,
72 "positionUpdated",
73 Qt::QueuedConnection,
74- Q_ARG(QGeoPositionInfo, lastKnownPosition));
75+ Q_ARG(QGeoPositionInfo, info));
76 };
77
78 Private(core::GeoPositionInfoSource* parent)
79@@ -153,11 +176,27 @@
80
81 ~Private()
82 {
83+ ua_location_service_session_set_position_updates_handler(
84+ session,
85+ nullptr,
86+ nullptr);
87+
88+ ua_location_service_session_set_heading_updates_handler(
89+ session,
90+ nullptr,
91+ nullptr);
92+
93+ ua_location_service_session_set_velocity_updates_handler(
94+ session,
95+ nullptr,
96+ nullptr);
97+
98 ua_location_service_session_unref(session);
99 }
100
101 core::GeoPositionInfoSource* parent;
102 UALocationServiceSession* session;
103+ QMutex lastKnownPositionGuard;
104 QGeoPositionInfo lastKnownPosition;
105 QTimer timer;
106 };
107@@ -166,7 +205,7 @@
108 : QGeoPositionInfoSource(parent), d(new Private(this))
109 {
110 d->timer.setSingleShot(true);
111- QObject::connect(&d->timer, SIGNAL(timeout()), this, SLOT(updateTimeout()));
112+ QObject::connect(&d->timer, SIGNAL(timeout()), this, SIGNAL(updateTimeout()));
113 }
114
115 core::GeoPositionInfoSource::~GeoPositionInfoSource()
116@@ -186,7 +225,8 @@
117 QGeoPositionInfo core::GeoPositionInfoSource::lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const
118 {
119 Q_UNUSED(fromSatellitePositioningMethodsOnly);
120- return d->lastKnownPosition;
121+ QMutexLocker lock(&d->lastKnownPositionGuard);
122+ return QGeoPositionInfo(d->lastKnownPosition);
123 }
124
125 QGeoPositionInfoSource::PositioningMethods core::GeoPositionInfoSource::supportedPositioningMethods() const

Subscribers

People subscribed via source and target branches