97 lines
4.0 KiB
C++
97 lines
4.0 KiB
C++
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
|
|
#include "OculusXRColocationUtil.h"
|
|
|
|
namespace OculusXRColocation
|
|
{
|
|
EColocationResult GetResult(ovrpResult OVRResult)
|
|
{
|
|
switch (OVRResult)
|
|
{
|
|
case ovrpSuccess:
|
|
return EColocationResult::Success;
|
|
case ovrpSuccess_ColocationDiscoveryAlreadyAdvertising:
|
|
return EColocationResult::Success_AlreadyAdvertising;
|
|
case ovrpSuccess_ColocationDiscoveryAlreadyDiscovering:
|
|
return EColocationResult::Success_AlreadyDiscovering;
|
|
case ovrpFailure:
|
|
return EColocationResult::Failure;
|
|
case ovrpFailure_InvalidParameter:
|
|
return EColocationResult::FailureInvalidParameter;
|
|
case ovrpFailure_DataIsInvalid:
|
|
return EColocationResult::FailureDataIsInvalid;
|
|
case ovrpFailure_SpacePermissionInsufficient:
|
|
return EColocationResult::InsufficientPermissions;
|
|
case ovrpFailure_SpaceCloudStorageDisabled:
|
|
return EColocationResult::CloudStorageDisabled;
|
|
case ovrpFailure_SpaceNetworkTimeout:
|
|
return EColocationResult::NetworkTimeout;
|
|
case ovrpFailure_SpaceNetworkRequestFailed:
|
|
return EColocationResult::NetworkRequestFailed;
|
|
case ovrpFailure_ColocationDiscoveryNetworkFailed:
|
|
return EColocationResult::NetworkRequestFailed;
|
|
case ovrpFailure_ColocationDiscoveryNoDiscoveryMethodAvailable:
|
|
return EColocationResult::NoDiscoveryMethodAvailable;
|
|
default:
|
|
return OVRP_SUCCESS(OVRResult) ? EColocationResult::Success : EColocationResult::Failure;
|
|
}
|
|
}
|
|
|
|
EColocationResult GetResult(XrResult XRResult)
|
|
{
|
|
switch (XRResult)
|
|
{
|
|
case XR_SUCCESS:
|
|
return EColocationResult::Success;
|
|
case XR_COLOCATION_DISCOVERY_ALREADY_ADVERTISING_META:
|
|
return EColocationResult::Success_AlreadyAdvertising;
|
|
case XR_COLOCATION_DISCOVERY_ALREADY_DISCOVERING_META:
|
|
return EColocationResult::Success_AlreadyDiscovering;
|
|
case XR_ERROR_RUNTIME_FAILURE:
|
|
return EColocationResult::Failure;
|
|
case XR_ERROR_VALIDATION_FAILURE:
|
|
return EColocationResult::FailureInvalidParameter;
|
|
case XR_ERROR_SPACE_PERMISSION_INSUFFICIENT_META:
|
|
return EColocationResult::InsufficientPermissions;
|
|
case XR_ERROR_SPACE_CLOUD_STORAGE_DISABLED_FB:
|
|
return EColocationResult::CloudStorageDisabled;
|
|
case XR_ERROR_SPACE_NETWORK_TIMEOUT_FB:
|
|
return EColocationResult::NetworkTimeout;
|
|
case XR_ERROR_SPACE_NETWORK_REQUEST_FAILED_FB:
|
|
return EColocationResult::NetworkRequestFailed;
|
|
case XR_ERROR_COLOCATION_DISCOVERY_NETWORK_FAILED_META:
|
|
return EColocationResult::NetworkRequestFailed;
|
|
case XR_ERROR_COLOCATION_DISCOVERY_NO_DISCOVERY_METHOD_META:
|
|
return EColocationResult::NoDiscoveryMethodAvailable;
|
|
default:
|
|
return XR_SUCCEEDED(XRResult) ? EColocationResult::Success : EColocationResult::Failure;
|
|
}
|
|
}
|
|
|
|
const FString& ToString(EColocationResult Result)
|
|
{
|
|
// We could use UEnum::GetDisplayValueAsText but that will allocate!
|
|
const static TMap<EColocationResult, FString> Mapping = {
|
|
{ EColocationResult::Success, "Success" },
|
|
{ EColocationResult::Success_AlreadyAdvertising, "Success_AlreadyAdvertising" },
|
|
{ EColocationResult::Success_AlreadyDiscovering, "Success_AlreadyDiscovering" },
|
|
{ EColocationResult::Failure, "Failure" },
|
|
{ EColocationResult::FailureDataIsInvalid, "FailureDataIsInvalid" },
|
|
{ EColocationResult::FailureInvalidParameter, "FailureInvalidParameter" },
|
|
{ EColocationResult::InsufficientPermissions, "InsufficientPermissions" },
|
|
{ EColocationResult::CloudStorageDisabled, "CloudStorageDisabled" },
|
|
{ EColocationResult::NetworkRequestFailed, "NetworkRequestFailed" },
|
|
{ EColocationResult::NetworkTimeout, "NetworkTimeout" },
|
|
{ EColocationResult::NoDiscoveryMethodAvailable, "NoDiscoveryMethodAvailable" }
|
|
};
|
|
|
|
const static FString Invalid = "EColocationResult(Unknown)";
|
|
return Mapping.Contains(Result) ? Mapping[Result] : Invalid;
|
|
}
|
|
|
|
bool IsResultSuccess(EColocationResult Result)
|
|
{
|
|
return Result == EColocationResult::Success || Result == EColocationResult::Success_AlreadyAdvertising || Result == EColocationResult::Success_AlreadyDiscovering;
|
|
}
|
|
} // namespace OculusXRColocation
|