Add support for head-tracker sensor type and reference reset
Pose listeners can now be notified whenever the received pose has a
different frame of reference than previous samples and this results in
a recenter.
In addition, the private sensor type used for head tracking is now
supported.
Test: Manual verification using uhid-sample
Bug: 188502620
Change-Id: Ibe86e654656b2797ecc6fc936769e1148d9e02fd
diff --git a/media/libheadtracking/SensorPoseProvider-example.cpp b/media/libheadtracking/SensorPoseProvider-example.cpp
index a246e8b..88e222e 100644
--- a/media/libheadtracking/SensorPoseProvider-example.cpp
+++ b/media/libheadtracking/SensorPoseProvider-example.cpp
@@ -40,7 +40,7 @@
class Listener : public SensorPoseProvider::Listener {
public:
void onPose(int64_t timestamp, int32_t handle, const Pose3f& pose,
- const std::optional<Twist3f>& twist) override {
+ const std::optional<Twist3f>& twist, bool isNewReference) override {
int64_t now = elapsedRealtimeNano();
std::cout << "onPose t=" << timestamp
@@ -53,7 +53,7 @@
} else {
std::cout << "<none>";
}
- std::cout << std::endl;
+ std::cout << " isNewReference=" << isNewReference << std::endl;
}
};
@@ -67,11 +67,15 @@
std::unique_ptr<SensorPoseProvider> provider =
SensorPoseProvider::create(kPackageName, &listener);
- int32_t headHandle = provider->startSensor(headSensor->getHandle(), 500ms);
+ if (!provider->startSensor(headSensor->getHandle(), 500ms)) {
+ std::cout << "Failed to start head sensor" << std::endl;
+ }
sleep(2);
- provider->startSensor(screenSensor->getHandle(), 500ms);
+ if (!provider->startSensor(screenSensor->getHandle(), 500ms)) {
+ std::cout << "Failed to start screenSensor sensor" << std::endl;
+ }
sleep(2);
- provider->stopSensor(headHandle);
+ provider->stopSensor(headSensor->getHandle());
sleep(2);
return 0;
}