forked from Omnifinity/OpenVR-Tracking-Example
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.cpp
130 lines (121 loc) · 4.07 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <stdio.h>
#include "LighthouseTracking.h"
#include "cpTime.h"
#include <cstring>
#include <strings.h>
int main( int argc, // Number of strings in array argv
char *argv[], // Array of command-line argument strings
char **envp ) // Array of environment variable strings
{
InitFlags flags;
bool isHelp = false;
bool invert = false;
bool hasHadFlag = false;
for (int x = 0; x < argc; x++)
{
char* currString = argv[x];
int len = strlen(currString);
bool isFlag = len > 1 && currString[0] == '-' && '-' != currString[1];
if(!hasHadFlag && isFlag)
{
hasHadFlag = true;
invert = !invert;
}
if (isFlag)
for(int y = 1; y < len; y++)
{
if(currString[y] == 'h')
isHelp = true;
if(currString[y] == 'c')
flags.printCoords = false;
if(currString[y] == 'a')
flags.printAnalog = false;
if(currString[y] == 'e')
flags.printEvents = false;
if(currString[y] == 'i')
flags.printSetIds = false;
if(currString[y] == 'b')
flags.printBEvents = false;
if(currString[y] == 't')
flags.printTrack = false;
if(currString[y] == 'r')
flags.printRotation = false;
if(currString[y] == 'V')
flags.pipeCoords = true;
if(currString[y] == 'O')
invert = !invert;
}
if(!isFlag)
{
if( strcasecmp("--help",currString) == 0 )
isHelp = true;
if( strcasecmp("--coords",currString) == 0 )
flags.printCoords = false;
if( strcasecmp("--analog",currString) == 0 )
flags.printAnalog = false;
if( strcasecmp("--events",currString) == 0 )
flags.printEvents = false;
if( strcasecmp("--ids",currString) == 0 )
flags.printSetIds = false;
if( strcasecmp("--bevents",currString) == 0 )
flags.printBEvents = false;
if( strcasecmp("--track",currString) == 0 )
flags.printTrack = false;
if( strcasecmp("--rot",currString) == 0 )
flags.printRotation = false;
if( strcasecmp("--visual",currString) == 0 )
flags.pipeCoords = true;
if( strcasecmp("--omit",currString) == 0 )
invert = !invert;
}
}
if(invert)
{
flags.printCoords = !flags.printCoords;
flags.printAnalog = !flags.printAnalog;
flags.printEvents = !flags.printEvents;
flags.printSetIds = !flags.printSetIds;
flags.printBEvents = !flags.printBEvents;
flags.printTrack = !flags.printTrack;
flags.printRotation = !flags.printRotation;
}
if(isHelp)
{
printf("\nVive LighthouseTracking Example by Kevin Kellar.\n");
printf("Command line flags:\n");
printf(" -h --help -> Prints this help text. The \"Only Print\" flags can be combined for multiple types to both print.\n");
printf(" -a --analog -> Only print analog button data from the controllers. \n");
printf(" -b --bEvents -> Only print button event data. \n");
printf(" -c --coords -> Only print HMD/Controller coordinates. \n");
printf(" -e --events -> Only print VR events. \n");
printf(" -i --ids -> Only print the output from initAssignIds() as the devices are given ids. \n");
printf(" -r --rot -> Only print the rotation of devices. \n");
printf(" -t --track -> Only print the tracking state of devices. \n");
printf(" -O --omit -> Omits only the specified output types (a,b,c,e,i,r,t) rather than including only the specified types. Useful for hiding only a few types of output. \n");
printf(" -V --visual -> Streamlines output (coordinates) to be more easily parsed by a visual program. \n");
return EXIT_SUCCESS;
}
if(flags.pipeCoords)
{
flags.printCoords = false;
flags.printAnalog = false;
flags.printEvents = false;
flags.printSetIds = false;
flags.printBEvents = false;
flags.printTrack = false;
flags.printRotation = false;
}
// Create a new LighthouseTracking instance and parse as needed
LighthouseTracking* lighthouseTracking = new LighthouseTracking(flags);
if (lighthouseTracking) //null check
{
cpSleep(2000);
while (1==1)
{
lighthouseTracking->RunProcedure();
cpSleep(1);
}
delete lighthouseTracking;
}
return EXIT_SUCCESS;
}