|
@@ -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;
|
|
|
|
|
- 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
|
|
} // Anonymous namespace
|