Files
viseq/include/libremidi/backends/jack/error_domain.hpp
T

79 lines
2.3 KiB
C++
Raw Normal View History

2024-10-28 19:24:18 +01:00
#pragma once
#include <libremidi/error.hpp>
#if __has_include(<weakjack/weak_libjack.h>)
#include <weakjack/weak_libjack.h>
#elif __has_include(<weak_libjack.h>)
#include <weak_libjack.h>
#elif __has_include(<jack/jack.h> )
#include <jack/jack.h>
#include <jack/midiport.h>
#include <jack/ringbuffer.h>
#endif
NAMESPACE_LIBREMIDI
2024-10-28 19:24:18 +01:00
{
struct jack_error_domain : public stdx::error_domain
{
public:
constexpr jack_error_domain() noexcept
: error_domain{{0xc714ea32b705080aULL, 0xe409a437daf5f921ULL}}
{
}
stdx::string_ref name() const noexcept override { return "jack"; }
bool equivalent(const stdx::error& lhs, const stdx::error& rhs) const noexcept override
{
if (lhs.domain() == rhs.domain())
return error_cast<jack_status_t>(lhs) == error_cast<jack_status_t>(rhs);
return false;
}
stdx::string_ref message(const stdx::error& e) const noexcept override
{
const auto status = error_cast<jack_status_t>(e);
if (status == jack_status_t{})
2024-10-28 19:24:18 +01:00
return "Success";
if (status & JackInvalidOption)
2024-10-28 19:24:18 +01:00
return "The operation contained an invalid or unsupported option";
if (status & JackServerFailed)
2024-10-28 19:24:18 +01:00
return "Unable to connect to the JACK server";
if (status & JackServerError)
2024-10-28 19:24:18 +01:00
return "Communication error with the JACK server";
if (status & JackNoSuchClient)
2024-10-28 19:24:18 +01:00
return "Requested client does not exist";
if (status & JackLoadFailure)
2024-10-28 19:24:18 +01:00
return "Unable to load internal client";
if (status & JackInitFailure)
2024-10-28 19:24:18 +01:00
return "Unable to initialize client";
if (status & JackShmFailure)
2024-10-28 19:24:18 +01:00
return "Unable to access shared memory";
if (status & JackVersionError)
2024-10-28 19:24:18 +01:00
return "Client's protocol version does not match";
if (status & JackBackendError)
2024-10-28 19:24:18 +01:00
return "Backend error";
if (status & JackClientZombie)
2024-10-28 19:24:18 +01:00
return "Client zombified failure";
if (status & JackFailure)
2024-10-28 19:24:18 +01:00
return "Failure";
if (status & JackNameNotUnique)
2024-10-28 19:24:18 +01:00
return "The desired client name was not unique";
// Can't happen in libremidi as we set JackNoStartServer
if (status & JackServerStarted)
2024-10-28 19:24:18 +01:00
return "Server was started";
return "Unknown JACK status code";
}
};
inline stdx::error from_jack_status(jack_status_t ret) noexcept
{
static constexpr jack_error_domain domain{};
return {ret, domain};
}
}