@@ -56,14 +56,39 @@ void SlimeVRDriver::VRDriver::RunPoseRequestThread() {
5656
5757 messages::ProtobufMessage* message = google::protobuf::Arena::CreateMessage<messages::ProtobufMessage>(&arena_);
5858
59- if (!sent_hmd_add_message_) {
59+ vr::TrackedDevicePose_t hmd_pose;
60+ vr::VRServerDriverHost ()->GetRawTrackedDevicePoses (0 .0f , &hmd_pose, 1 );
61+
62+ vr::PropertyContainerHandle_t hmd_prop_container =
63+ vr::VRProperties ()->TrackedDeviceToPropertyContainer (vr::k_unTrackedDeviceIndex_Hmd);
64+
65+ if (!sent_hmd_add_message_ && hmd_pose.bDeviceIsConnected ) {
66+ vr::ETrackedPropertyError error{};
67+ auto serial = vr::VRProperties ()->GetStringProperty (hmd_prop_container, vr::Prop_SerialNumber_String, &error);
68+ if (error != vr::ETrackedPropertyError::TrackedProp_Success) {
69+ logger_->Log (" Failed to get HMD's Prop_SerialNumber_String: {}" , vr::VRPropertiesRaw ()->GetPropErrorNameFromEnum (error));
70+ }
71+
72+ auto name = vr::VRProperties ()->GetStringProperty (hmd_prop_container, vr::Prop_ModelNumber_String, &error);
73+ if (error != vr::ETrackedPropertyError::TrackedProp_Success) {
74+ logger_->Log (" Failed to get HMD's Prop_ModelNumber_String: {}" , vr::VRPropertiesRaw ()->GetPropErrorNameFromEnum (error));
75+ }
76+
77+ auto manufacturer = vr::VRProperties ()->GetStringProperty (hmd_prop_container, vr::Prop_ManufacturerName_String, &error);
78+ if (error != vr::ETrackedPropertyError::TrackedProp_Success) {
79+ logger_->Log (" Failed to get HMD's Prop_ManufacturerName_String: {}" , vr::VRPropertiesRaw ()->GetPropErrorNameFromEnum (error));
80+ }
81+
82+ logger_->Log (" HMD props: serial='{}', model='{}', manufacturer='{}'" , serial, name, manufacturer);
83+
6084 // Send add message for HMD
6185 messages::TrackerAdded* tracker_added = google::protobuf::Arena::CreateMessage<messages::TrackerAdded>(&arena_);
6286 message->set_allocated_tracker_added (tracker_added);
6387 tracker_added->set_tracker_id (0 );
6488 tracker_added->set_tracker_role (TrackerRole::HMD);
65- tracker_added->set_tracker_serial (" HMD" );
66- tracker_added->set_tracker_name (" HMD" );
89+ tracker_added->set_tracker_serial (serial.empty () ? " HMD" : serial);
90+ tracker_added->set_tracker_name (name.empty () ? " HMD" : name);
91+ tracker_added->set_manufacturer (manufacturer.empty () ? " OpenVR" : manufacturer);
6792 bridge_->SendBridgeMessage (*message);
6893
6994 messages::TrackerStatus* tracker_status = google::protobuf::Arena::CreateMessage<messages::TrackerStatus>(&arena_);
@@ -76,9 +101,6 @@ void SlimeVRDriver::VRDriver::RunPoseRequestThread() {
76101 logger_->Log (" Sent HMD hello message" );
77102 }
78103
79- vr::PropertyContainerHandle_t hmd_prop_container =
80- vr::VRProperties ()->TrackedDeviceToPropertyContainer (vr::k_unTrackedDeviceIndex_Hmd);
81-
82104 vr::ETrackedPropertyError universe_error;
83105 uint64_t universe = vr::VRProperties ()->GetUint64Property (hmd_prop_container, vr::Prop_CurrentUniverseId_Uint64, &universe_error);
84106 if (universe_error == vr::ETrackedPropertyError::TrackedProp_Success) {
@@ -98,9 +120,6 @@ void SlimeVRDriver::VRDriver::RunPoseRequestThread() {
98120 }
99121 last_universe_error_ = universe_error;
100122
101- vr::TrackedDevicePose_t hmd_pose;
102- vr::VRServerDriverHost ()->GetRawTrackedDevicePoses (0 .0f , &hmd_pose, 1 );
103-
104123 vr::HmdQuaternion_t q = GetRotation (hmd_pose.mDeviceToAbsoluteTracking );
105124 vr::HmdVector3_t pos = GetPosition (hmd_pose.mDeviceToAbsoluteTracking );
106125
@@ -454,4 +473,4 @@ std::optional<SlimeVRDriver::UniverseTranslation> SlimeVRDriver::VRDriver::GetCu
454473 }
455474
456475 return std::nullopt ;
457- }
476+ }
0 commit comments