init
This commit is contained in:
commit
f9735a9946
7 changed files with 5719 additions and 0 deletions
5
.clang-format
Normal file
5
.clang-format
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
BasedOnStyle: Microsoft
|
||||||
|
UseTab: Always
|
||||||
|
ReflowComments: false
|
||||||
|
ColumnLimit: 0
|
||||||
|
BreakBeforeBraces: Attach
|
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
vr_status
|
||||||
|
steamvr-status
|
||||||
|
.vscode/
|
||||||
|
*.zip
|
||||||
|
*.tar.xz
|
13
Makefile
Normal file
13
Makefile
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
VERSION := 1.0.0
|
||||||
|
CXX := g++
|
||||||
|
TARGET := ./vr_status
|
||||||
|
LFLAGS := -Wl,-rpath,'$$ORIGIN' -L. -lopenvr_api
|
||||||
|
|
||||||
|
build:
|
||||||
|
$(CXX) src/main.cpp $(CPPFLAGS) $(LFLAGS) -o $(TARGET)
|
||||||
|
|
||||||
|
release: build
|
||||||
|
mkdir -p steamvr-status
|
||||||
|
cp -f libopenvr_api.so steamvr-status
|
||||||
|
cp -f $(TARGET) steamvr-status
|
||||||
|
tar -caf steamvr-status-$(VERSION).tar.xz steamvr-status
|
2
README.md
Normal file
2
README.md
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# SteamVR-status
|
||||||
|
A very simple program that prints the battery levels of connected VR devices to `/tmp/steamvr_battery_status` if SteamVR is running.
|
5600
lib/openvr.h
Normal file
5600
lib/openvr.h
Normal file
File diff suppressed because it is too large
Load diff
BIN
libopenvr_api.so
Normal file
BIN
libopenvr_api.so
Normal file
Binary file not shown.
94
src/main.cpp
Normal file
94
src/main.cpp
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
#include "../lib/openvr.h"
|
||||||
|
#include <cstdio>
|
||||||
|
#include <fstream>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <string>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
const char *OUT_PATH = "/tmp/steamvr_battery_status";
|
||||||
|
|
||||||
|
bool should_exit = false;
|
||||||
|
vr::IVRSystem *vr_sys;
|
||||||
|
|
||||||
|
void interrupted(int _sig) {
|
||||||
|
should_exit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void update();
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
vr::EVRInitError init_err;
|
||||||
|
vr_sys = vr::VR_Init(&init_err, vr::VRApplication_Background);
|
||||||
|
if (init_err == vr::VRInitError_Init_NoServerForBackgroundApp) {
|
||||||
|
printf("SteamVR is not running.\n");
|
||||||
|
vr::VR_Shutdown();
|
||||||
|
return 0;
|
||||||
|
} else if (init_err != 0) {
|
||||||
|
printf("Could not initialize OpenVR session. Error code: %d\n", init_err);
|
||||||
|
vr::VR_Shutdown();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
signal(SIGINT, interrupted);
|
||||||
|
|
||||||
|
while (!should_exit) {
|
||||||
|
update();
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::remove(OUT_PATH);
|
||||||
|
vr::VR_Shutdown();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void update() {
|
||||||
|
auto di_left = vr_sys->GetTrackedDeviceIndexForControllerRole(vr::TrackedControllerRole_LeftHand);
|
||||||
|
auto di_right = vr_sys->GetTrackedDeviceIndexForControllerRole(vr::TrackedControllerRole_RightHand);
|
||||||
|
|
||||||
|
std::vector<vr::TrackedDeviceIndex_t> trackers;
|
||||||
|
{
|
||||||
|
vr::TrackedDeviceIndex_t tracker_arr[64];
|
||||||
|
int controller_count = vr_sys->GetSortedTrackedDeviceIndicesOfClass(vr::TrackedDeviceClass_Controller, tracker_arr, 64);
|
||||||
|
|
||||||
|
trackers = std::vector<vr::TrackedDeviceIndex_t>(tracker_arr, tracker_arr + controller_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string output;
|
||||||
|
|
||||||
|
for (int di = 0; di < vr::k_unMaxTrackedDeviceCount; di++) {
|
||||||
|
if (!vr_sys->IsTrackedDeviceConnected(di))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
vr::ETrackedPropertyError err;
|
||||||
|
bool provides_battery = vr_sys->GetBoolTrackedDeviceProperty(di, vr::Prop_DeviceProvidesBatteryStatus_Bool, &err);
|
||||||
|
if (!provides_battery || err != vr::TrackedProp_Success)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (di == di_left) {
|
||||||
|
output += "L";
|
||||||
|
} else if (di == di_right) {
|
||||||
|
output += "R";
|
||||||
|
} else {
|
||||||
|
output += "T";
|
||||||
|
output += std::to_string(di);
|
||||||
|
}
|
||||||
|
output += ": ";
|
||||||
|
float battery_level = vr_sys->GetFloatTrackedDeviceProperty(di, vr::Prop_DeviceBatteryPercentage_Float, &err);
|
||||||
|
output += std::to_string((int)(battery_level * 100));
|
||||||
|
output += "%";
|
||||||
|
bool is_charging = vr_sys->GetBoolTrackedDeviceProperty(di, vr::Prop_DeviceIsCharging_Bool, &err);
|
||||||
|
if (is_charging) {
|
||||||
|
output += "+";
|
||||||
|
}
|
||||||
|
output += " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output.empty()) {
|
||||||
|
output = "No tracked devices connected";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ofstream out_file(OUT_PATH);
|
||||||
|
out_file.write(output.c_str(), output.size());
|
||||||
|
out_file.close();
|
||||||
|
}
|
Loading…
Reference in a new issue