Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 29 additions & 10 deletions src/VRDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,39 @@ void SlimeVRDriver::VRDriver::RunPoseRequestThread() {

messages::ProtobufMessage* message = google::protobuf::Arena::CreateMessage<messages::ProtobufMessage>(&arena_);

if (!sent_hmd_add_message_) {
vr::TrackedDevicePose_t hmd_pose;
vr::VRServerDriverHost()->GetRawTrackedDevicePoses(0.0f, &hmd_pose, 1);

vr::PropertyContainerHandle_t hmd_prop_container =
vr::VRProperties()->TrackedDeviceToPropertyContainer(vr::k_unTrackedDeviceIndex_Hmd);

if (!sent_hmd_add_message_ && hmd_pose.bDeviceIsConnected) {
vr::ETrackedPropertyError error{};
auto serial = vr::VRProperties()->GetStringProperty(hmd_prop_container, vr::Prop_SerialNumber_String, &error);
if (error != vr::ETrackedPropertyError::TrackedProp_Success) {
logger_->Log("Failed to get HMD's Prop_SerialNumber_String: {}", vr::VRPropertiesRaw()->GetPropErrorNameFromEnum(error));
}

auto name = vr::VRProperties()->GetStringProperty(hmd_prop_container, vr::Prop_ModelNumber_String, &error);
if (error != vr::ETrackedPropertyError::TrackedProp_Success) {
logger_->Log("Failed to get HMD's Prop_ModelNumber_String: {}", vr::VRPropertiesRaw()->GetPropErrorNameFromEnum(error));
}

auto manufacturer = vr::VRProperties()->GetStringProperty(hmd_prop_container, vr::Prop_ManufacturerName_String, &error);
if (error != vr::ETrackedPropertyError::TrackedProp_Success) {
logger_->Log("Failed to get HMD's Prop_ManufacturerName_String: {}", vr::VRPropertiesRaw()->GetPropErrorNameFromEnum(error));
}

logger_->Log("HMD props: serial='{}', model='{}', manufacturer='{}'", serial, name, manufacturer);

// Send add message for HMD
messages::TrackerAdded* tracker_added = google::protobuf::Arena::CreateMessage<messages::TrackerAdded>(&arena_);
message->set_allocated_tracker_added(tracker_added);
tracker_added->set_tracker_id(0);
tracker_added->set_tracker_role(TrackerRole::HMD);
tracker_added->set_tracker_serial("HMD");
tracker_added->set_tracker_name("HMD");
tracker_added->set_tracker_serial(serial.empty() ? "HMD" : serial);
tracker_added->set_tracker_name(name.empty() ? "HMD" : name);
tracker_added->set_manufacturer(manufacturer.empty() ? "OpenVR" : manufacturer);
bridge_->SendBridgeMessage(*message);

messages::TrackerStatus* tracker_status = google::protobuf::Arena::CreateMessage<messages::TrackerStatus>(&arena_);
Expand All @@ -76,9 +101,6 @@ void SlimeVRDriver::VRDriver::RunPoseRequestThread() {
logger_->Log("Sent HMD hello message");
}

vr::PropertyContainerHandle_t hmd_prop_container =
vr::VRProperties()->TrackedDeviceToPropertyContainer(vr::k_unTrackedDeviceIndex_Hmd);

vr::ETrackedPropertyError universe_error;
uint64_t universe = vr::VRProperties()->GetUint64Property(hmd_prop_container, vr::Prop_CurrentUniverseId_Uint64, &universe_error);
if (universe_error == vr::ETrackedPropertyError::TrackedProp_Success) {
Expand All @@ -98,9 +120,6 @@ void SlimeVRDriver::VRDriver::RunPoseRequestThread() {
}
last_universe_error_ = universe_error;

vr::TrackedDevicePose_t hmd_pose;
vr::VRServerDriverHost()->GetRawTrackedDevicePoses(0.0f, &hmd_pose, 1);

vr::HmdQuaternion_t q = GetRotation(hmd_pose.mDeviceToAbsoluteTracking);
vr::HmdVector3_t pos = GetPosition(hmd_pose.mDeviceToAbsoluteTracking);

Expand Down Expand Up @@ -436,4 +455,4 @@ std::optional<SlimeVRDriver::UniverseTranslation> SlimeVRDriver::VRDriver::GetCu
}

return std::nullopt;
}
}
1 change: 1 addition & 0 deletions src/bridge/ProtobufMessages.proto
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ message TrackerAdded {
string tracker_serial = 2;
string tracker_name = 3;
int32 tracker_role = 4;
string manufacturer = 5;
}

message TrackerStatus {
Expand Down