diff --git a/.gitmodules b/.gitmodules index 6df1e8d..0ee2507 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "lib/openvr"] path = lib/openvr url = https://github.com/ValveSoftware/openvr +[submodule "lib/minhook"] + path = lib/minhook + url = https://github.com/TsudaKageyu/minhook diff --git a/driver_files/src/Device.hpp b/driver_files/src/Device.hpp new file mode 100644 index 0000000..672e245 --- /dev/null +++ b/driver_files/src/Device.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include "openvr_driver.h" + +struct SharedDevice { + vr::DriverPose_t actual_pose; + + bool overwrite = false; + vr::DriverPose_t overwrite_pose; +}; diff --git a/driver_files/src/ServerTrackedDeviceProvider.cpp b/driver_files/src/ServerTrackedDeviceProvider.cpp index 13b1a1f..8a8d06b 100644 --- a/driver_files/src/ServerTrackedDeviceProvider.cpp +++ b/driver_files/src/ServerTrackedDeviceProvider.cpp @@ -1,19 +1,25 @@ #include "ServerTrackedDeviceProvider.hpp" +#include "Device.hpp" #include vr::EVRInitError ServerTrackedDeviceProvider::Init(vr::IVRDriverContext *pDriverContext) { VR_INIT_SERVER_DRIVER_CONTEXT(pDriverContext); - auto name = "MigawariDriver"; + auto name = "MigawariDriver_k_unMaxTrackedDeviceCount"; auto size = 4; HANDLE hSharedMemory = CreateFileMapping(NULL, NULL, PAGE_READWRITE, NULL, size, name); - pMemory = (int*)MapViewOfFile(hSharedMemory, FILE_MAP_ALL_ACCESS, NULL, NULL, size); + auto pMemory = (uint32_t*)MapViewOfFile(hSharedMemory, FILE_MAP_ALL_ACCESS, NULL, NULL, size); - *pMemory = 100; + *pMemory = vr::k_unMaxTrackedDeviceCount; - std::string message = "Migawari driver initialized!\n"; + std::string message = "Initializing migawari driver...\n"; vr::VRDriverLog()->Log(message.c_str()); + for (int i = 0; i < vr::k_unMaxTrackedDeviceCount; i++) { + HANDLE pHandle = CreateFileMapping(NULL, NULL, PAGE_READWRITE, NULL, sizeof(SharedDevice), ("MigawariDriver_Device" + std::to_string(i)).c_str()); + devices[i] = (SharedDevice*)MapViewOfFile(pHandle, FILE_MAP_ALL_ACCESS, NULL, NULL, sizeof(SharedDevice)); + } + return vr::VRInitError_None; } diff --git a/driver_files/src/ServerTrackedDeviceProvider.hpp b/driver_files/src/ServerTrackedDeviceProvider.hpp index 5eb60e5..042d667 100644 --- a/driver_files/src/ServerTrackedDeviceProvider.hpp +++ b/driver_files/src/ServerTrackedDeviceProvider.hpp @@ -1,5 +1,7 @@ #pragma once +#include "Device.hpp" + #include class ServerTrackedDeviceProvider : public vr::IServerTrackedDeviceProvider { @@ -12,5 +14,5 @@ public: virtual void EnterStandby() { }; virtual void LeaveStandby() { }; private: - int *pMemory; + SharedDevice* devices[vr::k_unMaxTrackedDeviceCount]; }; diff --git a/lib/minhook b/lib/minhook new file mode 160000 index 0000000..c1a7c38 --- /dev/null +++ b/lib/minhook @@ -0,0 +1 @@ +Subproject commit c1a7c3843bd1a5fe3eb779b64c0d823bca3dc339