PSMResult PSM_GetHMDTrackingSpaceSettings(PSMHMDTrackingSpace *out_tracking_space, int timeout_ms) { PSMResult result= PSMResult_Error; CallbackResultCapture resultState; ClientPSMoveAPI::t_request_id request_id= ClientPSMoveAPI::get_tracking_space_settings(); ClientPSMoveAPI::register_callback(request_id, CallbackResultCapture::response_callback, &resultState); CallbackTimeout timeout(timeout_ms); while (!resultState.bReceived && !timeout.HasElapsed()) { _PAUSE(10); PSM_Update(); } if (timeout.HasElapsed()) { ClientPSMoveAPI::cancel_callback(request_id); result= PSMResult_Timeout; } else if (resultState.out_response.result_code == ClientPSMoveAPI::_clientPSMoveResultCode_ok) { assert(resultState.out_response.payload_type == ClientPSMoveAPI::eResponsePayloadType::_responsePayloadType_ControllerList); PSMResponseMessage response; extractResponseMessage(&resultState.out_response, &response); *out_tracking_space= response.payload.hmd_tracking_space; result= PSMResult_Success; } return result; }
// -- Async Messaging Helpers ----- static PSMResult blockUntilResponse(ClientPSMoveAPI::t_request_id req_id, int timeout_ms) { PSMResult result= PSMResult_Error; if (req_id > 0) { CallbackResultCapture resultState; ClientPSMoveAPI::register_callback(req_id, CallbackResultCapture::response_callback, &resultState); CallbackTimeout timeout(timeout_ms); while (!resultState.bReceived && !timeout.HasElapsed()) { _PAUSE(10); // Process responses, events and controller updates from the service PSM_Update(); } if (timeout.HasElapsed()) { ClientPSMoveAPI::cancel_callback(req_id); result= PSMResult_Timeout; } else if (resultState.out_response.result_code == ClientPSMoveAPI::_clientPSMoveResultCode_ok) { result= PSMResult_Success; } } return result; }
PSMResult PSM_Initialize(const char* host, const char* port, int timeout_ms) { PSMResult result = PSMResult_Error; if (PSM_InitializeAsync(host, port) == PSMResult_RequestSent) { CallbackTimeout timeout(timeout_ms); while (!PSM_HasConnectionStatusChanged() && !timeout.HasElapsed()) { _PAUSE(10); PSM_Update(); } if (!timeout.HasElapsed()) { result= PSM_GetIsConnected() ? PSMResult_Success : PSMResult_Error; } else { result= PSMResult_Timeout; } } return result; }
void _F90_PAUSE( char *str1, int len1 ) { fcd_t fcd1; fcd1.ptr = str1; fcd1.len = len1; _PAUSE( fcd1 ); }