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