Skip to content

Commit cb63932

Browse files
committed
Capnp bandaid
1 parent cfcd1da commit cb63932

File tree

4 files changed

+5605
-33
lines changed

4 files changed

+5605
-33
lines changed

driver_Amethyst/CMakeLists.txt

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ file(GLOB driver_SRC "src/*.cpp")
1414
file(GLOB driver_IDL "include/*.idl")
1515

1616
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/include" PREFIX "Header Files" FILES ${driver_HDR})
17-
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/src" PREFIX "Source Files" FILES ${driver_SRC})
18-
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/include" PREFIX "IDL Files" FILES ${driver_IDL})
17+
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/src" PREFIX "Source Files" FILES ${driver_SRC})
18+
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/include" PREFIX "IDL Files" FILES ${driver_IDL})
1919

2020
set_source_files_properties(${driver_IDL} PROPERTIES HEADER_FILE_ONLY TRUE)
2121

@@ -35,10 +35,11 @@ if(MSVC)
3535
endif()
3636

3737
# ----------------------- MinHook support ----------------------
38-
if (WIN32 AND USE_HOOKS)
38+
if(WIN32 AND USE_HOOKS)
3939
find_package(minhook CONFIG REQUIRED)
4040
set(MINHOOK_LIB minhook::minhook)
4141
endif()
42+
4243
# --------------------------------------------------------------
4344

4445
# ----------------------- Cap'n Proto --------------------------
@@ -53,58 +54,62 @@ set(CAPNP_GEN_SRC "${CAPNP_OUT_DIR}/driver.capnp.c++")
5354

5455
# Resolve capnp compiler path
5556
set(CAPNP_COMPILER capnp)
56-
if (TARGET CapnProto::capnp_tool)
57+
58+
if(TARGET CapnProto::capnp_tool)
5759
set(CAPNP_COMPILER $<TARGET_FILE:CapnProto::capnp_tool>)
58-
elseif (DEFINED CAPNP_EXECUTABLE)
60+
elseif(DEFINED CAPNP_EXECUTABLE)
5961
set(CAPNP_COMPILER "${CAPNP_EXECUTABLE}")
6062
endif()
6163

