applet_error: Fix 64-bit error code conversion
This commit is contained in:
parent
562d2aa3d6
commit
9cb376f8c2
|
@ -16,6 +16,30 @@
|
||||||
|
|
||||||
namespace Service::AM::Applets {
|
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)
|
#pragma pack(push, 4)
|
||||||
struct ShowError {
|
struct ShowError {
|
||||||
u8 mode;
|
u8 mode;
|
||||||
|
@ -76,12 +100,7 @@ void CopyArgumentData(const std::vector<u8>& data, T& variable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultCode Decode64BitError(u64 error) {
|
ResultCode Decode64BitError(u64 error) {
|
||||||
const auto description = (error >> 32) & 0x1FFF;
|
return ErrorCode::FromU64(error).ToResultCode();
|
||||||
auto module = error & 0x3FF;
|
|
||||||
if (module >= 2000)
|
|
||||||
module -= 2000;
|
|
||||||
module &= 0x1FF;
|
|
||||||
return {static_cast<ErrorModule>(module), static_cast<u32>(description)};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
Reference in New Issue