HRESULT readingChanged(IAccelerometer *, IAccelerometerReadingChangedEventArgs *args) { ComPtr<IAccelerometerReading> value; HRESULT hr = args->get_Reading(&value); if (FAILED(hr)) { qCWarning(lcWinRtSensors) << "Failed to get accelerometer reading" << qt_error_string(hr); return hr; } DOUBLE x; hr = value->get_AccelerationX(&x); if (FAILED(hr)) qCWarning(lcWinRtSensors) << "Failed to get acceleration X" << qt_error_string(hr); DOUBLE y; hr = value->get_AccelerationY(&y); if (FAILED(hr)) qCWarning(lcWinRtSensors) << "Failed to get acceleration Y" << qt_error_string(hr); DOUBLE z; hr = value->get_AccelerationZ(&z); if (FAILED(hr)) qCWarning(lcWinRtSensors) << "Failed to get acceleration Z" << qt_error_string(hr); DateTime dateTime; hr = value->get_Timestamp(&dateTime); if (FAILED(hr)) qCWarning(lcWinRtSensors) << "Failed to get acceleration timestamp" << qt_error_string(hr); // The reading is in G force, so convert to m/s/s reading.setX(x * GRAVITY_EARTH_MS2); reading.setY(y * GRAVITY_EARTH_MS2); reading.setZ(z * GRAVITY_EARTH_MS2); reading.setTimestamp(dateTimeToMsSinceEpoch(dateTime)); q->newReadingAvailable(); return S_OK; }