6264
# Set up the capnp compile command with PATH modification on Linux
6365
if(UNIX AND NOT APPLE)
64-
if (TARGET CapnProto::capnp_tool)
66+
if(TARGET CapnProto::capnp_tool)
6567
set(CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=$<TARGET_FILE_DIR:CapnProto::capnp_tool>:$ENV{PATH}" ${CAPNP_COMPILER} compile -o c++:. "driver.capnp")
66-
elseif (DEFINED CAPNP_EXECUTABLE)
68+
elseif(DEFINED CAPNP_EXECUTABLE)
6769
get_filename_component(CAPNP_DIR "${CAPNP_EXECUTABLE}" DIRECTORY)
6870
set(CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=${CAPNP_DIR}:$ENV{PATH}" ${CAPNP_COMPILER} compile -o c++:. "driver.capnp")
6971
else()
7072
set(CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp")
7173
endif()
7274
else()
73-
if (TARGET CapnProto::capnp_tool)
74-
set(CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=$<TARGET_FILE_DIR:CapnProto::capnp_tool>;$ENV{PATH}" ${CAPNP_COMPILER} compile -o c++:. "driver.capnp")
75-
elseif (DEFINED CAPNP_EXECUTABLE)
76-
get_filename_component(CAPNP_DIR "${CAPNP_EXECUTABLE}" DIRECTORY)
77-
set(CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=${CAPNP_DIR}:$ENV{PATH}" ${CAPNP_COMPILER} compile -o c++:. "driver.capnp")
78-
else()
79-
set(CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp")
80-
endif()
75+
set(CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp")
8176
endif()
8277

83-
add_custom_command(
84-
OUTPUT "${CAPNP_GEN_HDR}" "${CAPNP_GEN_SRC}"
85-
COMMAND ${CMAKE_COMMAND} -E make_directory "${CAPNP_OUT_DIR}"
86-
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CAPNP_SCHEMA}" "${CAPNP_SCHEMA_COPY}"
87-
COMMAND ${CAPNP_COMPILE_COMMAND}
88-
DEPENDS "${CAPNP_SCHEMA}"
89-
WORKING_DIRECTORY "${CAPNP_OUT_DIR}"
90-
COMMENT "Generating Cap'n Proto C++ from driver.capnp"
91-
VERBATIM
92-
)
78+
# Don't compile by default, use generated files dir
79+
if(DO_CAPNP_COMPILE)
80+
add_custom_command(
81+
OUTPUT "${CAPNP_GEN_HDR}" "${CAPNP_GEN_SRC}"
82+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CAPNP_OUT_DIR}"
83+
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CAPNP_SCHEMA}" "${CAPNP_SCHEMA_COPY}"
84+
COMMAND ${CAPNP_COMPILE_COMMAND}
85+
DEPENDS "${CAPNP_SCHEMA}"
86+
WORKING_DIRECTORY "${CAPNP_OUT_DIR}"
87+
COMMENT "Generating Cap'n Proto C++ from driver.capnp"
88+
VERBATIM
89+
)
90+
else()
91+
set(CAPNP_OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/generated_files")
92+
set(CAPNP_SCHEMA_COPY "${CAPNP_OUT_DIR}/driver.capnp")
93+
set(CAPNP_GEN_HDR "${CAPNP_OUT_DIR}/driver.capnp.h")
94+
set(CAPNP_GEN_SRC "${CAPNP_OUT_DIR}/driver.capnp.c++")
95+
endif()
9396

9497
# Group generated files for IDEs
9598
source_group(TREE "${CAPNP_OUT_DIR}" PREFIX "Generated Files" FILES "${CAPNP_GEN_SRC}" "${CAPNP_GEN_HDR}")
99+
96100
# --------------------------------------------------------------
97101

98102
# ----------------------- OpenVR (vendor) ----------------------
99103
set(OPENVR_ROOT "${CMAKE_CURRENT_LIST_DIR}/../vendor/openvr")
100104
set(OPENVR_INCLUDE_DIR "${OPENVR_ROOT}/headers")
101105

102-
if (WIN32)
106+
if(WIN32)
103107
link_directories("${OPENVR_ROOT}/lib/win64")
104108
link_directories("${OPENVR_ROOT}/bin/win64")
105109
elseif(UNIX AND NOT APPLE)
106110
link_directories("${OPENVR_ROOT}/lib/linux64")
107111
endif()
112+
108113
# --------------------------------------------------------------
109114

110115
# -----------------------Main-----------------------------------
@@ -113,6 +118,7 @@ target_include_directories(${DRIVER_TARGET_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE
113118

114119
set_property(TARGET ${DRIVER_TARGET_NAME} PROPERTY CXX_STANDARD 20)
115120
set_property(TARGET ${DRIVER_TARGET_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
121+
116122
# --------------------------------------------------------------
117123

118124
# ----------------------- Cap'n Proto --------------------------
@@ -125,22 +131,24 @@ add_dependencies(${DRIVER_TARGET_NAME} capnp_generated)
125131

126132
target_sources(${DRIVER_TARGET_NAME} PRIVATE "${CAPNP_GEN_SRC}" "${CAPNP_GEN_HDR}")
127133
target_include_directories(${DRIVER_TARGET_NAME} PRIVATE "${CAPNP_OUT_DIR}")
134+
128135
# --------------------------------------------------------------
129136

130137
# ----------------------- OpenVR (vendor) ----------------------
131138
target_link_libraries(${DRIVER_TARGET_NAME} PRIVATE openvr_api)
132139
target_include_directories(${DRIVER_TARGET_NAME} PRIVATE "${OPENVR_INCLUDE_DIR}")
133140

134141
# Link MinHook after target exists
135-
if (WIN32 AND USE_HOOKS)
142+
if(WIN32 AND USE_HOOKS)
136143
target_link_libraries(${DRIVER_TARGET_NAME} PRIVATE ${MINHOOK_LIB})
137144
endif()
138145

139-
if (UNIX AND NOT APPLE)
146+
if(UNIX AND NOT APPLE)
140147
set_target_properties(${DRIVER_TARGET_NAME} PROPERTIES
141148
BUILD_RPATH "$ORIGIN"
142149
INSTALL_RPATH "$ORIGIN")
143150
endif()
151+
144152
# --------------------------------------------------------------
145153

146154
# ----------------------- Packaging (Pack/00Amethyst) ---------
@@ -151,7 +159,7 @@ else()
151159
set(PACK_ROOT "${CMAKE_CURRENT_BINARY_DIR}/Pack/Amethyst")
152160
endif()
153161

154-
if (WIN32)
162+
if(WIN32)
155163
set(PACK_BIN_DIR "${PACK_ROOT}/bin/win64")
156164
elseif(UNIX AND NOT APPLE)
157165
set(PACK_BIN_DIR "${PACK_ROOT}/bin/linux64")
@@ -174,9 +182,9 @@ add_custom_command(TARGET ${DRIVER_TARGET_NAME} POST_BUILD
174182

175183
if(UNIX AND NOT APPLE)
176184
add_custom_command(TARGET ${DRIVER_TARGET_NAME} POST_BUILD
177-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
178-
"$<TARGET_FILE:${DRIVER_TARGET_NAME}>"
179-
"${PACK_BIN_DIR}/$<TARGET_FILE_BASE_NAME:${DRIVER_TARGET_NAME}>$<TARGET_FILE_SUFFIX:${DRIVER_TARGET_NAME}>"
185+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
186+
"$<TARGET_FILE:${DRIVER_TARGET_NAME}>"
187+
"${PACK_BIN_DIR}/$<TARGET_FILE_BASE_NAME:${DRIVER_TARGET_NAME}>$<TARGET_FILE_SUFFIX:${DRIVER_TARGET_NAME}>"
180188
COMMENT "Copying driver library without lib prefix"
181189
VERBATIM
182190
)
@@ -187,5 +195,5 @@ else()
187195
VERBATIM
188196
)
189197
endif()
190-
# --------------------------------------------------------------
191198

199+
# --------------------------------------------------------------
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
@0xd7e9a6c1a9a01e2f;
2+
3+
using Cxx = import "/capnp/c++.capnp";
4+
$Cxx.namespace("amethyst::driver");
5+
6+
# - HRESULT is not modeled; return only the out params (if any).
7+
# - Definitions, structs, and enums mirror MIDL names and fields.
8+
9+
# ---------------- Data contracts (from DataContract.idl) ----------------
10+
11+
enum TrackerType {
12+
trackerHanded @0;
13+
trackerLeftFoot @1;
14+
trackerRightFoot @2;
15+
trackerLeftShoulder@3;
16+
trackerRightShoulder@4;
17+
trackerLeftElbow @5;
18+
trackerRightElbow @6;
19+
trackerLeftKnee @7;
20+
trackerRightKnee @8;
21+
trackerWaist @9;
22+
trackerChest @10;
23+
trackerCamera @11;
24+
trackerKeyboard @12;
25+
trackerHead @13;
26+
trackerLeftHand @14;
27+
trackerRightHand @15;
28+
}
29+
30+
struct Vector3 {
31+
x @0 :Float32;
32+
y @1 :Float32;
33+
z @2 :Float32;
34+
}
35+
36+
struct Quaternion {
37+
x @0 :Float32;
38+
y @1 :Float32;
39+
z @2 :Float32;
40+
w @3 :Float32;
41+
}
42+
43+
# Mirrors the nullable wrapper used in the IDL.
44+
struct Vector3Nullable {
45+
hasValue @0 :Bool;
46+
value @1 :Vector3;
47+
}
48+
49+
struct TrackerBase {
50+
connectionState @0 :Bool;
51+
trackingState @1 :Bool;
52+
serial @2 :Text; # [string] char* Serial
53+
54+
role @3 :TrackerType;
55+
position @4 :Vector3;
56+
orientation @5 :Quaternion;
57+
58+
velocity @6 :Vector3Nullable;
59+
acceleration @7 :Vector3Nullable;
60+
angularVelocity @8 :Vector3Nullable;
61+
angularAcceleration @9 :Vector3Nullable;
62+
}
63+
64+
struct DriverPose {
65+
connectionState @0 :Bool;
66+
trackingState @1 :Bool;
67+
68+
position @2 :Vector3;
69+
orientation @3 :Quaternion;
70+
}
71+
72+
# ---------------- Service contracts (from IVersionedApi.idl, IDriverService.idl) ----------------
73+
74+
75+
interface IDriverService {
76+
getVersion @0 () -> (apiVersion :UInt32);
77+
78+
setTrackerState @1 (tracker :TrackerBase) -> ();
79+
updateTracker @2 (tracker :TrackerBase) -> ();
80+
81+
requestVrRestart @3 (message :Text) -> ();
82+
pingDriverService @4 () -> (ms :Int64);
83+
84+
setDriverPose @5 (id :UInt32, pose :DriverPose) -> ();
85+
enableOverride @6 (id :UInt32, isEnabled :Bool) -> ();
86+
87+
updateInputBoolean @7 (tracker :TrackerType, path :Text, value :Bool) -> ();
88+
updateInputScalar @8 (tracker :TrackerType, path :Text, value :Float32) -> ();
89+
}

0 commit comments

Comments
 (0)