22#include "include/TiltFiveNative.hpp"
48 auto glassesList = client->listGlasses();
50 return glassesList.error();
52 while (glassesList->empty()) {
57 glassesList = client->listGlasses();
59 return glassesList.error();
64 for (
auto& glassesInstance : *glassesList) {
76 auto start = std::chrono::steady_clock::now();
78 auto report = wand->getLatestReport();
80 }
while ((std::chrono::steady_clock::now() -
start) < 10000_ms);
90 auto wandHelper = glasses->getWandStreamHelper();
93 auto wands = wandHelper->listWands();
95 if (!wands->empty()) {
97 return wands->front();
101 return wands.error();
111 auto start = std::chrono::steady_clock::now();
116 std::cout <<
"\rPose unavailable - Is gameboard visible? ";
123 }
while ((std::chrono::steady_clock::now() -
start) < 10000_ms);
127 start = std::chrono::steady_clock::now();
129 auto poses = glasses->getLatestGameboardPoses();
132 std::cout <<
"\rGameboard poses unavailable - Is gameboard visible? "
135 return poses.error();
138 for (
auto& pose : *poses) {
142 }
while ((std::chrono::steady_clock::now() -
start) < 10000_ms);
154 auto friendlyName = glasses->getFriendlyName();
158 std::cerr <<
"Couldn't get friendly name : Service reports it's not set" <<
std::endl;
165 auto ipd = glasses->getIpd();
177 auto wand = waitForWand(glasses);
179 auto result = doThingsWithWands(*wand);
182 return result.error();
192 auto connectionHelper = glasses->createConnectionHelper(
"Awesome game - Player 1");
193 auto connectionResult = connectionHelper->awaitConnection(10000_ms);
194 if (connectionResult) {
197 std::cerr <<
"Error connecting glasses for exclusive use : " << connectionResult
199 return connectionResult.error();
204 auto result = readPoses(glasses);
207 return result.error();
213 auto releaseResult = glasses->release();
214 if (!releaseResult) {
216 return releaseResult.error();
218 auto readPosesResult = readPoses(glasses);
219 if (readPosesResult) {
220 std::cerr <<
"Reading poses unexpectedly succeeded after glasses release\n";
222 std::cerr <<
"Unexpected pose read error: " << readPosesResult <<
"\n";
234 return result.error();
237 float width = result->viewableExtentPositiveX + result->viewableExtentNegativeX;
238 float length = result->viewableExtentPositiveY + result->viewableExtentNegativeY;
239 float height = result->viewableExtentPositiveZ;
241 std::cout <<
"LE Gameboard size : " << width <<
"m x " << length <<
"m x " << height <<
"m"
249 auto result = client->getServiceVersion();
251 return result.error();
261 auto result = client->isTiltFiveUiRequestingAttention();
263 return result.error();
265 std::cout <<
"Tilt Five UI (Attention Requested) : " << ((*result) ?
"TRUE" :
"FALSE")
277 bool waitingForService =
false;
279 auto result = func(client);
283 return result.error();
286 std::cout << (waitingForService ?
"." :
"Waiting for service...") << std::flush;
287 waitingForService =
true;
295 for (
const auto& param : changed) {
302 for (
const auto& param : changed) {
303 std::cout <<
"Glasses Parameter changed : " << glasses <<
" => [" << param <<
"]"
309int main(
int ,
char** ) {
315 std::exit(EXIT_FAILURE);
322 auto paramChangeHelper = (*client)->createParamChangedHelper(paramChangeListener);
325 auto result = printGameboardDimensions(*client);
328 std::exit(EXIT_FAILURE);
333 result = waitForService<void>(*client, printServiceVersion);
336 std::exit(EXIT_FAILURE);
341 result = waitForService<void>(*client, printUiStatusFlags);
344 std::exit(EXIT_FAILURE);
349 auto glasses = waitForService<Glasses>(*client, waitForGlasses);
352 std::exit(EXIT_FAILURE);
356 paramChangeHelper->registerGlasses(*glasses);
359 result = doThingsWithGlasses(*glasses);
static constexpr success_t kSuccess
Indicates 'success' for a Result<void> function.
@ kTryAgain
Target is temporarily unavailable.
@ kNotConnected
Target is not connected.
@ kSettingUnknown
The requested param is unknown.
@ kNoService
Service isn't connected.
auto obtainClient(const std::string &applicationId, const std::string &applicationVersion, void *platformContext, const uint8_t sdkType=0) -> Result< std::shared_ptr< Client > >
Obtain an instance of the Tilt Five™ API client.
auto obtainGlasses(const std::string &identifier, const std::shared_ptr< Client > &client) -> Result< std::shared_ptr< Glasses > >
Obtain an instance of the Tilt Five™ Glasses.
@ kT5_GameboardType_LE
An LE gameboard.
@ kT5_GlassesPoseUsage_GlassesPresentation
The pose will be used to render images to be presented on the glasses.
duration< int64_t, milli > milliseconds
basic_ostream< _CharT, _Traits > & endl(basic_ostream< _CharT, _Traits > &__os)
basic_ostream< _CharT, _Traits > & flush(basic_ostream< _CharT, _Traits > &__os)
void sleep_for(const chrono::duration< _Rep, _Period > &__rtime)
Templated return type with support for error conditions.
Specialization of tiltfive::Result for functions with 'no return'.
Virtual base class for use with tiltfive::ParamChangeHelper.
virtual auto onSysParamChanged(const std::vector< T5_ParamSys > &changed) -> void=0
Called by a tiltfive::ParamChangeHelper when system-wide (T5_ParamSys) params have changed.
virtual auto onGlassesParamChanged(const std::shared_ptr< Glasses > &glasses, const std::vector< T5_ParamGlasses > &changed) -> void=0
Called by a tiltfive::ParamChangeHelper when glasses specific (T5_ParamGlasses) params have changed.