diff options
| -rw-r--r-- | services/vr/sensord/pose_service.cpp | 9 | ||||
| -rw-r--r-- | services/vr/sensord/pose_service.h | 2 |
2 files changed, 11 insertions, 0 deletions
diff --git a/services/vr/sensord/pose_service.cpp b/services/vr/sensord/pose_service.cpp index 32a2160869..2c4fc30bd1 100644 --- a/services/vr/sensord/pose_service.cpp +++ b/services/vr/sensord/pose_service.cpp @@ -435,6 +435,15 @@ void PoseService::UpdatePoseMode() { kRotX90 * Rotationd(AngleAxisd(-k90DegInRad, kVecAxisY)); start_from_head_rotation = (pose_state.sensor_from_start_rotation * kPostRotation).inverse(); + } else if (device_orientation_type_ == kOrientationTypeLandscape180) { + const Rotationd kPreRotation = + Rotationd(AngleAxisd(k90DegInRad * 2.0, kVecAxisY)) * + Rotationd(AngleAxisd(k90DegInRad * 2.0, kVecAxisZ)); + const Rotationd kPostRotation = kRotX90; + start_from_head_rotation = + (kPreRotation * + pose_state.sensor_from_start_rotation * kPostRotation) + .inverse(); } else { const Rotationd kPreRotation = Rotationd(AngleAxisd(k90DegInRad, kVecAxisZ)); diff --git a/services/vr/sensord/pose_service.h b/services/vr/sensord/pose_service.h index 899d5fbe73..4df503672b 100644 --- a/services/vr/sensord/pose_service.h +++ b/services/vr/sensord/pose_service.h @@ -43,6 +43,8 @@ class PoseService : public pdx::ServiceBase<PoseService> { kOrientationTypePortrait = 1, // Landscape device. kOrientationTypeLandscape = 2, + // 180 Landscape device. + kOrientationTypeLandscape180 = 3, }; // Initializes the service. Keeps a reference to sensor_thread, which must be |