|
|
|
@ -16,6 +16,30 @@ |
|
|
|
|
|
|
|
namespace Service::AM::Applets { |
|
|
|
|
|
|
|
struct ErrorCode { |
|
|
|
u32 error_category{}; |
|
|
|
u32 error_number{}; |
|
|
|
|
|
|
|
static constexpr ErrorCode FromU64(u64 error_code) { |
|
|
|
return { |
|
|
|
.error_category{static_cast<u32>(error_code >> 32)}, |
|
|
|
.error_number{static_cast<u32>(error_code & 0xFFFFFFFF)}, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
static constexpr ErrorCode FromResultCode(ResultCode result) { |
|
|
|
return { |
|
|
|
.error_category{2000 + static_cast<u32>(result.module.Value())}, |
|
|
|
.error_number{result.description.Value()}, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
constexpr ResultCode ToResultCode() const { |
|
|
|
return ResultCode{static_cast<ErrorModule>(error_category - 2000), error_number}; |
|
|
|
} |
|
|
|
}; |
|
|
|
static_assert(sizeof(ErrorCode) == 0x8, "ErrorCode has incorrect size."); |
|
|
|
|
|
|
|
#pragma pack(push, 4)
|
|
|
|
struct ShowError { |
|
|
|
u8 mode; |
|
|
|
@ -76,12 +100,7 @@ void CopyArgumentData(const std::vector<u8>& data, T& variable) { |
|
|
|
} |
|
|
|
|
|
|
|
ResultCode Decode64BitError(u64 error) { |
|
|
|
const auto description = (error >> 32) & 0x1FFF; |
|
|
|
auto module = error & 0x3FF; |
|
|
|
if (module >= 2000) |
|
|
|
module -= 2000; |
|
|
|
module &= 0x1FF; |
|
|
|
return {static_cast<ErrorModule>(module), static_cast<u32>(description)}; |
|
|
|
return ErrorCode::FromU64(error).ToResultCode(); |
|
|
|
} |
|
|
|
|
|
|
|
} // Anonymous namespace
|
|
|
|
|