+85
-52
src/xrt/auxiliary/util/u_pretty_print.c
+85
-52
src/xrt/auxiliary/util/u_pretty_print.c
···
1
1
// Copyright 2022-2024, Collabora, Ltd.
2
+
// Copyright 2025, NVIDIA CORPORATION.
2
3
// SPDX-License-Identifier: BSL-1.0
3
4
/*!
4
5
* @file
···
39
40
case XRT_INPUT_TYPE_HAND_TRACKING: return "HAND_TRACKING";
40
41
case XRT_INPUT_TYPE_FACE_TRACKING: return "FACE_TRACKING";
41
42
case XRT_INPUT_TYPE_BODY_TRACKING: return "BODY_TRACKING";
42
-
default: return "<UNKNOWN>";
43
43
}
44
+
45
+
return "<UNKNOWN>";
46
+
}
47
+
48
+
const char *
49
+
get_xrt_output_type_short_str(enum xrt_output_type type)
50
+
{
51
+
switch (type) {
52
+
case XRT_OUTPUT_TYPE_VIBRATION: return "XRT_OUTPUT_TYPE_VIBRATION";
53
+
case XRT_OUTPUT_TYPE_FORCE_FEEDBACK: return "XRT_OUTPUT_TYPE_FORCE_FEEDBACK";
54
+
}
55
+
56
+
return "<UNKNOWN>";
44
57
}
45
58
46
59
void
···
70
83
71
84
/*
72
85
*
86
+
* 'Exported' str functions.
87
+
*
88
+
*/
89
+
90
+
const char *
91
+
u_str_xrt_input_name_or_null(enum xrt_input_name name)
92
+
{
93
+
#define XRT_INPUT_LIST_TO_CASE(NAME, _) \
94
+
case NAME: return #NAME;
95
+
96
+
// No default case so we get warnings of missing entries.
97
+
switch (name) {
98
+
XRT_INPUT_LIST(XRT_INPUT_LIST_TO_CASE)
99
+
}
100
+
101
+
#undef XRT_INPUT_LIST_TO_CASE
102
+
103
+
return NULL;
104
+
}
105
+
106
+
const char *
107
+
u_str_xrt_output_name_or_null(enum xrt_output_name name)
108
+
{
109
+
#define XRT_OUTPUT_LIST_TO_CASE(NAME, _) \
110
+
case NAME: return #NAME;
111
+
112
+
// No default case so we get warnings of missing entries.
113
+
switch (name) {
114
+
XRT_OUTPUT_LIST(XRT_OUTPUT_LIST_TO_CASE)
115
+
}
116
+
117
+
#undef XRT_OUTPUT_LIST_TO_CASE
118
+
119
+
return NULL;
120
+
}
121
+
122
+
const char *
123
+
u_str_xrt_device_name_or_null(enum xrt_device_name name)
124
+
{
125
+
#define XRT_DEVICE_NAME_LIST_TO_CASE(NAME) \
126
+
case NAME: return #NAME;
127
+
128
+
// No default case so we get warnings of missing entries.
129
+
switch (name) {
130
+
XRT_DEVICE_NAME_LIST(XRT_DEVICE_NAME_LIST_TO_CASE)
131
+
}
132
+
133
+
#undef XRT_DEVICE_NAME_LIST_TO_CASE
134
+
135
+
return NULL;
136
+
}
137
+
138
+
139
+
/*
140
+
*
73
141
* 'Exported' functions.
74
142
*
75
143
*/
···
112
180
void
113
181
u_pp_xrt_input_name(struct u_pp_delegate dg, enum xrt_input_name name)
114
182
{
115
-
#define XRT_INPUT_LIST_TO_CASE(NAME, _) \
116
-
case NAME: DG(#NAME); return;
117
-
118
-
switch (name) {
119
-
XRT_INPUT_LIST(XRT_INPUT_LIST_TO_CASE)
183
+
const char *might_be_null = u_str_xrt_input_name_or_null(name);
184
+
if (might_be_null != NULL) {
185
+
DG(might_be_null);
186
+
return;
120
187
}
121
188
122
-
#undef XRT_INPUT_LIST_TO_CASE
123
-
124
189
/*
125
-
* No default case so we get warnings of missing entries.
126
190
* Invalid values handled below.
127
191
*/
128
192
···
136
200
void
137
201
u_pp_xrt_output_name(struct u_pp_delegate dg, enum xrt_output_name name)
138
202
{
139
-
#define XRT_OUTPUT_CASE(NAME) \
140
-
case NAME: DG(#NAME); return
141
-
142
-
switch (name) {
143
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_SIMPLE_VIBRATION);
144
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_PSMV_RUMBLE_VIBRATION);
145
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_INDEX_HAPTIC);
146
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_VIVE_HAPTIC);
147
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_WMR_HAPTIC);
148
-
149
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_XBOX_HAPTIC_LEFT);
150
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_XBOX_HAPTIC_RIGHT);
151
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_XBOX_HAPTIC_LEFT_TRIGGER);
152
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_XBOX_HAPTIC_RIGHT_TRIGGER);
153
-
154
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_TOUCH_HAPTIC);
155
-
156
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_FORCE_FEEDBACK_LEFT);
157
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_FORCE_FEEDBACK_RIGHT);
158
-
159
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_G2_CONTROLLER_HAPTIC);
160
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_ODYSSEY_CONTROLLER_HAPTIC);
161
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_ML2_CONTROLLER_VIBRATION);
162
-
163
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_PSSENSE_VIBRATION);
164
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_PSSENSE_TRIGGER_FEEDBACK);
165
-
166
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_VIVE_TRACKER_HAPTIC);
167
-
168
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_OPPO_MR_HAPTIC);
169
-
170
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_PICO_NEO3_HAPTIC);
171
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_PICO4_HAPTIC);
172
-
173
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_VIVE_COSMOS_HAPTIC);
174
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_VIVE_FOCUS3_HAPTIC);
203
+
const char *might_be_null = u_str_xrt_output_name_or_null(name);
204
+
if (might_be_null != NULL) {
205
+
DG(might_be_null);
206
+
return;
207
+
}
175
208
176
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC);
177
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC_TRIGGER);
178
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_TOUCH_PRO_HAPTIC_THUMB);
179
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_TOUCH_PLUS_HAPTIC);
209
+
/*
210
+
* Invalid values handled below.
211
+
*/
180
212
181
-
XRT_OUTPUT_CASE(XRT_OUTPUT_NAME_PSVR2_HAPTIC);
182
-
}
213
+
uint32_t id = XRT_GET_OUTPUT_ID(name);
214
+
enum xrt_output_type type = XRT_GET_OUTPUT_TYPE(name);
215
+
const char *str = get_xrt_output_type_short_str(type);
183
216
184
-
#undef XRT_OUTPUT_CASE
217
+
u_pp(dg, "XRT_OUTPUT_0x%04x_%s", id, str);
185
218
}
186
219
187
220
void
+43
src/xrt/auxiliary/util/u_pretty_print.h
+43
src/xrt/auxiliary/util/u_pretty_print.h
···
29
29
* they can easily be chained together to form a debug message printing out
30
30
* various information. Most of the final logging functions in Monado inserts a
31
31
* newline at the end of the message and we don't want two to be inserted.
32
+
*
33
+
* There are also helpers that goes from an enum to a string that that doesn't
34
+
* use the delegate to do the printing, these returns string that are compiled
35
+
* into the binary. They will return 'UNKNOWN' if they don't know the value.
36
+
* But can be made to return NULL on unknown.
32
37
*/
38
+
39
+
/*!
40
+
* Returns a string of the input name, or NULL if invalid.
41
+
*
42
+
* @ingroup aux_pretty
43
+
*/
44
+
const char *
45
+
u_str_xrt_input_name_or_null(enum xrt_input_name name);
46
+
47
+
/*!
48
+
* Returns a string of the output name, or NULL if invalid.
49
+
*
50
+
* @ingroup aux_pretty
51
+
*/
52
+
const char *
53
+
u_str_xrt_output_name_or_null(enum xrt_output_name name);
54
+
55
+
/*!
56
+
* Returns a string of the device name, or NULL if invalid.
57
+
*
58
+
* @ingroup aux_pretty
59
+
*/
60
+
const char *
61
+
u_str_xrt_device_name_or_null(enum xrt_device_name name);
62
+
63
+
#define U_STR_NO_NULL(NAME, TYPE) \
64
+
static inline const char *NAME(TYPE enumerate) \
65
+
{ \
66
+
const char *str = NAME##_or_null(enumerate); \
67
+
return str != NULL ? str : "UNKNOWN"; \
68
+
}
69
+
70
+
U_STR_NO_NULL(u_str_xrt_input_name, enum xrt_input_name)
71
+
U_STR_NO_NULL(u_str_xrt_output_name, enum xrt_output_name)
72
+
U_STR_NO_NULL(u_str_xrt_device_name, enum xrt_device_name)
73
+
74
+
#undef U_STR_NO_NULL
75
+
33
76
34
77
/*!
35
78
* Function prototype for receiving pretty printed strings.